You are on page 1of 520

CR800/CR850 Measurement and Control System

Operators Manual

Issued: 25.7.11

Copyright 2000-2011 Campbell Scientific Inc. Printed under Licence by Campbell Scientific Ltd.

CSL 632

Guarantee
This equipment is guaranteed against defects in materials and workmanship. This guarantee applies for thirty-six months from date of delivery. We will repair or replace products which prove to be defective during the guarantee period provided they are returned to us prepaid. The guarantee will not apply to:

Equipment which has been modified or altered in any way without the written permission of Campbell Scientific Batteries Any product which has been subjected to misuse, neglect, acts of God or damage in transit.

Campbell Scientific will return guaranteed equipment by surface carrier prepaid. Campbell Scientific will not reimburse the claimant for costs incurred in removing and/or reinstalling equipment. This guarantee and the Companys obligation thereunder is in lieu of all other guarantees, expressed or implied, including those of suitability and fitness for a particular purpose. Campbell Scientific is not liable for consequential damage. Please inform us before returning equipment and obtain a Repair Reference Number whether the repair is under guarantee or not. Please state the faults as clearly as possible, and if the product is out of the guarantee period it should be accompanied by a purchase order. Quotations for repairs can be given on request. It is the policy of Campbell Scientific to protect the health of its employees and provide a safe working environment, in support of this policy a Declaration of Hazardous Material and Decontamination form will be issued for completion. When returning equipment, the Repair Reference Number must be clearly marked on the outside of the package. Complete the Declaration of Hazardous Material and Decontamination form and ensure a completed copy is returned with your goods. Please note your Repair may not be processed if you do not include a copy of this form and Campbell Scientific Ltd reserves the right to return goods at the customers expense. Note that goods sent air freight are subject to Customs clearance fees which Campbell Scientific will charge to customers. In many cases, these charges are greater than the cost of the repair.

Campbell Scientific Ltd, Campbell Park, 80 Hathern Road, Shepshed, Loughborough, LE12 9GX, UK Tel: +44 (0) 1509 601141 Fax: +44 (0) 1509 601091 Email: support@campbellsci.co.uk www.campbellsci.co.uk

PLEASE READ FIRST


About this manual
Please note that this manual was originally produced by Campbell Scientific Inc. primarily for the North American market. Some spellings, weights and measures may reflect this origin. Some useful conversion factors: Area: 1 in2 (square inch) = 645 mm2 Length: 1 in. (inch) = 25.4 mm 1 ft (foot) = 304.8 mm 1 yard = 0.914 m 1 mile = 1.609 km Mass: 1 oz. (ounce) = 28.35 g 1 lb (pound weight) = 0.454 kg 1 psi (lb/in2) = 68.95 mb 1 UK pint = 568.3 ml 1 UK gallon = 4.546 litres 1 US gallon = 3.785 litres

Pressure: Volume:

In addition, while most of the information in the manual is correct for all countries, certain information is specific to the North American market and so may not be applicable to European users. Differences include the U.S standard external power supply details where some information (for example the AC transformer input voltage) will not be applicable for British/European use. Please note, however, that when a power supply adapter is ordered it will be suitable for use in your country. Reference to some radio transmitters, digital cell phones and aerials may also not be applicable according to your locality. Some brackets, shields and enclosure options, including wiring, are not sold as standard items in the European market; in some cases alternatives are offered. Details of the alternatives will be covered in separate manuals. Part numbers prefixed with a # symbol are special order parts for use with non-EU variants or for special installations. Please quote the full part number with the # when ordering.

Recycling information
At the end of this products life it should not be put in commercial or domestic refuse but sent for recycling. Any batteries contained within the product or used during the products life should be removed from the product and also be sent to an appropriate recycling facility. Campbell Scientific Ltd can advise on the recycling of the equipment and in some cases arrange collection and the correct disposal of it, although charges may apply for some items or territories. For further advice or support, please contact Campbell Scientific Ltd, or your local agent.

Campbell Scientific Ltd, Campbell Park, 80 Hathern Road, Shepshed, Loughborough, LE12 9GX, UK Tel: +44 (0) 1509 601141 Fax: +44 (0) 1509 601091 Email: support@campbellsci.co.uk www.campbellsci.co.uk

Table of Contents
Section 1. Section 2.
2.1

Introduction ............................................... 1 Quickstart Tutorial .................................... 3

Primer - CR800 Data Acquisition ..................................................................... 3 2.1.1 Components of a Data Acquisition System .............................................. 3 2.1.2 CR800 Module and Power Supply............................................................ 4 2.1.3 Sensors...................................................................................................... 6 2.1.4 Digital I/O Ports...................................................................................... 11 2.1.5 Input Expansion Modules ....................................................................... 12 2.2 Exercise - Measuring a Thermocouple ............................................................ 13 2.2.1 What You Will Need .............................................................................. 13 2.2.2 Hardware Set-Up .................................................................................... 13 2.2.3 PC200W Software Setup ........................................................................ 14 2.2.4 Write Program with Short Cut ................................................................ 16 2.2.5 Send Program and Collect Data with PC200W ...................................... 21

Section 3.
3.1

System Overview..................................... 27

CR800 Datalogger........................................................................................... 27 3.1.1 Sensor Support........................................................................................ 28 3.1.2 CR800 Wiring Panel............................................................................... 29 3.1.3 Power Requirements ............................................................................... 32 3.1.4 Programming .......................................................................................... 33 3.1.5 Memory and Data Storage ...................................................................... 34 3.1.6 Data Retrieval ......................................................................................... 35 3.1.7 Communications ..................................................................................... 36 3.1.8 Security ................................................................................................... 38 3.1.9 Maintenance............................................................................................ 39 3.2 PC Support Software ....................................................................................... 40 3.3 CR800 Specifications ...................................................................................... 41

Section 4.
4.1

Measurements ......................................... 43

Time ................................................................................................................ 43 4.1.1 Time Stamps ........................................................................................... 43 4.2 Voltage ............................................................................................................ 44 4.2.1 Input Limits ............................................................................................ 45 4.2.2 Reducing Error........................................................................................ 46 4.2.3 Measurement Sequence .......................................................................... 47 4.2.4 Measurement Accuracy .......................................................................... 48 4.2.5 Voltage Range......................................................................................... 50 4.2.6 Offset Voltage Compensation................................................................. 52 4.2.7 Integration............................................................................................... 54 4.2.8 Signal Settling Time ............................................................................... 56 4.2.9 Self-Calibration....................................................................................... 60 4.2.10 Time Skew Between Measurements ....................................................... 65 4.3 Bridge Resistance ............................................................................................ 65 4.3.1 Measurements Requiring ac Excitation .................................................. 68 4.3.2 Strain Calculations.................................................................................. 68

Table of Contents 4.4 4.5 Thermocouple..................................................................................................70 Pulse ................................................................................................................70 4.5.1 Pulse Input Channels (P1 - P2) ...............................................................71 4.5.2 Pulse Input on Digital I/O Channels C1 - C4 ..........................................73 4.5.3 Pulse Measurement Tips .........................................................................74 4.5.4 Pulse Measurement Problems .................................................................76 4.6 Period Averaging .............................................................................................78 4.7 SDI-12 Recording............................................................................................79 4.8 RS-232 and TTL Recording ............................................................................79 4.9 Field Calibration of Linear Sensor...................................................................80 4.10 Cabling Effects ................................................................................................80 4.10.1 Analog Sensor Cables .............................................................................80 4.10.2 Pulse Sensors...........................................................................................81 4.10.3 RS-232 Sensors .......................................................................................81 4.10.4 SDI-12 Sensors .......................................................................................81 4.11 Synchronizing Sensor Measurements ..............................................................81

Section 5.
5.1 5.2 5.3 5.4

Measurement and Control Peripherals..83

Analog Input Expansion Modules ...................................................................83 Pulse Input Expansion Modules ......................................................................83 Serial Input Expansion Modules......................................................................83 Control Outputs ...............................................................................................83 5.4.1 Digital I/O Ports ("Control Ports")..........................................................84 5.4.2 Relays and Relay Drivers........................................................................84 5.4.3 Component Built Relays .........................................................................84 5.5 Analog Control / Output Devices ....................................................................86 5.6 TIMs ................................................................................................................86 5.7 Vibrating Wire .................................................................................................86 5.8 Low-level ac ....................................................................................................86

Section 6.
6.1 6.2 6.3

Power Sources.........................................87

Power Requirement .........................................................................................87 Calculating Power Consumption .....................................................................87 Power Supplies ................................................................................................87 6.3.1 External Batteries ....................................................................................88 6.4 Vehicle Power Connections.............................................................................88 6.5 Powering Sensors and Devices ........................................................................88 6.5.1 Switched Excitation ................................................................................89 6.5.2 Continuous Regulated (5 Volt) ...............................................................89 6.5.3 Continuous Unregulated (Nominal 12 Volt) ...........................................89 6.5.4 Switched Unregulated (Nominal 12 Volt)...............................................89

Section 7.
7.1

Grounding ................................................91

ESD Protection ................................................................................................91 7.1.1 Lightning Protection................................................................................92 7.2 Single-Ended Measurement Reference............................................................94 7.3 Ground Potential Differences ..........................................................................94 7.3.1 Soil Temperature Thermocouple.............................................................94 7.3.2 External Signal Conditioner ....................................................................95 7.4 Ground Looping in Ionic Measurements .........................................................95

ii

Table of Contents

Section 8.
8.1 8.2

CR800 Configuration............................... 97

DevConfig ....................................................................................................... 97 Sending the Operating System ........................................................................ 98 8.2.1 Sending OS with DevConfig .................................................................. 99 8.2.2 Sending OS with Program Send ........................................................... 100 8.2.3 Sending OS with External Memory ...................................................... 101 8.3 Settings .......................................................................................................... 101 8.3.1 Settings via DevConfig ......................................................................... 101 8.3.2 Settings via CRBASIC.......................................................................... 108 8.3.3 Durable Settings.................................................................................... 108 8.3.4 Program Run Priorities ......................................................................... 111 8.3.5 Network Planner ................................................................................... 112

Section 9.
9.1

Programming ......................................... 115

Writing and Editing Programs....................................................................... 115 9.1.1 Short Cut Editor and Program Generator.............................................. 115 9.1.2 CRBASIC Editor .................................................................................. 115 9.2 Sending Programs.......................................................................................... 117 9.2.1 Preserving Data at Program Send ......................................................... 117 9.3 Numerical Formats ........................................................................................ 118 9.4 Structure ........................................................................................................ 120 9.5 Single-line Declarations ................................................................................ 122 9.5.1 Variables ............................................................................................... 122 9.5.2 Constants............................................................................................... 129 9.5.3 Alias and Unit Declarations .................................................................. 130 9.6 Declared Sequences....................................................................................... 131 9.6.1 Data Tables ........................................................................................... 131 9.6.2 Subroutines ........................................................................................... 138 9.6.3 Incidental Sequences............................................................................. 139 9.7 Execution and Task Priority .......................................................................... 139 9.7.1 Pipeline Mode ....................................................................................... 140 9.7.2 Sequential Mode ................................................................................... 141 9.8 Execution Timing .......................................................................................... 142 9.8.1 Scan() / NextScan ................................................................................. 142 9.8.2 SlowSequence / EndSequence .............................................................. 143 9.8.3 SubScan() / NextSubScan ..................................................................... 144 9.8.4 Scan Priorities in Sequential Mode....................................................... 144 9.9 Instructions .................................................................................................... 146 9.9.1 Measurement and Data Storage Processing .......................................... 146 9.9.2 Parameter Types ................................................................................... 147 9.9.3 Names in Parameters ............................................................................ 147 9.9.4 Expressions in Parameters .................................................................... 148 9.9.5 Arrays of Multipliers and Offsets ......................................................... 148 9.10 Expressions.................................................................................................... 149 9.10.1 Floating Point Arithmetic ..................................................................... 150 9.10.2 Mathematical Operations ...................................................................... 150 9.10.3 Expressions with Numeric Data Types ................................................. 151 9.10.4 Logical Expressions.............................................................................. 153 9.10.5 String Expressions ................................................................................ 155 9.11 Program Access to Data Tables..................................................................... 156 9.12 System Signatures ......................................................................................... 158

iii

Table of Contents 9.13 Tips ................................................................................................................158 9.13.1 Use of Variable Arrays to Conserve Code Space..................................158 9.13.2 Use of Move() to Conserve Code Space ...............................................159

Section 10. CRBASIC Programming Instructions ..161


10.1 Program Declarations ....................................................................................161 10.1.1 Variable Declarations & Modifiers .......................................................162 10.1.2 Constant Declarations ...........................................................................163 10.2 Data Table Declarations ................................................................................163 10.2.1 Data Table Modifiers ............................................................................163 10.2.2 Data Destinations ..................................................................................164 10.2.3 Final Data Storage (Output) Processing................................................164 10.2.4 Histograms ............................................................................................166 10.3 Single Execution at Compile .........................................................................167 10.4 Program Control Instructions.........................................................................168 10.4.1 Common Program Controls ..................................................................168 10.4.2 Advanced Program Controls .................................................................170 10.5 Measurement Instructions..............................................................................171 10.5.1 Diagnostics............................................................................................171 10.5.2 Voltage..................................................................................................172 10.5.3 Thermocouples......................................................................................172 10.5.4 Bridge Measurements............................................................................173 10.5.5 Excitation ..............................................................................................173 10.5.6 Pulse......................................................................................................174 10.5.7 Digital I/O .............................................................................................174 10.5.8 SDI-12...................................................................................................175 10.5.9 Specific Sensors ....................................................................................176 10.5.10 Peripheral Device Support ....................................................................178 10.6 Processing and Math Instructions ..................................................................180 10.6.1 Mathematical Operators ........................................................................180 10.6.2 Logical Operators..................................................................................183 10.6.3 Trigonometric Functions .......................................................................184 10.6.4 Arithmetic Functions.............................................................................185 10.6.5 Integrated Processing ............................................................................187 10.6.6 Spatial Processing .................................................................................187 10.6.7 Other Functions.....................................................................................188 10.7 String Functions.............................................................................................189 10.7.1 String Operations ..................................................................................189 10.7.2 String Commands..................................................................................190 10.8 Clock Functions .............................................................................................192 10.9 Voice Modem Instructions.............................................................................193 10.10 Custom Keyboard and Display Menus ..........................................................194 10.11 Serial Input / Output ......................................................................................195 10.12 Peer-to-Peer PakBus Communications ..........................................................196 10.13 Variable Management....................................................................................201 10.14 File Management ...........................................................................................201 10.15 Data Table Access and Management.............................................................203 10.16 Information Services......................................................................................204 10.17 Modem Control..............................................................................................206 10.18 SCADA..........................................................................................................207 10.19 Calibration Functions.....................................................................................207 10.20 Satellite Systems............................................................................................208 10.20.1 Argos.....................................................................................................208 10.20.2 GOES ....................................................................................................209

iv

Table of Contents 10.20.3 OMNISAT ............................................................................................ 209 10.20.4 INMARSAT-C...................................................................................... 210 10.21 User Defined Functions................................................................................. 210

Section 11. Programming Resource Library........... 211


11.1 Field Calibration of Linear Sensors (FieldCal) ............................................. 211 11.1.1 CAL Files.............................................................................................. 211 11.1.2 CRBASIC Programming ...................................................................... 212 11.1.3 Calibration Wizard Overview ............................................................... 212 11.1.4 Manual Calibration Overview............................................................... 212 11.1.5 FieldCal() Demonstration Programs ..................................................... 214 11.1.6 FieldCalStrain() Demonstration Program ............................................. 220 11.2 Information Services ..................................................................................... 225 11.2.1 PakBus Over TCP/IP and Callback ...................................................... 226 11.2.2 HTTP Web Server ................................................................................ 226 11.2.3 FTP Server ............................................................................................ 230 11.2.4 FTP Client............................................................................................. 230 11.2.5 Telnet .................................................................................................... 230 11.2.6 SNMP ................................................................................................... 230 11.2.7 Ping....................................................................................................... 231 11.2.8 Micro-Serial Server............................................................................... 231 11.2.9 Modbus TCP/IP .................................................................................... 231 11.2.10 DHCP.................................................................................................... 231 11.2.11 DNS ...................................................................................................... 231 11.2.12 SMTP.................................................................................................... 231 11.3 SDI-12 Sensor Support.................................................................................. 232 11.3.1 SDI-12 Transparent Mode .................................................................... 232 11.3.2 SDI-12 Programmed Modes ................................................................. 237 11.3.3 SDI-12 Power Considerations............................................................... 245 11.4 Subroutines.................................................................................................... 247 11.5 Wind Vector .................................................................................................. 248 11.5.1 OutputOpt Parameters........................................................................... 248 11.5.2 Wind Vector Processing ....................................................................... 249 11.6 Custom Menus............................................................................................... 255 11.7 Conditional Compilation ............................................................................... 260 11.8 Serial I/O ....................................................................................................... 262 11.8.1 Introduction........................................................................................... 263 11.8.2 I/O Ports................................................................................................ 264 11.8.3 Protocols ............................................................................................... 264 11.8.4 Terms .................................................................................................... 264 11.8.5 CRBASIC Programming ...................................................................... 266 11.8.6 Testing Applications ............................................................................. 273 11.8.7 Q & A ................................................................................................... 281 11.9 TrigVar and DisableVar - Controlling Data Output and Processing ............. 283 11.10 NSEC Data Type ........................................................................................... 285 11.10.1 NSEC Options....................................................................................... 285 11.11 Bool8 Data Type ........................................................................................... 289 11.12 Burst .............................................................................................................. 293 11.12.1 Single Channel Burst ............................................................................ 293 11.12.2 Parallel Channel Burst .......................................................................... 296 11.13 String Operations........................................................................................... 300 11.13.1 String Operators.................................................................................... 300 11.13.2 String Concatenation............................................................................. 302 11.13.3 NULL Character ................................................................................... 302 11.13.4 Inserting String Characters ................................................................... 303

Table of Contents 11.13.5 Extracting String Characters .................................................................303 11.13.6 String Use of ASCII / ANSII Codes .....................................................303 11.13.7 Formatting Strings.................................................................................304 11.13.8 Formatting String Hexadecimal Variables ............................................304 11.14 Data Tables ....................................................................................................305 11.15 PulseCountReset Instruction..........................................................................306 11.16 Program Signatures........................................................................................306 11.16.1 Text Signature .......................................................................................306 11.16.2 Binary Runtime Signature.....................................................................306 11.16.3 Executable Code Signatures..................................................................306 11.17 Advanced Programming Examples................................................................307 11.17.1 Miscellaneous Features .........................................................................307 11.17.2 Running Average and Total of Rain......................................................310 11.17.3 Use of Multiple Scans ...........................................................................310 11.17.4 Groundwater Pump Test .......................................................................311 11.17.5 Scaling Array ........................................................................................314 11.17.6 Conditional Output................................................................................315 11.17.7 Capturing Events...................................................................................317 11.18 PRT Measurement .........................................................................................318 11.18.1 PRT Calculation Standards ...................................................................318 11.18.2 Measuring PT100s (100 Ohm PRTs) ....................................................321 11.19 Running Average ...........................................................................................327

Section 12. Memory and Final Data Storage ...........331


12.1 Storage Media................................................................................................331 12.1.1 Data Storage..........................................................................................334 12.2 Memory Conservation ...................................................................................339 12.3 Memory Reset................................................................................................340 12.3.1 Full Memory Reset................................................................................340 12.3.2 Program Send Reset ..............................................................................340 12.3.3 Manual Data Table Reset ......................................................................340 12.3.4 Formatting Drives .................................................................................340 12.4 File Management ...........................................................................................341 12.4.1 File Attributes .......................................................................................342 12.4.2 Data Preservation ..................................................................................342 12.4.3 External Memory Power-up ..................................................................343 12.5 File Names.....................................................................................................346 12.6 File System Errors .........................................................................................347

Section 13. Telecomms and Data Retrieval.............349


13.1 13.2 13.3 Hardware and Carrier Signal .........................................................................349 Protocols ........................................................................................................350 Initiating Telecomms (Callback) ...................................................................350

Section 14. PakBus Overview ..................................353


14.1 PakBus Addresses..........................................................................................353 14.2 Nodes: Leaf Nodes and Routers ....................................................................353 14.2.1 Router and Leaf Node Configuration....................................................354 14.3 Linking PakBus Nodes: Neighbor Discovery................................................354 14.3.1 Hello-message (two-way exchange) .....................................................355 14.3.2 Beacon (one-way broadcast) .................................................................355 14.3.3 Hello-request (one-way broadcast) .......................................................355 14.3.4 Neighbor Lists.......................................................................................355

vi

Table of Contents 14.3.5 Adjusting Links..................................................................................... 355 14.3.6 Maintaining Links................................................................................. 356 14.4 PakBus Troubleshooting ............................................................................... 356 14.4.1 Link Integrity ........................................................................................ 356 14.4.2 Ping....................................................................................................... 357 14.4.3 Traffic Flow .......................................................................................... 357 14.5 LoggerNet Device Map Configuration.......................................................... 358 14.6 PakBus LAN Example .................................................................................. 358 14.6.1 LAN Wiring.......................................................................................... 358 14.6.2 LAN Setup ............................................................................................ 359 14.6.3 LoggerNet Setup ................................................................................... 362

Section 15. Alternate Telecommunications ............ 365


15.1 DNP3............................................................................................................. 365 15.1.1 Overview............................................................................................... 365 15.1.2 Programming for DNP3........................................................................ 365 15.2 Modbus.......................................................................................................... 368 15.2.1 Overview............................................................................................... 368 15.2.2 Terminology ......................................................................................... 369 15.2.3 Programming for Modbus..................................................................... 370 15.2.4 Troubleshooting .................................................................................... 372 15.2.5 Modbus over IP..................................................................................... 372 15.2.6 Modbus tidBytes ................................................................................... 372

Section 16. Support Software .................................. 375 Section 17. Using the Keyboard Display................. 377
17.1 Data Display .................................................................................................. 379 17.1.1 Real Time Tables and Graphs............................................................... 380 17.1.2 Real Time Custom ................................................................................ 381 17.1.3 Final Storage Tables ............................................................................. 382 17.2 Run/Stop Program ......................................................................................... 383 17.3 File Display ................................................................................................... 384 17.3.1 File: Edit ............................................................................................... 385 17.4 Ports and Status ............................................................................................. 386 17.5 Settings .......................................................................................................... 386 17.5.1 Set Time / Date ..................................................................................... 387 17.5.2 PakBus Settings .................................................................................... 387 17.6 Configure Display ......................................................................................... 387

Section 18. Care and Maintenance .......................... 389


18.1 18.2 18.3 18.4 18.5 Temperature Range ....................................................................................... 389 Moisture Protection ....................................................................................... 389 Enclosures ..................................................................................................... 389 Replacing the Internal Battery....................................................................... 390 Repair ............................................................................................................ 393

Section 19. Troubleshooting .................................... 395


19.1 Programming ................................................................................................. 395 19.1.1 Status Table as Debug Resource........................................................... 395 19.1.2 Program Does Not Compile.................................................................. 399

vii

Table of Contents 19.1.3 Program Compiles / Does Not Run Correctly.......................................399 19.1.4 Troubleshooting -- NAN and INF.......................................................399 19.2 Communications ............................................................................................402 19.2.1 RS-232 ..................................................................................................402 19.2.2 Communicating with Multiple PC Programs ........................................403 19.3 Memory Errors ..............................................................................................403 19.3.1 CommsMemFree(1) ..............................................................................403 19.3.2 CommsMemFree(2) ..............................................................................404 19.3.3 CommsMemFree(3) ..............................................................................405 19.4 Power Supplies ..............................................................................................405 19.4.1 Overview...............................................................................................405 19.4.2 Troubleshooting Power at a Glance ......................................................406 19.4.3 Diagnosis and Fix Procedures ...............................................................406 19.5 Terminal Emulator.........................................................................................411 19.5.1 Serial Talk Through and Sniffer............................................................414

Appendices Appendix A. Glossary ...............................................415


A.1 Terms .............................................................................................................415 A.2 Concepts ........................................................................................................432 A.2.1 Accuracy, Precision, and Resolution.....................................................432

Appendix B. Status Table and Settings...................433 Appendix C. Serial Port Pin Outs.............................455
C.1 CS I/O Communications Port ........................................................................455 C.2 RS-232 Communications Port .......................................................................455 C.2.1 Pin-Out..................................................................................................455 C.2.2 Power States..........................................................................................456

Appendix D. ASCII / ANSI Table ...............................459 Appendix E. FP2 Data Format ..................................463 Appendix F. Software................................................465
Starter Software .............................................................................................465 F.1.1 Short Cut ...............................................................................................465 F.1.2 PC200W ................................................................................................465 F.2 Datalogger Support Software.........................................................................465 F.2.1 PC400....................................................................................................466 F.2.2 LoggerNet Suite ....................................................................................466 F.2.3 RTDAQ.................................................................................................466 F.2.4 PDA Software .......................................................................................466 F.2.5 VisualWeather.......................................................................................466 F.3 LoggerNet Clients..........................................................................................467 F.4 Software Tools...............................................................................................468 F.4.1 Network Planner....................................................................................468 F.4.2 Device Configuration Utility (DevConfig) ...........................................468 F.1

viii

Table of Contents F.4.3 Calibration Wizard................................................................................ 468 F.4.4 PakBus Graph ....................................................................................... 468 F.5 Software Development Kits .......................................................................... 469

Appendix G. Sensors and Peripherals .................... 471


G.1 Sensors .......................................................................................................... 471 G.2 Dataloggers.................................................................................................... 471 G.3 Power Supplies .............................................................................................. 471 G.3.1 Battery / Regulator Combination .......................................................... 472 G.3.2 Batteries ................................................................................................ 472 G.3.3 Regulators ............................................................................................. 472 G.3.4 Primary Power Sources......................................................................... 472 G.4 Enclosures (Peripherals)................................................................................ 473 G.5 Analog Multiplexers...................................................................................... 473 G.6 Relay Drivers................................................................................................. 473 G.7 Digital I/O (Control Port) Expansion ............................................................ 474 G.8 Continuous Analog Output (CAO) Modules................................................. 474 G.9 Pulse / Frequency Input Expansion Modules ................................................ 474 G.10 Serial Input / Output Peripherals ................................................................... 474 G.10.1 Serial Input Expansion Modules ........................................................... 474 G.10.2 CS I/O Serial Interfaces ........................................................................ 475 G.10.3 Serial Cables, Adaptors and Switches................................................... 475 G.11 Signal Conditioners ....................................................................................... 475 G.11.1 Resistive Bridge Modules ..................................................................... 476 G.11.2 Voltage Dividers ................................................................................... 476 G.11.3 Current Shunt Modules ......................................................................... 476 G.12 Terminal Strip Covers ................................................................................... 476 G.13 Telecommunications Hardware..................................................................... 477 G.13.1 Router and Leaf Node Hardware................................................................... 477 G.13.2 Telecommunications Options ............................................................... 478 G.13.3 Keyboard Display ................................................................................. 478 G.13.4 Network Links ...................................................................................... 478 G.14 Voltage Transient Suppressors ...................................................................... 479 G.15 Mass Storage Devices.................................................................................... 479 G.16 Cameras......................................................................................................... 479

Appendix H. CF & Records Number ........................ 481 Index ............................................................................ 483 List of Figures
FIGURE 1. FIGURE 2. FIGURE 3. FIGURE 4. FIGURE 5. FIGURE 6. FIGURE 7. FIGURE 8. FIGURE 9. FIGURE 10. FIGURE 11. Data Acquisition System Components................................................... 4 Wiring Panel .......................................................................................... 5 Analog Sensor Wired to Single-Ended Channel #1 ............................... 6 Analog Sensor Wired to Differential Channel #1 .................................. 7 Half Bridge Wiring -- Wind Vane Potentiometer .................................. 8 Full Bridge Wiring -- Pressure Transducer ............................................ 8 Pulse Sensor Output Signal Types ......................................................... 9 Pulse Input Wiring -- Anemometer Switch.......................................... 10 Location of RS-232 Ports..................................................................... 10 Use of RS-232 and Digital I/O when Reading RS-232 Devices .......... 11 Control and Monitoring with Digital I/O ............................................. 12

ix

Table of Contents FIGURE 12. Power and RS-232 Connections...........................................................14 FIGURE 13. PC200W Main Window .......................................................................15 FIGURE 14. Short Cut Temperature Sensor Folder..................................................17 FIGURE 15. Short Cut Thermocouple Wiring ..........................................................18 FIGURE 16. Short Cut Outputs Tab..........................................................................19 FIGURE 17. Short Cut Output Table Definition .......................................................20 FIGURE 18. Short Cut Compile Confirmation .........................................................20 FIGURE 19. PC200W Connect Button .....................................................................21 FIGURE 20. PC200W Monitor Data Tab - Public Table ..........................................22 FIGURE 21. PC200W Monitor Data Tab - Public Table ..........................................22 FIGURE 22. PC200W Monitor Data Tab - Public and OneMin Tables ...................23 FIGURE 23. PC200W Collect Data Tab ...................................................................24 FIGURE 24. PC200W View Data Utility..................................................................25 FIGURE 25. PC200W View Data Table ...................................................................26 FIGURE 26. PC200W View Data Graph ..................................................................26 FIGURE 27. Features of a Data Acquisition System ................................................27 FIGURE 28. Custom Menu Example ........................................................................38 FIGURE 29. PGI Amplifier.......................................................................................45 FIGURE 30. PGIA with Input Signal Decomposition...............................................45 FIGURE 31. Voltage Measurement Accuracy (0 to 40 C).....................................49 FIGURE 32. ac Power Line Noise Rejection Techniques .........................................55 FIGURE 33. Input Voltage Rise and Transient Decay..............................................57 FIGURE 34. Settling Time for Pressure Transducer .................................................60 FIGURE 35. Pulse Sensor Output Signal Types .......................................................71 FIGURE 36. Switch Closure Pulse Sensor................................................................71 FIGURE 37. Pulse Input Channels............................................................................72 FIGURE 38. Connecting Switch Closures to Digital I/O ..........................................75 FIGURE 39. Amplitude Reduction of Pulse-Count Waveform (before and after 1 s time constant filter) ...............................................................................78 FIGURE 40. Input Conditioning Circuit for Period Averaging.................................79 FIGURE 41. Circuit to Limit Control Port Input to 5 Volts ......................................80 FIGURE 42. Current Limiting Resistor in a Rain Gage Circuit................................81 FIGURE 43. Control Port Current Sourcing .............................................................84 FIGURE 44. Relay Driver Circuit with Relay...........................................................85 FIGURE 45. Power Switching without Relay ...........................................................85 FIGURE 46. Connecting to Vehicle Power Supply...................................................88 FIGURE 47. Schematic of Grounds ..........................................................................92 FIGURE 48. Lightning Protection Scheme ...............................................................93 FIGURE 49. Model of a Ground Loop with a Resistive Sensor................................96 FIGURE 50. Device Configuration Utility (DevConfig) ..........................................98 FIGURE 51. DevConfig OS Download Window......................................................99 FIGURE 52. Dialog Box Confirming OS Download ..............................................100 FIGURE 53. DevConfig Settings Editor .................................................................102 FIGURE 54. Summary of CR800 Configuration ....................................................102 FIGURE 55. DevConfig Deployment Tab ..............................................................103 FIGURE 56. DevConfig Deployment | ComPorts Settings Tab..............................105 FIGURE 57. DevConfig Deployment | Advanced Tab ...........................................107 FIGURE 58. DevConfig Logger Control Tab .........................................................108 FIGURE 59. "Include File" Settings via DevConfig ...............................................109 FIGURE 60. "Include File" Settings via PakBusGraph...........................................110 FIGURE 61. Network Planner Setup.......................................................................112 FIGURE 62. CRBASIC Editor Program Send File Control Window .....................118 FIGURE 63. Sequential Mode Scan Priority Flow Diagrams .................................146 FIGURE 64. Zero (Option 0)...................................................................................215 FIGURE 65. Quarter Bridge Strain Gage Schematic with RC Resistor Shunt........222 FIGURE 66. Strain Gage Shunt Calibration Started ...............................................224

Table of Contents FIGURE 67. Strain Gage Shunt Calibration Finished............................................. 224 FIGURE 68. Starting Zero Procedure ..................................................................... 224 FIGURE 69. Zero Procedure Finished .................................................................... 225 FIGURE 70. Preconfigured HTML Home Page ..................................................... 226 FIGURE 71. Home Page Created Using WebPageBegin () Instruction.................. 228 FIGURE 72. Monitor Web Page Generated By Datalogger Program ..................... 228 FIGURE 73. Entering SDI-12 Transparent Mode................................................... 233 FIGURE 74. Input Sample Vectors......................................................................... 251 FIGURE 75. Mean Wind Vector Graph.................................................................. 252 FIGURE 76. Standard Deviation of Direction ........................................................ 253 FIGURE 77. Custom Menu Example - Home Screen............................................. 256 FIGURE 78. Custom Menu Example - View Data Window................................... 256 FIGURE 79. Custom Menu Example - Make Notes Sub Menu.............................. 256 FIGURE 80. Custom Menu Example - Predefined Notes Pick List........................ 256 FIGURE 81. Custom Menu Example - Free Entry Notes Window......................... 257 FIGURE 82. Custom Menu Example - Accept / Clear Notes Window................... 257 FIGURE 83. Custom Menu Example - Control Sub Menu..................................... 257 FIGURE 84. Custom Menu Example - Control LED Pick List .............................. 257 FIGURE 85. Custom Menu Example - Control LED Boolean Pick List ................ 258 FIGURE 86. HyperTerminal Connection Description ............................................ 274 FIGURE 87. HyperTerminal Connect To Settings ................................................. 274 FIGURE 88. HyperTerminal COM Port Settings ................................................... 275 FIGURE 89. HyperTerminal ASCII Setup.............................................................. 275 FIGURE 90. HyperTerminal Send Text File Example ........................................... 276 FIGURE 91. HyperTerminal Text Capture File Example....................................... 276 FIGURE 92. Data from TrigVar Program............................................................... 284 FIGURE 93. Alarms Toggled in Bit-Shift Example ............................................... 290 FIGURE 94. Bool8 Data from Bit-shift Example (Numeric Monitor).................... 291 FIGURE 95. Bool8 Data from Bit-shift Example (PC Data File) ........................... 291 FIGURE 96. Comparing Single-channel Burst and Non-Burst Measurements....... 294 FIGURE 97. PT100 in 4 Wire Half Bridge ............................................................. 323 FIGURE 98. PT100 in 3 Wire Half Bridge ............................................................. 325 FIGURE 99. PT100 in 4 Wire Full Bridge.............................................................. 327 FIGURE 100. Running Average Equation................................................................ 328 FIGURE 101. Running Average Frequency Response ............................................. 330 FIGURE 102. Running Average Signal Attenuation ................................................ 330 FIGURE 103. PakBus Network Addressing ............................................................. 354 FIGURE 104. Configuration and Wiring of PakBus LAN........................................ 359 FIGURE 105. DevConfig Deployment | Datalogger Tab.......................................... 360 FIGURE 106. DevConfig Deployment | ComPorts Settings Tab ............................. 360 FIGURE 107. DevConfig Deployment | Advanced Tab ........................................... 361 FIGURE 108. LoggerNet Device Map Setup: COM Port......................................... 362 FIGURE 109. LoggerNet Device Map Setup: PakBusPort....................................... 362 FIGURE 110. LoggerNet Device Map Setup: Dataloggers ...................................... 363 FIGURE 111. Using the Keyboard Display .............................................................. 378 FIGURE 112. Displaying Data with the Keyboard Display...................................... 379 FIGURE 113. Real Time Tables and Graphs ............................................................ 380 FIGURE 114. Real Time Custom ............................................................................. 381 FIGURE 115. Final Storage Tables........................................................................... 382 FIGURE 116. Run / Stop Program............................................................................ 383 FIGURE 117. File Display........................................................................................ 384 FIGURE 118. File: Edit ............................................................................................ 385 FIGURE 119. Ports and Status.................................................................................. 386 FIGURE 120. Settings............................................................................................... 386 FIGURE 121. Configure Display.............................................................................. 387 FIGURE 122. Enclosure ........................................................................................... 390

xi

Table of Contents FIGURE 123. Loosening Thumbscrews....................................................................391 FIGURE 124. Pulling Edge Away from Panel ..........................................................392 FIGURE 125. Removing Nuts to Disassemble Canister ...........................................392 FIGURE 126. Remove and Replace Battery .............................................................393 FIGURE 127. Potentiometer R3 on PS100 and CH100 Charging Regulator............411 FIGURE 128. DevConfig Terminal Emulator...........................................................414 FIGURE 129. Accuracy, Precision, and Resolution..................................................432

List of Tables
TABLE 1. Single-ended and Differential Input Channels .......................................7 TABLE 2. Pulse Input Channels and Measurements ...............................................9 TABLE 3. PC200W EZSetup Wizard Example Selections. ..................................15 TABLE 4. CRBASIC Parameters Varying Measurement Sequence and Timing..48 TABLE 5. Analog Voltage Input Ranges with Options for Common Mode Null (CMN) and Open Input Detect (OID) ...................................................50 TABLE 6. Analog Measurements and Offset Voltage Compensation...................53 TABLE 7. CRBASIC Measurement Integration Times and Codes .......................55 TABLE 8. ac Noise Rejection on Small Signals....................................................55 TABLE 9. ac Noise Rejection on Large Signals....................................................56 TABLE 10. CRBASIC Measurement Settling Times..............................................57 TABLE 11. First Six Values of Settling Time Data.................................................60 TABLE 12. Status Table Calibration Entries...........................................................62 TABLE 13. Calibrate() Instruction Results..............................................................64 TABLE 14. Resistive Bridge Circuits -- Voltage Excitation ...................................66 TABLE 15. StrainCalc() Instruction Equations .......................................................69 TABLE 16. Pulse Input Channels and Measurements .............................................71 TABLE 17. Frequency Resolution Comparison ......................................................76 TABLE 18. Example of Differing Specifications for Pulse Input Channels............76 TABLE 19. Time Constants () ...............................................................................77 TABLE 20. Filter Attenuation of Frequency Signals...............................................77 TABLE 21. Current Source (+) & Sink (-) Limits ...................................................90 TABLE 22. Operating System Version in which Preserve Settings via Program Send Instituted.............................................................................................100 TABLE 23. Program Send Options that Reset Memory* ......................................117 TABLE 24. Data Table Structures .........................................................................118 TABLE 25. Formats for Entering Numbers in CRBASIC.....................................118 TABLE 26. CRBASIC Program Structure ............................................................120 TABLE 27. Data Types .........................................................................................125 TABLE 28. Predefined Constants and Reserved Words........................................130 TABLE 29. TOA5 Environment Line....................................................................132 TABLE 30. Typical Data Table .............................................................................133 TABLE 31. DataInterval() Lapse Parameter Options ............................................136 TABLE 32. Task Processes ...................................................................................140 TABLE 33. Pipeline Mode Task Priorities ............................................................141 TABLE 34. Program Timing Instructions..............................................................142 TABLE 35. Rules for Names .................................................................................148 TABLE 36. Binary Conditions of TRUE and FALSE ...........................................154 TABLE 37. Logical Expression Examples ............................................................155 TABLE 38. Abbreviations of Names of Data Processes........................................157 TABLE 39. Derived Trigonometric Functions ......................................................184 TABLE 40. Asynchronous Port Baud Rates ..........................................................200 TABLE 41. Calibration Report for Air RH Sensor................................................214 TABLE 42. Calibration Report for Salinity Sensor ...............................................216 TABLE 43. Calibration Report for Y Flow Meter.................................................217 TABLE 44. Standard SDI-12 Command & Response Set .....................................234

xii

Table of Contents TABLE 45. SDI12Recorder() Commands............................................................. 238 TABLE 46. SDI-12 Sensor Setup -- Results.......................................................... 245 TABLE 47. Example Power Usage Profile for a Network of SDI-12 Probes ....... 246 TABLE 48. OutputOpt Options............................................................................. 249 TABLE 49. ASCII / ANSI Equivalents................................................................. 263 TABLE 50. CR800 Serial Ports............................................................................. 264 TABLE 51. Single-Channel Burst Specifications.................................................. 294 TABLE 52. Comparing Single-Channel and Array Based Datalogger Burst Modes ......................................................................................................... 295 TABLE 53. Parameters for Single-Channel Burst Enabled Instructions ............... 295 TABLE 54. String Operators ................................................................................. 301 TABLE 55. String Concatenation Examples ......................................................... 302 TABLE 56. String NULL Character Examples ..................................................... 302 TABLE 57. Extracting String Characters .............................................................. 303 TABLE 58. Use of ASCII / ANSII Codes Examples ............................................ 303 TABLE 59. Formatting Strings Examples............................................................. 304 TABLE 60. Formatting Hexadecimal Variables - Examples................................. 304 TABLE 61. PRTCalc() Type Code 1 Sensor......................................................... 319 TABLE 62. PRTCalc() Type Code 2 Sensor......................................................... 319 TABLE 63. PRTCalc() Type Code 3 Sensor......................................................... 320 TABLE 64. PRTCalc() Type Code 4 Sensor......................................................... 320 TABLE 65. PRTCalc() Type Code 5 Sensor......................................................... 320 TABLE 66. PRTCalc() Type Code 6 Sensor......................................................... 321 TABLE 67. CR800 Memory Allocation................................................................ 331 TABLE 68. CR800 SRAM Memory ..................................................................... 333 TABLE 69. Data Storage Drives ........................................................................... 334 TABLE 70. TableFile() Instruction Data File Formats.......................................... 336 TABLE 71. File Control Functions ....................................................................... 341 TABLE 72. CR800 File Attributes ........................................................................ 342 TABLE 73. Data Preserve Options........................................................................ 343 TABLE 74. Powerup.ini Commands ..................................................................... 345 TABLE 75. File System Error Codes .................................................................... 347 TABLE 76. CR800 Telecommunications Options ................................................ 350 TABLE 77. PakBus Link Performance Gage ........................................................ 357 TABLE 78. PakBus LAN Example Datalogger Communications Settings .......... 361 TABLE 79. Data Types Required to Store Data in the Public Table for each Object Group .............................................................................................. 366 TABLE 80. Modbus to Campbell Scientific Equivalents...................................... 369 TABLE 81. CRBASIC Ports, Flags, Variables and Modbus Registers ................. 370 TABLE 82. Special Keyboard Display Key Functions ......................................... 377 TABLE 83. Internal Lithium Battery Specifications ............................................. 391 TABLE 84. Warning Message Examples .............................................................. 396 TABLE 85. Math Expressions and CRBASIC Results ......................................... 401 TABLE 86. Variable and FS Data Types with NAN and INF ............................ 401 TABLE 87. CommsMemFree(1) Defaults and Use Example, TLS Not Active .... 404 TABLE 88. CommsMemFree(1) Defaults and Use Example, TLS Active ........... 404 TABLE 89. Terminal Emulator Menu................................................................... 412 TABLE 90. Common Uses of the Status Table ..................................................... 433 TABLE 91. Status Table Fields and Descriptions ................................................. 434 TABLE 92. CR800 Settings .................................................................................. 446 TABLE 93. CS I/O Pin Description ...................................................................... 455 TABLE 94. CR800 RS-232 Pin-Out ..................................................................... 456 TABLE 95. Standard Null Modem Cable or Adapter Pin Connections* .............. 457 TABLE 96. FP2 Data Format Bit Descriptions ..................................................... 463 TABLE 97. FP2 Decimal Locater Bits .................................................................. 463 TABLE 98. Starter Software ................................................................................. 465

xiii

Table of Contents TABLE 99. Datalogger Support Software .............................................................466 TABLE 100. LoggerNet Client Software* ..............................................................467 TABLE 101. Software Tools ...................................................................................468 TABLE 102. Software Development Kits ...............................................................469 TABLE 103. Sensors available from Campbell Scientific.......................................471 TABLE 104. Battery / Regulator Combinations available from Campbell Scientific .....................................................................................................472 TABLE 105. Batteries available from Campbell Scientific.....................................472 TABLE 106. Regulators available from Campbell Scientific..................................472 TABLE 107. Primary Power Sources available from Campbell Scientific..............472 TABLE 108. Enclosure available from Campbell Scientific ...................................473 TABLE 109. Analog Multiplexers available from Campbell Scientific ..................473 TABLE 110. Relay Drivers available from Campbell Scientific.............................473 TABLE 111. Digital I/O Expansion Modules available from Campbell Scientific .474 TABLE 112. Continuous Analog Output (CAO) Modules available from Campbell Scientific.....................................................................................474 TABLE 113. Pulse / Frequency Input Expansion Modules available from Campbell Scientific.....................................................................................474 TABLE 114. Serial Input Expansion Modules available from Campbell Scientific .....................................................................................................474 TABLE 115. CS I/O Serial Interfaces available from Campbell Scientific .............475 TABLE 116. Serial Cables, Adaptors and Switches available from Campbell Scientific .....................................................................................................475 TABLE 117. Resistive Bridge Modules available from Campbell Scientific..........476 TABLE 118. Voltage Dividers available from Campbell Scientific........................476 TABLE 119. Current Shunt Modules available from Campbell Scientific..............476 TABLE 120. Terminal Strip Covers ........................................................................476 TABLE 121. PakBus Leaf Node and Router Device Configuration........................477 TABLE 122. CR800 Telecommunications Options.................................................478 TABLE 123. Dataloggers and Compatible Keyboard Displays...............................478 TABLE 124. Network Links available from Campbell Scientific ...........................478 TABLE 125. Voltage Transient Suppressors available from Campbell Scientific ..479 TABLE 126. Mass Storage Devices available from Campbell Scientific................479 TABLE 127. Cameras available from Campbell Scientific .....................................479

List of CRBasic Examples


CRBASIC EXAMPLE 1. Time Stamping with System Time ...................................44 CRBASIC EXAMPLE 2. Measuring Settling Time ..................................................59 CRBASIC EXAMPLE 3. 4 Wire Full Bridge Measurement and Processing.............68 CRBASIC EXAMPLE 4. Using an Include File to Control SW12..........................110 CRBASIC EXAMPLE 5. Include File to Control SW12. ........................................111 CRBASIC EXAMPLE 6. A simple Default.CR8 file to control SW12 switched power terminal ............................................................................................111 CRBASIC EXAMPLE 7. Inserting Comments........................................................116 CRBASIC EXAMPLE 8. Load binary information into a single variable ...............119 CRBASIC EXAMPLE 9. Proper Program Structure ...............................................121 CRBASIC EXAMPLE 10. Using a variable array in calculations ...........................123 CRBASIC EXAMPLE 11. CRBASIC Code: Using Variable Array Dimension Indices .........................................................................................................124 CRBASIC EXAMPLE 12. Data Type Declarations ................................................127 CRBASIC EXAMPLE 13. Flag Declaration and Use..............................................128 CRBASIC EXAMPLE 14. Initializing Variables.....................................................128 CRBASIC EXAMPLE 15. Using the Const Declaration .........................................129 CRBASIC EXAMPLE 16. CRBASIC EXAMPLE. Foreign Language Support.....131 CRBASIC EXAMPLE 17. Definition and Use of a Data Table ..............................134

xiv

Table of Contents CRBASIC EXAMPLE 18. Use of the Disable Variable.......................................... 138 CRBASIC EXAMPLE 19. BeginProg / Scan / NextScan / EndProg Syntax........... 143 CRBASIC EXAMPLE 20. Scan Syntax .................................................................. 143 CRBASIC EXAMPLE 21. Measurement Instruction Syntax .................................. 147 CRBASIC EXAMPLE 22. Use of Expressions in Parameters................................. 148 CRBASIC EXAMPLE 23. Use of Arrays as Multipliers and Offsets ..................... 149 CRBASIC EXAMPLE 24. Conversion of FLOAT / LONG to Boolean ................. 151 CRBASIC EXAMPLE 25. Use of Move() to Conserve Code Space....................... 152 CRBASIC EXAMPLE 26. Evaluation of Integers................................................... 152 CRBASIC EXAMPLE 27. Constants to LONGs or FLOATs ................................. 152 CRBASIC EXAMPLE 28. String and Variable Concatenation............................... 156 CRBASIC EXAMPLE 29. Use of Variable Arrays to Conserve Code Space ......... 158 CRBASIC EXAMPLE 30. Use of Move() to Conserve Code Space....................... 159 CRBASIC EXAMPLE 31. Using bit shift operators ............................................... 183 CRBASIC EXAMPLE 32. Programming for retries in PakBus peer-to-peer communications. ......................................................................................... 201 CRBASIC EXAMPLE 33. FieldCal zeroing demonstration program ..................... 215 CRBASIC EXAMPLE 34. FieldCal Offset Demo Program.................................... 217 CRBASIC EXAMPLE 35. FieldCal multiplier and offset demonstration program....................................................................................................... 218 CRBASIC EXAMPLE 36. FieldCal multiplier only demonstration program ......... 220 CRBASIC EXAMPLE 37. FieldCalStrain() Calibration Demonstration................. 222 CRBASIC EXAMPLE 38. HTML........................................................................... 229 CRBASIC EXAMPLE 39. CRBASIC EXAMPLE: Using Alternate Concurrent Command (aC)............................................................................................ 241 CRBASIC EXAMPLE 40. CRBASIC EXAMPLE. Using SDI12Sensor() Command.................................................................................................... 242 CRBASIC EXAMPLE 41. Using an SDI-12 Extended Command ......................... 243 CRBASIC EXAMPLE 42. SDI-12 Sensor Setup .................................................... 245 CRBASIC EXAMPLE 43. Subroutine with Global and Local Variables................ 248 CRBASIC EXAMPLE 44. Custom Menus.............................................................. 258 CRBASIC EXAMPLE 45. Conditional Compile .................................................... 261 CRBASIC EXAMPLE 46. Serial I/O program to receive RS-232 string ................ 272 CRBASIC EXAMPLE 47. Measure Sensors / Send RS-232 Data .......................... 277 CRBASIC EXAMPLE 48. Using TrigVar to Trigger Data Storage ........................ 285 CRBASIC EXAMPLE 49. Using NSEC data type on a 1 element array ................ 286 CRBASIC EXAMPLE 50. NSEC Use on a 2 Element Time Array ........................ 287 CRBASIC EXAMPLE 51. NSEC Use with 7 and 9 Element Time Arrays ............ 288 CRBASIC EXAMPLE 52. NSEC Use to Convert Timestamp to Universal Time Strings ......................................................................................................... 289 CRBASIC EXAMPLE 53. Programming with Bool8 and a bit-shift operator ........ 292 CRBASIC EXAMPLE 54. Single-Channel Burst.................................................... 296 CRBASIC EXAMPLE 55. Single-ended Parallel Burst in Scan / NextScan Construct..................................................................................................... 297 CRBASIC EXAMPLE 56. Differential Parallel Burst in Scan() / NextScan Construct..................................................................................................... 297 CRBASIC EXAMPLE 57. Single-ended Parallel Burst in SubScan() / NextSubScan............................................................................................... 299 CRBASIC EXAMPLE 58. Differential Parallel Burst in SubScan() / NextSubScan............................................................................................... 300 CRBASIC EXAMPLE 59. Inserting String Characters ........................................... 303 CRBASIC EXAMPLE 60. Formatting Strings ........................................................ 304 CRBASIC EXAMPLE 61. Programming for two data intervals in one data table .. 305 CRBASIC EXAMPLE 62. Program Signatures ...................................................... 307 CRBASIC EXAMPLE 63. Data Type, Units, Names, Event Counters, Flags, Data Interval, Control ................................................................................. 308

xv

Table of Contents CRBASIC EXAMPLE 64. CRBASIC EXAMPLE 65. CRBASIC EXAMPLE 66. CRBASIC EXAMPLE 67. CRBASIC EXAMPLE 68. CRBASIC EXAMPLE 69. CRBASIC EXAMPLE 70. CRBASIC EXAMPLE 71. CRBASIC EXAMPLE 72. CRBASIC EXAMPLE 73. CRBASIC EXAMPLE 74. CRBASIC EXAMPLE 75. CRBASIC EXAMPLE 76. Running Average and Running Total of Rain ..............310 Use of Multiple Scans...................................................311 Groundwater Pump Test ...............................................312 Scaling Array ................................................................314 Conditional Output .......................................................316 BeginProg / Scan / NextScan / EndProg Syntax...........317 PT100 in 4 Wire Half Bridge........................................323 PT100 in 3 Wire Half Bridge........................................325 PT100 in 4 Wire Full Bridge ........................................327 Implementation of DNP3..............................................367 Concatenating Modbus Long Variables........................373 Using NAN in Expressions...........................................400 Filtering NAN from Output Processes..........................402

xvi

Section 1. Introduction
Whether in extreme cold in Antarctica, scorching heat in Death Valley, salt spray from the Pacific, micro-gravity in space, or the harsh environment of your office, Campbell Scientific dataloggers support research and operations all over the world. Our customers work a broad spectrum of applications, from those more complex than any of us imagined, to those simpler than any of us thought practical. The limits of the CR800 are defined by our customers. Our intent with the CR800 manual is to guide you to the tools you need to explore the limits of your application. You can take advantage of the CR800's powerful analog and digital measurement features by spending a few minutes working through the Quickstart Tutorial (p. 3) and the Overview (p. 27). For more demanding applications, the remainder of the manual and other Campbell Scientific publications are available. If you are programming with CRBASIC, you will need the extensive Help available with the CRBASIC Editor software. Formal CR800 training is also available from Campbell Scientific. This manual is organized to take you progressively deeper into the complexity of CR800 functions. You may not find it necessary to progress beyond the Quickstart Tutorial (p. 3) or Overview (p. 27) sections. Quickstart Tutorial (p. 3) gives a cursory view of CR800 data acquisition and walks you through a first attempt at data acquisition. Overview (p. 27) reviews salient topics, which are covered in-depth in subsequent sections and appendices. More in-depth study requires other Campbell Scientific publications, most of which are available on-line at www.campbellsci.com. Generally, if a particular feature of the CR800 requires a peripheral hardware device, more information is available in the manual written for that device. Manuals for Campbell Scientific products are available at www.campbellsci.com. If you are unable to find the information you need, please contact us at 435-7532342 to speak with an applications engineer. Or, you can email us at support@campbellsci.com.

Section 1. Introduction

Section 2. Quickstart Tutorial


This tutorial gives a cursory look at CR800 data acquisition.

2.1

Primer - CR800 Data Acquisition


Data acquisition with the CR800 is the result of a step wise procedure involving the use of electronic sensor technology, the CR800, a telecommunications link, and datalogger support software (p. 417, p. 466).

2.1.1

Components of a Data Acquisition System


A typical data acquisition system is conceptualized in FIGURE. Data Acquisition System Components (p. 4). A CR800 is only one part of a data acquisition system. To acquire good data, suitable sensors and a reliable data retrieval method are required. A failure in any part of the system can lead to "bad" data or no data.

2.1.1.1

Sensors
Suitable sensors accurately and precisely transduce environmental change into measurable electrical properties by outputting a voltage, changing resistance, outputting pulses, or changing states. Read More! APPENDIX. Accuracy, Precision, and Resolution (p. 432)

2.1.1.2

Datalogger
CR800s can measure almost any sensor with an electrical response. CR800s measure electrical signals and convert the measurement to engineering units, perform calculations and reduce data to statistical values. Every measurement does not need to be stored. The CR800 will store data in memory awaiting transfer to the PC via external storage devices or telecommunications.

2.1.1.3

Data Retrieval
The products of interest from a data acquisition system are data in data files, usually stored on and accessible by a PC. Data are copied, not moved, from the CR800 to the PC. Multiple users may have access to the same CR800 without compromising data or coordinating data collection activities. RS-232 and CS I/O ports are integrated with the CR800 wiring panel to facilitate data collection.

Section 2. Quickstart Tutorial On-site serial communications are preferred if the datalogger is near the PC, and the PC can dedicate a serial (COM) port for the datalogger. On-site methods such as direct serial connection or infrared link are also used when the user visits a remote site with a laptop or PDA. In contrast, telecommunications provide remote access and the ability to discover problems early with minimum data loss. A variety of devices, and combinations of devices, such as telephone modems, radios, satellite transceivers, and TCP/IP network modems are available for the most demanding applications.

FIGURE 1. Data Acquisition System Components

2.1.2

CR800 Module and Power Supply


The CR800 module integrates electronics within a sealed stainless steel clamshell, making it economical, small, and very rugged.

2.1.2.1

Wiring Panel
The CR800 module connects to the wiring panel. As shown in FIGURE. CR800 Wiring Panel (p. 5), the wiring panel provides terminals for connecting sensors, power and communications devices. Internal surge protection is incorporated with the input channels.

Section 2. Quickstart Tutorial

FIGURE 2. Wiring Panel

Section 2. Quickstart Tutorial

2.1.2.2

Power Supply
The CR800 is powered by a nominal 12 Vdc source. Acceptable power range is 9.6 to 16 Vdc.

External power connects through the green "POWER IN" on the face of the CR800. The "POWER IN" connection is internally reverse polarity protected.

2.1.2.3

Backup Battery
A lithium battery backs up the CR800 clock, program, and memory in case of power loss. See SECTION. Internal Battery (p. 40)

2.1.3

Sensors
Most electronic sensors, whether or not manufactured or sold by Campbell Scientific, can be interfaced to the CR800. Check for on-line content concerning interfacing sensors at www.campbellsci.com, or contact a Campbell Scientific applications engineer for assistance.

2.1.3.1

Analog Sensors
Analog sensors output continuous voltages that vary with the phenomena measured. Analog sensors connect to analog terminals. Analog terminals are configured as single-ended, wherein sensor outputs are measured with respect to ground (FIGURE. Analog Sensor Wired to Single-Ended Channel #1 (p. 6)) or configured as differential, wherein high sensor outputs are measured with respect to the low output (FIGURE. Analog Sensor Wired to Differential Channel #1 (p. 6)). TABLE. Single-ended and Differential Input Channels (p. 7) lists channel assignments.

FIGURE 3. Analog Sensor Wired to Single-Ended Channel #1

Section 2. Quickstart Tutorial

FIGURE 4. Analog Sensor Wired to Differential Channel #1

TABLE 1.

Single-ended and Differential Input Channels


Single-Ended Channel
1 2 3 4 5 6

Differential Channel
1H 1L 2H 2L 3H 3L

2.1.3.2

Bridge Sensors
Many sensors use a resistive bridge to measure phenomena. Pressure sensors and position sensors commonly use a resistive bridge. For example, a specific resistance in a pressure transducer strain gage correlates to a specific water pressure. A change in resistance in a wind vane potentiometer correlates to a change in wind direction.

2.1.3.2.1

Voltage Excitation Bridge resistance can be determined by measuring the difference between a known voltage applied to a bridge and the measured return voltage. The CR800 supplies a precise scalable voltage excitation via excitation terminals. Return voltage is measured on analog terminals. Examples of bridge sensor wiring using voltage excitation are illustrated in FIGURE. Half Bridge Wiring -- Wind Vane Potentiometer (p. 8) and FIGURE. Full Bridge Wiring -- Pressure Transducer (p. 8).

Section 2. Quickstart Tutorial

FIGURE 5. Half Bridge Wiring -- Wind Vane Potentiometer

FIGURE 6. Full Bridge Wiring -- Pressure Transducer

2.1.3.3

Pulse Sensors
Pulse sensors are measured on CR800 pulse measurement channels. The output signal generated by a pulse sensor is a series of voltage waves. The sensor couples its output signal to the measured phenomenon by modulating wave frequency. The CR800 detects each wave as the wave transitions between voltage extremes (high to low or low to high). This is termed state transition. Measurements are processed and presented as counts, frequency, or timing data.

Section 2. Quickstart Tutorial

Note Period averaging sensors, while technically frequency output sensors, are typically connected to single-ended analog channels and measured with the PeriodAverage () instruction.

2.1.3.3.1

Pulses Measured FIGURE. Pulse Sensor Output Signal Types (p. 9) illustrates three pulse sensor output signal types.

FIGURE 7. Pulse Sensor Output Signal Types

2.1.3.3.2

Pulse Input Channels TABLE. Pulse Input Channels and Measurements (p. 9) lists devices, channels and options for measuring pulse signals. TABLE 2. Pulse Input Channels and Measurements
CRBASIC Instruction
PulseCount()

Channels Available for Pulse Input


P1, P2

Input Types
High Frequency Low-Level ac Switch Closure

Data Option
Counts Frequency Run Avg of Freq Counts Frequency Run Avg of Freq Interval Period State

C1, C2, C3, C4, C5, C6, C7, C8

High Frequency Switch Closure Low-Level ac (with LLAC4 Low-Level AC Conversion Module)

PulseCount() TimerIO()

Section 2. Quickstart Tutorial 2.1.3.3.3 Pulse Sensor Wiring Wiring a pulse sensor to a CR800 is straight forward, as shown in FIGURE. Pulse Input Wiring -- Anemometer Switch (p. 10). Pulse sensors have two active wires, one of which is always ground. Connect the ground wire to a channel. Connect the other wire to a pulse channel. Sometimes the sensor will require power from the CR800, so there will be two more wires one of which is always ground. Connect power ground to a G channel. Do not confuse the pulse wire with the positive power wire, or damage to the sensor or CR800 may result. Some switch closure sensors may require a pull-up resistor. Consult FIGURE. Connecting Switch Closures to Digital I/O (p. 75) for information on use of pull-up resistors.

FIGURE 8. Pulse Input Wiring -- Anemometer Switch

2.1.3.4

RS-232 Sensors
The CR800 has 4 ports available for RS-232 input as shown in FIGURE. Location of RS-232 Ports (p. 10). As indicated in FIGURE. Use of RS-232 and Digital I/O when Reading RS-232 Devices (p. 10), RS-232 sensors can be connected to the RS-232 port or to digital I/O port pairs. Ports can be set up with various baud rates, parity options, stop bit options, and so forth as defined in CRBASIC Help.

FIGURE 9. Location of RS-232 Ports

10

Section 2. Quickstart Tutorial

FIGURE 10. Use of RS-232 and Digital I/O when Reading RS232 Devices

2.1.4

Digital I/O Ports


The CR800 has 4 digital I/O ports selectable as binary inputs or control outputs. These are multi-function ports. Edge timing, switch closure, and high frequency pulse functions are introduced in SECTION. Pulse Sensors (p. 8) and discussed at length in SECTION. Pulse Measurements (p. 70). Other functions include device driven interrupts, asynchronous communications and SDI-12 communications. FIGURE. Control and Monitoring with Digital I/O (p. 12), illustrates a simple application wherein digital I/O ports are used to control a device and monitor the state (whether on or off) of the device.

11

Section 2. Quickstart Tutorial

FIGURE 11. Control and Monitoring with Digital I/O

2.1.4.1

SDM Channels
SDM devices and a brief description of the their uses can be found in APPENDIX. Sensors and Peripherals (p. 471).

Digital I/O ports C1, C2 and C3 are used for SDM (Serial Device for Measurement) communications.

2.1.5

Input Expansion Modules


Modules are available from Campbell Scientific to expand the number of input and digital I/O ports on the CR800. APPENDIX. Digital I/O Expansion (p. 473) lists available modules.

12

Section 2. Quickstart Tutorial

2.2

Exercise - Measuring a Thermocouple


This tutorial is designed to illustrate the function of the CR800. During the exercise, the following items will be described. Attaching a thermocouple to analog differential terminals Creating a program for the CR800 Making a simple thermocouple measurement Sending data from the CR800 to a PC Viewing the data from the CR800

2.2.1

What You Will Need


The following items are needed to complete this exercise. Campbell Scientific CR800 datalogger Campbell Scientific PS100 12 Vdc power supply (or other compatible power supply) with RED and BLACK wire leads. Thermocouple (included with the CR800) Personal Computer (PC) with an available RS-232 serial port. A USB to RS232 cable may be used if an RS-232 port is not available. RS-232 cable (included with the CR800). Note If the PC is to be connected to the RS-232 port for an extended period, use Campbell Scientific's SC32B interface to provide optical isolation. This protects low level analog measurements from outside interference. PC200W software. This software is available on the Campbell Scientific Resource CD or at www.campbellsci.com.

2.2.2

Hardware Set-Up
Note The thermocouple is attached to the CR800 later

2.2.2.1

External Power Supply


With reference to FIGURE. Power and RS-232 Connections (p. 14), 1. Remove the green power connector from the CR800. 2. Verify the RED wire on the PS100 is attached to a PS100 12V terminal, and the BLACK wire is attached to a PS100 G terminal.

13

Section 2. Quickstart Tutorial 3. Verify the On/Off switch on the PS100 is in the Off position. 4. Attach the RED wire from the PS100 to the terminal labeled 12V on the green connector. 5. Attach the BLACK wire from the PS100 to the terminal labeled G on the green connector. 6. After confirming the correct polarity on the wire connections, insert the green power connector into its receptacle on the CR800. 7. Connect the RS-232 cable between the RS-232 port on the CR800 and the RS-232 port on the PC (or to the USB to RS-232 cable). 8. Move the On/Off switch on the PS100 to the On position.

FIGURE 12. Power and RS-232 Connections

2.2.3

PC200W Software Setup


1. Install the PC200W software onto a PC. Follow the on-screen prompts during the installation process for the Program Folder and Destination Location. 2. Open the PC200W software (FIGURE. PC200W Main Window (p. 15)). When the software is first run, the EZSetup Wizard will be run

14

Section 2. Quickstart Tutorial automatically in a new window. This will configure the software to communicate with the CR800. TABLE. PC200W EZSetup Wizard Example Selections (p. 15) indicates what information needs to be entered on each screen. Click on Next at the bottom of the screen to advance to the next screen.

FIGURE 13. PC200W Main Window

TABLE 3.
Screen Name
Introduction

PC200W EZSetup Wizard Example Selections.


Information Needed
Provides and introduction to the EZSetup Wizard along with instructions on how to navigate through the wizard. Select the CR800 from the scroll window. Accept the default name of "CR800."

Start the wizard to follow table entries

Datalogger Type and Name

COM Port Selection

Select the correct COM port for RS-232 connection. Typically, this will be COM1. Other COM numbers are possible, especially when using a USB to serial cable. Leave the COM Port Communication Delay at "00 seconds." Note: When using a USB to serial cable, the COM number may change if the cable is moved to a different USB port. This will prevent data transfer between the software and CR800. Should this occur, simply move the USB cable back to the original port. If this is not possible, it will be necessary to close the PC200W software and open it a second time to refresh the available COM ports. Click on "Edit Datalogger Setup" and change the COM port to the new port number.

15

Section 2. Quickstart Tutorial

TABLE 3.
Screen Name

PC200W EZSetup Wizard Example Selections.


Information Needed
Used to configure how the CR800 communicates through the COM port. For this tutorial, accept the default settings.

Start the wizard to follow table entries

Datalogger Settings

Communication Setup Summary Communications Test

Provides a summary of the settings made in previous screens. A communications test between the CR800 and PC can be performed in this screen. For this tutorial, the test is not required. Press Finish to exit the Wizard.

After exiting the wizard, the main PC200W window becomes visible. The window has several tabs available. By Default, the Clock/Program tab is visible. This tab displays information on the currently selected datalogger along with clock and program functions. The Monitor Data or Collect Data tabs may be selected at any time. A number of icons are available across the top of the window. These access additional functions available to the user.

2.2.4

Write Program with Short Cut


Short Cut Programming Objectives: This portion of the tutorial will use Short Cut to create a program that measures the CR800 power supply voltage, wiring panel temperature, and ambient air temperature. The CR800 will take samples once per second and store averages of these values at one minute intervals.

2.2.4.1

Procedure: (Short Cut Steps 1-6)


1. Click on the Short Cut icon in the upper-right corner of the PC200W window. The icon resembles a clock face. 2. A new window will appear showing the option to create a new program or open an existing program. Select New Program. 3. A drop-down list will appear showing different dataloggers. Select the CR800. 4. The program will now ask for the scan interval. Set the interval to 1 second and click on okay. Note The first time Short Cut is run, a prompt will appear asking for a choice of "ac Noise Rejection." Select "60 Hz" for the United States and other countries using 60 Hz ac voltage. Select "50 Hz" for Europe and other countries operating on 50 Hz ac voltage.

16

Section 2. Quickstart Tutorial 5. A second prompt will ask for a choice of "Sensor Support." Select "Campbell Scientific, Inc." 6. Under Available Sensors, expand the "Sensors" folder by clicking on the "+" symbol. This shows several sub-folders. Expand the "Temperature" folder to view the available sensors.

FIGURE 14. Short Cut Temperature Sensor Folder

2.2.4.2

Procedure: (Short Cut Steps 7-9)


7. Double-click the Wiring Panel Temperature sensor to add it to the Selected category. Alternatively, highlight the Wiring Panel Temperature sensor by clicking on it once, and then click on the arrow between Available Sensors and Selected to add it to the Selected sensors. 8. Double-click the Type T Thermocouple to add it to the Selected category. A prompt will appear asking for the number of sensors. Change this value to "1." A second prompt screen will appear. Set the Reference Temperature Measurement to "Ptemp_C," and then click OK to close the prompt. 9. Click on the Wiring Diagram link to view the sensor wiring diagram. Attach the Type T Thermocouple to the CR800 as shown in the diagram.

17

Section 2. Quickstart Tutorial

FIGURE 15. Short Cut Thermocouple Wiring

2.2.4.3

Procedure: (Short Cut Steps 10-11)


Historical Note In the space race era, a field thermocouple measurement was a complicated and cumbersome process incorporating a thermocouple wire with three junctions, a micro-voltmeter, a vacuum flask filled with an ice slurry, and a thick reference book. One thermocouple junction was connected to the microvoltmeter. Another sat in the vacuum flask. The third was inserted into the location of the temperature of interest. When the temperature settled out, the micro-voltmeter was read. This value was then looked up on the appropriate table in the reference book to determine the temperature. Then along came Eric and Evan Campbell. Campbell Scientific designed the first CR7 datalogger to make thermocouple measurements without the need of vacuum flasks, third junctions, or reference books. Now, there's an idea! Nowadays, a thermocouple consists of two wires of dissimilar metals, such as copper and constantan, joined at one end. The joined end is the measurement junction; the junction that is created when the thermocouple is wired to the CR800 is the reference junction. When the two junctions are at different temperatures, a voltage proportional to the temperature difference is induced into the wires. The thermocouple measurement requires the reference junction temperature to calculate the measurement junction temperature using proprietary algorithms in the CR800 operating system. 10. Click on Outputs to advance to the next step.

18

Section 2. Quickstart Tutorial 11. The Outputs window displays a list of selected sensors on the left, and data storage Tables on the right.

FIGURE 16. Short Cut Outputs Tab

2.2.4.4

Procedure: (Short Cut Steps 12-16)


12. By default, there are two Tables initially available. Both Tables have a Store Every field along with a drop-down box to select the time units. These are used to set the time interval when data is stored. 13. Only one Table is needed for this tutorial, so Table 2 can be removed. Select Table 2 by clicking on its tab, and then click on Delete Table. 14. Change the Table Name to OneMin, and then change the interval to 1 minute (Store Every 1 Minutes). 15. Adding a measurement to the table is done by selecting the measurement under Selected Sensors, and then clicking on one of the processing buttons in the center of the window. 16. Apply the Average function to the Batt_Volt, PTemp_C, and Temp_C measurements.

19

Section 2. Quickstart Tutorial

FIGURE 17. Short Cut Output Table Definition

2.2.4.5

Procedure: (Short Cut Steps 17-18)


17. Click on Finish to compile the program. Give the program the name "QuickStart." A summary screen will appear showing the compiler results. Any errors during compiling will also be displayed.

FIGURE 18. Short Cut Compile Confirmation

20

Section 2. Quickstart Tutorial

18. Close this window by clicking on the "X" in the upper right corner.

2.2.5

Send Program and Collect Data with PC200W


PC200W Support Software Objectives: This portion of the tutorial will use PC200W to send the program to the CR800, collect data from the CR800, and store the data to the PC

2.2.5.1

Procedure: (PC200W Step 1)


1. From the PC200W Clock/Program tab, click on the Connect button to establish communications with the CR800. When communications have been established, the text on the button will change to Disconnect.

FIGURE 19. PC200W Connect Button

2.2.5.2

Procedure: (PC200W Steps 2-4)


2. Click the Set Clock button to synchronize the datalogger's clock with the computer's clock. 3. Click on the Send Program button. A window will appear warning that data on the datalogger will be erased. Answer "yes" to the prompt. Another window will open. Browse to the C:\CampbellSci\SCWin folder, select the QuickStart.CR8 file, and then click the Open button. A status bar will appear while the program is sent to the CR800 followed by a confirmation that the transfer was successful. Click OK to close this window.

21

Section 2. Quickstart Tutorial 4. After sending a program to the CR800, a good practice is to monitor the measurements to ensure they are reasonable. Select the Monitor Data tab. The window now displays data found in the Public Table coming from the CR800. To view the OneMin table, select an empty cell in the display area, and then click on the Add button.

FIGURE 20. PC200W Monitor Data Tab - Public Table

FIGURE 21. PC200W Monitor Data Tab - Public Table

22

Section 2. Quickstart Tutorial

2.2.5.3

Procedure: (PC200W Step 5)


5. In the Add Selection window, click on the OneMin table, and then click Paste. The OneMin table is now displayed in the main display.

FIGURE 22. PC200W Monitor Data Tab - Public and OneMin Tables

2.2.5.4

Procedure: (PC200W Step 6)


6. Click on the Collect Data tab. From this window, data is chosen to be collected as well as the location where the collected data will be stored.

23

Section 2. Quickstart Tutorial

FIGURE 23. PC200W Collect Data Tab

2.2.5.5

Procedure: (PC200W Steps 7-9)


7. Click the OneMin box so a check mark appears in the box. Under the "What to Collect" heading, select "New data from datalogger." This selects which data will be collected. 8. Click on the Collect button. A requester box will appear, prompting for a filename. Click on Save to accept the default filename of "CR800_OneMin.dat." A progress bar will appear as the data is collected, followed by the message, "Collection Complete." Click OK to continue. 9. To view the data, click on the View icon at the top of the window. This opens a new window.

24

Section 2. Quickstart Tutorial

FIGURE 24. PC200W View Data Utility

2.2.5.6

Procedure: (PC200W Steps 10-11)


10. Click on the Open File icon to open a file for viewing. Select the "CR800_OneMin.dat" file and click on Open. The collected data is now shown. 11. Click on Expand Tabs to display the data in columns with column headings.

25

Section 2. Quickstart Tutorial

FIGURE 25. PC200W View Data Table

2.2.5.7

Procedure: (PC200W Steps 12-13)


12. Select any data column by clicking on it. To display the data in graphical form, click on one of the Show Graph buttons. A graph with one Y-axis or two Y-axes will be generated.

FIGURE 26. PC200W View Data Graph

13. Close the Graph and View windows, and then close the PC200W program.

26

Section 3. System Overview


A data acquisition system consists of hardware, user entered programs, and datalogger support software. FIGURE. Features of a Data Acquisition System (p. 27) illustrates a common CR800-based data acquisition system.

FIGURE 27. Features of a Data Acquisition System

3.1

CR800 Datalogger
The CR800 Datalogger is a precision instrument designed for demanding lowpower measurement applications. CPU, analog and digital inputs, analog and digital outputs, and memory are controlled by the operating system in conjunction with the user program. The user program is written in CRBASIC, a

27

Section 3. System Overview programming language that includes data processing and analysis routines and a standard BASIC instruction set. Campbell Scientific's datalogger support software facilitates program generation, editing, data retrieval, and real-time data monitoring (see SECTION. Support Software (p. 375)). The CR800 is a multimeter with memory and timekeeping. It is one part of a data acquisition system. To acquire quality data, suitable sensors and reliable telecommunications devices are also required. Sensors transduce phenomena into measurable electrical forms, outputting voltage, current, resistance, pulses, or state changes. The CR800, sometimes with the assistance of various peripheral devices, can measure nearly all electronic sensors. The CR800 measures analog voltage and pulse signals, representing the magnitudes numerically. Numeric values are scaled to the unit of measure such as milliVolts and pulses, or in user specified engineering units such as wind direction and wind speed. Measurements can be processed through calculations or statistical operations and stored in memory awaiting transfer to a PC via external storage or telecommunications. The CR800 has the option of evaluating programmed instructions sequentially, or in pipeline mode, wherein the CR800 decides the order of instruction execution.

3.1.1

Sensor Support
Read More! See SECTION. Sensor Support (p. 43). The following sensor types are supported by the CR800 datalogger. Refer to APPENDIX. Sensors (p. 471) for information on sensors available from Campbell Scientific. Analog voltage Analog current (with a shunt resistor) Thermocouples Resistive bridges Pulse output Period output Frequency output Serial smart sensors SDI-12 sensors A library of sensor manuals and application notes are available at www.campbellsci.com to assist in measuring many sensor types. Consult with a Campbell Scientific applications engineer for assistance in measuring unfamiliar sensors.

28

Section 3. System Overview

3.1.2

CR800 Wiring Panel


The wiring panel of the CR800 is the interface to all CR800 functions. Most CR800 functions are best introduced by reviewing features of the CR800 wiring panel. FIGURE. CR800 Wiring Panel (p. 5) illustrates the wiring panel and some CR800 functions accessed through it. Read More! Expansion accessories increase the input / output capabilities of the wiring panel. Read SECTION. Measurement and Control Peripherals (p. 83) for more information.

3.1.2.1

Measurement Inputs
Measurements require a physical connection with a sensor at an input channel and CRBASIC programming to instruct the CR800 how to make, process, and store the measurement. The CR800 wiring panel has the following input channels: Analog Voltage: 6 channels (Diff 1 - 3 / SE 1 - 6) configurable as 3 differential or 6 single-ended inputs. Input voltage range: -5000 mV to +5000 mV. Measurement resolution: 0.67 V to 1333 V Input voltage range: -2500 mV to +2500 mV. Maximum frequency: 200 kHz Resolution: 136 ns

Period Average: 6 channels (SE 1 -6)

Note Both pulse count and period average measurements are used to measure frequency output sensors. Yet pulse count and period average measurement methods are different. Pulse count measurements use dedicated hardware -pulse count accumulators, which are always monitoring the input signal, even when the CR800 is between program scans. In contrast, period average measurement instructions only monitor the input signal during a program scan. Consequently, pulse count scans can usually be much less frequent than period average scans. Pulse counters may be more susceptible to low frequency noise because they are always "listening", whereas period averaging may filter the noise by reason of being "asleep" most of the time. Pulse count measurements are not appropriate for sensors that are powered off between scans, whereas period average measurements work well since they can be placed in the scan to execute only when the sensor is powered and transmitting a correct signal. Period average measurements utilize a high-frequency digital clock to measure time differences between signal transitions, whereas pulse count measurements simply accumulate the number of counts. As a result, period average measurements offer much better frequency resolution per measurement interval, as compared to pulse count measurements. The frequency resolution of pulse count measurements can be improved by extending the measurement interval by increasing the scan interval and by averaging.

29

Section 3. System Overview Pulse: 2 channels (P1 - P2) configurable for counts or frequency of the following signal types: High level 5V square waves Switch closures Low-level A/C sine waves

Digital I/O: 4 channels (C1 - C4) configurable for serial input, SDM, SDI-12, state, frequency, pulses, edge counting and edge timing. C1 - C4: state, frequency, pulse, edge counting and edge timing measurements. Edge Timing Resolution: 540 ns C1, C2 and C3: Synchronous Devices for Measurement (SDM) input / output. C1, C3: SDI-12 input / output. C1 & C2, C3 & C4: serial communication input / output.

9-Pin RS-232: 1 port (Computer RS-232) configurable for serial input. Refer to APPENDIX. Digital I/O Expansion (p. 473), APPENDIX. Pulse / Frequency Input Expansion Modules (p. 474), and APPENDIX. Serial Input / Output Peripherals (p. 474) for information on available input expansion modules.

3.1.2.2

Voltage Outputs
The CR800 has several terminals capable of supplying switched voltage and current to peripherals, sensors, or control devices. Read More! See SECTION. Control Output (p. 83). Switched Analog Output (Excitation): two channels (VX1 - VX2) for precise voltage excitation ranging from -2500 mV to +2500 mV. These channels are regularly used with resistive bridge measurements. Each channel will source up to 25 mA. Digital I/O: 4 channels (C1 - C4) configurable for on / off and pulse output duration. Switched 12 Volts dc (SW12): One terminal controls (switch on / off ) primary voltage under program control for control of external devices requiring 12 Vdc, such as humidity sensors. SW12 can source up to 900 mA. See TABLE. Current Sourcing Limits (p. 90).

30

Section 3. System Overview

3.1.2.3

Grounding Terminals
Read More! See SECTION. Grounding (p. 91). Proper grounding will lend stability and protection to a data acquisition system. It is the easiest and least expensive insurance against data loss-and the most neglected. The following terminals are provided for connection of sensor and datalogger grounding: Signal Grounds: 6 ground terminals ( ) used as reference for single-ended analog inputs, pulse inputs, excitation returns, and as a ground for sensor terminals located shield wires. Signal returns for pulse inputs should use next to pulse inputs. Power Grounds: 4 terminals (G) used as returns for 5V, SW12, 12V, and C1C4 outputs. Use of G grounds for these outputs minimizes potentially large current flow through the analog voltage measurement section of the wiring panel, which can cause single-ended voltage measurement errors. Ground Lug: 1 terminal ( ), the large ground lug is used to connect a heavy gage wire to earth ground. A good earth connection is necessary to secure the ground potential of the datalogger and shunt transients away from electronics. Minimum 14 AWG wire is recommended.

3.1.2.4

Power Terminals
Read More! See SECTION. CR800 Power Supply (p. 87).

Power In
Note: Refer to APPENDIX. Power Supplies (p. 471) for information on available power supplies. External Power Supply: One green plug (POWER IN): for connecting power from an external power source to the CR800. This is the only terminal used to input power; other 12V terminals and the SW12 terminal are output only terminals for supplying power to other devices. Review power requirements and power supply options in SECTION. CR800 Power Supply (p. 87) before connecting power.

Power Out
See SECTION. Powering Sensors (p. 88) Peripheral 12 Vdc Power Source: 1 terminals (12V) and associated grounds (G) supply power to sensors and peripheral devices requiring nominal 12 Vdc. This supply may drop as low as 9.6 Vdc before datalogger operation stops. Precautions should be taken to minimize the occurrence of data from underpowered sensors. Peripheral 5 Vdc Power Source: 1 terminal (5V) and associated ground (G) supply power to sensors and peripheral devices requiring regulated 5 Vdc.

31

Section 3. System Overview

3.1.2.5

Communications Ports
Read More! See SECTION. RS-232 and TTL Recording (p. 79), SECTION. Telecommunications and Data Retrieval (p. 349) and SECTION. PakBus Overview (p. 353). The CR800 is equipped with 4 communications ports. Communication ports allow the CR800 to communicate with other computing devices, such as a PC, or with other Campbell Scientific dataloggers. Note RS-232 communications normally operate well up to a transmission cable capacitance of 2500 picofarads, or approximately 50 feet of commonly available serial cable. 9-pin RS-232: 1 DCE port for communicating with a PC through the supplied serial cable, serial sensors, or through 3rd party serial telecommunications devices. Acts as a DTE device with a null-modem cable. Read More! See APPENDIX. Serial Port Pin Outs (p. 455).

Note The 9-pin RS-232 port is not electrically isolated. "Isolation" means isolated, by means of optical isolation components, from the communications node at the other end of the connection. Optical isolation prevents some electrical problems such as ground looping, which can cause significant errors in single-ended analog measurements. Campbell Scientific offers a peripheral optically isolated RS-232 to CS I/O interface as a CR800 accessory. Refer to APPENDIX. Serial Input / Output Peripherals (p. 474) for model information.

9-pin CS I/O port: 1 port for communicating through Campbell Scientific telecommunications peripherals. Approved CS I/O telecommunication interfaces are listed in APPENDIX. Serial Input / Output Peripherals (p. 474). 2-pin RS-232: 2 ports configurable from Control I/O ports for communication with serial sensors or other Campbell Scientific dataloggers.

3.1.3

Power Requirements
Read More! See SECTION. CR800 Power Supply (p. 87). The CR800 operates from a dc power supply with voltage ranging from 9.6 to 16 V, and is internally protected against accidental polarity reversal. The CR800 has modest input power requirements. In low power applications, it can operate for several months on non-rechargeable batteries. Power systems for longerterm remote applications typically consist of a charging source, a charge controller, and a rechargeable battery. When ac line power is available, an ac/ac or ac/dc wall adapter, a charge controller, and a rechargeable battery can be used to construct a UPS (uninterruptible power supply). Contact a Campbell

32

Section 3. System Overview Scientific applications engineer for assistance in acquiring the items necessary to construct a UPS. Applications requiring higher current requirements, such as satellite or cellular phone communications, should be evaluated by means of a power budget with a knowledge of the factors required by a robust power system. Contact a Campbell Scientific applications engineer if assistance is required in evaluating power supply requirements. Common power devices are: Batteries Alkaline D-cell - 1.5 Vdc / cell Rechargeable Lead-Acid battery

Charge Sources Solar Panels Wind Generators ac/ac or ac/dc wall adapters

Refer to APPENDIX. Power Supplies (p. 471) for specific model numbers of approved power supplies.

3.1.4

Programming
The CR800 is a highly programmable instrument, adaptable to the most demanding measurement and telecommunications requirements.

3.1.4.1

Firmware: OS and Settings


Read More! See SECTION. CR800 Configuration (p. 97). Firmware consists of the operating system (OS) and durable configuration settings. OS and settings remain intact when power is cycled. Note The CR800 is shipped factory ready with all settings and firmware necessary to communicate with a PC via RS-232 and to accept and execute user application programs. OS upgrades are occasionally made available at www.campbellsci.com. For more complex applications, some settings may need adjustment. Adjustments are accomplished with DevConfig Software (DevConfig (p. 97)), the optional keyboard display (see SECTION. Using the Keyboard Display (p. 375)), or through datalogger support software (see APPENDIX. Software (p. 465)). OS files are sent to the CR800 with DevConfig or through the program Send button in datalogger support software. When the OS is sent via DevConfig, most

33

Section 3. System Overview settings are cleared, whereas, when sent via datalogger support software, most settings are retained.

Read More! See SECTION. Programming (p. 115) and SECTION. CRBASIC Programming Instructions (p. 161) and CRBASIC help for more programming assistance. A CRBASIC program directs the CR800 how and when sensors are to be measured, calculations made, and data stored. A program is created on a PC and sent to the CR800. The CR800 can store a number of programs in memory, but only one program is active at a given time. Three Campbell Scientific software applications, Short Cut, CRBASIC Editor, and Transformer Utility create CR800 programs. Short Cut creates a datalogger program and wiring diagram in four easy steps. It supports most sensors sold by Campbell Scientific and is recommended for creating simple programs to measure sensors and store data. Programs generated by Short Cut are easily imported into CRBASIC Editor for additional editing. For complex applications, experienced programmers often create essential measurement and data storage code with Short Cut, then edit the code with CRBASIC Editor. Note that once a Short Cut generated program has been edited with CRBASIC Editor, it can no longer be modified with Short Cut.

3.1.5

Memory and Data Storage


Read More! See SECTION. Memory and Data Storage (p. 331). CR800 memory size is posted in the Status Table (APPENDIX. Status Table and Settings (p. 433)). The CR800 stores these data: Operating system. Held in up to 2 Mbytes Flash EEPROM. Settings. Held in 512 K Flash. Programs, system data, and measurement data. Held in 4 Mbytes SRAM. Note -- Maximum memory allowed for program storage is 490 kbytes. Programs are stored as files on the automatically partitioned CPU: drive. Photographic images and measurement data files are stored on the USR: drive, which is partitioned by the user from data storage memory (See APPENDIX. Cameras (p. 479)). TableFile() instruction output files are usually stored on USR:. TableFile() also stores files on a USB: drive (APPENDIX. Mass Storage Devices (p. 479)). Data formats available for storage by TableFile() include TOA5, TOB1, CSIXML, CSIJSON.

34

Section 3. System Overview

Note CR800s with serial numbers smaller than ????? were usually supplied with only 2 Mbytes of SRAM.

Additional final data storage is optionally available by using a Campbell Scientific mass storage device. See APPENDIX. Mass Storage Devices (p. 479).

3.1.6

Data Retrieval
Data tables are transferred to PC files through a telecommunications link (SECTION. Telecommunications and Data Retrieval (p. 349)) or by transporting a CS mass storage media (USB: drive) to the PC.

3.1.6.1

Via Telecommunications
Data are usually transferred through a telecommunications link to an ASCII file on the supporting PC using Campbell Scientific datalogger support software (APPENDIX. Software (p. 465)). See also the manual and Help for the software package being used.

3.1.6.2

Via Mass Storage Device


Caution When removing a CS mass storage device (thumb drive) from the CR800, do so only when the LED is not lit or flashing. Removing a CS mass storage device from the CR800 while the device is active can cause data corruption. Data stored on CS mass storage devices are retrieved through a telecommunication link to the CR800 or by removing the device, connecting it to a PC, and copying / moving files using Windows Explorer.

3.1.6.3

Data File Formats in CR800 Memory


Routine CR800 operations store data in binary data tables. However, when the TableFile() instruction is used, data are also stored in one of several formats in discrete text files in internal or external memory. See SECTION. Data Storage (p. 334) for more information on the use of the TableFile() instruction.

3.1.6.4

Data Format on Computer


CR800 data stored on a PC via support software is formatted as either ASCII or Binary depending on the file type selected in the support software. Consult the software manual for details on the various available data file formats.

35

Section 3. System Overview

3.1.7

Communications
Read More! See SECTION. Telecommunications and Data Retrieval (p. 349). The CR800 communicates with external devices to receive programs, send data, or act in concert with a network. The primary communication protocol is PakBus. Modbus and DNP3 communication protocols are also supported. Refer to APPENDIX. Telecommunications Hardware (p. 477) for information on available communications devices.

3.1.7.1

PakBus
Read More! See SECTION. PakBus Overview (p. 353). The CR800 communicates with Campbell Scientific support software, telecommunication peripherals, and other dataloggers via PakBus, a proprietary network communications protocol. PakBus is a protocol similar in concept to IP (Internet protocol). By using signatured data packets, PakBus increases the number of communications and networking options available to the CR800. Communication can occur via RS-232, CS I/O, or digital I/O ports. Advantages of PakBus: Simultaneous communication between the CR800 and other devices. Peer-to-peer communication-no PC required. Other PakBus dataloggers can be used as "sensors" to consolidate all data into one CR800. Routing - the CR800 can act as a router, passing on messages intended for another logger. PakBus supports automatic route detection and selection. Short distance networks with no extra hardware-A CR800 can talk to another CR800 over distances up to 30 feet by connecting transmit, receive and ground wires between the dataloggers. PC communications with a PakBus datalogger via the CS I/O port, over phone modem or radio, can be routed to other PakBus dataloggers. Datalogger to datalogger communications-special CRBASIC instructions simplify transferring data between dataloggers for distributed decision making or control. In a PakBus network, each datalogger is set to a unique address before being installed in the network. Default PakBus address is 1. To communicate with the CR800, the datalogger support software (see SECTION. Telecommunications and Data Retrieval (p. 349)) must know the CR800's PakBus address. The PakBus address is changed using the optional keyboard display, DevConfig software, CR800 status table, or PakBus Graph software.

36

Section 3. System Overview

3.1.7.2

Modbus
Read More! See SECTION. Modbus (p. 368). The CR800 supports Modbus Master and Modbus Slave communication for inclusion in Modbus SCADA networks.

3.1.7.3

DNP3 Communication
Read More! See SECTION. DNP3 (p. 365). The CR800 supports DNP3 Slave communication for inclusion in DNP3 SCADA networks.

3.1.7.4

Keyboard Display
Read More! See SECTION. Using the Keyboard Display (p. 375). The optional keyboard display is a powerful tool for field use. It allows complete access to most datalogger tables and function, allowing the user to monitor, make modifications, and troubleshoot a datalogger installation conveniently and in most weather conditions.

3.1.7.4.1

Custom Menus Read More! To implement custom menus, see CRBASIC Help for the DisplayMenu() instruction. CRBASIC programming in the CR800 facilitates creation of custom menus for the optional keyboard display. FIGURE. Custom Menu Example (p. 38) shows windows from a simple custom menu named "DataView". "DataView" appears as the main menu on the keyboard display. DataView has menu item, "Counter", and submenus "PanelTemps", "TCTemps", and "System Menu". "Counter" allows selection of 1 of 4 values. Each submenu displays two values from CR800 memory. PanelTemps shows the CR800 wiring panel temperature at each scan, and the one minute sample of panel temperature. TCTemps displays two thermocouple temperatures.

37

Section 3. System Overview

FIGURE 28. Custom Menu Example

3.1.8

Security
CR800 applications may include collection of sensitive data, operation of critical systems, or networks accessible by many individuals. CR800 security provides means by which partial or complete lock-out can be accomplished in the CRBASIC program code. Up to three levels of security can be set in the datalogger. Level 1 must be set before Level 2. Level 2 must be set before Level 3. If a level is set to 0, any level greater than it will also be set to 0 (e.g., if Level 2 is 0, Level 3 is 0). Valid security codes are 1 through 65535 (0 is no security). Each level must have a unique code. If security is set to a negative code in the CR800, a positive code must be entered to unlock the CR800. That positive code = 65536 + (negative security code). For example, a security code of -1111 must be entered as 64425 to unlock the CR800. Security can be enabled using DevConfig, the optional keyboard display, Status Table, or the SetSecurity() instruction. Note -- If SetSecurity() is used in the CRBASIC program, the security settings persist if a new program that has no SetSecurity() instruction is sent to the CR800. Functions affected by each level of security are: Level 1: collecting data, setting the clock, and setting variables in the Public table are unrestricted. Enter level 1 password to change or retrieve the datalogger program or set variables in the Status table.

38

Section 3. System Overview Level 2: collecting data are unrestricted. Enter level 2 password to set the clock or change variables in the public table. Enter level 1 password to change the datalogger program or non-read-only postings in the status table. Level 3: Enter level 3 password to collect data. Enter level 2 password to collect data, set public variable and set the clock. Enter level 1 password to open all datalogger functions to unrestricted use. In addition to passwords, recording and monitoring program signatures are important components of a security scheme. Read more about use of program signatures in SECTION. System Signatures (p. 158).

3.1.9

Maintenance
Read More! See SECTION. Care and Maintenance (p. 389). With reasonable care, the CR800 should give many years of reliable service.

3.1.9.1

Protection from Water


The CR800 and most of its peripherals must be protected from moisture. Moisture in the electronics will seriously damage, and probably render unrepairable, the CR800. Water can come from flooding or sprinkler irrigation, but most often comes as condensation. In most cases, protecting from water is as easy as placing the CR800 in a weather tight enclosure with desiccant and elevating the enclosure above the ground. The CR800 is shipped with desiccant to reduce humidity. Desiccant should be changed periodically. Do not completely seal the enclosure if lead acid batteries are present; hydrogen gas generated by the batteries may build up to an explosive concentration. Refer to APPENDIX. Enclosures (p. 473) for information on available weather tight enclosures.

3.1.9.2

Protection from Voltage Transients


Read More! See SECTION. Grounding (p. 91). The CR800 must be grounded to minimize the risk of damage by voltage transients associated with power surges and lightning induced transients. Earth grounding is required to form a complete circuit for voltage clamping devices internal to the CR800. Refer to APPENDIX. Voltage Transient Suppressors (p. 479) for information on available surge protection devices.

3.1.9.3

Calibration
Read More! See SECTION. Self-Calibration (p. 60). The CR800 uses an internal voltage reference to routinely calibrate itself. To maintain electrical specifications, Campbell Scientific recommends factory recalibration every two years. For calibration services, contact Campbell Scientific to obtain a Return Materials Authorization (RMA) prior to shipping.

39

Section 3. System Overview

3.1.9.4

Internal Battery
Caution -- Misuse of the lithium battery or installing it improperly can cause severe injury. Fire, explosion, and severe burn hazard! Do not recharge, disassemble, heat above 100C (212F), solder directly to the cell, incinerate, nor expose contents to water. Dispose of spent lithium batteries properly. The CR800 contains a lithium battery that operates the clock and SRAM when the CR800 is not externally powered. In a CR800 stored at room temperature, the lithium battery should last approximately 3 years (less at temperature extremes). In installations where the CR800 is powered most of the time, the lithium cell should last much longer. Lithium battery voltage can be monitored from the CR800 Status Table. Operating range of the battery is 2.7 to 3.6 Vdc. Replace the battery as directed in SECTION. Replacing the Internal Battery (p. 391) when the voltage is below 2.7 Vdc.

3.2

PC Support Software
Read More! See APPENDIX. Software (p. 465). Several datalogger support software products for Windows are available. Software for datalogger setup and simple applications, PC200W and Short Cut, are available at no cost at www.campbellsci.com. For more complex programming, telecommunications, networking, and reporting features, fullfeatured products are available from Campbell Scientific. PC200W Starter Software is available at no charge at www.campbellsci.com. It supports a transparent RS-232 connection between PC and CR800, and includes Short Cut for creating CR800 programs. Tools for setting the datalogger clock, sending programs, monitoring sensors, and on-site viewing and collection of data are also included. PC400 supports a variety of telecommunication options, manual data collection, and data monitoring displays. Short Cut, CRBASIC Editor, and Transformer Utility are included for creating CR800 programs. PC400 does not support complex communication options, such as phone-to-RF, PakBus routing, or scheduled data collection. LoggerNet supports combined telecommunication options, customized data monitoring displays, and scheduled data collection. It includes Short Cut, CRBASIC Editor, and Transformer Utility programs for creating CR800 programs. It also includes tools for configuring, trouble-shooting, and managing datalogger networks. LoggerNet Admin and LoggerNet Remote are also available for more demanding applications.

40

Section 3. System Overview

3.3

CR800 Specifications
RANGES / RESOLUTION:
spacer

SPECIFICATIONS valid from -25 to +50C, non-

condensing environment, unless otherwise specified. Recalibration recommended every two years. Critical specifications and system configuration should be confirmed with Campbell Scientific before purchase.

Chan

Range

Resolution 0.67mV

Current Source / Sink 25 mA

(10) ms to 1 day @ 10 ms increments ANALOG INPUTS (SE 1-6 or DIFF 1-12) (3) differential (DF) or 6 single-ended (SE) individually configured input channels. Channel expansion provided by optional analog multiplexers. RANGES and RESOLUTION: Basic resolution (Basic Res) is the A/D resolution of a single conversion. Resolution of DF measurements with input reversal is half the Basic Res.
spacer spacer spacer

PROGRAM EXECUTION RATE

Vx 2.5V spacer spacer Vx ACCURACY

spacer spacer

(0.06% of setting + 0.8 mV, 0 to 40C (0.12% of setting + 0.8 mV, -25 to 50C (0.18% of setting + 0.8 mV,-55 to 85C(-XT only)

HIGH FREQUENCY MAX: 400 kHz SWITCH CLOSURE FREQUENCY MAX: 150 Hz EDGE TIMING RESOLUTION: 540 ns OUTPUT VOLTAGES (no load): high 5.0 V 0.1 V; low <0.1 OUTPUT RESISTANCE: 330 ohms INPUT STATE: high 3.8 to 16 V; low -8.0 to 1.2 V INPUT HYSTERISIS: 1.4 V INPUT RESISTANCE:
100 kohms with inputs <6.2 Vdc 220 ohm with inputs 6.2 Vdc

Vx FREQUENCY SWEEP FUNCTION: Switched outputs provide a programmable swept frequency, 0 to 2500 mV square waves for exciting vibrating wire transducers. CURRENT SOURCING/SINKING: 25 mA MEASUREMENT TYPES: Ratiometric measurements of 4and 6-wire full bridges, and 2-, 3-, and 4-wire half bridges. Precise, dual polarity excitation for voltage excitation eliminates DC errors. Offset values are reduced by a factor of 2 when excitation reversal is used. VOLTAGE RATIO ACCURACY8: Assuming excitation voltage of at least 1000 mV, not including bridge resistor error: (0.04% of reading + offset)/Vx
spacer Spacer spacer

SERIAL DEVICE/RS-232 SUPPORT: 0 to 5 Vdc UART


spacer spacer

Range (mV)1 5000 2500 250 25 7.5 2.5


spacer spacer

DF Res (V)2 667 333 33.3 3.33 1.0 0.33

Basic Res (V) 1333 667 66.7 6.7 2.0 0.67

RESISTANCE MEASUREMENTS

SWITCHED 12 Vdc (SW12) (1) independent 12 Vdc unregulated source is switched on and off under program control. Thermal fuse hold current = 900 mA @ 20C, 650 mA @ 50C, 360 mA @ 85C.
STANDARD(S) TO WHICH CONFORMITY IS DECLARED: IEC61326:2002 RS-232 PORTS:

CE COMPLIANCE

COMMUNICATION
9-pin: DCE (not electrically isolated) for computer or non-CSI modem connection. COM1 to COM2: Two independent Tx/Rx pairs on control ports (non-isolated); 0 to 5 Vdc UART Baud Rate: Selectable from 300 to 115.2 kbps. Default Format: 8 data bits; 1 stop bits; no parity. Optional Formats: 7 data bits; 2 stop bits; odd, even parity.

Range overhead of 9% on all ranges guarantees full-scale voltage will not cause over-range. 2 Resolution of DF measurements with input reversal.

ACCURACY3: (0.06% of reading + offset), 0 to 40C (0.12% of reading + offset), -25 to 50C (0.18% of reading + offset),-55 to 85C(-XT only)
3
:

Accuracy does not include sensor and measurement noise. Offsets are defined as: Offset for DF w/input reversal = 1.5 x Basic Res+1.0 V Offset for DF w/o input reversal = 3 x Basic Res+2.0 V Offset for SE = 3 x Basic Res + 3.0 V

spacer spacer

Accuracy does not include sensor and measurement noise. Offsets are defined as: Offset for DF w/input reversal = 1.5 x Basic Res + 1.0 V Offset for DF w/o input reversal = 3 x Basic Res + 2.0 V Offset for SE = 3 x Basic Res + 3.0 V

ANALOG MEASUREMENT SPEED:


Integration Type Code 250 4 _60Hz4 _50Hz
spacer

Integration Time 250s 16.67ms 20.00ms

Settling Time 450s 3ms 3ms

----Total Time5---DF w/ SE w/ Input No Rev Rev 1ms 20ms 25ms 12ms 40ms 50ms

4AC line noise filter 5 Includes 250 s for conversion to engineering units

INPUT NOISE VOLTAGE: For DF measurements with input reversal on 2.5 mV input range (digital resolution dominates for higher ranges). 250 s Integration: 0.34 V RMS 50/60 Hz Integration: 0.19 V RMS INPUT LIMITS: 5 Vdc DC COMMON MODE REJECTION: >100 dB NORMAL MODE REJECTION: 70 dB @ 60 Hz when using 60 Hz rejection SUSTAINED INPUT VOLTAGE W/O DAMAGE: 16 Vdc max. INPUT CURRENT: 1 nA typical, 6 nA max. @ 50C; 90 nA @ 85C INPUT RESISTANCE: 20 Gohms typical ACCURACY OF BUILT-IN REFERENCE JUNCTION THERMISTOR (for thermocouple measurements): 0.3C, -25 to 50C 0.8C, -55 to 85C (-XT only) PERIOD AVERAGE: Any of the 6 SE analog inputs can be used for period averaging. Accuracy is (0.01% of reading + resolution), where resolution is 136 ns divided by the specified number of cycles to be measured. Input amplitude and frequency:
Voltage Gain 1 10 33 100 Input Range mV 250 25 7.5 2.5 Signal 6 Peak-Peak Min Max mV V 500 10 5 2 10 2 2 2 Min Pulse Width s 2.5 10 62 100 Max Freq kHz 200 50 8 5
7

(2) inputs individually selectable for switch closure, high frequency pulse, or low-level ac. Independent 24-bit counters for each input. 6 MAXIMUM COUNTS PER SCAN: 16.7 x 10 SWITCH CLOSURE MODE: Minimum Switch Closed Time: 5 ms Minimum Switch Open Time: 6 ms Max. Bounce Time: 1 ms open w/o being counted HIGH FREQUENCY PULSE MODE: Maximum Input Frequency: 250 kHz Maximum Input Voltage: 20 V Voltage Thresholds: Count upon transition from below 0.9 V to above 2.2 V after input filter with 1.2 s time constant. LOW LEVEL AC MODE: Internal ac coupling removes dc offsets up to 0.5 Vdc. Input Hysteresis: 12 mV RMS @ 1 Hz Maximum ac Input Voltage: 20 V Minimum ac Input Voltage:
Sine wave (mV RMS) 20 200 2000 5000 Range (Hz) 1.0 to 20 0.5 to 200 0.3 to 10,000 0.3 to 20,000

PULSE COUNTERS (P 1-2)

CS I/O PORT: Interface with CSI telecommunications peripherals. SDI-12: Digital control ports 1 or 3 are individually configurable and meet SDI-12 Standard version 1.3 for datalogger mode. Up to ten SDI-12 sensors are supported per port.
spacer spacer

PROTOCOLS SUPPORTED: PakBus, Modbus, DNP3, FTP, HTTP, XML, POP3, SMTP, Telnet, NTCIP, NTP, SDI12, and SDM.

SYSTEM

PROCESSOR: Renesas H8S 2322 (16-bit CPU with 32-bit internal core, running at 7.3 MHz) MEMORY: 2 Mbytes of Flash for operating system; 4 Mbytes of battery-backed SRAM for CPU usage, program storage and final data storage. RTC CLOCK ACCURACY: 3 min. per year. Correction via GPS optional. RTC CLOCK RESOLUTION: 10 ms VOLTAGE: 9.6 to 16 Vdc
spacer spacer

SYSTEM POWER REQUIREMENTS


EXTERNAL BATTERIES: 12 Vdc nominal (power connection is reverse polarity protected) INTERNAL BATTERIES: 1200 mAhr lithium battery for clock and SRAM backup typically provides 3 years of backup. TYPICAL CURRENT DRAIN: Sleep Mode: 0.6 mA 1 Hz Sample Rate (one fast SE meas.): 1 mA 100 Hz Sample Rate (one fast SE meas.): 16.2 mA 100 Hz Sample Rate (one fast SE meas. w/ RS-232 communications): 27.6 mA optional keyboard display on: add 7 mA to current drain Backlight on: add 100 mA to current drain

DIGITAL I/O PORTS (C 1-4)

(4) ports software selectable as binary inputs or control outputs. Provide edge timing, subroutine interrupts / wake up, switch closure pulse counting, high frequency pulse counting, asynchronous communications (UARTs), SDI-12 communications, and SDM communications

PHYSICAL

DIMENSIONS: 241 x 104 x 51 mm (9.5 x 4.1 x 2 in); additional clearance required for cables and leads. MASS/WEIGHT (datalogger + base):
spacer spacer

spacer

MASS: 0.7 kg WEIGHT: 1.5 lbs

WARRANTY

(3) years against defects in materials and workmanship.

6With signal centered at CR800 ground. 7 The maximum frequency = 1/(Twice Minimum Pulse Width) for 50% of duty cycle signals.

ANALOG OUTPUTS (Vx 1-2) (2) switched voltage outputs sequentially active only during measurement.

41

Section 3. System Overview

42

Section 4. Measurements
Several features give the CR800 the flexibility to measure many sensor types. Contact a Campbell Scientific applications engineer if assistance is required in assessing CR800 compatibility to a specific application or sensor type. Some sensors require precision excitation or a source of power. See SECTION. Powering Sensors and Devices (p. 88).

4.1

Time
Measurement of time is an essential function of the CR800. Time measurement with the on-board clock enables the CR800 to attach time stamps to data, measure the interval between events, and time the initiation of control functions.

4.1.1

Time Stamps
A measurement without an accurate time reference has little meaning. Data on the CR800 are stored with time stamps. How closely a time stamp corresponds to the actual time a measurement is taken depends on several factors. The time stamp in common CRBASIC programs matches the time at the beginning of the current scan as measured by the real time clock in the CR800. If a scan starts at 15:00:00, data output during that scan will have a time stamp of 15:00:00 regardless of the length of the scan or when in the scan a measurement is made. The possibility exists that a scan will run for some time before a measurement is made. For instance, a scan may start at 15:00:00, execute time consuming code, then make a measurement at 15:00:00.51. The time stamp attached to the measurement, if the CallTable() instruction is called from within the Scan ... NextScan construct, will be 15:00:00, resulting in a time stamp skew of 510 ms. Time stamp skew is not a problem with most applications because, program execution times are usually short, so time stamp skew is only a few milliseconds. Most measurement requirements allow for a few milliseconds of skew. data processed into averages, maxima, minima, etc are composites of several measurements. Associated time stamps only reflect the time the last measurement was made and processing calculations were completed, so the significance of the exact time a specific sample was measured diminishes. Applications measuring and storing sample data wherein exact time stamps are required can be adversely affected by time stamp skew. Skew can be avoided by Making measurements early in a scan interval, before time consuming code. Programming the CR800 such that the time stamp reflects the system time rather than the scan time. When CallTable() is executed from within the

43

Section 4. Measurements Scan ... NextScan construct, as is normally done, the time stamp reflects scan time. By executing the CallTable() instruction outside the Scan ... NextScan construct, the time stamp will reflect system time instead of scan time. CRBASIC EXAMPLE. Time Stamping with System Time (p. 44) shows the basic code requirements.

CRBASIC EXAMPLE 1.
'Declare Variables Public value 'Declare Data Table DataTable(Test,True,1000) Sample(1,Value,FP2) EndTable SequentialMode BeginProg Scan(1,Sec,10,0)

Time Stamping with System Time

'Delay -- in an operational program, delay may be caused by other code Delay(1,500,mSec) 'Measure Value -- can be any analog measurement PanelTemp(Value,0) 'Immediately call SlowSequence to execute CallTable() TriggerSequence(1,0) NextScan 'Allow data to be stored 510 ms into the Scan with a s.51 timestamp SlowSequence Do: WaitTriggerSequence: CallTable(Test): Loop EndProg

Other time processing CRBASIC instructions are governed by these same rules. Consult CRBASIC Editor Help for more information on specific instructions.

4.2

Voltage
The CR800 incorporates a programmable gain input instrumentation amplifier (PGIA), as illustrated in FIGURE. PGI Amplifier (p. 45). The voltage gain of the instrumentation amplifier is determined by the user selected range code associated with voltage measurement instructions. The PGIA can be configured to measure either single-ended (SE) or differential (DIFF) voltages. For SE measurements, the voltage to be measured is connected to the H input while the L input is internally connected to signal ground ( ). CRBASIC instructions BrHalf (), BrHalf3W (), TCSE (), Therm107 (), Therm108 (), Therm109 (), and VoltSE () perform SE voltage measurements. For DIFF measurements, the voltage to be measured is connected between the H and L inputs on the PGIA.

44

Section 4. Measurements CRBASIC instructions BrFull (), BrFull6W (), BrHalf4W (), TCDiff (), and VoltDiff () instructions perform DIFF voltage measurements.

FIGURE 29. PGI Amplifier

A PGIA processes the difference between the H and L inputs, while rejecting voltages that are common to both inputs. FIGURE. PGIA with Input Signal Decomposition (p. 45), illustrates the PGIA with the input signal decomposed into a common-mode voltage (Vcm) and a DIFF mode voltage (Vdm). The common-mode voltage is the average of the voltages on the VH and VL inputs, i.e., Vcm = (VH + VL)/2, which can be viewed as the voltage remaining on the H and L inputs with the DIFF voltage (Vdm) equal to 0. The total voltage on the H and L inputs is given as VH = Vcm + Vdm/2, and VL = Vcm Vdm/2, respectively.

FIGURE 30. PGIA with Input Signal Decomposition

4.2.1

Input Limits
The Input Limits specifies the voltage range, relative to CR800 ground, which both H and L input voltages must be within to be processed correctly by the PGIA. Input Limits for the CR800 are 5 Vdc. Input voltages in which VH or VL are beyond the 5 Vdc Input Limits may suffer from undetected measurement errors. The term Common-mode Range, which defines the valid range of common-mode voltages, is often used instead of Input Limits. For DIFF voltages that are small compared to the Input Limits, Common-mode Range is essentially equivalent to Input Limits. Yet from FIGURE. PGIA with Input Signal Decomposition (p. 45), Common-mode Range = | Input Limits Vdm/2 |,

45

Section 4. Measurements indicating a reduction in Common-mode Range for increasing DIFF signal amplitudes. For example, with a 5000 mV DIFF signal, the Common-mode Range is reduced to 2.5 Vdc, whereas Input Limits are always 5 Vdc. Hence for non-negligible DIFF signals, "Input Limits" is more descriptive than "Common-mode Range." Note Two sets of numbers are assigned to analog channels. For differential measurements, analog channels are numbered 1 - 3. Each differential channel as two inputs: high (H) and low (L). For single-ended measurement, analog channels are numbered 1-6. Note Sustained voltages in excess of 16 V input to the analog channels will damage CR800 circuitry.

4.2.2

Reducing Error
Read More! Consult the following White Papers at www.campbellsci.com for in-depth treatment of the advantages of differential and single-ended measurements: "Preventing and Attacking Measurement Noise Problems", "Benefits of Input Reversal and Excitation Reversal for Voltage Measurements", and "Voltage Measurement Accuracy, Self-Calibration, and Ratiometric Measurements. Deciding whether a differential or single-ended measurement is appropriate for a particular sensor requires sorting through trade-offs of accuracy and precision, available measurement hardware, and fiscal constraints. In broad terms, analog voltage is best measured differentially because these measurements include noise reduction features, listed below, not included in single-ended measurements. Passive Noise Rejection No voltage reference offset Common-mode noise rejection Rejects capacitively coupled noise

Active Noise Rejection Input reversal Review SECTION. Input and Excitation Reversal (p. 53) for details Doubles input reversal signal integration time

Reasons for using single-ended measurements, however, include: Sensor is not designed for differential measurement. Sensor number exceeds available differential channels.

46

Section 4. Measurements Sensors with a high signal-to-noise ratio, such as a relative humidity sensor with a full scale output of 0 to 1000 mV, can normally be measured single-ended without a significant reduction in accuracy or precision. Sensors with low signal-to-noise ratio, such as thermocouples, should normally be measured differentially. However, if the measurement to be made does not require high accuracy or precision, such as thermocouples measuring brush fire temperatures, a single-ended measurement may be appropriate. If sensors require differential measurement, but adequate input channels are not available, an analog multiplexer should be acquired to expand differential input capacity. Refer to APPENDIX. Analog Multiplexers (p. 473) for information concerning available multiplexers. Because a single-ended measurement is referenced to CR800 ground, any difference in ground potential between the sensor and the CR800 will result in an error in the measurement. For example, if the measuring junction of a copper-constantan thermocouple being used to measure soil temperature is not insulated, and the potential of earth ground is 1 mV greater at the sensor than at the point where the CR800 is grounded, the measured voltage will be 1 mV greater than the thermocouple output, or approximately 25C high. A common problem with ground potential difference occurs in applications wherein external signal conditioning circuitry is powered by the same source as the CR800, such as an ac mains power receptacle. Despite being tied to the same ground, differences in current drain and lead resistance may result in a different ground potential between the two instruments. Hence, a differential measurement should be made on the analog output from an external signal conditioner. Differential measurements MUST be used when the low input is known to be different from ground.

4.2.3

Measurement Sequence
The CR800 measures analog voltage by integrating the input signal for a fixed duration, then holding the integrated value during the successive approximation analog-to-digital (A/D) conversion. The CR800 can make and store measurements from up to 3 differential or 6 single-ended channels at the minimum scan rate of 10 ms (100 Hz) using the burst mode voltage measurement (SECTION. Burst (p. 293)). The maximum conversion rate is 2000 per second for measurements made on a single channel. The timing of CR800 measurements is precisely controlled. The measurement schedule is determined at compile time and loaded into memory. This schedule sets interrupts that drive the measurement task. Using two different voltage measurement instructions with the same voltage range takes the same measurement time as using one instruction with two repetitions. Note This is not the case with legacy CR10(X), 21X, CR23X, and CR7(X) dataloggers. Using multiple measurement "reps" in these dataloggers reduced overall measurement time. Several parameters in CRBASIC voltage measurement instructions VoltDiff () and VoltSE () vary the sequence and timing of measurements. TABLE.

47

Section 4. Measurements CRBASIC Parameters Varying Measurement Sequence and Timing (p. 48) lists these parameters. TABLE 4.
MeasOfs RevDiff SettlingTime Integ RevEx

CRBASIC Parameters Varying Measurement Sequence and T


Description
Correct ground offset on single-ended measurements. Reverse high and low differential inputs. Sensor input settling time. Duration of input signal integration. Reverse polarity of excitation voltage.

CRBASIC Parameter

4.2.4

Measurement Accuracy
CR800 analog measurement error is calculated as Error = Gain Error (%) + Offset Error Gain error is expressed as % and is a function of input voltage and CR800 temperature. It is minimized by factory calibration and increases with component temperature and aging. Between 0C and 40C, gain error is 0.06% of input voltage. Offset error is expressed as Offset Error = Resolution + 1 V where Resolution = published resolution of the programmed input voltage range (see SECTION. Specifications (p. 41)). FIGURE. Voltage Measurement Accuracy (0 to 40C) (p. 49) illustrates that as magnitude of input voltage decreases, measurement error decreases. Note The accuracy specification includes only the CR800s contribution to measurement error. It does not include the error of sensors. For example, assume the following (see SECTION. Specifications (p. 41)): Input Voltage: +2500 mV Programmed Input Voltage Range: 2500 mV Programmed Measurement Instruction: VoltDiff() Input Measurement Reversal = True CR800 Temperature: Between 0C and 40C Accuracy of the measurement is calculated as follows:

48

Section 4. Measurements Error = Gain Error + Offset Error, where Gain Error = (2500 * 0.0006) = 1.5 mV and Offset Error = Differential (DF) Resolution + 1 V = 333 V + 1 V = 334 V Therefore, Error = Gain Error + Offset Error = 1.5 mV + 334 V. = 1.834 mV In contrast, the error for a 500 mV input under the same constraints is 0.634 mV.

FIGURE 31. Voltage Measurement Accuracy (0 to 40 C)

49

Section 4. Measurements

4.2.5

Voltage Range
In general, a voltage measurement should use the smallest fixed input range that will accommodate the full scale output of the sensor being measured. This results in the best measurement accuracy and resolution. The CR800 has fixed input ranges for voltage measurements and an auto range to automatically determine the appropriate input voltage range for a given measurement. TABLE. Analog Voltage Input Ranges with CMN / OID (p. 50) lists input voltage ranges and range codes.

4.2.5.1

AutoRange
For signals that do not fluctuate too rapidly, AutoRange allows the CR800 to automatically choose the voltage range to use. AutoRange makes two measurements. The first measurement determines the range to use, and is made with the 250 s integration on the 5000 mV range. The second measurement is made using the appropriate range with the integration specified in the instruction. Both measurements use the settling time programmed in the instruction. AutoRange optimizes resolution but takes longer than a measurement on a fixed range, because of the two measurements required. An AutoRange measurement will return NAN (Not-A-Number) if the voltage exceeds the range picked by the first measurement. To avoid problems with a signal on the edge of a range, AutoRange selects the next larger range when the signal exceeds 90% of a range. AutoRange is recommended for a signal that occasionally exceeds a particular range, for example, a Type J thermocouple measuring a temperature usually less than 476C (25 mV range) but occasionally as high as 500C (250 mV range). AutoRange should not be used for rapidly fluctuating signals, particularly signals traversing several voltage ranges rapidly. The possibility exists that the signal can change ranges between the range check and the actual measurement. TABLE 5. Analog Voltage Input Ranges with Options for Common Mod Input Detect (OID)
Range Code
mV5000 mV2500 mV250 mV25
2 2 2 3 2 1

Description
measures voltages between 5000 mV measures voltages between 2500 mV measures voltages between 250 mV measures voltages between 25 mV measures voltages between 7.5 mV measures voltages between 2.5 mV datalogger determines the most suitable range

mV7_5 mV2_5

AutoRange
1 2 3

Append with "C" to enable CMN/OID and set excitation to full-scale DAC (~2700 mV) Append with "C" to enable CMN/OID Append with "C" to enable CMN/OID on ranges 250 mV, CMN on ranges > 250 mV

50

Section 4. Measurements

4.2.5.2

Fixed Voltage Ranges


An approximate 9% range overhead exists on fixed input voltage ranges. For example, over-range on the 2500 mV input range occurs at approximately +2725 mV and -2725 mV. The CR800 indicates a measurement over-range by returning a NAN (Not-A-Number) for the measurement.

4.2.5.3

Common Mode Null / Open Input Detect


For floating differential sensors such as thermocouples, nulling of any residual common-mode voltage prior to measurement pulls the H and L input amplifier (IA) inputs within the 5 V Input Limits. Appending a C to the range code (i.e. "mV2_5C") enables the nulling of the common-mode voltage prior to a differential measurement on the 2.5 mV, 7.5 mV, 25 mV, and 250 mV input ranges. Another useful feature for both SE and DIFF measurements is the detection of open inputs due to a broken or disconnected sensor wire, to prevent otherwise undetectable measurement errors. Range codes ending with C also enable open detect for all input ranges, except the 5000 mV input range (See TABLE. Analog Voltage Input Ranges with CMN / OID (p. 50)). On the 2.5 mV, 7.5 mV, 25 mV, and 250 mV input ranges, the C range code option results in a brief 50 microseconds internal connection of the H and L inputs of the IA to 300 mV and ground, respectively, while also connected to the sensor to be measured. The resulting internal common-mode voltage is 150 mV, which is well within the 5 V Input Limits. Upon disconnecting the internal 300 mV and ground connections, the associated input is allowed to settle to the desired sensor voltage and the voltage measurement made. If the associated input is open (floating) the input voltages will remain near the 300 mV and ground, resulting in an over range (NAN) on the 2.5 mV, 7.5 mV, 25 mV, and the 250 mV input range. If the associated sensor is connected and functioning properly, a valid measured voltage will result after the input settling associated with open input detect. On the 2500 mV input range the C option (i.e. mV2500C) can be used for open input detect with some limitations, as an internal voltage large enough to cause measurement over range is not available. The C option for a voltage measurement on the 2500 mV input range (i.e. mV2500C), results in the H input being briefly connected to a voltage greater than 2500 mV, while the L input is connected to ground. The resulting common-mode voltage is > 1.25 V which is not very helpful in nulling residual common-mode voltage. However, open input detect is still possible by including an IfThenElse statement in the CRBASIC program to test the measured results. For example, the result of a voltage measurement on the 2500 mV input range with the C option could be tested for > 2500 mV to indicate an open input. For bridge measurements, the returned value X being > 1 would indicate an open input. For example, the BrHalf() instruction returns the value X defined as V1/Vx, where V1 is the measured single-ended voltage and Vx is the user defined excitation voltage having a 2500 mV maximum value. For a BrHalf() measurement utilizing the C option on the 2500 mV input range (i.e. mV2500C), a result of X > 1 indicates an open input for the V1 measurement. The C option is not available on the 5000 mV input range.

51

Section 4. Measurements

Open Input Detect Cautionary Notes


if the input is not a truly open circuit, such as might occur on a wet cut cable end, the open circuit may not be detected because the input capacitor discharges through external leakage to ground to a normal voltage within the settling time of the measurement. This problem is worse when a long settling time is selected, as more time is given for the input capacitors to discharge to a "normal" level. if the open circuit is at the end of a very long cable, the test pulse (300 mV) may not charge the cable (with its high capacitance) up to a voltage that generates NaN or a distinct error voltage. The cable may even act as an aerial and inject noise which also might not read as an error voltage. the sensor may "object" to the test pulse being connected to its output, even for 100 microseconds. There is little or no risk of damage, but the sensor output may be kicked into temporary oscillation. Programming a longer settling time in the CRBASIC measurement instruction to allow oscillations to decay before the A/D conversion may mitigate the problem.

4.2.6

Offset Voltage Compensation


Analog measurement circuitry in the CR800 may introduce a small offset voltage to a measurement. Depending on the magnitude of the signal, this offset voltage may introduce significant error. For example, an offset of 3 V on a 2500 mV signal introduces an error of only 0.00012%; however, the same offset on a 0.25 mV signal introduces an error of 1.2%. The primary source of offset voltage is the Seebeck effect, which arises at the junctions of differing metals in electronic circuits. A secondary source of offset voltage are return currents incident to powering external devices through the CR800. Return currents create voltage drop at the ground terminals that may be used as signal references. CR800 measurement instructions incorporate techniques to cancel these unwanted offsets. TABLE. Analog Measurement Instructions and Offset Voltage Compensation Options (p. 52) lists available options.

52

Section 4. Measurements

TABLE 6.

Analog Measurements and Offset Voltage Compensation


Measure Ground Reference Offset (MeasOff = True)
* * * * * * * * * * * * * * * *

CRBASIC Voltage Measurement Instruction


VoltDiff() VoltSe() TCDiff() TCSe() BrHalf() BrHalf3W() Therm107() Therm108() Therm109() BrHalf4W() BrFull() BrFull6W() AM25T()

Input Reversal (RevDiff = True)


*

Excitation Reversal (RevEx = True)

Background Calibration (RevDiff = False) (RevEx = False) (MeasOff = False)


* * * * * * * * * * * * *

4.2.6.1

Input and Excitation Reversal


Reversing inputs (differential measurements) or reversing polarity of excitation voltage (bridge measurements) cancels stray voltage offsets. For example, if there is a +3 Volt offset in the measurement circuitry, a 5 mV signal is measured as 5.003 mV. When the input or excitation is reversed, the measurement is -4.997 mV. Subtracting the second measurement from the first and dividing by 2 cancels the offset: 5.003 mV - (-4.997 mV) = 10.000 mV 10.000 mV / 2 = 5.000 mV. When the CR800 reverses differential inputs or excitation polarity, it delays the same settling time after the reversal as it does before the first measurement. Thus there are two delays per channel when either RevDiff or RevEx is used. If both RevDiff and RevEx are True, four measurements are performed; positive and negative excitations with the inputs one way and positive and negative excitations with the inputs reversed. To illustrate, the CR800 switches to the channel sets the excitation, settles, measures, reverses the excitation, settles, measures,

53

Section 4. Measurements

reverses the excitation, reverses the inputs, settles, measures, reverses the excitation, settles, measures. There are four delays per channel measured. The CR800 processes the four submeasurements into a single reported value. In cases of excitation reversal, excitation "on time" for each polarity is exactly the same to ensure that ionic sensors do not polarize with repetitive measurements. Read More! A white paper entitled "The Benefits of Input Reversal and Excitation Reversal for Voltage Measurements" is available at www.campbellsci.com.

4.2.6.2

Ground Reference Offset Voltage


When MeasOff is enabled (= True), the CR800 measures the offset voltage of the ground reference prior to each VoltSe () or TCSe () measurement. This offset voltage is subtracted from the subsequent measurement.

4.2.6.3

Background Calibration (RevDiff, RevEx, MeasOff = False)


If RevDiff, RevEx, or MeasOff is disabled (= False) in a measurement instruction, offset voltage compensation is still performed, albeit less effectively, by using measurements from automatic background calibration. Disabling RevDiff, RevEx, or MeasOff speeds up measurement time; however, the increase in speed comes at the cost of accuracy 1) because RevDiff, RevEx, and MeasOff are more effective techniques, and 2) because background calibrations are performed only periodically, so more time skew occurs between the background calibration offsets and the measurements to which they are applied. Note Disable RevDiff, RevEx and MeasOff when CR800 module temperature and return currents are slow to change or when measurement duration must be minimal to maximize measurement frequency.

4.2.7

Integration
Read More! See White Paper "Preventing and Attacking Measurement Noise Problems" at www.campbellsci.com. The CR800 incorporates circuitry to perform an analog integration on voltages to be measured prior to the A/D conversion. The magnitude of the frequency response of an analog integrator is a SIN(x) / x shape, which has notches (transmission zeros) occurring at 1 / (integer multiples) of the integration duration. Consequently, noise at 1 / (integer multiples) of the integration duration is effectively rejected by an analog integrator. TABLE. Measurement Integration Times and Codes (p. 55) lists three integration durations available in the CR800 and associated CRBASIC codes. If reversing the differential inputs or reversing the excitation is specified, there are two separate integrations per measurement; if both reversals are specified, there are four separate integrations.

54

Section 4. Measurements

TABLE 7.

CRBASIC Measurement Integration Times and Codes


CRBASIC Code 250 _60Hz _50Hz Comments Fast integration filters 60 Hz noise filters 50 Hz noise

Integration Time (ms) 250 s 16.667 ms 20 ms

4.2.7.1

ac Power Line Noise Rejection


Grid or mains power (50 or 60 Hz, 230 or 120 Vac) can induce electrical noise at integer multiples of 50 or 60 Hz. Small analog voltage signals, such as thermocouples and pyranometers, are particularly susceptible. CR800 voltage measurements can be programmed to reject (filter) 50 or 60 Hz related noise.

4.2.7.1.1

ac Noise Rejection on Small Signals The CR800 rejects ac power line noise on all voltage ranges except mV5000 and mV2500 by integrating the measurement over exactly one ac cycle before A/D conversion as illustrated in TABLE. ac Noise Rejection on Small Signals (p. 55) and the full cycle technique of FIGURE. ac Power Line Noise Rejection (p. 55). TABLE 8. ac Noise Rejection on Small Signals
Measurement Integration Duration 16.667 ms 20 ms CRBASIC Integration Code _60Hz _50Hz

Applies to all analog input voltage ranges except mV2500 and mV5000. ac Power Line Frequency 60 Hz 50 Hz

FIGURE 32. ac Power Line Noise Rejection Techniques

55

Section 4. Measurements

4.2.7.1.2

ac Noise Rejection on Large Signals When rejecting ac noise on the 2500 mV and 5000 mV ranges, the CR800 makes two fast measurements separated in time by line cycle, as illustrated in FIGURE. ac Power Line Noise Rejection Techniques (p. 55). For 60 Hz rejection, line cycle = 8333 s, meaning that the 2nd measurement must start 8333 s after the integration for the first measurement was started. The A/D conversion time is approximately 170 s, leaving a maximum input settling time of approximately 8333 s - 170 s = 8160 s before the 2nd measurement is delayed too long to result in a rejection notch at 60 Hz. For 50 Hz rejection on the mV5000 and mV2500 input ranges, the maximum input settling time of approximately 10,000 - 170 s = 9830 s before the 2nd measurement is delayed too long to result in a rejection notch at 50 Hz. The CR800 does not prevent or warn against setting the settling time beyond the cycle limit. TABLE. ac Noise Rejection on Large Signals (p. 56) lists details of the line cycle ac power line noise rejection technique. TABLE 9.
ac Power Line Frequency 60 Hz 50 Hz

ac Noise Rejection on Large Signals


Measurement Integration Time 250 s x 2 250 s x 2 CRBASIC Integration Code _60Hz _50Hz Default Settling Time 3000 s 3000 s Maximum Recommended Settling Time* 8330 s 10000 s

Applies to analog input voltage ranges mV2500 and mV5000.

*Excitation time equals settling time in measurements requiring excitation. The CR800 cannot excite VX/EX excitation channels during A/D conversion. The cycle technique with excitation limits the length of recommended excitation / settling time for the first measurement to cycle. The CR800 does not prevent or warn against setting a settling time beyond the cycle limit. For example, a settling time of up to 50000 microseconds can be programmed, but the CR800 will execute the measurement as follows:

1. CR800 turns excitation on, waits 50000 microseconds, then makes the first measurement. 2. During A/D, CR800 turns off excitation for 170 microseconds. 3. Excitation is switched on again for cycle, then the second measurement is made.
Restated, when using the cycle 50 Hz or 60 Hz rejection method, a sensor does not see a continuous excitation of the length entered as the settling time before the second measurement if the settling time entered is greater than cycle. Depending on the sensor used, a truncated second excitation may cause measurement errors.

4.2.8

Signal Settling Time


When the CR800 switches to an analog input channel or activates excitation for a bridge measurement, a settling time is required for the measured voltage to settle to its true value before being measured. The rate at which the signal settles is determined by the input settling time constant which is a function of both the source resistance and input capacitance. Rise and decay waveforms are exponential. FIGURE. Input Voltage Rise and Transient Decay (p. 57) shows rising and decaying waveforms settling to the true signal level, Vso.

56

Section 4. Measurements

FIGURE 33. Input Voltage Rise and Transient Decay The CR800 delays after switching to a channel to allow the input to settle before initiating the measurement. The SettlingTime parameter of the associated measurement instruction is provided to allow the user to tailor measurement instructions settling times with 100 s resolution up to the maximum settling time of 50000 s. Default settling times are listed in TABLE. CRBASIC Measurement Settling Times (p. 57), and are meant to provide sufficient signal settling in most cases. Additional settling time may be required when measuring high resistance (impedance) sensors and / or sensors connected to the datalogger by long leads. Measurement time of a given instruction increases with increasing settling time. For example, a 1 ms increase in settling time for a bridge instruction with input reversal and excitation reversal results in a 4 ms increase in time for the CR800 to perform the instruction. TABLE 10. CRBASIC Measurement Settling Times
Settling Time Entry 0 0 0 >100 Input Voltage Range All All All All Integration Code 250 s _50Hz _60Hz All Settling Time* 450 s (default) 3 ms (default) 3 ms (default) s entered

*Minimum settling time required to allow the input to settle to CR800 resolution specifications.

A settling time is required for voltage measurements to minimize the effects of the following sources of error: A small switching transient occurs when the CR800 switches to the singleended or differential channel to be measured. A relatively large transient may be induced on the signal conductor via capacitive coupling during a bridge measurement from an adjacent excitation conductor. 50 or 60 Hz integrations require a relatively long reset time of the internal integration capacitor before the next measurement due to dielectric absorption.

57

Section 4. Measurements

4.2.8.1

Minimizing Settling Errors


When long lead lengths are required the following general practices can be used to minimize or measure settling errors: 1. DO NOT USE WIRE WITH PVC INSULATED CONDUCTORS. PVC has a high dielectric which extends input settling time. 2. Where possible, run excitation leads and signal leads in separate shields to minimize transients. 3. When measurement speed is not a prime consideration, additional time can be used to ensure ample settling time. The settling time required can be measured with the CR800. 4.

4.2.8.2

Measuring the Necessary Settling Time


Settling time for a particular sensor and cable can be measured with the CR800. Programming a series of measurements with increasing settling times will yield data that indicates at what settling time a further increase results in negligible change in the measured voltage. The programmed settling time at this point indicates the true settling time for the sensor and cable combination. CRBASIC EXAMPLE. Measuring Settling Time (p. 58) presents CRBASIC code to help determine settling time for a pressure transducer utilizing a high capacitance semi-conductor. The code consists of a series of full-bridge measurements (BrFull ()) with increasing settling times. The pressure transducer is placed in steady-state conditions so changes in measured voltage are attributable to settling time rather than changes in the measured pressure. Reviewing SECTION. Programming (p. 115) may help in understanding the CRBASIC code in the example.

The first six measurements are shown in TABLE. First Six Values of Settling Time Data (p. 60). Each trace in FIGURE. Settling Time for Pressure Transducer (p. 59) contains all 20 PT() values for a given record number, along with an average value showing the measurements as percent of final reading. The reading has settled to 99.5% of the final value by the fourteenth measurement, PT(14). This is a suitable accuracy for the application, so a settling time of 1400 s is determined to be adequate.

58

Section 4. Measurements

CRBASIC EXAMPLE 2.

Measuring Settling Time

'Program to measure the settling time of a sensor measured with a differential 'voltage measurement Public PT(20) DataTable(Settle,True,100) Sample(20,PT(),IEEE4) EndTable BeginProg Scan(1,Sec,3,0) BrFull(PT(1),1,mV7.5,1,Vx1,1,2500,True,True,100,250,1.0,0) BrFull(PT(2),1,mV7.5,1,Vx1,1,2500,True,True,200,250,1.0,0) BrFull(PT(3),1,mV7.5,1,Vx1,1,2500,True,True,300,250,1.0,0) BrFull(PT(4),1,mV7.5,1,Vx1,1,2500,True,True,400,250,1.0,0) BrFull(PT(5),1,mV7.5,1,Vx1,1,2500,True,True,500,250,1.0,0) BrFull(PT(6),1,mV7.5,1,Vx1,1,2500,True,True,600,250,1.0,0) BrFull(PT(7),1,mV7.5,1,Vx1,1,2500,True,True,700,250,1.0,0) BrFull(PT(8),1,mV7.5,1,Vx1,1,2500,True,True,800,250,1.0,0) BrFull(PT(9),1,mV7.5,1,Vx1,1,2500,True,True,900,250,1.0,0) BrFull(PT(10),1,mV7.5,1,Vx1,1,2500,True,True,1000,250,1.0,0) BrFull(PT(11),1,mV7.5,1,Vx1,1,2500,True,True,1100,250,1.0,0) BrFull(PT(12),1,mV7.5,1,Vx1,1,2500,True,True,1200,250,1.0,0) BrFull(PT(13),1,mV7.5,1,Vx1,1,2500,True,True,1300,250,1.0,0) BrFull(PT(14),1,mV7.5,1,Vx1,1,2500,True,True,1400,250,1.0,0) BrFull(PT(15),1,mV7.5,1,Vx1,1,2500,True,True,1500,250,1.0,0) BrFull(PT(16),1,mV7.5,1,Vx1,1,2500,True,True,1600,250,1.0,0) BrFull(PT(17),1,mV7.5,1,Vx1,1,2500,True,True,1700,250,1.0,0) BrFull(PT(18),1,mV7.5,1,Vx1,1,2500,True,True,1800,250,1.0,0) BrFull(PT(19),1,mV7.5,1,Vx1,1,2500,True,True,1900,250,1.0,0) BrFull(PT(20),1,mV7.5,1,Vx1,1,2500,True,True,2000,250,1.0,0) CallTable Settle NextScan EndProg 'Variable to hold the measurements

59

Section 4. Measurements

FIGURE 34. Settling Time for Pressure Transducer

TABLE 11. First Six Values of Settling Time Data


TIMESTAMP REC PT(1) Smp 1/3/2000 23:34 1/3/2000 23:34 1/3/2000 23:34 1/3/2000 23:34 1/3/2000 23:34 0 1 2 3 4 0.03638599 0.03658813 0.03638599 0.03658813 0.03679027 PT(2) Smp 0.03901386 0.03921601 0.03941815 0.03941815 0.03921601 PT(3) Smp 0.04022673 0.04002459 0.04002459 0.03982244 0.04022673 PT(4) Smp 0.04042887 0.04042887 0.04063102 0.04042887 0.04063102 PT(5) Smp 0.04103531 0.04103531 0.04042887 0.04103531 0.04063102 PT(6) Smp 0.04123745 0.0414396 0.04123745 0.04103531 0.04083316

4.2.9

Self-Calibration
Read More! Related topics can be found in SECTION. Offset Voltage Compensation (p. 52) The CR800 self-calibrates to compensate for changes induced by fluctuating operating temperatures and aging. Without self-calibration, measurement accuracy over the operational temperature range is worse by about a factor of 10. That is, over the extended temperature range of -40C to 85C, the accuracy specification of 0.12% of reading can degrade to 1% of reading with selfcalibration disabled. If the temperature of the CR800 remains the same, there is little calibration drift with self-calibration disabled. Note -- Self-calibration requires the CR800 to have an internal voltage standard. The internal voltage standard should periodically be calibrated by Campbell Scientific. When high accuracy voltage measurements are required, a two year calibration cycle is recommended.

60

Section 4. Measurements Unless a Calibrate() instruction is present in the running CRBASIC program, the CR800 automatically performs self-calibration during spare time in the background as an automatic slow sequence (p. 145), with a segment of the calibration occurring every 4 seconds. If there is insufficient time to do the background calibration because of a scan consuming user program, the CR800 will display the following warning at compile time: "Warning when Fast Scan x is running background calibration is disabled". The composite transfer function of the instrumentation amplifier, integrator, and analog-to-digital converter of the CR800 is described by the following equation:
COUNTS = G * Vin + B

where COUNTS is the result from an analog-to-digital conversion, G is the voltage gain for a given input range, and B is the internally measured offset voltage. Automatic self-calibration only calibrates the G and B values necessary to run a given CRBASIC program, resulting in a program dependent number of selfcalibration segments ranging from at least 6 to a maximum of 91. A typical number of segments required in self-calibration is 20 for analog ranges and 1 segment for the panel temperature measurement, totaling 21 segments. So, (21 segments) * (4 s / segment) = 84 s per complete self-calibration. The worst-case is (91 segments) * (4 s / segment) = 364 s per complete self-calibration. During instrument power-up, the CR800 computes calibration coefficients by averaging 10 complete sets of self-calibration measurements. After power up, newly determined G and B values are low-pass filtered as followed: Next_Value = (1/5) * New + (4/5) * Old. For a step change of the New value, the low-pass filter Next_Value = (1/5) * New + (4/5) * Old results in 20% settling for 1 New value, 49% settling for 3 New values, 67% settling for 5 New values, 89% settling for 10 New values, and 96% settling for 14 New values. If this rate of update for measurement channels is too slow, a user can utilize the Calibrate () instruction. The Calibrate () instruction computes the necessary G and B values every scan without any low-pass filtering. For a VoltSe () instruction, B is determined as part of self-calibration only if the parameter MeasOff = 0. An exception is B for VoltSe () on the 2500 mV input range with 250 s integration, which is always determined in self-calibration for use internally. For a VoltDiff () instruction, B is determined as part of selfcalibration only if the parameter RevDiff = 0. VoltSe () and VoltDiff () instructions on a given input range with the same integration durations, utilize the same G, but different B values. The 6 input voltage ranges (5000 mV, 2500 mV, 250 mV, 25 mV, 7.5 mV, 2.5 mV) along with the 3 different integration durations (250 s, _50Hz, and _60Hz) result in a maximum of 18 different gains (G), and 18 offsets for VoltSe () measurements (B), and 18 offsets for VoltDiff () measurements (B) to be determined during CR800 self-calibration (maximum of 54 values). These values can be viewed in the Status Table, with entries identified as listed in TABLE. Status Table Calibration Entries (p. 62).

Automatic self-calibration can be overridden with the Calibrate () instruction, which forces a calibration for each execution, and does not employ any low-pass filtering on the newly determined G and B values. There are two parameters

61

Section 4. Measurements associated with the Calibrate instruction; Dest and CalRange. The CalRange parameter determines whether to calibrate only the necessary input ranges for a given CRBASIC program (Value = 0) or to calibrate all input ranges (Value 0). The Dest parameter should be of sufficient dimension for all the returned G and B values, which is 2 minimum for the automatic self-calibration of VoltSE () including B (offset) for the 2500 mV input range with first 250 s integration, and 54 maximum for all possible integration durations and input voltage ranges chosen. An example use of the Calibrate () instruction to calibrate all input ranges is given as
Calibrate(cal(1),true)

where Dest is an array of 54 variables, and Range 0 to calibrate all input ranges. Results of this command are listed in TABLE. Calibrate () Instruction Results (p. 63).

TABLE 12. Status Table Calibration Entries


Descriptions of Status Table Elements Status Table Element CalGain(1) CalGain(2) CalGain(3) CalGain(4) CalGain(5) CalGain(6) CalGain(7) CalGain(8) CalGain(9) CalGain(10) CalGain(11) CalGain(12) CalGain(13) CalGain(14) CalGain(15) CalGain(16) CalGain(17) CalGain(18) CalSeOffset(1) CalSeOffset(2) CalSeOffset(3) CalSeOffset(4) CalSeOffset(5) SE SE SE SE SE Differential (Diff) Single-Ended (SE) Offset or Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Gain Offset Offset Offset Offset Offset mV Input Range 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 Integration 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 60 Hz Rejections 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 250 ms 250 ms 250 ms 250 ms 250 ms

62

Section 4. Measurements

TABLE 12. Status Table Calibration Entries


Descriptions of Status Table Elements Status Table Element CalSeOffset(6) CalSeOffset(7) CalSeOffset(8) CalSeOffset(9) CalSeOffset(10) CalSeOffset(11) CalSeOffset(12) CalSeOffset(13) CalSeOffset(14) CalSeOffset(15) CalSeOffset(16) CalSeOffset(17) CalSeOffset(18) CalDiffOffset(1) CalDiffOffset(2) CalDiffOffset(3) CalDiffOffset(4) CalDiffOffset(5) CalDiffOffset(6) CalDiffOffset(7) CalDiffOffset(8) CalDiffOffset(9) CalDiffOffset(10) CalDiffOffset(11) CalDiffOffset(12) CalDiffOffset(13) CalDiffOffset(14) CalDiffOffset(15) CalDiffOffset(16) CalDiffOffset(17) CalDiffOffset(18) Differential (Diff) Single-Ended (SE) SE SE SE SE SE SE SE SE SE SE SE SE SE Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Diff Offset or Gain Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset Offset mV Input Range 2.5 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 2.5 5000 2500 250 25 7.5 2.5 Integration 250 ms 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection

63

Section 4. Measurements

TABLE 13. Calibrate() Instruction Results


Array Cal() Element 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 SE Diff SE Diff SE Diff SE Diff SE Diff SE Diff SE Diff SE Diff SE Diff SE Diff SE Diff Descriptions of Array Elements Differential (Diff) Single-Ended (SE) SE Diff Offset or Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain mV Input Range 5000 5000 5000 2500 2500 2500 250 250 250 25 25 25 7.5 7.5 7.5 2.5 2.5 2.5 5000 5000 5000 2500 2500 2500 250 250 250 25 25 25 7.5 7.5 7.5 2.5 2.5 2.5 Integration 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 250 ms 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection 60 Hz Rejection Typical Value 5 LSB 5 LSB -1.34 mV/LSB 5 LSB 5 LSB -0.67 mV/LSB 5 LSB 5 LSB -0.067 mV/LSB 5 LSB 5 LSB -0.0067 mV/LSB 10 LSB 10 LSB -0.002 mV/LSB 20 LSB 20 LSB -0.00067 mV/LSB 5 LSB 5 LSB -0.67 mV/LSB 5 LSB 5 LSB -0.34 mV/LSB 5 LSB 5 LSB -0.067 mV/LSB 5 LSB 5 LSB -0.0067 mV/LSB 10 LSB 10 LSB -0.002 mV/LSB 20 LSB 20 LSB -0.00067 mV/LSB

64

Section 4. Measurements

TABLE 13. Calibrate() Instruction Results


Array Cal() Element 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 SE Diff SE Diff SE Diff SE Diff SE Diff Descriptions of Array Elements Differential (Diff) Single-Ended (SE) SE Diff Offset or Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain Offset Offset Gain mV Input Range 5000 5000 5000 2500 2500 2500 250 250 250 25 25 25 7.5 7.5 7.5 2.5 2.5 2.5 Integration 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection 50 Hz Rejection Typical Value 5 LSB 5 LSB -0.67 mV/LSB 5 LSB 5 LSB -0.34 mV/LSB 5 LSB 5 LSB -0.067 mV/LSB 5 LSB 5 LSB -0.0067 mV/LSB 10 LSB 10 LSB -0.002 mV/LSB 20 LSB 20 LSB -0.00067 mV/LSB

4.2.10

Time Skew Between Measurements


Time skew between consecutive voltage measurements is a function of settling and integration times, A/D conversion, and the number of reps entered into the VoltDiff() or VoltSE() instruction. The relationship is: Time Skew = Settling Time + Integration Time + A-D Conversion + Reps/NoReps* *Reps/No Reps -- If Reps > 1(i.e., multiple measurements by a single instruction), no additional time is required. If Reps = 1 in consecutive voltage instructions, add 15uSec per instruction.

4.3

Bridge Resistance
Many sensors detect phenomena by way of change in a resistive circuit. Thermistors, strain gages, and position potentiometers are examples. Resistance measurements are special case voltage measurements. By supplying a precise, known voltage to a resistive circuit, then measuring the returning voltage, resistance can be calculated.

65

Section 4. Measurements

Read More! Available resistive bridge completion modules are listed in APPENDIX. Signal Conditioners (p. 475). Five bridge measurement instructions are features of the CR800. TABLE. Resistive Bridge Circuits -- Voltage Excitation (p. 66) show circuits that are typically measured with these instructions. In the diagrams, resistors labeled Rs are normally the sensors and those labeled Rf are normally precision fixed (static) resistors. Circuits other than those diagrammed can be measured, provided the excitation and type of measurements are appropriate. Program Code CRBASIC EXAMPLE. 4 Wire Full Bridge Measurement (p. 68) shows CR800 code for measuring and processing four wire full bridge circuits. All bridge measurements have the option (RevEx) to make one set of measurements with the excitation as programmed and another set of measurements with the excitation polarity reversed. The offset error in the two measurements due to thermal EMFs can then be accounted for in the processing of the measurement instruction. The excitation channel maintains the excitation voltage or current until the hold for the analog to digital conversion is completed. When more than one measurement per sensor is necessary (four wire half bridge, three wire half bridge, six wire full bridge), excitation is applied separately for each measurement. For example, in the four-wire half-bridge, when the excitation is reversed, the differential measurement of the voltage drop across the sensor is made with the excitation at both polarities and then excitation is again applied and reversed for the measurement of the voltage drop across the fixed resistor. Calculating the resistance of a sensor that is one of the legs of a resistive bridge requires additional processing following the bridge measurement instruction. TABLE. Resistive Bridge Circuits -- Voltage Excitation (p. 66) lists the schematics of bridge configurations and related resistance equations. TABLE 14. Resistive Bridge Circuits -- Voltage Excitation
Resistive Bridge Type and Circuit Diagram CRBASIC Instruction and Fundamental Relationship CRBASIC Instruction: BrHalf() Fundamental Relationship :
2

Relationships

Half Bridge1

3 Wire Half Bridge1,3

CRBASIC Instruction: BrHalf3W() Fundamental Relationship :


2

66

Section 4. Measurements

TABLE 14. Resistive Bridge Circuits -- Voltage Excitation


Resistive Bridge Type and Circuit Diagram CRBASIC Instruction and Fundamental Relationship CRBASIC Instruction: BrHalf4W() Fundamental Relationship :
2

Relationships

4 Wire Half Bridge

1,3

Full Bridge1,3

CRBASIC Instruction: BrFull() Fundamental Relationship :


2

These relationships apply to BrFull() and BrFull6W().

6 Wire Full Bridge1

CRBASIC Instruction: BrFull6W() Fundamental Relationship :


2

Key: Vx = excitation voltage; V1, V2 = sensor return voltages; Rf = "fixed", "bridge" or "completion" resistor; Rs = "variable" or "sensing" resistor. 2 Where X = result of the CRBASIC bridge measurement instruction with a multiplier of 1 and an offset of 0. 3 See APPENDIX. Resistive Bridge Modules (p. 475) for a list of available terminal input modules to facilitate this measurement.

67

Section 4. Measurements

CRBASIC EXAMPLE 3.
'Declare Variables Public X Public X1 Public R1 Public R2 Public R3 Public R4 Main Program BeginProg R2 = 1000 R3 = 1000 R4 = 1000 Scan(500,mSec,1,0)

4 Wire Full Bridge Measurement and Processing

'Resistance of R2 'Resistance of R3 'Resistance of R4

'Full Bridge Measurement: BrFull(X,1,mV2500,1,1,1,2500,True,True,0,_60Hz,1.0,0.0) X1 = ((-1 * X) / 1000) + (R3 / (R3 + R4)) R1 = (R2 * (1 - X1)) / X1 NextScan EndProg

4.3.1

Measurements Requiring ac Excitation


Some resistive sensors require ac excitation. These include electrolytic tilt sensors, soil moisture blocks, water conductivity sensors and wetness sensing grids. The use of dc excitation with these sensors can result in polarization, which will cause erroneous measurement, shift calibration, or lead to rapid sensor decay. Other sensors, e.g., LVDTs (Linear Variable Differential Transformers), require an ac excitation because they rely on inductive coupling to provide a signal. dc excitation will provide no output. CR800 bridge measurements can reverse excitation polarity to provide ac excitation and avoid ion polarization. Note Sensors requiring ac excitation require techniques to minimize or eliminate ground loops. See SECTION. Ground Looping in Ionic Measurements (p. 95).

4.3.2

Strain Calculations
Read More! FieldCalStrain in SECTION. FieldCal() Demonstration Programs (p. 214). A principal use of the four wire full bridge is the measurement of strain gages in structural stress analysis. StrainCalc() calculates microstrain, , from an appropriate formula for the particular strain bridge configuration used. All strain gages supported by StrainCalc() use the full bridge electronic configuration. In

68

Section 4. Measurements strain gage parlance, "quarter bridge", "half bridge" and "full bridge" refer to the number of active elements in the full bridge, i.e., 1, 2, or 4 active elements respectively. StrainCalc() requires a bridge configuration code. TABLE. StrainCalc() Instruction Equations (p. 69) shows the equation used by each configuration code. Each code can be preceded by a negative sign (-). Use a positive code when the bridge is configured so the output decreases with increasing strain. Use a negative code when the bridge is configured so the output increases with increasing strain. In the equations in TABLE. StrainCalc() Instruction Equations (p. 69), a negative code sets the polarity of Vr to negative (-). TABLE 15. StrainCalc() Instruction Equations
StrainCalc() BrConfig Code 1 Configuration Quarter bridge strain gage:

Half bridge strain gage. One gage parallel to strain, the other at 90 to strain.

Half bridge strain gage. One gage parallel to + parallel to - :

, the other

Full bridge strain gage. Two gages parallel to + , the other two parallel to - :

Full bridge strain gage. Half the bridge has to gages parallel to and : + and - , and the other half to +

Full bridge strain gage. Half the bridge has two gages parallel to , and the other half to and + : + and -

where: : Poisson Ratio (0 if not applicable) GF: Gage Factor Vr: 0.001 (Source-Zero) if BRConfig code is positive (+) Vr: -0.001 (Source-Zero) if BRConfig code is negative (-)

69

Section 4. Measurements where: "source": the result of the full Wheatstone bridge measurement (X = 1000 * V1 / Vx) when multiplier = 1 and offset = 0. "zero": gage offset to establish an arbitrary zero (see FieldCalStrain in FieldCal() Demonstration Programs (p. 214)). StrainCalc Example: See SECTION. FieldCalStrain() Demonstration Program (p. 220)

4.4

Thermocouple
Thermocouples are easy to use with the CR800. They are also inexpensive. SECTION. Hands-on Exercise - Measuring a Thermocouple (p. 13) not withstanding, the CR800 is not designed for thermocouple measurements when thermocouples are attached directly to the CR800 wiring panel. The lack of an insulating wiring terminal cover and the nature of the plastic encasement will probably induce significant error in the reference junction temperature measurement. If an external reference junction is to be used, Campbell Scientific strongly encourages users to carefully evaluate relevant parts of the Thermocouple Measurements section of the CR1000 Datalogger User's Manual, which is available at www.campbellsci.com.

4.5

Pulse
FIGURE. Pulse Input Types (p. 9) illustrates pulse input types measured by the CR800. FIGURE. Switch Closure Pulse Sensor (p. 71) is a generalized schematic showing connection of a pulse sensor to the CR800. The CR800 features two dedicated pulse input channels, P1 through P2, and four digital I/O channels, C1 through C4, for measuring frequency or pulse output sensors. As shown in TABLE. Pulse Input Channels and Measurements (p. 9), all CR800 pulse input channels can be measured with CRBASIC instruction PulseCount (). PulseCount () has various parameters to customize it to specific applications. Digital I/O ports C1 through C4 can also be measured with the TimerIO () instruction. PulseCount () instruction functions include returning counts or frequency on frequency or switch closure signals. TimerIO () instruction has additional capabilities. Its primary function is to measure the time between state transitions. Note Consult CRBASIC Editor Help for more information on PulseCount () and TimerIO () instructions.

70

Section 4. Measurements

FIGURE 35. Pulse Sensor Output Signal Types

FIGURE 36. Switch Closure Pulse Sensor

TABLE 16. Pulse Input Channels and Measurements


Channels Available for Pulse Input
P1, P2

Input Types
High Frequency Low-Level ac Switch Closure

Data Option
Counts Frequency Run Avg of Freq Counts Frequency Run Avg of Freq Interval Period State

CRBASIC Instruction
PulseCount()

C1, C2, C3, C4, C5, C6, C7, C8

High Frequency Switch Closure Low-Level ac (with LLAC4 Low-Level AC Conversion Module)

PulseCount() TimerIO()

4.5.1

Pulse Input Channels (P1 - P2)


Read More! Review pulse counter specifications at SECTION. Specifications (p. 41). Review pulse counter programming in CRBASIC Editor Help for the PulseCount () instruction.

71

Section 4. Measurements Dedicated pulse input channels (P1 through P2), as shown in FIGURE. Pulse Input Channels (p. 72), can be configured to read high- frequency pulses, lowlevel ac signals, or switch closures. Note Input channel expansion devices for all input types are available from Campbell Scientific. Refer to Sensors and Peripherals for more information. Caution Maximum input voltage on pulse channels P1 through P2 is 20 V. If pulse inputs of higher than 20 V need to be measured, third party external signal conditioners should be employed. Contact a Campbell Scientific applications engineer if assistance is needed. Under no circumstances should voltages greater than 50 V be measured.

FIGURE 37. Pulse Input Channels

4.5.1.1

High-frequency Pulse (P1 - P2)


High-frequency pulse inputs are routed to an inverting CMOS input buffer with input hysteresis. The CMOS input buffer is an output 0 level with its input 2.2 V, and an output 1 with its input 0.9 V. When a pulse channel is configured for high-frequency pulse, an internal 100 k pull-up resistor to 5 Vdc on the P1 or P2 input is automatically employed. This pull-up resistor accommodates open-collector (open-drain) output devices for high-frequency input.

4.5.1.2

Low-Level ac (P1 - P2)


Rotating magnetic pickup sensors commonly generate AC output voltages ranging from milliVolts at low rotational speeds to several volts at high rotational speeds. Pulse channels contain internal signal conditioning hardware

72

Section 4. Measurements for measuring low-level AC output sensors. When configured for low-level AC, P1 through P2 measure signals ranging from 20 mV RMS (28 mV peak) to 14 V RMS (20 V peak). Internal AC coupling is incorporated in the low-level AC hardware to eliminate dc offset voltages of up to 0.5 Vdc.

4.5.1.3

Switch Closure (P1 - P2)


Switch-closure mode measures switch closure events, such as occur with a common tipping bucket rain gage. An internal 100 k pull-up resistor pulls an input to 5 Vdc with the switch open, whereas a switch closure to ground pulls the input to 0 V. An internal 3.3 ms time constant RC debounce filter eliminates multiple counts from a single switch closure event.

4.5.2

Pulse Input on Digital I/O Channels C1 - C4


Read More! Review digital I/O channel specifications in SECTION. Specifications (p. 41). Review pulse counter programming with PulseCount () in CRBASIC Help. Digital I/O channels C1 - C4 can be configured for edge timing or to measure high-frequency or switch closure signals. Input voltage must range between -8.0 and +16 Vdc. Caution Contact Campbell Scientific for signal conditioning information if a pulse input < -8.0 or > +16 Vdc is to be measured. Under no circumstances should voltages greater than 50 V be connected to channels C1 - C4. Low-level ac signals cannot be measured directly by digital I/O channels C1 C4. Refer to APPENDIX. Pulse / Frequency Input Expansion Modules (p. 474) for information on peripheral modules available to convert low-level ac signals to high-frequency square-wave.

4.5.2.1

High-frequency (C1 - C4)


Digital I/O channels C1 - C4 have a small 25 ns input RC filter time constant between the terminal block and the CMOS input buffer, which allows for higher frequency operation (400 kHz maximum) when compared with pulse input channels P1 through P2 (250 kHz maximum). When configured for input, signals connected to C1 - C4 each go into a digital CMOS input buffer that recognizes inputs 3.8 V as high and inputs 1.2 V as low. Open collector (bipolar transistors) or open drain (MOSFET) sensors are typically measured as high frequency sensors. Condition channels C1 - C4 for open collector or open drain with an external pull-up resistor as shown in FIGURE. Connecting Switch Closures to Digital IO (p. 75). The pull-up resistor counteracts an internal 100 k pull-down resistor, allowing inputs to be pulled to > 3.8 V for reliable measurements.

73

Section 4. Measurements

4.5.2.2

Switch Closure (C1 - C4)


Two schemes are available for connecting switch closure sensors to the CR800. If the switch closes to ground, an external pull-up resistor is used as shown in FIGURE. Connecting Switch Closures to Digital I/O (p. 75). If the switch is to close directly to the control port, connect the sensor to the CR800 as diagramed. Mechanical switch closures have a tendency to bounce before solidly closing. Bouncing can cause multiple counts. The CR800 incorporates software switch debounce in switch-closure mode for channels C1 - C4. Note Maximum switch closure frequency measured is 150 kHz.

4.5.2.3

Edge Timing (C1 - C4)


Time between pulse edges can be measured. Results can be expressed in terms of microseconds or hertz. To read more concerning edge timing, refer to CRBASIC Help for the TimerIO () instruction. Edge timing resolution is 540 ns.

4.5.3

Pulse Measurement Tips


Activated by the PulseCount () instruction, dedicated 24-bit counters on channels P1 through P2 and C1 through C4 accumulate all counts over the user specified scan interval. Counters are read at the beginning of each scan and cleared. Counters overflow, resulting in erroneous measurements, if accumulated counts exceed 16,777,216. Execution of PulseCount () within a scan involves determining the accumulated counts in each dedicated 24-bit counter since execution of the last PulseCount (). Counts are the preferred output option for measuring number of tips from a tipping bucket rain gage, or the number of times a door opens. Many pulse sensors, such as anemometers and flow meters, are calibrated in terms of frequency (Hz or counts / second), and are usually measured with the frequency option. Accuracy of PulseCount () is limited by a small scan interval error of (3 ppm of scan interval + 10 s) plus the measurement resolution error of 1 Hz. The sum is essentially 1 Hz. Use the LLAC4 module to convert non-TTL level signals, including low-level ac signals, to TTL levels for input into digital I/O channels C1 through C4. When digital I/O channels C1 through C4 measure switch closure inputs, pullup resistors may be required. FIGURE. Connecting Switch Closures to Digital I/O (p. 75) show how pull-up resistors can be incorporated into a wiring scheme. As shown FIGURE. Connecting Switch Closures to Digital I/O (p. 75), digital I/O inputs, with regard to the 6.2 V Zener diode, have an input resistance of 100 kohms with input voltages < 6.2 Vdc. For input voltages 6.2 Vdc, the inputs have an input resistance of only 220 ohms.

74

Section 4. Measurements

FIGURE 38. Connecting Switch Closures to Digital I/O

4.5.3.1

Frequency Resolution
Resolution of the 24-bit pulse counters is one count. Frequency resolution of a PulseCount () frequency measurement is

where: FR = Resolution of the frequency measurement (Hz) S = Scan Interval of CRBASIC Program Resolution of TimerIO () instruction is:

where: FR = Frequency resolution of the measurement (Hz) R = Timing resolution of the period measurement = 540 ns P = Period of input signal (seconds) = 1 / 1000 Hz = 0.001 s E = Rising edges per scan = 500 in 0.5 s scan, 5000 in 5.0 s scan) TimerIO () instruction measures frequencies of 1 kHz with higher frequency resolution over short (sub-second) intervals. In contrast, sub-second frequency measurement with PulseCount () produce measurements of lower resolution. Consider a 1 kHz input. TABLE. Frequency Resolution (p. 76) lists frequency resolution to be expected for a 1 kHz signal measured by TimerIO () and PulseCount () at 0.5 s and 5.0 s scan intervals.

75

Section 4. Measurements Increasing a 1 s measurement interval to 10 s, either by increasing the scan interval (when using PulseCount ()) or by averaging (when using PulseCount () or TimerIO ()), improves the resulting frequency resolution from 1 Hz to 0.1 Hz. Averaging can be accomplished by the Average (), AvgRun (), and AvgSpa () instructions. Also, PulseCount () has the option of entering a number greater than 1 in the POption parameter. Doing so enters an averaging interval in milliseconds for a direct running average computation. However, use caution when averaging, Averaging of any measurement reduces the certainty that the result truly represents a real aspect of the phenomenon being measured. TABLE 17. Frequency Resolution Comparison
0.5 s Scan
PulseCount(), POption 1 TimerIO(), Function 2 FR= 2 Hz FR = 0.0011 Hz

5.0 s Scan
FR = 0.2 Hz FR = 0.00011 Hz

4.5.4
4.5.4.1

Pulse Measurement Problems


Pay Attention to Specifications
TABLE. Example of Differing Specifications for Pulse Input Channels (p. 76) compares specifications for pulse input channels to emphasize the need for matching the proper device to application. Take time to understand signals to be measured and compatible channels. TABLE 18. Example of Differing Specifications for Pulse Input Channels
Pulse Channels P1, P2
High Frequency Max (kHz) Max Input Voltage (Vdc) State Transition Thresholds (Vdc) 250 20 Count upon transition from <0.9 to >2.2.

Digital I/O Channels C1, C2, C3, C4, C5, C6, C7, C8
1 16 Count upon transition from <1.2 to >3.8.

4.5.4.2

Input Filters and Signal Attenuation


Pulse input channels are equipped with input filters to reduce spurious noise that can cause false counts. The higher the time constant () of the filter, the tighter the filter. TABLE. Time Constants (p. 77) lists values for pulse input channels. So, while TimerIO () frequency measurement may be superior for clean signals, a pulse channel filter (much higher ) may be required to get a measurement on a dirty signal. Input filters, however, attenuate the amplitude (voltage) of the signal. The amount of attenuation is a function of the frequency passing through the filter. Higher frequency signals are attenuated more. If a signal is attenuated enough, it may not pass the state transition thresholds (thresholds are listed in TABLE. Pulse Input Channels and Measurements (p. 9)) required by the detection

76

Section 4. Measurements device. To avoid over attenuation, sensor output voltage must be increased at higher frequencies. As an example, TABLE. Filter Attenuation of Frequency Signals (p. 77) lists low-level ac frequencies and the voltages required to overcome filter attenuation. For pulse input channels P1 - P2, an RC input filter with an approximate 1 s time constant precedes the inverting CMOS input buffer. The resulting amplitude reduction is illustrated in FIGURE. Amplitude Reduction of PulseCount Waveform. (p. 78) For a 0 to 5 Vdc square wave applied to a pulse channel, the maximum frequency that can be counted in high-frequency mode is approximately 250 kHz. TABLE 19. Time Constants ()
Measurement Pulse Channel, High Frequency Mode Pulse Channel, Switch Closure Mode Pulse Channel, Low-level AC Mode 1.2 3300 See TABLE. Filter Attenuation of Frequency Signals (p. 77) footnote 0.025 0.025

Digital I/O, High Frequency Mode Digital I/O, Switch Closure Mode

TABLE 20. Filter Attenuation of Frequency Signals.


As shown for low-level ac inputs, increasing voltage is required at increasing frequencies to overcome filter attenuation on pulse input channels*.

ac mV (RMS)
20 200 2000 5000

Maximum Frequency
20 200 10,000 20,000

*8.5 ms time constant filter (19 Hz 3 dB frequency) for low-amplitude signals. 1 ms time constant (159 Hz 3 dB frequency) for larger (> 0.7 V) amplitude signals.

77

Section 4. Measurements

FIGURE 39. Amplitude Reduction of Pulse-Count Waveform (before and after 1 s time constant filter)

4.6

Period Averaging
The CR800 can measure the period of a signal on any single-ended analog input channel (SE 1 - 6). The specified number of cycles are timed with a resolution of 136 ns, making the resolution of the period measurement 136 ns divided by the number of cycles chosen. Low-level signals are amplified prior to a voltage comparator. The internal voltage comparator is referenced to the user-entered threshold. The threshold parameter allows a user to reference the internal voltage comparator to voltages other than 0 V. For example, a threshold of 2500 mV allows a 0 to 5 Vdc digital signal to be sensed by the internal comparator without the need of any additional input conditioning circuitry. The threshold allows direct connection of standard digital signals, but is not recommended for small amplitude sensor signals. For sensor amplitudes less than 20 mV peak-to-peak, a dc blocking capacitor is recommended to center the signal at CR800 ground (threshold = 0) because of offset voltage drift along with limited accuracy ( 10 mV) and resolution (1.2 mV) of a threshold other than 0. FIGURE. Input Conditioning Circuit for Period Averaging (p. 79) shows an example circuit. The minimum pulse width requirements increase (maximum frequency decreases) with increasing gain. Signals larger than the specified maximum for a range will saturate the gain stages and prevent operation up to the maximum specified frequency. As shown back-to-back diodes are recommended to limit large amplitude signals to within the input signal ranges.

78

Section 4. Measurements

Caution Noisy signals with slow transitions through the voltage threshold have the potential for extra counts around the comparator switch point. A voltage comparator with 20 mV of hysteresis follows the voltage gain stages. The effective input referred hysteresis equals 20 mV divided by the selected voltage gain. The effective input referred hysteresis on the 25 mV range is 2 mV; consequently, 2 mV of noise on the input signal could cause extraneous counts. For best results, select the largest input range (smallest gain) that meets the minimum input signal requirements.

FIGURE 40. Input Conditioning Circuit for Period Averaging

4.7

SDI-12 Recording
Read More! SECTION. SDI-12 Sensor Support (p. 232) and SECTION. Serial Input / Output (p. 195). SDI-12 is a communications protocol developed to transmit digital data from smart sensors to data acquisition units. It is a simple protocol, requiring only a single communication wire. Typically, the data acquisition unit also supplies power (12 Vdc and ground) to the SDI-12 sensor. The CR800 is equipped with 2 SDI-12 channels (C1, C3) and an SDI12Recorder () CRBASIC instruction.

4.8

RS-232 and TTL Recording


Read More! SECTION. Serial Input / Output (p. 195) and SECTION. Serial I/O (p. 262). The CR800 can usually receive and record RS-232 and 0-5V logic data from sensors designed to transmit via these protocols. Data are received through the CS I/O port with the proper interface (APPENDIX. CS I/O Serial Interfaces (p. 475)), the RS-232 port, or the digital I/O communication ports (C1 & C2, C3 & C4). If additional serial inputs are required, serial input expansion modules

79

Section 4. Measurements (APPENDIX. Serial Input Expansion Modules (p. 474)) can be connected to increase the number of serial ports. Serial data are usually captured as strings, which are then parsed (split up) as defined in the user entered program. Note Digital I/O communication ports (control ports) only transmit 0-5V logic. However, they read most true RS-232 input signals. When connecting serial sensors to an RX control port, the sensor power consumption may increase by a few milliamps due to voltage clamps. An external resistor may need to be added in series to the RX line to limit the current drain, although this is not advisable at very high baud rates. FIGURE. Circuit to Limit Control Port Input to 5 Volts (p. 80) shows a circuit that limits voltage input on a control port to 5 Vdc.

FIGURE 41. Circuit to Limit Control Port Input to 5 Volts

4.9

Field Calibration of Linear Sensor


Read More! SECTION. Field Calibration of Linear Sensors (FieldCal) (p. 211) has complete FieldCal information. Calibration increases accuracy of a measurement device by adjusting its output, or the measurement of its output, to match independently verified quantities. Adjusting a sensor output directly is preferred, but not always possible or practical. By adding FieldCal () or FieldCalStrain () instructions to the CR800 program, a user can easily adjust the measured output of a linear sensors by modifying multipliers and offsets.

4.10 Cabling Effects


Sensor cabling can have significant effects on sensor response and accuracy. This is usually only a concern with sensors acquired from manufacturers other than Campbell Scientific. Campbell Scientific sensors are engineered for optimal performance with factory installed cables.

4.10.1

Analog Sensor Cables


Cable length in analog sensors is most likely to affect the signal settling time. For more information, see SECTION. Signal Settling Time (p. 56).

80

Section 4. Measurements

4.10.2

Pulse Sensors
Because of the long interval between switch closures in tipping bucket rain gages, appreciable capacitance can build up between wires in long cables. A built up charge can cause arcing when the switch closes, shortening switch life. As shown in FIGURE. Current Limiting Resistor in a Rain Gage Circuit (p. 81), a 100 ohm resistor is connected in series at the switch to prevents arcing. This resistor is installed on all rain gages currently sold by Campbell Scientific.

FIGURE 42. Current Limiting Resistor in a Rain Gage Circuit

4.10.3

RS-232 Sensors
RS-232 sensors cable lengths should be limited to 50 feet.

4.10.4

SDI-12 Sensors
The SDI-12 standard allows cable lengths of up to 200 feet. Campbell Scientific does not recommend SDI-12 sensor lead lengths greater than 200 feet; however, longer lead lengths can sometimes be accommodated by increasing the wire gage and/or powering the sensor with a second 12 Vdc power supply placed near the sensor.

4.11 Synchronizing Sensor Measurements


Timing of a measurement is usually controlled relative to the CR800 clock. When sensors in a sensor network are measured by a single CR800, measurement times are synchronized, often within a few milliseconds, depending on sensor number and measurement type. Large numbers of sensors, cable length restrictions, or long distances between measurement sites may require use of multiple CR800s. Techniques outlined below enable network administrators to synchronize CR800 clocks and measurements in a CR800 network. Care should be taken when a clock change operation is planned. Any time the CR800 clock is changed, the deviation of the new time from the old time may be sufficient to cause a skipped record in data tables. Any command used to synchronize clocks should be executed after any CallTable() instructions and timed so as to execute well clear of data output intervals.

81

Section 4. Measurements

Time Synchronization Techniques: 1. LoggerNet Utility When reliable telecommunications are common to all CR800s in a network, LoggerNets Automated Clock Check provides a simple time synchronization function. Accuracy is limited by the system clock on the PC running the LoggerNet server. Precision is limited by network transmission latencies. LoggerNet compensates for latencies in many telecommunications systems and can achieve synchronies within <100 ms deviation. Errors of 2 3 second may be seen on very busy RF connections or long distance internet connections. Note Common PC clocks are notoriously inaccurate. An easy way to keep a PC clock accurate is to utilize public domain software available at http://tf.nist.gov/service/its.htm. 2. Digital Trigger A digital trigger, rather than a clock, can provide the synchronization signal. When cabling can be run from CR800 to CR800, each CR800 can catch the rising edge of a digital pulse from the Master CR800 and synchronize measurements or other functions, using the WaitDigTrig () instructions, independent of CR800 clocks or data time stamps. When programs are running in pipeline mode, measurements can be synchronized with a few microseconds. 3. PakBus Commands The CR800 is a PakBus device, so it is capable of being a node in a PakBus network.. Node clocks in a PakBus network are synchronized using the SendGetVariable (), ClockReport (), or PakBusClock () commands. The CR800 clock has a resolution of 10 ms, which is the resolution used by PakBus clock sync functions. In networks without routers, repeaters, or retries, the communication time will cause an additional error (typically a few 10s of milliseconds). PakBus clock commands set the time at the end of a scan to minimize the chance of skipping a record to a data table. An RF401 radio network has an advantage over Ethernet in that ClockReport () can be broadcast to all dataloggers within reach and set their clocks with a single PakBus broadcast from the master. Each datalogger in the network must be programmed with a PakBusClock () instruction. Note Use of PakBus clock functions re-synchronizes the Scan() instruction. Use should not exceed once per minute. CR800 clocks drift at a slow enough rate that a ClockReport () once per minute should be sufficient to keep clocks within 30 ms of each other. 4. GPS Clocks in CR800s can be synchronized to within about 10 ms of each other using the GPS() instruction. CR800s built since October of 2008 (serial numbers >= 7920) can be synchronized within a few microseconds of each other and within 200 s of UTC. While a GPS signal is available, the CR800 essentially uses the GPS as its continuous clock source, so the chance of jumps in system time and skipped records is minimized. 5. Ethernet Any CR800 with a network connection (internet, GPRS, private network) can synchronize its clock relative to Coordinated Universal Time (UTC) using the NetworkTimeProtocol() instruction. Precisions are usually maintained to within 10 ms.

82

Section 5. Measurement and Control Peripherals


Peripheral devices expand the CR800 input / output capacity. Classes of peripherals are discussed below according to use. Some peripherals are designed as SDM (Synchronous Devices for Measurement) devices. SDM devices are intelligent peripherals that receive instruction from and send data to the CR800 over a proprietary 3-wire serial communications link utilizing channels C1, C2 and C3. Read More! For complete information on available measurement and control peripherals, go to APPENDIX. Sensors and Peripherals (p. 471), www.campbellsci.com, or contact a Campbell Scientific applications engineer.

5.1

Analog Input Expansion Modules


Mechanical relay and solid state relay multiplexers are available to expand the number of analog sensor inputs. Multiplexers are designed for single-ended, differential, bridge resistance, or thermocouple inputs.

5.2

Pulse Input Expansion Modules


Pulse input expansion modules are available for switch closure, state, pulse count and frequency measurements, and interval timing.

5.3

Serial Input Expansion Modules


Capturing input from intelligent serial output devices can be challenging. Several Campbell Scientific serial I/O modules are designed to facilitate reading and parsing serial data. Campbell Scientific recommends consulting with an applications engineer when deciding which serial input module is suited to a particular application.

5.4

Control Outputs
Controlling power to an external device is a common function of the CR800. On-board control terminals and peripheral devices are available for binary (on / off) or analog (variable) control. A switched 12V channel is also available. See SECTION. Switched Unregulated (Nominal 12 Volt) (p. 89).

83

Section 5. Measurement and Control Peripherals

5.4.1

Digital I/O Ports ("Control Ports")


Each of eight digital I/O ports (C1 - C4) can be configured as an output port and set low (0 Vdc) or high (5 Vdc) using the PortSet () or WriteIO () instructions. A digital I/O port is normally used to operate an external relay driver circuit because the port itself has limited drive capacity. Drive capacity is determined by the 5V supply and a 330 ohm output resistance. It is expressed as: Vo = 4.9V - (330 ohms) * Io Where Vo is the drive limit, and Io is the current required by the external device. FIGURE. Control Port Current Sourcing (p. 84) plots the relationship.

FIGURE 43. Control Port Current Sourcing

5.4.2

Relays and Relay Drivers


Several relay drivers are manufactured by Campbell Scientific. For more information, see APPENDIX. Relay Drivers (p. 473), contact a Campbell Scientific applications engineer, or go to www.campbellsci.com. Compatible, inexpensive and reliable single-channel relay drivers for a wide range of loads are available from various electronic vendors such as Crydom, Newark, Mouser, etc.

5.4.3

Component Built Relays


FIGURE. Relay Driver Circuit with Relay (p. 85) shows a typical relay driver circuit in conjunction with a coil driven relay which may be used to switch external power to some device. In this example, when the control port is set

84

Section 5. Measurement and Control Peripherals high, 12 Vdc from the datalogger passes through the relay coil, closing the relay which completes the power circuit and turns on the fan. In other applications it may be desirable to simply switch power to a device without going through a relay. FIGURE. Power Switching without Relay (p. 85) illustrates a circuit for switching external power to a device without using a relay. If the peripheral to be powered draws in excess of 75 mA at room temperature (limit of the 2N2907A medium power transistor), the use of a relay is required.

FIGURE 44. Relay Driver Circuit with Relay

FIGURE 45. Power Switching without Relay

85

Section 5. Measurement and Control Peripherals

5.5

Analog Control / Output Devices


The CR800 can scale measured or processed values and transfer these values in digital form to an analog output device. The analog output device performs a digital-to-analog conversion to output an analog voltage or current. The output level is maintained until updated by the CR800. Refer to APPENDIX. Continuous Analog Output (CAO) Modules (p. 474) for information concerning available continuous analog output modules.

5.6

TIMs
Terminal Input Modules (TIMs) are devices that provide simple measurement support circuits in a convenient package. TIMs include voltage dividers for cutting the output voltage of sensors to voltage levels compatible with the CR800, modules for completion of resistive bridges, and shunt modules for measurement of analog current sensors. Refer to APPENDIX. Signal Conditioners (p. 475) for information concerning available TIM modules.

5.7

Vibrating Wire
Vibrating wire modules interface vibrating wire transducers to the CR800. Refer to APPENDIX. Pulse / Frequency Input Expansion Modules (p. 474) for information concerning available vibration wire interface modules.

5.8

Low-level ac
Low-level ac input modules increase the number of low-level ac signals a CR800 can monitor by converting low-level ac to high-frequency pulse. Refer to APPENDIX. Pulse / Frequency Input Expansion Modules (p. 474) for information concerning available pulse input modules.

86

Section 6. Power Sources


Reliable power is the foundation of a reliable data acquisition system. When designing a power supply, consideration should be made regarding worst-case power requirements and environmental extremes. Excessive switching noise or AC ripple present on a DC power supply can increase measurement noise. Noise sources include power transformers, regulators, and grid or mains power inclusively. Using high quality power regulators reduces noise due to power regulation. Utilizing 50 Hz or 60 Hz integration times for voltage measurements (see SECTION. Sensor Support (p. 43)) improves rejection of power supply induced noise. The CRBASIC standard deviation instruction, SDEV() can be used to evaluate measurement noise. Contact Campbell Scientific if assistance in selecting a power supply is needed, particularly with applications in extreme environments.

6.1

Power Requirement
The CR800 operates on dc voltage ranging from 9.6 to 16 V. It is internally protected against accidental polarity reversal. A transient voltage suppressor (TVS) diode on the 12 Vdc power input terminal provides transient protection by clamping voltages in the range of 19 to 21 V. Sustained input voltages in excess of 19 V can damage the TVS diode. Caution The 12V and SW12 terminals on the wiring panel are not regulated by the CR800; they obtain the same power as that provided by the CR800 primary power supply. When using the CR800 wiring panel to source power to other 12 Vdc devices, be sure the power supply regulates the voltage within a the range specified by the manufacturer of the connected device.

6.2

Calculating Power Consumption


Read More! SECTION. Power Requirements (p. 32). System operating time for batteries can be determined by dividing the battery capacity (ampere-hours) by the average system current drain (amperes). The CR800 typically has a quiescent current draw of 0.5 mA (with display off), 0.6 mA with a 1 Hz sample rate, and >10 mA with a 100 Hz sample rate. With the optional keyboard display on, an additional 7 mA is added to the current drain while enabling the back light for the display adds 100 mA to the current drain.

6.3

Power Supplies
APPENDIX. Power Supplies (p. 471) lists external power supplies available from Campbell Scientific, including alkaline and solar options. Complete power

87

Section 6. Power Sources supply information is available in manual or brochure form at www.campbellsci.com.

6.3.1

External Batteries
When connecting external power to the CR800, remove the green POWER IN connector from the CR800 front panel. Insert the positive 12 Vdc lead into the terminal marked "12V". Insert the ground lead in the terminal marked "G" (ground). The CR800 is internally protected against, but will not function with, reversed external power polarity.

6.4

Vehicle Power Connections


If a CR800 is powered by a motor vehicle supply, a second supply may be needed. When starting the motor of the vehicle, the battery voltage may drop below 9.6 V. This causes the CR800 to stop measurements until the voltage again equals or exceeds 9.6 V. A second supply can be provided to prevent measurement lapses during vehicle starting. FIGURE. Connecting CR800 to Vehicle Power Supply (p. 88) illustrate how a second power supply should be connected to the CR800. The diode OR connection causes the supply with the largest voltage to power the CR800 and prevents the second backup supply from attempting to power the vehicle.

FIGURE 46. Connecting to Vehicle Power Supply

6.5

Powering Sensors and Devices


Read More! See SECTION. CR800 Power Supply (p. 87). The CR800 is a convenient distributor of power for sensors and peripherals requiring a 5 or 12 Vdc source. It has 1 continuous 12 Vdc terminals (12V), one program-controlled switched 12 Vdc terminal (SW12), and one continuous 5 Vdc terminal (5V). SW12, 12V, and 5V terminals limit current internally for protection against accidental short circuits. Voltage on the 12V and SW12 terminals will change with the dc supply used to power the CR800. The 5V

88

Section 6. Power Sources terminal is internally regulated to within 4%, which is typically not adequate accuracy for bridge sensor excitation. TABLE. Current Sourcing Limits (p. 90) lists the current limits of 12V and 5V. Greatly reduced output voltages associated with 12V, SW12, and 5V due to current limiting may occur if the current limits given in the table are exceeded. Information concerning digital I/O control ports is available in SECTION. Digital I/O Ports (p. 84).

6.5.1

Switched Excitation
Switched Voltage Excitation Two switched analog output (excitation) terminals (VX1 - VX2) operate under program control to provide -2500 mV to +2500 mV excitation. Check the accuracy specification of these channels in SECTION. Specifications (p. 41) to understand their limitations. Specifications are only applicable for loads not exceeding 25 mA. CRBASIC instructions that control excitation channels include: BrFull () BrFull6W () BrHalf () BrHalf3W () BrHalf4W () ExciteV () Note Excitation channels can be configured through the RevEx parameter of bridge instructions to provide a square wave ac excitation for use with polarizing bridge sensors.

6.5.2

Continuous Regulated (5 Volt)


The 5V terminal is regulated and remains near 5 Vdc (4%) so long as the CR800 supply voltage remains above 9.6 Vdc. Measurement of the output from 5V (by means of jumpering to an analog input on the same CR800) enables an accurate bridge measurement if the 5V terminal must be used for excitation.

6.5.3

Continuous Unregulated (Nominal 12 Volt)


Voltage on the 12V terminals will change with CR800 supply voltage.

6.5.4

Switched Unregulated (Nominal 12 Volt)


SW12 is often used to control low power devices such as sensors that require 12 Vdc during measurement. Current sourcing must be limited to 900 mA or less at 20C. See TABLE. Current Sourcing Limits (p. 90). Voltage on a SW12

89

Section 6. Power Sources terminal will change with CR800 supply voltage. Two CRBASIC instructions, SW12() and PortSet(), control a SW12 terminal. Each is handled differently by the CR800. SW12() is a processing task instruction. Use it when controlling power to SDI-12 and serial sensors, which use SDI12Recorder() or SerialIn() instructions respectively. CRBASIC programming using IF THEN constructs to control SW12, such as when used for cell phone control, should also use the SW12() instruction. PortSet() is a measurement task instruction. Use it when powering analog input sensors that need to be powered just prior to measurement. A 12 Vdc switching circuit, driven by a digital I/O port, is also available from Campbell Scientific. Note The SW12 supply is unregulated and can supply up to 900 mA at 20C. See TABLE. Current Sourcing Limits (p. 90). A resettable polymeric fuse protects against over-current. Reset is accomplished by removing the load or turning off the SW12 for several seconds.

TABLE 21. Current Source (+) & Sink (-) Limits


Terminal
Voltage Excitation (VX, EX)
1

Limit
25 mA Maximum

SW12

< +900 mA @ 20C < +630 mA @ 50C < +450 mA @ 70C

12V + SW12 (Combined)

< +3.00 A @ 20C < +2.34 A @ 50C < +1.80 A @ 70C < +1.50 A @ 85C

5V + CSI/O (Combined)
1

< +200 mA

Greater magnitude current than stated limits will cause voltage to become unstable. Voltage should stabilize once current is again established under maximum magnitude. Polyfuse is used to limit power. Result of overload is a voltage drop. To reset, disconnect and allow circuit to cool. Operating at the current limit is OK so long a a little fluctuation can be tolerated. Polyfuse protected. See 2.

3 4

Maximum current is maintained by a current limiting circuit, which holds the current at the maximum by dropping the voltage when the load is too great.

90

Section 7. Grounding
Grounding the CR800 and its peripheral devices and sensors is critical in all applications. Proper grounding will ensure the maximum ESD (electrostatic discharge) protection and higher measurement accuracy.

7.1

ESD Protection
ESD (electrostatic discharge) can originate from several sources, the most common, and most destructive, being primary and secondary lightning strikes. Primary lightning strikes hit the datalogger or sensors directly. Secondary strikes induce a voltage in power lines or sensor wires. The primary devices for protection against ESD are gas-discharge tubes (GDT). All critical inputs and outputs on the CR800 are protected with GDTs or transient voltage suppression diodes. GDTs fire at 150 V to allow current to be diverted to the earth ground lug. To be effective, the earth ground lug must be properly connected to earth (chassis) ground. As shown in FIGURE. Schematic of CR800 Grounds (p. 92), power ground and signal grounds have independent paths to the ground lug. The 9-pin serial ports are another path for transients. Communications paths such a telephone or short-haul modem lines should be provided spark gap protection at installation. Spark gap protection is often an option with these products, so it should always be requested when ordering. Spark gaps for these devices must be connected to either the earth ground lug, the enclosure ground, or to the earth (chassis) ground. A good earth (chassis) ground will minimize damage to the datalogger and sensors by providing a low resistance path around the system to a point of low potential. Campbell Scientific recommends that all dataloggers be earth (chassis) grounded. All components of the system (dataloggers, sensors, external power supplies, mounts, housings, etc.) should be referenced to one common earth (chassis) ground. In the field, at a minimum, a proper earth ground will consist of a 6 to 8 foot copper sheathed grounding rod driven into the earth and connected to the CR800 Ground Lug with a 12 AWG wire. In low conductive substrates, such as sand, very dry soil, ice, or rock, a single ground rod will probably not provide an adequate earth ground. For these situations, consult the literature on lightning protection or contact a qualified lightning protection consultant. In vehicle applications, the earth ground lug should be firmly attached to the vehicle chassis with 12 AWG wire or larger. In laboratory applications, locating a stable earth ground is challenging, but still necessary. In older buildings, new ac receptacles on older ac wiring may indicate that a safety ground exists when in fact the socket is not grounded. If a safety ground does exist, it is good practice to verify that it carries no current. If the integrity of the ac power ground is in doubt, also ground the system through the buildings, plumbing or another connection to earth ground.

91

Section 7. Grounding

FIGURE 47. Schematic of Grounds

7.1.1

Lightning Protection
The most common and destructive ESDs are primary and secondary lightning strikes. Primary lightning strikes hit instrumentation directly. Secondary strikes induce voltage in power lines or wires connected to instrumentation. While elaborate, expensive and nearly infallible lightning protection systems are available, Campbell Scientific has for many years employed a simple and inexpensive design that protects most systems in most circumstances. It is, however, not infallible. Note Lightning strikes may damage or destroy the CR800 and associated sensors and power supplies.

92

Section 7. Grounding In addition to protections discussed in SECTION. ESD Protection (p. 91), use of a simple lightning rod and low-resistance path to earth ground is adequate protection in many installations. A lightning rod serves two purposes. Primarily, it serves as a preferred strike point. Secondarily, it dissipates charge, reducing the chance of a lightning strike. FIGURE. Lightning Protection Scheme (p. 93) shows a simple lightning protection scheme utilizing a lightning rod, metal mast, heavy gage ground wire, and ground rod to direct damaging current away from the CR800.

FIGURE 48. Lightning Protection Scheme

93

Section 7. Grounding

7.2

Single-Ended Measurement Reference


Low-level single-ended voltage measurements are sensitive to ground potential fluctuations. The grounding scheme in the CR800 has been designed to eliminate ground potential fluctuations due to changing return currents from 12V, SW12, 5V, and C1 -- C4 terminals. This is accomplished by utilizing separate signal grounds ( ) and power grounds (G). To take advantage of this design, observe the following grounding rule: Note Always connect a device's ground next to the active terminal associated with that ground. Several ground wires can be connected to the same ground terminal. Examples: Connect grounds associated with 5V, 12V, and C1 -- C4 terminals to G terminals. Connect excitation grounds to the closest ( terminal block. ) terminal on the excitation ) terminal on

Connect the low side of single-ended sensors to the nearest ( the analog input terminal blocks. Connect shield wires to the nearest ( blocks.

) terminal on the analog input terminal

If offset problems occur because of shield or ground leads with large current flow, tying the problem leads into the ( ) terminals next to the excitation and pulse-counter channels should help. Problem leads can also be tied directly to the ground lug to minimize induced single-ended offset voltages.

7.3

Ground Potential Differences


Because a single-ended measurement is referenced to CR800 ground, any difference in ground potential between the sensor and the CR800 will result in a measurement error. Differential measurements MUST be used when the input ground is known to be at a different ground potential from CR800 ground. Ground potential differences are a common problem when measuring full bridge sensors (strain gages, pressure transducers, etc), and when measuring thermocouples in soil.

7.3.1

Soil Temperature Thermocouple


If the measuring junction of a copper-constantan thermocouple is not insulated when in soil or water, and the potential of earth ground is, for example, one mV greater at the sensor than at the point where the CR800 is grounded, the measured voltage is 1 mV greater than the thermocouple output, or approximately 25C high.

94

Section 7. Grounding

7.3.2

External Signal Conditioner


External signal conditioners, e.g. an infrared gas analyzer (IRGA), are frequently used to make measurements and send analog information to the CR800. These instruments are often powered by the same ac line source as the CR800. Despite being tied to the same ground, differences in current drain and lead resistance result in different ground potential at the two instruments. For this reason, a differential measurement should be made on the analog output from the external signal conditioner.

7.4

Ground Looping in Ionic Measurements


When measuring soil moisture blocks or water conductivity, the potential exists for a ground loop which can adversely affect the measurement. This ground loop arises because the soil and water provide an alternate path for the excitation to return to CR800 ground, and can be represented by the model diagrammed in FIGURE. Model of a Ground Loop with a Resistive Sensor (p. 96). Consider the equation

wherein Vx is the excitation voltage, Rf is a fixed resistor, Rs is the sensor resistance, and RG is the resistance between the excited electrode and CR800 earth ground. With RG in the network, the measured signal is: RsRf/RG is the source of error due to the ground loop. When RG is large, the equation reduces to the ideal. The geometry of the electrodes has a great effect on the magnitude of this error. The Delmhorst gypsum block used in the 227 probe has two concentric cylindrical electrodes. The center electrode is used for excitation; because it is encircled by the ground electrode, the path for a ground loop through the soil is greatly reduced. Moisture blocks which consist of two parallel plate electrodes are particularly susceptible to ground loop problems. Similar considerations apply to the geometry of the electrodes in water conductivity sensors. The ground electrode of the conductivity or soil moisture probe and the CR800 earth ground form a galvanic cell, with the water/soil solution acting as the electrolyte. If current was allowed to flow, the resulting oxidation or reduction would soon damage the electrode, just as if dc excitation was used to make the measurement. Campbell Scientific probes are built with series capacitors in the leads to block this dc current. In addition to preventing sensor deterioration, the capacitors block any dc component from affecting the measurement.

95

Section 7. Grounding

FIGURE 49. Model of a Ground Loop with a Resistive Sensor

96

Section 8. CR800 Configuration


The CR800 may require changes to factory default settings depending on the application. Most settings concern telecommunications between the CR800 and a network or PC. Note The CR800 is shipped factory ready with all settings and firmware necessary to communicate with a PC via RS-232 and to accept and execute user application programs.

8.1

DevConfig
Prior to running DevConfig, connect a serial cable from the computer COM port to the RS232 port on the datalogger as shown in FIGURE. Power and RS-232 Connections (p. 14). DevConfig (Device Configuration Utility) is the preferred tool for configuring the CR800. It is made available as part of LoggerNet, PC400, and at www.campbellsci.com. Most settings can also be entered through the optional keyboard display (SECTION. Settings (p. 386)). Features of DevConfig include: Communicates with devices via direct RS-232 only. Sends operating systems to supported device types. Sets datalogger clocks and sends program files to dataloggers. Identifies operating system types and versions. Provides a reporting facility wherein a summary of the current configuration of a device can be shown, printed or saved to a file. The file can be used to restore settings, or set settings in like devices. Provides a terminal emulator useful in configuring devices not directly supported by DevConfig's graphical user interface. Shows Help as prompts and explanations. Help for the appropriate settings for a particular device can also be found in the user's manual for that device. Updates from Campbell Scientific's web site. As shown in FIGURE. DevConfig CR800 Utility (p. 98), the DevConfig window is divided into two main sections: the device selection panel on the left side and tabs on the right side. After choosing a device on the left, choose from the list of the serial ports (COM1, COM2, etc.) installed on the PC. A selection of baud rates is offered only if the device supports more than one baud rate. The page for each device presents instructions to set up the device to communicate with DevConfig. Different device types offer one or more tabs on the right.

97

Section 8. CR800 Configuration When the Connect button is pressed, the device type, serial port, and baud rate selector controls become disabled and, if DevConfig is able to connect to the CR800, the button will change from "Connect" to "Disconnect".

FIGURE 50. Device Configuration Utility (DevConfig)

8.2

Sending the Operating System


The CR800 is shipped with the operating system pre-loaded. However, OS updates are made available at www.campbellsci.com and can be sent to the CR800. Since sending an OS to the CR800 resets memory, data loss will certainly occur. Depending on several factors, the CR800 may also become incapacitated for a time. Consider the following before updating the OS. 1. Is sending the OS necessary to correct a critical problem? -- If not, consider waiting until a scheduled maintenance visit to the site. 2. Is the site conveniently accessible such that a site visit can be undertaken to correct a problem of reset settings without excessive expense? If the OS must be sent, and the site is difficult or expensive to access, try the OS download procedure on an identically programmed, more conveniently located datalogger.

98

Section 8. CR800 Configuration

8.2.1

Sending OS with DevConfig


FIGURE. DevConfig OS Download Window (p. 99) and FIGURE. Dialog Box Confirming OS Download (p. 99) show DevConfig windows displayed during the OS download process. Caution Sending an operating system with DevConfig will erase all existing data and reset all settings to factory defaults.

Text in the Send OS tab (FIGURE. DevConfig OS Download Window (p. 99)) lists instructions for sending an operating system to the CR800. When the Start button is clicked, DevConfig offers a file open dialog box that prompts for the operating system file (*.obj file). When the CR800 is poweredup, DevConfig starts to send the operating system. When the operating system has been sent, a confirming message dialog box.

The information in the dialog helps to corroborate the signature of the operating system sent.

FIGURE 51. DevConfig OS Download Window

99

Section 8. CR800 Configuration

FIGURE 52. Dialog Box Confirming OS Download

8.2.2

Sending OS with Program Send


Operating system files can be sent using the Program Send feature in datalogger support software (p. 465). Beginning with the OS indicated in TABLE. OS Version in which Preserve Settings was Instituted (p. 100), this has the benefit of USUALLY preserving CR800 settings. TABLE 22. Operating System Version in which Preserve Settings via Prog Datalogger
CR1000 CR800 CR3000

OS Version / Date
16 / 11-10-08 7 / 11-10-08 9 / 11-10-08

CSI recommends upgrading operating system only via a direct hardwire link. However, Program Send (LoggerNet / PC200W / PC400 / RTDAQ) allows the OS to be sent over all telecommunications options supported by those software suites. Caution must be exercised when sending an OS via Program Send because: Operating systems are very large files -- be cautious of line charges. Operating system downloads may reset CR800 settings, even settings critical to supporting the telecommunications link -- newer operating systems minimize this risk.

Caution Depending on the method and quality of telecommunications, sending an OS via Program Send may take a long time, so be conscious of connection charges.

100

Section 8. CR800 Configuration

8.2.3

Sending OS with External Memory


Refer to SECTION. File Management (p. 341).

8.3
8.3.1

Settings
Settings via DevConfig
The CR800 has a number of properties, referred to as "settings", some of which are specific to the PakBus communications protocol. Read More! PakBus is discussed in SECTION. PakBus Overview (p. 353) and the PakBus Networking Guide available at www.campbellsci.com. DevConfig | Settings Editor tab provides access to most PakBus settings, however, the DevConfig | Deployment tab makes configuring most of these settings easier. As shown in FIGURE. DevConfig Settings Editor (p. 102), the top of the Settings Editor is a grid that allows the user to view and edit the settings for the device. The grid is divided into two columns with the setting name appearing in the left hand column and the setting value appearing in the right hand column. Change the currently selected cell with the mouse or by using up-arrow and down-arrow keys as well as the Page-Up and Page-Down keys. When clicking in the setting names column, the value cell associated with that name will automatically be made active. Edit a setting by selecting the value, pressing the F2 key or by double clicking on a value cell with the mouse. The grid will not allow read-only settings to be edited. The bottom of the Settings Editor displays help for the setting that has focus on the top of the screen. Once a setting is changed, click Apply or Cancel. These buttons will only become enabled after a setting has been changed. If the device accepts the settings, a configuration summary dialogue is shown (FIGURE. Summary of CR800 Configuration (p. 102)) that gives the user a chance to save and print the settings for the device. Clicking the Factory Defaults button on the Settings Editor will send a command to the device to revert to its factory default settings. The reverted values will not take effect until the final changes have been applied. This button will remain disabled if the device does not support the DevConfig protocol messages. Clicking Save on the summary screen will save the configuration to an XML file. This file can be used to load a saved configuration back into a device by clicking Read File and Apply.

101

Section 8. CR800 Configuration

FIGURE 53. DevConfig Settings Editor

FIGURE 54. Summary of CR800 Configuration

102

Section 8. CR800 Configuration

8.3.1.1

Deployment Tab
As shown in FIGURE. DevConfig Deployment Tab (p. 103), the Deployment tab allows the user to configure the datalogger prior to deploying it. Deployment tab settings can also be accessed through the Setting Editor tab and the Status table.

FIGURE 55. DevConfig Deployment Tab

8.3.1.1.1

Datalogger Sub-Tab Serial Number displays the CR800 serial number. This setting is set at the factory and cannot be edited. OS Version displays the operating system version that is in the CR800. Station Name displays the name that is set for this station. The default station name is the CR800 serial number. PakBus Address allows users to set the PakBus address of the datalogger. The allowable range is between 1 and 4094. Each PakBus device should have a unique PakBus address. Addresses >3999 force other PakBus devices to respond regardless of their respective PakBus settings. See the PakBus Networking Guide (available from Campbell Scientific) for more information. Security - See SECTION. Security (p. 38).

103

Section 8. CR800 Configuration 8.3.1.1.2 ComPorts Settings Sub-Tab As shown in FIGURE. DevConfig Deployment | ComPorts Settings Tab (p. 105), the port settings tab has the following settings. Read More! PakBus Networking Guide available at www.campbellsci.com. Selected Port specifies the datalogger serial port to which the beacon interval and hello setting values are applied. Beacon Interval sets the interval (in seconds) on which the datalogger will broadcast beacon messages on the port specified by Selected Port. Verify Interval specifies the interval (in seconds) at which the datalogger will expect to have received packets from neighbors on the port specified by Selected Port. A value of zero (default) indicates that the datalogger has no neighbor list for this port. Neighbors List, or perhaps more appropriately thought of as the "allowed neighbors list", displays the list of addresses that this datalogger expects to find as neighbors on the port specified by Selected Port. As items are selected in this list, the values of the Begin and End range controls will change to reflect the selected range. Multiple lists of neighbors can be added on the same port. Begin and End Range are used to enter a range of addresses that can either be added to or removed from the neighbors list for the port specified by Selected Port. As users manipulate these controls, the Add range and Remove Range buttons are enabled or disabled depending on the relative values in the controls and whether the range is present in or overlaps with the list of address ranges already set up. These controls are disabled if the Verify Interval value is set to zero. Add Range will cause the range specified in the Begin and End range to be added to the list of neighbors to the datalogger on the port specified by Selected Port. This control is disabled if the value of the Verify Interval is zero or if the end range value is less than the begin range value. Remove Range will remove the range specified by the values of the Begin and End controls from the list of neighbors to the datalogger on the port specified by Selected Port. This control is disabled if the range specified is not present in the list or if the value of Verify Interval is set to zero. Help is displayed at the bottom of the Deployment tab. When finished, Apply the settings to the datalogger. The Summary window will appear. Save or Print the settings to archive or to use as a template for another datalogger. Cancel causes the datalogger to ignore the changes. Read File provides the opportunity to load settings saved previously from this or another similar datalogger. Changes loaded from a file will not be written to the datalogger until Apply is clicked.

104

Section 8. CR800 Configuration

FIGURE 56. DevConfig Deployment | ComPorts Settings Tab

8.3.1.1.3

Advanced Sub-Tab Is Router allows the datalogger to act as a PakBus router. PakBus Nodes Allocation indicates the maximum number of PakBus devices the CR800 will communicate with if it is set up as a router. This setting is used to allocate memory in the CR800 to be used for its routing table. Max Packet Size is the size of PakBus packets transmitted by the CR800. USR: Drive Size specifies the size in bytes allocated for the "USR:" ram disk drive. RS-232 Power/Handshake | Port Always On controls whether the RS-232 port will remain active even when communication is not taking place. Note that if RS-232 handshaking is enabled (handshaking buffer size is nonzero), this setting must be checked. RS-232 Hardware Handshaking Buffer Size indicates hardware handshaking is active on the RS-232 port when non-zero. This setting specifies the maximum packet size sent between checking for CTS. Handshake Timeout (RS-232) this specifies in tens of milliseconds the timeout that the CR800 will wait between packets if CTS is not asserted. Files Manager Setting specifies the number of files with the specified extension that will be saved when received from a specified node. There

105

Section 8. CR800 Configuration can be up to 4 such settings. The files will be renamed by using the specified file name optionally altered by a serial number inserted before the file type. This serial number is used by the datalogger to know which file to delete after the serial number exceeds the specified number of files to retain. If the number of files is 0, then the serial number is not inserted. A special node ID of 3210 can be used if the files will be sent via FTP protocol, or 3211 if the files will be written via CRBASIC. Note that this setting will operate only on files whose names are not null strings. Example: (129,CPU:NorthWest.JPG,2) (130,CRD:SouthEast.JPG,20) (130,CPU:Message.TXT,0) In the example above, *.JPG files from node 129 are named CPU:NorthWestnnn.JPG and 2 files are retained. JPG files from node 130 are named CRD:SouthEastnnn.JPG, while 20 files are retained. The nnn serial number starts at 1 and can advance beyond 9 digits. In this example, all *.TXT files from node 130 will be stored with the name CPU:Message.txt, with no serial number inserted. Starting with version CR1000 OS 17, CR3000 OS 10, and CR800 OS 8, two rules can be specified for the same source node and file extension, but with different base names. This feature facilitates the maintenance of a "log" of files while allowing easy identification of the newest file. FilesManager := { "(" pakbus-address "," name-prefix "," number-files ")" }. pakbus-address := number. ; 0 < number < 4095 name-prefix := string. number_files := number. ; 0 <= number < 10000000

106

Section 8. CR800 Configuration

FIGURE 57. DevConfig Deployment | Advanced Tab

8.3.1.2

Logger Control Tab


Clocks in the PC and CR800 are checked every second and the difference displayed. The System Clock Setting allows entering what offset, if any, to use with respect to standard time (Local Daylight Time or UTC, Greenwich mean time). The value selected for this control is remembered between sessions. Clicking the Set Clock button will synchronize the station clock to the current computer system time. Current Program displays the current program known to be running in the datalogger. This value is empty if there is no current program. The Last Compiled field displays the time when the currently running program was last compiled by the datalogger. As with the Current Program field, this value is read from the datalogger if it is available. Last Compile Results shows the compile results string as reported by the datalogger. The Send Program button presents an open file dialog from which to select a program file to be sent to the datalogger. The field above the button is updated as the send operation progresses. When the program has been sent the Current Program, Last Compiled, and Last Compile Results fields are filled in.

107

Section 8. CR800 Configuration

FIGURE 58. DevConfig Logger Control Tab

8.3.2

Settings via CRBASIC


Some variables in the status table can be requested or set during program execution using CRBASIC commands SetStatus () and SetSecurity (). Entries can be requested or set by setting a Public or Dim variable equivalent to the status table entry, as can be done with variables in any data table. For example, to set a variable, x, equal to a status table entry, the syntax is,
x = Status.StatusTableEntry

Careful programming is required when changing settings via CRBASIC to ensure users are not inadvertently blocked from communicating with the CR800, the remedy for which may be a site visit.

8.3.3

Durable Settings
Many CR800 settings can be changed remotely over a telecommunications link either directly or as part of the CRBASIC program. This convenience comes with the risk of inadvertently changing settings and disabling communications. Such an instance will likely require an on-site visit to correct the problem. For example, digital cell modems are often controlled by a switched 12 Vdc (SW12) channel. SW12 is normally off, so, if the program controlling SW12 is disabled, such as by replacing it with a program that neglects SW12 control, the cell modem is switched off and the remote CR800 drops out of telecommunications.

108

Section 8. CR800 Configuration Campbell Scientific recommends implementing one or both of the provisions described in SECTION. "Include" File (p. 109) and SECTION. Default.CR8 File (p. 111) to help preserve remote communication, or other vital settings.

8.3.3.1

"Include" File
The Include file is a CRBASIC program file that resides in CR800 memory and compiles as an add-on to the user entered program. The Include file begins with the SlowSequence instruction and contains code to set essential telecommunications or other settings. This feature is enabled by sending the Include file to the CR800 using the File Control feature, then entering the path and name of the file in the Include file setting in the CR800 using DevConfig or PakBusGraph. FIGURE. "Include File" Settings via DevConfig (p. 109) and FIGURE. "Include File" settings via PakBusGraph (p. 109) show methods to set required "Include File" settings via DevConfig or via telecommunications. There is no restriction on the length of the Include file. CRBASIC EXAMPLE. Using an Include File to Control SW12 (p. 110) shows a program that expects an Include file to control power to a modem; CRBASIC EXAMPLE. Include File to Control SW12 (p. 110) lists the Include file code.

FIGURE 59. "Include File" Settings via DevConfig

109

Section 8. CR800 Configuration

FIGURE 60. "Include File" Settings via PakBusGraph

CRBASIC EXAMPLE 4.

Using an Include File to Control SW12

'Assumes that the Include file in CRBASIC EXAMPLE. Include File to Control SW12 (p. 110) 'is loaded onto the CR800 CPU: Drive. 'The Include file will control power to the cellular phone modem. Public PTemp, batt_volt DataTable(Test,1,-1) DataInterval(0,15,Sec,10) Minimum(1,batt_volt,FP2,0,False) Sample(1,PTemp,FP2) EndTable BeginProg Scan(1,Sec,0,0) PanelTemp(PTemp,250) Battery(Batt_volt) CallTable Test NextScan '<<<<<<<<<<<<<<<<<<<<<<<<<<<Include File Code Executed Here EndProg

110

Section 8. CR800 Configuration

CRBASIC EXAMPLE 5.

Include File to Control SW12.

'Include File "Add-on" Program 'Control Cellular modem power for the main program. 'Cell phone + to be wired to SW12 terminal, - to G.

'<<<<<<<<<<<<<<<<<<<<<<<Note: No BeginProg Instruction!! SlowSequence Scan(1,Sec,0,0) If TimeIntoInterval(9,24,Hr) Then SW12(1) 'Modem on at 9:00 AM If TimeIntoInterval(17,24,Hr) Then SW12(0) 'Modem off at 5:00 PM NextScan '<<<<<<<<<<<<<<<<<<<<<<<<<<<NOTE: No EndProg Instruction!!

8.3.3.2

Default.CR8 File
Default.CR8 can be stored on the CR800 CPU: drive. At power up, the CR800 loads default.CR8 if no other program takes priority (see SECTION. Program Run Priorities (p. 111)). Default.CR8 can be edited to preserve critical datalogger settings such as communication settings, but cannot be more than a few lines of code. Downloading operating systems over telecommunications requires much of the available CR800 memory. If the intent is to load operating systems via telecommunications and have a default.CR8 file in the CR800, the default.CR8 program should not use significant memory, such as occurs by allocating a large USR: drive, or by using a DataTable() instruction with auto allocation of memory.

CRBASIC EXAMPLE 6.

A simple Default.CR8 file to control SW12 switched power terminal

BeginProg Scan(1,Sec,0,0) If TimeIntoInterval(15,60,Sec) Then SW12(1) If TimeIntoInterval(45,60,Sec) Then SW12(0) NextScan EndProg

8.3.4

Program Run Priorities


1. When the CR800 starts, it executes commands in the powerup.ini file (on CS mass storage media (USB: drive)), including commands to set program file (i.e., .CR8 files) attributes to Run Now or Run On Power Up. 2. When the CR800 powers up, a program file marked as "Run On Power-up" will be the current program. Otherwise, any file marked as "Run Now" will be used. 3. If there is a file specified in the "Include File Name" setting, it is compiled at the end of the program selected in 1).

111

Section 8. CR800 Configuration 4. If there is no file selected in 1), or if the selected file cannot be compiled, the CR800 will attempt to run the program listed in the Include File Name setting. The CR800 allows a SlowSequence statement to take the place of the BeginProg statement. This allows the Include File to act both as an include file and as the default program. 5. If the program listed in the "Include File Name" setting cannot be run or if no program is specified, the CR800 will attempt to run the program named default.CR8 on its CPU: drive. 6. If there is no default.CR8 file or it cannot be compiled, the CR800 will not automatically run any program.

8.3.5

Network Planner
Network Planner allows the user to: create a graphical representation of a network, as shown in FIGURE. Network Planner Setup (p. 112). determine settings for devices and LoggerNet. program devices and LoggerNet with new settings.

FIGURE 61. Network Planner Setup

112

Section 8. CR800 Configuration

Why is Network Planner needed? PakBus protocol allows complex networks to be developed. Setup of individual devices is difficult. Settings are distributed across a network. Different device types need settings coordinated.

Caveats Network Planner aids in but does not replace the design process. It does not make hardware recommendations. It does not generate datalogger programs. It does not understand distances or topography; i.e., it cannot warn the user when broadcast distances are exceeded or identify obstacles to radio transmission. Network Planner aids development of only PakBus networks.

PakBus Settings Device addresses are automatically allocated but can be changed Device connections are used to determine whether neighbor lists should be specified Verification intervals will depend on the activities between devices Beacon intervals will be assigned but will have default values Network Role (router versus leaf node) will be assigned based on device links

Policies Device Links & Communication Resources Disallow links that will not work Comparative desirability of links Prevent over-allocation of resources Optimal RS232 and CS I/O ME Baud Rates based on device links Optimal packet size limits based upon anticipated routes

113

Section 8. CR800 Configuration For more detailed information on Network Planner, please consult the LoggerNet manual, which is available at www.campbellsci.com.

8.3.5.1

Overview
PakBus Settings Device addresses are automatically allocated but can be changed. Device connections are used to determine whether neighbor lists should be specified. Verification intervals will depend on the activities between devices. Beacon intervals will be assigned but will have default values. Network role (e.g., router or leaf node) will be assigned based on device links.

Device Links & Communication Resources Disallow links that will not work. Comparative desirability of links. Prevent over-allocation of resources. Optimal RS232 and CS I/O ME Baud Rates based on device links. Optimal packet size limits based upon anticipated routes.

Fundamentals of Planning a Network Add a background (optional) Place stations, peripherals, etc. Establish links Set up activities (scheduled poll, callback) Configure devices Configure LoggerNet (adds the planned network to the LoggerNet Network Map)

For more detailed information on Network Planner, please consult the LoggerNet software manual, which is available at www.campbellsci.com.

114

Section 9. Programming
Programs are created with either Short Cut or CRBASIC Editor. Short Cut is available at no charge at www.campbellsci.com. CRBASIC Editor is in the LoggerNet / PC400 datalogger support software suites. Programs can be up to 490 kbytes in size although typical programs are much smaller.

9.1

Writing and Editing Programs


Programs are created with either Short Cut or CRBASIC Editor. Short Cut is available at no charge at www.campbellsci.com. CRBASIC Editor is in the LoggerNet / PC400 datalogger support software suites. Programs can be up to 490 kbytes in size although typical programs are much smaller.

9.1.1

Short Cut Editor and Program Generator


Short Cut is easy-to-use menu-driven software that presents the user with lists of predefined measurement, processing, and control algorithms from which to choose. The user makes choices and Short Cut writes the CRBASIC code required to perform the tasks. Short Cut creates a wiring diagram to simplify connection of sensors and external devices. SECTION. Quickstart Tutorial (p. 3) works through a measurement example using Short Cut. For many complex applications, Short Cut is still a good place to start. When as much information as possible is entered, Short Cut will create a program template from which to work, already formatted with most of the proper structure, measurement routines, and variables. The program can then be edited further using CRBASIC Program Editor.

9.1.2

CRBASIC Editor
CR800 application programs are written in a variation of BASIC (Beginner's All-purpose Symbolic Instruction Code) computer language, CRBASIC (Campbell Recorder BASIC). CRBASIC Editor is a text editor that facilitates creation and modification of the ASCII text file that constitutes the CR800 application program. CRBASIC Editor is available as part of LoggerNet / PC400 / RTDAQ datalogger support software packages. Fundamental elements of CRBASIC include: Variables - named packets of CR800 memory into which are stored values that normally vary during program execution. Values are typically the result of measurements and processing. Variables are given an alphanumeric name and can be dimensioned into arrays of related data. Constants - discrete packets of CR800 memory into which are stored specific values that do not vary during program executions. Constants are given

115

Section 9. Programming alphanumeric names and assigned values at the beginning declarations of a CRBASIC program. Note Keywords and predefined constants are reserved for internal CR800 use. If a user programmed variable happens to be a keyword or predefined constant, a runtime or compile error will occur. To correct the error, simply change the variable name by adding or deleting one or more letters, numbers, or the underscore (_) from the variable name, then recompile and resend the program. CRBASIC Help provides a list of keywords and pre-defined constants. Common instructions - Instructions and operators used in most BASIC languages, including program control statements, and logic and mathematical operators. Special instructions - Instructions unique to CRBASIC, including measurement instructions that access measurement channels, and processing instructions that compress many common calculations used in CR800 dataloggers. These four elements must be properly placed within the program structure.

9.1.2.1

Inserting Comments into Program


Comments are non-executable text placed within the body of a program to document or clarify program algorithms. As shown in CRBASIC EXAMPLE. Inserting Comments (p. 116), comments are inserted into a program by preceding the comment with a single quote ('). Comments can be entered either as independent lines or following CR800 code. When the CR800 compiler sees a single quote ('), it ignores the rest of the line.

CRBASIC EXAMPLE 7.

Inserting Comments
'Declare the start time array

'Declaration of variables starts here. Public Start(6)

9.1.2.2

Line Continuation
A line continuation consists of at least one white-space character that immediately precedes a single underscore character as the last character (other than white space) in a text line. A line continuation allows an executable line of text to span more than one file line. Line continuations are treated as if they were white space, even though they are not. Examples:
Public A, B, _ C,D, E, F If (A And B) _ Or (C And D) _ Or (E And F) then Exit Scan

116

Section 9. Programming

9.2

Sending Programs
The CR800 requires a program be sent to its memory to direct measurement, processing, and data storage operations. Programs are sent with LoggerNet / PC400 / RTDAQ / PC200W datalogger support software Device Configuration Utility (DevConfig) CS mass storage media (USB: drive) A good practice is to always retrieve data from the CR800 before sending a program, otherwise, data may be lost. Read More! See SECTION. File Management (p. 341) and the CS mass storage media (USB: drive) documentation available at www.campbellsci.com.

9.2.1

Preserving Data at Program Send


When sending programs to the CR800 through software options listed in TABLE. Program Send Options that Reset Memory (p. 117), memory is reset and data are erased. When data retention is desired, use LoggerNet / PC400 / RTDAQ File Control | Send, or CRBASIC Editor option Compile | Compile, Save, Send to send programs. Using these options first requires a telecommunications link be set up in LoggerNet / PC400 / RTDAQ. The window shown in FIGURE. CRBASIC Editor Program Send File Control Window (p. 118) is displayed before the program is sent. Select "Run Now", "Run On Power-up", and "Preserve data if no table changed" before pressing Send. Note To retain data, "Preserve data if no table changed" must be selected whether or not CS mass storage media (USB: drive) be connected. Regardless of the program upload tool used, if any change occurs to data table structures listed in TABLE. Data Table Structures (p. 118), data will be erased when a new program is sent. TABLE 23. Program Send Options that Reset Memory*
LoggerNet | Connect | Program Send PC400 | Clock/Program | Send Program PC200W | Clock/Program | Send Program RTDAQ | Clock/Program | Send Program DevConfig | Logger Control | Send Program *Reset memory and set program attributes to Run Always

117

Section 9. Programming

FIGURE 62. CRBASIC Editor Program Send File Control Window

TABLE 24. Data Table Structures


-Data table name(s) -Data interval or offset -Number of fields per record -Number of bytes per field -Field type, size, name, or position -Number of records in table

9.3

Numerical Formats
Four numerical formats are supported by CRBASIC. Most common is the use of base 10 numbers. Scientific notation, binary, and hexadecimal formats may also be used, as shown in TABLE. Formats for Entering Numbers in CRBASIC (p. 118). Only standard base 10 notation is supported by Campbell Scientific hardware and software displays. TABLE 25. Formats for Entering Numbers in CRBASIC
Format Standard Scientific notation Binary Hexadecimal 6.832 5.67E-8 &B1101 &HFF Example 6.832 5.67X10 13 255
-8

Base 10 Equivalent Value

Binary format is useful when loading the status (1 = high, 0 = low) of multiple flags or ports into a single variable, e.g., storing the binary number &B11100000 preserves the status of flags 8 through 1. In this case, flags 1 - 5

118

Section 9. Programming are low, 6 - 8 are high. CRBASIC EXAMPLE. Load Binary Information into a Variable (p. 119) shows an algorithm that loads binary status of flags into a LONG integer variable.

CRBASIC EXAMPLE 8.
Public FlagInt As Long Public Flag(8) As Boolean Public I

Load binary information into a single variable

DataTable(FlagOut,True,-1) Sample(1,FlagInt,UINT2) EndTable BeginProg Scan(1,Sec,3,0) FlagInt = 0 For I = 1 To 8 If Flag(I) = true then FlagInt = FlagInt + 2 ^ (I - 1) EndIf Next I CallTable FlagOut NextScan EndProg

119

Section 9. Programming

9.4

Structure
TABLE. CRBASIC Program Structure (p. 120) delineates CRBASIC program structure. CRBASIC EXAMPLE. Proper Program Structure (p. 121) demonstrates the proper structure of a CRBASIC program. TABLE 26. CRBASIC Program Structure
Declarations Define datalogger memory usage. Declare constants, variables, aliases, units, and data tables. List fixed constants List / dimension variables viewable during program execution List / dimension variables not viewable during program execution. Assign aliases to variables. Assign engineering units to variable (optional). Units are strictly for documentation. The CR800 makes no use of Units nor checks Unit accuracy. Define stored data tables Set triggers when data should be stored. Triggers may be a fixed interval, a condition, or both. Set the size of a data table Send data to a CS mass storage media (USB: drive) if available. List data to be stored in the data table, e.g. samples, averages, maxima, minima, etc. Processes or calculations repeated during program execution can be packaged in a subroutine and called when needed rather than repeating the code each time. Begin Program Set scan interval Measurements Processing Call Data Table(s) Initiate controls NextScan End Program Begin Program defines the beginning of statements defining datalogger actions. The scan sets the interval for a series of measurements Enter measurements to make Enter any additional processing Declared data tables must be called to process and store data Check measurements and initiate controls if necessary Loop back to Set Scan and wait for the next scan End Program defines the ending of statements defining datalogger actions.

Declare constants Declare Public variables Dimension variables Define Aliases Define Units

Define data tables. Process/store trigger

Table size Other on-line storage devices Processing of Data

120

Section 9. Programming

CRBASIC EXAMPLE 9.
'Declarations 'Define Constants Const RevDiff = 1 Const Del = 0 'default Const Integ = 250 Const Mult = 1 Const Offset = 0 'Define public variables Public RefTemp Public TC(6) 'Define Units Units RefTemp = degC Units TC = DegC

Proper Program Structure

Declare Constants

Declare Public Variables, Dimension Array, and Declare Units.

Declarations

'Define data tables DataTable(Temp,1,2000) DataInterval(0,10,min,10) Average(1,RefTemp,FP2,0) Average(6,TC(),FP2,0) EndTable

Define Data Table

'Begin Program BeginProg 'Set scan interval Scan(1,Sec,3,0)

'Measurements PanelTemp(RefTemp,250) TCDiff(TC()...Offset) 'Processing (None in this examp

Measure

Scan Loop 'Call data table CallTable Temp 'Controls (None in this example 'Loop to next scan NextScan 'End Program End Prog

Call Data Table

121

Section 9. Programming

9.5

Single-line Declarations
Public, Dim, and ReadOnly variables are declared at the beginning of a CRBASIC program, as are Constants, Units, Aliases, Station Name, DataTables, and Subroutines. TABLE. Rules for Names (p. 147) lists declaration names and allowed lengths.

9.5.1

Variables
A variable is a packet of memory given an alphanumeric name through which pass measurements and processing results during program execution. Variables are declared either as Public or Dim at the discretion of the programmer. Public variables can be viewed through the optional keyboard display or software numeric monitors. Dim variables cannot. Variable names can be up to 39 characters in length, but most variables should be no more than 35 characters long. This allows for the 4 additional characters that are added as a suffix to the variable name when it is output to a data table. Variable names cannot start with a number or contain spaces or quote marks (), but can contain numbers and underscores (_). Several variables can be declared on a single line, separated by commas:
Public RefTemp, AirTemp2, Batt_Volt

Variables can also be assigned initial values in the declaration.


Public SetTemp = {35}

is an example of declaring a variable and assigning it an initial value.

9.5.1.1

Arrays
When a variable is declared, several variables of the same root name can also be declared. This is done by placing a suffix of "(x)" on the alphanumeric name, which creates an array of x number of variables that differ only by the incrementing number in the suffix. For example, rather than declaring four similar variables as follows,
Public Public Public Public TempC1 TempC2 TempC3 TempC4

simply declare a variable array as shown below:


Public TempC(4),

This creates in memory the four variables TempC(1), TempC(2), TempC(3), and TempC(4). A variable array is useful in program operations that affect many variables in the same way. CRBASIC EXAMPLE. Using a Variable Array in Calculations (p. 123) shows program code using a variable array to reduce the amount of code required to convert four temperatures from Celsius degrees to Fahrenheit degrees.

122

Section 9. Programming In this example a For/Next structure with a changing variable is used to specify which elements of the array will have the logical operation applied to them. The CRBASIC For/Next function will only operate on array elements that are clearly specified and ignore the rest. If an array element is not specifically referenced, e.g., TempC(), CRBASIC references only the first element of the array, TempC(1).

CRBASIC EXAMPLE 10. Using a variable array in calculations


Public TempC(4) Public TempF(4) Dim T BeginProg Scan(1,Sec,0,0) Therm107(TempC(),4,1,Vx1,0,250,1.0,0) For T = 1 To 4 TempF(T) = TempC(T) * 1.8 + 32 Next NextScan EndProg

9.5.1.2

Dimensions
Some applications require multi-dimensioned arrays. Array dimensions are analogous to spatial dimensions (distance, area, and volume). A single dimensioned array, declared as VariableName(x), with (x) being the index, denotes x number of variables is a series. A two-dimensional array, declared as
Public (or Dim) VariableName(x,y),

with (x,y) being the indices, denotes (x) * (y) number of variables in a square xby-y matrix. Three-dimensional arrays (VariableName (x,y,z), (x,y,z) being the indices) have (x) * (y) * (z) number of variables in a cubic x-by-y-by-z matrix. Dimensions greater than three are not permitted by CRBASIC. When using variables in place of integers as the dimension indices, e.g., CRBASIC EXAMPLE. Using Variable Array Dimension Indices (p. 123), declaring the indices as Long variables is recommended as doing so allows for more efficient use of CR800 resources.

123

Section 9. Programming

CRBASIC EXAMPLE 11. CRBASIC Code: Using Variable Array Dimension Indices
Dim aaa As Long Dim bbb As Long Dim ccc As Long Public VariableName(4,4,4) as Float BeginProg Scan() aaa = 3 bbb = 2 ccc = 4 VariableName(aaa,bbb,ccc) = 2.718 NextScan EndProg

9.5.1.2.1

Dimensioning Strings Strings can be declared to a maximum of two dimensions. The third "dimension" is used for accessing characters within a string. See SECTION. String Operations (p. 300). String length can also be declared. A one dimensional string array called "StringVar", with 5 elements in the array, and each element with a length of 36 characters is declared as
Public StringVar(5) As String * 36

Five variables are declared, each 36 characters long:


StringVar(1) StringVar(2) StringVar(3) StringVar(4) StringVar(5)

9.5.1.3

Data Types
Variables and stored data can be configured with various data types to optimize program execution and memory usage. The declaration of variables (via the DIM or the PUBLIC statement) allows an optional type descriptor AS that specifies the data type. The default data type, without a descriptor, is IEEE4 floating point (FLOAT). Variable data types are STRING and three numeric types: FLOAT, LONG, and BOOLEAN. Stored data has additional data type options FP2, UINT2, BOOL8, and NSEC. CRBASIC EXAMPLE. Data Type Declarations (p. 126) shows these in use in the declarations and output sections of a CRBASIC program. The CRBASIC programming language allows mixing data types within a single array of variables; however, this practice can result in at least one problem. The datalogger support software (p. 465) is incapable of efficiently handling different data types for the same field name. The datalogger support software (p. 465) addresses this by mangling the field names in data file headers. TABLE. Data Types (p. 125) lists details of available data types.

124

Section 9. Programming

TABLE 27. Data Types


Name / Code FP2 Description / Word Size Campbell Scientific Floating Point / 2 byte Where Used Final Data Storage Notes Default final storage data type. Use FP2 for stored data requiring 3 or 4 significant digits. If more significant digits are needed, use IEEE4 or an offset.
Zero

Resolution / Range
Minimum Maximum

0.000
spacer spacer

0.001

7999.
Decimal Location

Absolute Value

0 -- 7.999 8 -- 79.99 80 - 799.9 800 -- 7999. IEEE4 IEEE Floating Point / 4 byte FLOAT IEEE Floating Point / 4 byte LONG Signed Integer / 4 byte Final Data Storage DIM & PUBLIC variables Use to store count data 2,147,483,648 Speed -- math with integers is faster than with floats. Resolution -- has 32 bits compared to 24-bits in IEEE4. Usually not suitable for final data storage (except counts) since fractional portion of values is lost. UINT2 Unsigned Integer/ 2 byte Final Data Storage Use to store positive count data +65535. Use to store port or flag status. See CRBASIC EXAMPLE. Load Binary Information into a Variable (p. 119). When FLOATS convert to UINT2 at final data storage, values outside the range 065535 yield unusable data. NAN converts to 65535. UINT4 Unsigned Integer/ 4 byte Final Data Storage Use to store positive count data +4294967295. Other uses include storage of long ID numbers (such as are read from a bar reader), serial numbers, or address. May also be required for use in some Modbus devices. BOOLEAN Signed Integer / 4 byte Final Data Storage DIM & PUBLIC variables Use to store TRUE of FALSE states, such as with flags and control ports. To save memory, consider using UINT2 or BOOL8. 0, -1 0 to 4294967295 0 to 65535 Final Data Storage IEEE Standard 754 1.4 x 10
-45

X.XXX XX.XX XXX.X XXXX.


38

DIM & PUBLIC variables

IEEE Standard 754

1.4 x 10

-45

to 3.4 x 10

to 3.4 x 10

38

-2,147,483,648 to +2,147,483,647

125

Section 9. Programming

TABLE 27. Data Types


Name / Code BOOL8 Description / Word Size Integer / 1 byte Where Used Final Data Storage Notes 8 bits (0 or 1) of information. Uses less space than 32-bit BOOLEAN. Holding the same information in BOOLEAN will require 256 bits. See SECTION. Bool8 Data Type (p. 289). Divided up as 4 bytes of seconds since 1990 and 4 bytes of nanoseconds into the second. Used to record and process time data. See SECTION. NSEC Data Type (p. 285). Size is defined by the CR800 operating system. When converting from STRING to FLOAT, numerics at the beginning of a string convert, but conversion stops when a non-numeric is encountered. If the string begins with a nonnumeric, the FLOAT will be NAN. If the string contains multiple numeric values separated by non-numeric characters, SplitStr() can be used to parse out the numeric values. See SECTION. String Operations (p. 300) and SECTION. Serial I/O (p. 262). 0, -1 Resolution / Range

NSEC

Time Stamp / 8 byte

Final Data Storage

seconds since 1990

STRING

ASCII String / word size varies

DIM & PUBLIC variables Final Data Storage

Unless declared otherwise, the minimum string size is 16 bytes or characters. Size above 16 bytes increases in multiples of 4 bytes; e.g., String * 18 allocates 20 bytes (19 usable).

126

Section 9. Programming

CRBASIC EXAMPLE 12. Data Type Declarations


'Float Variable Examples Public Z Public X As Float 'Long Variable Example Public CR800Time As Long Public PosCounter As Long Public PosNegCounter As Long Boolean Variable Examples Public Switches(8) As Boolean Public FLAGS(16) As Boolean 'String Variable Example Public FirstName As String * 16 'allows a string up to 16 characters long DataTable(TableName,True,-1) 'FP2 Data Storage Example Sample(1,Z,FP2) 'IEEE4 / Float Data Storage Example Sample(1,X,IEEE4) 'UINT2 Data Storage Example Sample(1,PosCounter,UINT2) 'LONG Data Storage Example Sample(1,PosNegCounter,Long) 'STRING Data Storage Example Sample(1,FirstName,String) 'BOOLEAN Data Storage Example Sample(8,Switches(),Boolean) 'BOOL8 Data Storage Example Sample(2,FLAGS(),Bool8) 'NSEC Data Storage Example Sample(1,CR800Time,Nsec) EndTable

9.5.1.4

Flags
Flags are a useful program control tool. While any variable of any data type can be used as a flag, using Boolean variables, especially variables named "Flag", works best. CRBASIC EXAMPLE. Flag Declaration and Use (p. 127) shows an example using flags to change the word in string variables.

127

Section 9. Programming

CRBASIC EXAMPLE 13. Flag Declaration and Use


Public Flag(2) As Boolean Public FlagReport(2) As String BeginProg Scan(1,Sec,0,0) If Flag(1) = True Then FlagReport(1) = "High" Else FlagReport(1) = "Low" EndIf If Flag(2) = True Then FlagReport(2) = "High" Else FlagReport(2) = "Low" EndIf NextScan EndProg

9.5.1.5

Variable Initialization
By default, variables are set equal to zero at the time the datalogger program compiles. Variables can be initialized to non-zero values in the declaration. Examples of syntax are shown in CRBASIC EXAMPLE. Initializing Variables (p. 128).

CRBASIC EXAMPLE 14. Initializing Variables


Public aaa As Long = 1 Public bbb(2) As String *20 = {"String_1", "String_2"} Public ccc As Boolean = True Initialize variable ddd elements 1,1 1,2 1,3 & 2,1. Elements (2,2) and (2,3) default to zero. Dim ddd(2,3)= {1.1, 1.2, 1.3, 2.1} Initialize variable eee Dim eee = 1.5

9.5.1.6

Local Variables
Local variables declared as Dim variables in subroutines (Sub()) and functions (Function()) can be referenced only within the subroutine or function. These variable names can be identical to globally declared variables and variables declared locally in other subroutines and functions. This feature allows creation of a CRBASIC library of reusable functions and subroutines that will not cause variable name conflicts. When referenced inside the subroutine or function, only the local variables are referenced. If a program with local Dim variables declared attempts to use them globally, compile error undeclared variable will occur.

128

Section 9. Programming To display (make Public") locally defined variables where making them Public would lead to a name conflict with other Public variables, create a data table to which the local variables are sampled, then display those sampled data. When passing the contents of a global variable to a local variable, or local to global, declare passing / receiving pairs with the same data types and string lengths (if strings).

9.5.2

Constants
CRBASIC EXAMPLE. Using the Const Declaration (p. 129) shows use of the constant declaration. A constant can be declared at the beginning of a program to assign an alphanumeric name to be used in place of a value so the program can refer to the name rather than the value itself. Using a constant in place of a value can make the program easier to read and modify, and more secure against unintended changes. If declared using ConstTable / EndConstTable, constants can be changed while the program is running by using the optional keyboard display menu (Configure, Settings | Constant Table) or the C command in a terminal emulator (see SECTION. Troubleshooting -- Terminal Emulator (p. 411)). Note Using all uppercase for constant names may make them easier to recognize.

CRBASIC EXAMPLE 15. Using the Const Declaration


Public PTempC, PTempF Const CtoF_Mult = 1.8 Const CtoF_Offset = 32 BeginProg Scan(1,Sec,0,0) PanelTemp(PTempC,250) PTempF = PTempC * CtoF_Mult + CtoF_Offset NextScan EndProg

9.5.2.1

Predefined Constants
Several words are reserved for use by CRBASIC. These words cannot be used as variable or table names in a program. Predefined constants include some instruction names, as well as valid alphanumeric names for instruction parameters. In general, instruction names should not be used as variable, constant, or table names in a datalogger program, even if they are not specifically listed as a predefined constant. If a predefined constant, such as "SubScan" is used as a variable in a program, an error similar to the following may be, but is not always, displayed at CRBASIC pre-compile.
Compile Failed! line 8: SubScan is already is use as a predefined CONST.

TABLE. Predefined Constants and Reserved Words (p. 130) lists predefined constants.

129

Section 9. Programming

TABLE 28. Predefined Constants and Reserved Words


_50hz AutoRange CAO1 Com2 ComME ComSDC7 CR5000 DO hr IX2 LONG mv1000C mv2_5c mv200cR mv250 mv25c mv5000 mv5000R mv50cR mvX10500 SCAN SUB TypeB TypeN UINT2 v2 v60 VX2 EX3 _60hz AutoRangec CAO2 Com3 ComRS232 ComSDC8 CR800 EVENT FALSE IEEE4 IX3 min mv1000cR mv20 mv200R mv2500 mv50 mv5000c mv500c mv50R mvX1500 sec SUBSCAN TypeE TypeR Until v20 VX1 VX3 Auto BOOL8 Case Com310 ComSDC10 CR1000 CR9000X FLOAT If IX4 msec mv1000R mv200 mv20c mv2500c mv500 mv5000C mv50c mv7_5 NSEC Select TABLE TypeJ TypeS usec v2c EX1 vX105 VX4 Autoc BOOLEAN Com1 Com4 ComSDC11 CR3000 day FOR IX1 LoggerType mv1000 mv2_5 mv200c mv25 mv250c mv5000 mv5000cR mv50c mv7_5c PROG STRING TRUE TypeK TypeT v10 v50 vX15 EX2 While

9.5.3

Alias and Unit Declarations


A variable can be assigned a second name, or alias, by which it can be called throughout the program. Aliasing is particularly useful when using arrays. Arrays are powerful features in complex programs, but place the same appellation on a number of variables. The use of an alias allows the power of the array to be used with the clarity of unique names. The original name can be used interchangeably with the alias name as a Public or Dim variable in the body of the program. However, once the value is stored into a final storage table, the fieldname (derived from the alias) that is system created for the table must be used when accessing final storage data.

130

Section 9. Programming Each variable can be assigned units. Units are not used elsewhere in programming, but add meaning to resultant data table headers. One use of Alias and Units declarations is to reference a declared string constant as an aid to foreign language support. CRBASIC EXAMPLE. Foreign Language Support (p. 131) shows the use of Alias and Units declarations in building words comprised of non-English characters (see TABLE. ASCII / ANSI Equivalents (p. 263)).

CRBASIC EXAMPLE 16. Foreign Language Support


Declare a constant to concatenate six non-English characters Const PTempUnits = CHR(HexToDec ("C9"))+ CHR(HexToDec ("E3"))+ CHR(HexToDec("CA")) + CHR(HexToDec ("CF")) + CHR(HexToDec("B6")) + CHR(HexToDec ("C8")) Declare a constant to concatenate four non-English characters Const PTempAlias = CHR(HexToDec ("CE"))+ CHR(HexToDec ("C2")) + CHR(HexToDec("B6")) + CHR(HexToDec ("C8")) Declare as Alias and Units non-English words concatenated above Alias PTemp = PTempAlias Units PTemp = PTempUnits

9.6

Declared Sequences
Declaration sequences include DataTable / EndTable and Sub / EndSub. Certain sequences that may be incidental to a specific application also need to be declared. These include ShutDown / ShutdownEnd, DialSequence / EndDialSequence, ModemHangup / EndModemHangup, and WebPageBegin / WebPageEnd sequences. Declaration sequences can be located: 1. prior to BeginProg 2. after EndSequence or an infinite Scan / NextScan and before EndProg or SlowSequence 3. immediately following SlowSequence SlowSequence code starts executing after any declaration sequence. Only declaration sequences can occur after EndSequence and before SlowSequence or EndProg.

9.6.1

Data Tables
Data are stored in tables as directed by the CRBASIC program. A data table is created by a series of CRBASIC instructions entered after variable declarations but before the BeginProg instruction. These instructions include:
DataTable () Output Trigger Condition(s) Output Processing Instructions EndTable

131

Section 9. Programming A data table is essentially a file that resides in CR800 memory. The file is written to each time data are directed to that file. The trigger that initiates data storage is tripped either by the CR800's clock, or by an event, such as a high temperature. Up to 30 data tables can be created by the program. The data tables may store individual measurements, individual calculated values, or summary data such as averages, maxima, or minima to data tables. Each data table is associated with overhead information that becomes part of the ASCII file header (first few lines of the file) when data are downloaded to a PC. Overhead information includes: table format datalogger type and operating system version, name of the CRBASIC program running in the datalogger name of the data table (limited to 20 characters) alphanumeric field names to attach at the head of data columns This information is referred to as "table definitions." TABLE. Typical Data Table (p. 133) shows a data file as it appears after the associated data table has been downloaded from a CR800 programmed with the code in CRBASIC EXAMPLE. Definition and Use of a Data Table (p. 134). The data file consists of five or more lines. Each line consists of one or more fields. The first four lines constitute the file header. Subsequent lines contain data. Note Discrete data files (TOB1, TOA5, XML) can also be written to CR800 CPU memory using the TableFile () instruction. The first header line is the Environment Line. It consists of eight fields, listed in TABLE. TOA5 Environment Line (p. 132). TABLE 29. TOA5 Environment Line
Field 1 2 3 4 5 6 7 8 Description file type (always TOA5) station name datalogger model datalogger serial number datalogger OS version datalogger program name datalogger program signature table name No Change DevConfig or Program No Change No Change Send New OS Send New Program Send / Change Program Change Program Changed via

The second header line reports field names. This line consists of a set of comma-delimited strings that identify the name of individual elds as given in the datalogger program. If the eld is an element of an array, the name will be followed by a comma separated list of subscripts within parentheses that

132

Section 9. Programming identifies the array index. For example, a variable named values that is declared as a two by two array in the datalogger program will be represented by four eld names: values(1,1), values(1,2), values(2,1), and values(2,2). Scalar variables will not have array subscripts. There will be one value on this line for each scalar value dened by the table. Default fieldnames are a combination of the variable names (or alias) from which data are derived and a three letter suffix. The suffix is an abbreviation of the data process that output the data to storage. For example, Avg is the abbreviation for average. If the default fieldnames are not acceptable to the programmer, FieldNames () instruction can be used to customized fieldnames. TIMESTAMP, RECORD, Batt_Volt_Avg, PTemp_C_Avg, TempC_Avg(1), and TempC_Avg(2) are default fieldnames in TABLE. Typical Data Table (p. 133).

TABLE 30. Typical Data Table


TOA5 TIMESTAMP TS CR800 RECORD RN CR800 BattVolt_Avg Volts Avg 7/11/2007 16:10 7/11/2007 16:20 7/11/2007 16:30 7/11/2007 16:40 7/11/2007 16:50 7/11/2007 17:00 7/11/2007 17:10 0 1 2 3 4 5 6 13.18 13.18 13.19 13.19 13.19 13.19 13.18 1048 PTempC_Avg Deg C Avg 23.5 23.5 23.51 23.54 23.55 23.55 23.55 CR800.Std.13.06 TempC_Avg(1) Deg C Avg 23.54 23.54 23.05 23.61 23.09 23.05 23.06 CPU:Data.CR8 TempC_Avg(2) Deg C Avg 25.12 25.51 25.73 25.95 26.05 26.05 25.04 35723 OneMin

The third header line identifies engineering units for that field of data. These units are declared in the Define Units section of the CRBASIC program, as shown in CRBASIC EXAMPLE. Definition and Use of a Data Table (p. 134). Units are strictly for documentation. The CR800 does not make use of declared units, nor does it check their accuracy. The fourth line of the header reports the data process used to produce the field of data, e.g., avg (average), his (historgram0, etc. Subsequent lines are observed data and associated record keeping. The first field being a time stamp, the second the record (data line) number. Read More! See TABLE. Abbreviations of Names of Data Processes (p. 157) for a list of default field names. As shown in CRBASIC EXAMPLE. Definition and Use of a Data Table (p. 134), data table declaration begins with the DataTable () instruction and ends with the EndTable () instruction. Between DataTable () and EndTable () are instructions that define what data to store and under what conditions data are stored. A data table must be called by the CRBASIC program for data storage processing to occur. Typically, data tables are called by the CallTable () instruction once each Scan.

133

Section 9. Programming

CRBASIC EXAMPLE 17. Definition and Use of a Data Table


'Declare Variables Public Batt_Volt Public PTemp_C Public Temp_C(2) 'Define Units Units Batt_Volt=Volts Units PTemp_C=Deg C Units Temp_C(2)=Deg C 'Define Data Tables DataTable(OneMin,True,-1) DataInterval(0,1,Min,10) Average(1,Batt_Volt,FP2,False) Average(1,PTemp_C,FP2,False) Average(2,Temp_C(1),FP2,False) EndTable DataTable(Table1,True,-1) DataInterval(0,1440,Min,0) Minimum(1,Batt_Volt,FP2,False,False) EndTable 'Main Program BeginProg Scan(5,Sec,1,0) 'Default Datalogger Battery Voltage measurement Batt_Volt: Battery(Batt_Volt) 'Wiring Panel Temperature measurement PTemp_C: PanelTemp(PTemp_C,_60Hz) 'Type T (copper-constantan) Thermocouple measurements Temp_C: TCDiff(Temp_C(),2,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1,0) 'Call Data Tables and Store Data CallTable(OneMin) CallTable(Table1) NextScan EndProg

9.6.1.1

DataTable () and EndTable () Instructions


The DataTable instruction has three parameters: a user-specified alphanumeric name for the table (e.g., "OneMin"), a trigger condition (e.g., "True"), and the size to make the table in RAM (e.g., auto allocated). Name-The table name can be any combination of numbers and letters up to 20 characters in length. The first character must be a letter. Note -- While other characters may pass the precompiler and compiler, runtime errors may occur if these naming rules are not adhered to.

134

Section 9. Programming TrigVar-Controls whether or not data records are written to storage. Data records are written to storage if TrigVar is true and if other conditions, such as DataInterval (), are met. Default setting is -1 (True). TrigVar may be a variable, expression, or constant. TrigVar does not control intermediate processing. Intermediate processing is controlled by the disable variable, DisableVar, which is a parameter in all output processing instructions (see SECTION. Output Processing Instructions (p. 137)). Read More! SECTION. TrigVar and DisableVar - Controlling Data Output and Output Processing (p. 283) discusses the use of TrigVar and DisableVar in special applications. Size-Table size is the number of records to store in a table before new data begins overwriting old data. If "10" is entered, 10 records are stored in the table -- the eleventh record will overwrite the first record. If "-1" is entered, memory for the table is automatically allocated at the time the program compiles. Auto allocation is preferred in most applications since the CR800 sizes all tables such that they fill (and begin overwriting the oldest data) at about the same time. Approximately 2K bytes of extra data table space is allocated to minimize the possibility of new data over writing the oldest data in ring memory when support software collects the oldest data at the same time new data are written. These extra records are not reported in the Status Table and are not reported to the support software and so are not collected. CRBASIC EXAMPLE. Definition and Use of a Data Table (p. 134) creates a data table named "OneMin", stores data once a minute as defined by DataInterval (), and retains the most recent records in SRAM, up to the automatically allocated memory limit. DataRecordSize entries in the status table report allocated memory in terms of number of records the tables hold.

9.6.1.2

DataInterval () Instruction
DataInterval () instructs the CR800 to both write data records at the specified interval and to recognize when a record has been skipped. The interval is independent of the Scan () / NextScan interval; however, it must be a multiple of the Scan () / NextScan interval. Sometimes, program logic prevents a record from being written. If a record is not written, the CR800 recognizes the omission as a "lapse" and increments a SkippedRecord counter in the status table. Lapses waste significant memory in the data table and may cause the data table to fill sooner than expected. DataInterval () parameter "Lapses" controls the CR800's response to a lapse. TABLE. DataInterval () Lapse Parameter Options (p. 136) lists Lapses parameter options and concomitant functions. Note Program logic that results in lapses includes scan intervals inadequate to the length of the program (skipped scans), the use of DataInterval() in event driven data tables, logic that directs program execution around the CallTable() instruction, or temporary loss of power. A data table consists of successive 1 kilobyte data frames. Each data frame contains a time stamp, frame number, and one or more records. By default, a

135

Section 9. Programming time stamp and record number are not stored with each record. Rather, the data extraction software uses the frame time stamp and frame number to time stamp and number each record when it is stored to computer memory. This technique saves telecommunications bandwidth and 16 bytes of CR800 memory per record. However, when a record is skipped, or several records are skipped contiguously, a lapse occurs, the SkippedRecords status entry is incremented, and a 16 byte sub-header with time stamp and record number is inserted into the data frame before the next record is written. Consequently, programs that lapse frequently waste significant memory. If the Lapses parameter is set to 20, the memory allocated for the data table is increased by enough memory to accommodate 20 sub-headers (320 bytes). If more than 20 lapses occur, the actual number of records that are written to the data table before the oldest is overwritten (ring memory) may be less than what was specified in the DataTable (). If a program is planned to experience multiple lapses, and if telecommunications bandwidth is not a consideration, the Lapses parameter should be set to zero to ensure the CR800 allocates adequate memory for each data table. TABLE 31. DataInterval() Lapse Parameter Options
DataInterval() Lapse Parameter Effect If table record number is fixed, X data frames (1 kbyte per data frame) added to data table if memory is available. If record number is auto-allocated, no memory is added to table. Timestamp and record number are always stored with each record. When lapse occurs, no new data frame created. Record timestamps calculated at data extraction may be in error.

X>0

X=0 X<0

9.6.1.2.1

Scan Time and System Time In some applications, system time (see GLOSSARY. System Time (p. 429)) is desired, rather than scan time (see GLOSSARY. Scan Time (p. 427)). To get the system time, the CallTable instruction must be run outside the Scan loop. See SECTION. Timestamping (p. 43).

9.6.1.3

OpenInterval () Instruction
By default, the CR800 uses closed intervals. Data output to a data table based on DataInterval() include measurements only from the current interval. Intermediate memory that contains measurements is cleared at the top of the next interval regardless of whether a record was written to the data table. Typically, time series data (averages, totals, maxima, etc.) that are output to a data table based on an interval only include measurements from the current interval. After each output interval, the memory that contains the measurements for the time series data is cleared. If an output interval is missed (because all criteria are not met for output to occur), the memory is cleared at the top of the

136

Section 9. Programming next interval. If the OpenInterval instruction is contained in the DataTable() declaration, the memory is not cleared. This results in all measurements being included in the time series data since the last time data was stored (even though the data may span multiple output intervals). Note Array based datalogger, such as CR10X and CR23X, use open intervals exclusively.

9.6.1.4

Output Processing Instructions


Final data storage processing ("output processing") instructions determine what data are stored in the data table. When a data table is called in the CRBASIC program, final data storage processing instructions process variables holding current inputs or calculations. If trigger conditions are true, e.g. the required interval has expired, processed values are stored ("output") in the data table. In CRBASIC EXAMPLE. Definition and Use of a Data Table (p. 134), three averages are stored. Consider the Average() instruction as an example of output processing instructions. Average() stores the average of a variable over the final data storage output interval. Its parameters are: Reps-number of elements in the variable array for which to calculate averages. Reps is set to 1 to average PTemp, and set to 2 to average 2 thermocouple temperatures, both of which reside in the variable array "Temp_C". Source-variable array to average. Variable arrays PTemp_C (an array of 1) and Temp_C() (an array of 2) are used. DataType-Data type for the stored average (the example uses data type FP2, which is Campbell Scientific's 2-byte floating point data type). Read More! See SECTION. Data Types (p. 124) for more information on available data types. DisableVar-controls whether a measurement or value is included in an output processing function. A measurement or value is not included if DisableVar is true ( 0). For example, if the disable variable in an Average() instruction is true, the current value will not be included in the average. CRBASIC EXAMPLE. Use of the Disable Variable (p. 138) and CRBASIC EXAMPLE. Using NAN to Filter Data (p. 402) show how DisableVar can be used to exclude values from an averaging process. Whether DisableVar is True or False is controlled by Flag1. When Flag1 is high, or True, DisableVar is True. When False, DisableVar is false. When "False" is entered for the disable variable, all readings are included in the average. The average of variable "Oscillator" does not include samples occurring when Flag 1 is high (true), which results in an average of 2; when Flag 1 is low or false (all samples used), the average is 1.5. Read More! SECTION. TrigVar and DisableVar - Controlling Data Output and Output Processing (p. 283) and SECTION. Measurements and NAN (p. 399) discuss the use of TrigVar and DisableVar in special applications.

137

Section 9. Programming

Read More! For a complete list of output processing instructions, see SECTION. Final Data Storage Output Processing (p. 164).

CRBASIC EXAMPLE 18. Use of the Disable Variable


'Declare Variables and Units Public Oscillator As Long Public Flag(1) As Boolean Public DisableVar As Boolean 'Define Data Tables DataTable(OscAvgData,True,-1) DataInterval(0,1,Min,10) Average(1,Oscillator,FP2,DisableVar) EndTable 'Main Program BeginProg Scan(1,Sec,1,0) 'Reset and Increment Counter If Oscillator = 2 Then Oscillator = 0 Oscillator = Oscillator + 1 'Process and Control If Oscillator = 1 If Flag(1) = True Then DisableVar = True End If Else DisableVar = False EndIf 'Call Data Tables and Store Data CallTable(OscAvgData) NextScan EndProg

9.6.1.5

Numbers of Records
The exact number of records that can be stored in a data table is governed by a complex set of rules, the summary of which can be found in APPENDIX. Numbers of Records in Data Tables (p. 481).

9.6.2

Subroutines
Read More! See SECTION. Subroutines (p. 247) for more information on programming with subroutines. Subroutines allow a section of code to be called by multiple processes in the main body of a program. Subroutines are defined before the main program body of a program.

138

Section 9. Programming

Note A particular subroutine can be called by multiple program sequences simultaneously. To preserve measurement and processing integrity, the CR800 queues calls on the subroutine, allowing only one call to be processed at a time in the order calls are received. This may cause unexpected pauses in the conflicting program sequences.

9.6.3

Incidental Sequences
Data table sequences are essential features of nearly all programs. Although used less frequently, subroutine sequences also have a general purpose nature. The following incidental sequences, however, are used only in applications to which they specifically apply.

9.6.3.1

Shut Down Sequences


The ShutDownBegin / ShutDownEnd instructions are used to define code that will execute whenever the currently running program is shutdown by prescribed means. More information is available in CRBASIC Help.

9.6.3.2

Dial Sequences
The DialSequence / EndDialSequence instructions are used to define the code necessary to route packets to a PakBus device. More information is available in CRBASIC Help.

9.6.3.3

Modem Hangup Sequences


The ModemHangup / EndModemHangup instructions are used to enclose code that should be run when a COM port hangs up communication. More information is available in CRBASIC Help.

9.6.3.4

Web Page Sequences


The WebPageBegin / WebPageEnd instructions are used to declare a web page that is displayed when a request for the defined HTML page comes from an external source. More information is available in CRBASIC Help.

9.7

Execution and Task Priority


Execution of program instructions is prioritized among three tasks: measurement / control, SDM, and processing. Processes of each task are listed in TABLE. Task Processes (p. 140). The measurement / control task is a rigidly timed sequence that measures sensors and outputs control signals for other devices. The SDM task manages measurement and control of SDM devices (Campbell Scientific's Synchronous Devices for Measurement).

139

Section 9. Programming The processing task converts analog and digital measurements to numbers represented by engineering units, performs calculations, stores data, makes decisions to actuate controls, and performs serial I/O communication. The CR800 executes these tasks in either pipeline or sequential mode. When a program is compiled, the CR800 evaluates the program and determines which mode to use. Mode information is included in a message returned by the datalogger, which is displayed by the support software. The CRBASIC Editor precompiler returns a similar message. Note A program can be forced to run in sequential or pipeline modes by placing the SequentialMode or PipelineMode instruction in the declarations section of the program. Some tasks in a program may have higher priorities than other tasks. Measurement tasks generally take precedence over all others. Priority of tasks is different for pipeline mode and sequential mode. TABLE 32. Task Processes
Measurement Task SDM Task Processing Task

Analog Measurements Excitation Read Pulse Counters Read Control Ports (GetPort) Set Control Ports (SetPort) VibratingWire PeriodAvg CS616 Calibrate

All SDM instructions, except SDMSI04 and SDM1016

Processing Output Serial I/O SDMSIO4 SDMIO16 ReadIO WriteIO Expression evaluation and variable setting in measurement and SDM instructions

9.7.1

Pipeline Mode
Pipeline Mode handles measurement, most SDM, and processing tasks separately, and possibly simultaneously. Measurements are scheduled to execute at exact times and with the highest priority, resulting in more precise timing of measurements, and usually more efficient processing and power consumption. Pipeline scheduling requires that the program be written such that measurements are executed every scan. Because multiple tasks are taking place at the same time, the sequence in which the instructions are executed may not be in the order in which they appear in the program. Therefore, conditional measurements

140

Section 9. Programming are not allowed in pipeline mode. Because of the precise execution of measurement instructions, processing in the current scan (including update of public variables and data storage) is delayed until all measurements are complete. Some processing, such as transferring variables to control instructions, such as PortSet () and ExciteV (), may not be completed until the next scan. When a condition is true for a task to start, it is put in a queue. Because all tasks are given the same priority, the task is put at the back of the queue. Every 10 msec (or faster if a new task is triggered) the task currently running is paused and put at the back of the queue, and the next task in the queue begins running. In this way, all tasks are given equal processing time by the datalogger. All tasks are given the same general priority. However, when a conflict arises between tasks, program execution adheres to the priority schedule in TABLE. Pipeline Mode Task Priorities (p. 141). TABLE 33. Pipeline Mode Task Priorities
1. Measurements in main program 2. Background calibration 3. Measurements in slow sequences 4. Processing tasks

9.7.2

Sequential Mode
Sequential mode executes instructions in the sequence in which they are written in the program. Sequential mode may be slower than pipeline mode since it executes only one line of code at a time. After a measurement is made, the result is converted to a value determined by processing included in the measurement instruction, and then execution proceeds to the next instruction. This line-byline execution allows writing conditional measurements into the program. Note The exact time at which measurements are made in sequential mode may vary if other measurements or processing are made conditionally, if there is heavy communications activity, or if other interrupts such as engaging CS mass storage media (USB: drive), occur. When running in sequential mode, the datalogger uses a queuing system for processing tasks similar to the one used in pipeline mode. The main difference when running a program in sequential mode is that there is no prescheduled timing of measurements; instead, all instructions are executed in their programmed order. A priority scheme is used to avoid conflicting use of measurement hardware. The main scan has the highest priority and prevents other sequences from using measurement hardware until the main scan, including processing, is complete. Other tasks, such as processing from other sequences and communications, can occur while the main sequence is running. Once the main scan has finished, other sequences have access to measurement hardware with the order of priority being the background calibration sequence followed by the slow sequences in the order they are declared in the program.

141

Section 9. Programming

Note Measurement tasks have priority over other tasks such as processing and communication to allow accurate timing needed within most measurement instructions.

9.8

Execution Timing
Timing of program execution is regulated by timing instructions listed in TABLE. Program Timing Instructions (p. 142). TABLE 34. Program Timing Instructions
Instructions Scan() / NextScan General Guidelines Use in most programs. Begins / ends the main scan. Syntax Form BeginProg Scan() . . . NextScan EndProg BeginProg Scan() . . . NextScan SlowSequence Scan() . . . NextScan EndSequence EndProg BeginProg Scan() . . . SubScan() . . . NextSubScan NextScan EndProg

SlowSequence / EndSequence

Use when measurements or processing must run at slower frequencies from that of the main program.

SubScan / NextSubScan

Use when measurements or processing must run at faster frequencies from that of the main program.

9.8.1

Scan() / NextScan
Simple CR800 programs are often built entirely within a single Scan() / NextScan structure, with only variable and data table declarations outside the Scan() / NextScan structure. In these simple programs, Scan() / NextScan creates an infinite loop, each periodic pass through the loop being synchronized to the CR800 clock. Scan() parameters allow modification of the period in 10 ms increments. As shown in CRBASIC EXAMPLE. BeginProg / Scan /

142

Section 9. Programming NextScan / EndProg Syntax (p. 143), aside from declarations, the CRBASIC program may be relatively short.

CRBASIC EXAMPLE 19. BeginProg / Scan / NextScan / EndProg Syntax


BeginProg Scan(1,Sec,3,0) PanelTemp(RefTemp, 250) TCDiff(TC(),6,mV2_5C,1,...) CallTable Temp NextScan EndProg

Scan() determines how frequently instructions in the program are executed, as shown in CRBASIC EXAMPLE. Scan Syntax (p. 143):

CRBASIC EXAMPLE 20. Scan Syntax


'Scan(Interval, Units, BufferSize, Count) Scan(1,Sec,3,0) ExitScan

Scan has four parameters: Interval is the interval between scans. Units is the time unit for the interval. Interval is 10 ms <= Interval <= 1 day. BufferSize is the size (number of scans) of a buffer in RAM that holds the raw results of measurements. When running in Pipeline mode, using a buffer allows the processing in the scan to lag behind measurements at times without affecting measurement timing. Use of the CRBASIC Editor default size is normal. Refer to SECTION. SkippedScan (p. 397) for troubleshooting tips. Count is number of scans to make before proceeding to the instruction following NextScan. A count of 0 means to continue looping forever (or until ExitScan). In the example in CRBASIC EXAMPLE. Scan Syntax (p. 143), the scan is 1 second, three scans are buffered, and measurements and data storage continue indefinitely.

9.8.2

SlowSequence / EndSequence
Slow sequences include automatic and user entered sequences. Background calibration is an automatic slow sequence. User entered slow sequences are declared with the SlowSequence instruction and run outside the main program scan. They typically run at a slower rate than the main scan. Up to four slow sequences scans can be defined in a program.

143

Section 9. Programming Instructions in a slow sequence scan are executed when the main scan is not active. When running in pipeline mode, slow sequence measurements are spliced in after measurements in the main program, as time allows. Because of this splicing, measurements in a slow sequence may span across multiple main program scan intervals. When no measurements need to be spliced, the slow sequence scan will run independent of the main scan, so slow sequences with no measurements can run at intervals main scan interval (still in 10 ms increments) without skipping scans. When measurements are spliced, checking for skipped slow scans is done after the first splice is complete rather than immediately after the interval comes true. In sequential mode, all instructions in slow sequences are executed as they occur in the program according to task priority. Background calibration is an automatic slow sequence scan. Read More! SECTION. Self-Calibration (p. 60).

9.8.3

SubScan() / NextSubScan
SubScan() / NextSubScan are used in the control of analog multiplexers (see APPENDIX. Analog Multiplexers (p. 473) for information on available analog multiplexers) or to measure analog inputs at a faster rate than the program scan. SubScans cannot be nested or placed in a SlowSequence. PulseCount or SDM measurement cannot be used within a sub scan.

9.8.4

Scan Priorities in Sequential Mode


Note Measurement tasks have priority over other tasks such as processing and communication to allow accurate timing needed within most measurement instructions. A priority scheme is used in sequential mode to avoid conflicting use of measurement hardware. As illustrated in FIGURE. Sequential Mode Scan Priority Flow Diagrams (p. 146), the main scan sequence has the highest priority. Other sequences, such as slow sequences and calibration scans, must wait to access measurement hardware until the main scan, including measurements and processing, is complete.

9.8.4.1

Main Scans
Execution of the main scan usually occurs quickly, so the processor may be idle much of the time. For example, a weather measurement program may scan once per second, but program execution may only occupy 250 ms, leaving 75% of available scan time unused. The CR800 can make efficient use of this interstitial scan time to optimize program execution and communications control. Unless disabled, or crowded out by a too demanding schedule, self-calibration (see SECTION. Self-Calibration (p. 60)) has priority and uses some interstitial scan time. If self-calibration is crowded out, a warning message is issued by the CRBASIC pre-compiler. Remaining priorities include slow sequence scans in the order they are programmed and digital triggers. Following is a brief

144

Section 9. Programming introduction to the rules and priorities that govern use of interstitial scan time in sequential mode. Rules and priorities governing pipeline mode are somewhat more complex and are not expanded upon here. Permission to proceed with a measurement is granted by the measurement semaphore (p. 428). Main scans with measurements have priority to acquire the semaphore before measurements in a calibration or slow sequence scan. The semaphore is taken by the main scan at its beginning if there are measurements included in the scan. The semaphore is released only after the last instruction in the main scan is executed.

9.8.4.2

Slow Sequence Scans


Slow sequence scans begin after a SlowSequence instruction. Slow sequence scans start processing tasks prior to a measurement but stop to wait when a measurement semaphore is needed. Slow sequences release the semaphore (p. 428) after complete execution of each measurement instruction to allow the main scan to acquire the semaphore when it needs to start. If the measurement semaphore is set by a slow sequence scan and the beginning of a main scan gets to the top of the queue, the main scan will not start until it can get the semaphore; it waits for the slow sequence to release the semaphore. A slow sequence scan does not hold the semaphore for the whole of its scan. It releases the semaphore after each use of the hardware.

9.8.4.3

WaitDigTrig Scans
Main scans and slow sequences usually trigger at intervals defined by the Scan () instruction. Some applications, however, require the main or slow sequence scan to be started by an external digital trigger, i.e. a 5V pulse on a control port. The WaitDigTrig () instruction activates a program when an external trigger is detected. WaitDigTrig() gives priority to begin a scan, but the scan will execute and acquire the semaphore (p. 428) according to the rules stated in Main Scans (p. 144) and Slow Sequence Scans (p. 145). Any processing will be time sliced with processing from other sequences. Every time the program encounters WaitDigTrig (), it will stop and wait to be triggered. Note WaitDigTrig allows one CR800 to control another CR800.

145

Section 9. Programming

FIGURE 63. Sequential Mode Scan Priority Flow Diagrams

9.9

Instructions
In addition to BASIC syntax, additional instructions are included in CRBASIC to facilitate measurements and store data. SECTION. CRBASIC Programming Instructions (p. 161) contains a comprehensive list of these instructions.

9.9.1

Measurement and Data Storage Processing


CRBASIC instructions have been created for making measurements and storing data. Measurement instructions set up CR800 hardware to make measurements and store results in variables. Data storage instructions process measurements into averages, maxima, minima, standard deviation, FFT, etc.

146

Section 9. Programming Each instruction is a keyword followed by a series of informational parameters needed to complete the procedure. For example, the instruction for measuring CR800 panel temperature is:
PanelTemp (Dest, Integ)

"PanelTemp" is the keyword. Two parameters follow: Dest, a destination variable name in which the temperature value is stored; and Integ, a length of time to integrate the measurement. To place the panel temperature measurement in the variable RefTemp, using a 250 microsecond integration time, the syntax is as shown in CRBASIC EXAMPLE. Measurement Instruction Syntax (p. 147).

CRBASIC EXAMPLE 21. Measurement Instruction Syntax


PanelTemp(RefTemp, 250)

9.9.2

Parameter Types
Many instructions have parameters that allow different types of inputs. Common input type prompts are listed below. Allowed input types are specifically identified in the description of each instruction in CRBASIC Editor Help. Constant, or Expression that evaluates as a constant Variable Variable or Array Constant, Variable, or Expression Constant, Variable, Array, or Expression Name Name or list of Names Variable, or Expression Variable, Array, or Expression

9.9.3

Names in Parameters
TABLE. Rules for Names (p. 147) lists the maximum length and allowed characters for the names for variables, arrays, constants, etc. The CRBASIC Editor pre-compiler will identify names that are too long or improperly formatted.

147

Section 9. Programming

TABLE 35. Rules for Names


Name Category Variable or Array Constant Units Alias Station Name Data Table Name Field name Field Name Description Maximum Length (number of characters) 39 38 38 39 64 20 39 64 Allowed characters Letters A-Z, upper or lower case, underscore "_", and numbers 0-9. The name must start with a letter. CRBASIC is not case sensitive.

*Variables/Constants, Units, Alias, StationName, FieldNames, DataTable names, and file names can share identical names, i.e, once a name is used, it is reserved only in that category.

9.9.4

Expressions in Parameters
Read More! See SECTION. Expressions (p. 149) for more information on expressions. Many parameters allow the entry of expressions. If an expression is a comparison, it will return -1 if the comparison is true and 0 if it is false (SECTION. Logical Expressions (p. 153)). CRBASIC EXAMPLE. Use of Expressions in Parameters (p. 148) shows an example of the use of expressions in parameters in the DataTable instruction, where the trigger condition is entered as an expression. Suppose the variable TC is a thermocouple temperature:

CRBASIC EXAMPLE 22. Use of Expressions in Parameters


'DataTable(Name, TrigVar, Size) DataTable(Temp, TC > 100, 5000)

When the trigger is "TC > 100", a TC temperature > 100 will set the trigger to true and data is stored.

9.9.5

Arrays of Multipliers and Offsets


A single measurement instruction can measure a series of sensors and apply individual calibration factors to each sensor as shown in CRBASIC EXAMPLE. Use of Arrays as Multipliers and Offsets (p. 149). Storing calibration factors in variable arrays, and placing the array variables in the multiplier and offset parameters of the measurement instruction, makes this possible. The measurement instruction uses repetitions to implement this feature by stepping through the multiplier and offset arrays as it steps through the measurement

148

Section 9. Programming input channels. If the multiplier and offset are not arrays, the same multiplier and offset are used for each repetition. Read More! More information is available in CRBASIC Editor Help topic "Multipliers and Offsets with Repetitions".

CRBASIC EXAMPLE 23. Use of Arrays as Multipliers and Offsets


Public Pressure(3), Mult(3), Offset(3) DataTable(AvgPress,1,-1) DataInterval(0,60,Min,10) Average(3,Pressure(),IEEE4,0) EndTable BeginProg 'Calibration Factors: Mult(1)=0.123 : Offset(1)=0.23 Mult(2)=0.115 : Offset(2)=0.234 Mult(3)=0.114 : Offset(3)=0.224 Scan(1,Sec,10,0) 'VoltSe instruction using array of multipliers and offsets: VoltSe(Pressure(),3,mV5000,1,True,0,_60Hz,Mult(),Offset()) CallTable AvgPress NextScan EndProg

9.10 Expressions
An expression is a series of words, operators, or numbers that produce a value or result. Expressions are evaluated from left to right, with deference to precedence rules. The result of each stage of the evaluation is of type Long (integer) if the variables are of type Long (constants are integers) and the functions give integer results, such as occurs with INTDV (). If part of the equation has a floating point variable or constant, or a function that results in a floating point, the rest of the expression is evaluated using floating point math, even if the final function is to convert the result to an integer; e.g. INT ((rtYear1993)*.25). This is a critical feature to consider when 1) trying to use Long integer math to retain numerical resolution beyond the limit of floating point variables (24 bits), or 2) if the result is to be tested for equivalence against another value (see SECTION. Floating Point Arithmetic (p. 150) for limits of floating point precision). Two types of expressions, mathematical and programming, are used in CRBASIC. A useful property of expressions in CRBASIC is that they are equivalent to and often interchangeable with their results. Consider the expressions:
x = (z * 1.8) + 32 '(a mathematical expression) If x = 23 then y = 5 '(programming expression)

149

Section 9. Programming

The variable x can be omitted and the expressions combined and written as:
If (z * 1.8 + 32 = 23) then y = 5

Replacing the result with the expression should be done judiciously and with the realization that doing so may make program code more difficult to decipher.

9.10.1

Floating Point Arithmetic


Variables and calculations are performed internally in single precision IEEE4 byte floating point with some operations calculated in double precision. Note Single precision float has 24 bits of mantissa. Double precision has a 32bit extension of the mantissa, resulting in 56 bits of precision. Instructions that use double precision are AddPrecise, Average, AvgRun, AvgSpa, CovSpa, MovePrecise, RMSSpa, StdDev, StdDevSpa, and Totalize. Floating point arithmetic is common in many electronic computational systems, but it has pitfalls high-level programmers should be aware of. Several sources discuss floating point arithmetic thoroughly. One readily available source is the topic "Floating Point" at Wikipedia.org. In summary, CR800 programmers should consider at least the following: Floating point numbers do not perfectly mimic real numbers. Floating point arithmetic does not perfectly mimic true arithmetic. Avoid use of equality in conditional statements. Use >= and <= instead. For example, use "If X >= Y, then do" rather than using, "If X = Y, then do". When programming extended cyclical summation of non-integers, use the AddPrecise() instruction. Otherwise, as the size of the sum increases, fractional addends will have ever decreasing effect on the magnitude of the sum, because normal floating point numbers are limited to about 7 digits of resolution.

9.10.2

Mathematical Operations
Mathematical operations are written out much as they are algebraically. For example, to convert Celsius temperature to Fahrenheit, the syntax is:
TempF = TempC * 1.8 + 32

Read More! To save code space while filling an array or partial array with the same value, see CRBASIC EXAMPLE. Use of Move () to Conserve Code Space (p. 158). CRBASIC EXAMPLE. Use of Variable Arrays to Conserve Code (p. 158) shows example code to convert twenty temperatures in a variable array from C to F.

150

Section 9. Programming

9.10.3

Expressions with Numeric Data Types


FLOATs, LONGs and Booleans are cross-converted to other data types, such as FP2, by using "=".

9.10.3.1 Boolean from FLOAT or LONG


When a FLOAT or LONG is converted to a Boolean as shown in CRBASIC EXAMPLE. Conversion of FLOAT / LONG to Boolean (p. 151), zero becomes False (0) and non-zero becomes True (-1).

CRBASIC EXAMPLE 24. Conversion of FLOAT / LONG to Boolean


Public Fa AS FLOAT Public Fb AS FLOAT Public L AS LONG Public Ba AS Boolean Public Bb AS Boolean Public Bc AS Boolean BeginProg Fa = 0 Fb = 0.125 L = 126 Ba = Fa Bb = Fb Bc = L EndProg

'This will set Ba = False (0) 'This will Set Bb = True (-1) 'This will Set Bc = True (-1)

9.10.3.2 FLOAT from LONG or Boolean


When a LONG or Boolean is converted to FLOAT, the integer value is loaded into the FLOAT. Booleans are converted to -1 or 0. LONG integers greater than 24 bits (16,777,215; the size of the mantissa for a FLOAT) will lose resolution when converted to FLOAT.

9.10.3.3 LONG from FLOAT or Boolean


Boolean is converted to -1 or 0. When a FLOAT is converted to a LONG, it is truncated. This conversion is the same as the INT function (SECTION. Arithmetic Functions (p. 185)). The conversion is to an integer equal to or less than the value of the float (e.g., 4.6 becomes 4, -4.6 becomes -5). If a FLOAT is greater than the largest allowable LONG (+2,147,483,647), the integer is set to the maximum. If a FLOAT is less than the smallest allowable LONG (-2,147,483,648), the integer is set to the minimum.

151

Section 9. Programming

CRBASIC EXAMPLE 25. Use of Move() to Conserve Code Space


'Reset six counters to zero. Keep array 'filled with the ten most current readings Move(TempC(2),9,TempC(1),9) 'Shift previous nine readings to make room 'for new measurement TCDiff(TempC(1),1,mV2_5C,8,TypeT,PTemp,True,0,_60Hz,1.0,0) 'New measurement Move(counter(1),6,0,1)

9.10.3.4 Integers in Expressions


LONGs are evaluated in expressions as integers when possible. CRBASIC EXAMPLE. Evaluation of Integers (p. 152) illustrates evaluation of integers as LONGs and FLOATs.

CRBASIC EXAMPLE 26. Evaluation of Integers


Public X, I AS Long BeginProg I = 126 X = (I+3) * 3.4 'I+3 is evaluated as an integer, 'then converted to FLOAT before 'it is multiplied by 3.4 EndProg

9.10.3.5 Constants Conversion


Constants are not declared with a data type, so the CR800 assigns the data type as needed. If a constant (either entered as a number or declared with CONST) can be expressed correctly as an integer, the compiler will use the type that is most efficient in each expression. The integer version is used if possible, i.e., if the expression has not yet encountered a float. CRBASIC EXAMPLE. Constants to LONGs or FLOATs (p. 152) lists a programming case wherein a value normally considered an integer (10) is assigned by the CR800 to be As Float.

CRBASIC EXAMPLE 27. Constants to LONGs or FLOATs


Public I AS Long Public A1, A2 CONST ID = 10 BeginProg A1 = A2 + ID I = ID * 5 EndProg

In CRBASIC EXAMPLE. Constants to LONGs or FLOATs (p. 152), I is an integer. A1 and A2 are Floats. The number 5 is loaded As Float to add efficiently with constant ID, which was compiled As Float for the previous expression to avoid an inefficient runtime conversion from integer to float before each floating point addition.

152

Section 9. Programming

9.10.4

Logical Expressions
Measurements can indicate absence or presence of an event. For example, an RH measurement of 100% indicates a condensation event such as fog, rain, or dew. The CR800 can render events into binary form for further processing, i.e., events can either be TRUE, indicating the condition occurred or is occurring, or FALSE, indicating the condition has not yet occurred or is over.

9.10.4.1 True = -1, False = 0


In all cases, the number 0 is translated as FALSE in logical expressions; by extension, any non-zero number is considered "non-FALSE." However, the word TRUE is predefined in the CR800 operating system to only equal -1, so only the number -1 is always translated as TRUE. Consider the expression
If Condition(1) = TRUE Then...

This condition is true only when Condition(1) = -1. If Condition(1) is any other non-zero, the condition will not be found true because the constant True is predefined as -1 in the CR800 system memory. By entering "= TRUE" a literal comparison is done. So, to be absolutely certain a function is true, it must be set to TRUE or -1. Note -- TRUE is -1 so that every bit is set high (-1 is &B11111111 for all 4 bytes). This allows the AND operation to work correctly. The AND operation does an AND boolean function on every bit, so TRUE AND X will be non-zero as long as at least one of the bits in X is non-zero, i.e., as long as X is not zero. When a variable of data type BOOLEAN is assigned any non-zero number, the CR800 internally converts it to -1. The CR800 is able to translate the conditions listed in TABLE. Binary Conditions of TRUE and FALSE (p. 153) to binary form (-1 or 0), using the listed instructions and saving the binary form in the memory location indicated. TABLE. Logical Expression Examples (p. 154) explains some logical expressions.

9.10.4.2 Non-Zero = True (Sometimes)


Any value other than 0 or -1 will be translated as TRUE in some cases, FALSE in others. While using only -1 as the numerical representation of TRUE is safe, it may not always be the best programming technique. Consider the expression
If Condition(1) then...

Since = True has been omitted from the expression, Condition(1) is considered True if it equals any non-zero value.

153

Section 9. Programming

TABLE 36. Binary Conditions of TRUE and FALSE


Condition Time CRBASIC Instruction(s) Used TimeIntoInterval() IfTime() Control Port Trigger Communications WaitDigTrig() VoiceBeg() ComPortIsActive() PPPClose() Measurement Event DataEvent() Memory Location of Binary Result Variable, System Variable, System System System Variable Variable System

Using TRUE or FALSE conditions with logic operators such as AND and OR, logical expressions can be encoded to perform three general logic functions. Doing so facilitates conditional processing and control applications. 1. Evaluate an expression, take one path or action if the expression is true (= -1), and / or another path or action if the expression is false (= 0). 2. Evaluate multiple expressions linked with AND or OR. 3. Evaluate multiple and / or links. The following commands and logical operators are used to construct logical expressions. CRBASIC EXAMPLE. Logical Expression Examples (p. 154) demonstrate some logical expressions. IF AND OR NOT XOR IMP IIF

154

Section 9. Programming

TABLE 37. Logical Expression Examples


If X >= 5 then Y = 0 Sets the variable Y to 0 if the expression "X >= 5" is true, i.e. if X is greater than or equal to 5. The CR800 evaluates the expression (X >= 5) and registers in system memory a -1 if the expression is true, or a 0 if the expression is false. If X >= 5 OR Z = 2 then Y = 0 Sets Y = 0 if either X >= 5 or Z = 2 is true. If X >= 5 AND Z = 2 then Y = 0 Sets Y = 0 only if both X >= 5 and Z = 2 are true. If 6 then Y = 0. "If 6" is true since "6" (a non-zero number) is returned, so Y is set to 0 every time the statement is executed. If 0 then Y = 0. "If 0" is false since "0" is returned, so Y will never be set to 0 by this statement. Z = (X > Y). Z will equal -1 if X > Y, or Z will equal 0 if X <= Y. The NOT operator complements every bit in the word. A Boolean can be FALSE (0 or all bits set to 0) or TRUE (-1 or all bits set to 1). Complementing a Boolean turns TRUE to FALSE (all bits complemented to 0). Example Program '(a AND b) = (26 AND 26) = (&b11010 AND &b11010) = '&b11010. NOT (&b11010) yields &b00101. 'This is non-zero, so when converted 'BOOLEAN, it becomes TRUE. Public a AS Long Public b AS Long Public is_true AS Boolean Public not_is_true AS Boolean Public not_a_and_b AS Boolean BeginProg a = 26 b = a Scan (1,Sec,0,0) is_true = a AND b not_is_true = NOT (is_true) not_a_and_b = NOT (a AND b) NextScan EndProg to a

'This evaluates to TRUE. 'This evaluates to FALSE. 'This evaluates to TRUE!

9.10.5

String Expressions
CRBASIC allows the addition or concatenation of string variables to variables of all types using & and + operators. To ensure consistent results, use "&" when concatenating strings. Use "+" when concatenating strings to other variable types. CRBASIC EXAMPLE. String and Variable Concatenation (p. 156) demonstrates CRBASIC code for concatenating strings and integers.

155

Section 9. Programming

CRBASIC EXAMPLE 28. String and Variable Concatenation


'Declare Variables Dim Wrd(8) As String * 10 Public Phrase(2) As String * 80 Public PhraseNum(2) As Long 'Declare Data Table DataTable(Test,1,-1) DataInterval(0,15,Sec,10) 'Write phrases to data table "Test" Sample(2,Phrase,String) EndTable 'Program BeginProg Scan(1,Sec,0,0) 'Assign strings to String variables Wrd(1) = " ":Wrd(2) = "Good":Wrd(3) = "morning":Wrd(4) = "Don't" Wrd(5) = "do":Wrd(6) = "that":Wrd(7) = ",":Wrd(8) = "Dave" 'Assign integers to Long variables PhraseNum(1) = 1:PhraseNum(2) = 2 'Concatenate string "1 Good morning, Dave" Phrase(1) = PhraseNum(1)+Wrd(1)&Wrd(2)&Wrd(1)&Wrd(3)&Wrd(7)&Wrd(1)&Wrd(8) 'Concatenate string "2 Don't do that, Dave" Phrase(2) = PhraseNum(2)+Wrd(1)&Wrd(4)&Wrd(1)&Wrd(5)&Wrd(1)&Wrd(6)&Wrd(7)&Wrd(1)&Wrd(8) CallTable Test NextScan EndProg

9.11 Program Access to Data Tables


CRBASIC has syntax provisions facilitating access to data in tables or information relating to a table. Except when using the GetRecord () instruction (SECTION. Data Table Access and Management (p. 203)), the syntax is entered directly into the CRBASIC program through a variable name. The general form is: "TableName.FieldName_Prc (Fieldname Index, Records Back)". Where: TableName: name of the data table FieldName: name of the variable from which the processed value is derived Prc: Abbreviation of the name of the data process used. See TABLE. Abbreviations of Names of Data Processes (p. 157) for a complete list of these abbreviations-not needed for values from Status or Public tables.

156

Section 9. Programming Fieldname Index: Array element number (optional) Records Back: How far back into the table to go to get the value (optional) TABLE 38. Abbreviations of Names of Data Processes
Abbreviation Tot Avg Max Min SMM Std MMT Totalize Average Maximum Minimum Sample at Max or Min Standard Deviation Moment Sample Hst H4D FFT Cov RFH LCr WVc Med ETsz RSo TMx TMn Histogram (see note 1) Histogram4D FFT Covariance RainFlow Histogram Level Crossing WindVector Median ET Solar Radiation (from ET) Time of Max Time of Min Process Name

Note 1 -- Hst is reported in the form "Hst,20,1.0000e+00,0.0000e+00,1.0000e+01" where Hst denotes a histogram, 20 = 20 bins, 1 = weighting factor, 0 = lower bound, 10 = upper bound.

For instance, to access the number of watchdog errors, use the "status.watchdogerrors," where "status" is the table name, and "watchdogerrors" is the field name. Seven special variable names are used to access information about a table: EventCount EventEnd Output Record TableFull

157

Section 9. Programming

TableSize TimeStamp Consult CRBASIC Editor Help Index topic "DataTable access" for complete information.

9.12 System Signatures


System signatures, i.e., program signatures and operating system signatures, help assure system integrity and security. See: Signature() instruction in SECTION. Diagnostics (p. 171). RunSignature entry in TABLE. Status Table Fields and Descriptions (p. 434). ProgSignature entry in TABLE. Status Table Fields and Descriptions (p. 434). OSSignature entry in TABLE. Status Table Fields and Descriptions (p. 434). Status Table signature can be sampled by the CR800 using the expression
variable = status.<entry name>

Once in variable form, signatures can be sampled as part of a data table for archiving.

9.13 Tips
9.13.1 Use of Variable Arrays to Conserve Code Space
CRBASIC EXAMPLE. Use of Variable Arrays to Conserve Code Space (p. 158) shows example code to convert twenty temperatures in a variable array from C to F. Note -- When using the () syntax, whether on the disable parameter or with multiplier and offset on measurement instructions, if the parameter expression is more than a simple reference to a variable, e.g., disvar() + 5, or multiplier() * 4, or NOT enable_var(), the () syntax is ignored and reps will not take place for the expression.

CRBASIC EXAMPLE 29. Use of Variable Arrays to Conserve Code Space


For I = 1 to 20 TCTemp(I) = TCTemp(I) * 1.8 + 32 Next I

158

Section 9. Programming

9.13.2

Use of Move() to Conserve Code Space


The Move() instruction can be used to set an array or partial array to a single value or to copy to another array or partial array as shown in CRBASIC EXAMPLE. Use of Move() to Conserve Code Space (p. 158).

CRBASIC EXAMPLE 30. Use of Move() to Conserve Code Space


'Reset six counters to zero. Keep array 'filled with the ten most current readings Move(TempC(2),9,TempC(1),9) 'Shift previous nine readings to make room 'for new measurement TCDiff(TempC(1),1,mV2_5C,8,TypeT,PTemp,True,0,_60Hz,1.0,0) 'New measurement Move(counter(1),6,0,1)

159

Section 9. Programming

160

Section 10. CRBASIC Programming Instructions


Read More! Parameter listings, application information, and code examples are available in CRBASIC Editor Help. CRBASIC Editor is part of LoggerNet / PC400 / RTDAQ. All CR800 CRBASIC instructions are listed in the following sub-sections. Select instructions are explained more fully, some with example code, in SECTION. Programming Resource Library (p. 211). Example code is throughout the CR800 manual. Refer to the table of contents Example index. Complete explanations of instruction, most with examples, are available in Help for the CRBASIC Editor (see APPENDIX. Software (p. 465)).

10.1 Program Declarations


AngleDegrees Sets math functions to use degrees instead of radians. Syntax AngleDegrees PipelineMode Configures datalogger to perform measurement tasks separate from, but concurrent with, processing tasks. Syntax PipelineMode SequentialMode Configures datalogger to perform tasks sequentially. Syntax SequentialMode SetSecurity Sets numeric password for datalogger security levels 1, 2, and 3. Executes at compile time. Syntax SetSecurity (security[1], security[2], security[3]) StationName Sets the station name internal to the CR800. Does not affect data files produced by support software. Syntax StationName (name of station)

161

Section 10. CRBASIC Programming Instructions Sub, ExitSub, EndSub Declares the name, variables, and code that form a Subroutine. Argument list is optional. Exit Sub is optional. Syntax
Sub subname (argument list) [ statement block ] Exit Sub [ statement block ] End Sub

WebPageBegin / WebPageEnd See Information Services (p. 225).

10.1.1

Variable Declarations & Modifiers


Alias Assigns a second name to a variable. Syntax Alias [variable] = [alias name]; Alias [array(4)] = [alias name], [alias name(2)], [alias name] As Sets data type for DIM or PUBLIC variables. Syntax Dim [variable] AS [data type] Dim Declares and dimensions private variables. Dimensions are optional. Syntax Dim [variable name (x,y,z)] ESSVariables Automatically declares all the variables required for the datalogger when used in an Environmental Sensor Station application. Used in conjunction with ESSInitialize. Syntax ESSVariables NewFieldNames Assigns a new name to a generic variable or array. Designed for use with CSI wireless sensor networks. Syntax NewFieldNames (GenericName, NewNames) PreserveVariables Retains values in Dim or Public variables when program restarts after a power failure or manual stop. Syntax PreserveVariables Public Declares and dimensions public variables. Dimensions are optional. Syntax Public [variable name (x,y,z)]

162

Section 10. CRBASIC Programming Instructions ReadOnly Flags a comma separated list of variables (Public or Alias name) as read only. Syntax ReadOnly [variable1, variable2, ...] Units Assigns a unit name to a field associated with a variable. Syntax Units [variable] = [unit name]

10.1.2

Constant Declarations
Const Declares symbolic constants for use in place of numeric entries. Syntax Const [constant name] = [value or expression] ConstTable EndConstTable Declares constants, the value of which can be changed using the optional keyboard display or terminal 'C' option. The program is recompiled with the new values when values change. See SECTION. Constants (p. 129). Syntax
ConstTable [constant a] = [value] [constant b] = [value] [constant c] = [value] EndConstTable

10.2 Data Table Declarations


DataTable EndTable Mark the beginning and end of a data table. Syntax
DataTable (Name, TrigVar, Size) [data table modifiers] [on-line storage destinations] [output processing instructions] EndTable

10.2.1

Data Table Modifiers


DataEvent Sets triggers to start and stop storing records within a table. One application is with WorstCase. Syntax DataEvent (RecsBefore, StartTrig, StopTrig, RecsAfter) DataInterval Sets the time interval for an output table. Syntax DataInterval (TintoInt, Interval, Units, Lapses)

163

Section 10. CRBASIC Programming Instructions FillStop Sets a data table to fill and stop. Syntax FillStop Note To reset a table after it fills and stops, use ResetTable () instruction in the user program or LoggerNet / PC400 / RTDAQ / PC200W | Datalogger | Station Status | Table Fill Times | Reset Tables. OpenInterval Sets time series processing to include all measurements since the last time data storage occurred. Syntax OpenInterval TableHide Suppresses the display and data collection of a data table in datalogger memory. Syntax TableHide

10.2.2

Data Destinations
CardFlush Immediately writes any buffered data from CR800 internal memory and file system to resident CS mass storage media (USB: drive). Syntax CardFlush

DSP4 Send data to the DSP4 display Syntax DSP4 (FlagVar, Rate) TableFile Writes a file from a data table to a CR800 memory drive. Syntax TableFile ("FileName", Options, MaxFiles, NumRecs / TimeIntoInterval, Interval, Units, OutStat, LastFileName)

10.2.3

Final Data Storage (Output) Processing


Read More! See SECTION. Final Data Storage (Output) Processing Instructions (p. 137)

164

Section 10. CRBASIC Programming Instructions FieldNames Immediately follows an output processing instruction to change default field names. Syntax FieldNames ("Fieldname1 : Description1, Fieldname2 : Description2")

10.2.3.1 Single-Source
Average Stores the average value over the output interval for the source variable or each element of the array specified. Syntax Average (Reps, Source, DataType, DisableVar) Covariance Calculates the covariance of values in an array over time. Syntax Covariance (NumVals, Source, DataType, DisableVar, NumCov) FFT Performs a Fast Fourier Transform on a time series of measurements stored in an array. Syntax FFT (Source, DataType, N, Tau, Units, Option) Maximum Stores the maximum value over the output interval. Syntax Maximum (Reps, Source, DataType, DisableVar, Time) Median Stores the median of a dependant variable over the output interval Syntax Median (Reps, Source, MaxN, DataType, DisableVar) Minimum Stores the minimum value over the output interval. Syntax Minimum (Reps, Source, DataType, DisableVar, Time) Moment Stores the mathematical moment of a value over the output interval. Syntax Moment (Reps, Source, Order, DataType, DisableVar) PeakValley Detects maxima and minima in a signal. Syntax PeakValley (DestPV, DestChange, Reps, Source, Hysteresis)

165

Section 10. CRBASIC Programming Instructions Sample Stores the current value at the time of output. Syntax Sample (Reps, Source, DataType) SampleFieldCal Writes field calibration data to a table. See SECTION. Calibration Functions (p. 207). SampleMaxMin Samples a variable when another variable reaches its maximum or minimum for the defined output period. Syntax SampleMaxMin (Reps, Source, DataType, DisableVar) StdDev Calculates the standard deviation over the output interval. Syntax StdDev (Reps, Source, DataType, DisableVar) Totalize Sums the total over the output interval. Syntax Totalize (Reps, Source, DataType, DisableVar)

10.2.3.2 Multiple-Source
ETsz Stores evapotranspiration (ETsz) and solar radiation (RSo). Syntax ETsz (Temp, RH, uZ, Rs, Longitude, Latitude, Altitude, Zw, Sz, DataType, DisableVar) WindVector Processes wind speed and direction from either polar or orthogonal sensors. To save processing time, only calculations resulting in the requested data are performed. Syntax WindVector (Repetitions, Speed/East, Direction/North, DataType, DisableVar, Subinterval, SensorType, OutputOpt) Read More! See SECTION. Wind Vector (p. 248).

10.2.4

Histograms
Histogram Processes input data as either a standard histogram (frequency distribution) or a weighted value histogram. Syntax Histogram (BinSelect, DataType, DisableVar, Bins, Form, WtVal, LoLim, UpLim)

166

Section 10. CRBASIC Programming Instructions Histogram4D Processes input data as either a standard histogram (frequency distribution) or a weighted value histogram of up to 4 dimensions. Syntax Histogram4D (BinSelect, Source, DataType, DisableVar, Bins1, Bins2, Bins3, Bins4, Form, WtVal, LoLim1, UpLim1, LoLim2, UpLim2, LoLim3, UpLim3, LoLim4, UpLim4) LevelCrossing Processes data into a one or two dimensional histogram using a level crossing counting algorithm. Syntax LevelCrossing (Source, DataType, DisableVar, NumLevels, 2ndDim, CrossingArray, 2ndArray, Hysteresis, Option) RainFlow Processes data with the Rainflow counting algorithm, essential to estimating cumulative damage fatigue to components undergoing stress / strain cycles. Reference. Downing S. D., Socie D. F. (1982) Simple Rainflow Counting Algorithms. International Journal of Fatigue Volume 4, Issue 1. Syntax RainFlow (Source, DataType, DisableVar, MeanBins, AmpBins, Lowlimit, Highlimit, MinAmp, Form)

10.3 Single Execution at Compile


Reside between BeginProg and Scan Instructions. ESSInitialize Placed after the BeginProg instruction but prior to the Scan instruction to initialize ESS variables at compile time. Syntax ESSInitialize MovePrecise Used in conjunction with AddPrecise, moves a high precision variable into another input location. Syntax MovePrecise (PrecisionVariable, X) PulseCountReset Resets the pulse counters and the running averages used in the pulse count instruction. Syntax PulseCountReset

167

Section 10. CRBASIC Programming Instructions

10.4 Program Control Instructions


10.4.1 Common Program Controls
BeginProg EndProg Mark the beginning and end of a program. Syntax
BeginProg Program Code EndProg

Call Transfers program control from the main program to a subroutine. Syntax Call subname (list of variables) CallTable Calls a data table, typically for output processing. Syntax CallTable [TableName] Delay Delays the program. Syntax Delay (Option, Delay, Units) Do Loop Repeats a block of statements while a condition is true or until a condition becomes true. Syntax
Do [{While | Until} condition] [statementblock] [ExitDo] [statementblock] Loop -orDo [statementblock] [ExitDo] [statementblock] Loop [{While | Until} condition]

EndSequence Ends the current sequence that started at BeginProg or after a SlowSequence and accompanying declaration sequences. Syntax EndSequence Exit Exit program. Syntax Exit

168

Section 10. CRBASIC Programming Instructions For ... Next Repeats a group of instructions a specified number of times. Syntax
For counter = start To end [ Step increment ] [statementblock] [ExitFor] [statementblock] Next [counter [, counter][, ...]]

If ... Then ... Else ElseIf ... EndIf Allows conditional execution, based on the evaluation of an expression. Else is optional. ElseIf is optional (EndSelect and EndIf call the same function). Syntax
If [condition] Then [thenstatements] Else [elsestatements]

-orIf [condition 1] Then [then statements] ElseIf [condition 2] Then [elseif then statements] Else [else statements] EndIf

Scan ExitScan ContinueScan ... NextScan Establishes the program scan rate. ExitScan and ContinueScan are optional. See SECTION. Burst (p. 293) for information on use of Scan / NextScan in burst measurements. Syntax
Scan (Interval, Units, Option, Count) ... Exit Scan ... ContinueScan ... Next Scan

Select Case Case Case Is Case Else EndSelect Executes one of several statement blocks depending on the value of an expression. CaseElse is optional. (EndSelect and EndIf call the same CR800 function). Syntax
Select Case testexpression Case [expression 1] [statement block 1] Case [expression 2] [statement block 2] Case Is [expression fragment] Case Else [statement block 3] EndSelect

Slow Sequence Marks the beginning of a section of code that will run concurrently with the main program. Syntax SlowSequence SubScan NextSubScan

169

Section 10. CRBASIC Programming Instructions Controls a multiplexer or measures some analog inputs at a faster rate than the program scan. See SECTION. Burst (p. 293) for information on use of SubScan / NextSubScan in burst measurements. Syntax
SubScan (SubInterval, Units, Count) Measurements and processing NextSubScan

TriggerSequence Used with WaitTriggerSequence to control the execution of code within a slow sequence. Syntax TriggerSequence (SequenceNum, Timeout) WaitTriggerSequence Used with TriggerSequence to control the execution of code within a slow sequence. Syntax WaitTriggerSequence WaitDigTrig Triggers a measurement scan from an external digital trigger. Syntax WaitDigTrig (ControlPort, Option) WhileWend Execute a series of statements in a loop as long as a given condition is true. Syntax
While Condition [StatementBlock] Wend

10.4.2

Advanced Program Controls


Data Read Restore Defines a list of Float constants to be read (using Read) into a variable array later in the program. Syntax
Data [list of constants] Read [VarExpr] Restore

DataLong Read Restore Defines a list of Long constants to be read (using Read) into a variable array later in the program. Syntax
DataLong [list of constants] Read [VarExpr] Restore

Read Reads constants from the list defined by Data or DataLong into a variable array. Syntax Read [VarExpr]

170

Section 10. CRBASIC Programming Instructions Restore Resets the location of the Read pointer back to the first value in the list defined by Data or DataLong. Syntax Restore SemaphoreGet Acquires semaphore (p. 428) 1-3 to avoid resource conflicts. Syntax SemaphoreGet () SemaphoreRelease Releases semaphore (p. 428) previously acquired with SemaphoreGet (). Syntax SemaphoreRelease () ShutDownBegin Begins code to be run in the event of a normal shutdown such as when sending a new program. Syntax ShutDownBegin ShutDownEnd Ends code to be run in the event of a normal shutdown such as when sending a new program. Syntax ShutDownEnd

10.5 Measurement Instructions


Read More! For information on recording data from RS-232 and TTL output sensors, see Serial Input / Output (p. 195) and Serial I/O (p. 262).

10.5.1

Diagnostics
Battery Measures input voltage. Syntax Battery (Dest) ComPortIsActive Returns a Boolean value, based on whether or not activity is detected on the specified COM port. Syntax variable = ComPortIsActive (ComPort) InstructionTimes Returns the execution time of each instruction in the program. Syntax InstructionTimes (Dest)

171

Section 10. CRBASIC Programming Instructions MemoryTest Performs a test on the CR800 CPU and Task memory and store the results in a variable array. Syntax MemoryTest (Dest) PanelTemp This instruction measures the panel temperature in C. Syntax PanelTemp (Dest, Integ) Signature Returns the signature for program code in a datalogger program. Syntax variable = Signature

10.5.2

Voltage
VoltDiff Measures the voltage difference between H and L inputs of a differential channel Syntax VoltDiff (Dest, Reps, Range, DiffChan, RevDiff, SettlingTime, Integ, Mult, Offset) VoltSe Measures the voltage at a single-ended input with respect to ground. Syntax VoltSe (Dest, Reps, Range, SEChan, MeasOfs, SettlingTime, Integ, Mult, Offset)

10.5.3

Thermocouples
Read More! See SECTION. Thermocouple (p. 70). TCDiff Measures a differential thermocouple. Syntax TCDiff (Dest, Reps, Range, DiffChan, TCType, TRef, RevDiff, SettlingTime, Integ, Mult, Offset) TCSe Measures a single-ended thermocouple. Syntax TCSe (Dest, Reps, Range, SEChan, TCType, TRef, MeasOfs, SettlingTime, Integ, Mult, Offset)

172

Section 10. CRBASIC Programming Instructions

10.5.4

Bridge Measurements
Read More! See SECTION. Bridge Resistance Measurements (p. 65). BrFull Measures ratio of Vdiff / Vx of a 4 wire full bridge. Reports 1000 * (Vdiff / Vx). Syntax BrFull (Dest, Reps, Range, DiffChan, Vx/ExChan, MeasPEx, ExmV, RevEx, RevDiff, SettlingTime, Integ, Mult, Offset) BrFull6W Measures ratio of Vdiff2 / Vdiff1 of a 6 wire full bridge. Reports 1000 * (Vdiff2 / Vdiff1). Syntax BrFull6W (Dest, Reps, Range1, Range2, DiffChan, Vx/ExChan, MeasPEx, ExmV, RevEx, RevDiff, SettlingTime, Integ, Mult, Offset) BrHalf Measures single-ended voltage of a 3 wire half bridge. Delay is optional. Syntax BrHalf (Dest, Reps, Range, SEChan, Vx/ExChan, MeasPEx, ExmV, RevEx, SettlingTime, Integ, Mult, Offset) BrHalf3W Measures ratio of Rs / Rf of a 3 wire half bridge. Syntax BrHalf3W (Dest, Reps, Range, SEChan, Vx/ExChan, MeasPEx, ExmV, RevEx, SettlingTime, Integ, Mult, Offset) BrHalf4W Measures ratio of Rs / Rf of a 4 wire half bridge. Syntax BrHalf4W (Dest, Reps, Range1, Range2, DiffChan, Vx/ExChan, MeasPEx, ExmV, RevEx, RevDiff, SettlingTime, Integ, Mult, Offset)

10.5.5

Excitation
ExciteV This instruction sets the specified switched voltage excitation channel to the voltage specified. Syntax ExciteV (Vx/ExChan, ExmV, XDelay) SW12 Sets a switched 12-Vdc supply high or low. Syntax SW12 (State)

173

Section 10. CRBASIC Programming Instructions

10.5.6

Pulse
Read More! See SECTION. Pulse Count Measurement (p. 70). Note Pull-up resistors are required when using digital I/O (control) ports for pulse input (see SECTION. Pulse Input on Digital I/O Channels C1 - C4 (p. 73)). PulseCount Measures number or frequency of voltages pulses on a pulse channel. Syntax PulseCount (Dest, Reps, PChan, PConfig, POption, Mult, Offset)

10.5.7

Digital I/O
CheckPort Returns the status of a control port. Syntax CheckPort (Port) PeriodAvg Measures the period of a signal on any single-ended voltage input channel. Syntax PeriodAvg (Dest, Reps, Range, SEChan, Threshold, PAOption, Cycles, Timeout, Mult, Offset) PortsConfig Configure control ports as input or output. Syntax PortsConfig (Mask, Function) PortGet Reads the status of a control port. Syntax PortGet (Dest, Port) PortSet Sets the specified port high or low. Syntax PortSet (Port, State) PulsePort Toggles the state of a control port, delays the specified amount of time, toggles the port, and delays a second time. Syntax PulsePort (Port, Delay)

174

Section 10. CRBASIC Programming Instructions PWM Performs a pulse width modulation on a control I/O port. Syntax PWM (Source,Port,Period,Units) ReadIO Reads the status of selected control I/O ports. Syntax ReadIO (Dest, Mask) TimerIO Measures interval or frequency on a digital I/O port. Syntax TimerIO (Dest, Edges, Function, Timeout, Units) VibratingWire The VibratingWire instruction is used to measure a vibrating wire sensor with a swept frequency (from low to high). Syntax VibratingWire (Dest, Reps, Range, SEChan, Vx/ExChan, StartFreq, EndFreq, TSweep, Steps, DelMeas, NumCycles, DelReps, Multiplier, Offset) WriteIO WriteIO is used to set the status of selected control I/O channels (ports) on the CR800. Syntax WriteIO (Mask, Source)

10.5.8

SDI-12
Read More! See SECTION. SDI-12 Sensor Support (p. 232). SDI12Recorder The SDI12Recorder instruction is used to retrieve the results from an SDI-12 sensor. Syntax SDI12Recorder (Dest, SDIPort, SDIAddress, SDICommand, Multiplier, Offset) SDI12SensorSetup Sets up the datalogger to act as an SDI-12 sensor SDI12SensorResponse Holds the source of the data to send to the SDI-12 recorder. Syntax SDI12SensorSetup (Repetitions, SDIPort, SDIAddress, ResponseTime) SDI12SensorResponse (SDI12Source)

175

Section 10. CRBASIC Programming Instructions

10.5.9

Specific Sensors
ACPower Measures real ac power and power quality parameters for single-, split-, and three-phase 'Y' configurations. Syntax ACPower (DestAC, ConfigAC, LineFrq, ChanV, VMult, MaxVrms, ChanI, IMult, MaxIrms, Reps) DANGER ac power can kill. User is responsible for ensuring connections to ac power mains conforms to applicable electrical codes. Contact a Campbell Scientific applications engineer for information on available isolation transformers. CS110 Measures electric field by means of a CS110 electric field meter. Syntax CS110 (Dest, Leakage, Status, Integ, Mult, Offset) CS110Shutter Controls the shutter of a CS110 electric field meter. Syntax CS110Shutter (Status, Move) CS616 Enables and measures a CS616 water content reflectometer. Syntax CS616 (Dest, Reps, SEChan, Port, MeasPerPort, Mult, Offset) CS7500 Communicates with the CS7500 open path CO2 and H2O sensor. Syntax CS7500 (Dest, Reps, SDMAddress, Command) CSAT3 Communicates with the CSAT3 three-dimensional sonic anemometer. Syntax CSAT3 (Dest, Reps, SDMAddress, CSAT3Cmd, CSAT3Opt) EC100 Communicates with the EC150 Open Path and EC155 Closed Path IR Gas Analyzers via SDM. Syntax EC100 (Dest, SDMAddress, EC100Cmd) EC100Configure Configures the EC150 Open Path and EC155 Closed Path IR Gas Analyzers. Syntax EC100Configure ()

176

Section 10. CRBASIC Programming Instructions GPS Used with a GPS device to keep CR800 clock correct or provide other information from the GPS such as location and speed. (may require a factory memory upgrade) Syntax GPS (GPS_Array, ComPort, TimeOffsetSec, MaxErrorMsec, NMEA_Sentences) Note To change from the GPS default baud rate of 38400, specify the new baud rate in the SerialOpen() instruction. HydraProbe Reads the Stevens Vitel SDI-12 Hydra Probe sensor. Syntax HydraProbe (Dest, SourceVolts, ProbeType, SoilType) LI7200 Communicates with the LI7200 open path CO2 and H2O sensor. Syntax LI7200 (Dest, Reps, SDMAddress, Command) LI7700 Communicates with the LI7700 open path CO2 and H2O sensor. Syntax LI7200 (Dest, Reps, SDMAddress, Command) TGA Measures a TGA100A trace gas analyzer system. Syntax TGA (Dest, SDMAddress, DataList, ScanMode) Therm107 Measures a Campbell Scientific 107 thermistor. Syntax Therm107 (Dest, Reps, SEChan, Vx/ExChan, SettlingTime, Integ, Mult, Offset) Therm108 Measures a Campbell Scientific 108 thermistor. Syntax Therm108 (Dest, Reps, SEChan, Vx/ExChan, SettlingTime, Integ, Mult, Offset) Therm109 Measures a Campbell Scientific 109 thermistor. Syntax Therm109 (Dest, Reps, SEChan, Vx/ExChan, SettlingTime, Integ, Mult, Offset)

177

Section 10. CRBASIC Programming Instructions

10.5.9.1 Wireless Sensor Network


ArrayIndex Returns the index of a named element in an array. Syntax ArrayIndex (Name) CWB100 Sets up the CR800 to request and accept measurements from the CWB100 wireless sensor base. Syntax CWB100 (ComPort, CWSDest, CWSConfig) CWB100Routes Returns route information on wireless sensors known to the wireless sensor base. Syntax CWB100Routes (ComPort, DestString) CWB100RSSI Polls wireless sensors in a wireless sensor network for radio signal strength. Syntax CWB100RSSI (CWBPort)

10.5.10 Peripheral Device Support


Multiple SDM instructions can be used within a program. AM25T Controls the AM25T Multiplexer. Syntax AM25T (Dest, Reps, Range, AM25TChan, DiffChan, TCType, Tref, ClkPort, ResPort, VxChan, RevDiff, SettlingTime, Integ, Mult, Offset) AVW200 Enables CR800 to get measurements from an AVW200 Vibrating Wire Spectrum Analyzer. Syntax AVW200 (Result, ComPort, NeighborAddr, PakBusAddr, Dest, AVWChan, MuxChan, Reps, BeginFreq, EndFreq, ExVolt, Therm50_60Hz, Multiplier, Offset) MuxSelect Selects the specified channel on a multiplexer. Syntax MuxSelect (ClkPort, ResPort, ClkPulseWidth, MuxChan, Mode) SDMAO4 Sets output voltage levels in an SDM-AO4 analog output device. Syntax SDMAO4 (Source, Reps, SDMAdress)

178

Section 10. CRBASIC Programming Instructions SDMCAN Reads and controls an SDM-CAN interface. Syntax SDMCAN (Dest, SDMAddress, TimeQuanta, TSEG1, TSEG2, ID, DataType, SDMCD16AC Controls an SDM-CD16AC, SDM-CD16, or SDM-CD16D control device. Syntax SDMCD16AC (Source, Reps, SDMAddress) SDMCD16Mask Controls an SDM-CD16AC, SDM-CD16, or SDM-CD16D control device. Unlike the SDMCD16AC, it allows the CR800 to select the ports to activate via a mask. Commonly used with TimedControl (). Syntax SDMCD16Mask (Source, Mask, SDMAddress) SDMCVO4 Control the SDM-CVO4 four channel current/voltage output device. Syntax SDMCVO4 (CVO4Source, CVO4Reps, SDMAddress, CVO4Mode) SDMGeneric Sends commands to an SDM device that is otherwise unsupported in the operating system. Syntax SDMGeneric (Dest, SDMAddress, CmdByte, NumvaluesOut, Source, NumValuesIn, BytesPerValue, BigEndian, DelayByte) SDMINT8 Controls and reads an SDM-INT8. Syntax SDMINT8 (Dest, Address, Config8_5, Config4_1, Funct8_5, Funct4_1, OutputOpt, CaptureTrig, Mult, Offset) SDMIO16 Sets up and measures an SDM-IO16 control port expansion device. Syntax SDMIO16 (Dest, Status, Address, Command, Mode Ports 16-13, Mode Ports 12-9, Mode Ports 8-5, Mode Ports 4-1, Mult, Offset) SDMSIO4 Controls and transmits / receives data from an SDM-SIO4 Interface. Syntax SDMSIO4 (Dest, Reps, SDMAddress, Mode, Command, Param1, Param2, ValuesPerRep, Multiplier, Offset)

179

Section 10. CRBASIC Programming Instructions SDMSpeed Changes the rate the CR800 uses to clock SDM data. Syntax SDMSpeed (BitPeriod) SDMSW8A Controls and reads an SDM-SW8A. Syntax SDMSW8A (Dest, Reps, SDMAddress, FunctOp, SW8AStartChan, Mult, Offset) SDMTrigger Synchronize when SDM measurements on all SDM devices are made. Syntax SDMTrigger SDMX50 Allows individual multiplexer switches to be activated independently of the TDR100 instruction. Syntax SDMX50 (SDMAddress, Channel) TDR100 Directly measures TDR probes connected to the TDR100 or via an SDMX50. Syntax TDR100 (Dest, SDMAddress, Option, Mux/ProbeSelect, WaveAvg, Vp, Points, CableLength, WindowLength, ProbeLength, ProbeOffset, Mult, Offset) TimedControl Allows a sequence of fixed values and durations to be controlled by the SDM task sequencer enabling SDM-CD16x (see APPENDIX. Relay Drivers (p. 473)) control events to occur at a precise time. Syntax TimedControl (Size, SyncInterval, IntervalUnits, DefaultValue, CurrentIndex, Source, ClockOption)

10.6 Processing and Math Instructions


10.6.1 Mathematical Operators
Note Program declaration AngleDegrees (see SECTION. Program Declarations (p. 161)) sets math functions to use degrees instead of radians. Arithmetic Operators ^ Raise to PowerResult is always promoted to a float to avoid problems that may occur when raising an integer to a negative power. However, loss of precision occurs if result is > 24 bits.

180

Section 10. CRBASIC Programming Instructions

For example: (46340 ^ 2) will yield 2,147,395,584 (not precisely correct) whereas (46340 * 46340) will yield 2,147,395,600 (precisely correct) Simply use repeated multiplications instead of ^ operators when full 32-bit precision is required. Same functionality as PWR instruction (12.6.4). * Multiply / Divide Use INTDV to retain 32-bit precision + Add Subtract

= Equals <> Not Equal > Greater Than < Less Than >= Greater Than or Equal <= Less Than or Equal Bitwise Operators Bitwise shift operators (<< and >>) allow the program to manipulate the positions of patterns of bits within an integer (CRBASIC Long type). Here are some example expressions and the expected results: &B00000001 << 1 produces &B00000010 (decimal 2) &B00000010 << 1 produces &B00000100 (decimal 4) &B11000011 << 1 produces &B10000110 (decimal 134) &B00000011 << 2 produces &B00001100 (decimal 12) &B00001100 >> 2 produces &B00000011 (decimal 3) The result of these operators is the value of the left hand operand with all of its bits moved by the specified number of positions. The resulting "holes" are filled with zeroes.

181

Section 10. CRBASIC Programming Instructions Consider a sensor or protocol that produces an integer value that is a composite of various "packed" fields. This approach is quite common to conserve bandwidth and/or storage space. Consider the following example of an eight byte value: bits 7-6: value_1 bits 5-4: value_2 bits 3-0: value_3 Code to extract these values is shown in CRBASIC EXAMPLE. Using Bit Shift Operators (p. 183). With unsigned integers, shifting left is the equivalent of multiplying by two and shifting right is the equivalent of dividing by two. << Bitwise left shift Syntax Variable = Numeric Expression >> Amount >> Bitwise right shift Syntax Variable = Numeric Expression >> Amount &= Bitwis AND assignment -- Performs a bitwise AND of a variable with an expression and assigns the result back to the variable. Compound-assignment operators ^= Exponent assignment -- Raises the value of a variable to the power of an expression and assigns the result back to the variable. *= Multiplication assignment -- Multiplies the value of a variable by the value of an expression and assigns the result to the variable. += Addition assignment -- Adds the value of an expression to the value of a variable and assigns the result to the variable. Also concatenates a String expression to a String variable and assigns the result to the variable. -= Subtraction assignment -- Subtracts the value of an expression from the value of a variable and assigns the result to the variable. /= Division assignment -- Divides the value of a variable by the value of an expression and assigns the result to the variable. \= Division integer assignment -- Divides the value of a variable by the value of an expression and assigns the integer result to the variable.

182

Section 10. CRBASIC Programming Instructions

CRBASIC EXAMPLE 31. Using bit shift operators


Dim Dim Dim Dim input_val as LONG value_1 as LONG value_2 as LONG value_3 as LONG

'read input_val somehow value_1 = (input_val AND &B11000000) >> 6 value_2 = (input_val AND &B00110000) >> 4 'note that value_3 does not need to be shifted value_3 = (input_val AND &B00001111)

10.6.2

Logical Operators
AND Used to perform a logical conjunction on two expressions. Syntax result = expr1 AND expr2 EQV Performs a logical equivalence on two expressions. Syntax result = expr1 EQV expr2 NOT Performs a logical negation on an expression. Syntax result = NOT expression OR Used to perform a logical disjunction on two expressions. Syntax result = expr1 OR expr2 XOR Performs a logical exclusion on two expressions. Syntax result = expr1 XOR expr2 IIF Evaluates a variable or expression and returns one of two results based on the outcome of that evaluation. Syntax Result = IIF (Expression, TrueValue, FalseValue) IMP Performs a logical implication on two expressions. Syntax result = expression1 IMP expression2

183

Section 10. CRBASIC Programming Instructions

10.6.3

Trigonometric Functions
TABLE. Derived Trigonometric Functions (p. 184) is a list of trigonometric functions that can be derived from functions intrinsic to CRBASIC. TABLE 39. Derived Trigonometric Functions
Function
Secant Cosecant Cotangent Inverse Secant Inverse Cosecant Inverse Cotangent Hyperbolic Secant Hyperbolic Cosecant Hyperbolic Cotangent Inverse Hyperbolic Sine Inverse Hyperbolic Cosine Inverse Hyperbolic Tangent Inverse Hyperbolic Secant Inverse Hyperbolic Cosecant Inverse Hyperbolic Cotangent

10.6.3.1 Derived Functions

CRBASIC Equivalent
Sec = 1 / Cos(X) Cosec = 1 / Sin(X) Cotan = 1 / Tan(X) Arcsec = Atn(X / Sqr(X * X - 1)) + Sgn(Sgn(X) - 1) * 1.5708 Arccosec = Atn(X / Sqr(X * X - 1)) + (Sgn(X) - 1) * 1.5708 Arccotan = Atn(X) + 1.5708 HSec = 2 / (Exp(X) + Exp(-X)) HCosec = 2 / (Exp(X) - Exp(-X)) HCotan = (Exp(X) + Exp(-X)) / (Exp(X) - Exp(-X)) HArcsin = Log(X + Sqr(X * X + 1)) HArccos = Log(X + Sqr(X * X - 1)) HArctan = Log((1 + X) / (1 - X)) / 2 HArcsec = Log((Sqr(-X * X + 1) + 1) / X) HArccosec = Log((Sgn(X) * Sqr(X * X + 1) + 1) / X) HArccotan = Log((X + 1) / (X - 1)) / 2

10.6.3.2 Intrinsic Functions


ACOS Returns the arc cosine of a number. Syntax x = ACOS(source) ASIN The ASIN function returns the arc sin of a number. Syntax x = ASIN(source) ATN Returns the arctangent of a number. Syntax x = ATN(source) ATN2 Returns the arctangent of y / x. Syntax x = ATN(y , x)

184

Section 10. CRBASIC Programming Instructions COS Returns the cosine of an angle specified in radians. Syntax x = COS(source) COSH Returns the hyperbolic cosine of an expression or value. Syntax x = COSH(source) SIN Returns the sine of an angle. Syntax x = SIN(source) SINH Returns the hyperbolic sine of an expression or value. Syntax x = SINH(Expr) TAN Returns the tangent of an angle. Syntax x = TAN(source) TANH Returns the hyperbolic tangent of an expression or value. Syntax x = TANH(Source)

10.6.4

Arithmetic Functions
ABS Returns the absolute value of a number. Syntax x = ABS(source) Ceiling Rounds a value to a higher integer. Syntax variable = Ceiling(Number) EXP Returns e (the base of natural logarithms) raised to a power Syntax x = EXP(source) Floor Rounds a value to a lower integer. Syntax variable = Floor(Number)

185

Section 10. CRBASIC Programming Instructions FRAC Returns the fractional part of a number. Syntax x = FRAC(source) INT or FIX Return the integer portion of a number. Syntax
x = INT(source) x = Fix(source)

INTDV Performs an integer division of two numbers. Syntax X INTDV Y LN or LOG Returns the natural logarithm of a number. Ln and Log perform the same function. Syntax
x = LOG(source) x = LN(source)

Note LOGN = LOG(X) / LOG(N) LOG10 The LOG10 function returns the base 10 logarithm of a number. Syntax x = LOG10 (number) MOD Modulo divide. Divides one number into another and returns only the remainder. Syntax result = operand1 MOD operand2 PWR Performs an exponentiation on a variable. Same functionality as ^ operator (6.6.1). Syntax PWR (X, Y) RectPolar Converts from rectangular to polar coordinates. Syntax RectPolar (Dest, Source) Round Rounds a value to a higher or lower number. Syntax variable = Round (Number, Decimal) SGN Finds the sign value of a number. Syntax x = SGN(source)

186

Section 10. CRBASIC Programming Instructions Sqr Returns the square root of a number. Syntax x = SQR(number)

10.6.5

Integrated Processing
DewPoint Calculates dew point temperature from dry bulb and relative humidity. Syntax DewPoint (Dest, Temp, RH) PRT Calculates temperature from the resistance of an RTD. Syntax PRT (Dest, Reps, Source, Mult) PRTCalc Calculates temperature from the resistance of an RTD. Syntax PRTCalc (Dest, Reps, Source, PRTType, Mult, Offset) SatVP Calculates saturation vapor pressure (kPa) from temperature. Syntax SatVP (Dest, Temp) StrainCalc Converts the output of a bridge measurement instruction to microstrain. Syntax StrainCalc (Dest, Reps, Source, BrZero, BrConfig, GF, v) VaporPressure Calculates vapor pressure from temperature and relative. Syntax VaporPressure (Dest, Temp, RH) WetDryBulb Calculates vapor pressure (kPa) from wet and dry bulb temperatures and barometric pressure. Syntax WetDryBulb (Dest, DryTemp, WetTemp, Pressure)

10.6.6

Spatial Processing
AvgSpa Computes the spatial average of the values in the source array. Syntax AvgSpa (Dest, Swath, Source)

187

Section 10. CRBASIC Programming Instructions CovSpa Computes the spatial covariance of sets of data. Syntax CovSpa (Dest, NumOfCov, SizeOfSets, CoreArray, DatArray) FFTSpa Performs a Fast Fourier Transform on a time series of measurements. Syntax FFTSpa (Dest, N, Source, Tau, Units, Option) MaxSpa Finds the maximum value in an array. Syntax MaxSpa (Dest, Swath, Source) MinSpa Finds the minimum value in an array. Syntax MinSpa (Dest, Swath, Source) RMSSpa Computes the RMS (root mean square) value of an array. Syntax RMSSpa (Dest, Swath, Source) SortSpa Sorts the elements of an array in ascending order. Syntax SortSpa (Dest, Swath, Source) StdDevSpa Used to find the standard deviation of an array. Syntax StdDevSpa (Dest, Swath, Source)

10.6.7

Other Functions
AddPrecise Used in conjunction with MovePrecise, allows high precision totalizing of variables or manipulation of high precision variables. Syntax AddPrecise (PrecisionVariable, X) AvgRun Stores a running average of a measurement. Syntax AvgRun (Dest, Reps, Source, Number) Note AvgRun () should not be inserted within a For / Next construct with the Source and Dest parameters indexed and Reps set to 1. In essence this would be performing a single running average, using the values of the different elements of the array, instead of performing an independent running average on each

188

Section 10. CRBASIC Programming Instructions element of the array. The results will be a Running Average of a Spatial Average on the various Source array's elements. Randomize Initializes the random-number generator. Syntax Randomize (source) RND Generates a random number. Syntax RND (source)

10.7 String Functions


Read More! See SECTION. String Operations (p. 300) in the Programming Resource Library. & Concatenates string variables + Concatenates string and numeric variables Compares two strings, returns zero if identical

10.7.1

String Operations
String Constants Constant strings can be used in expressions using quotation marks, i.e.
FirstName = "Mike"

String Addition Strings can be concatenated using the '+' operator, i.e.
FullName = FirstName + " " + MiddleName + " " + LastName

String Subtraction String1-String2 results in an integer in the range of -255..+255. String Conversion to / from Numeric Conversion of Strings to Numeric and Numeric to Strings is done automatically when an assignment is made from a string to a numeric or a numeric to a string, if possible. String Comparison Operators The comparison operators =, >,<,<>, >= and <= operate on strings.

189

Section 10. CRBASIC Programming Instructions

String Output Processing The Sample() instruction will convert data types if source data type is different than the Sample() data type. Strings are disallowed in all output processing instructions except Sample().

10.7.2

String Commands
ArrayLength Returns the length of a variable array. Syntax ArrayLength (Variable) ASCII Returns the ASCII / ANSI code of a character in a string. Syntax Variable = ASCII (ASCIIString(1,1,X)) CheckSum Returns a checksum signature for the characters in a string. Syntax Variable = CheckSum (ChkSumString, ChkSumType, ChkSumSize) CHR Insert an ANSI character into a string. Syntax CHR (Code) FormatFloat Converts a floating point value into a string. Syntax String = FormatFloat (Float, FormatString) FormatLong Converts a LONG value into a string. Syntax String = FormatLong (Long, FormatString) HEX Returns a hexadecimal string representation of an expression. Syntax Variable = HEX (Expression) HexToDec Converts a hexadecimal string to a float or integer. Syntax Variable = HexToDec (Expression) InStr Find the location of a string within a string. Syntax Variable = InStr (Start, SearchString, FilterString, SearchOption)

190

Section 10. CRBASIC Programming Instructions LTrim Returns a copy of a string with no leading spaces. Syntax variable = LTrim (TrimString) Left Returns a substring that is a defined number of characters from the left side of the original string. Syntax variable = Left (SearchString, NumChars) Len Returns the number of bytes in a string. Syntax Variable = Len (StringVar) LowerCase Converts a string to all lowercase characters. Syntax String = LowerCase (SourceString) Mid Returns a substring that is within a string. Syntax String = Mid (SearchString, Start, Length) Right Returns a substring that is a defined number of characters from the right side of the original string. Syntax variable = Right (SearchString, NumChars) RTrim Returns a copy of a string with no trailing spaces. Syntax variable = RTrim (TrimString) Replace Searches a string for a substring, and replace that substring with a different string. Syntax variable = Replace (SearchString, SubString, ReplaceString) StrComp Compares two strings by subtracting the characters in one string from the characters in another Syntax Variable = StrComp (String1, String2) SplitStr Splits out one or more strings or numeric variables from an existing string. Syntax SplitStr (SplitResult, SearchString, FilterString, NumSplit, SplitOption)

191

Section 10. CRBASIC Programming Instructions Trim Returns a copy of a string with no leading or trailing spaces. Syntax variable = Trim (TrimString) UpperCase Converts a string to all uppercase characters Syntax String = UpperCase (SourceString)

10.8 Clock Functions


Within the CR800, time is stored as integer seconds and nanoseconds into the second since midnight, January 1, 1990. ClockChange Returns milliseconds of clock change due to any setting of the clock that occurred since the last execution of ClockChange. Syntax variable = ClockChange ClockReport Sends the datalogger clock value to a remote datalogger in the PakBus network. Syntax ClockReport (ComPort, RouterAddr, PakBusAddr) ClockSet Sets the datalogger clock from the values in an array Syntax ClockSet (Source) DaylightSaving Defines daylight saving time. Determines if daylight saving time has begun or ended. Optionally advances or turns-back the datalogger clock one hour. Syntax variable = DaylightSaving (DSTSet, DSTnStart, DSTDayStart, DSTMonthStart, DSTnEnd, DSTDayEnd, DSTMonthEnd, DSTHour) DaylightSavingUS Determine if US daylight saving time has begun or ended. Optionally advance or turn-back the datalogger clock one hour. Syntax variable = DaylightSavingUS (DSTSet) IfTime Returns a number indicating True (-1) or False (0) based on the datalogger's real-time clock. Syntax
If (IfTime (TintoInt, Interval, Units)) Then -orVariable = IfTime (TintoInt, Interval, Units)

192

Section 10. CRBASIC Programming Instructions PakBusClock Sets the datalogger clock to the clock of the specified PakBus device. Syntax PakBusClock (PakBusAddr) RealTime Parses year, month, day, hour, minute, second, micro-second, day of week, and/or day of year from the datalogger clock. Syntax RealTime (Dest) SecsSince1990 Returns seconds elapsed since 1990. DataType is LONG. Used with GetRecord(). Syntax SecsSince1990 (date, option) TimeIntoInterval Returns a number indicating True (-1) or False (0) based on the datalogger's real-time clock. Syntax
Variable = TimeIntoInterval (TintoInt, Interval, Units) -orIf TimeIntoInterval (TintoInt, Interval, Units)

Timer Returns the value of a timer. Syntax variable = Timer (TimNo, Units, TimOpt)

10.9 Voice Modem Instructions


Note Refer to the Campbell Scientific voice modem manuals for complete information. DialVoice Defines the dialing string for a COM310 voice modem. Syntax DialVoice (DialString) VoiceBeg, EndVoice Mark the beginning and ending of voice code executed when the datalogger detects a ring from a voice modem. Syntax
VoiceBeg voice code to be executed EndVoice

VoiceHangup Hangs up the voice modem. Syntax VoiceHangup

193

Section 10. CRBASIC Programming Instructions VoiceKey Recognizes the return of characters 1 - 9, *, or #. VoiceKey is often used to add a delay, which provides time for the message to be spoken, in a VoiceBegin/EndVoice sequence. Syntax VoiceKey (TimeOut*IDH_Popup_VoiceKey_Timeout) VoiceNumber Returns one or more numbers (1 - 9) terminated by the # or * key. Syntax VoiceNumber (TimeOut*IDH_POPUP_VoiceKey_Timeout) VoicePhrases Provides a list of phrases for VoiceSpeak Syntax VoicePhrases (PhraseArray, Phrases) VoiceSetup Controls the hang-up of the COM310 voice modem. Syntax VoiceSetup (HangUpKey, ExitSubKey, ContinueKey, SecsOnLine, UseTimeout, CallOut) VoiceSpeak Defines the voice string that should be spoken by the voice modem. Syntax VoiceSpeak ( "String" + Variable + "String", Precision)

10.10 Custom Keyboard and Display Menus


Custom menus are constructed with the following syntax before the BeginProg instruction.
DisplayMenu ("MenuName", AddToSystem) MenuItem ("MenuItemName", Variable) MenuPick (Item1, Item2, Item3...) DisplayValue ("MenuItemName", tablename.fieldname) SubMenu (MenuName) MenuItem ("MenuItemName", Variable) EndSubMenu EndMenu BeginProg 'Program Body EndProg

DisplayMenu EndMenu Mark the beginning and ending of a custom menu. Syntax:
DisplayMenu ("MenuName", AddToSystem) 'menu definition EndMenu

194

Section 10. CRBASIC Programming Instructions MenuItem Defines the name and associated measurement value for an item in a custom menu. Syntax: MenuItem ("MenuItemName", Variable) MenuPick Creates a list of selectable options that can be used when editing a MenuItem value. Syntax: MenuPick (Item1, Item2, Item3...) DisplayValue Defines the name and associated data table value or variable for an item in a custom menu. Syntax: DisplayValue ("MenuItemName", Expression) SubMenu EndSubMenu Define the beginning and ending of a second level menu for a custom menu. Syntax:
DisplayMenu ("MenuName", 100) SubMenu ("MenuName") 'menu definition EndSubMenu EndMenu

10.11 Serial Input / Output


Read More! See Serial Input / Output (p. 195) and Serial I/O (p. 262). MoveBytes Moves binary bytes of data into a different memory location when translating big endian to little endian data. Syntax MoveBytes (Destination, DestOffset, Source, SourceOffset, NumBytes) SerialBrk Sends a break signal with a specified duration to a CR800 serial port. Syntax SerialBrk (Port, Duration) SerialClose Closes a communications port that was previously opened by SerialOpen. Syntax SerialClose (ComPort) SerialFlush Clears any characters in the serial input buffer. Syntax SerialFlush (ComPort)

195

Section 10. CRBASIC Programming Instructions SerialIn Sets up a communications port for receiving incoming serial data. Syntax SerialIn (Dest, ComPort, TimeOut, TerminationChar, MaxNumChars) SerialInBlock Stores incoming serial data. This function returns the number of bytes received. Syntax SerialInBlock (ComPort, Dest, MaxNumberBytes) SerialInChk Returns the number of characters available in the datalogger serial buffer. Syntax SerialInChk (ComPort) SerialInRecord Reads incoming serial data on a COM port and stores the data in a destination variable. Syntax SerialInRecord (COMPort, Dest, BeginWord, NBytes, EndWord, NBytesReturned, LoadNAN) SerialOpen Sets up a datalogger port for communication with a non-PakBus device. Syntax SerialOpen (ComPort, BaudRate, Format, TXDelay, BufferSize) SerialOut Transmits a string over a datalogger communication port. Syntax SerialOut (ComPort, OutString, WaitString, NumberTries, TimeOut) SerialOutBlock Send binary data out a communications port. Used to support a transparent serial talk-through mode. Syntax SerialOutBlock (ComPort, Expression, NumberBytes)

10.12 Peer-to-Peer PakBus Communications


Read More! See SECTION. PakBus Overview (p. 353) for more information. Also see Campbell Scientific PakBus Networking Guide available at www.campbellsci.com. Peer-to-peer PakBus instructions enable the datalogger to communicate with other PakBus devices. Instructions specify a COM port and a PakBus address. If the route to the device is not yet known, a direct route through the specified COM port is first tried. If the route is through a PakBus neighbor that must first be dialed, use DialSequence () to define and establish the route.

196

Section 10. CRBASIC Programming Instructions The PakBus Address is a variable that can be used in CRBASIC like any other variable. The ComPort parameter sets a default communications port when a route to the remote node is not known. Enter one of the following commands: ComRS-232 ComME Com310 ComSDC7 ComSDC8 ComSDC10 ComSDC11 Com1 (C1,C2) Com2 (C3,C4) Com32 - Com46 (using single-channel expansion peripheral. See APPENDIX. Serial Input Expansion Modules (p. 474)) Baud rate on asynchronous ports (ComRS-232, ComME, Com1, Com2, Com4, and Coms32 - 46) will default to 9600 unless set otherwise by SerialOpen (), or if the port is opened by an incoming PakBus packet at some other baud rate. TABLE. Asynchronous Port Baud Rates (p. 200) lists available baud rates.

In general, PakBus instructions write a result code to a variable indicating success or failure. Success sets the result code to 0. Otherwise, the result code increments. If communication succeeds but an error is detected, a negative result code is set. See CRBASIC Editor Help for an explanation of error codes. The Timeout parameter in these instructions is in units of 0.01 seconds. If 0 is used, then the default timeout defined by the time of the best route is used. Use PakBusGraph "Hop Metrics" to calculate this time. For instructions returning a result code, retries can be coded with CRBASIC logic as shown in the GetVariables example in CRBASIC EXAMPLE. Retries in PakBus Peer-to-Peer Communications (p. 201).

These communication instructions wait for a response or timeout before the program moves on to the next instruction. However, they can be used in a SlowSequence scan, which will not interfere with the execution of other program code. Optionally, the ComPort parameter can be negated, which will cause the instruction not to wait for a response or timeout. This will make the

197

Section 10. CRBASIC Programming Instructions instruction execute faster but any data that it retrieves and the result code is set when the communication is complete. AcceptDataRecords Sets up a CR800 to accept and store records from a remote PakBus datalogger. Syntax AcceptDataRecords (PakBusAddr, TableNo, DestTableName) Broadcast Sends a broadcast message to a PakBus network. Syntax Broadcast (ComPort, Message) ClockReport Sends the datalogger clock value to a remote datalogger in the PakBus network. Syntax ClockReport (ComPort, RouterAddr, PakBusAddr) DataGram Initializes a SerialServer / DataGram / PakBus application in the datalogger when a program is compiled. Syntax DataGram (ComPort, BaudRate, PakBusAddr, DestAppID, SrcAppID) DialSequence EndDialSequence Defines the code necessary to route packets to a PakBus device. Syntax
DialSequence (PakBusAddr) DialSuccess = DialModem (ComPort, DialString, ResponseString) EndDialSequence (DialSuccess)

GetDataRecord Retrieves the most recent record from a data table in a remote PakBus datalogger and stores the record in the CR800. Syntax GetDataRecord (ResultCode, ComPort, NeighborAddr, PakBusAddr, Security, Timeout, Tries, TableNo, DestTableName) Note CR200, CR510PB, CR10XPB, and CR23XPB dataloggers do not respond to a GetDataRecord request from other PakBus dataloggers. GetFile Gets a file from another PakBus datalogger. Syntax GetFile (ResultCode, ComPort, NeighborAddr, PakBusAddr, Security, TimeOut, "LocalFile", "RemoteFile")

198

Section 10. CRBASIC Programming Instructions GetVariables Retrieves values from a variable or variable array in a data table of a PakBus datalogger. Syntax GetVariables (ResultCode, ComPort, NeighborAddr, PakBusAddr, Security, TimeOut, "TableName", "FieldName", Variable, Swath) Network In conjunction with SendGetVariables, configures destination dataloggers in a PakBus network to send and receive data from the host. Syntax Network (ResultCode, Reps, BeginAddr, TimeIntoInterval, Interval, Gap, GetSwath, GetVariable, SendSwath, SendVariable) PakBusClock Sets the datalogger clock to the clock of the specified PakBus device. Syntax PakBusClock (PakBusAddr) Route Returns the neighbor address of (or the route to) a PakBus datalogger. Syntax variable = Route (PakBusAddr) RoutersNeighbors Returns a list of all PakBus routers and their neighbors known to the datalogger. Syntax RoutersNeighbors ( DestArray(MaxRouters, MaxNeighbors+1)) Routes Returns a list of known dynamic routes for a PakBus datalogger that has been configured as a router in a PakBus network. Syntax Routes (Dest) SendData Sends the most recent record from a data table to a remote PakBus device. Syntax SendData (ComPort, RouterAddr, PakBusAddr, DataTable) SendFile Sends a file to another PakBus datalogger. Syntax SendFile (ResultCode, ComPort, NeighborAddr, PakBusAddr, Security, TimeOut, "LocalFile", "RemoteFile")

199

Section 10. CRBASIC Programming Instructions SendGetVariables Sends an array of values to the host PakBus datalogger, and / or retrieve an array of data from the host datalogger. Syntax SendGetVariables (ResultCode, ComPort, RouterAddr, PakBusAddr, Security, TimeOut, SendVariable, SendSwath, GetVariable, GetSwath) SendTableDef Sends the table definitions from a data table to a remote PakBus device. Syntax SendTableDef (ComPort, RouterAddr, PakBusAddr, DataTable) SendVariables Sends value(s) from a variable or variable array to a data table in a remote datalogger. Syntax SendVariables (ResultCode, ComPort, RouterAddr, PakBusAddr, Security, TimeOut, "TableName", "FieldName", Variable, Swath) StaticRoute Defines a static route to a PakBus datalogger. Syntax StaticRoute (ComPort, NeighborAddr, PakBusAddr) TimeUntilTransmit The TimeUntilTransmit instruction returns the time remaining, in seconds, before communication with the host datalogger. Syntax TimeUntilTransmit

TABLE 40. Asynchronous Port Baud Rates


0 (autobaud) 300 1200 4800 9600 (default) 19200 38400 57600 115200 Prefix of (-) invokes autobaud but starting at X, e.g., "-1200" directs the port to first try communications at 1200 baud but will autobaud if not successful.

200

Section 10. CRBASIC Programming Instructions

CRBASIC EXAMPLE 32. Programming for retries in PakBus peer-to-peer communications.


For I = 1 to 3 GetVariables(ResultCode,.) if ResultCode = 0 Exit For Next

10.13 Variable Management


ArrayIndex Returns the index of a named element in an array. Syntax ArrayIndex (Name) ArrayLength Returns the length of a variable array. In the case of variables of type String, the total number of characters that the array of strings can hold is returned. Syntax ArrayLength (Variable) FindSpa Searches a source array for a value and returns the value's position in the array. Syntax FindSpa (SoughtLow, SoughtHigh, Step, Source) Move Moves the values in a range of variables into different variables or fills a range of variables with a constant. Syntax Move (Dest, DestReps, Source, SourceReps)

10.14 File Management


Commands to access and manage files stored in CR800 memory. CalFile Stores variable data, such as sensor calibration data, from a program into a nonvolatile CR800 memory file. CalFile pre-dates and is not used with the FieldCal function. Syntax CalFile (Source/Dest, NumVals, "Device:filename", Option) FileCopy Copies a file from one drive to another. Syntax FileCopy (FromFileName, ToFileName) FileClose Closes a FileHandle created by FileOpen. Syntax FileClose (FileHandle)

201

Section 10. CRBASIC Programming Instructions FileEncrypt Performs an encrypting algorithm on the file. Allows distribution of CRBASIC files without exposing source code. Syntax Boolean Variable = FileEncrypt (FileName) FileList Returns a list of files that exist on the specified drive. Syntax FileList (Drive,DestinationArray) FileManage Manages program files from within a running datalogger program. Syntax FileManage ("Device: FileName", Attribute) FileOpen Opens an ASCII text file or a binary file for writing or reading. Syntax FileHandle = FileOpen ("FileName", "Mode", SeekPoint) FileRead Reads a file referenced by FileHandle and stores the results in a variable or variable array. Syntax FileRead (FileHandle, Destination, Length) FileReadLine Reads a line in a file referenced by a FileHandle and stores the result in a variable or variable array. Syntax FileReadLine (FileHandle, Destination, Length) FileRename Changes the name of file on a CR800 drive. Syntax FileRename (drive:OldFileName, drive:NewFileName) FileSize Returns the size of the file in the previously opened file referenced by the FileHandle parameter. Syntax FileSize (FileHandle) FileTime Returns the time the file specified by the FileHandle was created. Syntax Variable = FileTime (FileHandle) FileWrite Writes ASCII or binary data to a file referenced in the program by FileHandle. Syntax FileWrite (FileHandle, Source, Length)

202

Section 10. CRBASIC Programming Instructions Include Inserts code from a file (Filename) at the position of the Include () instruction at compile time. Include cannot be nested. Syntax Include ("Device:Filename") NewFile Determines if a file stored on the datalogger has been updated since the instruction was last run. Typically used with image files. Syntax NewFile (NewFileVar, "FileName") RunProgram Runs a datalogger program file from the active program file. Syntax RunProgram ("Device:FileName", Attrib)

10.15 Data Table Access and Management


Commands to access and manage data stored in data tables, including Public and Status tables. FileMark Inserts a filemark into a data table. Syntax FileMark (TableName) GetRecord Retrieves one record from a data table and stores the results in an array. May be used with SecsSince1990 (). Syntax GetRecord (Dest, TableName, RecsBack) ResetTable Used to reset a data table under program control. Syntax ResetTable (TableName) SetStatus Changes the value for a setting in the datalogger Status table. Syntax SetStatus ("FieldName", Value) TableName.EventCount Returns the number of data storage events that have occurred for an event driven data table. Syntax TableName.EventCount (1,1) TableName.FieldName Accesses a specific field from a record in a table Syntax TableName.FieldName (FieldNameIndex, RecordsBack)

203

Section 10. CRBASIC Programming Instructions TableName.Output Determine if data was written to a specific DataTable the last time the DataTable was called. Syntax TableName.Output (1,1) TableName.Record Determines the record number of a specific DataTable record. Syntax TableName.Record (1,n) TableName.TableFull Indicates whether a fill and stop table is full or whether a ring-mode table has begun overwriting its oldest data. Syntax TableName.TableFull (1,1) TableName.TableSize Returns the number of records allocated for a data table Syntax TableName.TableSize (1,1) TableName.TimeStamp Returns the time into an interval or a time stamp for a record in a specific DataTable. Syntax TableName.TimeStamp (m,n) WorstCase Saves one or more "worst case" data storage events into separate tables. Used in conjunction with DataEvent. Syntax WorstCase (TableName, NumCases, MaxMin, Change, RankVar)

10.16 Information Services


Email, IP SMS, and Web Page Services. These services are available only when the CR800 is used with network link devices that have the PPP/IP key enabled, i.e., when the CR800 IP stack is used. See APPENDIX. Network Links (p. 478). Read More! See SECTION. Information Services (p. 225). DHCPRenew Restarts DHCP on the ethernet interface. Syntax DHCPRenew

204

Section 10. CRBASIC Programming Instructions EMailRecv Polls an SMTP server for email messages and store the message portion of the email in a string variable. Syntax variable = EMailRecv ("ServerAddr", "ToAddr", "FromAddr", "Subject", Message, "Authen", "UserName", "PassWord", Result) EMailSend Sends an email message to one or more email addresses via an SMTP server. Syntax variable = EMailSend ("ServerAddr", "ToAddr", "FromAddr", "Subject", "Message", "Attach", "UserName", "PassWord", Result)

FTPClient Sends or retrieves a file via FTP. Syntax Variable = FTPClient ("IPAddress", "User", "Password", "LocalFileName", "RemoteFileName", PutGetOption) HTTPOut Defines a line of HTML code to be used in a datalogger generated HTML file. Syntax
WebPageBegin ("WebPageName", HTTPOut ("<p>html string additional string to HTTPOut ("<p>html string additional string to WebPageEnd WebPageCmd) to output " + variable + " output</p>") to output " + variable + " output</p>")

IPTrace Writes IP debug messages to a string variable. Syntax IPTrace (Dest) NetworkTimeProtocol Synchronizes the datalogger clock with an Internet time server. Syntax variable = NetworkTimeProtocol (NTPServer, NTPOffset, NTPMaxMSec) PingIP Pings IP address. Syntax variable = PingIP (IPAddress, Timeout) PPPOpen Establishes a PPP connection with a server. Syntax variable = PPPOpen

205

Section 10. CRBASIC Programming Instructions PPPClose Closes an opened PPP connection with a server. Syntax variable = PPPClose TCPClose Closes a TCPIP socket that has been set up for communication. Syntax TCPClose (TCPSocket) TCPOpen Sets up a TCP/IP socket for communication. Syntax TCPOpen (IPAddr, TCPPort, TCPBuffer) UDPDataGram Sends packets of information via the UDP communications protocol. Syntax UDPDataGram(IPAddr, UDPPort, SendVariable, SendLength, RcvVariable, Timeout) UDPOpen Opens a port for transferring UDP packets. Syntax UDPOpen (IPAddr, UDPPort, UDPBuffsize) WebPageBegin WebPageEnd Declare a web page that is displayed when a request for the defined HTML page comes from an external source. Syntax
WebPageBegin ("WebPageName", HTTPOut ("<p>html string additional string to HTTPOut ("<p>html string additional string to WebPageEnd WebPageCmd) to output " + variable + " output</p>") to output " + variable + " output</p>")

10.17 Modem Control


Read More! For help on datalogger initiated telecommunication, see SECTION. Initiating Telecommunications (p. 350). DialModem Sends a modem dial string out a datalogger communications port. Syntax DialModem (ComPort, BaudRate, DialString, ResponseString) ModemCallback Initiates a call to a computer via a phone modem. Syntax ModemCallback (Result, COMPort, BaudRate, Security, DialString, ConnectString, Timeout, RetryInterval, AbortExp)

206

Section 10. CRBASIC Programming Instructions ModemHangup EndModemHangup Enclose code that should be run when a COM port hangs up communication. Syntax
ModemHangup (ComPort) instructions to be run upon hang-up EndModemHangup

10.18 SCADA
Read More! See SECTION. DNP3 (p. 365) and SECTION. Modbus (p. 368). Modbus and DNP3 instructions run a process tasks. DNP Sets up a CR800 as a DNP slave (outstation/server) device. Third parameter is optional. Syntax DNP (ComPort, BaudRate, DisableLinkVerify) DNPUpdate Determines when the DNP slave will update arrays of DNP elements. Specifies the address of the DNP master to send unsolicited responses. Syntax DNPUpdate (DNPAddr) DNPVariable Sets up the DNP implementation in a DNP slave CR800. Syntax DNPVariable (Array, Swath, Object, Variation, Class, Flag, Event Expression, Number of Events) ModBusMaster Sets up a datalogger as a ModBus master to send or retrieve data from a ModBus slave. Syntax ModBusMaster (ResultCode, ComPort, BaudRate, ModBusAddr, Function, Variable, Start, Length, Tries, TimeOut) ModBusSlave Sets up a datalogger as a ModBus slave device. Syntax ModBusSlave (ComPort, BaudRate, ModBusAddr, DataVariable, BooleanVariable)

10.19 Calibration Functions


Calibrate Used to force calibration of the analog channels under program control. Syntax Calibrate (Dest, Range) (parameters are optional)

207

Section 10. CRBASIC Programming Instructions FieldCal Sets up the datalogger to perform a calibration on one or more variables in an array. Syntax FieldCal (Function, MeasureVar, Reps, MultVar, OffsetVar, Mode, KnownVar, Index, Avg) FieldCalStrain Sets up the datalogger to perform a zero or shunt calibration for a strain measurement. Syntax FieldCalStrain (Function, MeasureVar, Reps, GFAdj, ZeromV/V, Mode, KnownRS, Index, Avg, GFRaw, uStrainDest) LoadFieldCal Loads values from the FieldCal file into variables in the datalogger. Syntax LoadFieldCal (CheckSig) NewFieldCal Triggers storage of FieldCal values when a new FieldCal file has been written. Syntax
DataTable (TableName, NewFieldCal, Size) SampleFieldCal EndTable

SampleFieldCal Stores the values in the FieldCal file to a data table. Syntax
DataTable (TableName, NewFieldCal, Size) SampleFieldCal EndTable

10.20 Satellite Systems


Instructions for GOES, ARGOS, INMARSAT-C, OMNISAT. Refer to satellite transmitter manuals available at www.campbellsci.com.

10.20.1 Argos
ArgosData Specifies the data to be transmitted to the Argos satellite. Syntax ArgosData (ResultCode, ST20Buffer, DataTable, NumRecords, DataFormat) ArgosDataRepeat Sets the repeat rate for the ArgosData instruction. Syntax ArgosDataRepeat (ResultCode, RepeatRate, RepeatCount, BufferArray)

208

Section 10. CRBASIC Programming Instructions ArgosError Sends a "Get and Clear Error Message" command to the transmitter. Syntax ArgosError (ResultCode, ErrorCodes) ArgosSetup Sets up the datalogger for transmitting data via an Argos satellite. Syntax ArgosSetup (ResultCode, ST20Buffer, DecimalID, HexadecimalID, Frequency) ArgosTransmit Initiates a single transmission to an Argos satellite when the instruction is executed. Syntax ArgosTransmit (ResultCode, ST20Buffer)

10.20.2 GOES
GOESData Sends data to a CSI GOES satellite data transmitter. Syntax GOESData (Dest, Table, TableOption, BufferControl, DataFormat) GOESGPS Stores GPS data from the satellite into two variable arrays. Syntax GOESGPS (GoesArray1(6), GoesArray2(7)) GOESSetup Programs the GOES transmitter for communication with the satellite. Syntax GOESSetup (ResultCode, PlatformID, MsgWindow, STChannel, STBaud, RChannel, RBaud, STInterval, STOffset, RInterval) GOESStatus Requests status and diagnostic information from a CSI GOES satellite transmitter. Syntax GOESStatus (Dest, StatusCommand)

10.20.3 OMNISAT
OmniSatData Sends a table of data to the OMNISAT transmitter for transmission via the GOES or METEOSAT satellite. Syntax OmniSatData (OmniDataResult, TableName, TableOption, OmniBufferCtrl, DataFormat)

209

Section 10. CRBASIC Programming Instructions OmniSatRandomSetup Sets up the OMNISAT transmitter to send data over the GOES or METEOSAT satellite at a random transmission rate. Syntax OmniSatRandomSetup (ResultCodeR, OmniPlatformID, OmniChannel, OmniBaud, RInterval, RCount) OmniSatStatus Queries the transmitter for status information. Syntax OmniSatStatus (OmniStatusResult) OmniSatSTSetup Sets up the OMNISAT transmitter to send data over the GOES or METEOSAT satellite at a self-timed transmission rate. Syntax OmniSatSTSetup (ResultCodeST, ResultCodeTX, OmniPlatformID, OmniMsgWindow, OmniChannel, OmniBaud, STInterval, STOffset)

10.20.4 INMARSAT-C
INSATData Sends a table of data to the OMNISAT-I transmitter for transmission via the INSAT-1 satellite. Syntax INSATData (ResultCode, TableName, TX_Window, TX_Channel) INSATSetup Configures the OMNISAT-I transmitter for sending data over the INSAT-1 satellite. Syntax INSATSetup (ResultCode, PlatformID, RFPower) INSATStatus Queries the transmitter for status information. Syntax INSATStatus (ResultCode)

10.21 User Defined Functions


Function / EndFunction Creates a user defined function. Syntax
Function (optional parameters) optional As DataType Return (expression) (optional) ExitFunction (optional) EndFunction

210

Section 11. Programming Resource Library


This library of notes and CRBASIC code covers only a narrow selection of CR800 applications. Consult a Campbell Scientific applications engineer if other resources are needed.

11.1 Field Calibration of Linear Sensors (FieldCal)


Calibration increases accuracy of a measurement device by adjusting its output, or the measurement of its output, to match independently verified quantities. Adjusting the output signal of the sensor is preferred, but not always possible or practical. By using FieldCal() or FieldCalStrain() in the CR800 program, a linear output can be calibrated post-measurement by adjusting multiplier and offset. Once programmed in the CR800, calibration functions are accessed through a software wizard (LoggerNet / RTDAQ | Datalogger | Calibration Wizard) or through a numeric monitor procedure using optional keyboard display or software. The numeric monitor procedure, though somewhat arcane, is utilized in the examples below to illustrate calibration functions and procedures. Note Calibration wizards in RTDAQ or LoggerNet 4.0 support FieldCal() and FieldCalStrain().

11.1.1

CAL Files
Calibration data are stored automatically in CAL files in CR800 memory, which become the source for calibration factors when requested with the LoadFieldCal instruction. A CAL file is created automatically on the same CR800 memory drive and given the same name (with .cal extension) as the program that creates and uses it, e.g., CPU:MyProg.CR8 generates CPU:MyProg.cal. CAL files are created if a program using FieldCal () or FieldCalStrain () does not find an existing compatible CAL file. Files are updated with each successful calibration and contain multiplier and offset factors and information for the LoggerNet / RTDAQ Calibration Wizard. Only if the user creates a data storage output table in the CR800 program will a calibration history be maintained. Note CAL files created by FieldCal () and FieldCalStrain () differ from files created by the CalFile () instruction (SECTION. File Management (p. 201)).

211

Section 11. Programming Resource Library

11.1.2

CRBASIC Programming
Field calibration functionality is utilized through either: FieldCal()-the principal instruction used for non-strain gage type sensors. For introductory purposes, use of one FieldCal() instruction and a unique set of FieldCal() variables for each sensor to be calibrated is recommended. Use of variable arrays is permitted for more advanced applications. or, FieldCalStrain()-the principal instruction used for strain gages measuring microstrain. Use of one FieldCalStrain() instruction and a unique set of FieldCalStrain() variables for each sensor to be calibrated is recommended. Use of variable arrays is permitted for more advanced applications, with two supporting instructions: LoadFieldCal()-an optional instruction that evaluates the validity of, and loads values from a CAL file. SampleFieldCal-an optional data storage output instruction that writes the latest calibration values to a data table (not to the CAL file). and a reserved Boolean variable: NewFieldCal-a reserved Boolean variable under CR800 control used to optionally trigger a data storage output table one time after a calibration has succeeded. See CRBASIC Editor Help for operational details on CRBASIC instructions.

11.1.3

Calibration Wizard Overview


The LoggerNet / RTDAQ Field Calibration Wizard steps through the calibration process by performing the mode variable changes and measurements automatically. The user sets the sensor to known values and inputs those values into the Wizard. When a program with FieldCal ()instructions is running, select LoggerNet / RTDAQ | Datalogger | Calibration Wizard" to start the wizard. A list of measurements utilized in any FieldCal instruction in the program is shown. For more information on using the calibration wizard, consult LoggerNet or RTDAQ Help.

11.1.4

Manual Calibration Overview


Manual calibration is presented here to introduce the function of FieldCal() and FieldCalStrain() features in the CR800. This section is not a comprehensive treatment of field calibration topics. The most comprehensive resource to date covering use of FieldCal() and FieldCalStrain() is RTDAQ software documentation.

212

Section 11. Programming Resource Library Manual calibration is accomplished by changing the value of the FieldCal() or FieldCalStrain() mode variable through the optional keyboard display or LoggerNet / PC400 / RTDAQ / PC200W numeric monitor. The datalogger does not check for out of bounds values in mode variables. Valid mode variable entries are "1" or "4".

11.1.4.1 Single-point Calibrations (zero or offset)


Use the following general procedure to adjust offsets (y-intercepts) with singlepoint calibrations: 1. Use a separate FieldCal() instruction and separate related variables for each sensor to be calibrated. 2. Ensure mode variable = 0 or 6 before starting. 3. Place the sensor into zeroing or offset condition. 4. Set KnownVar variable to the offset or zero value. 5. Set mode variable = 1 to start calibration.
Mode Variable
> 0 and 6 <0 2 6

Interpretation
calibration in progress calibration encountered an error calibration in process calibration complete.

11.1.4.2 Two-point Calibrations (multiplier / gain)


Use the following general procedure to adjust multipliers (slopes) and offsets (yintercepts) with two-point calibrations: 1. Use a separate FieldCal() instruction and separate related variables for each sensor to be calibrated. 2. Ensure mode variable = 0 or 6 before starting. a. b. If Mode variable > 0 and 6 then calibration is in progress. If Mode variable < 0 then calibration encountered an error.

3. Place sensor into first known point condition. 4. Set KnownVar variable to first known point. 5. Set Mode variable = 1 to start first part of calibration. a. b. Mode variable = 2 during the first point calibration. Mode variable = 3 when the first point is completed.

213

Section 11. Programming Resource Library 6. Place sensor into second known point condition. 7. Set KnownVar variable to second known point. 8. Set Mode variable = 4 to start second part of calibration. a. b. Mode variable = 5 during second point calibration. Mode variable = 6 when calibration is complete.

11.1.5

FieldCal() Demonstration Programs


FieldCal() has the following calibration options: Zero Offset Two Point Slope and Offset Two Point Slope Only Demonstration programs are provided as a way to become familiar with the FieldCal() features at the test bench without actual sensors. Sensor signals are simulated by a CR800 excitation channel. To reset tests, go to LoggerNet / PC400 / RTDAQ / PC200W | Datalogger | File Control and delete .cal files, then send the demonstration program again to the CR800.

11.1.5.1 Zero (Option 0)


Case: A sensor measures the relative humidity (RH) of air. Multiplier is known to be stable, but sensor offset drifts and requires regular zeroing in a desiccated chamber. The following procedure zeros the RH sensor to obtain the calibration report shown. Use the optional keyboard display or software numeric monitor to change variable values as directed. TABLE 41. Calibration Report for Air RH Sensor Parameter
mV Output Desiccated Chamber Multiplier Offset Reading

Parameter at Deployment
1000 0% .05 % / mV -50 % 0%

Parameter at 30 Day Service


1050 0% .05 % / mV -52.5 % 0%

214

Section 11. Programming Resource Library

1. Send CRBASIC EXAMPLE. FieldCal Zero Demonstration (p. 215) to the CR800. 2. To simulate the RH sensor in deployment calibration conditions (desiccated chamber), place a jumper wire between channels VX1/EX1 and SE6 (3L). Set variable SignalmV to 1000. Set variable KnownRH to 0.0. 3. To simulate the deployment calibration, change the value in variable CalibMode to 1 to start calibration. When CalibMode increments to 6, zero calibration is complete. Calibrated offset will equal -50% at this stage of this example.

FIGURE 64. Zero (Option 0) 1. To continue this example and simulate a zero drift condition, change variable SignalmV to 1050. 2. To simulate 30 day service calibration conditions (desiccated chamber), set variable KnownRH to 0.0. Change the value in variable CalibMode to 1 to start calibration. When CalibMode increments to 6, 30 day service zero calibration is complete. Calibrated offset will equal -52.5%.

CRBASIC EXAMPLE 33. FieldCal zeroing demonstration program


'Jumper VX1/EX1 to SE6(3L) to simulate a sensor Public SignalmV Public KnownRH Public CalMode Public Multiplier Public Offset Public RH 'Excitation mV Output 'Known Relative Humidity 'Calibration Trigger 'Multiplier (Starts at .05 mg / liter / mV, 'does not change) 'Offset (Starts at zero, not changed) 'Measured Relative Humidity

'Data Storage Output of Calibration Data -- stored whenever a calibration occurs DataTable(CalHist,NewFieldCal,200) SampleFieldCal EndTable BeginProg Multiplier = .05 Offset = 0 LoadFieldCal(true)

'Load the CAL File, if possible

215

Section 11. Programming Resource Library

Scan(100,mSec,0,0) 'Simulate measurement by exciting channel VX1/EX1 ExciteV(Vx1,SignalmV,0) 'Make the calibrated measurement VoltSE(RH,1,mV2500,6,1,0,250,Multiplier,Offset) 'Perform a calibration if CalMode = 1 FieldCal(0,RH,1,Multiplier,Offset,CalMode,KnownRH,1,30) 'If there was a calibration, store it into a data table CallTable(CalHist) NextScan EndProg

11.1.5.2 Offset (Option 1)


Case: A sensor measures the salinity of water. Multiplier is known to be stable, but sensor offset drifts and requires regular offset correction using a standard solution. The following procedure offsets the measurement to obtain the calibration report shown. TABLE 42. Calibration Report for Salinity Sensor Parameter
mV Output Standard Solution Multiplier Offset Reading

Parameter at Deployment
1350 mV 30 mg/l .05 mg/l/mV -37.50 mg/l 30 mg/l

Parameter at 7 Day Service


1345 mV 30 mg/l .05 mg/l/mV -37.23 mg/l 30 mg/l

1. Send the program in CRBASIC EXAMPLE. FieldCal Offset Demo Program (p. 217) to the CR800. 2. To simulate the salinity sensor in deployment calibration conditions (30 mg/l standard solution), place a jumper wire between channels VX1 (VX1 (EX1)) and SE6 (3L). Set variable SignalmV to 1350. Set variable KnownSalt to 30.0. 3. To simulate the deployment calibration, change the value in variable CalibMode to 1 to start calibration. When CalibMode increments to 6, offset calibration is complete. Calibrated offset will equal -37.48 mg/l at this stage of this example. 4. To continue this example and simulate an offset drift condition, change variable SignalmV to 1345. 5. To simulate 7 day service calibration conditions (30 mg/l standard solution), set variable KnownSalt to 30.0. Change the value in variable CalibMode to 1 to start calibration. When CalibMode increments to 6, 7 day service offset calibration is complete. Calibrated offset will equal -37.23 mg/l.

216

Section 11. Programming Resource Library

CRBASIC EXAMPLE 34. FieldCal Offset Demo Program


'Jumper VX1/EX1 to SE6(3L) to simulate a sensor Public SignalmV Public KnownSalt Public CalMode Public Multiplier Public Offset Public SaltContent 'Excitation mV Output 'Known Salt Concentration 'Calibration Trigger 'Multiplier (Starts at .05 mg / liter / mV, 'does not change) 'Offset (Starts at zero, not changed) 'Salt Concentration

'Data Storage Output of Calibration Data -- stored whenever a calibration occurs DataTable(CalHist,NewFieldCal,200) SampleFieldCal EndTable BeginProg Multiplier = .05 Offset = 0 LoadFieldCal(true) Scan(100,mSec,0,0) 'Simulate measurement by exciting channel VX1/EX1 ExciteV(Vx1,SignalmV,0) 'Make the calibrated measurement VoltSE(SaltContent,1,mV2500,6,1,0,250,Multiplier,Offset) 'Perform a calibration if CalMode = 1 FieldCal(1,SaltContent,1,Multiplier,Offset,CalMode,KnownSalt,1,30) 'If there was a calibration, store it into a data table CallTable(CalHist) NextScan EndProg 'Load the CAL File, if possible

11.1.5.3 Two Point Slope and Offset (Option 2)


Case: A meter measures the volume of water flowing through a pipe. Multiplier and offset are known to drift, so a two-point calibration is required periodically at known flow rates. The following procedure adjusts multiplier and offset to correct for meter drift as shown in the calibration report below. Note that the flow meter outputs milliVolts inversely proportional to flow. TABLE 43. Calibration Report for Y Flow Meter Parameter
Output @ 30 l/s Output @ 10 l/s Multiplier Offset

Parameter at Deployment
300 mV 550 mV -0.0799 l/s/mV 53.90 l

Parameter at 7 Day Service


285 mV 522 mV -.0841 l/s/mV 53.92 l

217

Section 11. Programming Resource Library 1. Send the program in CRBASIC EXAMPLE. FieldCal multiplier and offset demonstration program (p. 218) to the CR800. 2. To simulate the flow sensor, place a jumper wire between channels VX1/EX1 and SE6 (3L). 3. Simulate deployment calibration conditions (output @ 30 l/s = 300 mV, output @ 10 l/s = 550 mV) in two stages. a. b. c. d. Set variable SignalmV to 300. Set variable KnownFlow to 30.0. Start the deployment calibration by setting variable CalibMode = 1. When CalibMode increments to 3, set variable SignalmV to 550. Set variable KnownFlow to 10. Resume the deployment calibration by setting variable CalibMode = 4

4. When variable CalibMode increments to 6, the deployment calibration is complete. Calibrated multiplier is -0.08. Calibrated offset is 53.978. 5. To continue this example, simulate a two stage 7 day service calibration wherein both multiplier and offset drift (output @ 30 l/s = 285 mV, output @ 10 l/s = 522 mV). a. b. c. d. Set variable SignalmV to 285. Set variable KnownFlow to 30.0. Start the 7 day service calibration by setting variable CalibMode = 1. When CalibMode increments to 3, set variable SignalmV to 522. Set variable KnownFlow to 10. Resume the 7 day service calibration by setting variable CalibMode = 4

6. When variable CalibMode increments to 6, the 7 day service calibration is complete. Calibrated multiplier is -0.0842. Calibrated offset is 53.896.

CRBASIC EXAMPLE 35. FieldCal multiplier and offset demonstration program


'Jumper VX1/EX1 to SE6(3L) to simulate a sensor Public SignalmV Public KnownFlow Public CalMode Public Multiplier Public Offset Public WaterFlow 'Excitation mV Output 'Known Water Flow 'Calibration Trigger 'Sensitivity 'Offset (Starts at zero, not changed) 'Water Flow

218

Section 11. Programming Resource Library

'Data Storage Output of Calibration Data stored whenever a calibration occurs DataTable(CalHist,NewFieldCal,200) SampleFieldCal EndTable BeginProg Multiplier = 1 Offset = 0 LoadFieldCal(true) Scan(100,mSec,0,0) 'Simulate measurement by exciting channel VX1/EX1 ExciteV(Vx1,SignalmV,0) 'Make the calibrated measurement VoltSE(WaterFlow,1,mV2500,6,1,0,250,Multiplier,Offset) 'Perform a calibration if CalMode = 1 FieldCal(2,WaterFlow,1,Multiplier,Offset,CalMode,KnownFlow,1,30) 'If there was a calibration, store it into a data table CallTable(CalHist) NextScan EndProg 'Load the CAL File, if possible

11.1.5.4 Two Point Slope Only (Option 3)


Some measurement applications do not require determination of offset. Wave form analysis, for example, may only require relative data to characterize change. Case: A soil water sensor is to be use to detect a pulse of water moving through soil. To adjust the sensitivity of the sensor, two soil samples, with volumetric water contents of 10 and 35, will provide two known points. The following procedure sets the sensitivity of a simulated soil water content sensor. 1. CRBASIC EXAMPLE. FieldCal Multiplier Only Demonstration Program (p. 220) to the CR800. 2. To simulate the soil water sensor, place a jumper wire between channels VX1/EX1 and SE6 (3L). 3. Simulate deployment calibration conditions (output @ 10% = 175 mV, output @ 35% = 700 mV) in two stages. a. b. c. Set variable SignalmV to 175. Set variable KnownWC to 10.0. Start the calibration by setting variable CalibMode = 1. When CalibMode increments to 3, set variable SignalmV to 700. Set variable KnownWC to 35.

219

Section 11. Programming Resource Library d. Resume the calibration by setting variable CalibMode = 4

4. When variable CalibMode increments to 6, the calibration is complete. Calibrated multiplier is 0.0476.

CRBASIC EXAMPLE 36. FieldCal multiplier only demonstration program


'Jumper VX1/EX1 to SE6(3L) to simulate a sensor Public mV Public KnownWC Public CalMode Public Multiplier Public Offset Public RelH2OContent 'Excitation mV Output 'Known Water Content 'Calibration Trigger 'Sensitivity 'Offset (Starts at zero, not changed) 'Relative Water Content

'Data Storage Output of Calibration Data stored whenever a calibration occurs DataTable(CalHist,NewFieldCal,200) SampleFieldCal EndTable BeginProg Multiplier = 1 Offset = 0 KnownWC = 0 LoadFieldCal(true) Scan(100,mSec,0,0) 'Simulate measurement by exciting channel VX1/EX1 ExciteV(Vx1,mV,0) 'Make the calibrated measurement VoltSE(RelH2OContent,1,mV2500,6,1,0,250,Multiplier,Offset) 'Perform a calibration if CalMode = 1 FieldCal(3,RelH2OContent,1,Multiplier,Offset,CalMode,KnownWC,1,30) 'If there was a calibration, store it into a data table CallTable(CalHist) NextScan EndProg 'Load the CAL File, if possible

11.1.6

FieldCalStrain() Demonstration Program


Strain gage systems consist of one or more strain gages, a resistive bridge in which the gage resides, and a measurement device such as the CR800 datalogger. The FieldCalStrain() instruction facilitates shunt calibration of strain gage systems, and is designed exclusively for strain applications wherein microstrain is the unit of measure. The FieldCal() instruction (SECTION. FieldCal() Demonstration Programs (p. 214)) is typically used in nonmicrostrain applications. Shunt calibration of strain gage systems is common practice. However, the technique provides many opportunities for misapplication and misinterpretation.

220

Section 11. Programming Resource Library This section is not intended to be a primer on shunt calibration theory, but only to introduce use of the technique with the CR800 datalogger. Campbell Scientific strongly urges users to study shunt calibration theory from other sources. A thorough treatment of strain gages and shunt calibration theory is available from Vishay at: http://www.vishay.com/brands/measurements_group/guide/indexes/tn_index.ht m Campbell Scientific applications engineers also have resources that may assist users with strain gage applications. FieldCalStrain() Shunt Calibration Concepts: 1. Shunt calibration does not calibrate the strain gage itself. 2. Shunt calibration does compensate for long leads and non-linearity in the resistive bridge. Long leads reduce sensitivity because of voltage drop. FieldCalStrain() uses the known value of the shunt resistor to adjust the gain (multiplier / span) to compensate. The gain adjustment (S) is incorporated by FieldCalStrain() with the manufacturer's gage factor (GF), becoming the adjusted gage factor (GFadj), which is then used as the gage factor in StrainCalc(). GF is stored in the CAL file and continues to be used in subsequent calibrations. Non-linearity of the bridge is compensated for by selecting a shunt resistor with a value that best simulates a measurement near the range of measurements to be made. Strain gage manufacturers typically specify and supply a range of resistors available for shunt calibration. 3. Shunt calibration verifies the function of the CR800. 4. The zero function of FieldCalStrain() allows the user to set a particular strain as an arbitrary zero, if desired. Zeroing is normally done after the shunt cal. Zero and shunt options can be combined through a single CR800 program. The following program is provided to demonstrate use of FieldCalStrain() features. If a strain gage configured as shown in FIGURE. Quarter Bridge Strain Gage Schematic (p. 222) is not available, strain signals can be simulated by building the simple circuit, substituting a 1000 potentiometer for the strain gage. To reset calibration tests, go to datalogger support software (p. 417) File Control and delete .cal files, then send the demonstration program again to the CR800. Case: A 1000 strain gage is placed into a resistive bridge at position R1. The resulting circuit is a quarter bridge strain gage with alternate shunt resistor (Rc) positions shown. Gage specifications indicate that the gage factor is 2.0, and that with a 249 k shunt, measurement should be about 2000 microstrain. Send Program CRBASIC EXAMPLE. FieldCalStrain() Calibration Demo (p. 222) to a CR800 datalogger.

221

Section 11. Programming Resource Library

FIGURE 65. Quarter Bridge Strain Gage Schematic with RC Resistor Shunt

CRBASIC EXAMPLE 37. FieldCalStrain() Calibration Demonstration


'Program to measure quarter bridge strain gage 'Measurements Public Raw_mVperV Public MicroStrain 'Variables that are arguments in the Zero Function Public Zero_Mode Public Zero_mVperV 'Variables that are arguments in the Shunt Function Public Shunt_Mode Public KnownRes Public GF_Adj Public GF_Raw '----------------------------- Tables ---------------------------DataTable(CalHist,NewFieldCal,50) SampleFieldCal EndTable

222

Section 11. Programming Resource Library

'//////////////////////////// PROGRAM //////////////////////////// BeginProg 'Set Gage Factors GF_Raw = 2.1 GF_Adj = GF_Raw 'The adj Gage factors are used in the calculation of uStrain 'If a calibration has been done, the following will load the zero or 'Adjusted GF from the Calibration file LoadFieldCal(True) Scan(100,mSec,100,0) 'Measure Bridge Resistance BrFull(Raw_mVperV,1,mV25,1,Vx1,1,2500,True ,True ,0,250,1.0,0) 'Calculate Strain for 1/4 Bridge (1 Active Element) StrainCalc(microStrain,1,Raw_mVperV,Zero_mVperV,1,GF_Adj,0) 'Steps (1) & (3): Zero Calibration 'Balance bridge and set Zero_Mode = 1 in numeric monitor. Repeat after 'shunt calibration. FieldCalStrain(10,Raw_mVperV,1,0,Zero_mVperV,Zero_Mode,0,1,10,0 ,microStrain) 'Step (2) Shunt Calibration 'After zero calibration, and with bridge balanced (zeroed), set 'KnownRes = to gage resistance (resistance of gage at rest), then set 'Shunt_Mode = 1. When Shunt_Mode increments to 3, position shunt resistor 'and set KnownRes = shunt resistance, then set Shunt_Mode = 4. FieldCalStrain(13,MicroStrain,1,GF_Adj,0,Shunt_Mode,KnownRes,1,10,GF_Raw,0) CallTable CalHist Next Scan EndProg

11.1.6.1 Quarter Bridge Shunt (Option 13)


With CRBASIC EXAMPLE. FieldCalStrain() Calibration Demo (p. 222) sent to the CR800, and with the strain gage stable, use the optional keyboard display or software numeric monitor to change the value in variable KnownRes to the nominal resistance of the gage, 1000 as shown in FIGURE. Strain Gage Shunt Calibration Started (p. 224). Set Shunt_Mode to 1 to start the two-point shunt calibration. When Shunt_Mode increments to 3, the first step is complete. To complete the calibration, shunt R1 with the 249 k resistor. Set variable KnownRes to 249,000. As shown in FIGURE. Strain Gage Shunt Calibration Finished (p. 224), set variable Shunt_Mode to 4. When variable Shunt_Mode = 6, shunt calibration is complete.

223

Section 11. Programming Resource Library

FIGURE 66. Strain Gage Shunt Calibration Started

FIGURE 67. Strain Gage Shunt Calibration Finished

11.1.6.2 Quarter Bridge Zero (Option 10)


Continuing from SECTION. Quarter bridge Shunt (Option 13) (p. 223), keep the 249 k resistor in place to simulate a strain. Using the optional keyboard display or software numeric monitor, change the value in variable Zero_Mode to 1 to start the zero calibration as shown in FIGURE. Starting Zero Procedure (p. 224). When Zero_Mode increments to 6, zero calibration is complete as shown in FIGURE. Zero Procedure Finished (p. 224).

FIGURE 68. Starting Zero Procedure

224

Section 11. Programming Resource Library

FIGURE 69. Zero Procedure Finished

11.2 Information Services


Read More! Specific information concerning the use of digital cellular modems for information services can often be found in CSI manuals for those modems for sale through Campbell Scientific. When used in conjunction with a network link interface that uses the CR800 IP stack, or a cell modem with the PPP/IP key enabled, the CR800 has TCP/IP functionality that enables capabilities discussed in this section: Note For information on available TCP/IP/PPP devices, refer to APPENDIX. Network Links (p. 478) for model numbers. Detailed information on use of TCP/IP/PPP devices is found in their respective manuals and CRBASIC Editor Help. PakBus communication over TCP/IP. Callback (datalogger initiated communication) using the CRBASIC TCPOpen() function. Datalogger-to-datalogger communication. HTTP protocol and Web Server. FTP Server and Client for transferring files to and from the datalogger. TelNet Server for debugging and entry into terminal mode. SNMP for NTCIP and RWIS applications. PING. Micro-serial server using CRBASIC Serial I/O functions with TCP sockets as "COM Ports". Modbus/TCP/IP, Master and Slave. DHCP Client to obtain an IP address.

225

Section 11. Programming Resource Library

DNS Client to query a DNS server to map a name into an IP address. SMTP to send email messages.

11.2.1

PakBus Over TCP/IP and Callback


Once the hardware has been configured, basic PakBus communication over TCP/IP is possible. These functions include sending and retrieving programs, setting the datalogger clock, collecting data, and displaying at the most current record from the CR800 data tables. Data callback and datalogger-to-datalogger communications are also possible over TCP/IP. For details and example programs for callback and datalogger-todatalogger communications, see the network link manual. A listing of network link model number is found in APPENDIX. Network Links (p. 478).

11.2.2

HTTP Web Server


The CR800 has a default home page built into the operating system. As shown in FIGURE. Preconfigured HTML Home Page (p. 226), this page provides links to the newest record in all tables, including the status table, public table, and data tables. Links are also provided for the last 24 records in each data table. If fewer than 24 records have been stored in a data table, the link will display all data in that table.

FIGURE 70. Preconfigured HTML Home Page

226

Section 11. Programming Resource Library

Newest Record links refresh automatically every 10 seconds. Last 24 Records link must be manually refreshed to see new data. Links will also be created automatically for any HTML, XML, and JPEG files found on the CR800 drives. To copy files to these drives, choose File Control from the LoggerNet / PC400 / RTDAQ / PC200W menu. Although the default home page cannot be accessed by the user for editing, it can be replaced with HTML code to customize the look of the home page. To replace the default home page, save the new home page under the name default.html and copy it to the datalogger. It can be copied to a CR800 drive with File Control. Deleting default.html will cause the CR800 to use its original default home page. The CR800 can be programmed to generate HTML or XML code that can be viewed by the web browser. CRBASIC EXAMPLE. HTML (p. 229) shows how to use the CRBASIC keywords WebPageBegin / WebPageEnd and HTTPOut to create HTML code. Note that for HTML code requiring the use of quote marks, CHR(34) is used, while regular quote marks are used to define the beginning and end of alphanumeric strings inside the parentheses of the HTTPOut instruction. For additional information, see the CRBASIC editor Help.

In this example program, the default home page was replaced by using WebPageBegin to create a file called default.html. The new default home page created by the program appears as shown in FIGURE. Home Page Created using WebPageBegin() Instruction (p. 228) looks like this:

The Campbell Scientific logo in the web page comes from a file called SHIELDWEB2.JPG. That file must be transferred to the datalogger's CPU drive using File Control. The datalogger can then access the graphic for display on the web page. A second web page, shown in FIGURE. Monitor Web Page Generated By Datalogger Program (p. 228) called monitor.html was created by the example program that contains links to the CR800 data tables.

227

Section 11. Programming Resource Library

FIGURE 71. Home Page Created Using WebPageBegin () Instruction

FIGURE 72. Monitor Web Page Generated By Datalogger Program

228

Section 11. Programming Resource Library

CRBASIC EXAMPLE 38. HTML


'NOTE: Lines ending with "+" are wrapped to the next line to fit on the printed page 'NOTE Continued: Do not wrap lines when entering program into CRBASIC Editor. Dim Commands As String * 200 Public Time(9), RefTemp, Public Minutes As String, Seconds As String, Temperature As String DataTable(CRTemp,True,-1) DataInterval(0,1,Min,10) Sample(1,RefTemp,FP2) Average(1,RefTemp,FP2,False) EndTable 'Default HTML Page WebPageBegin("default.html",Commands) HTTPOut("<html>") HTTPOut("<style>body {background-color: oldlace}</style>") HTTPOut("<body><title>Campbell Scientific CR800 Datalogger</title>") HTTPOut("<h2>Welcome To the Campbell Scientific CR800 Web Site!</h2>") HTTPOut("<tr><td style=" + CHR(34) +"width: 290px" + CHR(34) + ">") HTTPOut("<a href=" + CHR(34) + "http://www.campbellsci.com" + CHR(34) + ">") HTTPOut("<img src="+ CHR(34) +"/CPU/SHIELDWEB2.jpg"+ CHR(34) + "width=" + CHR(34) +"128"+CHR(34)+"height="+CHR(34)+"155"+ CHR(34) + "class=" + CHR(34) +"style1"+ CHR(34) +"/></a></td>") HTTPOut("<p><h2> Current Data:</h2></p>") HTTPOut("<p>Time: " + time(4) + ":" + minutes + ":" + seconds + "</p>") HTTPOut("<p>Temperature: " + Temperature + "</p>") HTTPOut("<p><h2> Links:</h2></p>") HTTPOut("<p><a href="+ CHR(34) +"monitor.html"+ CHR(34)+">Monitor</a></p>") HTTPOut("</body>") HTTPOut("</html>") WebPageEnd 'Monitor Web Page WebPageBegin("monitor.html",Commands) HTTPOut("<html>") HTTPOut("<style>body {background-color: oldlace}</style>") HTTPOut("<body>") HTTPOut("<title>Monitor CR800 Datalogger Tables</title>") HTTPOut("<p><h2>CR800 Data Table Links</h2></p>") HTTPOut("<p><a href="+ CHR(34) + "command=TableDisplay&table=CRTemp&records=10" + CHR(34)+">Display Last 10 Records from DataTable CR1Temp</a></p>") HTTPOut("<p><a href="+ CHR(34) + "command=NewestRecord&table=CRTemp"+ CHR(34) + ">Current Record from CRTemp Table</a></p>") HTTPOut("<p><a href="+ CHR(34) + "command=NewestRecord&table=Public"+ CHR(34) + ">Current Record from Public Table</a></p>") HTTPOut("<p><a href="+ CHR(34) + "command=NewestRecord&table=Status" + CHR(34) + ">Current Record from Status Table</a></p>") HTTPOut("<br><p><a href="+ CHR(34) +"default.html"+CHR(34) + ">Back to the Home Page</a></p>") HTTPOut("</body>") HTTPOut("</html>") WebPageEnd

229

Section 11. Programming Resource Library

BeginProg Scan(1,Sec,3,0) PanelTemp(RefTemp,250) RealTime(Time()) Minutes = FormatFloat(Time(5),"%02.0f") Seconds = FormatFloat(Time(6),"%02.0f") Temperature = FormatFloat(RefTemp, "%02.02f") CallTable(CRTemp) NextScan EndProg

11.2.3

FTP Server
The CR800 automatically runs an FTP server. This allows Windows Explorer to access the CR800 file system via FTP, with drives on the CR800 being mapped into directories or folders. The root directory on the CR800 can be any drive. USR: is a drive created by the user allocating memory to the USR: drive in the USRDriveSize field of the Status table or in the USR: Drive Size box on the Deployment | Advanced tab of the CR800 service in DevConfig. Files on the CR800 are contained on one of these directories. Files can be copy / pasted between drives. Files can be deleted through FTP.

11.2.4

FTP Client
The CR800 can act as an FTP Client to send a file or get a file from an FTP server, such as another datalogger or web camera. This is done using the CRBASIC FTPClient () instruction. See the network link manual or CRBASIC Editor Help for details and sample programs.

11.2.5

Telnet
Telnet is used to access the same commands that are available through datalogger support software (p. 417) terminal emulator. Start a Telnet session by opening a DOS command prompt and type in:
Telnet xxx.xxx.xxx.xxx <Enter>

where xxx.xxx.xxx.xxx is the IP address of the network device connected to the CR800.

11.2.6

SNMP
Simple Network Management Protocol (SNMP) is a part of the IP suite used by NTCIP and RWIS for monitoring road conditions. The CR800 supports SNMP when a network device is attached.

230

Section 11. Programming Resource Library

11.2.7

Ping
Ping can be used to verify that the IP address for the network device connected to the CR800 is reachable. To use the Ping tool, open a command prompt on a computer connected to the network and type in:
ping xxx.xxx.xxx.xxx <Enter>

where xxx.xxx.xxx.xxx is the IP address of the network device connected to the CR800.

11.2.8

Micro-Serial Server
The CR800 can be configured to allow serial communication over a TCP/IP port. This is useful when communicating with a serial sensor over ethernet via micro-serial server (third party serial to ethernet interface) to which the serial sensor is connected. See the network link manual and the CRBASIC Editor Help for the TCPOpen () instruction for more information. Information on available network links is available in APPENDIX. Network Links (p. 478).

11.2.9

Modbus TCP/IP
The CR800 can perform Modbus communication over TCP/IP using the Modbus TCP/IP interface. To set up Modbus TCP/IP, specify port 502 as the ComPort in the ModBusMaster () and ModBusSlave () instructions. See the CRBASIC Editor Help for more information.

11.2.10 DHCP
When connected to a server with a list of IP addresses available for assignment, the CR800 will automatically request and obtain an IP address through the Dynamic Host Configuration Protocol (DHCP). Once the address is assigned, use DevConfig, PakBus Graph, Connect, or the optional keyboard display to look in the CR800 Status table to see the assigned IP address. This is shown under the field name IPInfo.

11.2.11 DNS
The CR800 provides a Domain Name Server (DNS) client that can query a DNS server to determine if an IP address has been mapped to a hostname. If it has, then the hostname can be used interchangeably with the IP address in some datalogger instructions.

11.2.12 SMTP
Simple Mail Transfer Protocol (SMTP) is the standard for e-mail transmissions. The CR800 can be programmed to send e-mail messages on a regular schedule or based on the occurrence of an event.

231

Section 11. Programming Resource Library

11.3 SDI-12 Sensor Support


Multiple SDI-12 sensors can be connected to each of four channels on the CR800: C1, C3. If multiple sensors are wired to a single channel, each sensor must have a unique address. SDI-12 standard v 1.3 sensors accept addresses 0 9, a - z, and A - Z. The CR800 supports SDI-12 communication through two modes transparent mode and programmed mode. Transparent mode facilitates sensor set-up and troubleshooting. It allows commands to be manually issued and the full sensor response viewed. Transparent mode does not record data. Programmed mode automates much of the SDI-12 protocol and provides for data recording.

11.3.1

SDI-12 Transparent Mode


System operators can manually interrogate and enter settings in probes using transparent mode. Transparent mode is useful in troubleshooting SDI-12 systems because it allows direct communication with probes. Transparent mode may need to wait for commands issued by the programmed mode to finish before sending responses. While in transparent mode, datalogger programs may not execute. Datalogger security may need to be unlocked before transparent mode can be activated. Transparent mode is entered while the PC is in telecommunications with the datalogger through a terminal emulator program. It is easily accessed through Campbell Scientific datalogger support software, but may also be accessible with terminal emulator programs such as Windows Hyperterminal. Keyboard displays cannot be used. To enter the SDI-12 transparent mode, enter the support software terminal emulator. Click the Open Terminal button. A green Active indicator appears on the screen as shown in FIGURE. Entering SDI-12 Transparent Mode (p. 233). Press <Enter> until the CR800 responds with the prompt CR800>. Type SDI12 at the prompt (without the quotes) and press <Enter>. In response, the query Enter Cx Port 1 or 3 will appear. Enter the control port integer to which the SDI-12 sensor is connected. An Entering SDI12 Terminal response indicates that SDI-12 Transparent Mode is active and ready to transmit SDI-12 commands and display responses.

232

Section 11. Programming Resource Library

FIGURE 73. Entering SDI-12 Transparent Mode

11.3.1.1 SDI-12 Transparent Mode Commands


Commands have three components: Sensor address (a) a single character, and is the first character of the command. Sensors are usually assigned a default address of zero by the manufacturer. Wildcard address (?) is used in Address Query command. Some manufacturers may allow it to be used in other commands. Command body (e.g., M1) an upper case letter (the command) followed by alphanumeric qualifiers. Command termination (!) an exclamation mark. An active sensor responds to each command. Responses have several standard forms and terminate with <CR><LF> (carriage return line feed). SDI-12 commands and responses are defined by the SDI-12 Support Group (www.sdi-12.org) and are summarized in TABLE. Standard SDI-12 Command & Response Set (p. 234). Sensor manufacturers determine which commands to support. The most common commands are detailed below.

233

Section 11. Programming Resource Library

TABLE 44. Standard SDI-12 Command & Response Set


Name
Break

Command1
Continuous spacing for at least 12 milliseconds a! aI! aAb! ?!
3

Response2
None

Acknowledge Active Send Identification Change Address Address Query Start Measurement

a<CR><LF> allccccccccmmmmmmvvvxxx...xx<CR><LF> b<CR><LF> (support for this command is required only if the sensor supports software changeable addresses) a<CR><LF> atttn<CR><LF> atttn<CR><LF> a<values><CR><LF> or a<values><CRC><CR><LF> a<values><CR><LF> or a<values><CRC><CR><LF> a<values><CR><LF> or a<values><CRC><CR><LF> a<values><CR><LF> or a<values><CRC><CR><LF> a<values><CR><LF> or a<values><CRC><CR><LF> atttn<CR><LF> atttn<CR><LF> atttn<CR><LF> atttn<CR><LF> atttn<CR><LF> atttn<CR><LF> atttn<CR><LF> atttnn<CR><LF> atttnn<CR><LF> atttnn<CR><LF> atttnn<CR><LF> atttnn<CR><LF> atttnn<CR><LF> atttnn<CR><LF> a<values><CR><LF> (formatted like the D commands) a<values><CRC><CR><LF> (formatted like the D commands)

aM! aMC! aD0! . . . aD9!


3

Start Measurement and Request 3 CRC Send Data

Additional Measurements

aM1! . . . aM9! aMC1! ... aMC9! aV! aC! aC1! . . . aC9! aCC1! ... aCC9! aR0! ... aR9! aRC0! ... aRC9!

Additional Measurements and 3 Request CRC Start Verification


3

Start Concurrent Measurement Additional Concurrent Measurements

Additional Concurrent Measurements and Request CRC Continuous Measurements Continuous Measurements and Request CRC
1

If the terminator '!' is not present, the command will not be issued. The CRBASIC SDI12Recorder() instruction, however, will still pick up data resulting from a previously issued "C!" command. Complete response string can be obtained when using the SDIRecorder() instruction by declaring the Destination variable as String. This command may result in a service request.

234

Section 11. Programming Resource Library

11.3.1.1.1

Address Commands A single probe should be connected to an SDI-12 input when using these commands. Address Query Command (?!) Command ?! requests the address of the connected sensor. The sensor replies to the query with the address, a. Change Address Command (aAb!) Sensor address is changed with command aAb!, where a is the current address and b is the new address. For example, to change an address from 0 to 2, the command is 0A2! The sensor responds with the new address b, or in this example, 2. Send Identification Command (aI!) Sensor identifiers are requested by issuing command aI!. The reply is defined by the sensor manufacturer, but usually includes the sensor address, SDI-12 version, manufacturer's name, and sensor model information. Serial number or other sensor specific information may also be included. An example of a response from the aI! command is:
013NRSYSINC1000001.2101 <CR><LF>

where: Address = 0 SDI-12 version =1.3 Manufacturer = NRSYSINC Sensor model = 100000 Sensor version = 1.2 Serial number = 101 11.3.1.1.2 Start Measurement Commands (aM! & aC!) A measurement is initiated with M! or C! commands. The response to each command has the form atttnn, where a = sensor address ttt = time, in seconds, until measurement data are available nn = the number of values to be returned when one or more subsequent D! commands are issued.

235

Section 11. Programming Resource Library

Start Measurement Command (aMv!) Qualifier v is a variable between 1 and 9. If supported by the sensor manufacturer, v requests variant data. Variants may include: alternate units (e.g. C or F) additional values (e.g., level and temperature) diagnostic of the sensors internal battery Example: Command: 5M! Response: 500410 (atttnn, indicates address 5, data ready in 4 seconds, will report 10 values). Example: Command: 5M7! Response: 500201 (atttnn indicates address 5, data ready in 2 seconds, will report 1 value). v = 7 instructs the sensor to return the voltage of its internal battery. Start Concurrent Measurement Command (aC!) Concurrent measurement allows the CR800 to request a measurement, continue program execution, and pick up the requested data on the next pass through the program. A measurement request is then sent again so data are ready on the next scan. The datalogger scan rate should be set such that the resulting skew between time of measurement and time of data collection does not compromise data integrity. Note This command is new to Version 1.2 or higher of the SDI-12 Specification. Older sensors, older loggers, or new sensors that do not meet v1.2 specifications will likely not support this command

11.3.1.1.3

Aborting a Measurement Command A measurement command (M! or C!) is aborted when any other valid command is sent to the sensor.

11.3.1.1.4

Send Data Commands (aDv! & aRv!)

236

Section 11. Programming Resource Library

11.3.2

SDI-12 Programmed Modes


The CR800 can be programmed to act as an SDI-12 recording device, or as an SDI-12 sensor. For troubleshooting purposes, responses to SDI-12 commands can be captured in programmed mode by placing a variable declared as STRING in the variable parameter. Variables not declared as string will capture only numeric data. Another troubleshooting tool is the terminal mode snoop utility, which allows monitoring of SDI-12 traffic. Enter terminal mode as described in SECTION. SDI-12 Transparent Mode (p. 232), issue CRLF (<Enter> Key) until CR800> prompt appears. Type W then <Enter>. Type 9 in answer to "Select:", 100 in answer to "Enter timeout (secs):", Y to "ASCII (Y)?". SDI-12 communications are then opened for viewing.

11.3.2.1 SDI-12 Recorder Mode


The SDI12Recorder() instruction automates the issuance of commands and interpretation of sensor responses. Commands entered into the SDIRecorder() instruction differ slightly in function from similar commands entered in transparent mode. In transparent mode, for example, the operator manually enters aM! and aD0! to initiate a measurement and get data, with the operator providing the proper time delay between the request for measurement and the request for data. In programmed mode, the CR800 provides command and timing services within a single line of code. For example, when the SDI12Recorder() instruction is programmed with the M! command (note that SDI-12 address is a separate instruction parameter), the CR800 issues the aM! AND aD0! commands with proper elapsed time between the two. The CR800 automatically issues retries and performs other services that make the SDI-12 measurement work as trouble free as possible. TABLE. SDI-12Recorder () Commands (p. 237) summarizes CR800 actions triggered by some SDI12Recorder() commands. If the SDI12Recorder() instruction is not successful, NAN will be loaded into the first variable. See SECTION. NAN and INF (p. 399) for more information.

237

Section 11. Programming Resource Library

TABLE 45. SDI12Recorder() Commands


SDIRecorder() Instruction SDICommand Entry Mv! Actions Internal to CR800 and Sensor

CR800: Issues aMv! command Sensor: Responds with atttnn CR800: Waits until ttt1 seconds. Issues
aDv! command(s)

Sensor: Responds with data.


Cv!

CR800: Issues aCv! command Sensor: Responds with atttnn CR800: If ttt=0 then issues aDv!
command(s)

Sensor: Responds with data. CR800: else, if ttt>0 then moves to next
CRBASIC program instruction.

CR800: At next time SDIRecorder() is


executed, if elapsed time < ttt, moves to next CRBASIC instruction,.

CR800: else, issues aDv! command(s) Sensor: Responds with data. CR800: Issues aCv! command (to request
data for next scan).

Cv (note: no ! termination)

CR800: Tests to see if ttt expired.

If ttt not expired, loads "1e9" into first variable then moves to next CRBASIC instruction. If ttt expired, issues aDv! command(s).

Sensor: Responds to aDv! command(s) with data, if any. If no data, loads NAN into variable. CR800: moves to next CRBASIC
instruction (does not re-issue aCv! command).
1

Note that ttt is local only to the SDIRecorder() instruction. If a second SDIRecoder() instruction is used, it will have its own ttt. Use variable replacement in program to use same instance of SDI12Recorder() as issued aCV!. See CRBASIC EXAMPLE. Using Alternate Concurrent Command (aC) (p.241).

11.3.2.1.1

Alternate Start Measurement Command (Cv) The SDIRecorder() aCv (not C!) command facilitates using the SDI-12 standard Start Concurrent command (aCv!) without the back to back measurement sequence normal to the CR800 implementation of aCv!.

238

Section 11. Programming Resource Library Consider an application wherein four SDI-12 temperature sensors need to be near-simultaneously measured at a 5 minute interval within a program that scans every 5 seconds. The sensors requires 95 seconds to respond with data after a measurement request. Complicating the application is the need for minimum power usage, so the sensors must power down after each measurement. This application provides a focal point for considering several measurement strategies. The simplest measurement is to issue a M! measurement command to each sensor as follows:
Public BatteryVolt Public Temp1, Temp2, Temp3, Temp4 BeginProg Scan (5,Sec,0,0)

'Non-SDI-12 measurements here


SDI12Recorder SDI12Recorder SDI12Recorder SDI12Recorder NextScan EndProg (Temp1,1,0,"M!",1.0,0) (Temp2,1,1,"M!",1.0,0) (Temp3,1,2,"M!",1.0,0) (Temp4,1,3,"M!",1.0,0)

However, the code sequence has three problems: 1. Does not allow measurement of non-sdi-12 sensors at the required frequency 2. Does not achieve required 5 minute sample rate because each SDI12Recorder () instruction will take about 95 s to complete before the next SDI12Recorder () instruction begins, resulting is a real scan rate of about 6.5 minutes. 3. 95 s time skew between each sensor measurement Problem 1 can be remedied by putting the SDI-12 measurements in a SlowSequence scan. Doing so allows the SDI-12 routine to run its course without affecting measurement of other sensors, as follows:
Public BatteryVolt Public Temp(4) BeginProg Scan (5,Sec,0,0) 'Non-SDI-12 NextScan

measurements here

SlowSequence Scan (5,Min,0,0) SDI12Recorder SDI12Recorder SDI12Recorder SDI12Recorder NextScan EndProg

(Temp(1),1,0,"M!",1.0,0) (Temp(2),1,1,"M!",1.0,0) (Temp(3),1,2,"M!",1.0,0) (Temp(4),1,3,"M!",1.0,0)

239

Section 11. Programming Resource Library However, problems 2 and 3 are not resolved. These can be resolved by using the concurrent measurement command, C!. All measurements will be made at about the same time and execution time will be about 95 seconds, well within the 5 minute scan rate requirement, as follows:
Public BatteryVolt Public Temp(4) BeginProg Scan (5,Sec,0,0) 'Non-SDI-12 NextScan

measurements here

SlowSequence Scan (5,Min,0,0) SDI12Recorder SDI12Recorder SDI12Recorder SDI12Recorder NextScan EndProg

(Temp(1),1,0,"C!",1.0,0) (Temp(2),1,1,"C!",1.0,0) (Temp(3),1,2,"C!",1.0,0) (Temp(4),1,3,"C!",1.0,0)

A new problem introduced by the C! command, however, is that it causes high power usage by the CR800. This application has a very tight power budget. Since the C! command reissues a measurement request immediately after receiving data, the sensors will be in a high power state continuously. To remedy this problem, measurements need to be started with C! command, but stopped short of receiving the next measurement command (hardcoded part of the C! routine) after their data are polled. The SDI12Recorder () instruction C command (not C!) provides this functionality as shown in CRBASIC EXAMPLE. Using Alternate Concurrent Command (C) (p. 241). A modification of this program can also be used to allow near-simultaneous measurement of SDI-12 sensors without requesting additional measurements, such as may be needed in an event driven measurement. Note when only one SDI-12 sensor is attached, i.e., multiple sensor measurements do not need to start concurrently, another reliable method for making SDI-12 measurements without affecting the main scan is to use the CRBASIC SlowSequence instruction and the SDI-12 "M!" command. The main scan will continue to run during the ttt time returned by the SDI-12 sensor. The trick is to synchronize the returned SDI-12 values with the main scan.

240

Section 11. Programming Resource Library

CRBASIC EXAMPLE 39. CRBASIC EXAMPLE: Using Alternate Concurrent Command (aC)
'Code to use when back to back SDI-12 concurrent measurement commands not desired 'Main Program BeginProg 'Preset first measurement command to C! For X = 1 To 4 cmd(X) = "C!" Next X

'Set 5 s scan rate Scan(5,Sec,0,0) 'Other measurements here 'Set 5 minute measurement rate If TimeIntoInterval(0,5,Min) Then RunSDI12 = True 'Begin measurement sequence If RunSDI12 = True Then For X = 1 To 4 Temp_Tmp(X) = 2e9'when 2e9 changes, indicates a change. Next X 'Measure SDI-12 sensors SDI12Recorder(Temp_Tmp(1),1,0,cmd(1),1.0,0) SDI12Recorder(Temp_Tmp(2),1,1,cmd(2),1.0,0) SDI12Recorder(Temp_Tmp(3),1,2,cmd(3),1.0,0) SDI12Recorder(Temp_Tmp(4),1,3,cmd(4),1.0,0) 'Control Measurement Event For X = 1 To 4 If cmd(X) = "C!" Then Retry(X) = Retry(X) + 1 If Retry(X) > 2 Then IndDone(X) = -1 'Test to see if ttt expired. If ttt not expired, load "1e9" into first 'variable then moves to next instruction. If ttt expired, issue 'aDv! command(s). If ((Temp_Tmp(X) = 2e9) OR (Temp_Tmp(X) = 1e9)) Then cmd(X) = "C" 'Start sending "C" command. Else If(Temp_Tmp(X) = NAN) Then cmd(X) = "C!" 'Comms failed or sensor not attached 'Start measurement over

Else 'C!/C command sequence complete Move(Temp_Meas(X),1,Temp_Tmp(X),1) 'Copy measurements to SDI_Val(10) cmd(X) = "C!" 'Start next measurement with "C!" IndDone(X) = -1 EndIf Next X 'Summarize Measurement Event Success For X = 1 To 4 GroupDone = GroupDone + IndDone(X) Next X

241

Section 11. Programming Resource Library

'Stop current measurement event, reset controls If GroupDone = -4 Then RunSDI12 = False GroupDone = 0 For X = 1 To 4 IndDone(X) = 0 Retry(X) = 0 Next X Else GroupDone = 0 EndIf EndIf 'End of measurement sequence NextScan EndProg

CRBASIC EXAMPLE 40. Using SDI12Sensor() Command


'Program to simulate 4 SDI-12 sensors. Can be used to produce measurements to test ' CRBASIC EXAMPLE. Using Alternate Concurrent Command (C) (p. 241). Public Temp(4) DataTable(Temp,True,0) DataInterval(0,5,Min,10) Sample(4,Temp(),FP2) EndTable BeginProg Scan(5,Sec,0,0) PanelTemp(Temp(1),250) Temp(2) = Temp(1) + 5 Temp(3) = Temp(1) + 10 Temp(4) = Temp(1) + 15 CallTable Temp NextScan SlowSequence Do 'Note SDI12SensorSetup / SDI12SensorResponse must be renewed after each ' successful SDI12Recorder() poll. SDI12SensorSetup(1,1,0,95) Delay(1,95,Sec) SDI12SensorResponse(Temp(1)) Loop EndSequence SlowSequence Do SDI12SensorSetup(1,3,1,95) Delay(1,95,Sec) SDI12SensorResponse(Temp(2)) Loop EndSequence

242

Section 11. Programming Resource Library

SlowSequence Do SDI12SensorSetup(1,5,2,95) Delay(1,95,Sec) SDI12SensorResponse(Temp(3)) Loop EndSequence SlowSequence Do SDI12SensorSetup(1,7,3,95) Delay(1,95,Sec) SDI12SensorResponse(Temp(4)) Loop EndSequence EndProg

11.3.2.1.2

SDI-12 Extended Command Support SDI12Recorder () sends any string enclosed in quotation marks in the Command parameter. If the Command string is a non-standard SDI-12 command, any response is captured into the variable assigned to the Destination parameter, so long as that variable is declared as type STRING. CRBASIC EXAMPLE. Use of SDI-12 Extended Commands (p. 243) shows appropriate code for sending an extended SDI-12 command and receiving the response. The extended command feature has no built-in provision for responding with follow-up commands. However, the program can be coded to parse the response and issue subsequent SDI-12 commands based on a programmer customized evaluation of the response. For more information on parsing strings, see SECTION. Serial Input Programming Basics (p. 268).

CRBASIC EXAMPLE 41. Using an SDI-12 Extended Command


'SDI-12 extended command "XT23.61!" sent to CH200 Charging Regulator 'Correct response is "0OK", if zero (0) is the SDI-12 address. ' 'Declare Variables Public SDI12command As String Public SDI12result As String Main Program BeginProg Scan(20,Sec,3,0) SDI12command = "XT" & FormatFloat(PTemp,"%4.2f") & "!" SDI12Recorder(SDI12result,1,0,SDI12command,1.0,0) NextScan EndProg

11.3.2.2 SDI-12 Sensor Mode


The SDI12SensorSetup() / SDI12SensorResponse() instruction pair programs the CR800 to behave as an SDI-12 sensor. A common use of this feature is the transfer of data from the CR800 to other Campbell Scientific dataloggers over a single wire interface (SDI-12 port to SDI-12 port), or to transfer data to a 3rd party SDI-12 recorder.

243

Section 11. Programming Resource Library Details of using the SDI12SensorSetup() / SDI12SensorResponse() instruction pair can be found in the CRBASIC Editor Help. Other helpful tips include: Concerning the Reps parameter in the SDI12SensorSetup(), valid Reps when expecting an aMx! command range from 0 to 9. Valid Reps when expecting an aCx! command are 0 to 20. The Reps parameter is not range checked for valid entries at compile time. When the SDI-12 recorder receives the sensor response of atttn to a aMx! command, or atttnn to a aCx! command, only the first digit n, or the first two digits nn, are used. For example, if Reps is mis-programmed as 123, the SDI-12 recorder will accept only a response of n = 1 when issuing an aMx! command, or a response of nn = 12 when issuing an aCx! command. When programmed as an SDI-12 sensor, the CR800 will respond to a variety of SDI-12 commands including aMx! and aCx!. The following rules apply: 1. A CR800 can be assigned only one SDI-12 address per SDI-12 port. For example, a CR800 will not respond to both 0M! AND 1M! on SDI-12 port C1. However, different SDI-12 ports can have unique SDI-12 addresses. Use a separate SlowSequence for each SDI-12 port configured as a sensor. 2. The CR800 will handle Additional Measurements (aMx!) commands. When an SDI-12 recorder issues aMx! commands as shown in CRBASIC EXAMPLE. SDI-12 Sensor Setup (p. 244), measurement results are returned as listed in TABLE. CRBASIC EXAMPLE. SDI-12 Sensor Setup -- Results (p. 245).

244

Section 11. Programming Resource Library

CRBASIC EXAMPLE 42. SDI-12 Sensor Setup


'0M0! returns the first six values. '0M1! returns the second six values. Public PTemp, batt_volt Public Source(10) BeginProg Scan(5,Sec,0,0) PanelTemp(PTemp,250) Battery(batt_volt) Source(1) = PTemp 'temp in C Source(2) = batt_volt 'V in V Source(3) = PTemp * 1.8 + 32 'temp in F Source(4) = batt_volt 'V in V Source(5) = PTemp 'temp in C Source(6) = batt_volt * 1000 'V in mV Source(7) = PTemp * 1.8 + 32 'temp in F Source(8) = batt_volt * 1000 'V in mV Source(9) = Status.SerialNumber 'serial number Source(10) = Status.LithiumBattery 'lithbattery NextScan SlowSequence Do SDI12SensorSetup(2,1,0,1) Delay(1,500,mSec) SDI12SensorResponse(Source) Loop EndSequence EndProg

TABLE 46. SDI-12 Sensor Setup -- Results


Measurement Command from SDI-12 Recorder
0M! 0M0! 0M1! 0M2! 0M3! 0M4!

Source Variables Accessed from the CR800 acting as a SDI-12 Sensor


Source(1) and (2) same as 0M! Source(3) and (4) Source(5) and (6) Source(7) and (8) Source(9) and (10)

Contents of Source Variables


Temp C, Batt V

Temp F, Batt V Temp C, Batt mV Temp F, Batt mV Serial Number, Lithium Battery

11.3.3

SDI-12 Power Considerations


When a command is sent by the datalogger to an SDI-12 probe, all probes on the same SDI-12 port will wake up. Only the probe addressed by the datalogger will respond, however, all other probes will remain active until the timeout period expires. Example:

245

Section 11. Programming Resource Library Probe: Water Content Power Usage: Quiescent: 0.25 mA Measurement: 120 mA Measurement Time: 15 s Active: 66 mA Timeout: 15 s Probes 1, 2, 3, and 4 are connected to SDI-12 / Control Port 1. The time line in TABLE. Example Power Usage Profile for a Network of SDI-12 Probes (p. 246) shows a 35 second power usage profile example. For most applications, total power usage of 318 mA for 15 seconds is not excessive, but if 16 probes were wired to the same SDI-12 port, the resulting power draw would be excessive. Spreading sensors over several SDI-12 terminals will help reduce power consumption.

TABLE 47. Example Power Usage Profile for a Network of SDI-12 Probes
All Probes Awake
Yes

Sec
1 2 14 15 16 17 29 30 31 35

Command
1M!

Time Out Expires

1 mA
120 120 120

2 mA
66 66 66 66 66 66 66 66 0.25 0.25

3mA
66 66 66 66 66 66 66 66 0.25 0.25

4mA
66 66 66 66 66 66 66 66 0.25 0.25

Total mA
318 318 318 318 264 264 264 264 1 1

Yes 1D0! Yes

120 66 66 66

Yes

66 0.25 0.25

246

Section 11. Programming Resource Library

11.4 Subroutines
A subroutine is a group of programming instructions that is called by, but runs outside of, the main program. Subroutines are used for the following reasons: To reduce program length. Subroutine code can be executed multiple times in a program scan. Ease integration of proven code segments into new programs. Compartmentalize programs to improve organization. By executing the Call() instruction, the main program can call a subroutines from anywhere in the program. A subroutine has access to all global variables (p. 420). Variables local to a subroutine (local variables (p. 422)) are declared within the subroutine instruction. Local variables cannot be aliased and are not displayed in the Public table. Global and local variables can share the same name and not conflict. If global variables are passed to local variables of different type, the same type conversion rules apply as apply to conversions among Public or Dim variables. See SECTION. Expressions with Numeric Data Types (p. 151) for conversion types. Note To avoid programming conflicts, pass information into local variables and / or define global variables to be used exclusively by a subroutine. CRBASIC EXAMPLE. Subroutine with Global and Local Variables (p. 248) shows the use of global and local variables within a simple subroutine. Variables counter() and pi_product are global. Variable i_sub is global but used exclusively by subroutine process. Variables j() and OutVar are local since they are declared as parameters in the Sub instruction,
Sub process(j(4) AS Long,OutVar).

Variable j() is a four element array and variable OutVar is a single element array. The call statement,
Call ProcessSub (counter(1),pi_product)

passes five values into the subroutine: pi_product and four elements of array counter(). Array counter() is used to pass values into, and extract values from, the subroutine. The variable pi_product is used to extract a value from the subroutine. Call() passes the values of all listed variables into the subroutine. Values are passed back to the main scan at the end of the subroutine.

247

Section 11. Programming Resource Library

CRBASIC EXAMPLE 43. Subroutine with Global and Local Variables


'Global variables are those declared anywhere in the program as Public or Dim. 'Local variables are those declared in the Sub() instruction. 'Program Purpose: Demonstrates use of global and local variables with subroutines 'Program Function: Passes 2 variables to subroutine. Subroutine increments each 'variable once per second, multiplies each by pi, then passes results back to 'the main program for storage in a data table. 'Global variables (Used only outside subroutine by choice) 'Declare Counter in the Main Scan. Public counter(2) As Long 'Declare Product of PI * counter(2). Public pi_product(2) As Float 'Global variable (Used only in subroutine by choice) 'For / Next incrementor used in the subroutine. Public i_sub As Long 'Declare Data Table DataTable(pi_results,True,-1) Sample(1,counter(),IEEE4) EndTable 'Declare Subroutine Declares j(4) as local array (can only be used in subroutine) Sub ProcessSub (j(2) As Long,OutVar(2) As Float) For i_sub = 1 To 2 j(i_sub) = j(i_sub) + 1 'Processing to show functionality OutVar(i_sub) = j(i_sub) * 4 * ATN(1) '(Tip: 4 * ATN(1) = pi to IEEE4 precision) Next i_sub EndSub BeginProg counter(1) = 1 counter(2) = 2 Scan(1,Sec,0,0) 'Pass Counter() array to j() array, pi_pruduct() to OutVar() Call ProcessSub (counter(),pi_product()) CallTable pi_results NextScan EndProg

11.5 Wind Vector


11.5.1 OutputOpt Parameters
In the CR800 WindVector() instruction, the OutputOpt parameter defines the processed data that are stored. All output options result in an array of values, the elements of which have "_WVc(n)" as a suffix, where n is the element

248

Section 11. Programming Resource Library number. The array uses the name of the Speed/East variable as its base. TABLE. OutputOpt Options (p. 249) lists and describes OutputOpt options. TABLE 48. OutputOpt Options
Option Description (WVc() is the Output Array) WVc(1): Mean horizontal wind speed (S) WVc(2): Unit vector mean wind direction (1) WVc(3): Standard deviation of wind direction (1). Standard deviation is calculated using the Yamartino algorithm. This option complies with EPA guidelines for use with straight-line Gaussian dispersion models to model plume transport. 1 WVc(1): Mean horizontal wind speed (S) WVc(2): Unit vector mean wind direction (1) 2 WVc(1): Mean horizontal wind speed (S) WVc(2): Resultant mean horizontal wind speed (U) WVc(3): Resultant mean wind direction (u) WVc(4): Standard deviation of wind direction (u). This standard deviation is calculated using Campbell Scientific's wind speed weighted algorithm. Use of the resultant mean horizontal wind direction is not recommended for straight-line Gaussian dispersion models, but may be used to model transport direction in a variable-trajectory model. 3 4 WVc(1): Unit vector mean wind direction (1) WVc(1): Unit vector mean wind direction (1) WVc(2): Standard deviation of wind direction (u). This standard deviation is calculated using Campbell Scientific's wind speed weighted algorithm. Use of the resultant mean horizontal wind direction is not recommended for straight-line Gaussian dispersion models, but may be used to model transport direction in a variable-trajectory model.

11.5.2

Wind Vector Processing


WindVector() processes wind speed and direction measurements to calculate mean speed, mean vector magnitude, and mean vector direction over a data storage interval. Measurements from polar (wind speed and direction) or orthogonal (fixed East and North propellers) sensors are accommodated. Vector direction and standard deviation of vector direction can be calculated weighted or unweighted for wind speed. WindVector() uses a zero wind speed measurement when processing scalar wind speed only. Measurements at zero wind speed are not used in vector speed or direction calculations (vectors require magnitude and direction). This means, for example, that manually computed hourly vector directions from 15 minute vector directions will not agree with datalogger computed hourly vector directions. Correct manual calculation of hourly vector direction from 15 minute vector directions requires proper weighting of the 15 minute vector directions by the number of valid (non-zero wind speed) wind direction samples.

249

Section 11. Programming Resource Library

Note Cup anemometers typically have a mechanical offset which is added to each measurement. A numeric offset is usually encoded in the CRBASIC program to compensate for the mechanical offset. When this is done, a measurement will equal the offset only when wind speed is zero; consequently, additional code is often included to zero the measurement when it equals the offset so that WindVector() can reject measurements when wind speed is zero. Standard deviation can be processed one of two ways: 1) using every sample taken during the data storage interval (enter 0 for the Subinterval parameter), or 2) by averaging standard deviations processed from shorter sub-intervals of the data storage interval. Averaging sub-interval standard deviations minimizes the effects of meander under light wind conditions, and it provides more complete information for periods of transition (see EPA publication "On-site Meteorological Program Guidance for Regulatory Modeling Applications"). Standard deviation of horizontal wind fluctuations from sub-intervals is calculated as follows:

where:

is the standard deviation over the data storage interval, and

are sub-interval standard deviations. A sub-interval is specified as a number of scans. The number of scans for a sub-interval is given by: Desired sub-interval (secs) / scan rate (secs) For example, if the scan rate is 1 second and the data interval is 60 minutes, the standard deviation is calculated from all 3600 scans when the sub-interval is 0. With a sub-interval of 900 scans (15 minutes) the standard deviation is the average of the four sub-interval standard deviations. The last sub-interval is weighted if it does not contain the specified number of scans. The EPA recommends hourly standard deviation of horizontal wind direction (sigma theta) be computed from four fifteen-minute sub-intervals.

11.5.2.1 Measured Raw Data


Si: horizontal wind speed i: horizontal wind direction Uei: east-west component of wind Uni: north-south component of wind N: number of samples

250

Section 11. Programming Resource Library

11.5.2.2 Calculations
11.5.2.2.1 Input Sample Vectors

FIGURE 74. Input Sample Vectors

In FIGURE. Input Sample Vectors (p. 251) the short, head-to-tail vectors are the input sample vectors described by si and i, the sample speed and direction, or by Uei and Uni, the east and north components of the sample vector. At the end of data storage interval T, the sum of the sample vectors is described by a vector of magnitude U and direction u. If the input sample interval is t, the number of samples in data storage interval T is N = T / t. The mean vector magnitude is = U / N. Scalar mean horizontal wind speed, S:

where in the case of orthogonal sensors:

Unit vector mean wind direction,

where

251

Section 11. Programming Resource Library or, in the case of orthogonal sensors

where

Standard deviation of wind direction (Yamartino algorithm)

where,

and Ux and Uy are as defined above.

11.5.2.2.2

Mean Wind Vector Resultant mean horizontal wind speed, :

FIGURE 75. Mean Wind Vector Graph

252

Section 11. Programming Resource Library where for polar sensors:

or, in the case of orthogonal sensors:

Resultant mean wind direction, u:

Standard deviation of wind direction, (u), using Campbell Scientific algorithm:

The algorithm for (u) is developed by noting (FIGURE. Standard Deviation of Direction (p. 253)) that

where

FIGURE 76. Standard Deviation of Direction The Taylor Series for the Cosine function, truncated after 2 terms is:

253

Section 11. Programming Resource Library For deviations less than 40 degrees, the error in this approximation is less than 1%. At deviations of 60 degrees, the error is 10%. The speed sample can be expressed as the deviation about the mean speed,

Equating the two expressions for Cos (') and using the previous equation for si;

Solving for (i')2, one obtains;

Summing (i')2 over N samples and dividing by N yields the variance of u. Note that the sum of the last term equals 0.

The term,

is 0 if the deviations in speed are not correlated with the deviation in direction. This assumption has been verified in tests on wind data by CSI; the Air Resources Laboratory, NOAA, Idaho Falls, ID; and MERDI, Butte, MT. In these tests, the maximum differences in

and

have never been greater than a few degrees. The final form is arrived at by converting from radians to degrees (57.296 degrees/radian).

254

Section 11. Programming Resource Library

11.6 Custom Menus


Menus for the optional keyboard display can be customized to simplify routine operations. Viewing data, toggling control functions, or entering notes are common applications. Individual menu screens support up to eight lines of text with up to seven variables. Use the following CRBASIC instructions. Refer to CRBASIC Editor Help for complete information. DisplayMenu () Marks the beginning and end of a custom menu. Only one allowed per program. Note Label must be at least 6 characters long to mask default display clock. EndMenu Marks the end of a custom menu. Only one allowed per program. DisplayValue () Defines a label and displays a value (variable or data table value) not to be edited, such as a measurement. MenuItem () Defines a label and displays a variable to be edited by typing or from a pick list defined by MenuPick (). MenuPick () Creates a pick list from which to edit a MenuItem() variable. Follows immediately after MenuItem(). If variable is declared As Boolean, MenuPick() allows only True or False or declared equivalents. Otherwise, many items are allowed in the pick list. Order of items in list is determined by order in instruction; however, item displayed initially in MenuItem() is determined by the value of the item. SubMenu ()/EndSubMenu Defines the beginning and end of a second level menu. Note SubMenu () label must be at least 6 characters long to mask default display clock. CRBASIC EXAMPLE. Custom menus (p. 258) lists CRBASIC programming for a custom menu that facilitates viewing data, entering notes, and controlling a device. FIGURE. Custom Menu Example - Home Screen (p. 256) through FIGURE. Custom Menu Example - Control LED Boolean Pick List (p. 257) show the organization of the custom menu programmed using CRBASIC EXAMPLE. Custom Menus (p. 258).

255

Section 11. Programming Resource Library

FIGURE 77. Custom Menu Example - Home Screen

FIGURE 78. Custom Menu Example - View Data Window

FIGURE 79. Custom Menu Example - Make Notes Sub Menu

FIGURE 80. Custom Menu Example - Predefined Notes Pick List

256

Section 11. Programming Resource Library

FIGURE 81. Custom Menu Example - Free Entry Notes Window

FIGURE 82. Custom Menu Example - Accept / Clear Notes Window

FIGURE 83. Custom Menu Example - Control Sub Menu

FIGURE 84. Custom Menu Example - Control LED Pick List

257

Section 11. Programming Resource Library

FIGURE 85. Custom Menu Example - Control LED Boolean Pick List

Note See FIGURE. Custom Menu Example -- Home Screen (p. 256) through FIGURE. Custom Menu Example - Control LED Boolean Pick List (p. 257) in reference to the following CRBASIC EXAMPLE. Custom Menus (p. 258).

CRBASIC EXAMPLE 44. Custom Menus


'Custom Menu Example 'Declarations supporting View Data menu item Public RefTemp 'Reference Temp Variable Public TCTemp(2) 'Thermocouple Temp Array 'Delarations supporting blank line menu item Const Escape = "Hit Esc" 'Word indicates action to exit dead end 'Declarations supporting Enter Notes menu item Public SelectNote As String * 20 'Hold predefined pick list note Const Cal_Done = "Cal Done" 'Word stored when Cal_Don selected Const Offst_Chgd = "Offset Changed" 'Word stored when Offst_Chgd selected Const Blank = "" 'Word stored when blank selected Public EnterNote As String * 30 'Variable to hold free entry note Public CycleNotes As String * 20 'Variable to hold notes control word Const Accept = "Accept" 'Notes control word Const Clear = "Clear" 'Notes control word 'Declarations supporting Control menu item Const On = true 'Assign "On" as Boolean True Const Off = false 'Assign "Off" as Boolean False Public StartFlag As Boolean 'LED Control Process Variable Public CountDown As Long 'LED Count Down Variable Public ToggleLED As Boolean 'LED Control Variable 'Define Note DataTable DataTable(Notes,1,-1) Sample(1,SelectNote,String) Sample(1,EnterNote,String) EndTable 'Set up Notes data table, written 'to when a note is accepted 'Sample Pick List Note 'Sample Free Entry Note

258

Section 11. Programming Resource Library

'Define temperature DataTable DataTable(TempC,1,-1) DataInterval(0,60,Sec,10) Sample(1,RefTemp,FP2) Sample(1,TCTemp(1),FP2) Sample(1,TCTemp(2),FP2) EndTable 'Custom Menu Declarations DisplayMenu("**CUSTOM MENU DEMO**",-3)

'Set up temperature data table. 'Written to every 60 seconds with: 'Sample of reference temperature 'Sample of thermocouple 1 'Sample of thermocouple 2

'Create Menu; Upon power up, 'the custom menu is 'displayed. The system menu 'is hidden from the user. 'Dummy Sub menu to write a blank line 'a blank line 'End of dummy submenu

SubMenu("") DisplayValue("",Escape) EndSubMenu

SubMenu("View Data ") 'Create Submenu named PanelTemps DisplayValue("Ref Temp C",RefTemp) 'Item for Submenu from Public DisplayValue("TC 1 Temp C",TCTemp(1)) 'Item for Submenu - TCTemps(1) DisplayValue("TC 2 Temp C",TCTemp(2)) 'Item for Submenu - TCTemps(2) EndSubMenu 'End of Submenu SubMenu("Make Notes ") 'Create Submenu named PanelTemps MenuItem("Predefined",SelectNote) 'Choose predefined notes Menu Item MenuPick(Cal_Done,Offset_Changed) 'Create pick list of predefined notes MenuItem("Free Entry",EnterNote) 'User entered notes Menu Item MenuItem("Accept/Clear",CycleNotes) MenuPick(Accept,Clear) EndSubMenu SubMenu("Control ") MenuItem("Count to LED",CountDown) MenuPick(15,30,45,60) MenuItem("Manual LED",toggleLED) MenuPick(On,Off) EndSubMenu EndMenu 'Main Program BeginProg CycleNotes = "??????" Scan(1,Sec,3,0) 'Measurements PanelTemp(RefTemp,250) 'Initialize Notes Sub Menu, 'write ????? as a null 'Create Submenu named PanelTemps 'Create menu item CountDown 'Create a pick list for CountDown 'Manual LED control Menu Item

'End custom menu creation

'Measure Reference Temperature 'Measure Two Thermocouples TCDiff(TCTemp(),2,mV2500C,1,TypeT,RefTemp,True,0,250,1.0,0) CallTable TempC 'Call data table

'Menu Item "Make Notes" Support Code If CycleNotes = "Accept" Then CallTable Notes CycleNotes = "Accepted" Delay(1,500,mSec) SelectNote = "" EnterNote = "" CycleNotes = "??????" EndIf

'Write data to Notes data table 'Write "Accepted" after written 'Pause so user can read "Accepted" 'Clear pick list note 'Clear free entry note 'Write ????? as a null prompt

259

Section 11. Programming Resource Library

If CycleNotes = "Clear" Then SelectNote = "" EnterNote = "" CycleNotes = "??????" EndIf

'Clear notes when requested 'Clear pick list note 'Clear free entry note 'Write ????? as a null prompt

'Menu Item "Control" Menu Support Code CountDown = CountDown - 1 'Count down by 1 If CountDown <= 0 'Stop count down from passing 0 CountDown = 0 EndIf If CountDown > 0 Then StartFlag = True 'Indicate countdown started EndIf If StartFlag = True AND CountDown = 0 Then 'Interprocess count down 'and manual LED ToggleLED = True StartFlag = False EndIf If StartFlag = True AND CountDown <> 0 Then 'Interprocess count down 'and manual LED ToggleLED = False EndIf PortSet(4,ToggleLED) 'Set control port according 'to result of processing NextScan EndProg

11.7 Conditional Compilation


When a CRBASIC user program is sent to the CR800, an exact copy of the program is saved as a file on the CPU: drive (p. 331). A binary version of the program, the "operating program", is created by the CR800 compiler and written to Operating Memory (p. 332). This is the program version that runs the CR800. CRBASIC allows definition of # conditional code in the user program that the CR800 compiler includes, depending on the conditional settings, in the operating program. This means the user written program is evaluated for conditional statements and an operating program that includes only the requested statements is written to operating memory. In addition, all CRBASIC dataloggers accept program files or Include() instruction files with .DLD extensions. This gets around the system filters that look at file extensions for specific loggers; it makes possible the writing of a single file of code to run on multiple CRBASIC dataloggers. -- Do not confuse CRBASIC files with .DLD extensions with files of .DLD type used by legacy Campbell Scientific dataloggers.
Note

260

Section 11. Programming Resource Library

As an example, pseudo code using this feature might be written as:


#Const Destination = "CR800" #If Destination = "CR3000" Then <code specific to the CR3000> #ElseIf Destination = "CR1000" Then <code specific to the CR1000> #ElseIf Destination = "CR800" Then <code specific to the CR800> #Else <code to include otherwise> #EndIf

This logic allows a simple change of a constant to direct, for instance, which measurement instructions to include. CRBASIC Editor now features a pre-compile option that enables the creation of a CRBASIC text file with only the desired conditional statements from a larger master program. This option can also be used at the pre-compiler command line by using -p <outfile name>. This feature allows the smallest size program file possible to be sent to the CR800, which may help keep costs down over very expensive telecommunications links. CRBASIC EXAMPLE. Conditional Compile (p. 261) shows a sample program that demonstrates use of conditional compilation features in CRBASIC. Within the program are examples showing the use of the predefined LoggerType constant and associated predefined datalogger constants (CR3000, CR1000, and CR800).

CRBASIC EXAMPLE 45. Conditional Compile


'Conditional compilation example for CR3000, CR1000, and CR800 Series Dataloggers 'Key instructions include #If, #ElseIf, #Else and #EndIf. 'Set program options based on the setting of a constant in the program. Const ProgramSpeed = 2 #If ProgramSpeed = 1 Const ScanRate = 1 Const Speed = "1 Second" #ElseIf ProgramSpeed = 2 Const ScanRate = 10 Const Speed = "10 Second" #ElseIf ProgramSpeed = 3 Const ScanRate = 30 Const Speed = "30 Second" #Else Const ScanRate = 5 Const Speed = "5 Second" #EndIf

'1 Second

'10 Seconds

'30 Seconds

'5 Seconds

'Choose a COM port depending on which logger type the program is running in. #If LoggerType = CR3000 Const SourcSerialPort = Com3 #ElseIf LoggerTypes = CR1000 Const SourcSerialPort = Com2

261

Section 11. Programming Resource Library

#ElseIf LoggerType = CR800 Const SourcSerialPort = Com1 #Else Const SourcSerialPort = Com1 #EndIf 'Public Variables. Public ValueRead, SelectedSpeed As String * 50 Main Program BeginProg 'Return the selected speed and logger type for display. #If LoggerType = CR3000 SelectedSpeed = "CR3000 running at " & Speed & " intervals." #ElseIf LoggerTypes = CR1000 SelectedSpeed = "CR1000 running at " & Speed & " intervals." #ElseIf LoggerType = CR800 SelectedSpeed = "CR800 running at " & Speed & " intervals." #Else SelectedSpeed = "Unknown Logger " & Speed & " intervals." #EndIf 'Open the serial port. SerialOpen(SourcSerialPort,9600,10,0,10000) 'Main Scan. Scan(ScanRate,Sec,0,0) 'Measure using different parameters and a different SE channel depending 'on the datalogger type the program is running in. #If LoggerType = CR3000 'This instruction is used if the logger is a CR3000 VoltSe(ValueRead,1,mV1000,22,0,0,_50Hz,0.1,-30) #ElseIf LoggerType = CR1000 'This instruction is used if the logger is a CR800 VoltSe(ValueRead,1,mV2500,12,0,0,_50Hz,0.1,-30) #ElseIf LoggerType = CR800 'This instruction is used if the logger is a CR800 Series VoltSe(ValueRead,1,mV2500,3,0,0,_50Hz,0.1,-30) #Else ValueRead = NaN #EndIf NextScan EndProg

11.8 Serial I/O


The CR800 communicates with smart sensors that deliver measurement data through serial data protocols. Read More! See SECTION. Telecommunications and Data Retrieval (p. 349) for background on CR800 serial communications.

262

Section 11. Programming Resource Library

11.8.1

Introduction
Serial denotes transmission of bits (1s and 0s) sequentially, or "serially." A byte is a packet of sequential bits. RS-232 and TTL standards use bytes containing eight bits each. Imagine that an instrument transmits the byte "11001010" to the CR800. The instrument does this by translating "11001010" into a series of higher and lower voltages, which it transmits to the CR800. The CR800 receives and reconstructs these voltage levels as "11001010." Because an RS232 or TTL standard is adhered to by both the instrument and the CR800, the byte successfully passes between them. If the byte is displayed on a terminal as it was received, it will appear as an ASCII / ANSI character or control code. TABLE. ASCII / ANSI Equivalents (p. 263) shows a sample of ASCII / ANSI character and code equivalents. TABLE 49. ASCII / ANSI Equivalents
Byte Received 00110010 1100010 00101011 00001101 00000001 ASCII Character Displayed 2 b + cr Decimal ASCII Code 50 98 43 13 1 Hex ASCII Code 32 62 2b d 1

Read More! See ASCII / ANSI Table (p. 459) for a complete list of ASCII / ANSI codes and their binary and hex equivalents. The byte's face value, however, is not what is usually of interest. The manufacturer of the instrument must specify what information in the byte is of interest. For instance, two bytes may be received, one for character 2, the other for character b. The pair of characters together, "2b", is the hexadecimal code for "+", "+" being the information of interest. Or, perhaps, the leading bit, the MSB (Most Significant Bit), on each of two bytes is dropped, the remaining bits combined, and the resulting "super byte" translated from the remaining bits into a decimal value. The variety of protocols is limited only by the number of instruments on the market. For one in-depth example of how bits may be translated into useable information, see APPENDIX. FP2 Data Format (p. 463). Note ASCII / ANSI control character ff-form feed (binary 00001100) causes a terminal screen to clear. This can be frustrating for a developer who prefers to see information on a screen, rather than a blank screen. Some third party terminal emulator programs, such as Procomm, are useful tools in serial I/O development since they handle this and other idiosyncrasies of serial communication. When a standardized serial protocol is supported by the CR800, such as PakBus or Modbus, translation of bytes is relatively easy and transparent. However, when bytes require specialized translation, specialized code is required in the user entered CRBASIC program, and development time can extend into several hours or days.

263

Section 11. Programming Resource Library

11.8.2

I/O Ports
The CR800 supports two-way serial communication with other instruments through ports listed in TABLE. CR800 Serial Ports (p. 264). TABLE 50. CR800 Serial Ports
Serial Port
RS-232 (9-pin) CS I/O (9-pin) COM1 (C1 - C2) COM2 (C3 - C4) C1 C3 C1, C2, C3

Voltage Level
RS-232 TTL TTL TTL 5 VDC 5 VDC 5 VDC

Logic
Full duplex asynchronous RS-232 Full duplex asynchronous RS-232 Full duplex asynchronous RS-232/TTL Full duplex asynchronous RS-232/TTL SDI-12 SDI-12 SDM (used with CSI peripherals only)

11.8.3

Protocols
PakBus is the protocol native to the CR800 and transparently handles routine point-to-point and network communications among PCs and Campbell Scientific dataloggers. Modbus and DNP3 are industry standard networking SCADA protocols that optionally operate in the CR800 with minimal configuration by the user. PakBus, Modbus, and DNP3 operate on the RS232, CS I/O, and four COM ports. SDI-12 is a protocol used by some smart sensors that requires minimal configuration on the CR800. Read More! See SECTION. SDI-12 Recording (p. 79), SECTION. SDI-12 Sensor Support (p. 232), SECTION. PakBus Overview (p. 353), SECTION. DNP3 (p. 365), and SECTION. Modbus (p. 368). Many instruments require non-standard protocols to communicate with the CR800. Note If an instrument or sensor optionally supports SDI-12, Modbus or DNP3, consider using these protocols before programming a custom protocol. These higher level protocols are standardized among many manufacturers and are easy to use, relative to a custom protocol. SDI-12, Modbus, and DNP3 also support addressing systems that allow multiplexing of several sensors on a single communications port, which makes for more efficient use of resources.

11.8.4

Terms
Asynchronous Indicates the sending and receiving devices are not synchronized using a clock signal.

264

Section 11. Programming Resource Library Baud rate the rate at which data are transmitted. Note "baud rate", in this context, is used as a nominative term rather than as a technical term. Comparing the technical terms "Bits per second" (Bps), "bytes per second" (bps), and "baud rate" requires an extensive discussion that is outside the scope of this manual. Big Endian "Big end first." Placing the most significant integer at the beginning of a numeric word, reading left to right.

cr Carriage Return

Data bits number of bits used to describe the data, and fit between the start and stop bits. Sensors typically use 7 or 8 data bits.

Duplex Can be half or full. Full duplex is simultaneous, bidirectional data.

lf line feed

Little Endian "Little end first." Placing the most significant integer at the end of a numeric word, reading left to right.

LSB Least significant bit (the trailing bit)

Marks and Spaces RS-232 signal levels are inverted logic compared to TTL. The different levels are called marks and spaces. When referenced to signal ground, the valid RS-232 voltage level for a mark is -3 to -25, and for a space is +3 to +25 with -3 to + 3 considered the transition range and meaningless. A mark is a logic 1 and negative voltage. A space is a logic 0 and positive voltage.

MSB Most significant bit (the leading bit)

265

Section 11. Programming Resource Library RS-232C Refers to the standard used to define the hardware signals and voltage levels. The CR800 supports several options of serial logic and voltage levels including RS-232 logic at TTL levels and TTL logic at TTL levels.

RX Receive

SP Space

Start bit Is the bit used to indicate the beginning of data.

Glossary. Stop bit Is the end of the data bits. The stop bit can be 1, 1.5 or 2.

TX Transmit

11.8.5

CRBASIC Programming
To transmit or receive RS-232 or TTL signals, a serial port (see TABLE. CR800 Serial Ports (p. 264)) must be opened and configured through CRBASIC with the SerialOpen() instruction. The SerialClose() instruction can be used to close the serial port. Below is practical advice regarding the use of SerialOpen() and SerialClose(). Program CRBASIC EXAMPLE. Receive RS-232 String (p. 272) shows the use of SerialOpen(). Consult CRBASIC Editor Help for more information. SerialOpen (COM Port , Baud Rate , Format , TX Delay , Buffer Size) COM Port - Refer to CRBASIC Editor Help for a complete list of COM ports available for use by SerialOpen(). Baud rate-baud rate mismatch is frequently a problem when developing a new application. Check for matching baud rates. Some developers prefer to use a fixed baud rate during initial development. When set to a negative value, auto-baud rate detect is enabled. Auto-baud is useful when using the CS I/O and RS232 ports since it allows ports to be simultaneously used for sensor and PC telecommunications. Format-determines data type and if PakBus communications can occur on the COM port. If the port is expected to read sensor data and support normal PakBus telemetry operations, use the auto-baud rate option and ensure this option supports PakBus communications.

266

Section 11. Programming Resource Library Buffer size-The buffer holds received data until it is removed. SerialIn(), SerialInRecord(), and SerialInBlock() instructions are used to read data from the buffer to variables. Once data are in variables, string manipulation instructions are used to format and parse the data. SerialClose() must be used before SerialOpen() can be used again to reconfigure the same serial port, or before the port can be used to communicate with a PC.

11.8.5.1 Input Instruction Set Basics


SerialOpen()1 Be aware of buffer size (ring memory) Closes PPP (if active) Returns TRUE or FALSE when set equal to a Boolean variable SerialClose() Examples of when to close Reopen PPP Finished setting new settings in a Hayes modem Finished dialing a modem

Returns TRUE or FALSE when set equal to a Boolean variable SerialFlush() Puts the read and write pointers back to the beginning Returns TRUE or FALSE when set equal to a Boolean variable SerialIn()1 Can wait on the string until it comes in Timeout is renewed after each character is received SerialInRecord tends to obsolete SerialIn. Buffer size margin (1 extra record + 1 byte). SerialInBlock()1 For binary data (perhaps integers, floats, data with NULL characters). Destination can be of any type. Buffer size margin (1 extra record + 1 byte).

267

Section 11. Programming Resource Library

SerialOutBlock()1,3 Binary Can run in pipeline mode inside the digital measurement task (along with SDM instructions) if COM1..COM2 and the number of bytes is a constant. SerialOut() Handy for ASCII command and a known response, e.g., Hayes modem commands. Returns 0 if not open else the number of bytes sent. SerialInRecord()2 Can run in pipeline mode inside the digital measurement task (along with SDM instructions) if COM1..COM2 and the number of bytes is a constant. Simplifies synchronization with one way. Simplifies working with protocols that send a "record" of data with known start and/or end characters, or a fixed number of records in response to a poll command. If a start and end word is not present, then a time gap is the only remaining separator of records. Using Com1..COM2 coincidentally detects a time gap of >100 bits as long as the records are less than 256 bytes. Buffer size margin (1 extra record + 1 byte).
1

Processing instructions Measurement instruction in the pipeline mode Measurement instruction if expression evaluates to a constant

11.8.5.2 Input Programming Basics


Applications with the purpose of receiving data from another device usually include the following procedures. Other procedures may be required depending on the application. 1. Know what the sensor supports and exactly what the data are. Most sensors work well with TTL voltage levels and RS-232 logic. Some things to consider: Become thoroughly familiar with the data to be captured Can the sensor be polled? Does the sensor send data on its own schedule? Are there markers at the beginning or end of data? Markers are very useful for identifying a variable length record.

268

Section 11. Programming Resource Library

Does the record have a delimiter character, e.g. ",", spaces or tabs? These delimiters are useful for parsing the record into usable numbers. Will the sensor be sending multiple data strings? Multiple strings usually require filtering before parsing. How fast will data be sent to the datalogger? Is power consumption critical? Does the sensor compute a checksum? Which type? A checksum is useful to test for data corruption.

2. Open a serial port (CRBASIC SerialOpen() command) Example: SerialOpen(Com1,9600,0,0,10000) Designate the correct port in CRBASIC Correctly wire the device to the CR800 Match the port's baud rate to the baud rate of the device in CRBASIC. Use a fixed baud rate (rather than autobaud) when possible.

3. Receive serial data as a string (CRBASIC SerialIn() or SerialInRecord() command) Example: SerialInRecord(Com2,SerialInString,42,0,35,"",01) Declare the string variable large enough to accept the string. Example: Public SerialInString As String * 25

Observe the input string in the input string variable in software numeric monitor.

Note SerialIn() and SerialInRecord() receive the same data. SerialInRecord() is generally used for data streaming into the CR800, while SerialIn is used for data that is received in discrete blocks. 4. Parse (split up) the serial string (CRBASIC SplitStr() Command) Separates string into numeric and / or string variables. Example: SplitStr(InStringSplit,SerialInString,"",2,0) Declare an array to accept the parsed data Example: Public InStringSplit(2) As String Example: Public SplitResult(2) As Float

269

Section 11. Programming Resource Library

11.8.5.3 Output Programming Basics


Applications with the purpose of transmitting data to another device usually include the following procedures. Other procedures may be required depending on the application. 1. Open a serial port (SerialOpen() command) to configure it for communications. Parameters are set according to the requirements of the communications link and the serial device. Example: SerialOpen (Com1,9600,0,0,10000) Designate the correct port in CRBASIC Correctly wire the device to the CR800 Match the port's baud rate to the baud rate of the device in CRBASIC. Use a fixed baud rate (rather than auto baud) when possible.

2. Build the output string Example: SerialOutString = "*" & "27.435" & "," & "56.789" & "#" Tip Concatenate (add) strings together using & instead of +. Tip CHR() instruction is used to insert ASCII / ANSI characters into a string.

3. Output string via the serial port (SerialOut() or SerialOutBlock() command) Example: SerialOut (Com1,SerialOutString,"",0,100) Declare the output string variable large enough to hold the entire concatenation. Example: Public SerialOutString As String * 100 SerialOut() and SerialOutBlock() output the same data, except that SerialOutBlock transmits null values while SerialOut() strings are terminated by a null value.

11.8.5.4 Translating Bytes


One or more of three principle data formats may end up in the SerialInString variable (see examples in SECTION. Serial Input Programming Basics (p. 268)). Data may be combinations or variations of all of these. The manufacturer of the instrument must provide the rules by which data are to be decoded. Alpha-numeric: each digit represents its own alpha-numeric value, i.e., R = the letter R, and 2 = decimal 2. This is the easiest protocol to translate since literal translation arrives complete from the transmitting instrument. It remains to the CRBASIC program to parse (split) the string up and place the values in CR800 variables.

270

Section 11. Programming Resource Library Example (humidity, temperature, and pressure sensor): SerialInString = "RH= 60.5 %RH T= 23.7 C Tdf= 15.6 C Td= 15.6 C a= 13.0 g/m3 x= 11.1 g/kg Tw= 18.5 C H2O= 17889 ppmV pw=17.81 hPa pws 29.43 hPa h= 52.3 kJ/kg dT= 8.1 C" Hex Pairs: Bytes are translated to hex pairs, consisting of digits 0 - 9 and letters a - f. Each pair describes a hexadecimal ASCII / ANSI code. Some codes translate to alpha-numeric values, others to symbols or non-printable control characters. Example (Temperature Sensor): SerialInString = "23 30 31 38 34 0D" (translates to #01 84 cr) Binary: Bytes are processed on a bit-by-bit basis. Character 0 (Null, &b00) is a valid part of binary data streams. However, the CR800 uses Null terminated strings, so anytime a Null is received, a string is terminated. The termination is usually premature when reading binary data. To remedy this problem, the SerialInBlock() or SerialInRecord() instruction is required when reading binary data from the serial port buffer to a variable. The variable must be an array set As Long data type, as in, Dim SerialInString As Long

11.8.5.5 Memory Considerations


Several points regarding memory should be considered when receiving and processing serial data. Serial buffer. The serial port buffer, which is declared in the SerialOpen() instruction, must be large enough to hold all the data a device will send. The buffer holds the data for subsequent transfer to variables. Allocate extra memory to the buffer when needed, but recognize that added memory to the buffer reduces memory available for long term data storage. Note SerialInRecord running in pipeline mode, with the number of bytes parameter = 0. For the digital measurement sequence to know how much room to allocate in the Scan() instruction buffers (default of 3), SerialInRecord has to allocate itself the buffer size specified by SerialOpen (default 10,000, an overkill), or default 3*10,000 = 30K of buffer space. So, while making sure enough bytes are allocated in SerialOpen (the number of bytes per record * ((records/Scan)+1) + at least one extra byte), there is reason not to make the buffer size too large. (Note that if the number of bytes parameter is non-zero, then SerialInRecord needs to allocate itself only this many bytes instead of the number of bytes specified by SerialOpen.) Variable declarations. Variables used to receive data from the serial buffer can be declared as Public or Dim. DIMing variables has the effect of consuming less telecommunications bandwidth. When Public variables are viewed in software, the entire Public table is transferred at the update interval. If the Public table is large, telecommunications bandwidth can be taxed such that other data tables are not collected.

271

Section 11. Programming Resource Library String declarations. String variables are memory intensive. Determine how large strings are and declare variables just large enough to hold the string. If the sensor sends multiple strings at once, consider declaring a single string variable and read incoming strings one at a time. The CR800 adjusts the declared size of strings. One byte is always added to the declared length, which is then increased by up to another 3 bytes to make length divisible by 4. Declared string length, not number of characters, determines the memory consumed when strings are written to memory. Consequently, large strings not filled with characters waste significant memory.

11.8.5.6 Demonstration Program


CRBASIC EXAMPLE. Receive RS-232 String (p. 272) is provided as an exercise in serial input / output programming. The example only requires the CR800 and a single wire jumper between COM1 Tx and COM2 Rx. The program simulates a temperature and relative humidity sensor transmitting RS-232 data out COM1 as an alpha-numeric string.

CRBASIC EXAMPLE 46. Serial I/O program to receive RS-232 string


'To demonstrate CR800 Serial I/O features, this program simulates a serial sensor 'by transmitting a serial string via COM1 TX. The serial string is received at 'COM2 RX via jumper wire. Simulated air temperature = 27.435 F, relative humidity = '56.789%. 'Wiring: 'COM1 TX (C1) ----- COM2 RX (C4) 'Serial Out Declarations Public TempOut As Float Public RhOut As Float Declare a string variable large enough to hold the output string. Public SerialOutString As String * 25 Serial In Declarations' Declare a string variable large enough to hold the input string Public SerialInString As String * 25 'Declare strings to accept parsed data. 'array can be declared as Float or Long Public InStringSplit(2) As String Alias InStringSplit(1) = TempIn Alias InStringSplit(2) = RhIn 'Main Program BeginProg 'Simulate temperature and RH sensor TempOut = 27.435 RhOut = 56.789 If parsed data is strictly numeric, this

'Set simulated temperature to transmit 'Set simulated relative humidity to 'transmit

272

Section 11. Programming Resource Library

Scan(5,Sec, 3, 0) 'Serial Out Code 'Transmits string "*27.435,56.789#" out COM1 SerialOpen(Com1,9600,0,0,10000) 'Open a serial port 'Build the output string SerialOutString = "*" & TempOut & "," & RhOut & "#" 'Output string via the serial port SerialOut(Com1,SerialOutString,"",0,100) 'Serial In Code 'Receives string "27.435,56.789" via COM2 'Uses * and # character as filters SerialOpen(Com2,9600,0,0,10000) 'Open a serial port 'Receive serial data as a string '42 is ASCII code for "*", 35 is code for "#" SerialInRecord(Com2,SerialInString,42,0,35,"",01) 'Parse the serial string SplitStr(InStringSplit(),SerialInString,"",2,0) NextScan EndProg

11.8.6

Testing Applications
A common problem when developing a serial I/O application is the lack of an immediately available serial device with which to develop and test programs. Using HyperTerminal, a developer can simulate the output of a serial device or capture serial input. Note HyperTerminal is provided as a utility with Windows XP and earlier versions of Windows. HyperTerminal is not provided with Windows Vista. HyperTerminal automatically converts binary data to ASCII on the screen. Binary data can be captured, saved to a file, and then viewed with a hexadecimal editor. Other terminal emulators are available from third party vendors that facilitate capture of binary or hex data.

11.8.6.1 Configure HyperTerminal


Create a HyperTerminal instance file by clicking Start | All Programs | Accessories | Communications | HyperTerminal. The windows in FIGURE. HyperTerminal Connection Description (p. 274) through FIGURE. HyperTerminal ASCII Setup (p. 275) are presented. Enter an instance name and click OK.

273

Section 11. Programming Resource Library

FIGURE 86. HyperTerminal Connection Description

FIGURE 87. HyperTerminal Connect To Settings

274

Section 11. Programming Resource Library

FIGURE 88. HyperTerminal COM Port Settings Click File | Properties | Settings | ASCII Setup... and set as shown.

FIGURE 89. HyperTerminal ASCII Setup

275

Section 11. Programming Resource Library

11.8.6.2 Create Send Text File


Create a file from which to send a serial string. The file shown in FIGURE. HyperTerminal Send Text File Example (p. 276) will send the string "[2008:028:10:36:22]C" to the CR800. Use Notepad or some other text editor that will not place unexpected hidden characters in the file.

FIGURE 90. HyperTerminal Send Text File Example

To send the file, click Transfer | Send Text File | Browse for file, then click OK.

11.8.6.3 Create Text Capture File


FIGURE. HyperTerminal Text Capture File Example (p. 276) shows a HyperTerminal capture file with some data. The file is empty before use commences.

FIGURE 91. HyperTerminal Text Capture File Example

Engage text capture by clicking on Transfer | Capture Text | Browse, select the file and click OK.

11.8.6.4 Serial Input Test Program


CRBASIC EXAMPLE. Measure Sensors / Send RS-232 Data (p. 277) illustrates a use of CR800 serial I/O features. Problem: An energy company has a large network of older CR510 dataloggers into which new CR800 dataloggers are to be incorporated. The CR510 dataloggers are programmed to output data in the legacy Campbell Scientific

276

Section 11. Programming Resource Library Printable ASCII format, which satisfies requirements of the customer's data acquisition system. The network administrator also prefers to synchronize the CR510 clocks from a central computer using the legacy Campbell Scientific 'C' command. The CR510 datalogger is hard-coded to output Printable ASCII and recognize the 'C' command. CR800 dataloggers, however, require custom programming to output and accept these same ASCII strings. A similar program can be used to emulate CR10X and CR23X dataloggers. Solution: CRBASIC EXAMPLE. Measure Sensors / Send RS-232 Data (p. 277) imports and exports serial data via the CR800 RS-232 port. Imported data is expected to have the form of the legacy Campbell Scientific time set 'C' command. Exported data has the form of the legacy Campbell Scientific Printable ASCII format. Note The RS-232 port can be used to download the datalogger program if the SerialOpen() baud rate matches that of CSI datalogger support software (LoggerNet / PC400 / RTDAQ / PC200W). However, two-way PakBus communications will cause the CR800 to occasionally send unsolicited PakBus packets out the RS-232 port for at least 40 seconds after the last PakBus communication. This will produce some "noise" on the intended data output signal. Monitor the CR800 RS-232 port with the HyperTerminal instance described in SECTION. Configure HyperTerminal (p. 273). Send C command file to set the clock according to the text in the file. Note The HyperTerminal file will not update automatically with actual time. The file only simulates a clock source.

CRBASIC EXAMPLE 47. Measure Sensors / Send RS-232 Data


'CR800 is programmed to accept legacy "C" command to set the CR800 clock. 'Declarations 'Visible Variables Public StationID Public KWH_In Public KVarH_I Public KWHHold Public KVarHold Public KWHH Public KvarH Public InString As String * 25 Public OutString As String * 100 'Hidden Variables Dim i, rTime(9), OneMinData(6), OutFrag(6) As String Dim InStringSize, InStringSplit(5) As String Dim Date, Month, Year, DOY, Hour, Minute, Second, uSecond Dim LeapMOD4, LeapMOD100, LeapMOD400 Dim Leap4 As Boolean, Leap100 As Boolean, Leap400 As Boolean, Dim LeapYear As Boolean Dim ClkSet(7) As Float

277

Section 11. Programming Resource Library

'One Minute Data Table DataTable(OneMinTable,true,-1) OpenInterval DataInterval(0,1,Min,10) Totalize(1, KWHH,FP2,0) Sample(1, KWHHold,FP2) Totalize(1, KvarH,FP2,0) Sample(1, KVarHold,FP2) Sample(1, StationID,FP2) EndTable 'Clock Set Record Data Table DataTable(ClockSetRecord,True,-1) Sample(7,ClkSet(),FP2) EndTable

'sets interval same as found in CR510

'Subroutine to convert date formats (day-of-year to month and date) Sub DOY2MODAY 'Store Year, DOY, Hour, Minute and Second to Input Locations. Year = InStringSplit(1) DOY = InStringSplit(2) Hour = InStringSplit(3) Minute = InStringSplit(4) Second = InStringSplit(5) uSecond = 0 'Check if it is a leap year: 'If Year Mod 4 = 0 and Year Mod 100 <> 0, then it is a leap year OR 'If Year Mod 4 = 0, Year Mod 100 = 0, and Year Mod 400 = 0, then it 'is a leap year LeapYear = 0 'Reset leap year status location

LeapMOD4 = Year MOD 4 LeapMOD100 = Year MOD 100 LeapMOD400 = Year MOD 400 If LeapMOD4 = 0 Then Leap4 = True Else Leap4 = False If LeapMOD100 = 0 Then Leap100 = True Else Leap100 = False If LeapMOD400 = 0 Then Leap400 = True Else Leap400 = False If Leap4 = True Then LeapYear = True If Leap100 = True Then If Leap400 = True Then LeapYear = True Else LeapYear = False EndIf EndIf Else LeapYear = False EndIf

278

Section 11. Programming Resource Library

'If it is a leap year, use this section. If (LeapYear = True) Then Select Case DOY Case Is < 32 Month = 1 Date = DOY Case Is < 61 Month = 2 Date = DOY + -31 Case Is < 92 Month = 3 Date = DOY + -60 Case Is < 122 Month = 4 Date = DOY + -91 Case Is < 153 Month = 5 Date = DOY + -121 Case Is < 183 Month = 6 Date = DOY + -152 Case Is < 214 Month = 7 Date = DOY + -182 Case Is < 245 Month = 8 Date = DOY + -213 Case Is < 275 Month = 9 Date = DOY + -244 Case Is < 306 Month = 10 Date = DOY + -274 Case Is < 336 Month = 11 Date = DOY + -305 Case Is < 367 Month = 12 Date = DOY + -335 EndSelect 'If it is not a leap Else Select Case DOY Case Is < 32 Month = 1 Date = DOY Case Is < 60 Month = 2 Date = DOY + Case Is < 91 Month = 3 Date = DOY + Case Is < 121 Month = 4 Date = DOY + Case Is < 152 Month = 5 Date = DOY + Case Is < 182 Month = 6 Date = DOY + year, use this section.

-31

-59

-90

-120

-151

279

Section 11. Programming Resource Library

Case Is < 213 Month = 7 Date = DOY Case Is < 244 Month = 8 Date = DOY Case Is < 274 Month = 9 Date = DOY Case Is < 305 Month = 10 Date = DOY Case Is < 336 Month = 11 Date = DOY Case Is < 366 Month = 12 Date = DOY EndSelect EndIf EndSub

+ -181

+ -212

+ -243

+ -273

+ -304

+ -334

'//////////////////////////// PROGRAM //////////////////////////// BeginProg StationID = 4771 Scan(1,Sec, 3, 0) '/////////////////Measurement Section//////////////////////// 'PulseCount(KWH_In, 1, 1, 2, 0, 1, 0) 'Activate this line in working program KWH_In = 4.5 'Simulation -- delete this line from working program 'PulseCount(KVarH_I, 1, 2, 2, 0, 1, 0) 'Activate this line in working program KVarH_I = 2.3 'Simulation -- delete this line from working program KWHH = KWH_In KvarH = KVarH_I KWHHold = KWHH + KWHHold KVarHold = KvarH + KVarHold CallTable OneMinTable '////////////////////Serial I/O Section///////////////////// SerialOpen(ComRS232,9600,0,0,10000) '///////////////Serial Time Set Input Section/////////////// 'Accept old C command -- [2008:028:10:36:22]C -- parse, process, set 'clock (Note: Chr(91) = "[", Chr(67) = "C") SerialInRecord(ComRS232,InString,91,0,67,InStringSize,01) If InStringSize <> 0 Then SplitStr(InStringSplit,InString,"",5,0) Call DOY2MODAY 'Call subroutine to convert day-of-year 'to month & day

280

Section 11. Programming Resource Library

ClkSet(1) = Year ClkSet(2) = Month ClkSet(3) = Date ClkSet(4) = Hour ClkSet(5) = Minute ClkSet(6) = Second ClkSet(7) = uSecond 'Note: ClkSet array requires year, month, date, hour, min, sec, msec ClockSet(ClkSet()) CallTable(ClockSetRecord) EndIf '/////////////////Serial Output Section///////////////////// 'Construct old Campbell Scientific Printable ASCII data format and output to COM1 'Read datalogger clock RealTime(rTime) If TimeIntoInterval(0,5,Sec) Then 'Load OneMinData table data for processing into printable ASCII GetRecord(OneMinData(),OneMinTable,1) 'Assign +/- Sign For i=1 To 6 If OneMinData(i) < 0 Then 'Note: chr45 is - sign OutFrag(i)=CHR(45) & FormatFloat(ABS(OneMinData(i)),"%05g") Else 'Note: chr43 is + sign OutFrag(i)=CHR(43) & FormatFloat(ABS(OneMinData(i)),"%05g") EndIf Next i 'Concatenate Printable ASCII string, then push string out RS-232 '(first 2 fields are ID, hhmm): OutString = "01+0115." & " 02+" & FormatFloat(rTime(4),"%02.0f") & FormatFloat(rTime(5),"%02.0f") OutString = OutString & " 03" & OutFrag(1) & " 04" & OutFrag(2) & " 05" & OutFrag(3) OutString = OutString & " 06" & OutFrag(4) & " 07" & OutFrag(5) & CHR(13) & CHR(10) & "" 'add CR LF null 'Send printable ASCII string out RS-232 port SerialOut(ComRS232,OutString,"",0,220) EndIf NextScan EndProg

11.8.7

Q&A
Q: I am writing a CR800 program to transmit a serial command that contains a null character. The string to transmit is:
CHR(02)+CHR(01)+"CWGT0"+CHR(03)+CHR(00)+CHR(13)+CHR(10)

How does the logger handle the null character? Is there a way that we can get the logger to send this?

281

Section 11. Programming Resource Library A: Strings created with CRBASIC are NULL terminated. Adding strings together means the 2nd string will start at the first null it finds in the first string. Use SerialOutBlock() instruction, which lets you send null characters, as shown below.
SerialOutBlock (COMRS232, CHR(02) + CHR(01) + "CWGT0" + CHR(03),8) SerialOutBlock (COMRS232, CHR(0),1) SerialOutBlock (COMRS232, CHR(13) + CHR(10),2)

Q: Please explain / summarize when the CR800 powers the RS-232 port? I get that there is an "always on" setting. How about when there are beacons? Does the SerialOpen instruction cause other power cycles? A: The RS-232 port is left on under the following conditions: 1) when the setting: RS-232Power is set, or 2) when the SerialOpen() for COMRS232 is used in the program. Both of these conditions power up the interface and leave it on (with no timeout). If SerialClose is used after SerialOpen() then the port is powered down and in a state waiting for characters to come in. Under normal operation the port is powered down waiting for input. Upon receiving input there is a 40 second software timeout that must expire before shutting down. The 40 second timeout is generally circumvented when communicating with LoggerNet / PC400 / RTDAQ / PC200W because it sends information as part of the protocol that lets the CR800 know that it can shut down the port. When in the "dormant" state with the interface powered down, hardware is configured to detect activity and wake up, but there is a penalty of losing the first character of the incoming data stream. PakBus takes this into consideration in the "ring packets" that are preceded with extra sync bytes at the start of the packet. For this reason SerialOpen leaves the interface powered up so no incoming bytes are lost. When the CR800 has data to send via the RS-232 port, if the data is not a response to a received packet, such as sending a beacon, then it will power up the interface, send the data and return to the "dormant" state with no 40 sec timeout.

Q: How can I reference specific characters in a string? A: Accessing the string using the 3rd dimension allows access to the remainder of the string that starts at the 3rd dimension specified. For example if
TempData = "STOP",

then
TempData(1,1,2) = "TOP", TempData(1,1,3) = "OP", TempData(1,1,1) = "STOP"

282

Section 11. Programming Resource Library

To handle single character manipulations, declare the string with a size of 1. That single character string can be used to search for specific characters. In the following example, the first character of a larger string is determined:
Public TempData as String * 1 TempData = LargerString If TempData = "S" Then...

A single character can be retrieved from any position in a string using the third dimension. To retrieve the 5th character of a larger string, follow this example:
Public TempData as String * 1 TempData = LargerString(1,1,5)

Q: How can I get SerialIn(), SerialInBlock(), and SerialInRecord() to read extended characters? A: Open the port in binary mode (mode 3) instead of PakBus enabled mode (mode 0).

Q: Tests with an oscilloscope showed the sensor was responding quickly, but the data were getting held up in the internals of the CR800 somewhere for 30 ms or so. Characters at the start of a response from a sensor, which come out in 5 ms, were apparently not accessible by the program for 30 ms or so; in fact, no data were in the serial buffer for 30 ms or so. A: As a result of internal buffering in the datalogger and / or external interfaces, data may not appear in the serial port buffer for a period ranging up to 50 ms (depending on the serial port being used). This should be borne in mind when setting timeouts for the SerialIn() and SerialOut() instructions, or user defined timeouts in constructs using the SerialInChk() instruction.

11.9 TrigVar and DisableVar - Controlling Data Output and Processing


TrigVar is the third parameter in the DataTable() instruction. It controls whether or not a data record is written to final storage. TrigVar control is subject to other conditional instructions such as the DataInterval() and DataEvent() instructions. DisableVar is the last parameter in most output processing instructions, such as Average(), Maximum(), Minimum(), etc. It controls whether or not a particular measurement or value is included in the affected output processing function. Note Together, TrigVar and DataInterval() grant functionality similar to Flag 0 in earlier generation CSI mixed-array dataloggers, such as the CR10X. DisableVar grants functionality similar to Flag 9. For individual measurements to affect summary data, output processing instructions such as Average() must be executed whenever the DataTable is called from the program - normally once each Scan. For example, for an average

283

Section 11. Programming Resource Library to be calculated for the hour, each measurement must be added to a total over the hour. This accumulation of data is not affected by TrigVar. TrigVar controls only the moment when the final calculation is performed and the processed data (the average) are written to the data table. For this summary moment to occur, TrigVar and all other conditions (i.e. DataInterval and DataEvent) must be true. Expressed another way, when TrigVar is false, output processing instructions (e.g. Average()) perform intermediate processing but not their final processing, and a new record will not be created. Note In many applications, output records are solely interval based and TrigVar is always set to TRUE (-1). In such applications DataInterval() is the sole specifier of the output trigger condition. CRBASIC EXAMPLE. Using TrigVar to Trigger Data Storage (p. 284) lists CRBASIC code that uses TrigVar rather than DataInterval to trigger data storage. FIGURE. Data from TrigVar Program (p. 284) shows data produced by the example code.

FIGURE 92. Data from TrigVar Program

284

Section 11. Programming Resource Library

CRBASIC EXAMPLE 48. Using TrigVar to Trigger Data Storage


'In this example, the variable "counter" is incremented by 1 each scan. The data table 'is called every scan, which includes the Sample(), Average(), and Totalize() 'instructions. TrigVar is true when counter = 2 or counter = 3. Data are stored when 'TrigVar is true. Data stored are the sample, average, and total of the variable 'counter, which is equal to 0, 1, 2, 3, or 4 when the data table is called. Public counter DataTable(Test,counter=2 or counter=3,100) Sample(1,counter,FP2) Average(1,counter,FP2,False) Totalize(1,counter,FP2,False) EndTable BeginProg Scan(1,Sec,0,0) counter = counter+1 If counter = 5 Then counter = 0 EndIf CallTable Test NextScan EndProg

11.10 NSEC Data Type


Data of NSEC data type reside only in final data storage. A datum of NSEC consists of 8 bytes -- 4 bytes of seconds since 1990 and 4 bytes of nanoseconds into the second. NSEC is declared in the Data Type parameter in final data storage output processing instructions (p. 164). It is used in the following applications. Placing a timestamp in a second position in a record. Accessing a timestamp from a data table and subsequently storing it as part of a larger data table. Maximum(), Minimum(), and FileTime() instructions produce a timestamp that may be accessed from the program after being written to a data table. The time of other events, such as alarms, can be stored using the RealTime() instruction. Accessing and storing a timestamp from another datalogger in a PakBus network.

11.10.1 NSEC Options


NSEC is used in a CRBASIC program one of the following three ways. In all cases, the time variable is only sampled with Sample() instruction Reps = 1. Time variable dimensioned to (1) and AS LONG. Sample() instruction assumes the time variable holds Seconds Since 1990 and microseconds into the second is 0. The value stored in final data storage is a standard time

285

Section 11. Programming Resource Library stamp. See CRBASIC EXAMPLE. NSEC Use with 1 Element Time Arrays (p. 286). Time variable array dimensioned to (2) and AS LONG.: Sample() instruction assumes the first time variable array element holds Seconds Since 1990 and the second element holds microseconds into the second. See CRBASIC EXAMPLE. NSEC Use with 2 Element Time Arrays (p. 286). Time variable array dimensioned to (7) or (9) and AS LONG or AS FLOAT. Sample() instruction assumes data are stored in the variable array in the sequence year, month, day of year, hour, minutes, seconds, and milliseconds. See CRBASIC EXAMPLE. NSEC Use with 7 and 9 Element Time Arrays (p. 287).

CRBASIC EXAMPLE 49. Using NSEC data type on a 1 element array


'A time stamp is retrieved into variable TimeVar(1) as seconds since 00:00:00 '1 January 1990. Because the variable is dimensioned to 1, NSEC assumes the value = 'seconds since 00:00:00 1 January 1990. 'Declarations Public PTemp Public TimeVar(1) As Long DataTable(FirstTable,True,-1) DataInterval(0,1,Sec,10) Sample(1,PTemp,FP2) EndTable DataTable(SecondTable,True,-1) DataInterval(0,5,Sec,10) Sample(1,TimeVar,Nsec) EndTable 'Program BeginProg Scan(1,Sec,0,0) TimeVar = FirstTable.TimeStamp CallTable FirstTable CallTable SecondTable NextScan EndProg

286

Section 11. Programming Resource Library

CRBASIC EXAMPLE 50. NSEC Use on a 2 Element Time Array


'TimeStamp is retrieved into variables TimeOfMaxVar(1) and TimeOfMaxVar(2). Because 'the variable is dimensioned to 2, NSEC assumes, '1) TimeOfMaxVar(1) = seconds since 00:00:00 1 January 1990, and '2) TimeOfMaxVar(2) = sec into a second. 'Declarations Public PTempC Public MaxVar Public TimeOfMaxVar(2) As Long DataTable(FirstTable,True,-1) DataInterval(0,1,Min,10) Maximum(1,PTempC,FP2,False,True) EndTable DataTable(SecondTable,True,-1) DataInterval(0,5,Min,10) Sample(1,MaxVar,FP2) Sample(1,TimeOfMaxVar,Nsec) EndTable 'Program BeginProg Scan(1,Sec,0,0) PanelTemp(PTempC,250) MaxVar = FirstTable.PTempC_Max TimeOfMaxVar = FirstTable.PTempC_TMx CallTable FirstTable CallTable SecondTable NextScan EndProg

287

Section 11. Programming Resource Library

CRBASIC EXAMPLE 51. NSEC Use with 7 and 9 Element Time Arrays
'Application: Demonstrate how to sample a timestamp into Final Data Storage using 'array DIMed to 7 or 9. 'Solution: 'A time stamp is retrieved into variable rTime(1) through rTime(9) as year, month, day, 'hour, minutes, seconds, and microseconds using the RealTime() instruction. The first 'seven time values are copied to variable rTime2(1) through rTime2(7). Because the 'variables are dimensioned to 7 or greater, NSEC assumes the first seven time factors 'in the arrays are year, month, day, hour, minutes, seconds, and microseconds. 'Declarations Public rTime(9) AS LONG Public rTime2(7) AS LONG Dim x DataTable(SecondTable,True,-1) DataInterval(0,5,Sec,10) Sample(1,rTime,NSEC) Sample(1,rTime2,NSEC) EndTable 'Program BeginProg Scan(1,Sec,0,0) RealTime(rTime) For x = 1 To 7 rTime2(x) = rTime(x) Next CallTable SecondTable NextScan EndProg

'(or Float) '(or Float)

288

Section 11. Programming Resource Library

CRBASIC EXAMPLE 52. NSEC Use to Convert Timestamp to Universal Time Strings
'Application: the CR800 needs to display Universal Time (UT) in human readable 'string forms. The CR800 can calculate UT by adding the appropriate offset to a 'standard timestamp. Adding offsets requires the timestamp be converted to numeric 'form, the offset applied, then the new time be converted back to string forms. 'These are accomplished by, '1) reading Public.TimeStamp into a LONG numeric variable. '2) store it into a type NSEC datum in Final Data Storage. '3) sample it back into string form using the TableName.FieldName notation. 'Declarations PUBLIC UTTime(3) As String * 30 DIM TimeLong AS LONG CONST UT_Offset = -7 * 3600 DataTable(TimeTable,true,1) Sample(1,TimeLong,NSEC) EndTable 'Program BeginProg Scan(1,Sec,0,0) '1) read Public.TimeStamp into a LONG numeric variable. TimeLong = Public.TimeStamp(1,1) + UTC_Offset '2) store it into a type NSEC datum in Final Data Storage. CallTable(TimeTable) '3) sample time to three string forms using the TableName.FieldName notation. 'Form 1: "mm/dd/yyyy hr:mm:ss UTTime(1) = TimeTable.TimeLong(1,1) 'Form 2: "dd/mm/yyyy hr:mm:ss UTTime(2) = TimeTable.TimeLong(3,1) 'Form 3: "ccyy-mm-dd hr:mm:ss (ISO 8601 Int'l Date) UTTime(3) = TimeTable.TimeLong(4,1) NextScan EndProg

'- 7 Hours offset (as seconds)

11.11 Bool8 Data Type


Boolean variables are used to represent conditions that have only 2 states -- true or false -- such as program control flags and hardware control ports. A BOOLEAN data type variable uses the same 4 byte integer format as a LONG data type, but it can be set to only one of two values. To save data storage space, and data transmission bandwidth, consider using BOOL8 format to store data in final storage data tables. BOOL8 is a one byte variable that holds 8 bits of information (8 states * 1 bit per state). To store the same information using the 32-bit BOOLEAN data type, 256 bits are required (8 states * 32 bits per state). When programming with BOOL8, repetitions in the output processing DataTable() instruction must be divisible by two, since an odd number of bytes cannot be stored. Also note that when the CR800 converts a LONG or FLOAT data type to BOOL8, only the least significant 8 bits of the binary equivalent are

289

Section 11. Programming Resource Library used, i.e., only the binary representation of the decimal integer modulo divide (p. 423) 256 is used. Example:
Given: LONG integer 5435 Find: BOOL8 representation of 5435 Solution: 5435 / 256 = 21.2304687 0.2304687 * 256 = 59 Binary representation of 59 = 00111011 (CR800 stores these bits in reverse order)

When datalogger support software (p. 465) retrieves the BOOL8 data type, it splits it apart into 8 fields of -1 or 0 when storing to an ASCII file. Consequently, more memory is required for the ASCII file, but CR800 memory is conserved. The compact BOOL8 data type also results in less use of telecommunications band width when data are collected. CRBASIC EXAMPLE. Bool8 and the Bit-shift Operators (p. 292) programs the CR800 to monitor the state of 32 'alarms' as a tutorial exercise. The alarms are toggled by manually entering zero or non-zero (e.g., 0 or 1) in each public variable representing an alarm as shown in FIGURE. Alarms Toggled in BitShift Example (p. 290). Samples of the four public variables FlagsBool(1), FlagsBool(2), FlagsBool(3), and FlagsBool(4) are stored in data table "Bool8Data" as four 1-byte values. However, as shown in FIGURE. Bool8 Data from Bit-Shift Example (Numeric Monitor) (p. 290), when viewing the data table in a datalogger support software (p. 465) numeric monitor, data are conveniently translated into 32 values of True or False. In addition, as shown in FIGURE. Bool8 Data from Bit-Shift Example (PC Data File) (p. 291), when datalogger support software (p. 465) stores the data in an ASCII file, it is stored as 32 columns of either 0 or -1, each column representing the state of an alarm. Variable aliasing can be employed in the CRBASIC program to make the data more understandable.

FIGURE 93. Alarms Toggled in Bit-Shift Example

290

Section 11. Programming Resource Library

FIGURE 94. Bool8 Data from Bit-shift Example (Numeric Monitor)

FIGURE 95. Bool8 Data from Bit-shift Example (PC Data File)

291

Section 11. Programming Resource Library

CRBASIC EXAMPLE 53. Programming with Bool8 and a bit-shift operator


Public Alarm(32) Public Flags As Long Public FlagsBool8(4) As Long DataTable(Bool8Data,True,-1) DataInterval(0,1,Sec,10) 'store bits 1 through 16 in columns 1 through 16 of data file Sample(2,FlagsBool8(1),Bool8) 'store bits 17 through 32 in columns 17 through 32 of data file Sample(2,FlagsBool8(3),Bool8) EndTable BeginProg Scan(1,Sec,3,0) 'Reset all bits each pass before setting bits selectively Flags = &h0 'Set bits selectively. Hex is used to save space. 'Logical OR bitwise comparison 'If bit in OR bit in The result 'Flags Is Bin/Hex Is Is '---------------------------' 0 0 0 ' 0 1 1 ' 1 0 1 ' 1 1 1 'Binary equivalent of Hex: If Alarm(1) Then Flags = Flags OR &h1 If Alarm(3) Then Flags = Flags OR &h4 If Alarm(4) Then Flags = Flags OR &h8 If Alarm(5) Then Flags = Flags OR &h10 If Alarm(6) Then Flags = Flags OR &h20 If Alarm(7) Then Flags = Flags OR &h40 If Alarm(8) Then Flags = Flags OR &h80 If Alarm(9) Then Flags = Flags OR &h100 If Alarm(10) Then Flags = Flags OR &h200 If Alarm(11) Then Flags = Flags OR &h400 If Alarm(12) Then Flags = Flags OR &h800 If Alarm(13) Then Flags = Flags OR &h1000 If Alarm(14) Then Flags = Flags OR &h2000 If Alarm(15) Then Flags = Flags OR &h4000 If Alarm(16) Then Flags = Flags OR &h8000 If Alarm(17) Then Flags = Flags OR &h10000 If Alarm(18) Then Flags = Flags OR &h20000 If Alarm(19) Then Flags = Flags OR &h40000 If Alarm(20) Then Flags = Flags OR &h80000 If Alarm(21) Then Flags = Flags OR &h100000 If Alarm(22) Then Flags = Flags OR &h200000 If Alarm(23) Then Flags = Flags OR &h400000 If Alarm(24) Then Flags = Flags OR &h800000 If Alarm(25) Then Flags = Flags OR &h1000000

' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

&b10 &b100 &b1000 &b10000 &b100000 &b1000000 &b10000000 &b100000000 &b1000000000 &b10000000000 &b100000000000 &b1000000000000 &b10000000000000 &b100000000000000 &b1000000000000000 &b10000000000000000 &b100000000000000000 &b1000000000000000000 &b10000000000000000000 &b100000000000000000000 &b1000000000000000000000 &b10000000000000000000000 &b100000000000000000000000 &b1000000000000000000000000

292

Section 11. Programming Resource Library

If If If If If If If

Alarm(26) Alarm(27) Alarm(28) Alarm(29) Alarm(30) Alarm(31) Alarm(32)

Then Then Then Then Then Then Then

Flags Flags Flags Flags Flags Flags Flags

= = = = = = =

Flags Flags Flags Flags Flags Flags Flags

OR OR OR OR OR OR OR

&h2000000 &h4000000 &h8000000 &h10000000 &h20000000 &h40000000 &h80000000

' &b10000000000000000000000000 ' &b100000000000000000000000000 ' &b1000000000000000000000000000 ' &b10000000000000000000000000000 ' &b100000000000000000000000000000 ' &b1000000000000000000000000000000 '&b10000000000000000000000000000000

'Note &HFF = &B11111111. By shifting at 8 bit increments along 32-bit 'Flags' (Long 'data type), the first 8 bits in the four Longs FlagsBool8(4) are loaded with alarm 'states. Only the first 8 bits of each Long 'FlagsBool8' are stored when converted 'to Bool8. 'Logical AND bitwise comparison 'If bit in 'Flags Is '---------' 0 ' 0 ' 1 ' 1 FlagsBool8(1) FlagsBool8(2) FlagsBool8(3) FlagsBool8(4) OR bit in Bin/Hex Is ---------0 1 0 1 = = = = Flags AND (Flags >> (Flags >> (Flags >> The result Is ---------0 0 0 1 &HFF 'AND 1st 8 bits of "Flags" & 11111111 8) AND &HFF 'AND 2nd 8 bits of "Flags" & 11111111 16) AND &HFF 'AND 3rd 8 bits of "Flags" & 11111111 24) AND &HFF 'AND 4th 8 bits of "Flags" & 11111111

CallTable(Bool8Data) NextScan EndProg

11.12 Burst
Bursts are programmed episodes of very rapid analog measurement. The most rapid measurements in the CR800 occur as single-channel bursts of up to 2 kHz. Measurement speeds up to 600 Hz can be achieved in parallel channel bursts. Burst measurements require the program to be compiled in pipeline mode. The Scan () instruction buffers parameter makes burst possible. Increasing buffers number increases memory use and enables the CR800 to hold more measurements for processing while the measurement hardware continues to work. Buffers use shown in the example programs are optimized for the specific program only. Variation from the examples may require more or fewer buffers to be allocated.

11.12.1 Single Channel Burst


Single-channel burst directs the CR800 to make rapid, precisely timed measurements on successive single-ended or differential voltage input channels, each channel's burst completing before the next channel's burst begins. See FIGURE. Comparing Single-Channel Burst and Non-Burst Measurements (p. 294). TABLE. Single-Channel Burst Specifications (p. 294) summarizes SingleChannel Burst specifications.

293

Section 11. Programming Resource Library

TABLE 51. Single-Channel Burst Specifications


Single-Channel Burst enabled instructions Maximum measurements per burst Maximum burst rate Bridge excitation enabled with VoltSe(), VoltDiff(), TCSe(), TCDiff() 65535 2 kHz ExciteV()

FIGURE. Comparing Single-Channel Burst and Non-Burst Measurements (p. 294) illustrates principle differences between single-channel burst and non-burst measurements by diagramming sequences for a single-ended measurement.

FIGURE 96. Comparing Single-channel Burst and Non-Burst Measurements

Single-channel burst is invoked in the VoltDiff () or VoltSE () instructions by entering a negative sign, "-", before the channel number in the DiffChan or SEChan parameter. Reps, SEChan, DiffChan, and SettlingTime parameters are used differently in single-channel burst. Also direct special consideration to the size of the Dest variable array. Parameter differences are summarized in TABLE. Parameters for Single-Channel Burst Enabled Instructions (p. 295). Differences between CR800 and legacy CR10X datalogger burst mode are listed in TABLE. Comparing Single-Channel and Array Based Datalogger Burst (p. 295).

294

Section 11. Programming Resource Library

TABLE 52. Comparing Single-Channel and Array Based Datalogger Burst


Burst mode was invoked in older array based CSI dataloggers using Instruction 23 Burst Measurement. CR800 Channel Sequence : 1, 1, 1, 2, 2, 2, 3, 3, 3 2 kHz Max Data output only to resident memory Raw A/D output not possible Optional output to CS mass storage media (USB: drive) Communications OK during burst Triggers from Scan All voltage ranges OK
a a

Array Based Datalogger (CR10X, CR23X) Channel Sequence : 1, 2, 3, 1, 2, 3, 1, 2, 3 750 Hz Max (CR10X); 1.5 kHz Max (CR23X) Data to resident memory or out serial port Raw A/D output possible Optional output to max 6 Mbyte (CR10X) or max 16 Mbyte (CR23X) storage modules No communications during burst Triggers from P23 parameters Only voltage ranges 25 mV (CR10X) and larger are practical.
b

A single VoltDiff() or VoltSE() instruction can burst on one channel only. To burst on multiple channels, multiple VoltDiff() or VoltSE() instruction are entered into the CRBASIC program. Burst on one channel completes before burst on the second channel begins. A single P23 instruction can burst on multiple channels, near simultaneously, by first measuring the channel programmed for first analog measurement, then the following channels sequentially, such that all channels complete at about the same time.

11.12.1.1.1

Single-Channel Burst Mode Programming CRBASIC EXAMPLE. Single-Channel Burst Programming (p. 296) shows a simple program bursting on a single-ended thermocouple, 100 measurements at a 2 kHz rate. Data are logged to memory when the variable Seconds is between 28 and 35, inclusive. TABLE 53. Parameters for Single-Channel Burst Enabled Instructions
CRBASIC Parameter Dest Reps Range SEChan DiffChan RevDiff SettlingTime Integ Standard Analog Mode Var DIMed (1) to (16) Sequential Channels N/C 1 to 6 1 to 3 N/C Settling Time 250 s, 50 / 60 Hz rejection available. Single-channel Burst Var DIMed (1) to (65535) Number of Measurements on single channel (65535 Max) N/C -1 to -6 -1 to -3 N/C Sample Interval (500 s minimum) 50 / 60 Hz rejection available but not normally used.

295

Section 11. Programming Resource Library

TABLE 53. Parameters for Single-Channel Burst Enabled Instructions


CRBASIC Parameter Mult Offset N/C N/C Standard Analog Mode N/C N/C Single-channel Burst

CRBASIC EXAMPLE 54. Single-Channel Burst


Public Seconds Public PanelT Public ThCSe(100) 'dimension variable for 100 measurements DataTable(TestSE,1,-1) DataEvent(0,Seconds=28,Seconds=35, 0) Sample(1,Seconds,FP2) Sample(1,PanelT,FP2) Sample(100,ThCSe(),FP2) EndTable BeginProg Scan(1,Sec,0,0) PanelTemp(PanelT,250) TCSe(ThCSe(),100,mV2.5,-1,TypeT,PanelT,False,500,250,1.0,0) Seconds = Seconds + 1 CallTable TestSE NextScan EndProg

'log data only between seconds 28 and 35, 'inclusive

'100 measurements 'at 2 kHz

11.12.2 Parallel Channel Burst


Parallel channel bursts are measurements on multiple channels, all bursts completing at about the same time. For bursts of 100 Hz or less, the Scan / NextScan instructions are used. For bursts of 101 to 600 Hz, the SubScan / NextSubScan instructions are used on one or two channels.

296

Section 11. Programming Resource Library

11.12.2.1 Scan / NextScan Burst


CRBASIC EXAMPLE 55. Single-ended Parallel Burst in Scan / NextScan Construct
' 'Number 'of 'SE 'Channels '-------'16 Data Storage Rate Hz ------100 Time to Fill 4 Mbyte Memory Minutes -------13.5 81066 Number of Records at Fill -------

Measure Speed Hz ------100

PipeLineMode Public Measurement(16) Public Run as Boolean 'DataTable(TableName,Trigger,Size) DataTable(Burst,Run,-1) Sample(16,Measurement(),FP2) EndTable BeginProg 'Scan(Interval,Units,BuffOpt,Count) Scan(10,mSec,5,0) 'VoltSe(Dest,Reps,Range,SEChan,MeasOffset,Settle,Integ,Mult,Offset) VoltSe(Measurement(),16(15|16),mV5000,1,False,100,250,1.0,0) CallTable Burst NextScan EndProg

CRBASIC EXAMPLE 56. Differential Parallel Burst in Scan() / NextScan Construct


' 'Number 'of 'Diff 'Channels '-------' 8 PipeLineMode Public Measurement(8) Public Run as Boolean 'DataTable(TableName,Trigger,Size) DataTable(Burst,Run,-1) Sample(8,Measurement(),FP2) EndTable BeginProg 'Scan(Interval,Units,BuffOpt,Count) Scan(10,mSec,5,0) 'VoltDiff(Dest,Reps,Range,DiffChan,RevDiff,Settle,Integ,Mult,Offset) VoltDiff(Measurement(),8,mV5000,1,False,100,250,1.0,0) CallTable Burst NextScan EndProg Data Storage Rate Hz ------100 Time to Fill Number 4 Mbyte of Memory Records Minutes at Fill -------------20.2 121598

Measure Speed Hz ------100

297

Section 11. Programming Resource Library

11.12.2.2 SubScan / NextSubScan Burst


SubScan / NextSubScan Details: The number of loops of a subscan is limited to 65535 Subscans must exist within the normal Scan() / NextScan structure with the Scan() interval set large enough to allow a subscan to run to completion, which delays when a subscan can re-start. Subscan interval * number of sub scans = a part of "MeasureTime" (see TABLE. Status Table Fields and Descriptions (p. 434)). The EndScan instruction takes 100 s of "MeasureTime", so the interval of the main scan has to be >= 100 s + measurement time outside the SubScan / EndSubScan + the time subscans take. Because the task sequencer controls subscans, it is not finished until all subscans are complete and any other tasks following the end of the subscans are complete. Therefore, processing does not start until subscans are complete and the task sequencer has set the delay for the start of the next main scan. So, 1 "buffer" (the units of the number of buffers parameter in the main scan) holds all the raw measurements inside (and outside) the subscan, i.e., all the measurements made in a single main scan. For example:
Scan(40,Sec,3,0) 'Scan(interval, units, buffers, count) SubScan (2,mSec,10000) VoltSe (Measurement(),3,mV5000,1,False,150,250,1.0,0) CallTable All4 NextSubScan NextScan

3 measurements / subscan * 10000 subscans = 30000 measurements per scan = 1 buffer. 3 buffers will hold up to 30000 measurements / scan * 3 scans. Note the measurement time is 300 s + 19 s, so a Scan intervals less than 20 s will flag a compile error. Sub scans have the advantage of going at a faster rate than 100 Hz. But burst measurements that can run at an integral 100 Hz have an advantage as follows: since all subscans have to complete before the task sequencer can set the delay for the main scan, processing is delayed until this point (20 seconds in the above example). So more memory is required for the raw buffer space for the subscan mode to run at the same speed as the nonsubscan mode, and there will be more delay before all the processing is complete for the "burst." The pipeline (raw buffer) has to fill further before processing can start. One more way to view subscans is that they are a convenient (and only) way to put a loop around a set of measurements. SubScan() specifies a timed loop for so many times around a set of measurements that can be driven by the task sequencer.

298

Section 11. Programming Resource Library

CRBASIC EXAMPLE 57. Single-ended Parallel Burst in SubScan() / NextSubScan


' ' 'Number 'of 'Channels '-------' 2 ' 2 ' 2 Pause Measure Speed Hz ------625 555 500 Data After Counts s -----800 2000 0 Time to Fill Storage Rate Hz ------600 500 500 Number 4 Mbyte Memory Minutes ------5.4 6.4 6.4

SubScan Interval s -------1600 1800 2000

SubScan Count ------12 10 10

of Records at Fill ------194561 194561 194561

PipeLineMode Public Measurement(2) Public Run as Boolean 'DataTable(TableName,Trigger,Size) DataTable(Burst,Run,-1) Sample(2,Measurement(),FP2) EndTable BeginProg 'Scan(Interval,Units,BuffOpt,Count) Scan(20,mSec,100,0) 'SubScan(Interval,Units,Count) SubScan(1600,uSec,12) 'VoltSe(Dest,Reps,Range,SEChan,Offset,Settle,Integ,Mult,Offset) VoltSe(Measurement(),2,mV5000,1,False,100,250,1.0,0) CallTable Burst NextSubScan NextScan EndProg

299

Section 11. Programming Resource Library

CRBASIC EXAMPLE 58. Differential Parallel Burst in SubScan() / NextSubScan


' ' 'Number 'of 'Channels '-------' 2 ' 2 Pause Measure Speed Hz ------555 500 Data After Counts s -----2000 0 Time to Fill Storage Rate Hz ------500 500 Number 4 Mbyte Memory Minutes ------6.4 6.4

SubScan Interval s -------1800 2000

SubScan Count ------10 10

of Records at Fill ------194561 194561

PipeLineMode Public Measurement(2) Public Run as Boolean 'DataTable(TableName,Trigger,Size(NumRecords)) DataTable(Burst,Run,-1) Sample(2,Measurement(),FP2) EndTable BeginProg 'Scan(Interval,Units,BufferOpt,Count) Scan(20,mSec,75,0) 'SubScan(Interval,Units,Count) SubScan(1800,uSec,10) 'VoltDiff(Dest,Reps,Range,DiffChan,RevDiff,Settle,Integ,Mult,Offset) VoltDiff(Measurement(),2,mV5000,1,False,100,250,1.0,0) CallTable Burst NextSubScan NextScan EndProg

11.13 String Operations


String operations are performed using CRBASIC string functions, as listed in SECTION. String Functions (p. 189).

11.13.1 String Operators


TABLE. String Operators (p. 300) list and describes available string operators. String operators are case sensitive.

300

Section 11. Programming Resource Library

TABLE 54. String Operators


Operator & Description Concatenates strings. Forces numeric values to strings before concatenation. Example 1 & 2 & 3 & "a" & 5 & 6 & 7 = "123a567" + Adds numeric values until a string is encountered. When a string is encountered, it is appended to the sum of the numeric values. Subsequent numeric values are appended at strings. Example: 1 + 2 + 3 + "a" + 5 + 6 + 7 = "6a567" -

"Subtracts" NULL ("") from the end of ASCII characters for conversion to an ASCII code (Long data type).

Example: "a" - "" = 97


ASCII codes of the first characters in each string are compared. If the difference between the codes is zero, codes for the next characters are compared. When unequal codes or NULL are encountered (NULL terminates all strings), the difference between the last compared ASCII codes is returned.

Examples: Since ASCII code for a = 97, b = 98, c = 99, d = 100, e = 101, and all strings end with NULL: "abc" - "abc" = 0 (difference between NULL and NULL) "abe" - "abc" = 2 (difference between e and c) "ace" - "abe" = 1 (difference between c and b) "abcd" - "abc" = 100 (difference between d and NULL)
<, >, <>, <=, >=, = ASCII codes of the first characters in each string are compared. If the difference between the codes is zero, codes for the next characters are compared. When unequal codes or NULL are encountered (NULL terminates all strings), the requested comparison is made. If the comparison is true, -1 or True is returned. If false, 0 or False is returned. Examples:

Expression
x = "abc" = "abc" x = "abe" = "abc" x = "ace" > "abe"

Result
x = -1 or True x = 0 or False x = -1 or True

301

Section 11. Programming Resource Library

11.13.2 String Concatenation


Concatenation is the building of strings from other strings ("abc123"), characters ("a" or chr()), numbers, or variables. TABLE 55. String Concatenation Examples
Expression StringVar(1) = 5.4 + 3 + " Volts" StringVar(2) = 5.4 & 3 & " Volts" LongVar(1) = "123" LongVar (2) = 1+2+"3" LongVar (3) = "1"+2+3 LongVar (4) = 1&2&"3" Comments Add Floats, Concatenate String Concatenate Floats and Strings Convert String to Long Add Floats to String / convert to Long Concatenate String and Floats Concatenate Floats and String Result "8.4 Volts" "5.43 Volts" 123 33 123 123

11.13.3 NULL Character


All strings are automatically NULL terminated. NULL, Chr(0) or "", counts as one of the characters in the string. Assignment of just one character is that character followed by a NULL, unless the character is a NULL. TABLE 56. String NULL Character Examples
Expression LongVar (5) = "#"-"" LongVar (6) = StrComp("#","") Comments Subtract NULL, ASCII code results Also subtracts NULL 35 35 Result

Example: Objective: Insert a NULL character into a string, then reconstitute the string Given:
StringVar(3) = "123456789"

Execute:
StringVar(3,1,4) = "" "123<NULL>56789"

Results:
StringVar(4) = StringVar(3) "123"

But StringVar(3) still = "123<NULL>56789", so:


StringVar(5) = StringVar(3,1,4+1) StringVar(6) = StringVar(3) + 4 + StringVar(3,1,4+1) '"123456789" '"56789"

302

Section 11. Programming Resource Library Some smart sensors send strings containing NULL characters. To manipulate a string that has NULL characters within it (in addition to being terminated with another NULL), use MoveBytes() instruction.

11.13.4 Inserting String Characters


CRBASIC EXAMPLE 59. Inserting String Characters
Objective: Using MoveBytes() to change "123456789" to "123A56789" Given: StringVar(7) = "123456789" Try (does not work): StringVar(7,1,4) = "A"

"123456789"

123A<NULL>56789

Instead, use: StringVar(7) = MoveBytes(Strings(7,1,4),0,"A",0,1) "123A56789"

11.13.5 Extracting String Characters


A specific character in the string can be accessed by using the "dimensional" syntax; that is, when the third dimension of a string is specified, the third dimension is the character position. TABLE 57. Extracting String Characters
Expression StringVar(3) = "Go Jazz" StringVar(4) = StringVar(3,1,4) Comments Load string into variable Extract single character "J" Result

11.13.6 String Use of ASCII / ANSII Codes


TABLE 58. Use of ASCII / ANSII Codes Examples
Expression LongVar (7) = ASCII("#") LongVar (8) = ASCII("*") LongVar (9) = "#" LongVar (1) = "#"-"" Cannot be converted to Long with NULL Can be converted to Long without NULL Comments 35 42 NAN 35 Result

303

Section 11. Programming Resource Library

11.13.7 Formatting Strings


TABLE 59. Formatting Strings Examples
Expression StringVar(1) = 123e4 StringVar(2) = FormatFloat(123e4,"%12.2f") StringVar(3) = FormatFloat(Values(2)," The battery is %.3g Volts ") StringVar(4) = Strings(3,1,InStr(1,Strings(3),"The battery is ",4)) StringVar(5) = Strings(3,1,InStr(1,Strings(3),"is ",2) + 3) StringVar(6) = Replace("The battery is 12.4 Volts"," is "," = ") StringVar(7) = LTrim("The battery is 12.4 Volts") StringVar(8) = RTrim("The battery is 12.4 Volts") StringVar(9) = Trim("The battery is 12.4 Volts") StringVar(10) = UpperCase("The battery is 12.4 Volts") StringVar(12) = Left("The battery is 12.4 Volts",5) StringVar(13) = Right("The battery is 12.4 Volts",7) 1230000 1230000.00 The battery is 12.4 Volts 12.4 Volts 12.4 Volts The battery = 12.4 Volts The battery is 12.4 Volts The battery is 12.4 Volts The battery is 12.4 Volts THE BATTERY IS 12.4 VOLTS The b Volts Result

CRBASIC EXAMPLE 60. Formatting Strings


Objective: Format the string "The battery is 12.4 Volts" Use Expression: StringVar(11) = Mid("The battery is 12.4 Volts",InStr(1,"The battery is 12.4 Volts"," is ",2)+3,Len("The battery is 12.4 Volts")) Result: 12.4 Volts

11.13.8 Formatting String Hexadecimal Variables


TABLE 60. Formatting Hexadecimal Variables - Examples
Expression CRLFNumeric(1) = &H0d0a StringVar(20) = "0" & Hex(CRLFNumeric) CRLFNumeric(2) = HexToDec(Strings(20)) Comment Add leading zero to hex step 1 Add leading zero to hex step 2 Convert Hex string to Float Result 3338 0D0A 3338.00

304

Section 11. Programming Resource Library

11.14 Data Tables


CRBASIC EXAMPLE 61. Programming for two data intervals in one data table
'CRBASIC program to write to a single table with two different time intervals. 'Note: this is a conditional table, check the table fill times in the Status Table. 'For programs with conditional tables AND other time driven tables, it is generally 'wise to NOT auto allocate the conditional table; set a specific number of records. 'Declare Public Variables Public PTemp, batt_volt, airtempC, deltaT Public int_fast As Boolean Public int_slow As Boolean Public counter(4) As Long 'Data Tables 'Table output on two intervals depending on condition. 'note the parenthesis around the TriggerVariable AND statements 'Status Table datafilldays field is low DataTable(TwoInt,(int_fast AND TimeIntoInterval(0,5,Sec)) OR (int_slow AND TimeIntoInterval(0,15,sec)),-1) Minimum(1,batt_volt,FP2,0,False) Sample(1,PTemp,FP2) Maximum(1,counter(1),Long,False,False) Minimum(1,counter(1),Long,False,False) Maximum(1,deltaT,FP2,False,False) Minimum(1,deltaT,FP2,False,False) Average(1,deltaT,IEEE4,false) EndTable 'Main Program BeginProg Scan(1,Sec,0,0) PanelTemp(PTemp,250) Battery(Batt_volt) counter(1) = counter(1) + 1 'thermocouple measurement TCDiff(AirTempC,1,mV2.5C,1,TypeT,PTemp,True ,0,250,1.0,0) 'calculate the difference in air temperature and panel temperature deltaT = airtempC - PTemp 'when the difference in air temperatures is >=3 turn LED on 'and trigger the data table's faster interval If deltaT >= 3 Then PortSet(4,true) int_fast = true int_slow = false Else PortSet(4,false) int_fast = false int_slow = true EndIf 'Call Output Tables CallTable TwoInt NextScan EndProg

305

Section 11. Programming Resource Library

11.15 PulseCountReset Instruction


PulseCountReset is used in rare instances to force the reset or zeroing of CR800 pulse accumulators (See SECTION. Measurement Inputs (p. 29)). PulseCountReset is needed in applications wherein two separate PulseCount() instructions in separate scans use the same pulse input channel. While the compiler does not allow multiple PulseCount() instructions in the same scan to use the same channel, multiple scans using the same channel are allowed. PulseCount() information is not maintained globally, but for each individual instruction occurrence. So, if a program needs to alternate between fast and slow scan times, two separate scans can be used with logic to jump between them. If a PulseCount() is used in both scans, then a PulseCountReset is used prior to entering each scan.

11.16 Program Signatures


A program signature is a unique integer calculated from all characters is a given set of code. When a character changes, the signature changes. Incorporating signature data into a the CR800 data set allows system administrators to track program changes and assure data quality. The following program signatures are available. text signature binary runtime signature executable code signatures

11.16.1 Text Signature


The text signature is the most widely used program signature. This signature is calculated from all text in a program, including blank lines and comments. The program text signature is found in the Status Table as ProgSignature. CRBASIC EXAMPLE. Program Signatures (p. 307).

11.16.2 Binary Runtime Signature


The binary runtime signature is calculated only from program code. It does not include comments or blank lines. See CRBASIC EXAMPLE. Program Signatures (p. 307).

11.16.3 Executable Code Signatures


Executable code signatures allow signatures to be calculated on discrete sections of executable code. Executable code is that code which resides between BeginProg and EndProg instructions. See CRBASIC EXAMPLE. Program Signatures (p. 307).

306

Section 11. Programming Resource Library

CRBASIC EXAMPLE 62. Program Signatures


'Program reports the program text signature (ProgSig = Status.ProgSignature), the 'binary run-time signature (RunSig = Status.RunSignature), and calculates two 'executable code segment signatures (ExeSig(1), ExeSig(2)) 'Define Public Variables Public RunSig, ProgSig, ExeSig(2),x,y 'Define Data Table DataTable(Signatures,1,1000) DataInterval(0,1,Day,10) Sample(1,ProgSig,FP2) Sample(1,RunSig,FP2) Sample(2,ExeSig(),FP2) EndTable 'Program BeginProg ExeSig() = Signature Scan(1,Sec,0,0) ProgSig = Status.ProgSignature RunSig = Status.RunSignature x = 24 ExeSig(1) = Signature y = 43 ExeSig(2) = Signature CallTable Signatures NextScan

'initialize executable code signature 'function 'Set variable to status table entry '"ProgSignature" 'Set variable to status table entry '"RunSignature" 'signature includes code since initial 'Signature instruction 'Signature includes all code since 'ExeSig(1) = Signature

11.17 Advanced Programming Examples


11.17.1 Miscellaneous Features
CRBASIC EXAMPLE. Miscellaneous Features (p. 307) demonstrates use of several CRBASIC features: data type, units, names, event counters, flags, data intervals, and control.

307

Section 11. Programming Resource Library

CRBASIC EXAMPLE 63. Data Type, Units, Names, Event Counters, Flags, Data Interval, Control
'This program demonstrates the use of documentation data types, units, names, event 'counters, flags, data intervals, and simple control algorithms. 'A program can be (and should be!) extensively documented. 'apostrophe is ignored by the CRBASIC compiler. Any text preceded by an

'One thermocouple is measured twice using the wiring panel temperature as the reference 'temperature. The first measurement is reported in Degrees C, the second in Degrees F. 'The first measurement is then converted from Degree C to Degrees F on the subsequent 'line, the result being placed in another variable. The difference between the panel 'reference temperature and the first measurement is calculated, the difference is then 'used to control the status of a program control flag. Program control then 'transitions into device control as the status of the flag is used to determine the 'state of a control port that controls an LED (light emitting diode). 'Battery voltage is measured and stored just because good programming practice dictates 'it be so. 'Two data storage tables are created. Table OneMin is an interval driven table that 'stores data every minute as determined by the CR1000 clock. Table Event is an event 'driven table that only stores data when certain conditions are met. 'Declare Public (viewable) Variables Public Batt_Volt as FLOAT Public PTemp_C Public AirTemp_C Public AirTemp_F Public AirTemp2_F Public DeltaT_C Public HowMany Public Counter as LONG Public SiteName as STRING * 16

'Declared as Float 'Float by default 'Float by default 'Float by default 'Float by default 'Float by default 'Float by default 'Declared as Long so counter does not have 'rounding error 'Declared as String with 16 chars for a 'site name (optional)

'Declare program control flags & terms. Set the words High and Low to equal TRUE 'and FALSE respectively Public Flag(1) as BOOLEAN Const High = True Const Low = False 'Optional Declare a Station Name into a location in the Status Table. StationName(CR1000_on_desk) 'Optional -- Declare units. 'data file header. Units Batt_Volt = Volts Units PTemp = deg C Units AirTemp = deg C Units AirTempF2 = deg F Units DeltaT_C = deg C Units are not used in programming, but only appear in the

'Declare an interval driven output table DataTable(OneMin,True,-1) DataInterval(0,1,Min,0) Average(1,AirTemp_C,IEEE4,0) Maximum(1,AirTemp_C,IEEE4,0,False)

'Time driven data storage 'Controls the interval 'Stores temperature average in high 'resolution format 'Stores temperature maximum in high 'resolution format

308

Section 11. Programming Resource Library

Minimum(1,AirTemp_C,FP2,0,False) Minimum(1,Batt_Volt,FP2,0,False) Sample(1,Counter,Long) Sample(1,SiteName,String) Sample(1,HowMany, FP2) EndTable

'Stores temperature minimum in low 'resolution format 'Stores battery voltage minimum in low 'resolution format 'Stores counter in integer format 'Stores site name as a string 'Stores how many data events in low 'resolution format

'Declare an event driven data output table DataTable(Event,True,-1) 'Data table event driven DataInterval(0,5,Sec,10) 'AND interval driven DataEvent(0,DeltaT_C >= 3,DeltaT_C < 3,0) 'AND event range driven Maximum(1,AirTemp_C,FP2,0,False) 'Stores temperature maximum in low 'resolution format Minimum(1,AirTemp_C,FP2,0,False) 'Stores temperature minimum in low 'resolution format Sample(1,DeltaT_C, FP2) 'Stores temp difference sample in low 'resolution format Sample(1,HowMany, FP2) 'Stores how many data events in low 'resolution format EndTable BeginProg 'A second way of naming a station is to load the name into a string variable. The is 'place here so it is executed only once, which saves a small amount of program 'execution time. SiteName = "CR1000SiteName" Scan(1,Sec,1,0) 'Measurements 'Battery Voltage 'Battery(Batt_Volt) 'Wiring Panel Temperature 'PanelTemp(PTemp_C,_60Hz) 'Type T Thermocouple measurements: TCDiff(AirTemp_C,1,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1,0) TCDiff(AirTemp_F,1,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1.8,32) 'Convert from degree C to degree F AirTemp2_F = AirTemp_C * 1.8 + 32 'Count the number of times through the program. 'Long integer variable in counters. Counter = Counter + 1 This demonstrates the use of a

'Calculate the difference between air and panel temps DeltaT_C = AirTemp_C - PTemp_C

309

Section 11. Programming Resource Library

'Control the flag based on the difference in temperature. 'set Flag 1 high, otherwise set it low If DeltaT_C >= 3 Then Flag(1) = high Else Flag(1) = low EndIf 'Turn LED connected to Port 1 on when Flag 1 is high If Flag(1) = high then PortSet(1,1) 'alternate syntax: Else PortSet(1,0) 'alternate syntax: EndIf

If DeltaT >= 3 then

PortSet(1,high) PortSet(1,low)

'Count how many times the DataEvent DeltaT_C>=3 has occurred. The 'TableName.EventCount syntax is used to return the number of data storage events 'that have occurred for an event driven table. This example looks in the data 'table Event, which is declared above, and reports the event count. The (1,1) 'after EventCount just needs to be included. HowMany = Event.EventCount(1,1) 'Call Data Tables CallTable(OneMin) CallTable(Event) NextScan EndProg

11.17.2 Running Average and Total of Rain


CRBASIC EXAMPLE 64. Running Average and Running Total of Rain
'Rain is measured using PulseCount(). Running Average is calculated using the 'AvgRun(). Running Total is calculated from the result of AvgRun() by 'multiplying the result by the AvgRun() Number parameter (3rd parameter). Public MeasuredRain Public TotRun, RainAvg Const Number = 15.0 BeginProg Scan(1,Sec,0,0) PulseCount(MeasuredRain,1,1 ,2,0,0.01,0) AvgRun(RainAvg,1,MeasuredRain,Number) TotRun = Number * RainAvg NextScan EndProg

11.17.3 Use of Multiple Scans


CRBASIC EXAMPLE. Use of Multiple Scans (p. 311) demonstrates the use of multiple scans. Some applications require measurements or processing to occur at an interval different from that of the main program scan. Secondary, or slow sequence, scans are prefaced with the SlowSequence instruction.

310

Section 11. Programming Resource Library

CRBASIC EXAMPLE 65. Use of Multiple Scans


'This program demonstrates the use of multiple scans. Some applications require 'measurements or processing to occur at an interval different from that of the main 'program scan. Secondary scans are prefaced with the SlowSequence instruction. 'Declare Public Variables Public PTemp Public Counter1 'Main Program BeginProg Scan(1,Sec,0,0) PanelTemp(PTemp,250) Counter1 = Counter1 + 1 NextScan

'Begin executable section of program 'Begin main scan

'End main scan

SlowSequence 'Begin slow sequence 'Declare Public Variables for Secondary Scan (can be declared at head of program) Public Batt_Volt Public Counter2 'Declare Data Table DataTable(Test,1,-1) Minimum(1,batt_volt,FP2,0,False) Sample(1,PTemp,FP2) Sample(1, counter, fp2) EndTable Scan(5,Sec,0,0) Counter2 = Counter2 + 1 Battery(Batt_volt) CallTable Test NextScan EndProg 'Begin 1st secondary scan

'Data Table Test is event driven. 'The event is the scan.

'Call Data Table Test 'End slow sequence scan 'End executable section of program

11.17.4 Groundwater Pump Test


CRBASIC EXAMPLE. Groundwater Pump Test (p. 312) demonstrates: 1. How to write multiple interval data to the same data table. 2. Use of program control instructions outside the Scan() / NextScan structure. 3. One way to execute conditional code. 4. Use of multiple sequential scans, each with a scan count.

311

Section 11. Programming Resource Library

CRBASIC EXAMPLE 66. Groundwater Pump Test


'A groundwater pump test requires that water level be measured and recorded 'according to the following schedule: 'Minutes into Test '----------------' 0-10 ' 10-30 ' 30-100 ' 100-300 ' 300-1000 ' 1000 + Data Interval ------------10 seconds 30 seconds 1 minute 2 minute 5 minute 10 minute

'Declare Variables Public PTemp, Batt_Volt, Level, TimeIntoTest Public Counter(10) Public Flag(8) as Boolean 'Define Data Tables DataTable(LogTable,1,-1) Minimum(1,Batt_Volt,FP2,0,False) Sample(1,PTemp,FP2) Sample(1,Level,FP2) Sample(1,TimeIntoTest, FP2) EndTable 'Main Program BeginProg Scan(1,Sec,0,0) If TimeIntoInterval(0,1,Min) Then Flag(1) = True If Flag(1) = True then ExitScan NextScan '10 Second Data Interval If Flag(1) = True Then Scan(10,Sec,0,60) Counter(2) = Counter(2) + 1 Battery(Batt_volt) PanelTemp(PTemp,250) TCDiff(Level,1,mV2_5,1,TypeT,PTemp,True ,0,250,1.0,0) If TimeIntoInterval(0,1,Min) Then TimeIntoTest = TimeIntoTest + 1 Endif 'Call Output Tables CallTable LogTable NextScan

312

Section 11. Programming Resource Library

'30 Second Data Interval Scan(30,Sec,0,40) counter(3) = counter(3) + 1 Battery(Batt_volt) PanelTemp(PTemp,250) TCDiff(Level,1,mV2_5,1,TypeT,PTemp,True ,0,250,1.0,0) If TimeIntoInterval(0,1,Min) Then TimeIntoTest = TimeIntoTest + 1 Endif 'Call Output Tables CallTable LogTable NextScan '1 Minute Data Interval Scan(1,Min,0,70) Counter(4) = Counter(4) + 1 Battery(Batt_volt) PanelTemp(PTemp,250) TCDiff(Level,1,mV2_5,1,TypeT,PTemp,True ,0,250,1.0,0) If TimeIntoInterval(0,1,Min) Then TimeIntoTest = TimeIntoTest + 1 Endif 'Call Output Tables CallTable LogTable NextScan '2 Minute Data Interval Scan(2,Min,0,200) Counter(5) = Counter(5) + 1 Battery(Batt_volt) PanelTemp(PTemp,250) TCDiff(Level,1,mV2_5,1,TypeT,PTemp,True ,0,250,1.0,0) If TimeIntoInterval(0,1,Min) Then TimeIntoTest = TimeIntoTest + 1 Endif 'Call Output Tables CallTable LogTable NextScan '5 Minute Data Interval Scan(5,Min,0,700) Counter(6) = Counter(6) + 1 Battery(Batt_volt) PanelTemp(PTemp,250) TCDiff(Level,1,mV2_5,1,TypeT,PTemp,True ,0,250,1.0,0) If TimeIntoInterval(0,1,Min) Then TimeIntoTest = TimeIntoTest + 1 Endif 'Call Output Tables CallTable LogTable NextScan

313

Section 11. Programming Resource Library

'10 Minute Data Interval Scan(10,Min,0,0) Counter(6) = Counter(6) + 1 Battery(Batt_volt) PanelTemp(PTemp,250) TCDiff(Level,1,mV2_5,1,TypeT,PTemp,True ,0,250,1.0,0) If TimeIntoInterval(0,1,Min) Then TimeIntoTest = TimeIntoTest + 1 Endif 'Call Output Tables CallTable LogTable NextScan

EndIf EndProg

11.17.5 Scaling Array


CRBASIC EXAMPLE. Scaling Array (p. 314) demonstrates programming to create and use a scaling array. Several multipliers and offsets are entered at the beginning of the program, the utilized by several measurement instructions throughout the program.

CRBASIC EXAMPLE 67. Scaling Array


'Declare viewable variables Public PTemp_C, Temp_C(10) Public Count 'Declare scaling arrays as non-viewable variables Dim Mult(10), Offset(10) 'Declare Output Table DataTable(min_5,True,-1) DataInterval(0,5,Min,0) Average(1,PTemp_C,FP2,0) Maximum(1,PTemp_C,FP2,0,0) Minimum(1,PTemp_C,FP2,0,0) Average(10,Temp_C(),FP2,0) Minimum(10,Temp_C(1),FP2,0,0) Maximum(10,Temp_C(1),FP2,0,0) EndTable

314

Section 11. Programming Resource Library

'Begin Program BeginProg 'Load scaling array (multipliers and offsets) Mult(1) = 1.8 : Offset(1) = 32 Mult(2) = 1 : Offset(2) = 2 Mult(3) = 1 : Offset(3) = 3 Mult(4) = 1 : Offset(4) = 4 Mult(5) = 1 : Offset(5) = 5 Mult(6) = 1 : Offset(6) = 6 Mult(7) = 1 : Offset(7) = 7 Mult(8) = 1 : Offset(8) = 8 Mult(9) = 1 : Offset(9) = 9 Mult(10) = 1 : Offset(10) = 10 Scan(5,Sec,1,0) 'Measure reference temperature PanelTemp(PTemp_C,_60Hz) 'Measure 5 thermocouples on CR1000 'Note: because of the use of repetitions, an array can be used for the 'destination, multiplier and offset. TCDiff(Temp_C(),5,mV2_5C,1,TypeT,PTemp_C,True ,0,250,Mult(),Offset()) 'Measure 5 thermocouples on an AM16/32 Multiplexer (2x32 mode) PortSet(1,1) Count = 6 'Start with 6 since scaling arrays 1 5 'already used SubScan(0,uSec,5) PulsePort(2,10000) TCDiff(Temp_C(Count),1,mV2_5C,6,TypeT,PTemp_C,True,0,_60Hz,Mult(Count), Offset(Count)) Count = Count + 1 NextSubScan PortSet(1,0) CallTable(min_5) NextScan EndProg

11.17.6 Conditional Output


CRBASIC EXAMPLE. Conditional Output (p. 315) demonstrates programming to output data to a data table conditional on a trigger other than time.

315

Section 11. Programming Resource Library

CRBASIC EXAMPLE 68. Conditional Output


'Programming example showing use of StationName instruction, use of units, and writing 'to a data table conditionally 'Declare Station Name (saved to Status table) StationName(Delta_Temp_Station) 'Declare Variables Public PTemp_C, AirTemp_C, DeltaT_C 'Declare Units Units PTemp_C = deg C Units AirTemp_C = deg C Units DeltaT_C = deg C 'Declare Output Table -- Output Conditional on Delta T >=3 'Table stores data at the Scan rate (once per second) when condition met 'because DataInterval instruction is not included in table declaration. DataTable(DeltaT,DeltaT_C >= 3,-1) Sample(1,Status.StationName,String) Sample(1,DeltaT_C,FP2) Sample(1,PTemp_C,FP2) Sample(1,AirTemp_C,FP2) EndTable BeginProg Scan(1,Sec,1,0) 'Measure wiring panel temperature PanelTemp(PTemp_C,_60Hz) 'Measure type T thermocouple TCDiff(AirTemp_C,1,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1,0) 'Calculate the difference between air and panel temps DeltaT_C = AirTemp_C - PTemp_C 'Call data table(s) CallTable(DeltaT) NextScan EndProg

316

Section 11. Programming Resource Library

11.17.7 Capturing Events


CRBASIC EXAMPLE. Capturing Events (p. 317) demonstrates programming to output data to a data table at the occurrence of an event.

CRBASIC EXAMPLE 69. BeginProg / Scan / NextScan / EndProg Syntax


'Example programming to detect and record an event 'An event has a beginning and an end. This program records an event as occurring at 'the end of the event. The event recorded is the transition of a delta temperature 'above 3 degrees. The event is recorded when the delta temperature drops back below '3 degrees. 'The DataEvent instruction forces a record in data table Event each time an 'event ends. Number of events is written to the reserved variable 'EventCount(1,1). In this program, EventCount(1,1) is recorded in the 'OneMinute Table. 'Note : the DataEvent instruction must be used within a data table with a 'more frequent record interval than the expected frequency of the event. 'Declare Variables Public PTemp_C, AirTemp_C, DeltaT_C Public EventCounter 'Declare Event Driven Data Table DataTable(Event,True,-1) DataEvent(0,DeltaT_C>=3,DeltaT_C<3,0) Sample(1,PTemp_C, FP2) Sample(1,AirTemp_C, FP2) Sample(1,DeltaT_C, FP2) EndTable 'Declare Time Driven Data Table DataTable(OneMin,True,-1) DataInterval(0,1,Min,10) Sample(1,EventCounter, FP2) EndTable BeginProg Scan(1,Sec,1,0) 'Wiring Panel Temperature PanelTemp(PTemp_C,_60Hz) 'Type T Thermocouple measurements: TCDiff(AirTemp_C,1,mV2_5C,1,TypeT,PTemp_C,True,0,_60Hz,1,0) 'Calculate the difference between air and panel temps DeltaT_C = AirTemp_C - PTemp_C 'Update Event Counter (uses special syntax Event.EventCount(1,1)) EventCounter = Event.EventCount(1,1) 'Call data table(s) CallTable(Event) CallTable(OneMin) NextScan EndProg

317

Section 11. Programming Resource Library

11.18 PRT Measurement


PRTs (platinum resistance thermometers) are high accuracy resistive devices used in measuring temperature.

11.18.1 PRT Calculation Standards


Two CR800 instructions are provided to facilitate PRT measurement. PRT (): an obsolete instruction. It calculates temperature from RTD resistance using DIN standard 43760. It is superseded in probably all cases by PRTCalc (). PRTCalc (): calculates temperature from RTD resistance according to one of several supported standards. PRTCalc () supersedes PRT () in probably all cases. For industrial grade RTDs, the relationship between temperature and resistance is characterized by the Callendar-Van Dusen (CVD) equation. Coefficients for different sensor types are given in published standards or by the manufacturers for non-standard types. Measured temperatures are compared against the ITS-90 scale, a temperature instrumentation calibration standard. PRTCalc () follows the principles and equations given in the US ASTM E113704 standard for conversion of resistance to temperature. For temperature range 0 to 650 C, a direct solution to the CVD equation results in errors < 0.0005 C (caused by rounding errors in CR800 math). For the range of -200 to 0 C, a 4th order polynomial is used to convert resistance to temperature resulting in errors of < 0.003 C. These errors are only the errors in approximating the relationships between temperature and resistance given in the relevant standards. The CVD equations and the tables published from them are only an approximation to the true linearity of an RTD, but are deemed adequate for industrial use. Errors in that approximation can be several hundredths of a degree Celsius at different points in the temperature range and vary from sensor to sensor. In addition, individual sensors have errors relative to the standard, which can be up to 0.3 C at 0 C with increasing errors away from 0 C, depending on the grade of sensor. Highest accuracy is usually achieved by calibrating individual sensors over the range of use and applying corrections to the RS/RO value input to the PRTCalc () instruction (by using the calibrated value of RO) and the multiplier and offset parameters. Refer to CRBASIC Editor for Help with specific PRTCalc () parameter entries. The following information is presented as detail beyond what is available in CRBASIC Help. The general form of the Callendar-Van Dusen (CVD) equation is:
R/R0<1: T = g * K^4 + h * K^3 + I * K^2 + j * K, where K = R/R0 1 R/R0>=1: T = (SQRT(d * (R/R0) + e) -a) / f

318

Section 11. Programming Resource Library Depending on the Type Code entered for parameter Type, which specifies the platinum resistance sensor type, coefficients are assigned values according to the following tables. Note Coefficients are rounded to the 7th significant digit to match the CR800 math resolution. Note Alpha is defined as (R100/R0-1)/100, where R100 and R0 are the resistances of the PRT at 100C and 0C, respectively.

TABLE 61. PRTCalc() Type Code 1 Sensor


IEC 60751:2008 (IEC 751), alpha = 0.00385. Now internationally adopted and written into standards ASTM E1137-04, JIS 1604:1997, EN 60751 and others. This type code is also used with probes compliant with older standards DIN43760, BS1904, and others. (Reference: IEC 60751. ASTM E1137) Constant a d e f g h i j 3.9083000E-03 -2.3100000E-06 1.7584810E-05 -1.1550000E-06 1.7909000E+00 -2.9236300E+00 9.1455000E+00 2.5581900E+02 Coefficient

TABLE 62. PRTCalc() Type Code 2 Sensor


US Industrial Standard, alpha = 0.00392 (Reference: Logan Enterprises) Constant a d e f g h i j 3.9786300E-03 -2.3452400E-06 1.8174740E-05 -1.1726200E-06 1.7043690E+00 -2.7795010E+00 8.8078440E+00 2.5129740E+02 Coefficient

319

Section 11. Programming Resource Library

TABLE 63. PRTCalc() Type Code 3 Sensor


US Industrial Standard, alpha = 0.00391 (Reference: OMIL R84 (2003)) Constant a d e f g h i j 3.9690000E-03 -2.3364000E-06 1.8089360E-05 -1.1682000E-06 1.7010560E+00 -2.6953500E+00 8.8564290E+00 2.5190880E+02 Coefficient

TABLE 64. PRTCalc() Type Code 4 Sensor


Old Japanese Standard, alpha = 0.003916 (Reference: JIS C 1604:1981, National Instruments) Constant a d e f g h i j 3.9739000E-03 -2.3480000E-06 1.8139880E-05 -1.1740000E-06 1.7297410E+00 -2.8905090E+00 8.8326690E+00 2.5159480E+02 Coefficient

TABLE 65. PRTCalc() Type Code 5 Sensor


Honeywell Industrial Sensors, alpha = 0.00375 (Reference: Honeywell) Constant a d e f g h i j 3.8100000E-03 -2.4080000E-06 1.6924100E-05 -1.2040000E-06 2.1790930E+00 -5.4315860E+00 9.9196550E+00 2.6238290E+02 Coefficient

320

Section 11. Programming Resource Library

TABLE 66. PRTCalc() Type Code 6 Sensor


Standard ITS-90 SPRT, alpha = 0.003926 (Reference: Minco / Instrunet) Constant a d e f g h i j 3.9848000E-03 -2.3480000E-06 1.8226630E-05 -1.1740000E-06 1.6319630E+00 -2.4709290E+00 8.8283240E+00 2.5091300E+02 Coefficient

11.18.2 Measuring PT100s (100 Ohm PRTs)


PT100s (100 ohm PRTs) are readily available. The CR800 can measure PT100s in several configurations, each with its own advantages.

11.18.2.1 Self-Heating and Resolution


PRT measurements present a dichotomy. Excitation voltage should be maximized to maximize the measurement resolution. Conversely, excitation voltage should be minimized to minimize self-heating of the PRT. If the voltage drop across the PRT is 25 mV, self-heating should be less than 0.001C in still air. To maximize measurement resolution, optimize the excitation voltage (Vx) such that the voltage drop spans, but does not exceed, the 25 mV input range.

11.18.2.2 PT100 in 4 Wire Half Bridge


Example Shows: How to measure a PRT in a four wire half bridge configuration How to compensate for long leads Advantages: High accuracy with long leads Example PRT Specifications: Alpha = 0.00385 (PRTType 1) A four wire half bridge, measured with BrHalf4W(), is the best configuration for accuracy in cases where the PRT is separated from bridge resistors by a lead length having more than a few thousandths of an ohm resistance. In this

321

Section 11. Programming Resource Library example, the measurement range is -10 to 40C. The length of the cable from the CR800 and the bridge resistors to the PRT is 500 feet.

FIGURE. PT100 in 4 Wire Half Bridge (p. 323) shows the circuit used to measure a 100 PRT. The 10 k resistor allows the use of a high excitation voltage and a low input range. This ensures that noise in the excitation does not have an effect on signal noise. Because the fixed resistor (Rf) and the PRT (RS) have approximately the same resistance, the differential measurement of the voltage drop across the PRT can be made on the same range as the differential measurement of the voltage drop across Rf. The use of the same range eliminates range translation errors that can arise from the 0.01% tolerance of the range translation resistors internal to the CR800.

11.18.2.2.1

Calculating the Excitation Voltage The voltage drop across the PRT is equal to VX multiplied by the ratio of RS to the total resistance, and is greatest when RS is greatest (RS = 115.54 ohms at 40C). To find the maximum excitation voltage that can be used on the 25 mV input range, assume V2 equal to 25 mV and use Ohm's Law to solve for the resulting current, I. I = 25 mV/RS = 25 mV/115. 54 ohms = 0.216 mA Next solve for VX: VX = I*(R1 + RS + Rf) = 2.21 V If the actual resistances were the nominal values, the CR800 would not over range with VX = 2.2 V. However, to allow for the tolerance in actual resistors, set VX equal to 2.1 V (e.g., if the 10 kohms resistor is 5% low, i.e., RS/(R1+RS+Rf)=115.54 / 9715.54, and VX must be 2.102 V to keep VS less than 25 mV).

11.18.2.2.2

Calculating the BrHalf4W () Multiplier The result of BrHalf4W () (X) is equivalent to RS/Rf. X = RS/Rf PRTCalc () computes the temperature (C) for a DIN 43760 standard PRT from the ratio of the PRT resistance to its resistance at 0C (RS/R0). Thus, a multiplier of Rf/R0 is used in BrHalf4W () to obtain the desired intermediate, RS/R0 (=RS/Rf * Rf/R0). If RS and R0 were each exactly 100 ohms, the multiplier would be 1. However, neither resistance is likely to be exact. The correct multiplier is found by connecting the PRT to the CR800 and entering BrHalf4W () with a multiplier of 1. The PRT is then placed in an ice bath (0C), and the result of the bridge measurement is read. The reading is RS/Rf, which is equal to R0/Rf since RS=R0 at 0C. The correct value of the multiplier, Rf/R0, is the reciprocal of this reading. The initial reading assumed for this example was 0.9890. The correct multiplier is: Rf/R0 = 1/0.9890 = 1.0111.

322

Section 11. Programming Resource Library 11.18.2.2.3 Choosing Rf The fixed 100 ohm resistor must be thermally stable. Its precision is not important because the exact resistance is incorporated, along with that of the PRT, into the calibrated multiplier. The 10 ppm/C temperature coefficient of the fixed resistor will limit the error due to its change in resistance with temperature to less than 0.15C over the -10 to 40C temperature range. Because the measurement is ratiometric (RS/Rf), the properties of the 10 kohm resistor do not affect the result. A terminal input module (TIM) can be used to complete the circuit shown in FIGURE. PT100 in 4 Wire Half Bridge (p. 323). Refer to APPENDIX. Signal Conditioners (p. 475) for information concerning available TIM modules.

FIGURE 97. PT100 in 4 Wire Half Bridge

CRBASIC EXAMPLE 70. PT100 in 4 Wire Half Bridge


'See FIGURE. PT100 in 4 Wire Half Bridge (p. 323) for wiring diagram Public Rs_Ro Public Deg_C BeginProg Scan(1,Sec,0,0) 'BrHalf4W(Dest,Reps,Range1,Range2,DiffChan1,ExChan,MPS,Ex_mV,RevEx,RevDiff, Settling,Integration,Mult,Offset) BrHalf4W(Rs_Ro,1,mV25,mV25,1,Vx1,1,2200,True,True,0,250,1.0111,0) 'PRTCalc(Destination,Reps,Source,PRTType,Mult,Offset) PRTCalc(Deg_C,1,Rs_Ro,1,1.0,0) 'PRTType sets alpha NextScan EndProg

323

Section 11. Programming Resource Library

11.18.2.3 PT100 in 3 Wire Half Bridge


Example Shows: How to measure a PRT in a three wire half bridge configuration. Advantages: Uses half as many input channels as four wire half bridge. Disadvantages: May not be as accurate as four wire half bridge. Example PRT Specifications: Alpha = 0.00385 (PRTType 1) The temperature measurement requirements in this example are the same as in SECTION.PT100 in 4 Wire Half Bridge (p. 321). In this case, a three wire half bridge and CRBASIC instruction BRHalf3W () are used to measure the resistance of the PRT. The diagram of the PRT circuit is shown in FIGURE. PT100 in 3 Wire Half Bridge (p. 325).

As in SECTION. PT100 in 4 Wire Half Bridge (p. 321), the excitation voltage is calculated to be the maximum possible, yet allow the measurement to be made on the 25 mV input range. The 10 kohm resistor has a tolerance of 1%; thus, the lowest resistance to expect from it is 9.9 kohms. Solve for VX (the maximum excitation voltage) to keep the voltage drop across the PRT less than 25 mV: 0.025 V > (VX * 115.54)/(9900+115.54) VX < 2.16 V The excitation voltage used is 2.2 V. The multiplier used in BRHalf3W () is determined in the same manner as in SECTION. PT100 in 4 Wire Half Bridge (p. 321). In this example, the multiplier (Rf/R0) is assumed to be 100.93. The 3 wire half bridge compensates for lead wire resistance by assuming that the resistance of wire A is the same as the resistance of wire B. The maximum difference expected in wire resistance is 2%, but is more likely to be on the order of 1%. The resistance of RS calculated with BRHalf3W () is actually RS plus the difference in resistance of wires A and B. The average resistance of 22 AWG wire is 16.5 ohms per 1000 feet, which would give each 500 foot lead wire a nominal resistance of 8.3 ohms. Two percent of 8.3 ohms is 0.17 ohms. Assuming that the greater resistance is in wire B, the resistance measured for the PRT (R0 = 100 ohms) in the ice bath would be 100.17 ohms, and the resistance at 40C would be 115.71. The measured ratio RS/R0 is 1.1551; the actual ratio is 115.54/100 = 1.1554. The temperature computed by PRTCalc () from the measured ratio will be about 0.1C lower than the actual temperature of the PRT. This source of error does not exist in the example in SECTION. PT100 in

324

Section 11. Programming Resource Library 4 Wire Half Bridge (p. 321) because a 4 wire half bridge is used to measure PRT resistance. A terminal input module can be used to complete the circuit in FIGURE. PT100 in 3 Wire Half Bridge (p. 325). Refer to APPENDIX. Signal Conditioners (p. 475) for information concerning available TIM modules.

FIGURE 98. PT100 in 3 Wire Half Bridge

CRBASIC EXAMPLE 71. PT100 in 3 Wire Half Bridge


'See FIGURE. PT100 in 3 Wire Half Bridge (p. 325) for wiring diagram. Public Rs_Ro Public Deg_C BeginProg Scan(1,Sec,0,0) 'BrHalf3W(Dest,Reps,Range1,SEChan,ExChan,MPE,Ex_mV,True,0,250,100.93,0) BrHalf3W(Rs_Ro,1,mV25,1,Vx1,1,2200,True,0,250,100.93,0) 'PRTCalc(Destination,Reps,Source,PRTType,Mult,Offset) PRTCalc(Deg_C,1,Rs_Ro,1,1.0,0) NextScan EndProg

11.18.2.4 PT100 in 4 Wire Full Bridge


Example Shows: How to measure a PRT in a four wire full bridge Advantages: Uses half as many input channels as four wire half bridge. Example PRT Specifications: Alpha = 0.00392 (PRTType 2)

325

Section 11. Programming Resource Library This example measures a 100 ohm PRT in a 4 wire full bridge, as shown in FIGURE. PT100 in 4 Wire Full Bridge (p. 327), using CRBASIC instruction BRFull (). In this example, the PRT is in a constant temperature bath and the measurement is to be used as the input for a control algorithm.

As described in TABLE. Resistive Bridge Circuits -- Voltage Excitation (p. 66), the result of BRFull() is X, X = 1000 VS/VX where, VS = measured bridge output voltage VX = excitation voltage or, X = 1000 (RS/(RS+R1)-R3/(R2+R3)). With reference to FIGURE. PT100 in 4 Wire Full Bridge (p. 327), the resistance of the PRT (RS) is calculated as: RS = R1 X' / (1-X') where X' = X / 1000 + R3/(R2+R3) Thus, to obtain the value RS/R0, (R0 = RS @ 0C) for the temperature calculating instruction PRTCalc(), the multiplier and offset used in BRFull() are 0.001 and R3/(R2+R3), respectively. The multiplier (Rf) used in the bridge transform algorithm (X = Rf (X/(X-1)) to obtain RS/R0 is R1/R0 or (5000/100 = 50). The application requires control of the temperature bath at 50C with as little variation as possible. High resolution is desired so the control algorithm will respond to minute changes in temperature. The highest resolution is obtained when the temperature range results in an output voltage (VS) range, which fills the measurement range selected in BRFull(). The full bridge configuration allows the bridge to be balanced (VS = 0 V) at or near the control temperature. Thus, the output voltage can go both positive and negative as the bath temperature changes, allowing the full use of the measurement range. The resistance of the PRT is approximately 119.7 ohms at 50C. The 120 ohm fixed resistor balances the bridge at approximately 51C. The output voltage is: VS = VX [RS/(RS+R1) - R3/(R2+R3)] = VX [RS/(RS+5000) - 0.023438] The temperature range to be covered is 50C 10C. At 40C, RS is approximately 115.8 ohms, or: VS = -802.24E-6 VX

326

Section 11. Programming Resource Library even with an excitation voltage (VX) equal to 2500 mV, VS can be measured on the 2.5 mV scale (40C = 115.8 ohms = --2.006 mV, 60C = 123.6 ohms = 1.714 mV). There is a change of approximately 2 mV from the output at 40C to the output at 51C, or 181 V/C. With a resolution of 0.33 V on the 2.5 mV range, this means that the temperature resolution is 0.0009C. The 5 ppm per C temperature coefficient of the fixed resistors was chosen because the 0.01% accuracy tolerance would hold over the desired temperature range.

FIGURE 99. PT100 in 4 Wire Full Bridge

CRBASIC EXAMPLE 72. PT100 in 4 Wire Full Bridge


'See FIGURE. PT100 in 4 Wire Full Bridge (p. 327) for wiring diagram. Public BrFullOut Public Rs_Ro Public Deg_C BeginProg Scan(1,Sec,0,0) 'BrFull(Dst,Reps,Range,DfChan,Vx1,MPS,Ex,RevEx,RevDf,Settle,Integ,Mult,Offset) BrFull(BrFullOut,1,mV25,1,Vx1,1,2500,True,True,0,250,.001,.02344) 'BrTrans = Rf*(X/(1-X)) Rs_Ro = 50 * (BrFullOut/(1 - BrFullOut)) 'PRTCalc(Destination,Reps,Source,PRTType,Mult,Offset) PRTCalc(Deg_C,1,Rs_Ro,2,1.0,0) NextScan EndProg

11.19 Running Average


The AvgRun () instruction calculates a running average of a measurement or calculated value. A running average is the average of the last N values where N is the number of values, as expressed in FIGURE. Running Average Equation (p. 328),

327

Section 11. Programming Resource Library

FIGURE 100. Running Average Equation

where XN is the most recent value of the source variable and XN-1 is the previous value (X1 is the oldest value included in the average, i.e., N-1 values back from the most recent). NANs are not included in the processing of the AvgRun (). AvgRun () uses high precision math, so a 32 bit extension of the mantissa is saved and used internally resulting in 56 bits of precision. Note -- This instruction normally should not be inserted within a For/Next construct with the Source and Destination parameters indexed and Reps set to 1. Doing will perform a single running average, using the values of the different elements of the array, instead of performing an independent running average on each element of the array. The results will be a running average of a spatial average of the various source array's elements. A running average is a digital low-pass filter; its output is attenuated as a function of frequency, and its output is delayed in time. The amount of attenuation and phase shift (time delay) depend on the frequency of the input signal and the time length (which is related to the number of points) of the running average.

FIGURE. Running Average Frequency Response (p. 330) is a graph of signal attenuation plotted against signal frequency normalized to 1/(running average duration). The signal is attenuated by a synchronizing filter with an order of 1 (simple averaging): Sin(X) / (X), where X is the ratio of the input signal frequency to the running average frequency (running average frequency = 1 / time length of the running average). Example Scan period = 1 ms, N value = 4 (Number of points to average), Running average duration = 4 ms Running average frequency = 1 / (running average duration = 250 Hz Input signal frequency = 100 Hz Input frequency to running average (normalized frequency) = 100 / 250 = 0.4

328

Section 11. Programming Resource Library Sin(0.4) / (0.4) = 0.757 (or read from FIGURE. Running Average Frequency Response (p. 330), where the X axis is 0.4) For a 100 Hz input signal with an Amplitude of 10 V peak to peak, a running average outputs a 100 Hz signal with an amplitude of 7.57 V peak to peak.

There is also a phase shift, or delay, in the AvgRun () output. The formula for calculating the delay in number of samples is: Delay in samples = (N-1)/2 Note N = Number of points in running average) To calculate the delay in time, multiply the result from the above equation by the period at which the running average is executed (usually the scan period): Delay in time = (scan period) (N - 1) / 2 For the example above, the delay is: Delay in time = (1 ms) (4 - 1) / 2 = 1.5 ms Example: Actual test using an accelerometer mounted on a beam whose resonant frequency is about 36 Hz. The measurement period was 2 ms. The running average duration was 20 ms (frequency of 50 Hz), so the normalized resonant frequency is 36/50 = 0.72. Sin(0.72) / (0.72) = 0.34. The recorded amplitude for this example should be about 1/3 of the input signal amplitude. A program was written with two stored variables; Accel2 and Accel2RA. The raw measurement was stored in Accel2, while Accel2RA was the result of performing a running average on the Accel2 variable. Both values were stored at a rate of 500 Hz. FIGURE. Running Average Signal Attenuation (p. 330) show the two values plotted in a single graph to illustrate the attenuation (the running average value has the lower amplitude). The resultant delay (delay in time) = (Scan rate)(N-1)/2 = 2 ms (10-1)/2 = 9 ms. This is about 1/3 of the input signal period.

329

Section 11. Programming Resource Library

FIGURE 101. Running Average Frequency Response

FIGURE 102. Running Average Signal Attenuation

330

Section 12. Memory and Final Data Storage


12.1 Storage Media
CR800 memory consists of four non-volatile storage media: Internal battery backed SRAM Internal Flash Internal Serial Flash External Flash (optional CSI Flash drive)

TABLE. CR800 Memory Allocation (p. 331) and TABLE. CR800 SRAM Memory (p. 332) illustrate how CR800 memory is structured around these media. The CR800 utilizes and maintains most memory features automatically. However, users should periodically review areas of memory wherein data files, CRBASIC program files, and image files reside. Review and management of memory are accomplished with LoggerNet / PC400 / RTDAQ / PC200W File Control feature.

TABLE 67. CR800 Memory Allocation


Memory Sector Internal battery-backed SRAM
1

Comments See TABLE. CR800 SRAM Memory (p. 332) for detail.

4 Mbytes*

Internal Flash 2 Mbytes

Operating system

Internal Serial Flash

Device Settings: A backup of settings such as PakBus Address, Station Name, Beacon Intervals, Neighbor lists, etc. Rebuilt when a setting changes.

12 kbytes: Device Settings

500 kbytes: CPU: drive

CPU: Drive: Holds program files, field calibration files, and other files not over written frequently. Slower than SRAM. When a program is compiled and run, it is copied here automatically for loading on subsequent power-ups. Files accumulate until deleted with File Control or the FilesManage() instruction. Use USR: drive to store other file types. Available CPU: memory is reported in Status Table field "CPUDriveFree."

331

Section 12. Memory and Final Data Storage

External Flash (Optional)

USB: drive: Holds program files. Holds a copy of requested final data storage data as files when TableFile() instruction is used. USB: data can be retrieved from the storage device with Windows Explorer. Can facilitate use of Powerup.ini.

2 Gbytes: CRD: drive

SRAM

CR800 series changed from 2 to 4 Mbytes SRAM in Sept 2007. SNs >= 3605 are 4 Mbytes CR1000 changed from 2 to 4 Mbytes SRAM in Sept 2007. SNs >= 11832 are 4 Mbytes CR3000 has always shipped with a 4 Mbytes SRAM.
2 3

Flash is rated for > 1 million overwrites.

Serial Flash is rated for 100,000 overwrites (50,000 overwrites on 128 kbyte units). Care should be taken in programs that do overwrites to use the CRD: or USR: drives so as not to wear-out the CPU: drive. The CR800 series changed from 128 to 512 kbytes Serial Flash in May 2007. SNs >=2787 are 512 kbytes The CR1000 changed from 128 to 512 kbytes Serial Flash in May 2007. SNs >= 9452 are 512 kbytes The CR3000 changed from 128 512 kbytes Serial Flash in May 2007. SNs > 1948 are 512 kbytes

332

Section 12. Memory and Final Data Storage

TABLE 68. CR800 SRAM Memory


Use Static Memory Comments Operational memory used by the operating system regardless of the user program. This sector is rebuilt at power-up, program re-compile, and watchdog events.

---------------------------------Operating Settings and Properties

"Keep" memory. Stores settings such as PakBus address, station name, beacon intervals, neighbor lists, etc. Also stores dynamic properties such as the routing table, communications timeouts, etc.

---------------------------------CRBASIC Program Operating Memory

Stores the currently compiled and running user program. This sector is rebuilt on power-up, recompile, and watchdog events.

---------------------------------Variables & Constants

Stores variables in the user program. These values may persist through power-up, recompile, and watchdog events if the PreserveVariables instruction is in the running program.

---------------------------------Final Storage Data Tables Final Storage is given lowest priority in SRAM memory allocation.

Stores data resulting from CR800 measurements. This memory is termed "Final Storage." Fills memory remaining after all other demands are satisfied. Configurable as ring or fill and stop memory. Compile error occurs if insufficient memory is available for user allocated data tables.

---------------------------------Communications Memory 1 ---------------------------------Communications Memory 2

Construction and temporary storage of PakBus packets.

Constructed Routing Table: list of known nodes and routes to nodes. Routers use more space than leaf nodes because routes to neighbors must be remembered. Increasing the PakBusNodes field in the Status Table will increase this allocation.

---------------------------------USR: drive <= 3.6 Mbytes (4 Mbyte Mem) <= 1.5 Mbytes (2 Mbyte Mem) Less on older units with more limited memory.

Optionally allocated. Holds image files. Holds a copy of Final Storage when TableFile() instruction used. Provides memory for FileRead / FileWrite operations. Managed in File Control. Status reported in Status Table fields "USRDriveSize" and "USRDriveFree."

333

Section 12. Memory and Final Data Storage

12.1.1

Data Storage
Data table SRAM and the CPU: drive are automatically partitioned for use in the CR800. The USR: drive can be optionally partitioned at programmer discretion. The USB: drive is automatically partitioned when a CS mass storage device is connected. TABLE 69. Data Storage Drives
Drive Recommended File Types

CPU: USR: USB: CRD:

CR8, .CAL .DAT, .JPG .DAT Principal use is to expand Final Storage (p. 419), but also used to store .JPG, CR8, and .DAT files.

12.1.1.1 Data Table SRAM


Primary storage for measurement data are those areas in SRAM allocated to data tables as detailed in FIGURE. CR800 SRAM Memory (p. 332). Measurement data can be also be stored as discrete files on USR:, or USB: by using TableFile() instruction. The CR800 can be programmed to store each measurement or, more commonly, to store processed values such as averages, maxima, minima, histograms, FFTs, etc. Data are stored periodically or conditionally in data tables in SRAM as directed by the CRBASIC program (see SECTION. Structure (p. 119)). The DataTable () instruction allows the user to set the size of a data table. Discrete data files are normally created only on a PC when data are retrieved using datalogger support software (p. 417, p. 466). Data are usually erased from this area when a program is sent to the CR800. However, options are available in datalogger support software (p. 417, p. 466) File Control and CRBASIC Editor to preserve data when downloading programs.

12.1.1.2 CPU: Drive


CPU: is the default drive to which programs and calibration files are stored. Do not store data on CPU: or premature failure of CPU: memory may result.

12.1.1.3 USR: Drive


SRAM can be partitioned to create a FAT32 USR: drive, analogous to partitioning a second drive on a PC hard disk. Certain types of files are stored to USR: to reserve limited CPU: memory for datalogger programs and calibration files. Partitioning also helps prevent interference from data table SRAM. USR:

334

Section 12. Memory and Final Data Storage is configured using DevConfig settings or SetStatus() instruction in a CRBASIC program. Partition USR: drive to at least 11264 bytes in 512 byte increments. If the value entered is not a multiple of 512 bytes, the size is rounded up. Maximum size of USR: is the total RAM size less 400 Kbytes; i.e., for a CR800 with 4 Megabyte memory, the maximum size of USR: is about 3.6 Megabytes. USR: is not affected by program recompilation or formatting of other drives. It will only be reset if the USR: drive is formatted, a new operating system is loaded, or the size of USR: is changed. USR: size is changed manually using the optional keyboard display or by loading a program with a different USR: size entered in a SetStatus() instruction. Measurement data can be stored on USR: as discrete files by using the TableFile() instruction. TABLE. TableFile() Instruction Data File Formats (p. 336) describes available data file formats. Note Placing an optional USR: size setting in the user program over-rides manual changes to USR: size. When USR: size is changed manually, the user program restarts and the programmed size for USR: takes immediate effect. The USR: drive holds any file type within the constraints of the size of the drive and the limitations on filenames. Files typically stored include image files from cameras (see APPENDIX. Cameras (p. 479)), certain configuration files, files written for ftp retrieval, html files for viewing via web access, and files created with the TableFile() instruction. Files can be collected by ftp using datalogger support software (p. 417, p. 466) File Control utility, or automatically using the LNCMD program supplied exclusively with top-level datalogger support software (p. 417, p. 466). Monitor use of available USR: memory to ensure adequate space to store new files. FileManage() command is used within the CR800 user program to remove files. Files also can be removed using datalogger support software (p. 417, p. 466) File Control utility. Two status table registers monitor use and size of the USR: drive. Bytes remaining are indicated in register "USRDriveFree." Total size is indicated in register "USRDriveSize." Memory allocated to USR: drive, less overhead for directory use, is shown in datalogger support software (p. 417, p. 466) File Control.

12.1.1.4 USB: Drive


USB: drive uses Flash memory on a CS mass storage device (see APPENDIX. Mass Storage Devices (p. 479)). Its primary purpose is the storage of ASCII data files. Measurement data can be stored on USB: as discrete files by using the TableFile() instruction. TABLE. TableFile() Instruction Data File Formats (p. 336) describes available data file formats. Caution When removing mass storage devices, do so when the LED is not flashing or lit. Removing a mass storage device from the CR800 while the storage device is active can cause data corruption. CS mass storage devices connect to the CR800 via the CS I/O port. CS mass storage devices should be formatted as FAT32.

335

Section 12. Memory and Final Data Storage

12.1.1.5 Data File Formats


TableFile() instruction data file formats contain time series data and may have an option to include header, timestamp and record number. TABLE. TableFile() Instruction Data File Formats (p. 336) lists available formats. For a format to be compatible with datalogger support software (p. 417, p. 466) graphing and reporting tools, header, timestamps, and record numbers are usually required. Fully compatible formats are indicated with an asterisk. A more detailed discussion of data file formats is available in the Campbell Scientific publication LoggerNet Instruction Manual available at www.campbellsci.com. TABLE 70. TableFile() Instruction Data File Formats
Elements Included TableFile() Format Option 0* 1 2 3 4 5 6 7 8* 9 10 11 12 13 14 15 16* 17 18 19 32* 33 34 35 Base File Format TOB1 TOB1 TOB1 TOB1 TOB1 TOB1 TOB1 TOB1 TOA5 TOA5 TOA5 TOA5 TOA5 TOA5 TOA5 TOA5 CSIXML CSIXML CSIXML CSIXML CSIJSON CSIJSON CSIJSON CSIJSON X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X X Header Information X X X Time Stamp X Record Number

*Formats compatible with datalogger support software (p. 417, p. 466) data viewing and graphing utilities

336

Section 12. Memory and Final Data Storage 12.1.1.5.1 Data File Format Examples TOB1 TOB1 files may contain an ASCII header and binary data. The last line in the example contains cryptic text which represents binary data. Example:
"TOB1","11467","CR1000","11467","CR1000.Std.20","CPU:file format.CR1","61449","Test" "SECONDS","NANOSECONDS","RECORD","battfivoltfiMin","PTemp" "SECONDS","NANOSECONDS","RN","","" "","","","Min","Smp" "ULONG","ULONG","ULONG","FP2","FP2" }p' E1Hp' E1Hp' E1Hp' E1Hp' E1H

TOA5 TOA5 files contain ASCII (American Standard Code for Information Interchange) header and comma separated data. Example:
"TOA5","11467","CR1000","11467","CR1000.Std.20","CPU:file format.CR1","26243","Test" "TIMESTAMP","RECORD","battfivoltfiMin","PTemp" "TS","RN","","" "","","Min","Smp" "2010-12-20 11:31:30",7,13.29,20.77 "2010-12-20 11:31:45",8,13.26,20.77 "2010-12-20 11:32:00",9,13.29,20.8

CSIXML CSIXML files contain header information and data in an XML (eXtensible Markup Language) format. Example:
<?xml version="1.0" standalone="yes"?> <csixml version="1.0"> <head> <environment> <station-name>11467</station-name> <table-name>Test</table-name> <model>CR1000</model> <serial-no>11467</serial-no> <os-version>CR1000.Std.20</os-version> <dld-name>CPU:file format.CR1</dld-name> </environment> <fields> <field name="battfivoltfiMin" type="xsd:float" process="Min"/> <field name="PTemp" type="xsd:float" process="Smp"/> </fields> </head> <data> <r time="2010-12-20T11:37:45" no="10"><v1>13.29</v1><v2>21.04</v2></r> <r time="2010-12-20T11:38:00" no="11"><v1>13.29</v1><v2>21.04</v2></r>

337

Section 12. Memory and Final Data Storage


<r time="2010-12-20T11:38:15" no="12"><v1>13.29</v1><v2>21.04</v2></r> </data> </csixml>

CSIJSON CSIJSON files contain header information and data in a JSON (Java Script Object Notation) format. Example:
"signature": 38611,"environment": {"stationfiname": "11467","tablefiname": "Test","model": "CR1000","serialfino": "11467", "osfiversion": "CR1000.Std.21.03","progfiname": "CPU:file format.CR1"},"fields": [{"name": "battfivoltfiMin","type": "xsd:float", "process": "Min"},{"name": "PTemp","type": "xsd:float","process": "Smp"}]}, "data": [{"time": "2011-01-06T15:04:15","no": 0,"vals": [13.28,21.29]}, {"time": "2011-01-06T15:04:30","no": 1,"vals": [13.28,21.29]}, {"time": "2011-01-06T15:04:45","no": 2,"vals": [13.28,21.29]}, {"time": "2011-01-06T15:05:00","no": 3,"vals": [13.28,21.29]}]}

12.1.1.5.2

Data File Format Elements HEADER File headers provide metadata that describe the data in the file. A TOA5 header contains the metadata described below. Other data formats contain similar information unless a non-header format option is selected in the TableFile() instruction in the CR800 CRBASIC program. Line 1 Data Origins Includes the following metadata series: file type, station name, CR800 model name, CR800 serial number, OS version, CRBASIC program name, program signature, data table name. Line 2 Data Field Names Lists the name of individual data fields. If the field is an element of an array, the name will be followed by a comma separated list of subscripts within parentheses that identifies the array index. For example, a variable named values that is declared as a two by two array, i.e.,
Public Values(2,2)

will be represented by four field names: values(1,1), values(1,2), values(2,1), and values(2,2). Scalar (non-array) variables will not have subscripts.

338

Section 12. Memory and Final Data Storage

Line 3 Data Units Includes the units associated with each field in the record. If no units are programmed in the CR800 CRBASIC program, an empty string is entered for that field. Line 4 Data Processing Descriptors Entries describe what type of processing was performed in the CR800 to produce corresponding data, e.g., Smp indicates samples, Min indicates minima. If there is no recognized processing for a field, it is assigned an empty string. There will be one descriptor for each field name given on Header Line 2.

TIMESTAMP Data without timestamps are usually meaningless. Nevertheless, the TableFile() instruction optionally includes timestamps in some formats.

RECORD NUMBER Record numbers are optionally provided in some formats as a means to ensure data integrity and provide an upcount data field for graphing operations.

12.2 Memory Conservation


One or more of the following memory saving techniques can be used on the rare occasions when a program reaches memory limits: Declare variables as DIM instead of Public. DIM variables do not require buffer memory for data retrieval. Reduce arrays to the minimum size needed. Each variable, whether or not part of an array, requires about the same amount of memory. Approximately 192000 (4 kbyte memory) or 87000 (2 kbyte memory) variables will fill available memory. Use variable arrays with aliases instead of individual variables with unique names. Aliases consume less memory than unique variable names. Confine string concatenation to DIM variables. Dimension string variables only to the size required. Read More! More information on string variable memory use and conservation is available in SECTION. String Operations (p. 300).

339

Section 12. Memory and Final Data Storage

12.3 Memory Reset


Four features are available for complete or selective reset of CR800 memory.

12.3.1

Full Memory Reset


Full memory reset occurs when an operating system is sent to the CR800 using DevConfig or when entering "98765" in the status table field "FullMemReset." A full memory reset does the following: Clears and Formats CPU: drive (all program files erased) Clears SRAM data tables Clears Status Table Elements Restores settings to default Initializes system variables Clears communications memory Operating systems can also be sent using the Program Send feature in datalogger support software (p. 417). Beginning with operating system version 16, settings and status are preserved when sending a subsequent OS by this method; data tables are erased. Rely on this feature with caution, however, when sending an OS to CR800s in remote and difficult to access locations.

12.3.2

Program Send Reset


Final Storage (p. 419) data are erased when user programs are uploaded, unless preserve / erase data options are used. Preserve / erase data options are presented when sending programs from datalogger support software (p. 417, p. 466) File Control and CRBASIC Editor Compile | Save | Send. See SECTION. Preserving Data at Program Send (p. 117) for a more detailed discussion of preserve / erase data at program send.

12.3.3

Manual Data Table Reset


Data table memory is selectively reset from datalogger support software (p. 417) Station Status option optional keyboard display: Data | Reset Data Tables

12.3.4

Formatting Drives
CPU:, USR:, and USB: drives can be formatted individually. Formatting a drive erases all files on that drive. If the currently running user program is found on the drive to be formatted, the program will cease running and any SRAM data associated with the program is erased. Drive formatting is performed through datalogger support software File Control.

340

Section 12. Memory and Final Data Storage

12.4 File Management


Files in CR800 memory (program, data, CAL, image) can be managed or controlled with Campbell Scientific support software as summarized in TABLE. File Control Functions (p. 341). TABLE 71. File Control Functions
File Control Functions Sending programs to the CR800.
1

Accessed Through Send , File Control , DevConfig , keyboard with CS mass storage media 4 (USB: drive) , power-up with CS mass 5 storage media (USB: drive). File Control , power-up with CS mass 5 storage media (USB: drive) , FileManage() 6 instruction . DevConfig , automatic with CS mass 5 storage media (USB: drive). Send , power-up with CS mass storage 5 media (USB: drive) with default.CR8 file. File Control , power-up with CS mass 5 storage media (USB: drive). Connect , File Control , keyboard with CS 4 mass storage media (USB: drive). File Control , power-up with CS mass 5 storage media (USB: drive). File Control , power-up with CS mass 5 storage media (USB: drive). File Control . FileRename() FileTime()
6 2 6 6 2 2 2 7 2 2 1 3 2 2 3

Setting file attributes. See File Attributes (p. 342). Sending an OS to the CR800. Reset settings. Sending an OS to the CR800. Preserve settings. Formatting CR800 memory drives. Retrieving programs from the CR800. Setting disposition of old CS mass storage media (USB: drive) files Deleting files from memory drives. Stopping program execution. Renaming a file. Time stamping a file. List files. Create a data file from a data table JPEG files manager
1 2 3 4 5

File Control , FileList() TableFile()


6

optional keyboard display , LoggerNet | PakBusGraph

Datalogger support software (p. 417, p. 466) Program Send Button. See software Help. Datalogger support software (p. 417, p. 466) File Control. See software Help. Device Configuration Utility (DevConfig). See DevConfig Help. Manual with CS mass storage media (USB: drive). See Data Storage (p. 334).

Automatic with CS mass storage media (USB: drive) and Powerup.ini. See Power-up (p. 343). CRBASIC commands. See Data Table Declarations (p. 163) and File Management (p. 201) and CRBASIC Editor Help. Datalogger support software (p. 417, p. 466) Retrieve button. See software Help.

341

Section 12. Memory and Final Data Storage

12.4.1

File Attributes
A feature of program files is the file attribute. TABLE. CR800 File Attributes (p. 342) lists available file attributes, their functions, and when attributes are typically used. For example, a program file sent via the Send option in datalogger support software (p. 417), runs a) immediately ("Run Now") and b) when power is cycled on the CR800 ("Run on Power-up). This functionality is invoked because Send sets two CR800 file attributes on the program file, i.e., "Run Now" and "Run on Power-up." When together, "Run Now" and "Run on Power-up" are tagged as "Run Always." Note Activation of the Run on Power-up file can be prevented by holding down the Del key on the optional keyboard display while the CR800 is being powered up.

TABLE 72. CR800 File Attributes


Attribute Function Runs now and on power-up Attribute for Programs Sent to CR800 with: a) Send
1 2

Run Always
(Run on Powerup + Run Now)

b) File Control with Run Now & Run on Power-up checked. c) CS mass storage media (USB: drive) power-up using commands 1 & 13 (see TABLE. Powerup.ini Commands (p. 345)).
3

Run on Power-up

Runs only on power-up

a) File Control with Run on Power-up checked. b) CS mass storage media (USB: drive) power-up using command 2 (see TABLE. Powerup.ini Commands (p. 345)). a) File Control with Run Now checked. b) CS mass storage media (USB: drive) power-up using commands 6 & 14 (see TABLE. Powerup.ini Commands (p. 345)). But, if CS mass storage media (USB: drive) is left in, program loads again from CS mass storage media (USB: drive).
3 2 3

Run Now

Runs only when file sent to CR800

1 2

Datalogger support software (p. 417, p. 466) Program Send Button. See software Help.

Datalogger support software (p. 417, p. 466) | File Control. See software Help & Preserving Data at Program Send (p. 117).
3

Automatic on power-up of CR800 with CS mass storage media (USB: drive) and Powerup.ini. See Power-up (p. 343).

12.4.2

Data Preservation
Associated with file attributes is the option to preserve data in CR800 memory when a program is sent. This option applies to data table SRAM, and datalogger support software cache data. Depending on the application, retention of data files when a program is downloaded may be desirable. When sending a program to the CR800 with the datalogger support software Send button, data are always deleted before the program runs. When the program is sent using datalogger support software File Control or CRBASIC Editor "Compile, Save, and Send," options to preserve (do not erase) or not preserve (erase) data are presented. The

342

Section 12. Memory and Final Data Storage logic in TABLE. Data Preserve Options summarizes the disposition of CR800 data depending on the data preservation option selected. TABLE 73. Data Preserve Options
if "Preserve data if no table changed" if current program = overwritten program keep CPU data keep cache data else erase CPU data erase cache data end if end if if "erase data" erase CPU data erase cache data end if

12.4.3

External Memory Power-up


Uploading a CR800 operating system file or user program file in the field can be challenging, particularly during weather extremes. Heat, cold, snow, rain, altitude, blowing sand, and distance to hike influence how easily programming with a laptop or palm PC may be. An alternative is to carry the file to field on a light weight external memory device such as a USB: (p. 479) drive. Including a powerup.ini file with the OS / program file on an external drive, connecting the external device to the CR800, and then cycling power, will result in the file automatically uploading to the CR800 and running. Powerup.ini options also allows final data storage management comparable to the datalogger support software (p. 465) File Control feature. Caution Test Power-up options in the lab before going to the field. Always carry a laptop or palm PC into difficult or expensive to access places. Power-up functions include 1. Sending programs to the CR800 2. Setting attributes of CR800 program files 3. Setting disposition of old CS mass storage media (USB: drive) files 4. Sending an OS to the CR800 5. Formatting memory drives 6. Deleting data files Note Back in the old days of volatile RAM, life was simple. Lost power meant lost programs, variables, and data. The advent of non-volatile memory has saved a lot of frustration in the field, but it requires thought in some applications. For instance, if the CR800 loses power, do you want it to power back up with the

343

Section 12. Memory and Final Data Storage same program, or another one? with variables intact or erased? with data intact or erased? The powerup.ini file enables the power-up function. The powerup.ini file usually resides on an external drive. It contains a list of one or more command lines. At power-up, the CR800 searches for a powerup.ini file on a drive and executes the command line(s) prior to compiling a program. Powerup.ini performs three operations: 1. Copies the specified program file to a specified memory drive. 2. Sets a file attribute on the program file. 3. Optionally deletes data left in memory from a just previous, and now overwritten, program. A powerup.ini file takes precedence during power-up. Although it sets file attributes for the programs it uploads, its presence on a drive does not allow those file attributes to control the power-up process. To avoid confusion, either remove the external drive on which the powerup.ini file resides or delete the file after the powerup.ini operation is complete.

12.4.3.1 Creating and Editing Powerup.ini


A powerup.ini file is created with a text editor on a PC, then saved as "powerup.ini" on a memory drive of the CR800. The file is saved to the memory drive, along with the operating system or user program file, using the File Control | Send function in datalogger support software (p. 465). Note Some text editors (such as MicroSoft WordPad) will attach header information to the powerup.ini file causing it to abort. Check the text of a powerup.ini file in the CR800 with the optional keyboard display to see what the CR800 actually sees. Comments can be added to the file by preceding them with a single-quote character ('). All text after the comment mark on the same line is ignored.

12.4.3.1.1

Syntax
Command,File,Device

where Command = one of the numeric commands in TABLE. Powerup.ini Commands (p. 345). File = accompanying operating system or user program file. Name can be up to 22 characters. Device: the CR800 memory drive to which the accompanying operating system or user program file is copied (usually CPU:). If left blank or with an invalid option, default device will be CPU:. Use the same drive designation as the transporting external device if the preference is to not copy the file.

344

Section 12. Memory and Final Data Storage

TABLE 74. Powerup.ini Commands


Command Description
Run always, preserve data Run on power-up Format Run now, preserve data Load OS (File = .obj) Run always, erase data Run now, erase files

1*
2 5 6* 9 13 14

*By using PreserveVariables() instruction in the CRBASIC program, with commands 1 & 6, data and variables can be preserved.

12.4.3.1.2

Applications Commands 1, 2, 6, 13, and 14 (Run Now and / or Run On Power-up). File is copied to Device. Command 1, 2, 13 (Run On Power-up). If the copy (first application, above) succeeds, the new Run On Power-up program is accepted. If the copy fails, no change is made to the Run On Power-up program. Commands 1, 6, 13, and 14 (Run Now). The Run Now program is changed whether or not the copy (first application, above) occurs. If the copy does succeed, the Run Now program is opened from the device specified. Commands 13 and 14 (Delete Associated Data). Since powerup.ini is only processed at power-up, there is not a compiled program to delete associated data for. The information from the last running program is still available for the CR800 to delete the files used by that program.

12.4.3.1.3

Program Execution After File is processed, the following rules determine what CR800 program to run: If the Run Now program is changed then it is the program that runs. If no change is made to Run Now program, but Run on Power-up program is changed, the new Run on Power-up program runs. If neither Run on Power-up nor Run Now programs are changed, the previous Run on Power-up program runs.

345

Section 12. Memory and Final Data Storage 12.4.3.1.4 Example Power-up.ini Files
Powerup.ini Example
Code Form / Syntax 'Command = numeric power-up command 'File = file associated with the action 'Device = device to which File is copied. Defaults to CPU: 'Command,File,Device 13,Write2CRD_2.cr1,cpu:

Powerup.ini Example
Copy program file pwrup.cr1 from the external drive to CPU:. File will run only when CR800 powered-up later 2,pwrup.cr1,cpu:

Powerup.ini Example
Format the USR: drive 5,,usr:

'

Powerup.ini Example.
Load an operating system (.obj) file into FLASH as the new OS 9,CR800.Std.04.obj

Powerup.ini Example
A program file is carried on an external USB: drive. Do not copy program file from USB:. Run program always, erase data. 13,toobigforcpu.cr1,usb:

Powerup.ini Example
Run a program file always, erase data 13,pwrup_1.cr1,cpu:

Powerup.ini Example
Run a program file now, erase data now 14,run.cr1,cpu:

12.5 File Names


The maximum size of the file name that can be stored, run as a program, or FTP transferred in the CR800 is 59 characters. If the name is longer than 59 characters an "Invalid Filename" error is displayed. If several files are stored, each with a long filename, memory allocated to the root directory can be

346

Section 12. Memory and Final Data Storage exceeded before the actual memory of storing files is exceeded. When this occurs, an "insufficient resources or memory full" error is displayed.

12.6 File System Errors


TABLE. File System Error Codes (p. 347) lists error codes associated with the datalogger file system. Errors can occur when attempting to access files on any of the available drives. TABLE 75. File System Error Codes
Error Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 31 32 Invalid Format Device capabilities error Unable to allocate memory for file operation Max number of available files exceeded No file entry exists in directory Disk change occurred Part of the path (subdirectory) was not found File at EOF Bad cluster encountered No file buffer available Filename too long or has bad chars File in path is not a directory Access permission, opening DIR or LABEL as file, or trying to open file as DIR or mkdir existing file Opening read only file for write Disk full (can't allocate new cluster) Root directory is full Bad file ptr (pointer) or device not initialized Device does not support this operation Bad function argument supplied Seek out of file bounds Trying to mkdir an existing dir Bad partition sector signature Unexpected system ID byte in partition entry Path already open Access to uninitialized ram drive Attempted rename across devices Subdirectory is not empty Attempted write to Write Protected disk No response from drive (Door possibly open) Description

347

Section 12. Memory and Final Data Storage

TABLE 75. File System Error Codes


Error Code 33 34 35 36 37 38 39 40 41 42 43 Description Address mark or sector not found Bad sector encountered DMA memory boundary crossing error Miscellaneous I/O error Pipe size of 0 requested Memory release error (relmem) FAT sectors unreadable (all copies) Bad BPB sector Time-out waiting for filesystem available Controller failure error Pathname exceeds _MAX_PATHNAME

348

Section 13. Telecomms and Data Retrieval


Telecommunications, in the context of CR800 operation, is the movement of information between the CR800 and another computing device, usually a PC. The information can be programs, data, files, or control commands. Telecommunications systems require three principal components: hardware, carrier signal, and protocol. For example, a common way to communicate with the CR800 is with PC200W software by way of a PC COM port. In this example, hardware are the PC COM port, the CR800 RS-232 port, and a serial cable. The carrier signal is RS-232, and the protocol is PakBus. Of these three, a user most often must come to terms with only the hardware, since the carrier signal and protocol are transparent in most applications. Systems usually require a single type of hardware and carrier signal. Some applications, however, require hybrid systems that utilize two or more hardware and signal carriers. Contact a Campbell Scientific applications engineer for assistance in configuring any telecommunications system. Synopses of software to support the various telecommunications devices and protocols are found in SECTION. Support Software (p. 375). Of special note is Network Planner (p. 468), a LoggerNet client designed to simplify the configuration of PakBus telecommunications networks.

13.1 Hardware and Carrier Signal


Campbell Scientific supplies or recommends a wide range of telecommunications hardware. TABLE. CR800 Telecommunications Options (p. 349) lists telecommunications destination, device, path, and carrier options which imply certain types of hardware for use with the CR800 datalogger. Information in TABLE. CR800 Telecommunications Options (p. 349) is conceptual. For specific model numbers and specifications, see APPENDIX. Telecommunications Hardware (p. 477), contact a Campbell Scientific applications engineer, or go to www.campbellsci.com.

349

Section 13. Telecomms and Data Retrieval

TABLE 76. CR800 Telecommunications Options


Destination Device / Portal PC / COM or USB PDA / COM Port PC / COM Port PC / COM Port PC / Network Card PC / COM Port PC / COM Port PC / COM Port PC / COM Port PDA / Infrared Port Satellite System Communications Path Direct Connect Direct Connect Digital Cellular Multidrop Ethernet / PPP Spread Spectrum RF Licensed Frequency RF Short-haul Telephone Land-line Telephone Infrared Satellite Transceiver Carrier Signal RS-232 RS-232 800 MHz RF RS-485 IP 900 MHz RF UHF VHF RF CCITT v.24 CCITT v.92 SIR RF

CS Mass Storage Device Audible Report Heads-Up Display Digital Display optional keyboard display

Direct Connect Land-line Telephone Direct Connect Direct Connect Direct Connect

CS I/O Serial Comms Voice CS I/O Serial Comms CS I/O Serial Comms Serial Comms

13.2 Protocols
The primary telecommunication protocol for the CR800 is PakBus (SECTION. PakBus Overview (p. 353)). Modbus and DNP3 are also supported on board (SECTION. Alternate Telecoms Resource Library (p. 365)). CANBUS is also supported when using the Campbell Scientific CANBUS communications module.

13.3 Initiating Telecomms (Callback)


Telecommunications sessions are usually initiated by a PC. Once telecommunication is established, the PC issues commands to send programs, set clocks, collect data, etc. Because data retrieval is managed by the PC, several PCs can have access to a CR800 without disrupting the continuity of data. PakBus allows multiple PCs to communicate with the CR800 simultaneously when proper telecommunications networks are installed. Typically, the PC initiates telecommunications with the CR800 via datalogger support software (p. 465). However, some applications require the CR800 to call back the PC (initiate telecommunications). This feature is called Callback. Special features exclusive to LoggerNet (p. 465) enable the PC to receive calls from the CR800.

350

Section 13. Telecomms and Data Retrieval For example, if a fruit grower wants the CR800 to contact him with a frost alarm, it can call the grower's PC, send him an email, text message, or page, or call him with synthesized voice over telephone. Callback has been utilized in applications including Ethernet, land-line telephone, digital cellular, and direct connection. Callback via telephone is well documented in CRBASIC Editor Help (search term "callback"). For more information on other available Callback features, manuals for various telecommunications hardware may discuss Callback options. Contact a Campbell Scientific applications engineer for the latest information in Callback applications. Caution When using the ComME communications port with nonPakBus protocols, incoming characters can be corrupted by concurrent use of the CS I/O for SDC communication. PakBus communication uses a low level protocol of a pause / finish / ready sequence to stop incoming data while SDC occurs. Non-PakBus communication includes PPP protocol, ModBus, DNP3, and generic CRBASIC driven use of CS I/O. Usually unnoticed, a short burst of SDC communication occurs at power up and other times when the datalogger is reset, such as when compiling a program or changing settings that require recompiling. This SDC activity is the datalogger querying the SDC to see if the optional keyboard display is available. When DevConfig and PakBus Graph retrieve settings, the CR800 queries the SDC to determine what SDC devices are connected. Results of the query can be seen in the DevConfig and PakBusGraph settings tables. SDC queries occur whether or not an SDC device is attached.

351

Section 13. Telecomms and Data Retrieval

352

Section 14. PakBus Overview


Read More! This section is provided as a primer to PakBus communications. Complete information is available in Campbell Scientific's "PakBus Networking Guide", available at www.campbellsci.com. The CR800 communicates with computers or other Campbell Scientific dataloggers via PakBus. PakBus is a proprietary telecommunications protocol similar in concept to IP (Internet protocol). PakBus allows compatible Campbell Scientific dataloggers and telecommunications peripherals to seamlessly link to a PakBus network.

14.1 PakBus Addresses


CR800s are assigned PakBus address 1 as a factory default. Networks with more than a few stations should be organized with an addressing scheme that guarantees unique addresses for all nodes. One approach, demonstrated in FIGURE. PakBus Network Addressing (p. 354), is to assign single-digit addresses to the first tier of nodes, multiples of tens to the second tier, multiples of 100s to the third, etc. Note that each node on a branch starts with the same digit. Devices, such as PCs, with addresses greater than 4000 are given special administrative access to the network PakBus addresses are set using DevConfig, PakBusGraph, CR800 status table, or with a optional keyboard display. DevConfig (Device Configuration Utility) is the primary settings editor for Campbell Scientific equipment. It requires a hardwire RS-232 connection to a PC and allows backup of settings on the PC hard drive. PakBusGraph is used over a telecommunications link to change settings, but has no provision for backup. Caution Care should be taken when changing PakBus addresses with PakBusGraph or in the status table. If an address is changed to an unknown value, a field visit with a laptop and DevConfig may be required to discover the unknown address.

14.2 Nodes: Leaf Nodes and Routers


A PakBus network consists of 2 to 4093 linked nodes. One or more leaf nodes and routers can exist in a network. Leaf nodes are measurement devices at the end of a branch of the PakBus web. Leaf nodes can be linked to any router. A leaf node cannot route packets but can originate or receive them.

353

Section 14. PakBus Overview Routers are measurement or telecommunications devices that route packets to other linked routers or leaf nodes. Routers can be branch routers. Branch routers only know as neighbors central routers, routers in route to central routers, and routers one level outward in the network. Routers can be central routers. Central routers know the entire network. A PC running LoggerNet is typically a central router. Routers can be router-capable dataloggers or communications devices.

The CR800 is a leaf node by factory default. It can be configured as a router by setting "IsRouter" in its status table to "1" or "True". The network shown in FIGURE. PakBus Network Addressing (p. 354) contains 6 routers and 8 leaf nodes.

14.2.1

Router and Leaf Node Configuration


Consult APPENDIX. Router and Leaf Node Hardware (p. 477) for a table of available PakBus leaf node and router devices.

FIGURE 103. PakBus Network Addressing LoggerNet is configured by default as a router and can route datalogger to datalogger communications.

14.3 Linking PakBus Nodes: Neighbor Discovery


To form a network, nodes must establish links with neighbors (adjacent nodes). Links are established through a process called discovery. Discovery occurs when nodes exchange hellos. A hello exchange occurs during a hello-message between two nodes.

354

Section 14. PakBus Overview

14.3.1

Hello-message (two-way exchange)


A hello-message is an interchange between two nodes that negotiates a neighbor link. A hello-message is sent out in response to one or both of either a beacon or a hello-request.

14.3.2

Beacon (one-way broadcast)


A beacon is a broadcast sent by a node at a specified interval telling all nodes within hearing that a hello-message can be sent. If a node wishes to establish itself as a neighbor to the beaconing node, it will then send a hello-message to the beaconing node. Nodes already established as neighbors will not respond to a beacon.

14.3.3

Hello-request (one-way broadcast)


All nodes hearing a hello-request broadcast (existing and potential neighbors) will issue a hello-message to negotiate or re-negotiate a neighbor relationship with the broadcasting node.

14.3.4

Neighbor Lists
PakBus devices in a network can be configured with a neighbor list. The CR800 sends out a hello-message to each node in the list whose verify interval has expired at a random interval*. If a node responds, a hello-message is exchanged and the node becomes a neighbor. *A random number of seconds between INTERVAL and (2 * INTERVAL), where INTERVAL is the Verify Interval setting if non-zero, or 30 seconds if the Verify Interval setting is zero. Neighbor filters dictate which nodes are neighbors and force packets to take routes specified by the network administrator. LoggerNet (a PakBus node) derives its neighbor filter from link information in the Setup device map.

14.3.5

Adjusting Links
PakBusGraph, a client of LoggerNet, is particularly useful when testing and adjusting PakBus routes. Paths established by way of beaconing may be redundant and vary in reliability. Redundant paths can provide backup links in the event the primary path fails. Redundant and unreliable paths can be eliminated by activating neighbor filters in the various nodes and by disabling some beacons.

355

Section 14. PakBus Overview

14.3.6

Maintaining Links
Links are maintained by means of the CVI (communications verification interval). The CVI can be specified in each node with DevConfig. The following rules apply: Note -- During the hello-message, a CVI must be negotiated between two neighbors. The negotiated CVI is the lesser of the first nodes CVI and 6/5ths of the neighbors CVI. If Verify Interval = 0, then CVI = 2.5 x beacon interval* If Verify Interval = 60, then CVI = 60 seconds* If Beacon Interval = 0 and Verify Interval = 0, then CVI = 300 seconds* If the router or master does not hear from a neighbor for one CVI, it begins again to send a Hello message to that node at the random interval. Users should base verification intervals on the timing of normal communications such as scheduled LoggerNet collections or datalogger to dataloggers communications. The idea is to not allow the verification interval to expire before normal communications. If the verification interval expires the devices will initiate hello exchanges in an attempt to regain neighbor status, increasing traffic in the network.

14.4 PakBus Troubleshooting


Various tools and methods have been developed to assist in troubleshooting PakBus networks.

14.4.1

Link Integrity
With beaconing or neighbor filter discovery, links are established and verified using relatively small data packets (Hello messages). When links are used for regular telecommunications, however, longer messages are used. Consequently, a link may be reliable enough for discovery but unreliable with larger packets. This condition is most common in radio networks, particularly when max packet size is >200. PakBus communications over marginal links can often be improved by reducing the size of the PakBus packets. Best results are obtained when the maximum packet sizes in both nodes are reduced.

14.4.1.1 Automatic Packet Size Adjustment


The BMP5 file receive transaction allows the BMP5 client (LoggerNet) to specify the size of the next fragment of the file that the CR800 sends.

356

Section 14. PakBus Overview

Note The file receive transaction is used to get table definitions from the datalogger. Because LoggerNet must specify a size for the next fragment of the file, it uses whatever size restrictions that apply to the link. Hence, the size of the responses to the file receive commands that the CR800 sends is governed by the maxPacketSize setting for the datalogger as well as that of any of its parents in LoggerNet's network map. Note that this calculation also takes into account the error rate for devices in the link. BMP5 data collection transaction does not provide any way for the client to specify a cap on the size of the response message. This is the main reason why the "Max Packet Size" setting exists in the CR800. The CR800 can look at this setting at the point where it is forming a response message and cut short the amount of data that it would normally send if the setting limits the message size.

14.4.2

Ping
Link integrity can be verified with the following procedure by using PakBusGraph | Ping Node. Nodes can be pinged with packets of 50, 100, 200 or 500 bytes. Note Do not use packet sizes greater than 90 when pinging with 100 mW radio modems and radio enabled dataloggers (APPENDIX. Telecommunications Hardware (p. 477)). Pinging with ten repetitions of each packet size will characterize the link. Before pinging, all other network traffic (scheduled data collections, clock checks, etc.) should be temporarily disabled. Begin by pinging the first layer of links (neighbors) from the PC, then proceed to nodes that are more than one hop away. TABLE. PakBus Link Performance Gage (p. 357) provides a link performance gage. TABLE 77. PakBus Link Performance Gage
500 byte Ping Sent 10 10 10 10 10 9 7-8 <7 Successes excellent good adequate marginal Link Status

14.4.3

Traffic Flow
Keep beacon intervals as long as possible with higher traffic (large numbers of nodes and / or frequent data collection). Long beacon intervals minimize collisions with other packets and resulting retries. The minimum recommended beacon interval is 60 seconds. If communications traffic is high, consider setting beacon intervals of several minutes. If data throughput needs are great,

357

Section 14. PakBus Overview maximize data bandwidth by creating some branch routers, and / or by eliminating beacons altogether and setting up neighbor filters.

14.5 LoggerNet Device Map Configuration


As shown in FIGURE. Flat Map (p. 358) and FIGURE. Tree Map (p. 358), the essential element of a PakBus network device map in LoggerNet is the PakBusPort. After adding the root port (COM, IP, etc), add a PakBusPort and the dataloggers.

14.6 PakBus LAN Example


To demonstrate PakBus networking, a small LAN (Local Area Network) of CR800s can be configured as shown in FIGURE. Configuration and Wiring of PakBus LAN (p. 359). A PC running LoggerNet uses the RS-232 port of the first CR800 to communicate with all CR800s. All LoggerNet functions, such as send programs, monitor measurements and collect data, are available to each CR800. CR800s can also be programmed to exchange data with each other (this feature is not demonstrated in this example).

14.6.1

LAN Wiring
Use 3-conductor cable to connect CR800s as shown in FIGURE. Configuration and Wiring of CR800 LAN (p. 359). Cable length between any two CR800s must be less than 25 feet (7.6 m). COM1 Tx (transmit) and Rx (receive) are CR800 digital I/O ports C1 and C2 respectively; COM2 Tx and Rx are digital I/O ports C3 and C4, respectively. Tx from a CR800 COM port is connected to Rx of the COM port of an adjacent CR800.

358

Section 14. PakBus Overview

FIGURE 104. Configuration and Wiring of PakBus LAN

14.6.2

LAN Setup
Configure CR800s before connecting them to the LAN: 1. Start Device Configuration Utility (DevConfig). Click on Device Type: CR800. Follow on-screen instructions to power CR800s and connect them to the PC. Close other programs that may be using the PC COM port, such as LoggerNet, PC400, PC200W, HotSync, etc. 2. Click on the Connect button at the lower left. 3. Set CR800 settings using DevConfig as outlined in TABLE. PakBus LAN Example Datalogger Communications Settings (p. 361). Leave unspecified settings at default values. Example DevConfig screen captures are shown in FIGURE. DevConfig Deployment | Datalogger Tab (p. 360) through FIGURE. DevConfig Deployment | Advanced Tab (p. 360). If the CR800s are not new, upgrading the operating system or setting factory defaults before working this example is advised.

359

Section 14. PakBus Overview

FIGURE 105. DevConfig Deployment | Datalogger Tab

FIGURE 106. DevConfig Deployment | ComPorts Settings Tab

360

Section 14. PakBus Overview

FIGURE 107. DevConfig Deployment | Advanced Tab

TABLE 78. PakBus LAN Example Datalogger Communications Settings


Software Tab Sub-Tab Setting Sub-Setting Datalogger CR800_1 CR800_2 CR800_3 CR800_4 1 2 3 4 115.2K Fixed 115.2K Fixed 115.2K Fixed 115.2K Fixed Datalogger PakBus Adr COM1 Baud Rate Neighbors* Begin: 2 1 1 3 End: 2 1 1 3 115.2K Fixed Disabled 115.2K Fixed Disabled 4 4 Device Configuration Utility (DevConfig) Deployment ComPort Settings COM2 Baud Rate Neighbors* Begin: 3 End: 4 Yes No Yes No Advanced Is Router

* Setup can be simplified by setting all neighbor lists to Begin: 1 End: 4

361

Section 14. PakBus Overview

14.6.3

LoggerNet Setup

FIGURE 108. LoggerNet Device Map Setup: COM Port In LoggerNet | Setup, add a ComPort, PakBusPort, and (4) CR800 dataloggers to the device map as shown in FIGURE. LoggerNet Device Map Setup (p. 362).

FIGURE 109. LoggerNet Device Map Setup: PakBusPort

362

Section 14. PakBus Overview

As shown in FIGURE. LoggerNet Device Map Setup: PakBusPort (p. 362), set the PakBusPort maximum baud rate to 115200. Leave other settings at the defaults.

FIGURE 110. LoggerNet Device Map Setup: Dataloggers

As shown in FIGURE. LoggerNet Device Map Setup: Dataloggers (p. 363), set the PakBus address for each CR800 as listed in TABLE. PakBus LAN Example Datalogger Communications Settings (p. 361).

363

Section 14. PakBus Overview

364

Section 15. Alternate Telecommunications


Typical applications require the CR800 to communicate with CSI's PC based datalogger support software via the PakBus telecommunications protocol. However, the CR800 is also equipped to communicate with SCADA networks and third party SCADA software via DNP3 and Modbus.

15.1 DNP3
15.1.1 Overview
The CR800 is DNP3 SCADA compatible. DNP3 is a SCADA protocol primarily used by utilities, power generation and distribution networks, and the water and wastewater treatment industry. Distributed Network Protocol (DNP) is an open protocol used in applications to ensure data integrity using minimal bandwidth. DNP implementation in the CR800 is DNP3 level 2 Slave compliant with some of the operations found in a level 3 implementation. A standard CR800 program with DNP instructions will take arrays of real time or processed data and map them to DNP arrays in integer or binary format. The CR800 responds to any DNP master with the requested data or sends unsolicited responses to a specific DNP master. DNP communications are supported in the CR800 through the RS-232 port, COM1 COM2, or over TCP, taking advantage of multiple communications options compatible with the CR800, e.g., RF, cellular phone, satellite. DNP3 state and history are preserved through power and other resets in non-volatile memory. DNP SCADA software enables CR800 data to move directly into a database or display screens. Applications include monitoring weather near power transmission lines to enhance operational decisions, monitoring and controlling irrigation from a wastewater treatment plant, controlling remote pumps, measuring river flow, and monitoring air movement and quality at a power plant.

15.1.2

Programming for DNP3


CRBASIC EXAMPLE. Implementation of DNP3 (p. 367) lists CRBASIC code to take Iarray() analog data and Barray() binary data (status of control port 5) and map them to DNP arrays. The CR800 responds to a DNP master with the specified data or sends unsolicited responses to DNP Master 3.

15.1.2.1 Declarations
TABLE. Data Types Required to Store Data in Public Table (p. 366) shows object groups supported by the CR800 DNP implementation, and the required

365

Section 15. Alternate Telecommunications data types. A complete list of groups and variations is available in CRBASIC Help for DNPVariable(). TABLE 79. Data Types Required to Store Data in the Public Table for eac
Data Type Boolean 1 2 10 12 Long 30 32 40 41 50 51 Group Binary Input Binary Input Change Binary Output Control Block Analog Input Analog Change Event Analog Output Status Analog Output Block Time and Date Time and Date CTO Description

15.1.2.2 CRBASIC Instructions - DNP


Complete descriptions and options of commands are available in CRBASIC Editor Help. DNP () Sets the CR800 as a DNP slave (outstation/server) with an address and DNP3 dedicated COM port. Normally resides between BeginProg and Scan(), so is executed only once. Example at CRBASIC EXAMPLE. Implementation of DNP3 (p. 367), line 20. Syntax DNP (ComPort, BaudRate, DNPSlaveAddr) DNPVariable () Associates a particular variable array with a DNP object group. When the master polls the CR800, it returns all the variables specified along with their specific groups. Also used to set up event data, which is sent to the master whenever the value in the variable changes. Example at CRBASIC EXAMPLE. Implementation of DNP3 (p. 367), line 24. Syntax DNPVariable (Source, Swath, DNPObject, DNPVariation, DNPClass, DNPFlag, DNPEvent, DNPNumEvents) DNPUpdate () Determines when DNP slave (outstation/server) will update its arrays of DNP elements. Specifies the address of the DNP master to which are sent unsolicited responses (event data). Must be included once within a Scan/NextScan for the DNP slave to update its arrays. Typically placed in a program after the elements in the array are updated. The CR800 will respond to any DNP master regardless of its address. Syntax DNPUpdate (DNPSlaveAddr,DNPMasterAddr)

366

Section 15. Alternate Telecommunications

15.1.2.3 Programming for Data Acquisition


As shown in CRBASIC EXAMPLE. Implementation of DNP3 (p. 367), program the CR800 to return data when polled by the DNP3 master using the following three actions: 1. Place DNP() at the beginning of the program between BeginProg and Scan(). Set COM port, baud rate, and DNP3 address. 2. Setup the variables to be sent to the master using DNPVariable(). Dual instructions cover static (current values) and event (previous ten records) data. For analog measurements:

DNPVariable(Variable_Name,Swath,30,2,0,&B00000000,0,0) DNPVariable(Variable_Name,Swath,32,2,3,&B00000000,0,10) For digital measurements (control ports):

DNPVariable(Variable_Name,Swath,1,2,0,&B00000000,0,0) DNPVariable(Variable_Name,Swath,32,2,3,&B00000000,0,10) 3. Place DNPUpdate() after Scan(), inside the main scan. The DNP3 master is notified of any change in data each time DNPUpdate() runs; e.g., for a 10 second scan, the master is notified every 10 seconds.

CRBASIC EXAMPLE 73. Implementation of DNP3


Public IArray(4) as Long Public BArray(2) as Boolean Public Public Public Public Units Units Units Units WindSpd WindDir Batt_Volt PTemp_C WindSpd=meter/Sec WindDir=Degrees Batt_Volt=Volts PTemp_C=Deg C

'Main Program BeginProg 'DNP communication over the RS-232 port at 115.2kbps. Datalogger 'DNP address is 1 DNP(COMRS-232,115200,1) 'DNPVariable(Source, Swath, DNPObject, DNPVariation, DNPClass, DNPFlag, 'DNPEvent, DNPNumEvents) DNPVariable(IArray,4,30,2,0,&B00000000,0,0)

367

Section 15. Alternate Telecommunications

'Object group 30, variation 2 is used to return analog data when the CR800 'is polled. Flag is set to an empty 8 bit number(all zeros), DNPEvent is a 'reserved parameter and is currently always set to zero. Number of events is 'only used for event data. DNPVariable(IArray,4,32,2,3,&B00000000,0,10) DNPVariable(BArray,2,1,1,0,&B00000000,0,0) DNPVariable(BArray,2,2,1,1,&B00000000,0,1) Scan(1,Sec,1,0) 'Wind Speed & Direction Sensor measurements WS_ms and WindDir: PulseCount(WindSpd,1,1,1,3000,2,0) IArray(1) = WindSpd * 100 BrHalf(WindDir,1,mV2500,3,1,1,2500,True,0,_60Hz,355,0) If WindDir>=360 Then WindDir=0 IArray(2) = WindDir * 100 'Default Datalogger Battery Voltage measurement Batt_Volt: Battery(Batt_Volt) IArray(3) = Batt_Volt * 100 'Wiring Panel Temperature measurement PTemp_C: PanelTemp(PTemp_C,_60Hz) IArray(1) =PTemp_C PortGet(Barray(1),5) 'Update DNP arrays and send unsolicited requests to DNP Master address 3 DNPUpdate(2,3) NextScan

15.2 Modbus
15.2.1 Overview
Modbus is a widely used SCADA communication protocol that facilitates exchange of information and data between computers / HMI software, instruments (RTUs) and Modbus compatible sensors. The CR800 communicates via Modbus over RS-232, RS485 and TCP. Modbus systems consist of a master (PC), RTU / PLC slaves, field instruments (sensors), and the communications network hardware. The communications port, baud rate, data bits, stop bits, and parity are set in the Modbus driver of the master and / or the slaves. The Modbus standard has two communications modes, RTU and ASCII. However, CR800s communicate in RTU mode exclusively. Field instruments can be queried by the CR800. Because Modbus has a set command structure, programming the CR800 to get data from field instruments is much simpler than from serial sensors. Because Modbus uses a common bus and addresses each node, field instruments are effectively multiplexed to a CR800 without additional hardware. A CR800 goes into sleep mode after 40 seconds of communications inactivity. Once asleep, two packets are required before the CR800 will respond. The first packet awakens the CR800; the second packet is received as data. CR800s, through DevConfig or the status table (APPENDIX. Status Table and Settings

368

Section 15. Alternate Telecommunications (p. 433)) can be set to keep communications ports open and awake, but at higher power usage.

15.2.2

Terminology
TABLE. Modbus to Campbell Scientific Equivalents (p. 369) lists terminology equivalents to aid in understanding how CR800s fit into a SCADA system. TABLE 80. Modbus to Campbell Scientific Equivalents
Modbus Domain Coils Digital Registers Input Registers Holding Registers RTU / PLC Master Slave Field Instrument Data Form Single Bit 16-bit Word 16-bit Word 16-bit Word Campbell Scientific Domain Ports, Flags, Boolean Variables Floating Point Variables Floating Point Variables Floating Point Variables CR800 Usually a computer Usually a CR800 Sensor

15.2.2.1 Glossary of Terms


Coils (00001 to 09999) Originally, "coils" referred to relay coils. In CR800s, coils are exclusively ports, flags, or a Boolean variable array. Ports are inferred if parameter 5 of the ModbusSlave instruction is set to 0. Coils are assigned to Modbus registers 00001 to 09999.

Digital Registers 10001-19999 Hold values resulting from a digital measurement. Digital registers in the Modbus domain are read only. In the CSI domain, the leading digit in Modbus registers is ignored, and so are assigned together to a single Dim or Public variable array (read / write).

Input Registers 30001 - 39999 Hold values resulting from an analog measurement. Input registers in the Modbus domain are read only. In the CSI domain, the leading digit in Modbus registers is ignored, and so are assigned together to a single Dim or Public variable array (read / write).

Holding Registers 40001 - 49999 Hold values resulting from a programming action. Holding registers in the Modbus domain are read / write. In the CSI domain, the leading digit in Modbus registers is ignored, and so are assigned together to a single Dim or Public variable array (read / write).

369

Section 15. Alternate Telecommunications RTU / PLC Remote Telemetry Units (RTUs) and Programmable Logic Controllers (PLCs) were at one time used in exclusive applications. As technology increases, however, the distinction between RTUs and PLCs becomes more blurred. A CR800 fits both RTU and PLC definitions.

15.2.3

Programming for Modbus


TABLE. CRBASIC Ports, Flags, Variables and Modbus Registers (p. 370) shows the linkage between CR800 ports, flags and Boolean variables and Modbus registers. Modbus does not distinguish between CR800 ports, flags, or Boolean variables. By declaring only ports, or flags, or Boolean variables, the declared feature is addressed by default. A typical CRBASIC program for a Modbus application will declare variables and ports, or variables and flags, or variables and Boolean variables. TABLE 81. CRBASIC Ports, Flags, Variables and Modbus Registers
CR800 Feature Control Port (Port) Flag Boolean Variable Variable Example CRBASIC Declaration Public Port(8) Public Flag(17) Public ArrayB(56) as Boolean Public ArrayV(20)* Equivalent Example Modbus Register 00001 to 00009 00001 to 00018 00001 to 00057 40001 to 40041* or 30001 to 30041*

15.2.3.1 Declarations

*Because of byte number differences, each CR800 domain variable translates to two Modbus domain input / holding registers.

15.2.3.2 CRBASIC Instructions - Modbus


Complete descriptions and options of commands are available in CRBASIC Editor Help. ModbusMaster () Sets up a CR800 as a Modbus master to send or retrieve data from a Modbus slave. Syntax ModbusMaster (ResultCode, ComPort, BaudRate, ModbusAddr, Function, Variable, Start, Length, Tries, TimeOut) ModbusSlave () Sets up a CR800 as a Modbus slave device. Syntax ModbusSlave (ComPort, BaudRate, ModbusAddr, DataVariable, BooleanVariable)

370

Section 15. Alternate Telecommunications MoveBytes () Moves binary bytes of data into a different memory location when translating big endian to little endian data. Syntax MoveBytes (Dest, DestOffset, Source, SourceOffset, NumBytes)

15.2.3.3 Addressing (ModbusAddr)


Modbus devices have a unique address in each network. Addresses range from 1 to 247. Address 0 is reserved for universal broadcasts. When using the NL100, use the same number as the Modbus and PakBus address.

15.2.3.4 Supported Function Codes (Function)


Modbus protocol has many function codes. CR800 commands support the following. 01 Read Coil Status 02 Read Input Status 03 Read Holding Registers 04 Read Input Registers 05 Force Single Coil 15 Force Multiple Coils 16 Force Multiple Registers

15.2.3.5 Reading Inverse Format Registers


Some Modbus devices require reverse byte order words (CDAB vs. ABCD). This can be true for either floating point, or integer formats. Since a slave CR800 uses the ABCD format, either the master has to make an adjustment, which is sometimes possible, or the CR800 needs to output reverse byte order words. To reverse the byte order, use the MoveBytes () instruction as shown in the sample code below.
for i = 1 to k MoveBytes (InverseFloat(i),2,Float(i),0,2) MoveBytes (InverseFloat(i),0,Float(i),2,2) next

In the example above, InverseFloat(i) is the array holding the inverse byte ordered word (CDAB). Array Float(i) holds the obverse byte ordered word (ABCD).

371

Section 15. Alternate Telecommunications

15.2.4

Troubleshooting
Test Modbus functions on the CR800 with third party Modbus software. Further information is available at the following links: www.simplyModbus.ca/FAQ.htm (http://www.simplymodbus.ca/faq.htm) www.Modbus.org/tech.php (http://www.modbus.org/tech.php) www.lammertbies.nl/comm/info/modbus.html (http://www.lammertbies.nl/comm/info/modbus.html)

15.2.5

Modbus over IP
Modbus over IP functionality is an option with the CR800. Contact Campbell Scientific for details.

15.2.6

Modbus tidBytes
Question: Can Modbus be used over an RS-232 link, 7 data bits, even parity, one stop bit? Answer: Yes. Precede ModBusMaster() / ModBusSlave() with SerialOpen() set the numeric format of the COM port with any of the available formats, including the option of 7 data bits, even parity. SerialOpen() and ModBusMaster() can be used once and placed before Scan().

Concatenating two Modbus long 16-bit variables to one Modbus long 32 bit number.

372

Section 15. Alternate Telecommunications

CRBASIC EXAMPLE 74. Concatenating Modbus Long Variables


'Requires CR800 OS v.3, CR1000 OS v.12, or CR3000 OS v.5 or higher 'CR800 uses Big-endien word order. 'Declarations Public Combo As Long 'Variable to hold the combined 32-bit Public Register(2) As Long 'Array holds two 16-bit ModBus long 'variables 'Register(1) = Least Significant Word 'Register(2) = Most Significant Word Public Result 'Holds the result of the ModBus master 'query

'Aliases used for clarification Alias Register(1) = Register_LSW Alias Register(2) = Register_MSW

'Least significant word. 'Most significant word.

BeginProg 'If you use the numbers below (un-comment them first) 'Combo is read as 131073 decimal 'Register_LSW=&h0001 'Least significant word. 'Register_MSW=&h0002 ' Most significant word. Scan(1,Sec,0,0) 'In the case of the CR800 being the ModBus master then the 'ModbusMaster instruction would be used (instead of fixing 'the variables as shown between the BeginProg and SCAN instructions). ModbusMaster(Result,COMRS232,-115200,5,3,Register(),-1,2,3,100) 'MoveBytes(DestVariable,DestOffset,SourceVariable,SourceOffSet, 'NumberOfBytes) MoveBytes(Combo,2, Register_LSW,2,2) MoveBytes(Combo,0, Register_MSW,2,2) NextScan EndProg

373

Section 15. Alternate Telecommunications

374

Section 16. Support Software


Software products are available from Campbell Scientific to facilitate CR800 programming, maintenance, data retrieval, and data presentation. Starter software (TABLE. Starter Software (p. 465)) are those products designed for novice integrators. Datalogger support software products (TABLE. Datalogger Support Software (p. 417, p. 466)) integrate CR800 programming, telecommunications, and data retrieval into a single package. LoggerNet Clients (TABLE. LoggerNet Clients (p. 467)) are available for extended applications of LoggerNet. Software development kits (TABLE. Software Development Kits (p. 469)) are available to address applications not directly satisfied by standard software products. Limited support software for PDA and Linux applications are also available. Read More! A complete listing of Campbell Scientific software available for use with the CR800 / CR1000 / CR3000 is available in APPENDIX. Software (p. 465).

375

Section 16. Support Software

376

Section 17. Using the Keyboard Display


Read More! See SECTION. Custom Menus (p. 255). A keyboard is available for use with the CR800. See APPENDIX. Keyboard Displays (p. 478) for information on available keyboard displays. The CR850 has an integrated keyboard display. This section illustrates the use of the keyboard display using default menus. Some keys have special functions as outlined below. Note Although the keyboard display is not required to operate the CR800, it is a useful diagnostic and debugging tool.

TABLE 82. Special Keyboard Display Key Functions


Key [2] and [8] [Enter] [Esc] [Home] [End] [Pg Up] [Pg Dn] [BkSpc] [Shift] [Num Lock] [Del] [Ins] [Graph] Special Function To navigate up and down through the menu list one line at a time Selects the line or toggles the option of the line the cursor is on Back up one level in the menu Move cursor to top of the list Move cursor to bottom of the list Move cursor up one screen Move cursor down one screen Delete character to the left Change alpha character selected Change to numeric entry Delete Insert/change graph setup Graph

377

Section 17. Using the Keyboard Display

FIGURE 111. Using the Keyboard Display

378

Section 17. Using the Keyboard Display

17.1 Data Display

FIGURE 112. Displaying Data with the Keyboard Display

379

Section 17. Using the Keyboard Display

17.1.1

Real Time Tables and Graphs

FIGURE 113. Real Time Tables and Graphs

380

Section 17. Using the Keyboard Display

17.1.2

Real Time Custom


The optional keyboard display can be configured with a user defined real-time display. The CR800 will keep the setup as long as the same program is running, or until it is changed by the user. Read More! Custom menus can also be programmed. See SECTION. Custom Menus (p. 255) for more information.

FIGURE 114. Real Time Custom

381

Section 17. Using the Keyboard Display

17.1.3

Final Storage Tables

FIGURE 115. Final Storage Tables

382

Section 17. Using the Keyboard Display

17.2 Run/Stop Program

FIGURE 116. Run / Stop Program

383

Section 17. Using the Keyboard Display

17.3 File Display

FIGURE 117. File Display

384

Section 17. Using the Keyboard Display

17.3.1

File: Edit
The CRBASIC Editor is recommended for writing and editing datalogger programs. When make minor changes in the field with the optional keyboard display, stop the program, then restart it to activate the changes.

FIGURE 118. File: Edit

385

Section 17. Using the Keyboard Display

17.4 Ports and Status


Read More! See APPENDIX. Status Table and Settings (p. 433).

FIGURE 119. Ports and Status

17.5 Settings

FIGURE 120. Settings

386

Section 17. Using the Keyboard Display

17.5.1

Set Time / Date


Move the cursor to time element and press Enter to change it. Then move the cursor to Set and press Enter to apply the change.

17.5.2

PakBus Settings
In the Settings menu, move the cursor to the PakBus element and press Enter to change it. After modifying, press Enter to apply the change.

17.6 Configure Display

FIGURE 121. Configure Display

387

Section 17. Using the Keyboard Display

388

Section 18. Care and Maintenance


Temperature and humidity can affect the performance of the CR800. The internal lithium battery must be replaced periodically.

18.1 Temperature Range


The CR800 is designed to operate reliably from -25 to +50C (-40C to +85C, optional) in non-condensing environments.

18.2 Moisture Protection


When humidity tolerances are exceeded and condensation occurs, damage to CR800 electronics can result. Effective humidity control is the responsibility of the user. Internal CR800 module moisture is controlled at the factory by sealing the module with a packet of silica gel inside. The desiccant is replaced whenever the CR800 is repaired at Campbell Scientific. The module should not be opened by the user except to replace the lithium coin cell providing back up power to the clock and SRAM. Repeated disassembly of the CR800 will degrade the seal, leading to potential moisture problems. Adequate desiccant should be placed in the instrumentation enclosure to prevent corrosion on the CR800 wiring panel.

18.3 Enclosures
Illustrated in FIGURE. Enclosure (p. 390) is a typical use of an enclosure available from Campbell Scientific for housing a CR800 and peripherals. This style of enclosures is classified as NEMA 4X (watertight, dust-tight, corrosionresistant, indoor and outdoor use). Refer to APPENDIX. Enclosures (p. 473) for information concerning available enclosures.

389

Section 18. Care and Maintenance

FIGURE 122. Enclosure

18.4 Replacing the Internal Battery


Caution Fire, explosion, and severe burn hazard! Misuse or improper installation of the lithium battery can cause severe injury. Do not recharge, disassemble, heat above 100C (212F), solder directly to the cell, incinerate, or expose contents to water. Dispose of spent lithium batteries properly. The CR800 contains a lithium battery that operates the clock and SRAM when the CR800 is not powered. The CR800 does not draw power from the lithium battery while it is powered by a 12 Vdc supply. In a CR800 stored at room temperature, the lithium battery should last approximately 3 years (less at temperature extremes). In installations where the CR800 remains powered the lithium cell should last much longer. While powered from an external source, the CR800 measures the voltage of the lithium battery daily. This voltage is displayed in the status table (APPENDIX. Status Table and Settings (p. 433)). A new battery supplies approximately 3.6 volts. The CR800 Status Table has a "Lithium Battery" field. This field shows lithium battery voltage. Replace the battery when voltage is approximately 2.7 V. If the lithium cell is removed or allowed to discharge below the safe level, the CR800 will still operate correctly while powered. Without the lithium battery, the clock will reset and data are lost when power is removed.

390

Section 18. Care and Maintenance The CR800 is partially disassembled to replace the lithium cell. See FIGURE. Loosening Thumbscrews (p. 391) through FIGURE. Remove and Replace Battery (p. 393). When the lithium battery is removed, the user program and most settings are maintained. Items not retained include Run now and run on power-up settings. Routing and communications logs (relearned without user intervention). Time. Clock will need resetting when the battery is replaced. Final storage data tables.

A replacement lithium battery (pn 13519) can be purchased from Campbell Scientific or another supplier. TABLE. Internal Lithium Battery Specifications (p. 391) lists battery specifications. TABLE 83. Internal Lithium Battery Specifications
Manufacturer Model Capacity Self-discharge rate Operating temperature range TL-5902S (3.6 V) 1.2 Ah 1%/year @ 20C -55C to 85C Tadiran

When reassembling the module to the wiring panel, assure that the module is fully seated or connected to the wiring panel by firmly pressing them together by hand.

FIGURE 123. Loosening Thumbscrews

391

Section 18. Care and Maintenance

Fully loosen the two knurled thumbscrews. Only loosen the screws. They will remain attached to the module.

FIGURE 124. Pulling Edge Away from Panel Pull one edge of the canister away from the wiring panel to loosen it from three connector seatings.

FIGURE 125. Removing Nuts to Disassemble Canister

392

Section 18. Care and Maintenance Remove six nuts, then open the clam shell.

FIGURE 126. Remove and Replace Battery

Remove the lithium battery by gently prying it out with a small flat point screwdriver. Reverse the disassembly procedure to reassemble the CR800. Take particular care to ensure the canister is reseated tightly into the three connectors.

18.5 Repair
Occasionally, a CR800 requires repair. Consult with a Campbell Scientific applications engineer before sending any product for repair. Be prepared to perform some troubleshooting procedures while on the phone with the applications engineer. Many problems can be resolved with a telephone conversation. If a repair is warranted, the following procedures should be followed when sending the product. Products may not be returned without prior authorization. The following contact information is for US and International customers residing in countries served by Campbell Scientific, Inc. directly. Affiliate companies handle repairs for customers within their territories. Please visit www.campbellsci.com to determine which Campbell Scientific company serves your country. To obtain a Returned Materials Authorization (RMA), contact CAMPBELL SCIENTIFIC, INC., phone (435) 753-2342. After an applications engineer determines the nature of the problem, an RMA number will be issued. Please write this number clearly on the outside of the shipping container. Campbell Scientific's shipping address is: CAMPBELL SCIENTIFIC, INC. RMA#_____ 815 West 1800 North Logan, Utah 84321-1784

393

Section 18. Care and Maintenance For all returns, the customer must fill out a "Declaration of Hazardous Material and Decontamination" form and comply with the requirements specified in it. The form is available from our web site at www.campbellsci.com/repair. A completed form must be either emailed to repair@campbellsci.com or faxed to 435-750-9579. Campbell Scientific will not process any returns until we receive this form. If the form is not received within three days of product receipt or is incomplete, the product will be returned to the customer at the customer's expense. Campbell Scientific reserves the right to refuse service on products that were exposed to contaminants that may cause health or safety concerns for our employees.

394

Section 19. Troubleshooting


If a Campbell Scientific system is not operating properly, please contact a Campbell Scientific applications engineer for assistance. Note If a Campbell Scientific product needs to be returned for repair or recalibration, a Return Materials Authorization (p. 2) number is first required. Please contact a Campbell Scientific applications engineer for the required information and procedures. Some troubleshooting tools, concepts, and hints are provided here. When using sensors, peripheral devices, or telecommunications hardware, look to the manuals for those products for additional help.

19.1 Programming
A properly deployed CR800 measures sensors accurately and stores all data as instructed by its program. Experienced users analyze data soon after deployment to ensure the CR800 is measuring and storing data as intended. Most measurement and data storage problems are a result of one or more instances of improper program code or "bugs."

19.1.1

Status Table as Debug Resource


Consult the CR800 Status Table when developing a program or when a problem with a program is suspected. Critical Status Table registries to review include CompileResults, Skipped Scan, SkippedSlowScan, SkippedRecord, ProgErrors, MemoryFree, VarOutOfBounds, and Watchdog Errors. Read More! See APPENDIX. Status Table and Settings (p. 433) and TABLE. Common Uses of the Status Table (p. 433) for a complete list of Status Table registers and hints on using the Status Table.

19.1.1.1 CompileResults
Reports messages generated by the CR800 at program upload and compile-time. A message will report that the program compiled OK, provide warnings about possible problems, or indicate there are run-time errors. Error messages may not be obvious because the display column is too short. Messages report variables that caused out-of-bounds conditions, watchdog information, and memory errors. Messages may be tagged onto this line as the program runs. Warning messages are issued by the CRBASIC compiler to advise that some expected feature may not work. Warnings are different from error messages in that the program will still operate when a warning condition is identified. A rare error is indicated by "mem3 fail" type messages. These messages can be caused by random internal memory corruption. When seen on a regular basis

395

Section 19. Troubleshooting with a given program, an operating system error is indicated. "Mem3 fail" messages are not caused by user error, and only rarely by a hardware fault. Report any occurrence of this error to a Campbell Scientific applications engineer, especially if the problem is reproducible. Any program generating these errors is unlikely to be running correctly. Examples of some of the more common warning messages are listed in TABLE. Warning Message Examples (p. 396). TABLE 84. Warning Message Examples
Example of Warning Message CPU:DEFAULT.CR1 -- Compiled in PipelineMode. Error(s) in CPU:NewProg.CR1: line 13: Undeclared variable Battvolt. Warning: Cannot open include file CPU: Filename.CR8 The filename in the Include instruction does not match any file found on the specified drive. Since it was not found, the portion of code referenced by Include will not be executed. voice.txt, a file required for use with a COM310 voice phone modem, was not found on the CPU: drive. The Phrases parameter of the VoicePhrases keyword was assigned a variable name instead of the required string of commaseparated words from Voice.TXT. Meaning A new program sent to the datalogger failed to compile and the datalogger reverted to running DEFAULT.CR8 instead.

Warning: Cannot open voice.txt

Warning: COM310 word list cannot be a variable.

Warning: EndIf never reached at runtime.

Program will never execute the EndIf keyword. In this case the cause is a Scan with a Count parameter of 0 which creates an infinite loop within the program logic. Sending a new program has caused the final storage memory to be re-allocated. Previous data is no longer accessible. Indicates a problem with the analog measurement hardware during the self calibration. An invalid external sensor signal applying a voltage beyond the internal +/- 8 V supplies on a voltage input can induce this error. Removing the offending signal and powering up the logger will initiate a new self-calibration. If the error does not occur on power-up, the problem is corrected. If no invalid external signals are present and / or self-calibration fails again on power-up, the CR800 should be repaired by a qualified technician. SlowSequence scan rate is <= main scan rate. This will cause skipped scans on the SlowSequence.

Warning: Internal Data Storage Memory was re-initialized. Warning: Machine self-calibration failed.

Warning: Slow Seq 1, Scan 1, will skip scans if running with Scan 1

396

Section 19. Troubleshooting

TABLE 84. Warning Message Examples


Example of Warning Message Warning: Table tablename is declared but never called. Warning: Units: a_units_name_that_is_more_than_38_ch ara... too long will be truncated to 38 chars. Warning: Voice word TEH is not in Voice.TXT file Meaning No data will be stored in tablename because there is no CallTable instruction in the program that references that table. The label assigned with the Units argument is too long and will be truncated to the maximum allowed length. The misspelled word TEH in the VoiceSpeak keyword is not found in Voice.TXT and will not be spoken by the voice modem.

19.1.1.2 SkippedScan
Skipped scans are caused by long programs with short scan intervals, multiple Scan () / NextScan () instructions outside a SubScan () or SlowSequence (), or when other operations, that occupy the processor at a scan's start time. Occasional skipped scans may be acceptable but should be avoided. Skipped scans may compromise frequency measurements made with pulse channels. The error occurs because counts from a scan and subsequent skipped scans are regarded by the CR800 as having occurred during a single scan. The measured frequency can be much higher than actual. Be careful that scans that store data are not skipped. If any scan skips repeatedly, optimization of the datalogger program or reduction of online processing may be necessary. Skipped scans in Pipeline Mode indicate an increase in the maximum buffer depth is needed. Try increasing the number of scan buffers (third parameter of the Scan () instruction) to a value greater than that shown in the MaxBuffDepth register in the Status Table.

19.1.1.3 SkippedSlowScan
The CR800 automatically runs a slow sequence to update the calibration table. When the calibration slow sequence skips, the CR800 will try to repeat that step of the calibration process next time around. This simply extends calibration time.

19.1.1.4 SkippedRecord
SkippedRecord is normally incremented when a write-to-data-table event is skipped, which usually occurs because a scan is skipped. SkippedRecord is not incremented by all events that leave gaps in data, including cycling power to the CR800, or when the clock is changed.

19.1.1.5 ProgErrors
If not zero, investigate.

397

Section 19. Troubleshooting

19.1.1.6 MemoryFree
A number less than 4 kbytes is too small and may lead to memory buffer related errors.

19.1.1.7 VarOutOfBounds
When programming with variable arrays, care must be taken to match the array size to the demands of the program. For instance, if an operation attempts to write to 16 elements in array ExArray(), but ExArray() was declared with only 15 elements (e.g., Public ExArray(15)), the VarOutOfBound runtime error counter is incremented in the Status table each time the absence of a 16th element is encountered. The CR800 attempts to catch VarOutOfBound errors at compile time (not to be confused with the CRBASIC Editor pre-compiler, which does not). When a VarOutOfBound error is detected at compile time, the CR800 attempts to document which variable is out of bounds at the end of the CompileResults message in the Status table. For example, the CR800 may detect that ExArray() is not large enough and write "Warning:Variable ExArray out of bounds" to the Status table. The CR800 does not catch all out-of-bounds errors.

19.1.1.8 WatchdogErrors
Watchdog errors indicate the CR800 has crashed, which can be caused by power or transient voltage problems, or an operating system or hardware problem. Watchdog errors may cause telecommunications disruptions, which can make diagnosis and remediation difficult. The optional keyboard display will often work as a user interface when telecommunications fail. Information on CR800 crashes may be found in three places. WatchdogErrors register in the Status Table (p. 433) Watchdog.txt file on the CPU: drive (p. 334) Crash information may be posted at the end of the CompileResults register in the Status Table (p. 433) 19.1.1.8.1 Status Table WatchdogErrors Non-zero indicates the CR800 has crashed, which can be caused by power or transient voltage problems, or an operating system or hardware problem. If power or transient problems are ruled out, the CR800 probably needs an operating system update or repair (p. 2) by Campbell Scientific.

19.1.1.8.2

Watchdoginfo.txt File A CPU: Watchdog.txt file is generated when the CR800 experiences a software reset (as opposed to a hardware reset, which will increment the status table

398

Section 19. Troubleshooting WatchdogError counter). Postings of Watchdog.txt files are rare. Please consult with a Campbell Scientific applications engineer at any occurrence.

19.1.2

Program Does Not Compile


Although the PC CRBASIC compiler says a program compiles OK, it may not run or even compile in the CR800. Reasons may include: The CR800 has a different (usually older) operating system that is not compatible with the PC compiler. Check the two versions if in doubt (the PC version is shown on the first line of the compile results). The program has large memory requirements for data tables or variables and the CR800 does not have adequate memory. This normally is flagged at compile time, in the compile results. If this type of error occurs, check: For copies of old programs encumbering the CPU drive. The CR800 will keep copies of all program files ever loaded unless they are deleted, the drive is formatted, or a new OS is loaded with DevConfig. That the USR: drive, if created, is not too large. The USR: drive may be using memory needed for the program. That a program written for a 4 MB CR800 is not now being loaded into a 2MB CR800.

19.1.3

Program Compiles / Does Not Run Correctly


If the program compiles but does not run correctly, timing discrepancies are often the cause. Neither CRBASIC Editor nor the CR800 compiler attempt to check whether the CR800 is fast enough to do all that the program specifies in the time allocated. If a program is tight on time, look further at the execution times. Check the measurement and processing times in the Status Table (MeasureTime, ProcessTime, MaxProcTime) for all scans, then try experimenting with the InstructionTimes() instruction in the program. Analyzing InstructionTimes() results can be difficult due to the multitasking nature of the logger, but it can be a powerful way to fine tune a program.

19.1.4

Troubleshooting -- NAN and INF


NAN (not-a-number) and INF (infinite) are data words indicating an exceptional occurrence in datalogger function or processing. NAN is a constant that can be used in expressions such as in CRBASIC EXAMPLE. Using NAN in Expressions (p. 400) NAN can also be used in conjunction with the disable variable (DisableVar) in output processing (data storage) instructions, as shown in CRBASIC EXAMPLE. Using NAN to Filter Data (p. 402).

19.1.4.1 Measurements and NAN


A NAN indicates an invalid measurement.

399

Section 19. Troubleshooting

19.1.4.1.1

Voltage Measurements

Voltage Measurements
The CR800 has the following user selectable voltage ranges; 5000 mV, 2500 mV, 250 mV, 25 mV, 7.5 mV, 2.5 mV. Input signals that exceed these ranges result in an over range indicated by a NAN for the measured result. With auto range to automatically select the best input range, a NAN indicates that either one or both of the two measurements in the auto range sequence over ranged. A voltage input not connected to a sensor is floating and the resulting measured voltage often remains near the voltage of the previous measurement. Floating measurements tend to wander in time, and can mimic a valid measurement. The C (open input detect/common-mode null) range code option can be used to force a NAN result for open (floating) inputs.

19.1.4.1.2

SDI-12 Measurements

SDI-12 Measurements
NAN is loaded into the first SDI12Recorder () variable under these conditions: When busy with terminal commands. When the command is an invalid command. When the sensor aborts with CR LF and there is no data.

CRBASIC EXAMPLE 75. Using NAN in Expressions


If WindDir = NAN Then WDFlag = False Else WDFlag = True EndIf

19.1.4.2 Floating Point Math, NAN, and INF


TABLE. Math Expressions and CRBASIC Results (p. 401) lists math expressions, their CRBASIC form, and IEEE floating point math result loaded into variables declared as FLOAT or STRING.

19.1.4.3 Data Types, NAN, and INF


NAN and INF are presented differently depending on the declared variable data type. Further, they are recorded differently depending on the final storage data type chosen compounded with the declared variable data type used as the source (TABLE. Variable and FS Data Types with NAN and INF (p. 401)). For example, INF in a variable declared as LONG is represented by the integer 2147483648. When that variable is used as the source, the final storage word when sampled as UINT2 is stored as 0.

400

Section 19. Troubleshooting

TABLE 85. Math Expressions and CRBASIC Results


Expression 0/0 - (-1)

CRBASIC Expression 0/0 (1 / 0) - (1 / 0) -1 ^ (1 / 0) 0 * (-1 * (1 / 0)) (1 / 0) / (1 / 0) 1 ^ (1 / 0) 0 * (1 / 0) 1/0 1 / -0 -1 / 0 -1 / -0 (1 / 0) ^ 0 0 ^ (1 / 0) 0^0 NAN NAN NAN NAN NAN NAN NAN INF INF -INF -INF INF 0 1

Result

0 * - / 1

0* x/0 x / -0 -x / 0 -x / -0 0 0
0

TABLE 86. Variable and FS Data Types with NAN and INF
Final Storage Data Type & Associated Stored Values Variable Type As FLOAT Test Expression 1/0 0/0 As LONG 1/0 0/0 As Boolean 1/0 0/0 As STRING 1/0 0/0 Public / Dim Variables INF NAN 2,147,483,647 -2,147,483,648 TRUE TRUE +INF NAN FP2 INF NAN 7999 -7999 -1 -1 INF NAN IEEE4 INF NAN 2.147484E+09 -2.147484E+09 -1 -1 INF NAN UINT2 65535 0 65535 0 65535 65535 65535 0 STRING +INF NAN 2147483647 -2147483648 -1 -1 +INF NAN BOOL TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE LONG 2,147,483,647 -2,147,483,648 2,147,483,647 -2,147,483,648 -1 -1 2,147,483,647 -2,147,483,648

19.1.4.4 Output Processing and NAN


When a measurement or process results in NAN, any output process with DisableVar = FALSE that includes the NAN measurement, e.g.,
Average(1,TC_TempC,FP2,False)

will result in NAN being stored in final data storage for that interval. However, if DisableVar is set to TRUE each time a measurement results in NAN, only non-NAN measurements will be included in the output process.

401

Section 19. Troubleshooting CRBASIC EXAMPLE. Using NAN to Filter Data (p. 402) demonstrates the use of conditional statements to set DisableVar to TRUE as needed to filter NAN from output processes. Note -- If all measurements result in NAN, NAN will be stored in final data storage regardless of the use of DisableVar.

CRBASIC EXAMPLE 76. Filtering NAN from Output Processes


'Declare Variables and Units Public TC_RefC Public TC_TempC Public DisVar As Boolean 'Define Data Tables DataTable(TempC_Data,True,-1) DataInterval(0,30,Sec,10) Average(1,TC_TempC,FP2,DisVar) EndTable 'Main Program BeginProg Scan(1,Sec,1,0) 'Measure Thermocouple Reference Temperature PanelTemp (TC_RefC,250) 'Measure Thermocouple Temperature TCDiff (TC_TempC,1,mV20,1,TypeT,TC_RefC,True,0,250,1.0,0) 'Process and Control If TC_TempC = NAN Then DisVar = True Else DisVar = False EndIf 'Call Data Tables and Store Data CallTable(TempC_Data) NextScan EndProg

19.2 Communications
19.2.1 RS-232
Baud rate mis-match between the CR800 and datalogger support software is often the root of communication problems through the RS-232 port. By default, the CR800 attempts to adjust its baud rate to that of the software. However, settings changed in the CR800 to accommodate a specific RS-232 device, such as a smart sensor, display or modem, may confine the RS-232 port to a single baud rate. If the baud rate can be guessed at and entered into support software parameters, communications may be established. Once communications is established, CR800 baud rate settings can be changed. Clues as to what the baud rate may be set at can be found by analyzing current and previous CR800

402

Section 19. Troubleshooting programs for the SerialOpen() instruction; SerialOpen() specifies a baud rate. Documentation provided by the manufacturer of the previous RS-232 device may also hint at the baud rate.

19.2.2

Communicating with Multiple PC Programs


The CR800 can communicate with multiple PCs simultaneously. For example, the CR800 may be a node of an internet PakBus network communicating with a distant instance of LoggerNet. An onsite technician can communicate with the CR800 using PC200W via a serial connection, so long as the PakBus addresses of the host PCs are different. All Campbell Scientific datalogger support software include utilities for altering PC PakBus addressing.

19.3 Memory Errors


CommsMemFree is an array of three registers in the Status Table (p. 434).

19.3.1

CommsMemFree(1)
CommsMemFree(1): Number of buffers used in all communication, except with the optional keyboard display. Two digits per each buffer size category. Least significant digit specifies the number of the smaller buffers. Most significant digits specify the number of larger buffers. Least significant digits specify the number of smaller buffers. When TLS (p. 430) is not active, there are 4 buffer categories: "tiny", "little", "medium", and "large". When TLS is active, there is a 5th category, "huge", and more buffers are allocated for each category. When a buffer of a certain size is required, the smallest suitably sized pool, which still has at least one buffer free, will allocate a buffer and decrement the number in reserve. When the communication is complete, the buffer is returned to the pool and the number for that size of buffer will increment. When TLS is active, the number of buffers allocated for "tiny" can only be displayed as the number of tiny buffers modulo divided by 100.

403

Section 19. Troubleshooting

TABLE 87. CommsMemFree(1) Defaults and Use Example, TLS Not Acti
Example

Condition:
Reset. TLS Not Active. Buffer Catagory tiny little medium large huge

Condition:
In Use TLS Not Active.

Buffer Count:
CommsMemFree(1) = 15251505. 05 15 25 15

Buffer Count:
CommsMemFree(1) = 13241504. 04 15 24 13

Numbers of Buffers in Use (Reset Count In Use Count) 1 0 1 2

TABLE 88. CommsMemFree(1) Defaults and Use Example, TLS Active


Example

Condition: Condition:
Reset. TLS Active. Buffer Category tiny little medium large huge* TLS enabled. No active TLS connections. Connected to LoggerNet on TCP/IP.

Buffer Count:
CommsMemFree(1) = 230999960. 160 99 99 30 2

Buffer Count:
CommsMemFree(1) = 228968437. 137 84 96 28 2

Numbers of Buffers in Use (Reset Count In Use Count) 23 15 3 2 0

*If email clients using TLS are active, huge will be decremented along with some of the others.

19.3.2

CommsMemFree(2)
CommsMemFree(2) displays the number of "chunks" of memory used by communications that are in "keep" memory (p. 422). The size of this memory pool is settable by the "PakBusNodes" setting, which defaults at 50. Doubling "PakBusNodes" to 100 doubles CommsMemFree(2) from around 300 to around 600, assuming currently a large PakBus network had not been discovered. This memory includes PakBus Routing and neighbor lists, communication timeout structures, and TCP/IP connection structures. The larger the discovered PakBus network and the larger the number of simultaneous TCP connections, the lower this number will drop. A PakBus node setting of 50 is normally enough memory. Small PakBus networks can probably reduce the size of PakBusNodes to free memory, if needed. Reducing the PakBusNodes setting by 1 frees 224 bytes. If CommsMemFree(2) drops and stays down for no apparent reason (a

404

Section 19. Troubleshooting very rare occurrence), contact a Campbell Scientific applications engineer as the operating system may need adjustment.

19.3.3

CommsMemFree(3)
CommsMemFree(3) Specifies three 2 digit fields, from right (Least significant) to left (most significant): "little" IP packets available "big" IP packets available received IP packets in a receive queue that have not yet been processed At start up, with no TCP/IP communication occurring, this field will read 1530, i.e, 30 little and 15 big IP packets are available and nothing is in the receive queue. The Ethernet and / or the PPP interface will feed the received queue. 21428 means 2 packets are in the received queue waiting to be processed, 1 of the 15 "big" IP packets are in use and 2 of the "little" packets are in use. These three pieces of information are also brought out in the IP Trace information every 30 seconds as "lilfreeq", "bigfreeq", and "recvd queue". If the "big" and / or "little" free packets drops down near zero and stays there, or if the number in the received queue climbs up and never comes down (both conditions are rare), contact a Campbell Scientific applications engineer as the operating system may need adjustment.

19.4 Power Supplies


19.4.1 Overview
Power supply systems may include batteries, charging regulators, and a primary power source such as solar panels or AC/AC or AC/DC transformers attached to mains power. All components may need to be checked if the power supply is not functioning properly. SECTION. Diagnosis and Fix Procedures (p. 406) includes the following flowcharts for diagnosing or adjusting power equipment supplied by Campbell Scientific: Battery Voltage Test Charging Circuit Test (when using an unregulated solar panel) Charging Circuit Test (when using a transformer) Adjusting Charging Circuit If power supply components are working properly and the system has peripheral(s) with high current drain, such as a satellite transmitter, verify that the power supply is designed to provide adequate power. Information on power supplies available from Campbell Scientific can be obtained at

405

Section 19. Troubleshooting www.campbellsci.com. Basic information is available in APPENDIX. Power Supplies (p. 471).

19.4.2

Troubleshooting Power at a Glance


Symptoms: Possible symptoms include the CR800 program not executing; Low12VCount of the Status table displaying a large number. Affected Equipment: Batteries, charger/regulators, solar panels, transformers Likely Cause: Batteries may need to be replaced or recharged; charger/regulators may need to be fixed or recalibrated; solar panels or transformers may need to be fixed or replaced. Required Equipment: Voltmeter; 5 kohm resistor and 50 ohm 1 W resistor for the charging circuit tests and to adjust the charging circuit voltage

19.4.3

Diagnosis and Fix Procedures


The procedure outlined in this flow chart tests sealed rechargeable or alkaline batteries in the PS100 charging regulator, or a sealed rechargeable battery attached to a CH100 charging regulator. If a need for repair is indicated after following the procedure, see Warranty and Assistance (p. 2) for information on sending items to Campbell Scientific.

19.4.3.1 Battery Test

406

Section 19. Troubleshooting

Battery Test If using a rechargeable power supply, disconnect the charging source (i.e., solar panel or AC transformer) from the battery pack. Wait 20 minutes before proceeding with this test. Test Voltage at Charging Regulator Set a voltmeter to read DC voltage as high as 15 Vdc. Measure the voltage between a 12V and G terminal on the charging regulator. Is the voltage > 11.0 Vdc? Yes Test the Battery Under Load Program the CR800 to measure battery voltage using a 0.01 second scan rate. Use the voltmeter to measure the voltage between a 12V and G terminal on the charging regulator. Is the voltage > 10.8 Vdc? Yes Yes Recharge battery.* Is the battery voltage > 12 Vdc? No Yes The battery is good. Battery voltage is adequate for CR800 operation. However, if the CR800 is to function for a long period, Campbell Scientific recommends replacing, or if using a sealed rechargeable battery, recharging the battery so the voltage is > 12 Vdc. No Is the battery a sealed rechargeable battery? Yes Is the voltage 10.5 Vdc? No Replace battery(s).*

No

No

*When using a sealed rechargeable battery that is recharged with primary power provided by solar panel or AC/AC - AC/DC transformer, testing the charging regulator is recommended. See SECTION. Charging Regulator with Solar Panel Test (p. 407), or SECTION. Charging Regulator with Transformer Test (p. 408).

19.4.3.2 Charging Regulator with Solar Panel Test


The procedure outlined in this flow chart tests PS100 and CH100 charging regulators that use solar panels as power source. If a need for repair is indicated after following the procedure, see Warranty and Assistance (p. 2) for information on sending items to Campbell Scientific.

407

Section 19. Troubleshooting

Charging Regulator with Solar Panel Test Disconnect any wires attached to the 12V and G (ground) terminals on the PS100 or CH100 charging regulator. Unplug any batteries. Connect the solar panel to the two CHG terminals. Polarity of inputs does not matter. Only the solar panel should be connected. Set the charging regulator power switch to OFF. Note -- This test assumes the solar panel has an unregulated output. Solar Panel Test Set a voltmeter to measure DC voltage. Measure solar panel output across the two solar panel leads by placing a voltmeter lead on one CHG terminal, and the other lead on the other CHG terminal. Is the output 17 to 22 volts? Yes No Remove the solar panel leads from the charging circuit. Measure solar panel output across the two leads. Is the output > 0 Vdc? Yes Is the voltage 17 Vdc? No Yes Reconnect the power source (transformer / solar panel) to the CHG terminals on the charging regulator. Yes Measure the voltage between the two No CHG terminals. Is the voltage 17 V? 5 k Load Test 1) Place a 5 k resistor between a 12 V terminal and a G (ground) terminal on the charging regulator. 2) Switch the power switch to ON. 3) Measure the DC voltage across the resistor. Is the measured voltage 13.3 to 14.1 V? Yes 50 Load Test 1) Switch the power switch to OFF 2) Disconnect the power source (transformer / solar panel) 3) Remove the 5 k resistor 4) Place a 50 , 1 Watt resistor between a 12 V terminal and a G (ground) terminal on the charging regulator. 5) Reconnect the power source / Switch the power switch to ON 7) Measure the voltage across between the ends of the resistor. Is the voltage 13.0 to 14.0 Vdc (13.3 if circuit just adjusted)? 8) Switch the power switch to OFF NOTE: The resistor will get HOT in just a few seconds. After measuring the voltage, switch the power switch to OFF and allow the resistor to cool before removing it. Yes Test Completed The charger is functioning properly. Remove the 50 resistor. No With the charging regulator still under load, measure the voltage between the two CHG terminals. Is the voltage > 15.5 Vdc? Yes Obtain Repair Authorization The charging regulator is damaged and should be repaired or replaced. Yes See SECTION. Adjusting Charging Voltage (p. 410) to calibrate the charging regulator, or return the charging regulator to Campbell Scientific for calibration. No Measure the voltage between the two pins in a battery connection receptacle. Is the voltage 10.0 to 15.5 V? No There may not be enough sunlight to perform the test, or the solar panel is damaged. The solar panel is damaged and should be repaired or replaced. No

No There may not be enough sunlight to perform the test.

408

Section 19. Troubleshooting

19.4.3.3 Charging Regulator with Transformer Test


The procedure outlined in this flow chart tests PS100 and CH100 charging regulators that use AC/AC or AC/DC transformers as power source. If a need for repair is indicated after following the procedure, see Warranty and Assistance (p. 2) for information on sending items to Campbell Scientific.

Charging Regulator with Transformer Test Disconnect any wires attached to the 12 V and G (ground) terminals on the PS100 or CH100 charging regulator. Unplug any batteries. Connect the power input AC transformer to the two CHG terminals. Polarity of the inputs does not matter. Only the transformer should be connected. Set the charging regulator power switch to OFF. Connect the transformer to mains power. Transformer Test Determine whether the transformer output is AC or DC voltage (labeling on the transformer usually identifies the output voltage type). Set a voltmeter to No read that type of voltage. Measure transformer output across the two transformer leads by placing a voltmeter lead on one CHG terminal, and the other lead on the other CHG terminal. Is the output 17 to 22 volts? Yes Using care not to short the transformer leads, remove the leads from the charging regulator. Measure transformer output across the two leads. Is the output 17 to 22 volts? Yes Reconnect the power source (transformer / solar panel) to the CHG terminals on the charging regulator. Measure the voltage between the two CHG terminal . Is the voltage 17 V? Yes The AC transformer is damaged and should be replaced. No

No

5 k Load Test 1) Place a 5 k resistor between a 12 V terminal and a G (ground) terminal on the charging regulator. 2) Switch the power switch to ON. 3) Measure the DC voltage across the resistor. Is the measured voltage 13.3 to 14.1 V? Yes 50 Load Test 1) Switch the power switch to OFF 2) Disconnect the power source (transformer / solar panel) 3) Remove the 5 k resistor 4) Place a 50 , 1 Watt resistor between a 12 V terminal and a G (ground) terminal on the charging regulator. 5) Reconnect the power source / Switch the power switch to ON 7) Measure the voltage across between the ends of the resistor. Is the voltage 13.0 to 14.0 Vdc (13.3 if circuit just adjusted)? 8) Switch the power switch to OFF NOTE: The resistor will get HOT in just a few seconds. After measuring the voltage, switch the power switch to OFF and allow the resistor to cool before removing it. Yes Test Completed The charger is functioning properly. Remove the 50 resistor. No No

Measure the voltage between the two pins in a battery connection receptacle. Is the voltage 10.0 to 15.5 V? No

Yes See SECTION. Adjusting Charging Voltage (p. 410) to calibrate the charging regulator, or return the charging regulator to Campbell Scientific for calibration.

Obtain Repair Authorization The charging regulator is damaged and should be repaired or replaced.

409

Section 19. Troubleshooting

19.4.3.4 Adjusting Charging Voltage


Note -- Campbell Scientific recommends that a qualified electronic technician perform the following procedure. The procedure outlined in this flow chart tests and adjusts PS100 and CH100 charging regulators. If a need for repair or calibration is indicated after following the procedure, see Warranty and Assistance (p. 2) for information on sending items to Campbell Scientific.
Adjusting Charging Circuit 1) Place a 5 k resistor between a 12 V terminal and a G (ground) ground terminal on the charging regulator. Use a voltmeter to measure the voltage across the 5 k resistor. 2) Connect a power source that supplies a voltage >17 V to the input CHG terminals of the charging regulator. 3) Adjust pot R3 (see FIGURE. Potentiometer R3 on PS100 and CH100 Charging Regulators (p. 411)) so that voltage across the 5 k resistor is 13.3 V. Can the output voltage be set to 13.3 V? Yes 50 Load Test 1) Switch the power switch to OFF 2) Disconnect the power source (transformer / solar panel) 3) Remove the 5 k resistor 4) Place a 50 , 1 Watt resistor between a 12 V terminal and a G (ground) terminal on the charging regulator. 5) Reconnect the power source / Switch the power switch to ON 7) Measure the voltage across between the ends of the resistor. Is the voltage 13.0 to 14.0 Vdc (13.3 if circuit just adjusted)? 8) Switch the power switch to OFF NOTE: The resistor will get HOT in just a few seconds. After measuring the voltage, switch the power switch to OFF and allow the resistor to cool before removing it. Yes Test Completed The charger is functioning properly. Remove the 50 resistor. No Obtain Repair Authorization The charging regulator is damaged and should be repaired or replaced. No

410

Section 19. Troubleshooting

FIGURE 127. Potentiometer R3 on PS100 and CH100 Charging Regulator

19.5 Terminal Emulator


CR800 Terminal Mode is designed to aid Campbell Scientific engineers in operating system development. It has some features useful to users for troubleshooting, but it should not be relied upon to have the same features or formats from version to version of the OS. TABLE. Terminal Emulator Menu (p. 412) lists terminal mode options. With exception of perhaps the C command, terminal emulator mode options are not necessary to routine CR800 operations. To enter terminal mode, connect a PC to the 9-pin RS-232 port on the CR800 via serial cable or USB-to-serial cable. Open a terminal emulator program. Terminal emulator programs are available in: 1. Datalogger support software (p. 417, p. 466) Terminal Emulator feature 2. DevConfig (CSI Device Configuration Utility Software) Terminal tab 3. HyperTerminal, a communications tool available with many installations of Windows XP or lower. Beginning with Windows Vista, HyperTerminal (or another terminal emulator utility) must be acquired and installed separately

411

Section 19. Troubleshooting As shown in FIGURE. DevConfig Terminal Emulator (p. 414), after entering a terminal emulator, press "Enter" a few times until the prompt "CR800>" is returned. Terminal mode commands consist of a single character and <Enter>. Sending an "H" and <Enter> will return the terminal emulator menu (p. 412). ESC or a 40 s timeout will terminate on-going commands. Concurrent terminal sessions are not allowed.

TABLE 89. Terminal Emulator Menu


Option 0 1 2 3 4 5 6 7 8 Description Scan processing time; real time in seconds Serial FLASH data dump Read Clock Chip Status Card Status and Compile Errors Scan Information Raw A/D Values VARS Suspend / Start Data Output Use Lists technical data concerning program scans. CSI Engineering Tool Lists binary data concerning the CR800 clock chip. Lists the CR800 Status Table. Lists technical data concerning an installed CF card. Technical data regarding the CR800 scan. Technical data regarding analog to digital conversions. Lists Public Table Variables. Outputs all table data. This is not recommended as a means to collect data, especially over telecommunications. Data are dumped as non-error checked ASCII. Lists binary form of Public Table. Lists copyright notice and version of operating system. Technical data regarding the task sequencer. Edit constants defined with ConstTableEndConstTable. Only active when ConstTableEndConstTable in the active program. CSI Engineering Tool Lists compile errors for the current program download attempt. CSI Engineering Tool CSI Engineering Tool Lists main menu. Lists gains and offsets resulting from internal calibration of analog measurement circuitry. Sends text of current program including comments.

9 A B C

Read Inloc Binary Firmware Copyright Task Sequencer Op codes Modify Constant Table

D E F G H I J K L M N O

MTdbg() Task Monitor Compile Errors VARS without Names CPU Serial Flash Dump Terminal Emulator Menu Calibration Data Download File Dump UNUSED Peripheral Bus Read Memory check File System Information Data Table Sizes

CSI Engineering Tool Lists memory test results Lists files in CR800 memory. Lists technical data concerning data table sizes.

412

Section 19. Troubleshooting

TABLE 89. Terminal Emulator Menu


Option P Description Serial Talk Through Use Issue commands from keyboard that are passed through the logger serial port to the connected device. Similar in concept to SDI12 Talk Through. Typing REBOOT rapidly will recompile the CR800 program immediately after the last letter, "T", is entered. Table memory is retained. Note: when typing REBOOT, characters are not echoed (printed on terminal screen). Issue commands from keyboard that are passed through the CR800 SDI-12 port to the connected device. Similar in concept to Serial Talk Through.

REBOOT

Program Recompile

SDI12

SDI12 Talk Through

T U

UNUSED Data Recovery Provides the means by which data lost when a new program is loaded may be recovered. Problem: User downloads a new program, then realizes that valuable data written prior to the download has not been collected. Solution: By running the following procedure immediately, some or all of the lost data may be recovered.

1. Download the old program back into memory 2. Go into terminal mode and select option U 3. When asked OK? Reenter? Skip?, select Y (=OK)
This procedure will put the "filled" flag in the CR800 for that data table and so allow datalogger support software (p. 417, p. 466) to collect the whole table. If the table was not full, data pulled from unfilled section will be garbage. V W Low Level Memory Dump Serial Comms Sniffer CSI Engineering Tool Enables monitoring of ASCII serial traffic on CR800 communications ports and the communications ports of serial input peripherals. CSI Engineering Tool

Peripheral Bus Module Identify

413

Section 19. Troubleshooting

FIGURE 128. DevConfig Terminal Emulator

19.5.1

Serial Talk Through and Sniffer


In the P: Serial Talk Through and W: Serial Comms Sniffer modes, the timeout can be changed from the default 40 s to any value ranging from 1 to 86400 s (86400 s = 1 day). When using options P or W in a terminal session, consider the following: 1. Concurrent terminal sessions are not allowed by the CR800. 2. Opening a new terminal session will close the current terminal session. 3. The CR800 will attempt to enter a terminal session when it receives nonPakBus characters on the 9-pin RS-232 port or CS I/O port, unless the port is first opened with the SerialOpen() command. If the CR800 attempts to enter a terminal session on the 9-pin RS-232 port or CS I/O port because of an incoming non-PakBus character, and that port was not opened using the SerialOpen() command, any currently running terminal function, including Serial Talk Through or Serial Comms Sniffer, will immediately stop. So, in programs that frequently open and close a serial port, the probability is higher that a non-PakBus character will arrive at the closed serial port, thus closing an existing talk through or sniffer session.

414

Appendix A. Glossary
A.1 Terms
ac See GLOSSARY. Vac (p. 431).

A/D Analog-to-digital conversion. The process that translates analog voltage levels to digital values.

accuracy A measure of the correctness of a measurement. See also APPENDIX. Accuracy, Precision, and Resolution (p. 432).

Amperes (Amps) Base unit for electric current. Used to quantify the capacity of a power source or the requirements of a power consuming device.

analog Data presented as continuously variable electrical signals.

ASCII / ANSI Abbreviation for American Standard Code for Information Interchange / American National Standards Institute. An encoding scheme in which numbers from 0-127 (ASCII) or 0-255 (ANSI) are used to represent predefined alphanumeric characters. Each number is usually stored and transmitted as 8 binary digits (8 bits), resulting in 1 byte of storage per character of text.

asynchronous The transmission of data between a transmitting and a receiving device occurs as a series of zeros and ones. For the data to be "read" correctly, the receiving device must begin reading at the proper point in the series. In asynchronous communication, this coordination is accomplished by having each character surrounded by one or more start and stop bits which designate the beginning and ending points of the information (see GLOSSARY. Synchronous (p. 429)).

baud rate The speed of transmission of information across a serial interface.

415

Appendix A. Glossary Beacon A signal broadcasted to other devices in a PakBus network to identify "neighbor" devices. A beacon in a PakBus network ensures that all devices in the network are aware of other devices that are viable. If configured to do so, a clock set command may be transmitted with the beacon. This function can be used to synchronize the clocks of devices within the PakBus network. See also GLOSSARY. PakBus (p. 425) and GLOSSARY. Neighbor Device (p. 423).

binary Describes data represented by a series of zeros and ones. Also describes the state of a switch, either being on or off.

Boolean Name given a function, the result of which is either true or false

Boolean data type Typically used for flags and to represent conditions or hardware that have only two states (true of false) such as flags and control ports.

BOOL8 A one byte data type that hold 8 bits (0 or 1) of information. BOOL8 uses less space than 32-bit BOOLEAN data type.

Callback A name given to the process by which the CR800 initiates telecommunication with a PC running appropriate CSI datalogger support software. Also known as "Initiate Telecommunications."

code A CRBASIC program, or a portion of a program.

constant A packet of CR800 memory given an alpha-numeric name and assigned a fixed number.

control I/O Terminals C1 - C4 or processes utilizing these terminals.

CVI Communications Verification Interval. The interval at which a PakBus device verifies the accessibility of neighbors in its neighbor list. If a neighbor does not communicate for a period of time equal to 2.5 x the CVI, the device will send up to 4 Hellos. If no response is received, the neighbor is removed from the neighbor list.

416

Appendix A. Glossary

CPU Central processing unit. The brains of the CR800.

CR10X Older generation Campbell Scientific datalogger replaced by the CR800.

CR1000KD An optional hand-held keyboard display for use with the CR1000 and CR800 dataloggers. See APPENDIX. Keyboard Display (p. 478).

cr Carriage Return

CS I/O Campbell Scientific Input / Output. A proprietary serial communications protocol.

datalogger support software Campbell Scientific software that includes at least the following functions: Datalogger Telecommunications Downloading Programs Clock Setting

Retrieval of Measurement Data Includes PC200W, PC400, RTDAQ, and LoggerNet Suite. See APPENDIX. Datalogger Support Software (p. 465)

data point A data value which is sent to Final Storage as the result of an output processing (data storage) instruction. Strings of data points output at the same time make up a record in a data table.

dc See GLOSSARY. Vdc (p. 431).

DCE Data communications equipment. While the term has much wider meaning, in the limited context of practical use with the CR800, it denotes the pin configuration, gender and function of an RS-232 port. The RS-232 port on the CR800 and on many 3rd party telecommunications devices, such as a digital cellular modems, are DCE. Interfacing a DCE device to a DCE device requires a null-modem cable.

417

Appendix A. Glossary

desiccant A material that absorbs water vapor to dry the surrounding air.

DevConfig Device Configuration Utility, available with LN, PC400, or from the CSI website.

DHCP Dynamic Host Configuration Protocol. A TCP/IP application protocol.

differential A sensor or measurement terminal wherein the analog voltage signal is carried on two leads. The phenomenon measured is proportional to the difference in voltage between the two leads.

digital Numerically presented data.

Dim A CRBASIC command for declaring and dimensioning variables. Variables declared with DIM remain hidden during datalogger operation.

dimension To code for a variable array. DIM example(3) creates the three variables example(1), example(2), and example(3). DIM example(3,3) creates nine variables. DIM example (3,3,3) creates 27 variables.

DNS Domain Name System. A TCP/IP application protocol.

DTE While the term has much wider meaning, in the limited context of practical use with the CR800, it denotes the pin configuration, gender and function of an RS-232 port. The RS-232 port on the CR800 and on many 3rd party telecommunications devices, such as a digital cellular modems, are DCE. Attachment of a null-modem cable to a DCE device effectively converts it to a DTE device.

Earth Ground use of a grounding rod or another suitable device to tie a system or device to the earth. Earth ground is a sink for electrical transients and possibly damaging potentials, such as those produced by a nearby lightning strike. Earth ground is the preferred reference potential for analog voltage measurements. Note that most objects have a "an electrical potential" and

418

Appendix A. Glossary the potential at different places on the earth - even a few meters away - may be different.

engineering units Units that explicitly describe phenomena, as opposed to the CR800 measurement units of milliVolts or counts.

ESD Electrostatic discharge

ESS Environmental Sensor Station

excitation Application of a precise voltage, usually to a resistive bridge circuit.

execution time Time required to execute an instruction or group of instructions. If the execution time of a Program Table exceeds the table's Execution Interval, the Program Table is executed less frequently than programmed.

expression A series of words, operators, or numbers that produce a value or result.

File Control A feature of datalogger support software (p. 417) software used in management of files that reside in CR800 memory.

Fill and Stop Memory A memory configuration for data tables forcing a data table to stop accepting data when full.

final storage That portion of CR800 SRAM Memory allocated for storing data tables with output arrays. Final Storage is a ring memory, with new data overwriting the oldest data.

FTP File Transfer Protocol. A TCP/IP application protocol.

419

Appendix A. Glossary FLOAT 4 byte floating point data type. Default CR800 data type for Public or Dim variables. Same format as IEEE4. IEEE4 is the name used when declaring data type for stored data table data.

full duplex Systems allow communications simultaneously in both directions.

FP2 2 byte floating point data type. Default CR800 data type for stored data. While IEEE 4 byte floating point is used for variables and internal calculations, FP2 is adequate for most stored data. FP2 provides 3 or 4 significant digits of resolution, and requires half the memory as IEEE4.

garbage The refuse of the data communication world. When data are sent or received incorrectly (there are numerous reasons why this happens) a string of invalid, meaningless characters (garbage) results. Two common causes are: 1) a baud rate mismatch and 2) synchronous data being sent to an asynchronous device and vice versa.

global variable A variable available for use throughout a CRBASIC program. The term is usually used in connection with subroutines, differentiating global variables (those declared using Public or Dim) from local variables, which are declared in the Sub () and Function () instructions.

ground Being or related to an electrical potential of 0 Volts.

half duplex Systems allow bi-directional communications, but not simultaneously.

handshake, handshaking The exchange of predetermined information between two devices to assure each that it is connected to the other. When not used as a clock line, the CLK/HS (pin 7) line in the datalogger CS I/O port is primarily used to detect the presence or absence of peripherals.

Hello Exchange The process of verifying a node as a neighbor.

Hertz Abbreviated Hz. Unit of frequency described as cycles or pulses per second.

420

Appendix A. Glossary HTML Hypertext Markup Language. A programming language used for the creation of web pages.

HTTP Hypertext Transfer Protocol. A TCP/IP application protocol.

IEEE4 4 byte floating point data type. IEEE Standard 754. Same format as FLOAT. FLOAT is the name used when declaring data type for Public or Dim variables.

INF infinite or undefined. A data word indicating the result of a function is infinite or undefined.

Initiate telecommunication A name given to a processes by which the CR800 initiates telecommunications with a PC running appropriate CSI datalogger support software. Also known as "Callback."

input/output instructions Used to initiate measurements and store the results in Input Storage or to set or read Control/Logic Ports.

integer A number written without a fractional or decimal component. 15 and 7956 are integers. 1.5 and 79.56 are not integers.

intermediate storage That portion of memory allocated for the storage of results of intermediate calculations necessary for operations such as averages or standard deviations. Intermediate storage is not accessible to the user.

IP Internet Protocol. A TCP/IP internet protocol.

IP Address A unique address for a device on the internet.

lf line feed

421

Appendix A. Glossary "Keep" Memory Memory preserved through reset due to power up and program start up.

keyboard display the CR850 (a version of the CR800) has an integrated keyboard display. The CR1000KD keyboard display is compatible with the CR800 and CR850 dataloggers.

local variable A variable available for use only by the subroutine wherein it was declared. The term differentiates local variables, which are declared in the Sub () and Function () instructions, from global variables, which are declared using Public or Dim.

LONG Data type used when declaring integers.

loop a series of instructions in a program, which are repeated a prescribed number of times, followed by an "end" instruction which exists the program from the loop.

loop counter Increments by 1 with each pass through a loop.

manually initiated Initiated by the user, usually with a optional keyboard display, as opposed to occurring under program control.

MD5 digest 16-byte checksum of the VTP configuration.

milli The SI prefix denoting 1/1000s of a base SI unit.

Modbus Communication protocol published by Modicon in 1979 for use in programmable logic controllers (PLCs).

422

Appendix A. Glossary modem/terminal Any device which: has the ability to raise the CR800 ring line or be used with an optically isolated interface (see APPENDIX. CS I/O Serial Interfaces (p. 475)) to raise the ring line and put the CR800 in the Telecommunications Command State has an asynchronous serial communication port which can be configured to communicate with the CR800.

Glossary. modulo divide mathematical operation wherein the result of interest is the remainder after a division. MSB Most significant bit (the leading bit)

multi-meter An inexpensive and readily available device useful in troubleshooting data acquisition system faults.

mV The SI abbreviation for milliVolts.

NAN Not a number. A data word indicating a measurement or processing error. Voltage over range, SDI-12 sensor error, and undefined mathematical results can produce NAN.

Neighbor Device Devices in a PakBus network that can communicate directly with an individual device without being routed through an intermediate device. See GLOSSARY. PakBus (p. 425).

NIST National Institute of Standards and Technology

Node Part of the description of a datalogger network when using LoggerNet. Each node represents a device that the communications server will dial through or communicate with individually. Nodes are organized as a hierarchy with all nodes accessed by the same device (parent node) entered as child nodes. A node can be both a parent and a child.

423

Appendix A. Glossary NSEC 8 byte data type divided up as 4 bytes of seconds since 1990 and 4 bytes of nanoseconds into the second.

Null-modem A device, usually a multi-conductor cable, which converts an RS-232 port from DCE to DTE or from DTE to DCE.

Ohm The unit of resistance. Symbol is the Greek letter Omega (). 1.0 equals the ratio of 1.0 Volt divided by 1.0 Amp.

Ohms Law Describes the relationship of current and resistance to voltage. Voltage equals the product of current and resistance (V = I*R).

on-line data transfer Routine transfer of data to a peripheral left on-site. Transfer is controlled by the program entered in the datalogger.

output A loosely applied term. Denotes a) the information carrier generated by an electronic sensor, b) the transfer of data from variable storage to final storage, or c) the transfer of power from the CR800 or a peripheral to another device.

output array A string of data points output to Final Storage. Output occurs when the data interval and data trigger are true. The data points which complete the Array are the result of the Output Processing Instructions which are executed while the Output Flag is set.

output interval The time interval between initiations of a particular data table record.

output processing instructions Process data values and generate Output Arrays. Examples of Output Processing Instructions include Totalize, Maximize, Minimize, Average, etc. The data sources for these Instructions are values in Input Storage. The results of intermediate calculations are stored in Intermediate Storage. The ultimate destination of data generated by Output Processing Instructions is usually Final Storage but may be Input Storage for further processing. The transfer of processed summaries to Final Storage takes place when the Output Flag has been set by a Program Control Instruction.

424

Appendix A. Glossary PakBus A proprietary telecommunications protocol similar in concept to internet protocol (IP). It has been developed by Campbell Scientific to facilitate communications between Campbell Scientific instrumentation.

parameter Used in conjunction with CR800 program Instructions, parameters are numbers or codes which are entered to specify exactly what a given instruction is to do. Once the instruction number has been entered in a Program Table, the CR800 will prompt for the parameters by displaying the parameter number in the ID Field of the display.

period average A measurement technique utilizing a high-frequency digital clock to measure time differences between signal transitions. Sensors commonly measured with period average include vibrating wire transducers and water content reflectometers.

peripheral Any device designed for use with, and requiring, the CR800 (or another CSI datalogger) to operate.

Ping A software utility that attempts to contact another specific device in a network.

Poisson Ratio A ratio used in strain measurements equal to transverse strain divided by extension strain. v = -(trans / axial). precision A measure of the repeatability of a measurement. See also APPENDIX. Accuracy, Precision, and Resolution (p. 432).

PreserveVariables PreserveVariables instruction protects Public variables from being erased when a program is recompiled. It enables the *4 table functionality of legacy array based dataloggers, such as the CR10X.

print device Any device capable of receiving output over pin 6 (the PE line) in a receive-only mode. Printers, "dumb" terminals, and computers in a terminal mode fall in this category.

425

Appendix A. Glossary print peripheral See GLOSSARY. Print Device (p. 425).

processing instructions These instructions allow the user to further process input data values and return the result to Input Storage where it can be accessed for output processing. Arithmetic and transcendental functions are included in these Instructions.

program control instructions Used to modify the sequence of execution of instructions contained in program tables; also used to set or clear flags.

Public A CRBASIC command for declaring and dimensioning variables. Variables declared with PUBLIC can be monitored during datalogger operation.

pulse An electrical signal characterized by a sudden increase in voltage follow by a short plateau and a sudden voltage decrease.

regulator A device for conditioning an electrical power source. CSI regulators typically condition ac or dc voltages greater than 16 V to about 14 Vdc.

resistance A feature of an electronic circuit that impedes or redirects the flow of electrons through the circuit.

resistor A device that provides a known quantity of resistance.

resolution A measure of the fineness of a measurement. See also SECTION. Accuracy, Precision, and Resolution (p. 432).

ring line (Pin 3) Line pulled high by an external device to "awaken" the CR800.

Ring Memory A memory configuration for data tables allowing the oldest data to be overwritten. This is the default setting for data tables.

426

Appendix A. Glossary ringing oscillation of sensor output (voltage or current) that occurs when sensor excitation causes parasitic capacitances and inductances to resonate.

RMS Root mean square or quadratic mean. A measure of the magnitude of wave or other varying quantities around zero.

RS-232 Recommended Standard 232. A loose standard defining how two computing devices can communicate with each other. The implementation of RS-232 in CSI dataloggers to PC communications is quite rigid, but transparent to most users. Implementation of RS-232 in CSI datalogger to RS-232 smart sensor communications is quite flexible.

sample rate The rate at which measurements are made. The measurement sample rate is primarily of interest when considering the effect of time skew (i.e., how close in time are a series of measurements). The maximum sample rates are the rates at which measurements are made when initiated by a single instruction with multiple repetitions.

scan (execution interval) The time interval between initiating each execution of a given Scan interval. If the Execution Interval is evenly divisible into 24 hours (86,400 seconds), the Execution Interval is synchronized with 24 hour time, so that the table is executed at midnight and every execution interval thereafter. The table is executed for the first time at the first occurrence of the Execution Interval after compilation. If the Execution Interval does not divide evenly into 24 hours, execution will start on the first even second after compilation.

scan time When time functions are run inside the Scan ... NextScan construct, time stamps are based on when the scan was started according to the CR800 clock. Resolution of scan time is equal to the length of the scan. See GLOSSARY. system time (p. 429).

SDI-12 Serial Data Interface at 1200 bps. Communication protocol for transferring data between data recorders and sensors.

SDM Synchronous Device for Measurement. A processor based peripheral device or sensor that communicates with the CR800 via hardwire over short distance using a proprietary CSI protocol.

427

Appendix A. Glossary Seebeck Effect Induces microVolt level thermal electromotive forces (EMF) across junctions of dissimilar metals in the presence of temperature gradients. This is the principle behind thermocouple temperature measurement. It also causes small correctable voltage offsets in CR800 measurement circuitry.

Semaphore (Measurement Semaphore) In sequential mode, when the main scan executes it locks the resources associated with measurements, i.e., it acquires the measurement semaphore. This is at the scan level, so all subscans within the scan (whether they make measurements or not), will lock out measurements from slow sequences (including the system background calibration). Locking measurement resources at the scan level gives non-interrupted measurement execution of the main scan.

Send Denotes the program send button in datalogger support software (p. 417) datalogger support software.

serial A loose term denoting output or a device that outputs an electronic series of alphanumeric characters.

SI Systme Internationale The International System of Units.

signature A number which is a function of the data and the sequence of data in memory. It is derived using an algorithm which assures a 99.998% probability that if either the data or its sequence changes, the signature changes.

single-ended Denotes a sensor or measurement terminal where in the analog voltage signal is carried on a single lead, which is measured with respect to ground.

skipped scans Occurs when the CR800 program is too long for the scan interval. Skipped scans can cause errors in pulse measurements.

slow sequence A usually slower secondary scan in the CR800 CRBASIC program. The main scan has priority over a slow sequence.

428

Appendix A. Glossary SMTP Simple Mail Transfer Protocol. A TCP/IP application protocol.

SNP Snapshot File.

SP Space

state Whether a device is on or off.

string A datum consisting of alpha-numeric characters.

support software Includes PC200W, PC400, RTDAQ, LoggerNet.

synchronous The transmission of data between a transmitting and receiving device occurs as a series of zeros and ones. For the data to be "read" correctly, the receiving device must begin reading at the proper point in the series. In synchronous communication, this coordination is accomplished by synchronizing the transmitting and receiving devices to a common clock signal (see GLOSSARY. Asynchronous (p. 415)).

system time When time functions are run outside the Scan ... NextScan construct, the time registered by the instruction will be based on the system clock, which has a 10 ms resolution. See GLOSSARY. Scan time (p. 427).

task 1) Grouping of CRBASIC program instructions by the CR800. Tasks include measurement, SDM, and processing. Tasks are prioritized by a CR800 operating in pipeline mode. 2) A user customized function defined through LoggerNet Task Master.

TCP/IP Transmission Control Protocol / Internet Protocol.

Telnet A software utility that attempts to contact and interrogate another specific device in a network.

429

Appendix A. Glossary

thermistor A thermistor is a resistive element whose change in resistance with temperature is wide, stabile and well characterized. It can be used as a device to measure temperature. The output of a thermistor is usually nonlinear, so measurement requires linearization, usually be means of the Steinhart-Hart or another polynomial equation. Campbell Scientific 107, 108, and 109 thermistor sensors are linearized by Steinhart-Hart as implemented in the Therm107(), Therm108(), and Therm109() instructions.

throughput The throughput rate is the rate at which a measurement can be made, scaled to engineering units, and the reading stored in a data table. The CR800 has the ability to scan sensors at a rate exceeding the throughput rate. The primary factor affecting throughput rate is the amount of processing specified by the user. In sequential mode operation, all processing called for by an instruction must be completed before moving on the next instruction.

TTL Transistor - Transistor Logic. A serial protocol using 0V and 5V as logic signal levels.

TLS Transport Layer Security -- an Internet communications security protocol.

toggle To reverse the current power state.

UINT2 Data type used for efficient storage of totalized pulse counts, port status (e.g. status of 16 ports stored in one variable) or integer values that store binary flags.

UPS Uninterruptible power supply. A UPS can be constructed for most datalogger applications using ac line power, an ac/ac or ac/dc wall adapter, a charge controller, and a rechargeable battery.

User Program The CRBASIC program written by the CR800 user in the CRBASIC Editor or the Short Cut program generator.

USR: A portion of CR800 memory dedicated to the storage of image or other files.

430

Appendix A. Glossary variable A packet of CR800 memory given an alpha-numeric name, which holds a potentially changing number or string.

Vac Volts Alternating Current. Also VAC. Mains or grid power is high-level Vac, usually 110 Vac or 220 Vac at a fixed frequency of 50 Hz or 60 Hz. High-level Vac is used as a primary power source for Campbell Scientific power supplies. Do not connect high-level Vac directly to the CR800. The CR800 measures varying frequencies of low-level Vac in the range of 20 Vac.

Vdc Volts Direct Current. Also VDC. The CR800 operates with a nominal 12 Vdc power supply. It can supply nominal 12 Vdc, regulated 5 Vdc, and variable excitation in the 2.5 Vdc range. It measures analog voltage in the 5.0 Vdc range and pulse voltage in the 20 Vdc range.

Volt meter An inexpensive and readily available device useful in troubleshooting data acquisition system faults.

Volts SI unit for electrical potential.

watchdog timer An error checking system that examines the processor state, software timers, and program related counters when the datalogger is running its program. If the processor has bombed or is neglecting standard system updates or if the counters are outside the limits, the watchdog timer resets the processor and program execution. Voltage surges and transients can cause the watchdog timer to reset the processor and program execution. When the watchdog timer resets the processor and program execution, an error count is incremented in the watchdogtimer entry of the status table (p. 434). A low number (1 to 10) of watchdog timer resets is of concern, but normally indicates the user should just monitor the situation. A large number (>10) of error accumulating over a short period of time should cause increasing alarm since it indicates a hardware or software problem may exist. When large numbers of watchdog timer resets occur, consult with a Campbell Scientific applications engineer.

weather tight Describes an instrumentation enclosure impenetrable by common environmental conditions. During extraordinary weather events, however, seals on the enclosure may be breached.

XML acronym for Extensible Markup Language.

431

Appendix A. Glossary

User Program The CRBASIC program written by the CR800 user in CRBASIC Editor or Short Cut.

A.2 Concepts
A.2.1 Accuracy, Precision, and Resolution
Three terms often confused are accuracy, precision, and resolution. Accuracy is a measure of the correctness of a single measurement, or the group of measurements in the aggregate. Precision is a measure of the repeatability of a group of measurements. Resolution is a measure of the fineness of a measurement. Together, the three define how well a data acquisition system performs. To understand how the three relate to each other, consider "target practice" as an analogy. FIGURE. Accuracy, Precision, and Resolution (p. 432) shows four targets. The bull's eye on each target represents the absolute correct measurement. Each shot represents an attempt to make the measurement. The diameter of the projectile represents resolution. The objective of a data acquisition system should be high accuracy, high precision, and to produce data with resolution as high as appropriate for a given application.

FIGURE 129. Accuracy, Precision, and Resolution

432

Appendix B. Status Table and Settings


The CR800 status table contains system operating status information accessible via the optional keyboard display or PC software DevConfig, LoggerNet, PC400, RTDAQ, or PC200W. TABLE. Common Uses of the Status Table (p. 433) lists some of the more common uses of status table information. TABLE. Status Table Fields and Descriptions (p. 434) is a comprehensive list of status table variables with brief descriptions. Status Table information is easily viewed by going to LoggerNet / PC400 / RTDAQ / PC200W | Datalogger | Station Status. However, be aware that information presented in Station Status is not automatically updated. Click the refresh button each time an update is desired. Alternatively, use the Numeric displays of the connect screen to show critical values and have these update automatically, or use Devconfig, which polls the status table at regular intervals without use of a refresh button. Significant processor and communications activity is needed to transmit the Status Table to a support software monitor. If the <prod> is very tight on time, just getting the Status Table itself repeatedly could push timing over the edge and cause skipped scans. Through the continued development of the operating system, the status table has become quite large. A separate settings table has been introduced to slow the growth of the status table. To maintain backward compatibility, settings first included in the status table have been retained, but are also included in the settings editor. TABLE 90. Common Uses of the Status Table
Feature or Suspect Constituent Full Reset of CR800 Program Execution Status Field(s) to Consult FullMemReset (Enter 98765) BuffDepth MaxBuffDepth Operating System OSVersion OSDate OSSignature WatchdogErrors Power Supply Battery WatchdogErrors Low12VCount Low5VCount StartUpCode SRAM LithiumBattery MemorySize MemoryFree Telecommunications PakBusAddress Low5VCount

433

Appendix B. Status Table and Settings

TABLE 90. Common Uses of the Status Table


Feature or Suspect Constituent Status Field(s) to Consult RS-232Handshaking RS-232Timeout CommActive CommConfig Baudrate PakBus IsRouter PakBusNodes CentralRouters Beacon Verify MaxPacketSize CRBASIC Program ProgSignature Compile Results ProgErrors VarOutofBound SkippedScan SkippedSlowScan PortStatus PortConfig Measurements Data ErrorCalib SkippedRecord DataFillDays

TABLE 91. Status Table Fields and Descriptions


Fieldname RecNum TimeStamp OSVersion OSDate OSSignature SerialNumber Description Increments for successive status table data records Scan time the record was generated Version of the Operating System Date OS was released. Operating System Signature CR800 specific serial number. Stored in FLASH memory. Hardware revision number. Stored in FLASH memory. Time String String Integer Integer Status Status Status Status Variable Type Default Range 0 to 2
32

Edit?

Info Type

RevBoard

Integer

Status

434

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname StationName
1

Description Name of the CR800. Stored in FLASH memory.

Variable Type String String 1

Default

Range Yes 1 to 3999 Yes

Edit?

Info Type Config Config PB

PakBusAddress ProgName StartTime RunSignature

CR800 PakBus address.

Name of current (running) program. Time the program began running. Signature of the compiled binary data structure for the current program. Value is independent of comments added or nonfunctional changes to the program. Often changes with operating system changes. Signature of the current running program file including comments. Does not change with operating system changes. Current value of the battery voltage. Measurement is made in the background calibration. Current wiring panel temperature. Measurement is made in the background calibration.
3

String Time Integer

Status Status Status

ProgSignature

Integer

Status

Battery

Float

9.6-16 Volts

Measure

PanelTemp

Float

Measure

WatchdogErrors

Number of Watchdog errors that have occurred while running this program. Current voltage of the lithium battery. Measurement is updated in background calibration. Number of times system voltage dropped below 9.6 between resets. When this condition is detected, the CR800 ceases measurements and goes into a low power mode until proper system voltage is restored. Number of occurrences of the 5V supply dropping below a functional threshold. Contains error messages generated by compilation or during runtime.

Integer

Yes Reset by changing to 0

Error

LithiumBattery

Float

2.7-3.6 Volts

Measure

Low12VCount

Integer

0-99

Yes Reset by changing to 0

Error

Low5VCount

Integer

0-99

Yes Reset by changing to 0

Error

CompileResults

String

Error

435

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname StartUpCode
6

Description A code variable that indicates how the system woke up from power off. The number of compile or runtime errors for the current program.

Variable Type String 0

Default 0

Range

Edit?

Info Type Status / Error

ProgErrors

Integer

Error

VarOutOfBound

Number of times an array was accessed out of bounds. Number of skipped scans that have occurred while running the current program instance. Does not include scans intentionally skipped as may occur with the use of ExitScan and DoLoop instructions.
8

Integer

Yes Reset by changing to 0

Error

SkippedScan

Integer

Yes Reset by changing to 0

Error

SkippedSystemScan

The number of scans skipped in the background calibration. The number of scans skipped in a SlowSequence(s). The number of erroneous calibration values measured. The erroneous value is discarded (not included in the filter update). Total amount of SRAM (bytes) in this device.

Integer array

Yes Reset by changing to 0

Error

SkippedSlowScan

Integer array.

Yes Reset by changing to 0

Error

ErrorCalib

Integer

Error

MemorySize

2097152 (2M) 4194304 (4M) Integer 4 kbytes and higher

Status

MemoryFree

Bytes of unallocated memory on the CPU (SRAM). All free memory may not be available for data tables. As memory is allocated and freed, holes of unallocated memory, which are unusable for final storage, may be created. Bytes remaining on the CPU: drive. This drive resides in the serial FLASH and is always present. CRBASIC programs are normally stored here. Bytes remaining on the USR: drive. USR: drive is user-created and normally used to store .jpg and other files.

Status

CPUDriveFree

Integer

USRDriveFree

Integer

Mem

436

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname CommsMemFree(1) Description See SECTION. CommsMemFree(1) (p. 403). Number of buffers used in all communication, except with the optional keyboard display. Two digits per each buffer size category. Least significant digit specifies the number of the smallest buffers. Most significant digit specifies the number of the largest buffers. When TLS is not active, there are 4 categories, "tiny", "little", "medium", and "large". When TLS is active, there is an additional 5th category, "huge", and there are more buffers allocated for each category. CommsMemFree(2) See SECTION. CommsMemFree(2) (p. 404). Number of buffers remaining for routing and neighbor lists. Each route or neighbor requires 1 buffer. CommsMemFree(3) See SECTION. CommsMemFree(3) (p. 405). Three 2 digit fields, from right (Least significant) to left (most significant): "little" IP packets available, "big" IP packets, and received IP packets in a receive queue that have not yet been processed. Integer array At start up, with no TCP/IP communicati on: 1530 (30 little and 15 big IP packets are available. Nothing in the receive queue.) Integer 0 Enter 98765 to Reset Config Integer array Variable Type Integer array Default Range Edit? Info Type Status

TLS Not Active:


tiny: 05 little: 15 medium: 25 large: 15 huge: 0

TLS Active:
tiny: 160 little: 99 medium: 99 large: 30 huge: 2

FullMemReset

A value of 98765 written to this location will initiate a full memory reset. Full memory reset will reinitialize RAM disk, final storage, PakBus memory, and return parameters to defaults. Programmed name of data table(s). Each table has its own entry. Variable array that posts how many records have been skipped for a given table. Each table has its own entry.

DataTableName

String array of number of data tables Integer array 0 0 Yes Reset by changing to 0

Prog

SkippedRecord

10

Error

437

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname DataRecordSize Description Number of records in a table. Each table has its own entry in this array. Output interval for a given table. Each table has its own entry in this array. Time in days to fill a given table. Each table has its own entry. Variable Type Integer array Default Range Edit? Info Type

SecsPerRecord

Integer array

DataFillDays

Integer array

MeasureOps

Number of task sequencer opcodes required to do all measurements in the system. This value includes the calibration opcodes (compile time) and the background calibration (system) slow sequence opcodes. This is a static value calculated at compile time. Assumes all measurement instructions will run each scan. Time (s) required to make the measurements in this scan, including integration and settling times. Processing occurs concurrent with this time so the sum of measure time and process time is not the time required in the scan instruction. This is a static value calculated at compile time. Assumes all measurement instructions will run each scan.

Integer

Status

MeasureTime

Integer

Status

438

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname ProcessTime Description Processing time (s) of the last scan. Time is measured from the end of the EndScan instruction (after the measurement event is set) to the beginning of the EndScan (before the wait for the measurement event begins) for the subsequent scan. Calculated dynamically (on the fly). Maximum time (s) required to run through processing for the current scan. This value is reset when the scan exits. Calculated dynamically (on the fly). Shows the current Pipeline Mode processing buffer depth., which indicates how far processing is currently behind measurement. Gives the maximum number of buffers processing lagged measurement.
8

Variable Type Integer

Default

Range

Edit?

Info Type Status

MaxProcTime

Integer

Yes Reset by changing to 0

Status

BuffDepth

MaxBuffDepth

LastSystemScan

The last time the background calibration executed. The last time SlowSequence scan(s) executed.

Integer array

Status

LastSlowScan

Integer array

Status

SystemProcTime

8,12

The time (s) required to process the background calibration. The time (s) required to process SlowSequence scan(s). The maximum time (s) required to process the background calibration. The maximum time (s) required to process SlowSequence scan(s). Array of Boolean values posting the state of control ports. Values updated every 500 ms. Array of strings explaining the use of the associated control port. Valid entries are: Input, Output, SDM, SDI-12, Tx, and Rx.

Integer array

Status

SlowProcTime

9,12

Integer array

Status

MaxSystemProcTime
8,13

Integer array

Status

MaxSlowProcTime

9,13

Integer array

Status

PortStatus

Boolean array of 8

False

True or False

Yes

Status

PortConfig

String array of 8

Input

Input or Output

Status

439

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname SW12Volts Security
14

Description Status of switched 12 Vdc port Array of the three security settings or codes. Will not be shown if security is enabled. Controls whether the RS232 port will remain active even when communication is not taking place. If RS232 handshaking is enabled (handshaking buffer size is non-zero), this setting must be set to yes RS-232 Hardware Handshaking Buffer Size. If non zero, hardware handshaking is active on the RS-232 port. This setting specifies the maximum packet size sent between checking for CTS. RS-232 Hardware Handshaking Timeout. For RS-232 hardware handshaking, this specifies in tens of ms the timeout that the datalogger will wait between packets if CTS is not asserted. Array of Boolean values telling if communications is currently active on the corresponding port. Aliased to CommActiveRS-232 CommActiveME CommActiveCOM310 CommActiveSDC7 CommActiveSDC8 CommActiveSDC10 CommActiveSDC11 CommActiveCOM1 CommActiveCOM2

Variable Type Boolean Integer array of 3

Default False 0, 0, 0

Range True or False 0 - 65535 (0 is no security) 0 or 1 Yes Yes

Edit?

Info Type Status Status

RS232Power

Boolean

RS232Handshaking

Integer

RS232Timeout

Integer

CommActive

15

Boolean array of 9

False, except for the active COM

True or False

Status

440

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname CommConfig Description Array of values telling the configuration of comm ports. Aliased to CommConfigRS-232 CommConfigME CommConfigCOM310 CommConfigSDC7 CommConfigSDC8 CommConfigSDC10 CommConfigSDC11 CommConfigCOM1 CommConfigCOM2 COM1 through COM2 = 0 (Disabled) Variable Type Integer array of 9 Default RS-232 through SDC8 =4 (Enabled) Range 0 = Program Disabled Edit? Ports toggled through program control (SerialOpen / SerialClose). RS-232 is always hardware enabled. Info Type Config

4 = Program Enabled

Baudrate

16

Array of baud rates for comms. Aliased to: BaudrateRS-232 BaudrateME BaudrateSDC BaudrateCOM1 BaudrateCOM2

Integer array of 9

RS-232=115200 MESDC8 = 115200 COM1 through COM2 = 0 (Disabled)

0 = Auto 1200 2400 4800 9600 19.2k 38.4k 57.6k 115.2k

Yes, can also use SerialOut instruction to setup.

Config

IsRouter PakBusNodes

Is the CR800 configured to act as router Number of nodes (approximately) that will exist in the PakBus network. This value is used to determine how much memory to allocate for networking.
17

Boolean Integer

False 50

0 or 1 >=50

Yes Yes

Config PB Config PB

CentralRouters

Array of (8) PakBus addresses for central routers.

Integer array of 8

Yes

Config PB

441

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname Beacon Description Array of Beacon intervals (in seconds) for comms ports. Aliased to BeaconRS-232 BeaconME BeaconSDC7 BeaconSDC8 BeaconSDC10 BeaconSDC11 BeaconCOM1 BeaconCOM2 Variable Type Integer array of 9 0 Default Range 0 - approx. 65,500 Yes Edit? Info Type Config PB

Verify

Array of verify intervals (in seconds) for com ports. Aliased to VerifyRS-232 VerifyME VerifySDC7 VerifySDC8 VerifySDC10 VerifySDC11 VerifyCOM1 VerifyCOM2

Integer array of 9

0 - approx. 65,500

Status

MaxPacketSize

Maximum number of bytes per data collection packet. Configures the USR: drive. If 0, the drive is removed. If non-zero, the drive is created. Indicates current parameters for IP connection. Specifies the IP address for the Etnernet interface. If specified as zero, the address, net mask, and gateway is configured automatically using DHCP. Specifies the address of the IP router to which the CR800 will forward all non-local IP packets for which it has no route.

1000

USRDriveSize

Integer

8192 Min

Yes

Mem

IPInfo

String

IPAddressEth

Entered as String / Stored as 4 byte

0.0.0.0

All valid IP addresses

Yes

IPGateway

Entered as String / Stored as 4 byte

0.0.0.0

All valid IP addresses

Yes

442

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname TCPPort Description Specifies the port used for ethernet socket communications. Controls which datalogger port PPP service is configured to use. Warning: If this value is set to CS I/O ME, do not attach any other devices to the CS I/O port. Specifies the IP address that is used for the PPP interface if that interface is active (the PPP Interface setting needs to be set to something other than Inactive). Specifies the user name that is used to log in to the PPP server. Specifies the password that is used to log in to the PPP server. Specifies the dial string that follows ATD (e.g., #777 for Redwing CDMA) or a list of AT commands separated by ';' (e.g., ATV1; AT+CGATT=0;ATD*99***1 #), that are used to initialize and dial through a modem before a PPP connection is attempted. A blank string means that dialing is not necessary before a PPP connection is established. Specifies the response expected after dialing a modem before a PPP connection can be established. Contains a string of messages that can be entered by the user. Calibration table of Gain values. Each integration / range combination has a gain associated with it. These numbers are updated by the background slow sequence if needed in the program. Variable Type Long Default 6785 Range 0 - 65535 Yes Edit? Info Type

pppInterface

Integer

0 (Inactive)

pppIPAddr

String

0.0.0.0

pppUsername

String

pppPassword

String

pppDial

String

pppDialResponse

String

connect

Yes

Messages

String

Yes

CalGain

18

Float array of 18

Calib

443

Appendix B. Status Table and Settings

TABLE 91. Status Table Fields and Descriptions


Fieldname CalSeOffSet
18

Description Calibration table of single ended offset values. Each integration / range combination has a single ended offset associated with it. These numbers are updated by the background slow sequence if needed in the program. Calibration table of differential offset values. Each integration / range combination has a differential offset associated with it. These numbers are updated by the background slow sequence if needed in the program. Factory calibrated correction factor applied to resistance measurements At compile time the offset of each CAO channel, if used, is measured and used when setting the CAO to the user's programmed value

Variable Type Integer array of 18

Default

Range close to 0

Edit?

Info Type Calib

CalDiffOffset

18

Integer array of 18

close to 0

Calib

IxResistor (CR3000 Only) CAOOffset (CR3000 Only)

Float

close to 1000 close to 0

Calib

Float

Calib

1. The StationName instruction can also be used in a program to write to this field. This is not the name used in the TOA data file header. 2. Pak Bus Addresses 1 to 4094 are valid. Addresses >= 4000 are generally used for a PC by datalogger support software (p. 417, p. 466). 3. Watchdog errors are automatically reset upon compiling a new program. 4. Replace the lithium battery if <2.7V. See Replacing the Internal Battery (p. 391) for replacement directions. 5. The 12V low comparator has some variation, but typically triggers at about 9.0 volts. The minimum specified input voltage of 9.6 Vdc will not cause a 12 Vdc low, but a 12 Vdc low condition will stop the program execution before the CR800 will give bad measurements due to low of supply voltage. 6. Currently not being used (12/7/2009) 7. The Variable Out-of-Bounds error occurs when a program tries to write to an array variable outside of its declared size. A programming error causes this, so it should not be ignored. When the datalogger detects that a write outside of an array is being attempted it does not perform the write and increments the VOOB in the status table. The compiler and pre-compiler can only catch things like reps too large for an array etc. If an array is used in a loop or expression the pre-compiler does not (in most cases cannot) check to see if

444

Appendix B. Status Table and Settings an array is accessed out of bounds (i.e. accessing an array with a variable index such as arr(index) = arr(index-1), where index is a variable). 8. The background calibration runs automatically in a hidden SlowSequence scan (Self-Calibration (p. 60)). 9. If no user entered SlowSequence scans are programmed, this variable does not appear. If multiple user entered SlowSequence scans programmed, this variable becomes an array with a value for each scan. 10. The order of tables is the order in which they are declared. 11. 12. Displays a large number until a SlowSequence scan runs. 13. Displays 0 until a SlowSequence scan runs. 14. Security can be changed via DeviceConfig, optional keyboard display, PBGraph, StatusTable, and SetSecurity instruction. Shows -1 if security code has not been given / deactivated. 15. When the SerialOpen instruction is used CommsConfig is loaded with the format parameter of that instruction. PakBus communication can occur concurrently on the same port If the port was previously opened (in the case of the CP UARTS) for PakBus, or if the port is always opened ( CS-9pin, and RS-232) for PakBus the code is 4. 16. The value shown is the initial baud rate the CR800 will use. A negative value will allow the CR800 to auto baud but will dictate at which baud rate to begin. Autobaud means to try different baud rates until successful or the operation times out. 17. A list of up to eight PB addresses for routers that can act as Central Routers. See Device Configuration Utility (p. 468) software for more information. 18. (1) 5000 mV range 250 us integration (2) 2500 mV range 250 us integration (3) 250 mV range 250 us integration (4) 25 mV range 250 us integration (5) 7.5 mV range 250 us integration (6) 2.5 mV range 250 uS integration (CR800 & CR1000 Only) (7) 5000 mV range 1/60 Hz integration (8) 2500 mV range 1/60 Hz integration (9) 250 mV range 1/60 Hz integration (10) 25 mV range 1/60 Hz integration (11) 7.5 mV range 1/60 Hz integration (12) 2.5 mV range 1/60 Hz integration (CR800 & CR1000 Only) (13) 5000 mV range 1/50 Hz integration (14) 2500 mV range 1/50 Hz integration (15) 250 mV range 1/50 Hz integration (16) 25 mV range 1/50 Hz integration (17) 7.5 mV range 1/50 Hz integration (18) 2.5 mV range 1/50 Hz integration (CR800 & CR1000 Only)

445

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting OS Version Serial Number Station Name PakBus Address Description Specifies the version of the operating system currently in the datalogger. Specifies the datalogger serial number assigned by the factory when the datalogger was calibrated. Specifies a name assigned to this station. This setting specifies the PakBus address for this device. The value for this setting must be chosen such that the address of the device is unique in the scope of the datalogger network. Duplication of PakBus addresses in two or more devices can lead to failures and unpredictable behavior in the PakBus network. The following values are the default addresses of various types of software and devices and should probably be avoided: 1 Default Entry

Device PB Address
LoggerNet 4094 PC400 4093 PC200 4092 Visual Weather 4091 RTDAQ 4090 DevConfig 4089 NL100 678 All other devices 1 Security Level 1 Security Level 2 Security Level 3 UTC Offset Specifies Level 1 Security. Zero disables all security. Range: 0 to 65535 Specifies Level 2 Security. Zero disables levels 2 & 3. Range: 0 to 65535 Specifies Level 3 Security. Zero disables level 3. Range: 0 to 65535 The offset, in seconds, that the datalogger's local time is from UTC. This offset is used in email and HTML headers, since these protocols require the time stamp to be reflected in UTC. This offset will also be used by the GPS instruction, NetworkTimeProtocol instruction, and DaylightSavingTime functions when enabled. This setting controls whether the datalogger is configured as a router or as a leaf node. If the value of this setting is non-zero, the datalogger is configured to act as a PakBus router. That is, it is able to forward PakBus packets from one port to another. To perform its routing duties, a datalogger configured as a router will maintain its own list of neighbors and send this list to other routers in the PakBus network. It will also obtain and receive neighbor lists from other routers. If the value of this setting is zero, the datalogger is configured to act as a leaf node. In this configuration, the datalogger will not be able to forward packets from one port to another and it will not maintain a list of neighbors. Under this configuration, the datalogger can still communicate with other dataloggers and wireless sensors. It cannot, however, be used as a means of reaching those other dataloggers. PakBus Nodes Allocation Specifies the amount of memory that the datalogger allocates for maintaining PakBus routing information. This value represents roughly the maximum number of PakBus nodes that the datalogger is able to track in its routing tables. 50 0 0 0 -1 (Disabled)

Is Router

446

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting Route Filters Description This setting configures the datalogger to restrict routing or processing of some PakBus message types so that a "state changing" message can only be processed or forwarded by this datalogger if the source address of that message is in one of the source ranges and the destination address of that message is in the corresponding destination range. If no ranges are specified (the default), the datalogger will not apply any routing restrictions. "State changing" message types include set variable, table reset, file control send file, set settings, and revert settings. For example, if this setting was set to a value of (4094, 4094, 1, 10), the datalogger would only process or forward "state changing" messages that originated from address 4094 and were destined to an address in the range between one and ten. This is displayed and parsed using the following formal syntax: route-filters := { "(" source-begin "," source-e dest-begin "," dest-end ")" }. source-begin := uint2. ; 1 < source-begin <= 40 source-end := uint2. ; source-begin <= source-en dest-begin := uint2. ; 1 < dest-begin <= 4094 dest-end := uint2. ; dest-begin <= dest-end <= Baud Rate RS232 ME SDC7 SDC8 SDC10 SDC11 COM1 COM2 This setting governs the baud rate that the datalogger will use for a given port to support PakBus or PPP communications. For some ports (COM1 through COM2), this setting also controls whether the port is enabled for PakBus or PPP communications. Some ports (RS-232 and CS I/O ME) support auto-baud synchronization while the other ports support only fixed baud. With auto-baud synchronization, the datalogger will attempt to match the baud rate to the rate used by another device based upon the receipt of serial framing errors and invalid packets. This setting, in units of seconds, governs the rate at which the datalogger will broadcast PakBus messages on the associated port in order to discover any new PakBus neighboring nodes. It will also govern the default verification interval if the value of the Verify Interval XXX setting for the associated port is zero. Default Baud 115200 Auto 115200 Auto 0 0 0 0 Disabled Disabled Default Entry

Beacon Interval RS232 ME SDC7 SDC8 SDC10 SDC11 COM1 COM2

Verify Interval RS232 ME SDC7 SDC8 SDC10 SDC11 COM1 COM2

This setting specifies the interval, in units of seconds, that is reported as the link verification interval in the PakBus hello transaction messages. It will indirectly govern the rate at which the datalogger will attempt to start a hello transaction with a neighbor if no other communication has taken place within the interval.

447

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting Neighbors Allowed RS232 ME SDC7 SDC8 SDC10 SDC11 COM1 COM2 Description This setting specifies, for a given port, the explicit list of PakBus node addresses that the datalogger will accept as neighbors. If the list is empty (the default value) any node is accepted as a neighbor. This setting will not effect the acceptance of a neighbor if that neighbor's address is greater than 3999. The formal syntax for this setting follows: neighbor := range-begin := range-end := pakbus-address { "(" range-begin "," range-end " pakbus-address. ; pakbus-address. := number. ; 0 < number < 4000 Default Entry

If more than 10 neighbors are in the allowed list and the beacon interval is 0, the beacon interval is changed to 60 seconds and beaconing is used for neighbor discovery instead of directed hello requests that consume comms memory. Central Routers This setting specifies a list of up to eight PakBus addresses for routers that are able to work as Central Routers. By specifying a non-empty list for this setting, the datalogger is configured as a Branch Router meaning that it will not be required to keep track of neighbors of any routers except those in its own branch. Configured in this fashion, the datalogger will ignore any neighbor lists received from addresses in the central routers setting and will forward any messages that it receives to the nearest default router if it does not have the destination address for those messages in its routing table. Each entry in this list is expected to be formatted with a comma separating individual values.

448

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting Routes Description This read-only setting lists the routes in the case of a router, or the router neighbors in the case of a leaf node, that were known to the datalogger at the time the setting was read. Each route is represented by four components separated by commas and enclosed in parentheses: (port, via neighbor adr, pakbus adr, response time) Descriptions of components: Default Entry (1, 4089, 4089, 1000)

Port
Specifies a numeric code for the port the router will use:

Port Description
ComRS232 ComME ComSDC6 (Com310) ComSDC7 ComSDC8 ComSDC9 (Com320) ComSDC10 ComSDC11 Com1 Com2

Numeric Code
1 2 3 4 5 6 7 8 9 10

IP*

101,102,

*If the value of the port number is 101, the connection is made through PakBus/TCP, either by the datalogger executing a TCPOpen() instruction or by having a connection made to the PakBus/TCP logger service. Via Neighbor Address Specifies address of neighbor/router to be used to send messages for this route. If the route is for a neighbor, this value is the same as the address. PakBus Address For a router, specifies the address the route reaches. If a leaf node, this is 0. Response Time For a router, specifies amount of time (in milli-seconds) that is allowed for the route. If a leaf node, this is 0. USR: Drive Size Specifies the size in bytes allocated for the "USR:" ram disk drive. 0

449

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting Files Manager Description FilesManager := { "(" pakbus-address "," name-prefix "," number-files ")" }. pakbus-address := number. ; 0 < number < 4095 name-prefix := string. number_files := number. ; 0 <= number < 10000000 Default Entry

This setting specifies the numbers of files of a designated type that are saved when received from a specified node. There can be up to 4 such settings. The files are renamed by using the specified file name optionally altered by a serial number inserted before the file type. This serial number is used by the datalogger to know which file to delete after the serial number exceeds the specified number of files to retain. If the number of files is 0, then the serial number is not inserted. A special node PakBus address of 3210 can be used if the files are sent via FTP protocol, or 3211 if the files are written via CRBASIC. Note that this setting will operate only on a file whose name is not a null string. Example: (129,CPU:NorthWest.JPG,2)

(130,CPU:Message.TXT,0) In the example above, *.JPG files from node 129 are named CPU:NorthWestnnn.JPG and 2 files are retained. The nnn serial number starts at 1 and will advance beyond 9 digits. In this example, all *.TXT files from node 130 are stored with the name CPU:Message.Txt, with no serial number inserted.

A second instance of a setting can be configured using the same node PakBus address and same file type, in which case two files will be written according to each of the two settings. For example, (55,USR:photo.JPG,100) (55:USR:NewestPhoto.JPG,0) will store two files each time a JPG file is received from node 55. They will be named USR:photonnn.JPG and USR:NewestPhoto.JPG. This feature is used when a number of files are to be retained, but a copy of one file whose name never changes is also needed. The second instance of the file can also be serialized and used when a number of files are to be saved to different drives.

Entering 3212 as the PakBus address activates storing IP Trace information to a file. The "number of files" parameter specifies the size of the file. The file is a ring file, so the newest tracing is kept. The boundary between newest and oldest is found by looking at the time stamps of the tracing. Logged information may be out of sequence. Example: (3212, USR:IPTrace.txt, 5000) This syntax will create a file on the user drive called IPTrace.txt that will grow to approximately 5 KB in size, and then new data will begin overwriting old data.

450

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting Include File Name Description This setting specifies the name of a file to be implicitly included at the end of the current CRBASIC program or can be run as the default program. This setting must specify both the name of the file to run as well as on the device (CPU:, USR:, USB:, ) on which the file is located. The extension of the file must also be valid for a datalogger program (.dld, .cr1 (CR1000), .cr3 (CR3000), or .cr8 (CR800 Series)). Consider the following example: CPU:pakbus_broker.dld The rules used by the datalogger when it starts are as follows: Default Entry

1. If the logger is starting from power-up, any file that is marked as the run on power-up program is the "current program". Otherwise, any file that is marked as run now is selected. This behavior has always been present and is not affected by this setting. 2. If there is a file specified by this setting, it is incorporated into the program selected above. 3. If there is no current file selected or if the current file cannot be compiled, the datalogger will run the program given by this setting as the current program. 4. If the program run by this setting cannot be run or if no program is specified, the datalogger will attempt to run the program named default.CR8 on its CPU: drive. 5. If there is no default.CR8 file or if that file cannot be compiled, the datalogger will not run any program.
The datalogger will now allow a SlowSequence statement to take the place of the BeginProg statement. This feature allows the specified file to act both as an include file and as the default program. The formal syntax for this setting follows: include-setting := device-name ":" file-name "." device-name := "CPU" | "USR" File-extension := "dld" | "CR8" Max Packet Size RS232 Always On Specifies the maximum number of bytes per data collection packet. Controls whether the RS-232 port will remain active even when communication is not taking place. Note that if RS-232 handshaking is enabled (handshaking buffer size is non-zero), that this setting must be set to yes If non zero, hardware handshaking is active on the RS-232 port. This setting specifies the maximum packet size sent between checking for CTS. For RS-232 hardware handshaking, this specifies in tens of milliseconds the timeout that the datalogger will wait between packets if CTS is not asserted. 1000 No

RS232 Hardware Handshaking Buffer Size RS232 Hardware Handshaking Timeout

451

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting Ethernet IP Address Description Specifies the IP address for the Ethernet Interface. If specified as zero, the address, net mask, and gateway are configured automatically using DHCP. This setting is made available only if an ethernet link in connected. Specifies the subnet mask for the Ethernet interface. This setting is made available only if an ethernet link in connected. Specifies the address of the IP router to which the datalogger will forward all non-local IP packets for which it has no route. This setting specifies the addresses of up to two domain name servers that the datalogger can use to resolve domain names to IP addresses. Note that if DHCP is used to resolve IP information, the addresses obtained via DHCP are appended to this list. This setting controls which datalogger port PPP service is configured to use. Warning: If this value is set to CS I/O ME, you must not attach any other devices to the CS I/O port PPP IP Address Specifies the IP address that is used for the PPP interface if that interface is active (the PPP Interface setting needs to be set to something other than Inactive). The syntax for this setting is nnn.nnn.nnn.nnn. A value of 0.0.0.0 or an empty string will indicate that DHCP must be used to resolve this address as well as the subnet mask. Reserved PPP User Name PPP Password This field reserved. Do not edit. Specifies the user name that is used to log in to the PPP server. Specifies the password that is used to log in to the PPP server when the PPP Interface setting is set to one of the client selections. Also specifies the password that must be provided by the PPP client when the PPP Interface setting is set to one of the server selections. Specifies the dial string that would follow ATD (e.g., #777 for Redwing CDMA) or a list of AT commands separated by ';' (e.g., ATV1;AT+CGATT=0;ATD*99***1#) that are used to initialize and dial through a modem before a PPP connection is attempted. A blank string indicates that no dialing will take place and will configure the datalogger to "listen" for PPP connections (basically to act as a server). A value of "PPP" will indicate to the datalogger that no modem dialing should take place but that it should PPP communication. Specifies the response expected after dialing a modem before a PPP connection can be established. This setting specifies the TCP service port for PakBus communications with the datalogger. Unless firewall issues exist, this setting probably does not need to be changed from its default value. This setting will be effective only if the PPP service is enabled using a PPP compatible network link. CONNECT 6785 0.0.0.0 Default Entry 0.0.0.0

Ethernet Subnet Mask Default Gateway Name Servers

255.255.255.0 0.0.0.0 0.0.0.0 0.0.0.0

PPP Interface

Inactive

PPP Dial

PPP Dial Response PakBus/TCP Service Port

452

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting PakBus/TCP Client Connections Description This setting specifies outgoing PakBus/TCP connections that the datalogger should maintain. Up to four addresses can be specified. An example specifying two connections follows: (192.168.4.203, 6785) (JOHN_DOE.server.com, 6785) The following is a formal syntax of the setting: TCP Connections := 4{ address_pair }. address_pair := "(" address "," tcp-port ")". address := domain-name | ip-address. PakBus/TCP Password Can be up to 31 characters in length. When active (not blank), a log in process using an MD5 digest of a random number and this password must take place successfully before PakBus communications can proceed over an IP socket. The default setting is not active. Configures the TCP port on which the HTTP (web server) service is offered. Generally the default value is sufficient unless a different value needs to be specified in order to accommodate port mapping rules in a network address translation firewall. Configures the TCP port on which the FTP service is offered. Generally the default value is sufficient unless a different value needs to be specified in order to accommodate port mapping rules in a network address translation firewall. Specifies the user name that is used to log in to the FTP server. An empty string (the default) inactivates the FTP server. Specifies the password that is used to log in to the FTP server. Set to one if the ICMP ping service should be enabled. This service is disabled by default. Set to one if the FTP service should be enabled. This service is disabled by default Set to one if the Telnet service should be enabled. This service is disabled by default. Specifies the password that is used to decrypt the private key file. Reserved Specifies the file name for the x509 certificate in PEM format. Specifies the file name for the private key in RSA format. Specifies the password that is used to decrypt the private key file. This setting specifies whether, and on what port TCP/IP trace information is sent. The type of information that is sent is controlled by the IP Trace Code setting. Inactive 80 Default Entry

HTTP Service Port

FTP Service Port

21

FTP User Name

anonymous

FTP Password Ping Enabled FTP Enabled Telnet Enabled Transport Layer Security (TLS) Enabled Reserved TLS Certificate File Name TLS Private Key File Name TLS Private Key Password IP Trace COM Port

* 1 1 1 0 0

453

Appendix B. Status Table and Settings

TABLE 92. CR800 Settings


Settings are accessed through Campbell Scientific's Device Configuration Utility (DevConfig) for direct serial connection, or through PakBusGraph for most telecommunications options. Setting IP Trace Code Description This setting controls what type of information is sent on the port specified by IP Trace Port and via Telnet. Useful values are: 0 Trace is inactive 1 Startup and watchdog only 2 Verbose PPP 4 Print general informational messages 16 Display net interface error messages 256 Transport protocol (UDP/TCP/RVD) trace 8192 FTP trace 65535 Trace everything TCP/IP Info Currently DHCP assigned addresses, Domain Name Servers, etc. MAC: 00d02c042ccb eth IP: 192.168.1.99 eth mask: 255.255.240.0 eth gw: 192.168.2.19 dns svr1: 192.168.2.25 dns svr2: 192.168.2.16 0 Default Entry

454

Appendix C. Serial Port Pin Outs


C.1 CS I/O Communications Port
Pin configuration for the CR800 CS I/O port is listed in TABLE. CS I/O Pin Description (p. 455). TABLE 93. CS I/O Pin Description ABR: Abbreviation for the function name. PIN: Pin number. O: Signal Out of the CR800 to a peripheral. I: Signal Into the CR800 from a peripheral.
PIN 1 2 3 4 5 6 ABR 5 Vdc SG RING RXD ME SDE I I O O O I/O Description 5V: Sources 5 Vdc, used to power peripherals. Signal Ground: Provides a power return for pin 1 (5V), and is used as a reference for voltage levels. Ring: Raised by a peripheral to put the CR800 in the telecommunications mode. Receive Data: Serial data transmitted by a peripheral are received on pin 4. Modem Enable: Raised when the CR800 determines that a modem raised the ring line. Synchronous Device Enable: Used to address Synchronous Devices (SDs), and can be used as an enable line for printers. Clock/Handshake: Used with the SDE and TXD lines to address and transfer data to SDs. When not used as a clock, pin 7 can be used as a handshake line (during printer output, high enables, low disables).

CLK/HS

I/O

8 9

+12 Vdc TXD O Transmit Data: Serial data are transmitted from the CR800 to peripherals on pin 9; logic low marking (0V) logic high spacing (5V) standard asynchronous ASCII, 8 data bits, no parity, 1 start bit, 1 stop bit, 300, 1200, 2400, 4800, 9600, 19,200, 38,400, 115,200 baud (user selectable).

C.2 RS-232 Communications Port


C.2.1 Pin-Out
Pin configuration for the CR800 RS-232 9-pin port is listed in TABLE. CR800 RS-232 Pin-Out (p. 456). Information for using a null modem with the RS-232 9-pin port is given in TABLE. Standard Null Modem Cable or Adapter Pin Connections (p. 457). The Datalogger RS-232 port can function as either a DCE (Data Communication Equipment) or DTE (Data Terminal Equipment) device. For the

455

Appendix C. Serial Port Pin Outs Datalogger RS-232 port to function as a DTE device, a null modem cable is required. The most common use of the Datalogger's RS-232 port is a connection to a computer DTE device. A standard DB9-to-DB9 cable can connect the computer DTE device to the Datalogger DCE device. The following table describes the Datalogger's RS-232 pin function with standard DCE naming notation. Note that pins 1, 4, 6 and 9 function differently than a standard DCE device, this is to accommodate a connection to a modem or other DCE device via a null modem. TABLE 94. CR800 RS-232 Pin-Out PIN: Pin number O: Signal Out of the CR800 to a RS-232 device I: Signal Into the CR800 from a RS-232 device X: Signal has no connection (floating)
PIN 1 2 3 4 5 6 7 8 9 DCE Function DCD TXD RXD DTR GND DSR CTS RTS RI Logger Function DTR (tied to pin 6) TXD RXD N/A GND DTR CTS RTS RI O* O I X* GND O* I O I* I/O Description Data Terminal Ready Asynchronous data Transmit Asynchronous data Receive Not Connected Ground Data Terminal Ready Clear to send Request to send Ring

*Different pin function compared to a standard DCE device. These pins will accommodate a connection to modem or other DCE devices via a null modem cable.

C.2.2

Power States
The RS-232 port is powered under the following conditions: 1) when the setting RS232Power is set or 2) when the SerialOpen for COMRS232 is used in the program. These conditions leave the RS-232 port on with no timeout. If SerialClose is used after SerialOpen then the port is powered down and left in a sleep mode waiting for characters to come in. Under normal operation, the port is powered down waiting for input. Upon receiving input there is a 40 second software timeout before shutting down. The 40 second timeout is generally circumvented when communicating with LoggerNet / PC400 / RTDAQ / PC200W because it sends information as part of the protocol that lets the CR800 know it can shut down the port. When in sleep mode, hardware is configured to detect activity and wake up. Sleep mode has the penalty of losing the first character of the incoming data stream. PakBus takes this into consideration in the "ring packets" that are preceded with extra sync bytes at the start of the packet. SerialOpen leaves the interface powered up so no incoming bytes are lost.

456

Appendix C. Serial Port Pin Outs When the logger has data to send via the RS-232 port, if the data are not a response to a received packet, such as sending a beacon, then it will power up the interface, send the data, and return to sleep mode with no 40 second timeout. TABLE 95. Standard Null Modem Cable or Adapter Pin Connections*
DB9 pin 1 & 6 pin 2 pin 3 pin 4 pin 5 pin 7 pin 8 pin 9 ---------------------------------------------------------------XXXXX pin 4 pin 3 pin 2 pin 1 & pin 6 pin 5 pin 8 pin 7 pin 9 (Most null modems have NO connection) DB9

* If the null modem cable does not connect pin 9 to pin 9, then the modem will need to be configured to output a RING (or other characters previous to the DTR being asserted) on the modem's TX line to wake the datalogger and activate the DTR line or enable the modem.

457

Appendix C. Serial Port Pin Outs

458

Appendix D. ASCII / ANSI Table


American Standard Code for Information Interchange (ASCII) / American National Standards Institute (ANSI) Decimal and Hexadecimal Codes and Characters Used with CR800 Tools
Keyboard Display Char HyperTerminal Char NULL ht lf lf vt ff cr cr Keyboard Display Char HyperTerminal Char ' ' " " Pt

Dec 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 0 1 2 3 4 5 6 7 8 9 a b c d e f

Hex

LoggerNet Char NULL

Dec 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155

Hex 80 81 82 83 84 85 86 87 88 89 8a 8b 8c 8d 8e 8f 90 91 92 93 94 95 96 97 98 99 9a 9b 9c 9d 9e

LoggerNet Char

10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e

156 157 158

459

Appendix D. ASCII / ANSI Table

Dec 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Hex 1f 20 21 22 23 24 25 26 27 28 29 2a 2b 2c 2d 2e 2f 30 31 32 33 34 35 36 37 38 39 3a 3b 3c 3d 3e 3f 40 41 42 43 ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

Keyboard Display Char

LoggerNet Char

HyperTerminal Char

Dec 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 9f

Hex

Keyboard Display Char

LoggerNet Char

HyperTerminal Char

SP ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C

SP ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C

a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 aa ab ac ad ae af b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ba bb bc bd be bf c0 c1 c2 c3

@ A B C

460

Appendix D. ASCII / ANSI Table

Dec 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Hex 44 45 46 47 48 49 4a 4b 4c 4d 4e 4f 50 51 52 53 54 55 56 57 58 59 5a 5b 5c 5d 5e 5f 60 61 62 63 64 65 66 67 68 D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h

Keyboard Display Char D E F G H I J K L

LoggerNet Char

HyperTerminal Char D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h

Dec 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232

Hex c4 c5 c6 c7 c8 c9 ca cb cc cd ce cf d0 d1 d2 d3 d4 d5 d6 d7 d8 d9 da db dc dd de df e0 e1 e2 e3 e4 e5 e6 e7 e8

Keyboard Display Char

LoggerNet Char

HyperTerminal Char

M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h

461

Appendix D. ASCII / ANSI Table

Dec 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

Hex 69 6a 6b 6c 6d 6e 6f 70 71 72 73 74 75 76 77 78 79 7a 7b 7c 7d 7e 7f i j k l m n o p q r s t u v w x y z { | } ~

Keyboard Display Char i j k l

LoggerNet Char i j k l

HyperTerminal Char

Dec 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255

Hex e9 ea eb ec ed ee ef f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 fa fb fc fd fe ff

Keyboard Display Char

LoggerNet Char

HyperTerminal Char

m n o p q r s t u v w x y z { | } ~

m n o p q r s t u v w x y z { | } ~

462

Appendix E. FP2 Data Format


FP2 data are two byte big endian values. The FP2 data format is nearly equivalent to the low resolution data format in older array based Campbell Scientific dataloggers. Representing bits in each byte pair as ABCDEFGH IJKLMNOP, bits are described in TABLE. FP2 Data Format Bit Descriptions (p. 463). TABLE 96. FP2 Data Format Bit Descriptions
Bit A B, C D-P Polarity, 0 = +, 1 = Decimal locaters as defined in Table C-2 13 bit binary value, D being the MSB. Largest 13-bit magnitude is 8191, but CSI defines the largest allowable magnitude as 7999 Description

Decimal locaters can be viewed as a negative base 10 exponent with decimal locations as shown in TABLE. FP2 Decimal Locater Bits (p. 463). TABLE 97. FP2 Decimal Locater Bits
B 0 0 1 1 0 1 0 1 C XXXX. XXX.X XX.XX X.XXX Decimal Location

463

Appendix E. FP2 Data Format

464

Appendix F. Software
F.1 Starter Software
Short Cut, PC200W and VisualWeather (p. 466) are designed for novice integrators, but have features useful in advanced applications.

F.1.1

Short Cut
Short Cut utilizes an intuitive user interface to create CR800 program code for common measurement applications. It presents lists from which sensors, engineering units, and data output formats are selected. It supports by name most sensors sold by Campbell Scientific. It features "generic" measurement routines, enabling it to support many sensors from other manufacturers. Programs created by Short Cut are automatically well documented and produce examples of CRBASIC programming that can be used as source or reference code for more complex programs edited with CRBASIC Editor. Short Cut is included with PC200W, Visual Weather, PC400, RTDAQ, and LoggerNet and is available at no charge from the Campbell Scientific web site.

F.1.2

PC200W
PC200W is basic datalogger support software. It utilizes an intuitive interface to support direct serial communication to the CR800 via COM / RS-232 ports. It sends programs, collects data, and facilitates monitoring of digital measurement and process values. PC200W is available at no charge from the Campbell Scientific web site. TABLE 98. Starter Software
Software Short Cut PC200W Starter Software Compatibility PC, Windows PC, Windows Description Graphical user interfaced programming software. Basic datalogger support software (p. 417) for direct telecommunications connections. Datalogger support software (p. 465) specialized for weather and agricultural applications.

VisualWeather

PC, Windows

F.2

Datalogger Support Software


PC200W (p. 465), PC400, RTDAQ and LoggerNet provide increasing levels of power required for integration, programming, data retrieval and telecommunications applications. Datalogger support software for PDA and Linux applications are also available. Visual Weather is datalogger support software specialized for weather and agricultural applications.

465

Appendix F. Software

F.2.1

PC400
PC400 is a mid-level software suite. It includes CRBASIC Editor, point-topoint communications over several protocols, simple real-time digital and graphical monitors, and report generation. It does not support scheduled collection or multi-mode communication networks.

F.2.2

LoggerNet Suite
The LoggerNet suite features a client-server architecture that facilitates a wide range of applications and enables tailoring software acquisition to specific requirements.

F.2.3

RTDAQ
RTDAQ is targeted for industrial and other high-speed data acquisition applications.

F.2.4

PDA Software
PConnect Software supports PDAs with Palm Operating Systems. PConnectCE supports Windows Mobile and Pocket PC PDAs. Both support direct RS-232 connection to the CR800 for sending programs, collecting data, and digital realtime monitoring.

F.2.5

VisualWeather
Visual Weather supports weather stations. It is recommended in applications wherein the user requires minimal control over programming and the preconfigured display and reporting features. VisualWeather is highly integrated and easy to use. TABLE 99. Datalogger Support Software
Software PC200W Starter Software PC400 Compatibility PC, Windows PC, Windows Description Basic datalogger support software for direct connect. Mid-level datalogger support software. Supports single dataloggers over most telecommunications options. Top level datalogger support software. Supports datalogger networks. Advanced LoggerNet for large datalogger networks.

LoggerNet

PC, Windows

LoggerNet Admin

PC, Windows

466

Appendix F. Software

TABLE 99. Datalogger Support Software


Software LoggerNet Linux Linux Compatibility Description Includes LoggerNet Server for use in a Linux environments and LoggerNet Remote for managing the server from a Windows environment. Datalogger support software for industrial and real time applications. Datalogger support software specialized for weather and agricultural applications. Datalogger support software for Palm or Handspring PDA. Datalogger support software for handheld computers.

RTDAQ

PC, Windows

VisualWeather

PC, Windows

PConnect

Palm, Handspring, Palm OS 3.3 or later. handhelds running MS Pocket PC or Windows Mobile.

PConnectCE

F.3

LoggerNet Clients
TABLE 100. LoggerNet Client Software*
Software LoggerNet Remote LoggerNet Baler Description Enables administering to LoggerNet Admin via TCP/IP from a remote PC. Baler stores LoggerNet data into new files so that the data can be imported to a database or third-party analysis program. LoggerNetData generates displays of realtime or historical data, post-processes data files, and generates reports. It includes Split, RTMC, View Pro, and Data Filer. Feeds datalogger data into third-party OPCcompatible graphics packages. RTMC Pro is an enhanced version of the RTMC client. RTMC Pro provides additional capabilities and more flexibility, including multi-state alarms, email on alarm conditions, hyperlinks, and FTP file transfer. RTMCRT allows you to view and print multitab displays of real-time data. Displays are created in RTMC or RTMC Pro. RTMC Web Server converts real-time data displays into HTML files, allowing the displays to be shared via an Internet browser.

LoggerNetData

CSI OPC Server RTMC Pro

RTMCRT

RTMC Web Server

*LoggerNet Clients require that LoggerNet or RTDAQ (RTMC-based clients only) -purchased separately -- be running on a PC.

467

Appendix F. Software

F.4
F.4.1

Software Tools
Network Planner
Network Planner (p. 112) is a "drag and drop" application used in designing PakBus datalogger networks. The user interacts with Network Planner through a drawing canvas upon which are placed PCs and datalogger nodes. Links representing various telecommunications options are drawn between nodes. Activities to take place between the nodes are specified. Network Planner automatically specifies settings for individual devices and creates XML files for download to each device through DevConfig.

F.4.2

Device Configuration Utility (DevConfig)


Device Configuration Utility (DevConfig) is bundled with PC400, LoggerNet, and RTDAQ and can be downloaded, at no charge, from <www>. DevConfig is used to change device settings and update device operating systems.

F.4.3

Calibration Wizard
Used with field calibration (p. 211) functions FieldCal() (p. 214) and FieldCalStrain() (p. 220). Available as part of LoggerNet 4.0 or higher and RTDAQ.

F.4.4

PakBus Graph
A utility provided with LoggerNet software that maps and provides access to settings in an existing PakBus network. TABLE 101. Software Tools
Software Short Cut (p. 465) Compatibility PC, Windows Description Graphical user interfaced CR800 programming software. Useful for knocking out the basic structure of a measurement program that can then be edited with CRBASIC Editor. Available as part of the LoggerNet Suite. Assists in design of networks and configuration of network elements. Available at no cost from the Campbell Scientific website. Configures software and firmware settings in Campbell Scientific hardware.

Network Planner

PC, Windows

Device Configuration Utility (DevConfig)

PC, Windows

468

Appendix F. Software

F.5

Software Development Kits


TABLE 102. Software Development Kits
Software BMP5-SDK Compatibility PC, Windows Description Allows software developers to create custom software clients that support communications with one PakBus datalogger using an RS-232 or IP Port connection. Allows software developers to create custom client applications that communicate through a LoggerNet server with any datalogger supported by LoggerNet. Requires LoggerNet. Allows software developers to create custom client applications that communicate through a LoggerNet server with any datalogger supported by LoggerNet. Includes the complete LoggerNet Server DLL, which can be distributed with the custom client applications. Allows software developers to write Java applications to communicate with dataloggers.

LoggerNet-SDK

PC, Windows

LoggerNet Server-SDK

PC, Windows

JAVA-SDK

PC, Windows

469

Appendix F. Software

470

Appendix G. Sensors and Peripherals


Campbell Scientific sensors, power supplies, and peripherals expand the measurement and control capability of the CR800. Consult product literature at www.campbellsci.com or a Campbell Scientific applications engineer to determine what peripherals are most suited to particular applications. Listings below are not exhaustive and are current as of the manual publication date.

G.1 Sensors
Most electronic sensors will interface with the CR800. The following sensors are available from Campbell Scientific and are easily integrated into CR800 systems. Please contact Campbell Scientific for specific model numbers. TABLE 103. Sensors available from Campbell Scientific
Air Temperature Relative Humidity Barometric Pressure Conductivity Dissolved Oxygen Distance Duff Moisture Electrical Current Electric Field Fuel Moisture and Temperature Geographic Position Heat, Vapor, and CO2 Flux Leaf Wetness ORP / pH Precipitation Road Weather Soil Heat Flux Soil Temperature Soil Volumetric Water Content Soil Water Potential Solar Radiation Strain Surface Temperature Turbidity Water Level Water Quality Water Temperature Wind Speed / Wind Direction

G.2 Dataloggers
Other Campbell Scientific datalogging devices can be used in networks with the CR800. Data and control signals can pass from device to device with the CR800 acting as a master, peer or slave. Dataloggers communicate in a network via PakBus, Modbus, DNP3, RS-232, SDI-12, or CANbus (using SDM-CAN module).

G.3 Power Supplies


Several power supplies are available from Campbell Scientific to power the CR800.

471

Appendix G. Sensors and Peripherals

G.3.1

Battery / Regulator Combination


Read More! Information on matching power supplies to particular applications can be found in the Campbell Scientific Application Note "Power Supplies", available at www.campbellsci.com. TABLE 104. Battery / Regulator Combinations available from Campbell Sc
Model PS100 PS24 Description 12 Amp-Hour Rechargeable Battery & Regulator (requires primary source). 24 Amp-Hour Rechargeable Battery, Regulator and Enclosure (requires primary source).

G.3.2

Batteries
TABLE 105. Batteries available from Campbell Scientific
Model / Part Number BPALK BP12 Description D-Cell 12 Vdc Alkaline Battery Pack 12 Amp-Hour Sealed Rechargeable Battery (requires regulator & primary source). Includes mounting bracket for CSI enclosures. 24 Amp-Hour Sealed Rechargeable Battery (requires regulator & primary source). Includes mounting bracket for CSI enclosures.

BP24

G.3.3

Regulators
TABLE 106. Regulators available from Campbell Scientific
Model CH100 Description 12 Volt Charging Regulator (requires primary source)

G.3.4

Primary Power Sources


TABLE 107. Primary Power Sources available from Campbell Scientific
Model 9591 14014 SP5-L SP10 SP10R SP20 SP20R SP65 DCDC18R Description 18 Vac 1.2 Amp Wall Plug Charger (accepts 110 Vac mains power, requires regulator) 18 Vdc Wall Plug Charger (accepts 90-264 Vac mains power, requires regulator) 5-Watt Solar Panel (requires regulator) 10-Watt Solar Panel (requires regulator) 10-Watt Solar Panel (includes regulator) 20-Watt Solar Panel (requires regulator) 20-Watt Solar Panel (includes regulator) 65-Watt Solar Panel (includes regulator) 12 Vdc to 18 Vdc Boost Regulator (allows automotive supply voltages to recharge sealed rechargeable batteries)

472

Appendix G. Sensors and Peripherals

G.4 Enclosures (Peripherals)


TABLE 108. Enclosure available from Campbell Scientific
Model ENC10/12 ENC12/14 ENC14/16 ENC16/18 Description 10 inch x 12 inch Weather Tight Enclosure (will not house CR3000) 12 inch x 14 inch Weather Tight Enclosure 14 inch x 16 inch Weather Tight Enclosure 16 inch x 18 inch Weather Tight Enclosure

G.5 Analog Multiplexers


Analog multiplexers increase analog input capacity beyond the channels integral to the CR800. Excitation channels can also be multiplexed. TABLE 109. Analog Multiplexers available from Campbell Scientific
Model AM16/32B AM25T Description 64 Channels - Configurable for many sensor types 25 Channels - Designed for thermocouples & differential inputs

G.6 Relay Drivers


Relay drivers enable the CR800 to control large voltages. TABLE 110. Relay Drivers available from Campbell Scientific
Model A21REL-12 A6REL-12 SDM-CD8S SDM-CD16AC SDM-CD16S SDM-CD16D SW12V Description 4 relays driven by 4 control ports 6 relays driven by 6 control ports / manual override 8-Channel DC Relay Controller 16-Channel AC Relay Controller 16-Channel DC Relay Controller 16-Channel 0 or 5 V Output Module Single Switched 12V Control Circuit

473

Appendix G. Sensors and Peripherals

G.7 Digital I/O (Control Port) Expansion


Digital I/O expansion modules expand the number of channels for outputting or reading 5V logic signals. TABLE 111. Digital I/O Expansion Modules available from Campbell Scien
Model SDM-IO16 Description 16-Channel I/O Expansion Module

G.8 Continuous Analog Output (CAO) Modules


CAO modules enable the CR800 to output continuous adjustable voltages required for strip chart and variable control applications . TABLE 112. Continuous Analog Output (CAO) Modules available from Ca
Model SDM-AO4 SDM-CVO4 Description 4-Channel Continuous Voltage Output 4-Channel Continuous Voltage & Current Output

G.9 Pulse / Frequency Input Expansion Modules


These modules expand and enhance pulse and frequency input capability. TABLE 113. Pulse / Frequency Input Expansion Modules available from Ca
Model SDM-INT8 SDM-SW8A AVW200 Series LLAC4 Description 8-Channel Interval Timer 8-Channel Switch Closure Module 2-Channel Vibrating Wire Interface 4-Channel Low-Level AC Module

G.10 Serial Input / Output Peripherals


Serial I/O peripherals expand and enhance input capability and condition serial signals.

G.10.1 Serial Input Expansion Modules


TABLE 114. Serial Input Expansion Modules available from Campbell Sci
Model SDM-SIO1 Description Single-Channel Com Port Expansion Module. Uses CR800 Com port addresses Com32 - Com46. Generates true RS-232 or RS-485. 4-Channel Serial Data Interface Module

SDM-SIO4

474

Appendix G. Sensors and Peripherals

G.10.2 CS I/O Serial Interfaces


TABLE 115. CS I/O Serial Interfaces available from Campbell Scientific
Model SC32B SC105 SC929 SC-USB SC532A SC932A SC100 Description CS I/O to RS-232 Interface Module (optically isolated) CS I/O to RS-232 DCE Interface CS I/O to RS-232 Interface Cable (not optically isolated) CS I/O to USB Cable (optically isolated, SDC compatible) CS I/O Peripheral to RS-232 Interface CS I/O to RS-232 DCE Interface CS I/O to RS-232 Baud Rate Converter Interface

G.10.3 Serial Cables, Adaptors and Switches


TABLE 116. Serial Cables, Adaptors and Switches available from Campbe
Model 17394 SC12 SC12R-6 COMCBL2-L 10873 7026 14413 10871 15751 13657 18663 SDS122 17218 Description RS-232 to USB Cable (not optically isolated) Two-Peripheral Connector Cable for Dataloggers, 2 ft Robust Two-Peripheral Cable, 6 ft Weatherproof Cable, 9-pin Male to 9-pin Female RS-232, 9-pin Female to 9-Pin Male, 6 ft RS-232 Cable, 9-pin Female to 25-pin Male, 6 ft RS-232 Cable, 9-pin Male to 25-pin Female RS-232 Adapter, 9-pin Male to 25-pin Female RS-232 Adapter, 9-pin Female to 25-pin Male Null Modem Cable DB9 Female-to-Female, 6 ft Null Modem Cable, 9-pin Male to 9-pin Male, 1 ft Two-way Serial Data Switch RJ45 to RS-232 Adapter

G.11 Signal Conditioners


Signal conditioners modify or complete the output of a device to be compatible with the CR800.

475

Appendix G. Sensors and Peripherals

G.11.1 Resistive Bridge Modules


TABLE 117. Resistive Bridge Modules available from Campbell Scientific
Model 4WFB120 4WFB350 4WFB1K 3WHB10K 4WHB10K 4WPB100 4WPB1K Description 120 ohm 4-wire Full-Bridge TIM Module 350 ohm 4-wire Full-Bridge TIM Module 1 kohm 4-wire Full-Bridge TIM Module 10 kohm 3-wire Half-Bridge TIM Module 10 kohm 4-wire Half-Bridge TIM Module 100 ohm 4-wire PRT Bridge TIM Module 1 kohm 4-wire PRT Bridge TIM Module

G.11.2 Voltage Dividers


TABLE 118. Voltage Dividers available from Campbell Scientific
Model VDIV10:1 VDIV2:1 CVD20 0:1 Voltage Divider 2:1 Voltage Divider 6-Channel 20:1 Voltage Divider Description

G.11.3 Current Shunt Modules


TABLE 119. Current Shunt Modules available from Campbell Scientific
Model CURS100 Description 100 ohm Current Shunt Module

G.12 Terminal Strip Covers


Terminal strips cover a insulate input terminals when measuring thermocouples. TABLE 120. Terminal Strip Covers
Datalogger CR800 CR1000 CR3000 Terminal Strip Cover Part Number No cover available 17324 18359

476

Appendix G. Sensors and Peripherals

G.13 Telecommunications Hardware


G.13.1 Router and Leaf Node Hardware
TABLE 121. PakBus Leaf Node and Router Device Configuration
Network Device CR200 CR800 CR1000 CR3000 CR5000 LoggerNet NL100 NL115 NL120 MD485 RF401 CC640 SC105 SC32B SC932A COM220 COM310 SRM-5A
1

Description Datalogger Datalogger Datalogger Datalogger Datalogger Software Network Link Network 1 Link Network 1 Link Multidrop Radio Camera Serial Interface Serial Interface Serial Interface Telephone Modem Telephone Modem Short-haul Modem

PakBus Leaf Node

PakBus Router

PakBus Aware

Transparent

this network link not compatible with CR800 datalogger.

477

Appendix G. Sensors and Peripherals

G.13.2 Telecommunications Options


TABLE 122. CR800 Telecommunications Options
Destination Device / Portal PC / COM or USB PDA / COM Port PC / COM Port PC / COM Port PC / Network Card PC / COM Port PC / COM Port PC / COM Port PC / COM Port PDA / Infrared Port Satellite System Communications Path Direct Connect Direct Connect Digital Cellular Multidrop Ethernet / PPP Spread Spectrum RF Licensed Frequency RF Short-haul Telephone Land-line Telephone Infrared Satellite Transceiver Carrier RS-232 RS-232 800 MHz RF RS-485 IP2 900 MHz RF UHF VHF RF CCITT v.24 CCITT v.92 SIR RF CSI Model # SC32B, SC929, SCUSB PCONNECT RavenXXX MD485 , NL200 RF4XX RF3XX SRM-5A COM220 SC-IRDA ST-20, TX312, OmniSat-M

Audible Report Heads Up Display Digital Display Keyboard / Display

Land-line Telephone Direct Connect Direct Connect

Voice CS I/O CS I/O

COM310 DSP4 CD295

See Keyboard Displays (p. 478)

G.13.3 Keyboard Display


TABLE 123. Dataloggers and Compatible Keyboard Displays
Keyboard Displays are either integrated into the datalogger or communicate through the 9-pin CS I/O port Datalogger Model CR200 Series CR800 CR850 CR1000 CR3000 None CR1000KD Integrated Keyboard Display, CR1000KD CR1000KD Integrated Keyboard Display Compatible Keyboard Display

G.13.4 Network Links


TABLE 124. Network Links available from Campbell Scientific
Model RavenXXX Description PPP/IP key must be enabled to use CR800 IP stack

478

Appendix G. Sensors and Peripherals

G.14 Voltage Transient Suppressors


TABLE 125. Voltage Transient Suppressors available from Campbell Scien
Model 16980 14462 19553 16982 16981 6536 4330 SVP48 Description Surge Suppressor Kit for UHF/VHF Radios Surge Suppressor Kit for RF401 Radio & CR206 Datalogger Surge Suppressor Kit for RF450 Radio Surge Suppressor Kit for RF416 Radio & CR216 Datalogger Surge Suppressor Kit for GOES transmitters 4-Wire Surge Protector for SRM-5A 2-Wire Surge Protector for Land Line Telephone Modems General Purpose Multi-line Surge Protector

G.15 Mass Storage Devices


Campbell Scientific mass storage devices attach to the CR800 CS I/O port. TABLE 126. Mass Storage Devices available from Campbell Scientific
Model SC115 Description 2 Gigabyte Flash Memory Drive

G.16 Cameras
TABLE 127. Cameras available from Campbell Scientific
Model CC640 Digital Camera Description

479

Appendix G. Sensors and Peripherals

480

Appendix H. CF & Records Number


The number of records in a DataTable when a CardOut() instruction is used in a data table declaration is governed by these rules: 1. Both card memory and internal memory keep copies of data tables in binary TOB3 format. Collectable numbers of records for both card and internal memories are reported in DataRecordSize entries in the Status table. 2. In the table definitions advertised to datalogger support software (p. 465), the datalogger advertises the greater of the number of records recorded in the status table, if the tables are not fill and stop. 3. If either data area is flagged for fill and stop, then whichever area stops first causes all final data storage to stop, even if there is more space allocated in the non-stopped area, hence limiting the number of records to the minimum of the two areas if both are set for fill and stop. 4. When the CardOut instruction is present, whether or not a card is installed, the internal data table space is allocated a minimum of roughly 5K bytes so that there is at least a minimum buffer space for storing to the data to the card (which occurs in the background when the datalogger has a chance to copy data onto the card). Hence, for example, a data table consisting of 1 4 byte sample, not interval driven, 20 bytes per record, including the 16 byte tob3 header/footer, 258 records are allocated for the internal memory for any program that specifies less that 258 records, again only in the case that CardOut is present. Programs that specify more than 258 records report back what the user specified, and the number of records on the card specified by the user is always reported back as specified in the Status Table, with no minimum since it is not used for buffering as is the internal data table space. 5. When CardOut is used but the card is not present, 0 bytes are reported in the Status Table. 6. In both the internal memory and card data table spaces, about 2K bytes of extra space is allocated (about 100 extra records in the above example) so that for our ring memory we minimize the possibility of new data over writing the oldest data when LoggerNet tries to collect the oldest data at the same time. These extra records are not reported in the Status Table and are not reported to LoggerNet and therefore cannot be collected. The only interest the user might have would be the extra space allocated for the data table that comes out of the 4 Meg of memory in the typical dataloggers. 7. If the CardOut instruction is set for fill and stop, all the space reserved for records on the card is recorded before final data storage is stopped, including the extra 2K allocated to alleviate the conflict of storing the newest data while reading the oldest when the area is not fill and stop, i.e., is ringing around. Therefore, as long as the CPU does not stop earlier, or is ring and not fill and stop, then more records will be stored on the card than originally allocated, i.e., about 2K bytes worth of records, assuming no lapses. At the point final data storage is stopped, the datalogger recalculates the number of records, displays them in the Status Table, and

481

Appendix H. CF & Records Number advertises a new table definitions to LoggerNet. Further, if the table is storing relatively fast, there might be some additional records already stored in the CPU data table buffer before final data storage stops altogether, resulting in a few more records than advertised able to be collected. For example, on a CR800 -- storing a 4 byte value at a 10 msec rate, the CPU not fill and stop, the Card 500 records set to fill and stop -- after final data storage stopped, the Card had 603 records advertised in the Status Table (an extra 103 due to the extra 2K bytes allocated for ring buffering), but 608 records could be collected since it took 50 msec, or 5 records, to stop the CPU from storing its 5 records beyond when the card was stopped. 8. Note that only the Card will keep storing until all its records are filled; the CPU will stop when the user's specified number of records are stored. 9. Note that the O command in the terminal mode helps you see more precisely what the CPU and the Card are doing, actual size allocated, where they are at the present, etc.

482

Index
1
12 V Output 31 Time Zone 285 12 Volt Supply 89 APPENDIX. Continuous Analog Output (CAO) Modules 86 APPENDIX. CS I/O Serial Interfaces 79, 423 APPENDIX. Datalogger Support Software 100, 124, 290, 344, 350, 417, 465 APPENDIX. Device Configuration Utility (DevConfig) 445 APPENDIX. Digital I/O (Control Port) Expansion 12, 30 APPENDIX. Enclosures (Peripherals) 39, 389 APPENDIX. FP2 Data Format 263 APPENDIX. Keyboard Display 377, 417, 478 APPENDIX. Mass Storage Devices 34, 35, 335, 343 APPENDIX. Network Planner 349 APPENDIX. PC200W 465 APPENDIX. Power Supplies 31, 33, 87, 406 APPENDIX. Pulse / Frequency Input Expansion Modules 30, 73, 86 APPENDIX. Relay Drivers 84, 180 APPENDIX. Resistive Bridge Modules 67 APPENDIX. Router and Leaf Node Hardware 354 APPENDIX. Sensors 28 APPENDIX. Sensors and Peripherals 12, 83 APPENDIX. Serial Input / Output Peripherals 30, 32 APPENDIX. Serial Input Expansion Modules 80, 197 APPENDIX. Serial Port Pin Outs 32 APPENDIX. Short Cut 468 APPENDIX. Signal Conditioners 66, 86, 323, 325 APPENDIX. Software 33, 35, 40, 161, 343, 481 APPENDIX. Status Table and Settings 34, 369, 386, 390, 395, 398 APPENDIX. Telecommunications Hardware 36, 349, 357 APPENDIX. VisualWeather 465 APPENDIX. Voltage Transient Suppressors 39 Argos 208 ArgosData 208 ArgosDataRepeat 208 ArgosError 208 ArgosSetup 208 ArgosTransmit 208 Arithmetic 150 Arithmetic Function 185 Arithmetic Functions 151 Array 122, 149, 158, 424 asynchronous 429 Asynchronous Communication 11, 415 Attributes 342 Automatic Calibration 52

5
5 V Output 31 5 V Pin 455 5 V-Low 434 5 Volt Supply 89 50 Hz Rejection 55, 87

6
60 Hz Rejection 55, 87

A
A/D 415 Abbreviations 157 ac 415 ac Excitation 68, 89 ac Noise Rejection 55 ac Power 176 ac Sine Wave 8, 9, 72 Accuracy 3, 41, 48, 415, See 50 Hz Rejection Address 353, 354, 434, 446 Address - SDI-12 235 Address-- PakBus 446 Addressing - Modbus 371 Adjusting Charging Voltage 408, 409 Alternate Telecommunications 350 Amperage 90 Amperes (Amps) 415 Analog 6, 29, 415 Analog Control 86 Analog Input 6, 41 Analog Input Expansion 41, 83 Analog Input Range 41, 50 Analog Measurement 399 Analog Output 30, 41, 86, 173 Analog Sensor 80 AND Operator 183, 292 ANSI 415 APPENDIX. Accuracy, Precision, and Resolution 3, 415, 425, 426, 432 APPENDIX. Analog Multiplexers 47, 144 APPENDIX. ASCII / ANSI Table 263 APPENDIX. Cameras 34, 335 APPENDIX. CF & Records Number 138

483

Index Automatic Calibration Sequence 141 Automobile Power 88 AutoRange 50 Card Bytes Free 434 Card Status 434 Care 39, 389 Care and Maintenance 39 CE Compliance 41 Charging Circuit 409, 410 Charging Regulator with Solar Panel Test 407 Charging Regulator with Transformer Test 407 Circuit 79, 85 Client 230 CLK/HS Pin 455 Clock Accuracy 41 Clock Function 192 Clock Synchronization 14 Code 416 Coil 369 Collecting Data 21 COM Port Connection 13 Commands - SDI-12 233 Comment 116 Common Mode 44, 50 CommsMemFree(1) 437 CommsMemFree(2) 437 CommsMemFree(3) 437 Communication 13, 21, 36, 349, 350, 365, 402, 403 Communications Memory Free 403, 434 Communications Ports 434 CompactFlash 101, 343 Compile Errors 396, 398, 399 Compile Program 260 Compile Results 434 Concatenation 302 Conditional Compile 260, 261 Conditioning Circuit 79 Configuration 97 Configure Display 387 Configure HyperTerminal 277 Connection 4, 13, 29 Conserving Code Space 158 Constant 122, 129, 416 Constant - Predefined 129 Constant Conversion 152 Constant Declaration 163 Constants 163 Continuous Analog Out 86 Control 30, 86, 89, 168, 170 Control I/O 41, 416 Control Output Expansion 83 Control Outputs 30 Control Peripheral 83 Control Port 11, 73, 434 Conversion 152 CPU 334, 417 Drive 398 CPU Drive Free 434 cr 265

B
Background Calibration 52, 54, 60, 141, 434 Backup Battery 6, 40, 391 Baud 14, 97, 196, 206, 402 Baud Rate 195, 200, 208, 265, 266, 368, 415, 434, 446 Beacon 355, 416, 434, 446 Beginner Software 14, 16 Big Endian 265 Binary 416 Binary Control 84 Binary Format 118 Bit Shift 183 Bit Shift Operators 180, 292 Bitwise Comparison 292 Board Revision Number 434 BOOL8 124, 291, 416 Bool8 Data Type 126, 289, 292 Boolean 151, 400, 416 BOOLEAN Data Type 124, 416 Bridge 7, 65 Bridge - Quarter Bridge Shunt 223 Bridge Measurement 68, 89, 173 Bridge Resistance 173 Budget 87, 245, 246 Buffer Depth 434 Buffer Size 266 Burst 47, 169, 170 Burst Mode 293 Byte Translation 270

C
Cable Length 56, 80 CAL Files 211 Calibration 39, 52, 60, 80, 141, 212 Calibration -- Background 434 Error 434 Field 211 Field - Example 214 Field - Offset 216 Field - Slope / Offset 217 Field - Two-Point 213 Field - Zero 214 Field Calibration Slope Only 219 Functions 207 Manual Field Calibration 212 Single-Point Field Calibration 213 Calibration Functions 166 Callback 206, 226, 350, 416, 421 CAO 86

484

Index CR1000KD 38, 255, 377, 417 CR10X 136, 196, 276, 417 CR200 196 CR23X 196, 276 CR510 196, 276 CR800 Configuration 33 CR800 Specifications 48, 71, 73, 89 CRBASIC Editor 115 CRBASIC EXAMPLE. SDI-12 Sensor Setup 244 CRBASIC Program 14 CRBASIC Programming 116 CRBASIC Programming Instructions 34, 146 CS I/O Port 32, 417, 455 Current 90 Current Sourcing Limit 84, 89 Custom Display 381 Custom Menu 37, 38, 194 Custom Menus 377, 381 CVI 416 datalogger support software 3, 221, 230, 334, 335, 336, 340, 341, 342, 375, 411, 413, 419, 428, 444, 465 Datalogger Support Software 40, 417 Date 387 DC 417 DC Excitation 89 DCE 32, 417, 418, 424 Debugging 395 Declaration 122, 131, 161 Data Table 163 Declaration -- Modbus 370 Default.CR1 111 Default.CR8 File 109 Desiccant 39, 389, 418 DevConfig 33, 97, 418 Device Configuration 97 Device Map 358 DHCP 231, 418 Diagnosis - Power Supply 406 Diagnosis and Fix Procedures 405 Diagnostics 158, 171 Dial Sequence 139 Differential 6, 418 Digital 418 Digital I/O 11, 29, 41, 73, 84, 138, 174 Digital I/O Ports ( 89 Digital Register 369 Dimension 123, 418 Diode OR Circuit 88 Disable Variable 137, 138, 283, 399 DisableVar 283, 399 Display 37, 377 Display - Custom 381 DNP Variable 366 DNP3 37, 207, 264, 365 DNS 231, 418 Documentation 116 Drive USR 434, 446 DTE 32, 417, 418, 424 Duplex 265 Durable Setting 108

D
Data Acquisition System Data Acquisition System -- Components 3 Data Retrieval 3 Datalogger 3 Sensors 3, 28 Data bits 265 Data Collection 3, 21 Data Fill Days 434 Data Format 35 Data Monitoring 14, 21 Data Point 417 Data Preservation 342 Data Record Size 434 Data Retrieval 3, 35, 349 Data Storage 34, 35, 135, 164, 331, 341 Data Storage - Trigger 285 Data Table 14, 131, 133, 134, 156, 163, 305, 382 Access 203 header 154 Management 203 Modifier 163 Name 122 Names 434 Data Table Access and Management 156 Data Table Declarations 341 Data Type 124, 125, 151, 292 Bool8 289 Format 266 LONG 422 NSEC 424 UINT2 430 Data Types 137 Datalogger 3

E
Earth Ground 31, 91, 418 Edge Timing 11, 29, 74 Edit File 385 Edit Program 385 Editor 16 Editor - Short Cut 115 Email 204, 225 EMF 46 Enclosures 389 Engineering Units 419 Environmental Enclosures 389

485

Index Erase Memory 434 Error 46, 58, 399, 400, 403 Analog Measurement 48, 94, 399 Programming 399 Soil Temperature Thermocouple 94 ESD 31, 418, 419, 431 ESD Protection 91, 92, 93 Ethernet Settings 446 Evapotranspiration 166 Example Program 272, 277, 285 Excitation 89, 173, 419 Excitation Reversal 53 Execution 139 at Compile 167 Interval 142 Time 419 Exercise - Measuring a Thermocouple 70 Expression 148, 149, 151, 152, 155, 419 Expression - Logical 153 Expression - String 155 Expressions 148 Expressions with Numeric Data Types 247 Extended Commands -- SDI-12 243 External Memory Power-up 341, 342 External Power Supply 31 FileSize 201 Manager 446 Names 346 Fill and Stop Memory 331, 419 Final Data Storage 419 Final Data Storage (Output) Processing 138, 285 Final Data Storage Table 382 final storage 334, 340 Firmware 33 Fixed Voltage Range 50 Flag 127, 128, 370 Floating Point 150 Floating Point Arithmetic 149 Format - Numerical 118 Forward 1 Frequency 8, 9, 70, 72, 73 Frequency Resolution 75 SDI-12 Extended Commands 243 Extended Commands -- SDI-12 243 FTP 419 Full Bridge 7, 65 Full Duplex 420 Full Memory Reset 434, 446 Function Codes - Modbus 371

F
False 154 Field Calibration 80, 211 FieldCal 207, 214 Multiplier 218 Multiplier Only 220 Offset 217, 218 Zero 215 FieldCalStrain 207, 220, 222 Field Calibration of Linear Sensors (FieldCal) 80, 468 FieldCal() Demonstration Programs 68, 70, 220, 468 FieldCalStrain() Demonstration Program 70, 468 File Attributes 341 File Management 101, 105, 117, 201, 211, 341 Attributes 342 Control 341, 419 Display 384 FileClose 201 FileCopy 201 FileEncrypt 201 FileList 201 FileManage 201 FileMark 203 FileOpen 201 FileRead 201 FileReadLine 201 FileRename 201

G
Gain 48, 148, 149 Garbage 420 Gas-discharge Tubes 91 global variable 247, 420 Glossary 415 Glossary - Modbus 369 Glossary. modulo divide 290 GOES 209 GOESData 209 GOESGPS 209 GOESSetup 209 GOESStatus 209 Graphs 380 Ground Looping in Ionic Measurements 68 Grounding 31, 39, 91, 92, 420 Ground Loop 95 Ground Potential Error 94 Ground Reference Offset 54 Gypsum Block 68

H
Half Bridge 7, 65 Half Duplex 420 Handshake, Handshaking 420 Hello Exchange 420 Hello-message 355 Hello-request 355 Hertz 420

486

Index Hexadecimal 118 High-frequency 72, 73 Holding Register 369 HTML 229, 421 HTTP 226, 421 HTTPOut 204 Settings 446 Humidity 39, 389 AVW200 178 Battery 6, 32, 87, 171, 245, 391, 406, 434 BeginProg EndProg 168 BrFull 173 BrFull6W 173 BrHalf 173 BrHalf3W 173 BrHalf4W 173 Broadcast 197, 355 CalFile 201 Calibrate 207, 210 Call 168 CallTable 168 Ceiling 185 CheckPort 174 CheckSum 190 CHR 190 ClockChange 192 ClockReport 192, 197 ClockSet 192 Closed Interval 136 ComPortIsActive 171 Const 129, 163 ConstTable EndConstTable 163 COS 184 COSH 184 Covariance 165 CovSpa 187 CS110 176 CS110Shutter 176 CS616 176 CS7500 176 CSAT3 176 CWB100 178 CWB100Routes 178 CWB100RSSI 178 Data Read Restore 170 DataEvent 163 DataGram 197 DataInterval 135, 163 DataLong Read Restore 170 DataTable EndTable 134, 163 DaylightSaving 192 DaylightSavingUS 192 Delay 168 DewPoint 187 DHCPRenew 204 DialModem 206 DialSequence EndDialSequence 197 DialVoice 193 Dim 162, 418 DisplayMenu EndMenu 194 DisplayValue 194 DNP 207, 366 DNPUpdate 207, 366 DNPVariable 207

I
I/O Port 11 ID 101 IEEE4 124, 421 Include File 109, 446 Infinite 399 Information Services 162, 204, 225 Initiate Telecommunications 206, 226, 350, 421 Initiating Telecomms (Callback) 206 INMARSAT-C 210 Input and Excitation Reversal 46 Input Channel 6 Input Expansion Module 12 Input Limits 41, 44, 45, 51 Input Programming Basics 243, 270 Input Range 41, 50 Input Register 369 Input Reversal 53 Input/Output Instructions 421 Installation 4 Instruction 146 Instructions ABS 185 AcceptDataRecords 196 ACOS 184 ACPower 176 AddPrecise 188 Alias 120, 122, 130, 147, 162 AM25T 178 AND 183 AngleDegrees 161 ArgosData 208 ArgosDataRepeat 208 ArgosError 208 ArgosSetup 208 ArgosTransmit 208 ArrayIndex 201 ArrayLength 201 As 162 ASCII 190, 415 ASIN 184 ATN 184 ATN2 184 Average 165 AvgRun 188 AvgSpa 187

487

Index Do Loop 168 EC100 176 EC100Configure 176 EMailRecv 204 EMailSend 204 Encrypt 201 EndSequence 168 EQV 183 ESS 419 ESSInitialize 167 ESSVariables 162 EthernetPower 204 ETsz 166 ExciteV 173 Exit 168 EXP 185 FFT 165 FFTSpa 187 FieldCal 207, 214 FieldCalStrain 207, 220, 222 FieldNames 164 FileClose 201 FileCopy 201 FileEncrypt 201 FileList 201 FileManage 201 FileMark 203 FileOpen 201 FileRead 201 FileReadLine 201 FileRename 201 FileSize 201 FileTime 201 FileWrite 201 FillStop 163 FindSpa 201 FIX 185 FLOAT 124, 151, 152, 400, 420 Floor 185 For ... Next 168 FormatFloat 190 FormatLong 190 FP2 124, 420 FRAC 185 FTPClient 204 Function ... EndFunction 210 GetDataRecord 197 GetFile 197 GetRecord 203 GetVariables 197 GOESData 209 GOESGPS 209 GOESSetup 209 GOESStatus 209 GPS 176 HEX 190 HexToDec 190 Histogram 166 Histogram4D 166 HTTPOut 204 HydraProbe 176 If ... Then ... Else ElseIf ... EndIf 168 IfTime 192 IIF 183 IMP 183 Include 201 INSATData 210 INSATSetup 210 INSATStatus 210 InStr 190 InstructionTimes 171 INT 185 INTDV 185 IPRoute 204 IPTrace 204 IS 204 Left 190 Len 190 LevelCrossing 166 lf 265 LI7200 176 LI7700 176 LN or LOG 185 LoadFieldCal 207 LOG10 185 LONG 124, 151, 152, 400, 422 LowerCase 190 LTrim 190 Maximum 165 MaxSpa 187 Median 165 MemoryTest 171 MenuItem 194 MenuPick 194 Mid 190 Minimum 165 MinSpa 187 MOD 185 ModBusMaster 207, 370 ModBusSlave 207, 370 ModemCallback 206 ModemHangup ... EndModemHangup 206 Moment 165 Move 201 MoveBytes 195, 370 MovePrecise 167 MuxSelect 178 Network 197 NetworkTimeProtocol 204 NewFieldCal 207 NewFieldNames 162 NewFile 201

488

Index NOT 183 OmniSatData 209 OmniSatRandomSetup 209 OmniSatStatus 209 OmniSatSTSetup 209 OpenInterval 136, 163 OR 183 PakBusClock 192, 197 PanelTemp 171 PeakValley 165 PeriodAvg 174 PingIP 204 PipelineMode 161 PortGet 174 PortsConfig 174 PortSet 174 PPPClose 204 PPPOpen 204 PreserveVariables 162 PRT 187, 318 PRTCalc 187 Public 162, 426 PulseCount 174 PulseCountReset 167 PulsePort 174 PWM 174 PWR 185 RainFlow 166 Randomize 188 Read 170 ReadIO 174 ReadOnly 122, 162 RealTime 171, 192 RectPolar 185 Replace 190 ResetTable 203 Restore 170 Right 190 RMSSpa 187 RND 188 Round 185 Route 197 RoutersNeighbors 197 Routes 197, 446 RTrim 190 RunProgram 201 Sample 165 SampleFieldCal 165, 207 SampleMaxMin 165 SatVP 187 Scan ExitScan ContinueScan ... NextScan 168 SDI12Recorder 175 SDI12SensorResponse 175, 242 SDI12SensorSetup 175, 242 SDMAO4 178 SDMCAN 178 SDMCD16AC 178 SDMCD16Mask 178 SDMCVO4 178 SDMGeneric 178 SDMINT8 178 SDMIO16 178 SDMSIO4 178 SDMSpeed 178 SDMSW8A 178 SDMTrigger 178 SDMX50 178 SecsPerRecord 434 SecsSince1990 192 Select Case Case Case Is Case Else EndSelect 168 SemaphoreGet 170 SemaphoreRelease 170 SendData 197 SendFile 197 SendGetVariables 197 SendTableDef 197 SendVariables 197 SequentialMode 161 SerialBrk 195 SerialClose 195, 267 SerialFlush 195, 267 SerialIn 195, 267 SerialInBlock 195, 267 SerialInChk 195 SerialInRecord 195, 267 SerialOpen 195, 267 SerialOut 195, 267 SerialOutBlock 195, 267 SetSecurity 161 SetStatus 203 SGN 185 ShutDownBegin 170 ShutDownEnd 170 Signature 38, 171, 428 SIN 184 SINH 184 SlowSequence 143, 168, 428, 434 SortSpa 187 SplitStr 190 Sqr 185 StaticRoute 197 StationName 101, 122, 161, 434, 446 StdDev 165 StdDevSpa 187 StrainCalc 187 StrComp 190 STRING 124, 400, 429 Sub, Exit Sub, End Sub 161 SubMenu EndSubMenu 194 SubScan NextSubScan 144, 168

489

Index SW12 173 TableHide 136, 163 TableName.EventCount 203 TableName.FieldName 203 TableName.Output 203 TableName.Record 203 TableName.TableFull 203 TableName.TableSize 203 TableName.TimeStamp 203 TAN 184 TANH 184 TCDiff 172 TCPClose 204 TCPOpen 204 TCSe 172 TDR100 178 TGA 176 Therm107 176 Therm108 176 Therm109 176 TimedControl 178 TimeIntoInterval 192 Timer 192 TimerIO 174 TimeUntilTransmit 197 Totalize 165 TriggerSequence 168 Trim 190 UDPDataGram 204 UDPOpen 204 Units 122, 130, 162 UpperCase 190 VaporPressure 187 VibratingWire 174 VoiceBeg ... EndVoice 193 VoiceHangup 193 VoiceKey 193 VoiceNumber 193 VoicePhrases 193 VoiceSetup 193 VoiceSpeak 193 VoltDiff 172 VoltSE 172 WaitDigTrig 168 WaitTriggerSequence 168 WebPageBegin WebPageEnd 204 WetDryBulb 187 WhileWend 168 WindVector 166 WorstCase 203 WriteIO 174 XOR 183 InstructionTimes 171 Integer 152, 421 Integrated Processing 187 Integration 54, 55 Intermediate Memory 136 Intermediate Storage 421 Internal Battery 6, 40, 391 Interrupt 11 Interval Timing 74 Introduction 1 Inverse Format Registers - Modbus 371 Ionic Sensor 95 IP 225, 231, 421, 434 IP - Modbus 372 IP Address 421, 434, 446 IP Gateway 434 IP Information 446 IPTrace 204

K
Keyboard Display 37, 38, 194, 255, 377

L
LAN - PakBus 358 Lapse 135 Lead 56 Lead Length 80 Leaf Node 353, 354, 477 Lightning 4, 39, 91, 418 Lightning Protection 92 Lightning Rod 92 Line Continuation 116 Linear Sensor 80 Link Performance 357 Lithium Battery 6, 391, 434 Little Endian 265 local variable 247 Logger Control 108 Logic 155 Logical Expression 153, 155 Logical Expressions 148 Logical Operator 183 Long Lead 56 Loop 422 Loop Counter 422 Low 12 V Counter 434 Low-Level ac 72, 86 LSB 265

M
Main Scans 145 Maintenance 39, 389 Manage Files 446 Manager 446 Manual Organization 1 Manually Initiated 422 Marks and Spaces 265 Math 150, 180, 400

490

Index Mathematical Operation 150 Mathematical Operator 180 MD5 digest 422 ME Pin 455 MeasOff 52 Measurement Error 58 Instruction 146, 171 Op Codes 434 Peripheral 83 Sequence 48 Synchronizing 81 Time 434 Timing 48 Measurement and Control Peripherals 29 Measurement Inputs 306 Measurements 28, 87 Measurements and NAN 137 Memory 34, 158, 331 Conservation 135, 158, 271, 339 Memory Free 434 MemoryTest 171 Reset 340 Size 434 Memory and Final Data Storage 34 Menu - Custom 194, 255 Messages 434 Milli 422 Millivoltage Measurement 44 Modbus 37, 207, 231, 264, 368, 369, 370, 422 Modem Control 206 Modem Hangup Sequence 139 Modem/Terminal 423 Moisture 39, 389 Monitoring Data 14, 21 Mounting 4 MSB 265 Multi-meter 423 Multiplexers 83 Multiplier 148, 149 mV 423 NSEC Data Type 124, 126, 424 Null-modem 417, 418, 424 Numerical Format 118

O
Offset 48, 148, 149 Offset Voltage Compensation 60 Ohm 424 Ohms Law 424 OID 50 OMNISAT 209 OmniSatData 209 OmniSatRandomSetup 209 OmniSatStatus 209 OmniSatSTSetup 209 On-line Data Transfer 424 Op Codes 434 Open Input Detect 50, 51 Open Inputs 50 Operating System 99, 446 Operating Temperature Range 389 Operator 180, 183 Operators - Bit Shift 180 OR Diode Circuit 88 OR Operator 292 OS 99 OS Date 434 OS Signature 434 OS Version 434 Output 424 Output Array 424 Output Interval 424 OutputOpt 249 Processing -- Output 137, 164 Processing Instructions -- Output 424 Trigger -- Output 283 Output Interval 424 Output Processing Instructions 135, 164 Overrun 395, 434 Overview 27 Overview - Modbus 368 Overview - Power Supply 405

N
Names 148, 346 NAN 50, 283, 399, 423 Neighbor 354, 446 Neighbor Device 416, 423 Neighbor Filter 355 Network Planner 468 NIST 423 Node 423 Nodes 353 Noise 46, 54, 55, 56, 87 Nominal Power 32 Not-a-number 399

P
Packet Size 434, 446 PakBus 36, 196, 201, 357, 416, 423, 425, 477 PakBus Address 353, 354, 434, 446 PakBus Information 446 PakBus LAN 358 PakBus Network 354 PakBus Nodes 434, 446 PakBus Overview 353 PakBusClock 192, 197 PakBus Network 354

491

Index PakBus Overview 32, 36, 101, 196, 264, 350 Panel Temperature 434 Parameter 425 Parameter Type 147 Password 38, 446 PC Program 403 PC Support Software 40 PC200W 14 PCM 50 Peer-to-peer 201 Period Average 8, 29, 41, 78, 79, 174, 425 Peripheral 425 Peripheral Port 32 Peripherals 83 Piezometer 3, 28 Ping 231, 357, 425, 446 Pipeline Mode 89, 140, 141 Platinum Resistance Thermometer 187, 318 PLC 370 Poisson Ratio 425 Polar Sensor 95 Polarity 13 Polarity Reversal 53 Polarized Sensor 68 Port 11, 386 Port Settings 105 Power 31, 41, 88, 90 Budget 87, 245, 246 Power Consumption 87 Power Supply 6, 32, 87, 245, 405, 406 Requirement -- Power 87 Power Consumption 87 Power Requirements 87 Power Sources 31, 32, 88 Powering Sensor 88 Powering Sensors and Devices 31, 43 Power-up 343 PPP 204, 225 ppp Dial Response 434 ppp Dial String 434 PPP Information 446 ppp Interface 434 ppp IP Address 421, 434, 446 ppp Password 434 ppp Username 434 PPPClose 204 PPPOpen 204 Settings -- ppp 446 ppp Dial Response 434 Precision 3, 425 Predefined Constant 129 Preserve Data 117, 342 Preserve Settings 446 Preserving Data at Program Send 340, 342 Pressure Transducer 60 Primer 3 print device 426 Print Device 425 Print Peripheral 426 Priority 111, 139, 144 Probe 3, 28 Process Time 434 Processing 180 Processing - Integrated 187 Processing -- Output 137, 164 Processing - Spatial 187 Processing - Wind Vector 248 Processing Instructions 426 Processing Instructions -- Output 424 Processor 41 Program 33 Alias 130 Array 122 Compile Errors 396, 398, 399 Constant 129 Data Storage Processing Instruction 146 Data Table 131 Data Type 124 DataInterval() Instruction 135 DataTable() Instruction 134 Declaration 122, 131, 161 Dimension 123 Documenting 116 Execution 139 Expression 148, 149 Field Calibration 212 Floating Point Arithmetic 150 Instruction 146 Mathematical Operation 150 Measurement Instruction 146 Modbus 370 Multiplier 148 Name in Parameter 147 Offset 148 Output Processing 137 Parameter Type 147 Pipeline Mode 140 Program - Overrun 395, 434 Resource Library 211 Runtime Errors 396, 398, 399 Scan 142 Scan Priority 144 Sequential Mode 141 Signature 434 Slow Sequence 143 Structure 120 Subroutine 138, 247 SubScan 144 Task Priority 139 Timing 142 Unit 130 Variable 122

492

Index Program Control Instructions 426 Program Declarations 180 Program Editor 16 Program Errors 396, 398, 434 Program Example 59, 68, 110, 111, 116, 119, 123, 124, 127, 128, 129, 134, 138, 143, 147, 148, 149, 151, 152, 155, 156, 158, 183, 201, 215, 217, 218, 220, 222, 229, 258, 261, 286, 287, 288, 289, 292, 296, 305, 346, 358, 367, 373 Program Generator 16, 115 Program Name 434 Program Run Priorities 111 Programmed Settings 108 Programming 14, 33, 34, 58, 116 Capturing Events 317 Conditional Output 315 Groundwater Pump Test 311 Multiple Scans 310 Running Average 310, 327 Running Total 310 Scaling Array 314 Programming Resource Library 161 Protection 39 Protocols Supported 41 PT100 in 4 Wire Half Bridge 324, 325 Pull into Common Mode 50 Pulse 8, 11, 29, 174, 426 Pulse Count 41, 70 Pulse Count Reset 306 Pulse Input 9 Pulse Input Channels 73 Pulse Input Expansion 83 Pulse Input on Digital I/O Channels C1 - C4 174 Pulse Measurement 174 Pulse Sensor 81 Pulse Sensors 11 Reliable Power 87 Requirement -- Power 87 Reset 340, 434 Resistance 426 Resistive Bridge 7, 41, 65 Resistor 426 Resolution 41 Resolution -- Data Type 3, 426 Resolution -- Definition 3, 426 Resolution -- Edge Timing 29 Resolution -- Period Average 29 Retrieving Data 21 Retry 201 RevDiff 52 Reverse Polarity 13, 88 RevEx 52 Ring Line (Pin 3) 426 Ring Memory 331, 426 RING Pin 455 Ringing 427 RMS 427 Route Filter 446 Router 353, 354, 434, 446, 477 RS-232 10, 29, 41, 266, 402, 427, 434, 446 Port 32 Recording 79 Sensor 81, 262 RS-232 and TTL Recording 32 RTU 370 Running Average 310, 327 Running Total 310 Runtime 434 Runtime Errors 396, 398, 399 Runtime Signatures 434 RX 266 RX Pin 455

Q
Quarter Bridge 7, 65, 220 Quarter Bridge Shunt 223 Quarter Bridge Shunt (Option 13) 224 Quarter Bridge Zero 224 Quickstart Tutorial 1, 3, 115

S
Sample Rate 427 Satellite 208 SCADA 37, 207, 365, 368 Scan 41, 142 Scan (execution interval) 41, 427 Scan Interval 41, 142 scan time 136, 429 Scan Time 142, 427 Scientific Notation 118 SDE Pin 455 SDI-12 41, 175, 232, 235, 427 Command 234 Measurement 399 Recording 79 SDI-12 Extended Command 243 SDI12Recorder 175 SDI12SensorResponse 175, 242

R
Rain Gage 81 RC Resistor Shunt 222 Record Number 434 Recorder 3 Reference Voltage 94 Regulator 426 Relay 85 Relay Driver 84, 89 Relays 84

493

Index SDI12SensorSetup 175, 242 Sensor 81 SDI-12 Extended Commands 243 SDI-12 Recording 264 SDI-12 Sensor Support 79, 175, 264 SDI-12 Transparent Mode 237 SDM 11, 29, 427 SDMAO4 178 SDMCAN 178 SDMCD16AC 178 SDMCVO4 178 SDMINT8 178 SDMIO16 178 SDMSIO4 178 SDMSpeed 178 SDMSW8A 178 SDMTrigger 178 SDMX50 178 Security 38, 103, 434, 446 Seebeck Effect 428 Self-Calibration 39, 60, 144, 445 Semaphore (Measurement Semaphore) 145, 171 Send 428 Sensor 3, 28 Analog 6, 44 Bridge 65 Frequency 8 Period Average 8 Power 88 Pulse 8 Resistive Bridge 7 RS-232 10 Serial 10 Sine Wave 8 Square Wave 8 Support 3, 43 Voltage 44 Sequence 131 Sequence - Dial 139 Sequence - Incidental 139 Sequence - Modem Hangup 139 Sequence - Shut Down 139 Sequence - Web Page 139 Sequential Mode 89, 141 Serial 10, 29, 428 I/O 81, 195, 262 Input 262 Input Expansion 83 Number 434, 446 Port 264 Port Connection 13 Sensor 81 SerialBrk 195 SerialClose 195, 267 SerialFlush 195, 267 SerialIn 195, 267 SerialInBlock 195, 267 SerialInChk 195 SerialInRecord 195, 267 SerialOpen 195, 267 SerialOut 195, 267 SerialOutBlock 195, 267 Server 231 Serial I/O 79, 126, 171, 195 Serial Input / Output 79, 171, 195 Server 230 Set CR800 ID 101 Set Time and Date 387 Setting 101, 386 Durable 108 PakBus 387 Via CRBASIC 108 Settings 97, 446 Settings -- ppp 446 Settling Error 58 Settling Time 55, 56, 57, 58, 59, 60, 80 Short Cut 16 Shunt Calibration 224 Shunt Zero 224 Shut Down Sequence 139 SI Systme Internationale 428 Signal Conditioner 95 Signal Settling Time 56, 58, 80 Signature 99, 306, 434 Signatured Packet 36 Signatures 158 Sine Wave 8, 72 Single-ended 6, 428 Single-Ended Measurement 94 Skipped Records 434 Skipped Scan 135, 395, 428, 434 Skipped Slow Scan 434 Skipped System Scan 434 SkippedScan 143 Slope 148, 149 Slow Sequence Scans 61, 145 SMTP 231, 429 SNMP 230 SNP 429 Software 40 Software - Beginner 14, 16 Solar Panel 407 SP 266 Span 148, 149 Spark Gap 91 Spatial Processing 187 Specifications 41 Square Wave 8, 9, 72, 73, 74 SRAM 331, 334 Standard Deviation 253 Star 4 (*4) Parameter Entry Table 425 Start bit 266

494

Index Start Time 434 Start Up Code 434 Starter Software 14, 16 State 429 State Measurement 11 Status 386 Status Table 433, 434 Stop bits 266 Storage Media 331 Strain 68 Strain Calculation 68 String Command 190 String Expression 155 String Function 189 String Functions 300 String Operation 189, 300 String Operations 124, 126, 189, 339 Structure 334 Structure - Program 120 Subroutine 138, 247 Subroutines 138 SubScan 144 Support Software 429 Surge Protection 87, 91, 92 SW-12 Port 30, 41, 173, 434 Switch Closure 73, 74 Switched 12 V Port 30, 41, 173, 434 Switched Unregulated (Nominal 12 Volt) 83 synchronous 415 Synchronous 429 System Overview 1 System Signatures 39 system time 136, 427 System Time 142, 429 Systme Internationale 428 Temperature Range 389 Terminal Emulator 129, 411, 414 Terminal Input Module 86 Thermocouple 13 Thermocouple Measurement 94, 172 Throughput 430 Time 285, 387 Time Skew 65 Time Stamps 136 Time Zone 285 Timestamp 135, 285, 434 Timing 48 TIMs 86 TLL logic 430 TLS 403 Toggle 430 Transducer 3, 28, 60 Transformer 32, 409 Transient 31, 39, 87, 395, 418, 431 Trigger -- Output 283 Trigger Variable 283 Triggers 283 Trigonometric Function 184 TrigVar 283, 285 TrigVar and DisableVar - Controlling Data Output and Processing 135, 137 Troubleshooting 395 PakBus Network 356 Power Supply 406 Solar Panel 407 Troubleshooting -- NAN and INF 237 True 154 TTL 430 TTL Recording 79 Tutorial 3 Tutorial Exercise 13 TVS 87 TX 266 TX Pin 455

T
Table 14 table - data header 154 Table Overrun 395 TABLE. SDI-12 Sensor Setup -- Results 244 Task 140, 429 Task Priority 139 TCP 204, 225, 231 Information 446 Port 434 Settings 446 TCP/IP 226, 429 TCP/IP Information 446 TCPClose 204 TCPOpen 204 Telecomms and Data Retrieval 32, 35, 36, 262 Telecommunication 14, 21, 35, 36, 349, 350, 365 Telnet 230, 429 Telnet Settings 446

U
UDP 204 UINT2 124, 430 UPS 6, 32, 87, 430 USB Drive 101, 111, 335, 343 User Defined Functions 210 User Program 116, 432 Using the Keyboard Display 33, 37 USR 334 USR Drive 434, 446 USR Drive Free 434

495

Index

V
Vac 415, 431 Variable 122, 158, 431 Variable Array 123, 128, 422 Variable Declaration 162 Variable Management 201 Variable Modifier 162 Variable Out of Bounds 434 Vdc 417, 431 Vector 251, 253 Vehicle Power Connection 88 Verify Interval 434, 446 Vibrating Wire Input Module 86 Viewing Data 14, 21 Voice Modem 193 VoiceBeg ... EndVoice 193 VoiceHangup 193 VoiceKey 193 VoiceNumber 193 VoicePhrases 193 VoiceSetup 193 VoiceSpeak 193 Volt Meter 431 Voltage Measurement 44, 172 Volts 431

Warranty and Assistance 395, 398, 406, 407, 409, 410 Watchdog Errors 156, 333, 395, 398, 403, 431, 433, 434 Water Conductivity 68 Weather Tight 39, 431 Web Page 204 Web Page Sequence 139 Web Server 226 Wheatstone Bridge 7, 65 Wind Vector 166, 248, 251, 253 Processing 249 WindVector 166 Wireless Sensor Network 178 Wiring 4, 13, 29, 80 Wiring Panel 4, 13, 29 Writing Program 115

X
XML 431 XOR 183

Y
Y-intercept 148, 149

W
Warning Message 396

Z
Zero 224

496

CAMPBELL SCIENTIFIC COMPANIES


Campbell Scientific, Inc. (CSI) 815 West 1800 North Logan, Utah 84321 UNITED STATES www.campbellsci.com info@campbellsci.com Campbell Scientific Africa Pty. Ltd. (CSAf) PO Box 2450 Somerset West 7129 SOUTH AFRICA www.csafrica.co.za sales@csafrica.co.za Campbell Scientific Australia Pty. Ltd. (CSA) PO Box 444 Thuringowa Central QLD 4812 AUSTRALIA www.campbellsci.com.au info@campbellsci.com.au Campbell Scientific do Brazil Ltda. (CSB) Rua Luisa Crapsi Orsi, 15 Butant CEP: 005543-000 So Paulo SP BRAZIL www.campbellsci.com.br suporte@campbellsci.com.br Campbell Scientific Canada Corp. (CSC) 11564 - 149th Street NW Edmonton, Alberta T5M 1W7 CANADA www.campbellsci.ca dataloggers@campbellsci.ca Campbell Scientific Centro Caribe S.A. (CSCC) 300N Cementerio, Edificio Breller Santo Domingo, Heredia 40305 COSTA RICA www.campbellsci.cc info@campbellsci.cc Campbell Scientific Ltd. (CSL) Campbell Park 80 Hathern Road Shepshed, Loughborough LE12 9GX UNITED KINGDOM www.campbellsci.co.uk sales@campbellsci.co.uk Campbell Scientific Ltd. (France) 3 Avenue de la Division Leclerc 92160 ANTONY FRANCE www.campbellsci.fr info@campbellsci.fr Campbell Scientific Spain, S. L. Avda. Pompeu Fabra 7-9 Local 1 - 08024 BARCELONA SPAIN www.campbellsci.es info@campbellsci.es Campbell Scientific Ltd. (Germany) Fahrenheitstrasse13, D-28359 Bremen GERMANY www.campbellsci.de info@campbellsci.de

Please visit www.campbellsci.com to obtain contact information for your local US or International representative.

You might also like