Campbell Scientific CR1000 and Control CR1000 Measurement and Control System Operators Manual
Advertisement
Advertisement
Want to get going? Go to the Quickstart
section. Want to see notes pertaining to this preliminary manual release?
Go to Release Notes
.
CR1000 Measurement and
Control System
Preliminary for OS v.28: 4/13/15
C o p y r i g h t © 2 0 0 0 – 2 0 1 5
C a m p b e l l S c i e n t i f i c , I n c .
Warranty
The CR1000 Measurement and Control Datalogger is warranted for three (3) years subject to this limited warranty:
Limited Warranty: Products manufactured by CSI are warranted by CSI to be free from defects in materials and workmanship under normal use and service for twelve months from the date of shipment unless otherwise specified in the corresponding product manual. (Product manuals are available for review online at www.campbellsci.com.) Products not manufactured by CSI, but that are resold by CSI, are warranted only to the limits extended by the original manufacturer.
Batteries, fine-wire thermocouples, desiccant, and other consumables have no warranty. CSI's obligation under this warranty is limited to repairing or replacing
(at CSI's option) defective Products, which shall be the sole and exclusive remedy under this warranty. The Customer assumes all costs of removing, reinstalling, and shipping defective Products to CSI. CSI will return such Products by surface carrier prepaid within the continental United States of America. To all other locations, CSI will return such Products best way CIP (port of entry) per
Incoterms ® 2010. This warranty shall not apply to any Products which have been subjected to modification, misuse, neglect, improper service, accidents of nature, or shipping damage. This warranty is in lieu of all other warranties, expressed or implied. The warranty for installation services performed by CSI such as programming to customer specifications, electrical connections to Products manufactured by CSI, and Product specific training, is part of CSI's product warranty. CSI EXPRESSLY DISCLAIMS AND EXCLUDES ANY IMPLIED
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
PARTICULAR PURPOSE. CSI hereby disclaims, to the fullest extent allowed by applicable law, any and all warranties and conditions with respect to the Products, whether express, implied or statutory, other than those expressly provided herein.
3
Assistance
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) 227-2342. After an application 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
For all returns, the customer must fill out a "Statement of Product Cleanliness 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 [email protected] or faxed to 435-227-
9579. Campbell Scientific is unable to 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.
5
Precautions
DANGER — MANY HAZARDS ARE ASSOCIATED WITH INSTALLING,
USING, MAINTAINING, AND WORKING ON OR AROUND TRIPODS,
TOWERS, AND ANY ATTACHMENTS TO TRIPODS AND TOWERS SUCH
AS SENSORS, CROSSARMS, ENCLOSURES, ANTENNAS, ETC. FAILURE
TO PROPERLY AND COMPLETELY ASSEMBLE, INSTALL, OPERATE,
USE, AND MAINTAIN TRIPODS, TOWERS, AND ATTACHMENTS, AND
FAILURE TO HEED WARNINGS, INCREASES THE RISK OF DEATH,
ACCIDENT, SERIOUS INJURY, PROPERTY DAMAGE, AND PRODUCT
FAILURE. TAKE ALL REASONABLE PRECAUTIONS TO AVOID THESE
HAZARDS. CHECK WITH YOUR ORGANIZATION'S SAFETY
COORDINATOR (OR POLICY) FOR PROCEDURES AND REQUIRED
PROTECTIVE EQUIPMENT PRIOR TO PERFORMING ANY WORK.
Use tripods, towers, and attachments to tripods and towers only for purposes for which they are designed. Do not exceed design limits. Be familiar and comply with all instructions provided in product manuals. Manuals are available at www.campbellsci.com or by telephoning 435-227-9000 (USA). You are responsible for conformance with governing codes and regulations, including safety regulations, and the integrity and location of structures or land to which towers, tripods, and any attachments are attached. Installation sites should be evaluated and approved by a qualified engineer. If questions or concerns arise regarding installation, use, or maintenance of tripods, towers, attachments, or electrical connections, consult with a licensed and qualified engineer or electrician.
General
• Prior to performing site or installation work, obtain required approvals and permits. Comply with all governing structure-height regulations, such as those of the FAA in the USA.
• Use only qualified personnel for installation, use, and maintenance of tripods and towers, and any attachments to tripods and towers. The use of licensed and qualified contractors is highly recommended.
• Read all applicable instructions carefully and understand procedures thoroughly before beginning work.
• Wear a hardhat and eye protection, and take other appropriate safety precautions while working on or around tripods and towers.
• Do not climb tripods or towers at any time, and prohibit climbing by other persons. Take reasonable precautions to secure tripod and tower sites from trespassers.
• Use only manufacturer recommended parts, materials, and tools.
Utility and Electrical
• You can be killed or sustain serious bodily injury if the tripod, tower, or attachments you are installing, constructing, using, or maintaining, or a tool, stake, or anchor, come in contact with overhead or underground utility lines.
• Maintain a distance of at least one-and-one-half times structure height, or 20 feet, or the distance required by applicable law, whichever is greater, between overhead utility lines and the structure (tripod, tower, attachments, or tools).
7
8
• Prior to performing site or installation work, inform all utility companies and have all underground utilities marked.
• Comply with all electrical codes. Electrical equipment and related grounding devices should be installed by a licensed and qualified electrician.
Elevated Work and Weather
• Exercise extreme caution when performing elevated work.
• Use appropriate equipment and safety practices.
• During installation and maintenance, keep tower and tripod sites clear of untrained or non-essential personnel. Take precautions to prevent elevated tools and objects from dropping.
• Do not perform any work in inclement weather, including wind, rain, snow, lightning, etc.
Maintenance
• Periodically (at least yearly) check for wear and damage, including corrosion, stress cracks, frayed cables, loose cable clamps, cable tightness, etc. and take necessary corrective actions.
• Periodically (at least yearly) check electrical ground connections.
WHILE EVERY ATTEMPT IS MADE TO EMBODY THE HIGHEST
DEGREE OF SAFETY IN ALL CAMPBELL SCIENTIFIC PRODUCTS, THE
CUSTOMER ASSUMES ALL RISK FROM ANY INJURY RESULTING
FROM IMPROPER INSTALLATION, USE, OR MAINTENANCE OF
TRIPODS, TOWERS, OR ATTACHMENTS TO TRIPODS AND TOWERS
SUCH AS SENSORS, CROSSARMS, ENCLOSURES, ANTENNAS, ETC.
Table of Contents
1. Introduction ................................................................ 33
2. Cautionary Statements .............................................. 37
3. Initial Inspection ........................................................ 39
4. System Quickstart ..................................................... 41
4.1 Data-Acquisition Systems — Quickstart ............................................... 41
4.3.1.1 Wiring Panel — Quickstart ................................................. 43
4.4 Power Supplies — Quickstart ................................................................ 44
4.4.1 Internal Battery — Quickstart ...................................................... 45
4.5 Data Retrieval and Telecommunications — Quickstart ........................ 45
4.6 Datalogger Support Software — Quickstart........................................... 46
4.7 Tutorial: Measuring a Thermocouple ..................................................... 46
4.7.1 What You Will Need .................................................................... 46
4.7.2 Hardware Setup ............................................................................ 47
4.7.2.1 External Power Supply ........................................................ 47
4.7.3 PC200W Software Setup .............................................................. 48
4.7.4 Write CRBasic Program with Short Cut ....................................... 50
4.7.4.1 Procedure: (Short Cut Steps 1 to 5) ..................................... 50
4.7.4.2 Procedure: (Short Cut Steps 6 to 7) ..................................... 51
4.7.4.3 Procedure: (Short Cut Step 8) ............................................. 52
4.7.4.4 Procedure: (Short Cut Steps 9 to 12) ................................... 53
4.7.4.5 Procedure: (Short Cut Steps 13 to 14) ................................. 54
4.7.5 Send Program and Collect Data .................................................... 55
4.7.5.1 Procedure: (PC200W Step 1) .............................................. 55
4.7.5.2 Procedure: (PC200W Steps 2 to 4) ..................................... 55
4.7.5.3 Procedure: (PC200W Step 5) .............................................. 56
4.7.5.4 Procedure: (PC200W Step 6) .............................................. 57
4.7.5.5 Procedure: (PC200W Steps 7 to 10) ................................... 58
4.7.5.6 Procedure: (PC200W Steps 11 to 12) ................................. 59
4.7.5.7 Procedure: (PC200W Steps 13 to 14) ................................. 59
5. System Overview ....................................................... 61
5.1 Measurements — Overview ................................................................... 62
5.1.1 Time Keeping — Overview .......................................................... 63
5.1.2 Analog Measurements — Overview ............................................. 63
5.1.2.1 Voltage Measurements — Overview .................................. 63
5.1.2.1.1 Single-Ended Measurements — Overview................ 65
5.1.2.1.2 Differential Measurements — Overview ................... 66
5.1.2.2 Current Measurements — Overview ................................... 66
5.1.2.3 Resistance Measurements — Overview .............................. 67
5.1.2.3.1 Voltage Excitation ..................................................... 67
9
10
Table of Contents
5.1.2.4 Strain Measurements — Overview ..................................... 68
5.1.3 Pulse Measurements — Overview ................................................ 68
5.1.3.1 Pulses Measured .................................................................. 69
5.1.3.2 Pulse-Input Channels .......................................................... 69
5.1.3.3 Pulse Sensor Wiring ............................................................ 70
5.1.4 Period Averaging — Overview .................................................... 70
5.1.5 Vibrating-Wire Measurements — Overview ................................ 71
5.1.6 Reading Smart Sensors — Overview ........................................... 71
5.1.6.1 SDI-12 Sensor Support — Overview .................................. 72
5.1.6.2 RS-232 — Overview ........................................................... 72
5.1.7 Field Calibration — Overview ..................................................... 73
5.1.8 Cabling Effects — Overview ........................................................ 74
5.1.9 Synchronizing Measurements — Overview ................................. 74
5.2 PLC Control — Overview ...................................................................... 74
5.3.1 Time Keeping — Overview .......................................................... 75
5.3.2 Wiring Panel — Overview ........................................................... 76
5.3.2.1 Switched Voltage Output — Overview ............................... 78
5.3.2.2 Voltage Excitation — Overview ....................................... 79
5.3.2.3 Grounding Terminals .......................................................... 80
5.3.2.4 Power Terminals ................................................................. 80
5.3.2.4.1 Power In ..................................................................... 80
5.3.2.4.2 Power Out Terminals ................................................. 80
5.3.2.5 Communication Ports .......................................................... 81
5.3.2.5.1 CS I/O Port ................................................................ 81
5.3.2.5.2 RS-232 Ports .............................................................. 82
5.3.2.5.3 Peripheral Port ........................................................... 82
5.3.2.5.4 SDI-12 Ports .............................................................. 82
5.3.2.5.5 SDM Port ................................................................... 82
5.3.2.5.6 CPI Port ..................................................................... 82
5.3.2.5.7 Ethernet Port .............................................................. 83
5.3.3 Keyboard Display — Overview ................................................... 83
5.3.3.1 Character Set ....................................................................... 83
5.3.3.2 Custom Menus — Overview ............................................... 84
5.3.4 Measurement and Control Peripherals — Overview .................... 85
5.3.5 Power Supplies — Overview ........................................................ 85
5.3.6 CR1000 Configuration — Overview ............................................ 86
5.3.7 CRBasic Programming — Overview ............................................ 86
5.3.8 Memory — Overview ................................................................... 87
5.3.9 Data Retrieval and Telecommunications — Overview ................ 88
5.3.9.1 PakBus® Communications — Overview ............................ 88
5.3.9.2 Telecommunications ........................................................... 89
5.3.9.3 Mass-Storage Device .......................................................... 89
5.3.9.4 Memory Card (CRD: Drive) — Overview .......................... 89
5.3.9.5 Data-File Formats in CR1000 Memory ............................... 90
5.3.9.6 Data Format on Computer ................................................... 90
5.3.10 Alternate Telecommunications — Overview ............................. 90
5.3.10.1 Modbus .............................................................................. 91
5.3.10.2 DNP3 — Overview ........................................................... 91
5.3.10.3 TCP/IP — Overview ......................................................... 91
5.3.11 Security — Overview ................................................................. 92
5.3.12 Maintenance — Overview .......................................................... 93
Table of Contents
5.3.12.1 Protection from Moisture — Overview ............................ 93
5.3.12.2 Protection from Voltage Transients .................................. 94
5.3.12.3 Factory Calibration ........................................................... 94
5.3.12.4 Internal Battery — Details ................................................ 94
5.4 Datalogger Support Software — Overview ........................................... 95
6. Specifications ............................................................ 97
7. Installation .................................................................. 99
7.1 Protection from Moisture — Details ...................................................... 99
7.4 Power Supplies — Details ................................................................... 100
7.4.1 CR1000 Power Requirement ...................................................... 101
7.4.2 Calculating Power Consumption ................................................ 101
7.4.3 Power Sources ............................................................................ 101
7.4.3.1 Vehicle Power Connections .............................................. 102
7.4.4 Uninterruptable Power Supply (UPS) ......................................... 102
7.4.5 External Power Supply Installation ............................................ 103
7.5 Switched Voltage Output — Details .................................................... 103
7.5.1 Switched-Voltage Excitation ...................................................... 104
7.5.2 Continuous Regulated (5V Terminal) ......................................... 104
7.5.3 Continuous Unregulated Voltage (12V Terminal) ..................... 104
7.5.4 Switched Unregulated Voltage (SW12 Terminal) ...................... 105
7.6.1 ESD Protection ........................................................................... 105
7.6.1.1 Lightning Protection ......................................................... 107
7.6.2 Single-Ended Measurement Reference ....................................... 108
7.6.3 Ground-Potential Differences ..................................................... 109
7.6.3.1 Soil Temperature Thermocouple ....................................... 109
7.6.3.2 External Signal Conditioner .............................................. 109
7.6.4 Ground Looping in Ionic Measurements .................................... 109
7.7 CR1000 Configuration — Details ........................................................ 111
7.7.1 Configuration Tools .................................................................... 111
7.7.1.1 Configuration with DevConfig ......................................... 111
7.7.1.2 Network Planner ............................................................... 112
7.7.1.2.1 Overview ................................................................. 113
7.7.1.2.2 Basics ...................................................................... 114
7.7.1.3 Configuration with Status/Settings/DTI ............................ 114
7.7.1.4 Configuration with Executable CPU: Files ....................... 115
7.7.1.4.1 Default.cr1 File ........................................................ 116
7.7.1.4.2 Executable File Run Priorities ................................. 116
7.7.2 CR1000 Configuration — Details .............................................. 117
7.7.2.1 Updating the Operating System (OS) ................................ 117
7.7.2.1.1 OS Update with DevConfig Send OS Tab ............... 118
7.7.2.1.2 OS Update with DevConfig ..................................... 119
7.7.2.1.3 OS Update with DevConfig ..................................... 119
7.7.2.1.4 OS Update with DevConfig ..................................... 121
7.7.2.2 Restoring Factory Defaults ............................................... 122
7.7.2.3 Saving and Restoring Configurations ............................... 122
7.8 CRBasic Programming — Details ....................................................... 122
7.8.1 Program Structure ....................................................................... 123
11
12
Table of Contents
7.8.2 Writing and Editing Programs .................................................... 125
7.8.2.1 Short Cut Programming Wizard ........................................ 125
7.8.2.2 CRBasic Editor ................................................................. 125
7.8.2.2.1 Inserting Comments into Program ........................... 126
7.8.2.2.2 Conserving Program Memory ................................. 126
7.8.3 Sending CRBasic Programs ........................................................ 126
7.8.3.1 Preserving Data at Program Send ...................................... 127
7.8.4 Programming Syntax .................................................................. 128
7.8.4.1 Program Statements .......................................................... 128
7.8.4.1.1 Multiple Statements on One Line ............................ 128
7.8.4.1.2 One Statement on Multiple Lines ............................ 128
7.8.4.2 Single-Statement Declarations .......................................... 129
7.8.4.3 Declaring Variables ........................................................... 129
7.8.4.3.1 Declaring Data Types .............................................. 130
7.8.4.3.2 Dimensioning Numeric Variables ........................... 134
7.8.4.3.3 Dimensioning String Variables ................................ 134
7.8.4.3.4 Declaring Flag Variables ......................................... 135
7.8.4.4 Declaring Arrays ............................................................... 135
7.8.4.5 Declaring Local and Global Variables .............................. 136
7.8.4.6 Initializing Variables ......................................................... 137
7.8.4.7 Declaring Constants .......................................................... 137
7.8.4.7.1 Predefined Constants ............................................... 138
7.8.4.8 Declaring Aliases and Units .............................................. 138
7.8.4.9 Numerical Formats ............................................................ 139
7.8.4.10 Multi-Statement Declarations ......................................... 140
7.8.4.10.1 Declaring Data Tables ........................................... 140
7.8.4.10.2 Declaring Subroutines ........................................... 147
7.8.4.10.3 'Include' File .......................................................... 147
7.8.4.10.4 Declaring Subroutines ........................................... 150
7.8.4.10.5 Declaring Incidental Sequences ............................. 150
7.8.4.11 Execution and Task Priority ............................................ 151
7.8.4.11.1 Pipeline Mode ........................................................ 152
7.8.4.11.2 Sequential Mode .................................................... 153
7.8.4.12 Execution Timing ............................................................ 154
7.8.4.12.1 Scan() / NextScan .................................................. 154
7.8.4.12.2 SlowSequence / EndSequence ............................... 155
7.8.4.12.3 SubScan() / NextSubScan ...................................... 156
7.8.4.12.4 Scan Priorities in Sequential Mode ........................ 156
7.8.4.13 Programming Instructions ............................................... 158
7.8.4.13.1 Measurement and Data-Storage Processing ........... 158
7.8.4.13.2 Argument Types .................................................... 159
7.8.4.13.3 Names in Arguments ............................................. 159
7.8.4.14 Expressions in Arguments ............................................... 160
7.8.4.15 Programming Expression Types ..................................... 160
7.8.4.15.1 Floating-Point Arithmetic ...................................... 161
7.8.4.15.2 Mathematical Operations ....................................... 161
7.8.4.15.3 Expressions with Numeric Data Types .................. 162
7.8.4.15.4 Logical Expressions ............................................... 164
7.8.4.15.5 String Expressions ................................................. 166
7.8.4.16 Programming Access to Data Tables .............................. 167
7.8.4.17 Programming to Use Signatures ...................................... 169
7.9 Programming Resource Library ........................................................... 169
Table of Contents
7.9.1 Advanced Programming Techniques .......................................... 169
7.9.1.1 Capturing Events ............................................................... 169
7.9.1.2 Conditional Output ............................................................ 170
7.9.1.3 Groundwater Pump Test ................................................... 171
7.9.1.4 Miscellaneous Features ..................................................... 174
7.9.1.5 PulseCountReset Instruction ............................................. 177
7.9.1.6 Scaling Array .................................................................... 177
7.9.1.7 Signatures: Example Programs ......................................... 178
7.9.1.7.1 Text Signature ......................................................... 178
7.9.1.7.2 Binary Runtime Signature ....................................... 178
7.9.1.7.3 Executable Code Signatures .................................... 178
7.9.1.8 Use of Multiple Scans ....................................................... 179
7.9.2 Compiling: Conditional Code ..................................................... 180
7.9.3 Displaying Data: Custom Menus — Details ............................... 182
7.9.4 Data Input: Loading Large Data Sets ......................................... 188
7.9.5 Data Input: Array-Assigned Expression ..................................... 188
7.9.6 Data Output: Calculating Running Average ............................... 192
7.9.7 Data Output: Triggers and Omitting Samples ............................ 195
7.9.8 Data Output: Two Intervals in One Data Table .......................... 197
7.9.9 Data Output: Using Data Type Bool8 ......................................... 198
7.9.10 Data Output: Using Data Type NSEC ...................................... 202
7.9.10.1 NSEC Options ................................................................. 202
7.9.11 Data Output: Writing High-Frequency Data to Memory
7.9.11.1 TableFile() with Option 64 .............................................. 206
7.9.11.2 TableFile() with Option 64 Replaces CardOut() ............. 206
7.9.11.3 TableFile() with Option 64 Programming ....................... 207
7.9.11.4 Converting TOB3 Files with CardConvert ..................... 207
7.9.11.5 TableFile() with Option 64 Q & A .................................. 208
7.9.12 Field Calibration — Details ...................................................... 210
7.9.12.1 Field Calibration CAL Files ............................................ 210
7.9.12.2 Field Calibration Programming ....................................... 211
7.9.12.3 Field Calibration Wizard Overview ................................ 211
7.9.12.4 Field Calibration Numeric Monitor Procedures .............. 211
7.9.12.4.1 One-Point Calibrations (Zero or Offset) ................ 212
7.9.12.4.2 Two-Point Calibrations (gain and offset) .............. 213
7.9.12.4.3 Zero Basis Point Calibration .................................. 213
7.9.12.5 Field Calibration Examples ............................................. 213
7.9.12.5.1 FieldCal() Zero or Tare (Opt 0) Example .............. 214
7.9.12.5.2 FieldCal() Offset (Opt 1) Example ........................ 216
7.9.12.5.3 FieldCal() Slope and Offset (Opt 2) Example ....... 218
7.9.12.5.4 FieldCal() Slope (Opt 3) Example ......................... 220
7.9.12.5.5 FieldCal() Zero Basis (Opt 4) Example -- 8 10
7.9.12.6 Field Calibration Strain Examples .................................. 223
7.9.12.6.1 Field Calibration Strain Examples ......................... 223
7.9.12.6.2 Field Calibration Strain Examples ......................... 224
7.9.12.6.3 FieldCalStrain() Quarter-Bridge Shunt Example... 226
7.9.12.6.4 FieldCalStrain() Quarter-Bridge Zero ................... 227
7.9.13 Measurement: Excite, Delay, Measure ..................................... 228
7.9.14 Measurement: Faster Analog Rates .......................................... 229
7.9.14.1 Measurements from 1 to 100 Hz ..................................... 230
7.9.14.2 Measurement Rate: 101 to 600 Hz .................................. 231
13
14
Table of Contents
7.9.14.2.1 Measurements from 101 to 600 Hz 2 ..................... 232
7.9.14.3 Measurement Rate: 601 to 2000 Hz ................................ 233
7.9.15 Measurement: PRT ................................................................... 234
7.9.15.1 Measuring PT100s (100 Ω PRTs) ................................... 235
7.9.15.1.1 Self-Heating and Resolution .................................. 235
7.9.15.1.2 PRT Calculation Standards .................................... 235
7.9.15.2 PT100 in Four-Wire Half-Bridge .................................... 238
7.9.15.2.1 Calculating the Excitation Voltage ........................ 239
7.9.15.2.2 Calculating the BrHalf4W() Multiplier ................. 239
7.9.15.2.3 Choosing Rf ........................................................... 240
7.9.15.3 PT100 in Three-Wire Half Bridge ................................... 241
7.9.15.4 PT100 in Four-Wire Full-Bridge ..................................... 242
7.9.16 PLC Control — Details............................................................. 244
7.9.17 Serial I/O: Capturing Serial Data .............................................. 245
7.9.17.1 Introduction ..................................................................... 245
7.9.17.2 I/O Ports .......................................................................... 246
7.9.17.3 Protocols .......................................................................... 247
7.9.17.4 Glossary of Serial I/O Terms .......................................... 247
7.9.17.5 Serial I/O CRBasic Programming ................................... 249
7.9.17.5.1 Serial I/O Programming Basics ............................. 250
7.9.17.5.2 Serial I/O Input Programming Basics .................... 251
7.9.17.5.3 Serial I/O Output Programming Basics ................. 252
7.9.17.5.4 Serial I/O Translating Bytes .................................. 253
7.9.17.5.5 Serial I/O Memory Considerations ........................ 253
7.9.17.5.6 Demonstration Program ......................................... 254
7.9.17.6 Serial I/O Application Testing ........................................ 256
7.9.17.6.1 Configure HyperTerminal ..................................... 256
7.9.17.6.2 Create Send-Text File ............................................ 258
7.9.17.6.3 Create Text-Capture File ....................................... 258
7.9.17.6.4 Serial I/O Example II ............................................. 259
7.9.17.7 Serial I/O Q & A ............................................................. 264
7.9.18 Serial I/O: SDI-12 Sensor Support — Programming
7.9.18.1 SDI-12 Transparent Mode ............................................... 267
7.9.18.1.1 SDI-12 Transparent Mode Commands .................. 268
7.9.18.2 SDI-12 Recorder Mode ................................................... 272
7.9.18.3 SDI-12 Sensor Mode ....................................................... 279
7.9.18.4 SDI-12 Power Considerations ......................................... 281
7.9.19 String Operations ...................................................................... 282
7.9.19.1 String Operators .............................................................. 282
7.9.19.2 String Concatenation ....................................................... 283
7.9.19.3 String NULL Character ................................................... 285
7.9.19.4 Inserting String Characters .............................................. 286
7.9.19.5 Extracting String Characters ........................................... 286
7.9.19.6 String Use of ASCII / ANSII Codes ............................... 287
7.9.19.7 Formatting Strings ........................................................... 287
7.9.19.8 Formatting String Hexadecimal Variables ...................... 288
7.9.21 TCP/IP — Details ..................................................................... 289
7.9.21.1 PakBus Over TCP/IP and Callback ................................. 290
7.9.21.2 Default HTTP Web Server .............................................. 291
7.9.21.3 Custom HTTP Web Server ............................................. 291
Table of Contents
7.9.21.4 FTP Server ...................................................................... 294
7.9.21.5 FTP Client ....................................................................... 294
7.9.21.6 Telnet .............................................................................. 295
7.9.21.7 SNMP .............................................................................. 295
7.9.21.8 Ping (IP) .......................................................................... 295
7.9.21.9 Micro-Serial Server ......................................................... 295
7.9.21.10 Modbus TCP/IP ............................................................. 295
7.9.21.11 DHCP ............................................................................ 295
7.9.21.12 DNS .............................................................................. 296
7.9.21.13 SMTP ............................................................................ 296
7.9.22 Wind Vector ............................................................................. 296
7.9.22.1 OutputOpt Parameters ..................................................... 296
7.9.22.2 Wind Vector Processing .................................................. 297
7.9.22.2.1 Measured Raw Data .............................................. 298
7.9.22.2.2 Calculations ........................................................... 298
8. Operation .................................................................. 303
8.1 Measurements — Details ..................................................................... 303
8.1.1 Time Keeping — Details ............................................................ 303
8.1.1.1 Time Stamps ..................................................................... 303
8.1.2 Analog Measurements — Details ............................................... 305
8.1.2.1 Voltage Measurements — Details..................................... 305
8.1.2.1.1 Voltage Measurement Mechanics ............................ 305
8.1.2.1.2 Voltage Measurement Limitations .......................... 308
8.1.2.1.3 Voltage Measurement Quality ................................. 311
8.1.2.2 Thermocouple Measurements —- Details ......................... 327
8.1.2.2.1 Thermocouple Error Analysis ................................. 327
8.1.2.2.2 Use of External Reference Junction ........................ 336
8.1.2.3 Current Measurements — Details ..................................... 337
8.1.2.4 Resistance Measurements — Details ................................ 337
8.1.2.4.1 Ac Excitation ........................................................... 341
8.1.2.4.2 Resistance Measurements — Accuracy ................... 341
8.1.2.5 Strain Measurements — Details ........................................ 342
8.1.2.6 Auto-Calibration — Details .............................................. 344
8.1.2.6.1 Auto Calibration Process ......................................... 344
8.1.3 Pulse Measurements — Details .................................................. 349
8.1.3.1 Pulse Measurement Terminals .......................................... 352
8.1.3.2 Low-Level Ac Measurements — Details .......................... 352
8.1.3.3 High-Frequency Measurements ........................................ 353
8.1.3.3.1 Frequency Resolution .............................................. 353
8.1.3.3.2 Frequency Measurement Q & A .............................. 354
8.1.3.4 Switch-Closure and Open-Collector Measurements ......... 355
8.1.3.5 Edge Timing ...................................................................... 355
8.1.3.6 Edge Counting .................................................................. 356
8.1.3.7 Pulse Measurement Tips ................................................... 356
8.1.3.7.1 TimerIO() NAN Conditions .................................... 359
8.1.3.7.2 Input Filters and Signal Attenuation ........................ 359
8.1.4 Period Averaging — Details ....................................................... 360
8.1.5 Vibrating-Wire Measurements — Details .................................. 361
8.1.5.1 Time-Domain Measurement ............................................. 362
8.1.6 Reading Smart Sensors — Details .............................................. 362
8.1.6.1 RS-232 and TTL ............................................................... 362
15
16
Table of Contents
8.1.6.2 SDI-12 Sensor Support — Details .................................... 363
8.1.7 Field Calibration — Overview ................................................... 363
8.1.8.1 Analog-Sensor Cables ....................................................... 364
8.1.8.2 Pulse Sensors ..................................................................... 364
8.1.8.3 RS-232 Sensors ................................................................. 364
8.1.8.4 SDI-12 Sensors ................................................................. 364
8.1.9 Synchronizing Measurements ..................................................... 365
8.2 Measurement and Control Peripherals — Details ................................ 366
8.2.1 Analog-Input Modules ................................................................ 366
8.2.2 Pulse-Input Modules ................................................................... 367
8.2.2.1 Low-Level Ac Input Modules — Overview ..................... 367
8.2.3 Serial I/O Modules — Details .................................................... 367
8.2.4 Terminal-Input Modules ............................................................. 367
8.2.5 Vibrating-Wire Modules ............................................................. 367
8.2.6 Analog-Output Modules ............................................................. 367
8.2.7 PLC Control Modules — Overview ........................................... 368
8.2.7.1 Terminals Configured for Control ..................................... 368
8.2.7.2 Relays and Relay Drivers .................................................. 369
8.2.7.3 Component-Built Relays ................................................... 369
8.3.1.1 Memory Drives — On-Board ........................................... 374
8.3.1.1.1 Data Table SRAM ................................................... 374
8.3.1.1.2 CPU: Drive .............................................................. 374
8.3.1.1.3 USR: Drive .............................................................. 375
8.3.1.1.4 USB: Drive .............................................................. 375
8.3.1.2 Memory Card (CRD: Drive) — Details ............................ 376
8.3.2 Data-File Formats ....................................................................... 377
8.3.3 Resetting the CR1000 ................................................................. 381
8.3.3.1 Full Memory Reset ............................................................ 381
8.3.3.2 Program Send Reset .......................................................... 381
8.3.3.3 Manual Data-Table Reset .................................................. 382
8.3.3.4 Formatting Drives ............................................................. 382
8.3.4 File Management ........................................................................ 382
8.3.4.1 File Attributes ................................................................... 383
8.3.4.2 Files Manager .................................................................... 384
8.3.4.3 Data Preservation .............................................................. 385
8.3.4.4 Powerup.ini File — Details ............................................... 386
8.3.4.4.1 Creating and Editing Powerup.ini ............................ 387
8.3.4.5 File Management Q & A ................................................... 389
8.3.6 File-System Errors ...................................................................... 389
8.3.7 Memory Q & A ........................................................................... 391
8.4 Data Retrieval and Telecommunications — Details ............................ 391
8.4.2 Conserving Bandwidth ............................................................... 392
8.4.3 Initiating Telecommunications (Callback).................................. 392
8.5 PakBus® Communications — Details ................................................. 393
8.5.1 PakBus Addresses ....................................................................... 393
8.5.2 Nodes: Leaf Nodes and Routers ................................................. 394
8.5.2.1 Router and Leaf-Node Configuration ................................ 394
Table of Contents
8.5.3 Linking PakBus Nodes: Neighbor Discovery ............................. 395
8.5.3.1 Hello-Message .................................................................. 396
8.5.3.2 Beacon............................................................................... 396
8.5.3.3 Hello-Request ................................................................... 396
8.5.3.4 Neighbor Lists ................................................................... 396
8.5.3.5 Adjusting Links ................................................................. 396
8.5.3.6 Maintaining Links ............................................................. 397
8.5.4 PakBus Troubleshooting ............................................................. 397
8.5.4.1 Link Integrity .................................................................... 397
8.5.4.1.1 Automatic Packet-Size Adjustment ......................... 397
8.5.4.2 Ping (PakBus) ................................................................... 398
8.5.4.3 Traffic Flow ...................................................................... 398
8.5.5 LoggerNet Network-Map Configuration .................................... 398
8.5.6 PakBus LAN Example ................................................................ 400
8.5.6.1 LAN Wiring ...................................................................... 400
8.5.6.2 LAN Setup ........................................................................ 401
8.5.6.3 LoggerNet Setup ............................................................... 403
8.5.8 PakBusRoutes ............................................................................. 405
8.5.10 PakBus Encryption ................................................................... 406
8.6 Alternate Telecommunications — Details ........................................... 407
8.6.1 DNP3 — Details ......................................................................... 408
8.6.1.1 DNP3 Introduction ............................................................ 408
8.6.1.2 Programming for DNP3 .................................................... 408
8.6.1.2.1 Declarations (DNP3 Programming) ........................ 408
8.6.1.2.2 CRBasic Instructions (DNP3) ................................. 409
8.6.1.2.3 Programming for DNP3 Data Acquisition............... 410
8.6.2 Modbus — Details ...................................................................... 411
8.6.2.1 Modbus Terminology ........................................................ 412
8.6.2.1.1 Glossary of Modbus Terms ..................................... 412
8.6.2.2 Programming for Modbus ................................................. 413
8.6.2.2.1 Declarations (Modbus Programming) ..................... 413
8.6.2.2.2 CRBasic Instructions (Modbus) .............................. 414
8.6.2.2.3 Addressing (ModbusAddr) ...................................... 414
8.6.2.2.4 Supported Modbus Function Codes ......................... 415
8.6.2.2.5 Reading Inverse-Format Modbus Registers ............ 415
8.6.2.3 Troubleshooting (Modbus) ................................................ 415
8.6.2.4 Modbus over IP ................................................................. 416
8.6.2.5 Modbus Q and A ............................................................... 416
8.6.2.6 Converting Modbus 16-Bit to 32-Bit Longs ..................... 416
8.6.3 TCP/IP — Details ....................................................................... 417
8.6.3.1 PakBus Over TCP/IP and Callback ................................... 418
8.6.3.2 Default HTTP Web Server ................................................ 418
8.6.3.3 Custom HTTP Web Server ............................................... 419
8.6.3.4 FTP Server ........................................................................ 422
8.6.3.5 FTP Client ......................................................................... 422
8.6.3.6 Telnet ................................................................................ 422
8.6.3.7 SNMP ................................................................................ 422
8.6.3.8 Ping (IP) ............................................................................ 423
8.6.3.9 Micro-Serial Server ........................................................... 423
8.6.3.10 Modbus TCP/IP............................................................... 423
8.6.3.11 DHCP .............................................................................. 423
17
18
Table of Contents
8.6.3.12 DNS ................................................................................. 423
8.6.3.13 SMTP .............................................................................. 423
8.6.3.14 Web API .......................................................................... 423
8.6.3.14.1 Authentication ....................................................... 424
8.6.3.14.2 Command Syntax .................................................. 425
8.6.3.14.3 Time Syntax ........................................................... 427
8.6.3.14.4 Data Management — BrowseSymbols
Command ......................................................................... 427
8.6.3.14.5 Data Management — DataQuery Command ......... 431
8.6.3.14.6 Control — SetValueEx Command ........................ 436
8.6.3.14.7 Clock Functions — ClockSet Command ............... 439
8.6.3.14.8 Clock Functions — ClockCheck Command .......... 440
8.6.3.14.9 File Management — Sending a File to a
Datalogger ........................................................................ 442
8.6.3.14.10 File Management — FileControl Command ....... 444
8.6.3.14.11 File Management — ListFiles Command ............ 445
8.6.3.14.12 File Management — NewestFile Command ........ 449
8.7 Datalogger Support Software — Details .............................................. 450
8.8 Keyboard Display — Details ............................................................... 451
8.8.1.1 Real-Time Tables and Graphs ........................................... 455
8.8.1.2 Real-Time Custom ............................................................ 455
8.8.1.3 Final-Memory Tables ........................................................ 457
8.8.2 Run/Stop Program ...................................................................... 458
8.8.3.1 File: Edit ............................................................................ 459
8.8.4 PCCard (Memory Card) Display ................................................ 461
8.8.6.1 Set Time / Date.................................................................. 463
8.8.6.2 PakBus Settings ................................................................. 463
8.8.7 Configure Display ....................................................................... 463
8.9 Program and OS File Compression Q and A ........................................ 463
8.10 Memory Cards and Record Numbers ................................................. 466
8.11.2 Pass-Code Lockout ................................................................... 469
8.11.2.1 Pass-Code Lockout By-Pass ............................................ 470
8.11.3.1 .csipasswd ....................................................................... 470
8.11.3.2 PakBus Instructions ......................................................... 470
8.11.3.3 TCP/IP Instructions ......................................................... 471
8.11.3.4 Settings — Passwords ..................................................... 471
8.11.4 File Encryption ......................................................................... 471
8.11.5 Communication Encryption ...................................................... 471
9. Maintenance — Details ............................................ 473
9.1 Protection from Moisture — Details .................................................... 473
Table of Contents
9.3 Factory Calibration or Repair Procedure .............................................. 476
10. Troubleshooting .................................................... 479
10.1 Troubleshooting — Essential Tools ................................................... 479
10.2 Troubleshooting — Basic Procedure ................................................. 479
10.3 Troubleshooting — Error Sources ..................................................... 479
10.4 Troubleshooting — Status Table ........................................................ 481
10.5.1 Program Does Not Compile ...................................................... 481
10.5.2 Program Compiles / Does Not Run Correctly .......................... 481
10.5.3 NAN and ±INF ......................................................................... 482
10.5.3.1 Measurements and NAN ................................................. 482
10.5.3.1.1 Voltage Measurements .......................................... 482
10.5.3.1.2 SDI-12 Measurements ........................................... 482
10.5.3.2 Floating-Point Math, NAN, and ±INF ............................ 482
10.5.3.3 Data Types, NAN, and ±INF .......................................... 483
10.5.3.4 Output Processing and NAN ........................................... 484
10.5.4 Status Table as Debug Resource ............................................... 485
10.5.4.1 CompileResults ............................................................... 485
10.5.4.2 SkippedScan .................................................................... 487
10.5.4.3 SkippedSlowScan ............................................................ 487
10.5.4.4 SkippedRecord ................................................................ 488
10.5.4.5 ProgErrors ....................................................................... 488
10.5.4.6 MemoryFree .................................................................... 488
10.5.4.7 VarOutOfBounds ............................................................ 488
10.5.4.8 Watchdog Errors ............................................................. 488
10.5.4.8.1 Status Table WatchdogErrors ................................ 489
10.5.4.8.2 Watchdoginfo.txt File ............................................ 489
10.6 Troubleshooting — Operating Systems ............................................. 490
10.7 Troubleshooting — Auto-Calibration Errors ..................................... 490
10.8.2 Communicating with Multiple PCs .......................................... 491
10.8.3 Comms Memory Errors ............................................................ 491
10.8.3.1 CommsMemFree(1) ........................................................ 491
10.8.3.2 CommsMemFree(2) ........................................................ 492
10.8.3.3 CommsMemFree(3) ........................................................ 493
10.9 Troubleshooting — Power Supplies ................................................... 494
10.9.1 Troubleshooting Power Supplies — Overview ........................ 494
10.9.2 Troubleshooting Power Supplies — Examples -- 8 10 30 ........ 494
10.9.3 Troubleshooting Power Supplies — Procedures ...................... 495
10.9.3.1 Battery Test ..................................................................... 495
10.9.3.2 Charging Regulator with Solar-Panel Test ...................... 496
10.9.3.3 Charging Regulator with Transformer Test .................... 498
10.9.3.4 Adjusting Charging Voltage ........................................... 499
10.10.1 Serial Talk Through and Comms Watch ................................ 503
10.12 Troubleshooting — Data Recovery .................................................. 504
11. Glossary ................................................................. 507
19
20
Table of Contents
11.2.1 Accuracy, Precision, and Resolution ........................................ 533
12. Attributions ............................................................. 535
Appendices
A. CRBasic Programming Instructions ...................... 537
A.1.1 Variable Declarations & Modifiers ............................................ 538
A.1.2 Constant Declarations ................................................................ 539
A.2.1 Data-Table Modifiers ................................................................. 540
A.2.2 Data Destinations ....................................................................... 541
A.2.3 Processing for Output to Final-Data Memory ............................ 542
A.2.3.1 Single-Source ................................................................... 542
A.2.3.2 Multiple-Source ................................................................ 544
A.3 Single Execution at Compile ............................................................... 544
A.4 Program Control Instructions .............................................................. 545
A.4.1 Common Program Controls ....................................................... 545
A.4.2 Advanced Program Controls ...................................................... 548
A.5 Measurement Instructions ................................................................... 550
A.5.3 Thermocouples........................................................................... 551
A.5.4 Resistive-Bridge Measurements ................................................ 551
A.5.6 Pulse and Frequency .................................................................. 553
A.5.7.1 Control.............................................................................. 554
A.5.7.2 Measurement .................................................................... 555
A.5.8 SDI-12 Sensor Suppport — Instructions ................................... 555
A.5.9 Specific Sensors ......................................................................... 556
A.5.9.1 Wireless Sensor Network ................................................. 558
A.5.10 Peripheral Device Support ....................................................... 559
A.6 PLC Control — Instructions ................................................................ 562
A.7 Processing and Math Instructions ........................................................ 563
A.7.1 Mathematical Operators ............................................................. 563
A.7.2 Arithmetic Operators ................................................................. 563
A.7.3 Bitwise Operations ..................................................................... 564
A.7.4 Compound-Assignment Operators ............................................. 565
A.7.5 Logical Operators ...................................................................... 565
A.7.6 Trigonometric Functions ............................................................ 566
A.7.6.1 Intrinsic Trigonometric Functions .................................... 566
A.7.6.2 Derived Trigonometric Functions .................................... 568
A.7.7 Arithmetic Functions ................................................................. 568
A.7.8 Integrated Processing ................................................................. 570
A.7.9 Spatial Processing ...................................................................... 571
A.7.10 Other Functions ........................................................................ 572
Table of Contents
A.7.10.1 Histograms ..................................................................... 573
A.8.1 String Operations ....................................................................... 574
A.8.2 String Commands ...................................................................... 575
A.9 Time Keeping — Instructions ............................................................. 578
A.10 Voice-Modem Instructions ................................................................ 580
A.11 Custom Menus — Instructions .......................................................... 581
A.13 Peer-to-Peer PakBus® Communications ........................................... 584
A.14 Variable Management ....................................................................... 589
A.16 Data-Table Access and Management ................................................ 592
A.21.3 OMNISAT ............................................................................... 601
A.21.4 INMARSAT-C ........................................................................ 601
A.22 User-Defined Functions .................................................................... 602
B. Status, Settings, and Data Table Information
(Status/Settings/DTI) ................................................ 603
B.1 Status/Settings/DTI Directories ........................................................... 604
B.2 Status/Settings/DTI Descriptions (Alphabetical) ................................. 611
C. Serial Port Pinouts .................................................. 633
C.1 CS I/O Communication Port ................................................................ 633
C.2 RS-232 Communication Port ............................................................... 633
D. ASCII / ANSI Table ................................................... 637
E. FP2 Data Format ...................................................... 641
F. Endianness .............................................................. 643
G. Supporting Products Lists ..................................... 645
G.2 Measurement and Control Peripherals — Lists ................................... 645
G.3 Sensor-Input Modules Lists ................................................................. 646
G.3.1 Analog-Input Modules List ........................................................ 646
G.3.2 Pulse-Input Modules List ........................................................... 646
G.3.3 Serial I/O Modules List ............................................................. 646
G.3.4 Vibrating-Wire Input Modules List ........................................... 647
21
22
Table of Contents
G.3.5 Passive Signal Conditioners Lists .............................................. 647
G.3.5.1 Resistive-Bridge TIM Modules List ................................. 647
G.3.5.2 Voltage-Divider Modules List .......................................... 647
G.3.5.3 Current-Shunt Modules List ............................................. 647
G.3.5.4 Transient-Voltage Suppressors List ................................. 648
G.3.6 Terminal-Strip Covers List ........................................................ 648
G.4 PLC Control Modules — Lists ............................................................ 648
G.4.1 Digital-I/O Modules List............................................................ 648
G.4.2 Continuous-Analog-Output (CAO) Modules List ..................... 649
G.4.3 Relay-Drivers — List ................................................................. 649
G.4.4 Current-Excitation Modules List ............................................... 649
G.5.1 Wired-Sensor Types List ........................................................... 650
G.5.2 Wireless-Network Sensors List .................................................. 650
G.6 Data Retrieval and Telecommunication Peripherals — Lists .............. 651
G.6.1 Keyboard Display — List .......................................................... 651
G.6.2 Hardwire, Single-Connection Comms Devices List .................. 652
G.6.3 Hardwire, Networking Devices List .......................................... 652
G.6.4 TCP/IP Links — List ................................................................. 652
G.6.5 Telephone Modems List ............................................................ 652
G.6.6 Private-Network Radios List ...................................................... 653
G.6.7 Satellite Transceivers List .......................................................... 653
G.7 Data-Storage Devices — List .............................................................. 653
G.8 Datalogger Support Software — Lists ................................................. 654
G.8.1 Starter Software List .................................................................. 654
G.8.2 Datalogger Support Software — List ......................................... 654
G.8.2.1 LoggerNet Suite List ........................................................ 655
G.8.3 Software Tools List .................................................................... 656
G.8.4 Software Development Kits List ................................................ 656
G.9 Power Supplies — Products ................................................................ 657
G.9.1 Battery / Regulator Combinations List ...................................... 657
G.9.4 Primary Power Sources List ....................................................... 658
G.9.5 24 Vdc Power Supply Kits List ................................................. 659
G.10 Enclosures — Products...................................................................... 659
G.11 Tripods, Towers, and Mounts Lists ................................................... 659
Index .............................................................................. 661
List of Figures
Figure 1. Data-Acquisition System Components .......................................... 42
Figure 3. Power and Serial Communication Connections ............................. 48
Figure 4. PC200W Main Window ................................................................. 49
Figure 5. Short Cut Temperature Sensor Folder ........................................... 51
Figure 6. Short Cut Thermocouple Wiring -- needs new image for CR6:
Table of Contents
Figure 9. Short Cut Compile Confirmation ................................................... 54
Figure 10. PC200W Main Window ............................................................... 55
Figure 11. PC200W Monitor Data Tab – Public Table ................................. 56
Figure 12. PC200W Monitor Data Tab — Public and OneMin Tables ........ 57
Figure 13. PC200W Collect Data Tab .......................................................... 57
Figure 14. PC200W View Data Utility ......................................................... 58
Figure 15. PC200W View Data Table .......................................................... 59
Figure 16. PC200W View Line Graph .......................................................... 60
Figure 17. Data-Acquisition System — Overview ........................................ 62
Figure 18. Analog Sensor Wired to Single-Ended Channel #1 ..................... 64
Figure 19. Analog Sensor Wired to Differential Channel #1 ........................ 64
Figure 20. Simplified Differential-Voltage Measurement Sequence ............ 66
Figure 21. Half-Bridge Wiring Example — Wind Vane Potentiometer ....... 67
Figure 22. Full-Bridge Wiring Example — Pressure Transducer ................. 68
Figure 23. Pulse-Sensor Output-Signal Types .............................................. 69
Figure 24. Pulse-Input Wiring Example — Anemometer ............................. 70
Figure 25. Terminals Configurable for RS-232 Input ................................... 73
Figure 26. Use of RS-232 and Digital I/O when Reading RS-232
Figure 28. Control and Monitoring with C Terminals .................................. 79
Figure 29. CR1000KD Keyboard Display .................................................... 83
Figure 30. Custom Menu Example ............................................................... 84
Figure 32. Connecting to Vehicle Power Supply ........................................ 102
Figure 33. Schematic of Grounds ................................................................ 107
Figure 34. Lightning-Protection Scheme .................................................... 108
Figure 35. Model of a Ground Loop with a Resistive Sensor ..................... 110
Figure 36. Device Configuration Utility (DevConfig) ................................ 112
Figure 37. Network Planner Setup .............................................................. 113
Figure 38. Summary of CR1000 Configuration .......................................... 122
Figure 39. CRBasic Editor Program Send File Control window ................ 127
Figure 40. "Include File" Settings Via DevConfig ...................................... 149
Figure 41. "Include File" Settings Via PakBusGraph ................................. 149
Figure 42. Sequential-Mode Scan Priority Flow Diagrams ........................ 158
Figure 43. Custom Menu Example — Home Screen .................................. 183
Figure 44. Custom Menu Example — View Data Window ........................ 183
Figure 45. Custom Menu Example — Make Notes Sub Menu ................... 184
Figure 46. Custom Menu Example — Predefined Notes Pick List ............. 184
Figure 47. Custom Menu Example — Free Entry Notes Window .............. 184
Figure 48. Custom Menu Example — Accept / Clear Notes Window ........ 184
Figure 49. Custom Menu Example — Control Sub Menu .......................... 185
Figure 50. Custom Menu Example — Control LED Pick List ................... 185
Figure 51. Custom Menu Example — Control LED Boolean Pick List ..... 185
Figure 52. Running-Average Frequency Response ..................................... 194
Figure 53. Running-Average Signal Attenuation ........................................ 195
Figure 54. Data from TrigVar Program....................................................... 196
Figure 55. Alarms Toggled in Bit-Shift Example ....................................... 199
Figure 56. Bool8 Data from Bit-Shift Example (Numeric Monitor) ........... 199
Figure 57. Bool8 Data from Bit-Shift Example (PC Data File) .................. 200
Figure 58. Quarter-Bridge Strain-Gage with RC Resistor Shunt ................ 225
Figure 59. Strain-Gage Shunt Calibration Start .......................................... 226
Figure 60. Strain-Gage Shunt Calibration Finish ........................................ 227
23
24
Table of Contents
Figure 63. PT100 in Four-Wire Half-Bridge ............................................... 240
Figure 64. PT100 in Three-Wire Half-Bridge ............................................. 242
Figure 65. PT100 in Four-Wire Full-Bridge ............................................... 244
Figure 66. HyperTerminal New Connection Description............................ 256
Figure 67. HyperTerminal Connect-To Settings ......................................... 257
Figure 68. HyperTerminal COM-Port Settings Tab .................................... 257
Figure 69. HyperTerminal ASCII Setup ..................................................... 258
Figure 70. HyperTerminal Send Text-File Example ................................... 258
Figure 71. HyperTerminal Text-Capture File Example .............................. 259
Figure 72. Entering SDI-12 Transparent Mode ........................................... 268
Figure 73. Preconfigured HTML Home Page ............................................. 291
Figure 74. Home Page Created Using WebPageBegin() Instruction ........... 292
Figure 75. Customized Numeric-Monitor Web Page .................................. 293
Figure 77. Mean Wind-Vector Graph ......................................................... 299
Figure 78. Standard Deviation of Direction ................................................ 300
Figure 79. Simplified voltage measurement sequence ................................ 306
Figure 80. Programmable Gain Input Amplifier (PGIA) ............................ 306
Figure 81. PGIA with Input-Signal Decomposition .................................... 311
Figure 83. Ac-Power Noise-Rejection Techniques ..................................... 316
Figure 84. Input-voltage rise and transient decay ........................................ 318
Figure 85. Settling Time for Pressure Transducer ....................................... 321
Figure 86. Panel-Temperature Error Summary ........................................... 329
Figure 87. Panel-Temperature Gradients (low temperature to high) ........... 329
Figure 88. Panel-Temperature Gradients (high temperature to low) ........... 330
Figure 90. Diagram of a Thermocouple Junction Box ................................ 337
Figure 91. Pulse-Sensor Output-Signal Types ............................................ 350
Figure 92. Switch-Closure Pulse Sensor ..................................................... 350
Figure 93. Terminals Configurable for Pulse Input ..................................... 351
Figure 95. Input Conditioning Circuit for Period Averaging ...................... 361
Figure 96. Vibrating-Wire Sensor ............................................................... 362
Figure 97. Circuit to Limit C Terminal Input to 5 Vdc ............................... 363
Figure 98. Current-Limiting Resistor in a Rain Gage Circuit ..................... 364
Figure 99. Current sourcing from C terminals configured for control ........ 369
Figure 100. Relay Driver Circuit with Relay .............................................. 370
Figure 101. Power Switching without Relay ............................................... 370
Figure 102. PakBus Network Addressing ................................................... 394
Figure 105. Configuration and Wiring of PakBus LAN ............................. 400
Figure 106. DevConfig Deployment Tab .................................................... 401
Figure 107. DevConfig Deployment | ComPorts Settings Tab ................... 402
Figure 108. DevConfig Deployment | Advanced Tab ................................. 402
Table of Contents
Figure 109. LoggerNet Network-Map Setup: COM port ............................ 403
Figure 110. LoggerNet Network-Map Setup: PakBusPort .......................... 404
Figure 111. LoggerNet Network-Map Setup: Dataloggers ......................... 404
Figure 112. Preconfigured HTML Home Page ........................................... 419
Figure 113. Home Page Created Using WebPageBegin() Instruction ........ 420
Figure 114. Customized Numeric-Monitor Web Page ................................ 420
Figure 115. Using the Keyboard / Display .................................................. 453
Figure 116. Displaying Data with the Keyboard / Display ......................... 454
Figure 117. Real-Time Tables and Graphs ................................................. 455
Figure 118. Real-Time Custom ................................................................... 456
Figure 119. Final-Memory Tables .............................................................. 457
Figure 120. Run/Stop Program ................................................................... 458
Figure 123. PCCard (CF Card) Display ...................................................... 461
Figure 124. C Terminals (Ports) Status ....................................................... 462
Figure 127. Loosen Retention Screws ......................................................... 474
Figure 128. Pull Edge Away from Panel ..................................................... 475
Figure 129. Remove Nuts to Disassemble Canister .................................... 475
Figure 130. Remove and Replace Battery ................................................... 476
Figure 131. Potentiometer R3 on PS100 and CH100 Charger / Regulator . 501
Figure 132. DevConfig Terminal Tab ......................................................... 503
Figure 133. Relationships of Accuracy, Precision, and Resolution ............ 534
List of Tables
Table 1. PC200W EZSetup Wizard Example Selections .............................. 49
Table 2. Differential and Single-Ended Input Terminals .............................. 65
Table 3. Pulse-Input Terminals and Measurements ...................................... 69
Table 4. CR1000 Wiring Panel Terminal Definitions ................................... 77
Table 5. Current Source and Sink Limits .................................................... 103
Table 6. Status/Setting/DTI: Access Points ................................................ 115
Table 7. Common Configuration Actions and Tools .................................. 117
Table 8. CRBasic Program Structure .......................................................... 123
Table 9. Program Send Options that Reset Memory* ................................. 127
Table 11. Data Types in Variable Memory ................................................. 130
Table 12. Data Types in Final-Data Memory .............................................. 131
Table 13. Formats for Entering Numbers in CRBasic ................................ 139
Table 15. TOA5 Environment Line ............................................................ 141
Table 16. DataInterval() Lapse Parameter Options ..................................... 145
Table 18. Pipeline Mode Task Priorities ..................................................... 153
Table 19. Program Timing Instructions ...................................................... 154
Table 21. Binary Conditions of TRUE and FALSE .................................... 165
Table 22. Logical Expression Examples ..................................................... 165
Table 23. Data Process Abbreviations ........................................................ 168
Table 24. CRBasic Example. Array Assigned Expression: Sum
Columns and Rows .............................................................................. 190
25
26
Table of Contents
Table 26. CRBasic Example. Array Assigned Expression: Comparison /
Table 27. CRBasic Example. Array Assigned Expression: Fill Array
Table 29. Calibration Report for Relative Humidity Sensor ....................... 214
Table 30. Calibration Report for Salinity Sensor ........................................ 216
Table 31. Calibration Report for Flow Meter .............................................. 218
Table 32. Calibration Report for Water Content Sensor ............................. 221
Table 33. Summary of Analog Voltage Measurement Rates ...................... 230
Table 34. Parameters for Analog Burst Mode (601 to 2000 Hz) ................. 234
Table 35. PRTCalc() Type-Code-1 Sensor ................................................. 236
Table 36. PRTCalc() Type-Code-2 Sensor ................................................. 237
Table 37. PRTCalc() Type-Code-3 Sensor ................................................. 237
Table 38. PRTCalc() Type-Code-4 Sensor ................................................. 237
Table 39. PRTCalc() Type-Code-5 Sensor ................................................. 238
Table 40. PRTCalc() Type-Code-6 Sensor ................................................. 238
Table 41. ASCII / ANSI Equivalents .......................................................... 245
Table 43. SDI-12 Commands for Transparent Mode .................................. 269
Table 44. SDI-12 Sensor Setup CRBasic Example — Results ................... 281
Table 45. Example Power Usage Profile for a Network of SDI-12
Table 47. String Concatenation Examples .................................................. 284
Table 48. String NULL Character Examples .............................................. 285
Table 49. Extracting String Characters ....................................................... 286
Table 50. Use of ASCII / ANSII Codes Examples ...................................... 287
Table 51. Formatting Strings Examples ...................................................... 287
Table 52. Formatting Hexadecimal Variables — Examples ....................... 288
Table 53. WindVector() OutputOpt Options ............................................... 296
Table 54. CRBasic Parameters Varying Measurement Sequence and
Table 55. Analog Voltage Input Ranges and Options ................................. 309
Table 56. Analog-Voltage Measurement Accuracy 1 ................................... 313
Table 57. Analog-Voltage Measurement Offsets ........................................ 313
Table 58. Analog-Voltage Measurement Resolution .................................. 313
Table 59. Analog Measurement Integration ................................................ 316
Table 60. Ac Noise Rejection on Small Signals
Table 61. Ac Noise Rejection on Large Signals
1 ........................................ 317
1 ........................................ 317
Table 62. CRBasic Measurement Settling Times ........................................ 318
Table 63. First Six Values of Settling-Time Data ....................................... 321
Table 64. Range-Code Option C Over-Voltages ......................................... 322
Table 65. Offset Voltage Compensation Options ........................................ 325
Table 67. Voltage Range for Maximum Thermocouple Resolution ........... 331
Table 68. Limits of Error on CR1000 Thermocouple Polynomials ............ 334
Table 69. Reference-Temperature Compensation Range and Error ............ 335
Table 70. Thermocouple Error Examples ................................................... 336
Table of Contents
Table 71. Resistive-Bridge Circuits with Voltage Excitation ..................... 339
Table 72. Ratiometric-Resistance Measurement Accuracy ......................... 342
Table 73. StrainCalc() Instruction Equations .............................................. 343
Table 74. Auto Calibration Gains and Offsets ............................................ 346
Table 75. Calibrate() Instruction Results .................................................... 347
Table 76. Pulse Measurements:, Terminals and Programming ................... 351
Table 77. Example. E for a 10 Hz input signal ........................................... 354
Table 78. Frequency Resolution Comparison ............................................. 354
Table 79. Switch Closures and Open Collectors on P Terminals ................ 357
Table 80. Switch Closures and Open Collectors on C Terminals ............... 357
Table 81. Three Specifications Differing Between P and C Terminals ...... 358
Table 83. Low-Level Ac Amplitude and Maximum Measured
Table 84. CR1000 Memory Allocation ....................................................... 371
Table 85. CR1000 Main Memory ............................................................... 373
Table 88. TableFile() Instruction Data-File Formats .................................. 378
Table 90. CR1000 File Attributes ............................................................... 383
Table 91. Data-Preserve Options ................................................................ 386
Table 92. Powerup.ini Commands and Applications .................................. 388
Table 93. Powerup.ini Example. Code Format and Syntax ......................... 388
Table 94. Powerup.ini Example. Run Program on Power-up ..................... 388
Table 95. Powerup.ini Example. Format the USR: Drive ........................... 389
Table 96. Powerup.ini Example. Send OS on Power-up ............................. 389
Table 97. Powerup.ini Example. Run Program from USB: Drive .............. 389
Table 98. Powerup.ini Example. Run Program Always, Erase Data .......... 389
Table 99. Powerup.ini Example. Run Program Now, Erase Data ............... 389
Table 100. File System Error Codes ........................................................... 390
Table 101. PakBus Leaf-Node and Router Device Configuration .............. 395
Table 102. PakBus Link-Performance Gage ............................................... 398
Table 103. PakBus-LAN Example Datalogger-Communication Settings .. 403
Table 104. Router Port Numbers................................................................. 405
Table 105. DNP3 Implementation — Data Types Required to Store
Data in Public Tables for Object Groups ............................................. 409
Table 106. Modbus to Campbell Scientific Equivalents ............................. 412
Table 107. CRBasic Ports, Flags, Variables, and, Modbus Registers ......... 414
Table 108. Supported Modbus Function Codes .......................................... 415
Table 109. API Commands, Parameters, and Arguments ........................... 425
Table 110. BrowseSymbols API Command Parameters ............................. 427
Table 111. BrowseSymbols API Command Response ............................... 428
Table 112. DataQuery API Command Parameters ...................................... 431
Table 113. SetValueEx API Command Parameters .................................... 437
Table 114. SetValue API Command Response ........................................... 437
Table 115. ClockSet API Command Parameters ........................................ 439
Table 116. ClockSet API Command Response ........................................... 439
Table 117. ClockCheck API Command Parameters ................................... 440
Table 118. ClockCheck API Command Response ...................................... 441
Table 119. Curl HTTPPut Request Parameters ........................................... 442
Table 120. FileControl API Command Parameters ..................................... 444
Table 121. FileControl API Command Response ....................................... 445
27
28
Table of Contents
Table 122. ListFiles API Command Parameters ......................................... 446
Table 123. ListFiles API Command Response ............................................ 446
Table 124. NewestFile API Command Parameters ..................................... 450
Table 125. Special Keyboard-Display Key Functions ................................ 451
Table 126. Typical Gzip File Compression Results .................................... 465
Table 127. Internal Lithium-Battery Specifications .................................... 474
Table 128. Math Expressions and CRBasic Results .................................... 483
Table 129. Variable and Final-Memory Data Types with NAN and ±INF . 484
Table 130. Warning Message Examples ..................................................... 486
Table 131. CommsMemFree(1) Defaults and Use Example, TLS Not
Table 132. CommsMemFree(1) Defaults and Use Example, TLS Active .. 492
Table 133. CR1000 Terminal Commands ................................................... 502
Table 135. Program Send Command .......................................................... 524
Table 137. Compound-Assignment Operators ............................................ 565
Table 138. Derived Trigonometric Functions ............................................. 568
Table 140. Asynchronous-Port Baud Rates ................................................. 588
Table 141. Status/Setting/DTI: Access Points ............................................. 603
Table 142. Status/Settings/DTI: Directories ................................................ 604
Table 143. Status/Settings/DTI: Frequently Used ....................................... 604
Table 144. Status/Settings/DTI: Alphabetical Listing of Keywords ........... 605
Table 145. Status/Settings/DTI: Status Table Entries on CR1000KD
Table 146. Status/Settings/DTI: Settings (General) on CR1000KD
Table 147. Status/Settings/DTI: Settings (comport) on CR1000KD
Table 148. Status/Settings/DTI: Settings (TCP/IP) on CR1000KD
Table 149. Status/Settings/DTI: Settings Only in Settings Editor ............... 607
Table 150. Status/Settings/DTI: Data Table Information Table (DTI)
Table 151. Status/Settings/DTI: Auto-Calibration ...................................... 608
Table 152. Status/Settings/DTI: Communications, General ........................ 608
Table 153. Status/Settings/DTI: Communications, PakBus ........................ 608
Table 154. Status/Settings/DTI: Communications, TCP_IP I ..................... 608
Table 155. Status/Settings/DTI: Communications, TCP_IP II .................... 608
Table 156. Status/Settings/DTI: Communications, TCP_IP III .................. 609
Table 157. Status/Settings/DTI: CRBasic Program I .................................. 609
Table 158. Status/Settings/DTI: CRBasic Program II ................................. 609
Table 159. Status/Settings/DTI: Data .......................................................... 609
Table 160. Status/Settings/DTI: Memory .................................................... 609
Table 161. Status/Settings/DTI: Miscellaneous .......................................... 609
Table 162. Status/Settings/DTI: Obsolete ................................................... 609
Table 163. Status/Settings/DTI: OS and Hardware Versioning .................. 610
Table 164. Status/Settings/DTI: Power Monitors........................................ 610
Table 165. Status/Settings/DTI: Security .................................................... 610
Table 166. Status/Settings/DTI: Signatures ................................................ 610
Table of Contents
Table 168. Baudrate() Array, Keywords, and Default Settings ................... 611
Table 169. Beacon() Array, Keywords, and Default Settings ..................... 612
Table 170. Status/Settings/DTI: C .............................................................. 612
Table 171. Status/Settings/DTI: D .............................................................. 615
Table 174. Status/Settings/DTI: H .............................................................. 617
Table 177. Status/Settings/DTI: M .............................................................. 620
Table 178. Status/Settings/DTI: N .............................................................. 622
Table 179. Status/Settings/DTI: O .............................................................. 622
Table 181. Status/Settings/DTI: R .............................................................. 626
Table 184. Status/Settings/DTI: U .............................................................. 631
Table 185. Status/Settings/DTI: V .............................................................. 631
Table 186. Status/Settings/DTI: W ............................................................. 632
Table 187. CS I/O Pin Description .............................................................. 633
Table 188. CR1000 RS-232 Pin-Out ........................................................... 634
Table 189. Standard Null-Modem Cable or Adapter-Pin Connections ....... 635
Table 190. Decimal and hexadecimal Codes and Characters Used with
Table 191. FP2 Data-Format Bit Descriptions ............................................ 641
Table 192. FP2 Decimal-Locater Bits ......................................................... 641
Table 193. Endianness in Campbell Scientific Instruments ........................ 643
Table 195. Analog-Input Modules .............................................................. 646
Table 196. Pulse-Input Modules ................................................................. 646
Table 197. Serial I/O Modules List ............................................................. 646
Table 198. Vibrating-Wire Input Modules .................................................. 647
Table 199. Resistive Bridge TIM 1 Modules ................................................ 647
Table 200. Voltage Divider Modules .......................................................... 647
Table 201. Current-Shunt Modules ............................................................. 647
Table 202. Transient Voltage Suppressors .................................................. 648
Table 203. Terminal-Strip Covers ............................................................... 648
Table 205. Continuous-Analog-Output (CAO) Modules ............................ 649
Table 206. Relay-Drivers — Products ........................................................ 649
Table 207. Current-Excitation Modules ...................................................... 649
Table 208. Wired Sensor Types .................................................................. 650
Table 209. Wireless Sensor Modules .......................................................... 650
Table 210. Sensors Types Available for Connection to CWS900 .............. 651
Table 211. Datalogger / Keyboard Display Availability and
Table 212. Hardwire, Single-Connection Comms Devices ......................... 652
Table 213. Hardwire, Networking Devices ................................................. 652
Table 215. Telephone Modems ................................................................... 652
Table 216. Private-Network Radios ............................................................ 653
Table 218. Mass-Storage Devices ............................................................... 653
29
30
Table of Contents
Table 219. CF-Card Storage Module .......................................................... 653
Table 221. Datalogger Support Software .................................................... 655
Table 224. Software Development Kits ...................................................... 656
Table 225. Battery / Regulator Combinations ............................................. 657
Table 228. Primary Power Sources ............................................................. 658
Table 229. 24 Vdc Power Supply Kits ........................................................ 659
Table 230. Enclosures — Products ............................................................. 659
Table 232. Tripods, Towers, and Mounts .................................................... 659
Table 233. Protection from Moisture — Products ...................................... 660
List of CRBasic Examples
CRBasic Example 1. Simple Default.cr1 File to Control SW12
CRBasic Example 2. Inserting Comments .................................................. 126
CRBasic Example 3. Data Type Declarations ............................................. 133
CRBasic Example 4. Using Variable Array Dimension Indices ................. 134
CRBasic Example 5. Flag Declaration and Use .......................................... 135
CRBasic Example 6. Using a Variable Array in Calculations .................... 136
CRBasic Example 7. Initializing Variables ................................................. 137
CRBasic Example 8. Using the Const Declaration ..................................... 138
CRBasic Example 9. Load binary information into a variable .................... 139
CRBasic Example 10. Definition and Use of a Data Table ......................... 142
CRBasic Example 11. Use of the Disable Variable .................................... 146
CRBasic Example 12. Using an 'Include' File ............................................. 149
CRBasic Example 13. 'Include' File to Control SW12 Terminal. 150
CRBasic Example 14. BeginProg / Scan() / NextScan / EndProg Syntax .. 155
CRBasic Example 15. Measurement Instruction Syntax ............................. 159
CRBasic Example 16. Use of Move() to Conserve Code Space ................. 162
CRBasic Example 17. Use of Variable Arrays to Conserve Code Space .... 162
CRBasic Example 18. Conversion of FLOAT / LONG to Boolean ............ 162
CRBasic Example 19. Evaluation of Integers ............................................. 163
CRBasic Example 20. Constants to LONGs or FLOATs............................ 163
CRBasic Example 21. String and Variable Concatenation ......................... 166
CRBasic Example 22. BeginProg / Scan / NextScan / EndProg Syntax ..... 169
CRBasic Example 23. Conditional Output .................................................. 170
CRBasic Example 24. Groundwater Pump Test ......................................... 172
CRBasic Example 25. Miscellaneous Program Features ............................ 174
CRBasic Example 26. Scaling Array .......................................................... 177
CRBasic Example 27. Program Signatures ................................................. 178
CRBasic Example 28. Use of Multiple Scans ............................................. 179
CRBasic Example 29. Conditional Code .................................................... 181
CRBasic Example 30. Custom Menus ........................................................ 185
CRBasic Example 31. Loading Large Data Sets ......................................... 188
CRBasic Example 32. Using TrigVar to Trigger Data Storage ................... 196
CRBasic Example 33. Two Data-Output Intervals in One Data Table ....... 197
Table of Contents
CRBasic Example 34. Programming with Bool8 and a Bit-Shift
CRBasic Example 35. NSEC — One Element Time Array ........................ 203
CRBasic Example 36. NSEC — Two Element Time Array ....................... 203
CRBasic Example 37. NSEC — Seven and Nine Element Time Arrays .... 204
CRBasic Example 38. NSEC —Convert Timestamp to Universal Time .... 205
CRBasic Example 39. Using TableFile() with Option 64 with CF Card .... 207
CRBasic Example 40. FieldCal() Zero ....................................................... 215
CRBasic Example 41. FieldCal() Offset ..................................................... 217
CRBasic Example 42. FieldCal() Two-Point Slope and Offset .................. 219
CRBasic Example 43. FieldCal() Multiplier ............................................... 221
CRBasic Example 44. FieldCalStrain() Calibration .................................... 225
CRBasic Example 45. Measurement with Excitation and Delay ................ 228
CRBasic Example 46. Measuring VoltSE() at 1 Hz .................................... 230
CRBasic Example 47. Measuring VoltSE() at 100 Hz ................................ 231
CRBasic Example 48. Measuring VoltSE() at 200 Hz ................................ 231
CRBasic Example 49. Measuring VoltSE() at 2000 Hz .............................. 233
CRBasic Example 50. PT100 in Four-Wire Half-Bridge ............................ 240
CRBasic Example 51. PT100 in Three-wire Half-bridge ............................ 242
CRBasic Example 52. PT100 in Four-Wire Full-Bridge ............................ 244
CRBasic Example 53. Receiving an RS-232 String .................................... 255
CRBasic Example 54. Measure Sensors / Send RS-232 Data ..................... 260
CRBasic Example 55. Using SDI12Sensor() to Test Cv Command ........... 276
CRBasic Example 56. Using Alternate Concurrent Command (aC) ........... 277
CRBasic Example 57. Using an SDI-12 Extended Command .................... 279
CRBasic Example 58. SDI-12 Sensor Setup ............................................... 280
CRBasic Example 59. Concatenation of Numbers and Strings ................... 284
CRBasic Example 60. Formatting Strings .................................................. 287
CRBasic Example 61. Subroutine with Global and Local Variables .......... 289
CRBasic Example 62. Custom Web Page HTML....................................... 293
CRBasic Example 63. Time Stamping with System Time .......................... 304
CRBasic Example 64. Measuring Settling Time ......................................... 320
CRBasic Example 65. Four-Wire Full-Bridge Measurement and
CRBasic Example 66. Implementation of DNP3 ........................................ 410
CRBasic Example 67. Concatenating Modbus Long Variables .................. 416
CRBasic Example 68. Custom Web Page HTML....................................... 421
CRBasic Example 69. Using NAN to Filter Data ....................................... 485
CRBasic Example 70. Using Bit-Shift Operators ....................................... 565
31
1. Introduction
1.1 HELLO
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 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 CR1000 are defined by our customers. Our intent with this operator's manual is to guide you to the tools you need to explore the limits of your application.
You can take advantage of the advanced CR1000 analog and digital measurement features by spending a few minutes working through the System Quickstart
and the System Overview
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 CR1000 training is also available from
Campbell Scientific.
This manual is organized to take you progressively deeper into the complexity of
CR1000 functions. You may not find it necessary to progress beyond the System
Quickstart
or System Overview
sections. Quickstart Tutorial
gives a cursory view of CR1000 data-acquisition and walks you through a first attempt at data-acquisition. System Overview
reviews salient topics that are covered in-depth in subsequent sections and appendices.
Review the exhaustive table of contents to learn how the manual is organized, and, when looking for a topic, use the index and PDF reader search.
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 CR1000 requires a peripheral hardware device, more information is available in the manual written for that device.
If you are unable to find the information you need, need assistance with ordering, or just wish to speak with one of our many product experts about your application, please call us at (435) 227-9100 or email [email protected]. In earlier days, Campbell Scientific dataloggers greeted our customers with a cheery
HELLO at the flip of the ON switch. While the user interface of the CR1000 datalogger has advanced beyond those simpler days, you can still hear the cheery
HELLO echoed in the voices you hear at Campbell Scientific.
1.2 Typography
The following type faces are used throughout the CR1000 Operator's Manual.
Type color other than black on white does not appear in printed versions of the manual:
• Underscore — Information specifically flagged as unverified. Usually found only in a draft or a preliminary released version.
• Capitalization — beginning of sentences, phrases, titles, names, Campbell
Scientific product model numbers.
33
34
Section 1. Introduction
• Bold — CRBasic instructions within the body text, input commands, output responses, GUI commands, text on product labels, names of data tables.
•
Page numbers
— in the PDF version of the manual, hyperlink to the page represented by the number.
• Italic — glossary entries and titles of publications, software, sections, tables, figures, and examples.
• Bold italic — CRBasic instruction parameters and arguments within the body text.
• Blue — CRBasic instructions when set on a dedicated line.
• Teal italic — CRBasic program comments.
• CRBasic code, input commands, and output responses when set apart on dedicated lines or in program examples, as follows:
Lucida Sans Typewriter
1.3 Capturing CRBasic Code
Many examples of CRBasic code are found throughout this manual. The manual is designed to make using this code as easy a possible. Keep the following in mind when copying code from this manual into CRBasic Editor:
If an example crosses pages, select and copy only the contents of one page at a time. Doing so will help avoid unwanted characters that may originate from page headings, page numbers, and hidden characters.
1.4 Release Notes
Preliminary Version 3/26/15 for OS v.28:
Reviewers
If feasible, please wait until a future preliminary version is available, perhaps in
June of 2015, for a comprehensive review.
Readers
If any information in this manual, which is preliminary to address OS v. 28 changes, is mission critical, please consult a Campbell Scientific application engineer.
Primary changes since Version 5/13 are addition of the Precautions
section and completion of about 90% of appendix Status, Settings and Data Table
Information
to reflect the major changes to the status, settings, and data table information registers introduced in OS v. 28.
The remaining sections, from Installation
through the appendix Supporting
Product Lists
, are slated for numerous updates. The following topics are
among those yet to be added or updated:
Analog measurement
Arrays
CDM
Constant table
Data types
DNP3 (major revision)
Function() instruction
Keyboard display
Modbus
NewFile() instruction
Operating system management
Period averaging
Precision of variables
Programming
Route() instruction
Security
Skipped records
Subroutines
SW12 and 12V terminals
Task sequencer
Terminal mode
Time and clock
Troubleshooting
Watchdog resets
Section 1. Introduction
35
2. Cautionary Statements
• DANGER: Fire, explosion, and severe-burn hazard. Misuse or improper installation of the internal lithium battery can cause severe injury. Do not recharge, disassemble, heat above 100 °C (212 °F), solder directly to the cell, incinerate, or expose contents to water. Dispose of spent lithium batteries properly.
• WARNING: o Protect from over-voltage o Protect from water o Protect from ESD
• CAUTION: Disuse accelerates depletion of the internal battery, which backs up several functions. The internal battery will be depleted in three years or less if a CR1000 is left on the shelf. When the CR1000 is continuously used, the internal battery may last up to 10 or more years. See section Internal
Battery — Details
for more information.
• IMPORTANT: Maintain a level of calibration appropriate to the application.
Campbell Scientific recommends factory recalibration of the CR1000 every three years.
37
3. Initial Inspection
• Check the Ships With tab at http://www.campbellsci.com/CR1000 for a list of items shipped with the CR1000. Among other things, the following are provided for immediate use: o Screwdriver to connect wires to terminals o Type-T thermocouple for use in the System Quickstart
tutorial o A datalogger program pre-loaded into the CR1000 that measures powersupply voltage and wiring-panel temperature. o A serial communication cable to connect the CR1000 to a PC o A ResourceDVD that contains product manuals and the following starter software:
̶ Short Cut
̶ PC200W
̶ DevConfig
• Upon receipt of the CR1000, inspect the packaging and contents for damage.
File damage claims with the shipping company.
• Immediately check package contents. Thoroughly check all packaging material for product that may be concealed. Check model numbers, part numbers, and product descriptions against the shipping documents. Model or part numbers are found on each product. On cabled items, the number is often found at the end of the cable that connects to the measurement device.
The Campbell Scientific number may differ from the part or model number printed on the sensor by the sensor vendor. Ensure that the expected lengths of cables were received. Contact Campbell Scientific immediately if there are any discrepancies.
• Check the operating system version in the CR1000 as outlined in the section
Sending the Operating System (OS)
and update as needed.
39
4. System Quickstart
Reading List
• Quickstart
• Specifications
• Installation
• Operation
This tutorial presents an introduction to CR1000 data acquisition and a practical programming and data retrieval exercise.
4.1 Data-Acquisition Systems — Quickstart
Related Topics:
• Data-Acquisition Systems — Quickstart
• Data-Acquisition Systems — Overview
Acquiring data with a Campbell Scientific datalogger is a fairly defined procedure involving the use of electronic sensor technology, the CR1000 datalogger, a telecommunication link, and datalogger support software
A CR1000 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. A typical data-acquisition system is conceptualized in figure Data-Acquisition System Components
Following is a list of typical system components:
• Sensors
— Electronic sensors convert the state of a phenomenon to an electrical signal.
• Datalogger
— The CR1000 measures electrical signals or reads serial characters. It converts the measurement or reading to engineering units, performs calculations, and reduces data to statistical values. Data are stored in memory to await transfer to a PC by way of an external storage device or a telecommunication link.
• Data Retrieval and Telecommunications
— Data are copied (not moved) from the CR1000, usually to a PC, by one or more methods using datalogger support software. Most of these telecommunication options are bi-directional and so allow programs and settings to be sent to the CR1000.
• Datalogger Support Software
— Software retrieves data and sends programs and settings. The software manages the telecommunication link and has options for data display.
• Programmable Logic Control
— Some data-acquisition systems require the control of external devices to facilitate a measurement or to control a device based on measurements. The CR1000 is adept at programmable logic control. Unfortunately, there is little discussion of these capabilities in this manual. Consult CRBasic Editor Help
or a Campbell Scientific
Application Engineer for more information.
• Measurement and Control Peripherals
— Some system requirements exceed the standard input or output compliment of the CR1000. Most of these requirements can be met by addition of input and output expansion modules.
41
Section 4. System Quickstart
Figure 1. Data-Acquisition System Components
42
4.2 Sensors — Quickstart
Related Topics:
• Sensors — Quickstart
• Measurements — Overview
• Measurements — Details
• Sensors — Lists
Sensors transduce phenomena into measurable electrical forms by modulating voltage, current, resistance, status, or pulse output signals. Suitable sensors do this accurately and precisely
Smart sensors have internal measurement and processing components and simply output a digital value in binary, hexadecimal, or ASCII character form. The CR1000, sometimes with the assistance of various peripheral devices, can measure or read nearly all electronic sensor output types.
Sensor types supported include:
• Analog o Voltage o Current o Thermocouples o Resistive bridges
• Pulse o High frequency o Switch closure o Low-level ac
• Period average
• Vibrating wire
• Smart sensors o SDI-12 o RS-232
Section 4. System Quickstart o Modbus o DNP3 o RS-485
Refer to the appendix Sensors — Lists
for a list of specific sensors available from Campbell Scientific. A library of sensor manuals and application notes are available at www.campbellsci.com to assist in measuring many sensor types. The previous list of supported sensors is not necessarily comprehensive. Consult with a Campbell Scientific application engineer for assistance in measuring unfamiliar sensors.
4.3 Datalogger — Quickstart
Related Topics:
• Datalogger — Quickstart
• Datalogger — Overview
• Dataloggers — List
The CR1000 can measure almost any sensor with an electrical response. The
CR1000 measures electrical signals and converts the measurement to engineering units, performs calculations and reduces data to statistical values. Most applications do not require that every measurement be stored but rather combined with other measurements in statistical or computational summaries. The CR1000 will store data in memory to await transfer to the PC with an external storage devices or telecommunications.
CR1000 electronics are protected in a sealed stainless steel shell. This design makes the CR1000 economical, small, and very rugged.
4.3.1.1 Wiring Panel — Quickstart
Related Topics
• Wiring Panel — Quickstart
• Wiring Panel — Overview
• Measurement and Control Peripherals
As shown in figure Wiring Panel
the CR1000 wiring panel provides terminals for connecting sensors, power, and communication devices. Surge protection is incorporated internally in most wiring panel connectors.
43
Section 4. System Quickstart
Figure 2. Wiring Panel
44
4.4 Power Supplies — Quickstart
Related Topics:
• Power Supplies — Specifications
• Power Supplies — Quickstart
• Power Supplies — Overview
• Power Supplies — Details
• Power Supplies — Products
• Power Sources
• Troubleshooting — Power Supplies
The CR1000 requires a power supply. Be sure that any power supply components match the specifications of the device to which they are connected. When connecting power, first switch off the power supply, then make the connection before switching the supply on.
The CR1000 is operable with power from 9.6 to 16 Vdc applied at the POWER
IN terminals of the green connector on the face of the wiring panel.
External power connects through the green POWER IN connector on the face of the CR1000. The positive power lead connects to 12V. The negative lead
Section 4. System Quickstart connects to G. The connection is internally reverse-polarity protected.
The CR1000 is internally protected against accidental polarity reversal on the power inputs.
4.4.1 Internal Battery — Quickstart
Related Topics:
• Internal Battery — Quickstart
• Internal Battery — Details
Warning Misuse or improper installation of the internal lithium battery can cause severe injury. Fire, explosion, and severe burns can result. Do not recharge, disassemble, heat above 100 °C (212 °F), solder directly to the cell, incinerate, or expose contents to water. Dispose of spent lithium batteries properly.
A lithium battery backs up the CR1000 clock, program, and memory.
4.5 Data Retrieval and Telecommunications — Quickstart
Related Topics:
• Data Retrieval and Telecommunications — Quickstart
• Data Retrieval and Telecommunications — Overview
• Data Retrieval and Telecommunications — Details
• Data Retrieval and Telecommunication Peripherals — Lists
If the CR1000 datalogger sits near a PC, direct-connect serial communication is usually the best solution. In the field, direct serial, a data-storage device, can be used during a site visit. A remote telecommunication option (or a combination of options) allows you to collect data from your PC over long distances and gives you the power to discover problems early.
A Campbell Scientific application engineer can help you make a shopping list for any of these telecommunication options:
• Standard o RS-232 serial
• Options o Ethernet o CompactFlash, Mass Storage o Cellular, Telephone o iOS, Android o PDA o Multidrop, Fiber Optic o Radio, Satellite
Some telecommunication options can be combined.
45
46
Section 4. System Quickstart
4.6 Datalogger Support Software — Quickstart
Reading List:
• Datalogger Support Software — Quickstart
• Datalogger Support Software — Overview
• Datalogger Support Software — Details
• Datalogger Support Software — Lists
Datalogger support software are PC or Linux software available from Campbell
Scientific that facilitate communication between the computer and the CR1000.
A wide array of software are available, but this section focuses on the following:
• Short Cut Program Generator for Windows (SCWin)
• PC200W Datalogger Starter Software for Windows
• LoggerLink Mobile Datalogger Starter software for iOS and Android
A CRBasic program must be loaded into the CR1000 to enable it to make measurements, read sensors, and store data. Short Cut is used to write simple
CRBasic programs without the need to learn the CRBasic programming language.
Short Cut is an easy-to-use wizard that steps you through the program building process.
After the CRBasic program is written, it is loaded onto the CR1000. Then, after sufficient time has elapsed for measurements to be made and data to be stored, data are retrieved to a computer. These functions are supported by PC200W and
LoggerLink Mobile.
Short Cut and PC200W are available at no charge at
www.campbellsci.com/downloads (http://www.campbellsci.com/downloads).
Note More information about software available from Campbell Scientific can be found at www.campbellsci.com http://www.campbellsci.com. Please consult with a Campbell Scientific application engineer for a software recommendation to fit a specific application.
4.7 Tutorial: Measuring a Thermocouple
This tutorial illustrates the primary functions of the CR1000. The exercise highlights the following:
• Attaching a sensor to the datalogger
• Creating a program for the CR1000 to measure the sensor
• Making a simple measurement
• Storing measurement data
• Collecting data from the CR1000 with a PC
• Viewing real-time and historical data from the CR1000
4.7.1 What You Will Need
The following items are used in this exercise. If you do not have all of these items, you can provide suitable substitutes. If you have questions about compatible power supplies or serial cables, please consult a Campbell Scientific application engineer.
Section 4. System Quickstart
• CR1000 datalogger
• Power supply with an output between 10 to 16 Vdc
• Thermocouple, 4 to 5 inches long, which is shipped with the CR1000
• Personal computer (PC) with an available nine-pin RS-232 serial port, or with a USB port and a USB-to-RS-232 adapter
• Nine-pin female to nine-pin male RS-232 cable, which is shipped with the
CR1000
• PC200W software, which is available on the Campbell Scientific resource
DVD or thumb drive, or at www.campbellsci.com.
Note If the CR1000 datalogger is connected to the PC during normal operations, use the Campbell Scientific SC32B interface to provide optical isolation through the CS I/O port. Doing so protects low-level analog measurements from grounding disturbances.
4.7.2 Hardware Setup
Note The thermocouple is attached to the CR1000 later in this exercise.
4.7.2.1 External Power Supply
With reference to the figure Power and Serial Communication Connections
proceed as follows:
1. Remove the green power connector from the CR1000 wiring panel.
2. Switch off the power supply.
3. Connect the positive lead of the power supply to the 12V terminal of the green power connector. Connect the negative (ground) lead of the power supply to the G terminal of the green connector.
4. After confirming the power supply connections have the correct polarity, insert the green power connector into its receptacle on the CR1000 wiring panel.
5. Connect the serial cable between the RS-232 port on the CR1000 and the RS-
232 port on the PC.
6. Switch the power supply on.
47
Section 4. System Quickstart
Figure 3. Power and Serial Communication Connections
48
4.7.3 PC200W Software Setup
1. Install PC200W software onto the PC. Follow on-screen prompts during the installation process. Use the default folders.
2. Open PC200W. Your PC should display a window similar to figure PC200W
Main Window
When PC200W is first run, the EZSetup Wizard will run automatically in a new window. This will configure the software to communicate with the CR1000 datalogger. The table PC200W EZSetup
Wizard Example Selections
indicates what information to enter on each screen of the wizard. Click Next at the lower portion of the window to advance.
See More! A video tutorial is available at
www.youtube.com/playlist?list=PL9E364A63D4A3520A&feature=plcp. Other video tutorials are available at www.campbellsci.com/videos.
After exiting the wizard, the main PC200W window becomes visible. This window has several tabs. The Clock/Program tab displays information on the currently selected CR1000 with clock and program functions. Monitor Data and
Collect Data tabs are also available. Icons across the top of the window access additional functions.
Figure 4. PC200W Main Window
Section 4. System Quickstart
Table 1. PC200W EZSetup Wizard Example Selections
Start the wizard to follow table entries.
Screen Name
Introduction
Datalogger Type and Name
COM Port Selection
Datalogger Settings
Datalogger Settings -
Security
Communication Setup
Summary
Information Needed
Provides an introduction to the EZSetup Wizard along with instructions on how to navigate through the wizard.
Select the CR1000 from the list box.
Accept the default name of "CR1000."
Select the correct PC COM port for the serial connection.
Typically, this will be COM1. Other COM numbers are possible, especially when using a USB cable.
Leave COM Port Communication Delay at 00 seconds.
Note When using USB serial cables, the COM number may change if the cable is moved to a different USB port. This will prevent data transfer between the software and CR1000. Should this occur, simply move the cable back to the original port. If this is not possible, close then reopen the PC200W software to refresh the available COM ports. Click on Edit Datalogger
Setup and change the COM port to the new port number.
Configures how the CR1000 communicates with the PC.
For this tutorial, accept the default settings.
For this tutorial, Security Code should be set to 0 and PakBus
Encryption Key should be left blank.
Provides a summary of settings in previous screens. No changes are needed for this tutorial. Press Finish to exit the wizard.
49
50
Section 4. System Quickstart
4.7.4 Write CRBasic Program with Short Cut
Short Cut objectives:
• Create a program to measure the voltage of the CR1000 power supply, temperature of the CR1000 wiring-panel, and ambient air temperature using a thermocouple.
• When program is downloaded to the CR1000, it takes samples once per second and stores averages of these values at one-minute intervals.
See More A video tutorial is available at
www.youtube.com/playlist?list=PLCD0CAFEAD0390434&feature=plcp
http://www.youtube.com/playlist?list=PLCD0CAFEAD0390434&feature=plcp.
Other video resources are available at www.campbellsci.com/videos.
4.7.4.1 Procedure: (Short Cut Steps 1 to 5)
1. Click on the Short Cut icon in the upper-right corner of the PC200W window.
The icon resembles a clock face.
2. The Short Cut window is shown. Click New Program.
3. In the Datalogger Model drop-down list, select CR1000.
4. In the Scan Interval box, enter 1 and select Seconds in the drop-down list box.
Click Next.
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 areas using 60 Hz ac voltage. Select 50 Hz for most of Europe and areas that operate at 50 Hz.
A second prompt lists sensor support options. Campbell Scientific, Inc. (US) is probably the best fit if you are outside Europe.
5. The next window displays Available Sensors and Devices. Expand the
Sensors folder by clicking on the symbol. This shows several sub-folders.
Expand the Temperature folder to view available sensors. Note that a wiring panel temperature ( PTemp_C in the Selected column) is selected by default.
Figure 5. Short Cut Temperature Sensor Folder
Section 4. System Quickstart
4.7.4.2 Procedure: (Short Cut Steps 6 to 7)
6. Double-click Type T (copper-constantan) Thermocouple to add it into the
Selected column. A dialog window is presented with several fields. By immediately clicking OK, you accept default options that include selection of
1 sensor and PTemp_C as the reference temperature measurement.
Note BattV (battery voltage) and PTempC (wiring panel temperature) are default measurements. During operation, battery and temperature should be recorded at least daily to assist in monitoring system status.
7. At the left portion of the main Short Cut window, click Wiring Diagram.
Attach the physical type-T thermocouple to the CR1000 as shown in the diagram. Click on 3. Sensors in the left portion of the window to return to the sensor selection screen.
51
Section 4. System Quickstart
Figure 6. Short Cut Thermocouple Wiring
52
4.7.4.3 Procedure: (Short Cut Step 8)
Historical Note In the space-race era, measuring thermocouples in the field was a complicated and cumbersome process incorporating a three-junction thermocouple, a micro-voltmeter, a vacuum flask filled with an ice slurry, and a thick reference book. One junction connected to the micro-voltmeter. Another sat in the vacuum flask as a 0 °C reference. The third was inserted into the location of the temperature of interest. When the microvolt measurement settled out, the microvolt reading was recorded by hand. This value was then looked up on the appropriate table in the reference book to determine the equivalent temperature.
Then along came Eric and Evan Campbell. Campbell Scientific designed the first
CR7 datalogger to make thermocouple measurements without the need for vacuum flasks, reference books, or three junctions. Now, there's an idea!
Nowadays, a thermocouple need only consist 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 two wires of dissimilar metals are wired to CR1000 analog input terminals is the reference junction.
When the two junctions are at different temperatures, a voltage proportional to the temperature difference is induced in the wires. The thermocouple measurement requires the reference-junction temperature to calculate the measurement-junction temperature using proprietary algorithms in the CR1000 operating system.
Section 4. System Quickstart
8. Click Next to advance to the Outputs tab, which displays the list Selected
Sensors to the left and data storage tables to the right under Selected Outputs.
Figure 7. Short Cut Outputs Tab
4.7.4.4 Procedure: (Short Cut Steps 9 to 12)
9. Two output tables ( 1 Table1 and 2 Table2 tabs) are initially available. Both tables have a Store Every field and a drop-down list from which to select the time units. These are used to set the time intervals when data are stored.
10. Only one table is needed for this tutorial, so Table 2 can be removed. Click 2
Table2, then click Delete Table.
11. Change the name of the remaining table from Table1 to OneMin, and then change the Store Every interval to 1 Minutes.
12. Add measurements to the table by selecting BattV under Selected Sensors, and then clicking Average in the center column of buttons. Repeat this procedure for PTemp_C and Temp_C.
53
Section 4. System Quickstart
Figure 8. Short Cut Outputs Tab
54
4.7.4.5 Procedure: (Short Cut Steps 13 to 14)
13. Click Finish to compile the program. Give the program the name
MyTemperature. A summary screen will appear showing the compiler results. Any errors during compiling will be displayed.
Figure 9. Short Cut Compile Confirmation
Section 4. System Quickstart
14. Close this window by clicking on X in the upper right corner.
4.7.5 Send Program and Collect Data
PC200W Datalogger Support Software objectives:
• Send the CRBasic program created by Short Cut in the previous procedure to the CR1000.
• Collect data from the CR1000.
• Store the data on the PC.
4.7.5.1 Procedure: (PC200W Step 1)
1. From the PC200W Clock/Program tab, click on Connect button to establish communications with the CR1000. When communications have been established, the button will change to Disconnect.
Figure 10. PC200W Main Window
4.7.5.2 Procedure: (PC200W Steps 2 to 4)
2. Click Set Clock to synchronize the CR1000 clock with the computer clock.
3. Click Send Program.... A warning will appear that data on the datalogger will be erased. Click Yes. A dialog box will open. Browse to the
C:\CampbellSci\SCWin folder. Select the MyTemperature.cr1 file. Click
Open. A status bar will appear while the program is sent to the CR1000 followed by a confirmation that the transfer was successful. Click OK to close the confirmation.
4. After sending a program to the CR1000, 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 CR1000 Public table.
55
56
Section 4. System Quickstart
Figure 11. PC200W Monitor Data Tab – Public Table
4.7.5.3 Procedure: (PC200W Step 5)
5. To view the OneMin table, select an empty cell in the display area. Click
Add. In the Add Selection window Tables field, click on OneMin, then click Paste. The OneMin table is now displayed.
Section 4. System Quickstart
Figure 12. PC200W Monitor Data Tab — Public and OneMin Tables
4.7.5.4 Procedure: (PC200W Step 6)
6. Click on the Collect Data tab and select data to be collected and the storage location on the PC.
Figure 13. PC200W Collect Data Tab
57
58
Section 4. System Quickstart
4.7.5.5 Procedure: (PC200W Steps 7 to 10)
7. Click the OneMin box so a check mark appears in the box. Under What to
Collect, select New data from datalogger. This selects the data to be collected.
8. Click on a table in the list to highlight it, then click Change Table's Output
File... to change the name of the destination file.
9. Click on Collect. A progress bar will appear as data are collected, followed by a Collection Complete message. Click OK to continue.
10. To view data, click the icon at the top of the PC200W window to open the View utility.
Figure 14. PC200W View Data Utility
Section 4. System Quickstart
4.7.5.6 Procedure: (PC200W Steps 11 to 12)
11. Click on to open a file for viewing. In the dialog box, select the
CR1000_OneMin.dat file and click Open.
12. The collected data are now shown.
Figure 15. PC200W View Data Table
4.7.5.7 Procedure: (PC200W Steps 13 to 14)
13. Click the heading of any data column. To display the data in that column in a line graph, click the icon.
14. Close the Graph and View windows, and then close the PC200W program.
59
60
Section 4. System Quickstart
Figure 16. PC200W View Line Graph
5. System Overview
Reading List
• Quickstart
• Specifications
• Installation
• Operation
A Campbell Scientific data-acquisition system is made up of the following basic components:
• Sensors
• Datalogger, which includes: o Clock o Measurement and control circuitry o Hardware and firmware to communicate with telecommunication devices o User-entered CRBasic program
• Telecommunication link or external storage device
• Datalogger support software
The figure Data-Acquisition Systems — Overview
illustrates a common
CR1000-based data-acquisition system.
61
Section 5. System Overview
Figure 17. Data-Acquisition System — Overview
62
5.1 Measurements — Overview
Related Topics:
• Sensors — Quickstart
• Measurements — Overview
• Measurements — Details
• Sensors — Lists
Section 5. System Overview
Most electronic sensors, whether or not they are supplied by Campbell Scientific, can be connected directly to the CR1000.
Manuals that discuss alternative input routes, such as external multiplexers, peripheral measurement devices, or a wireless sensor network, can be found at
www.campbellsci.com/manuals (http://www.campbellsci.com/manuals). You can also consult with a Campbell Scientific application engineer.
This section discusses direct sensor-to-datalogger connections and applicable
CRBasic programming to instruct the CR1000 how to make, process, and store the measurements. The CR1000 wiring panel has terminals for the following measurement inputs:
5.1.1 Time Keeping — Overview
Related Topics:
• Time Keeping — Overview
• Time Keeping — Details
Measurement of time is an essential function of the CR1000. Time measurement with the on-board clock enables the CR1000 to attach time stamps to data, measure the interval between events, and time the initiation of control functions.
5.1.2 Analog Measurements — Overview
Related Topics:
• Analog Measurements — Overview
• Analog Measurements — Details
Analog sensors output a continuous voltage or current signal that varies with the phenomena measured. Sensors compatible with the CR1000 output a voltage.
Current output can be made compatible with a resistive shunt.
Sensor connection is to H/L] terminals configurable for differential (DIFF) or single-ended ( SE) inputs. For example, differential channel 1 is comprised of terminals 1H and 1L, with 1H as high and 1L as low.
5.1.2.1 Voltage Measurements — Overview
Related Topicss:
• Voltage Measurements — Specifications
• Voltage Measurements — Overview
• Voltage Measurements — Details
• Maximum input voltage range: ±5000 mV
• Measurement resolution range: 0.67 µV to 1333 µV
Single-ended and differential connections are illustrated in the figures Analog
Sensor Wired to Single-Ended Channel #1
and Analog Sensor Wired to
Differential Channel #1
Table Differential and Single-Ended Input
Terminals
lists CR1000 analog-input channel termnal assignments.
Conceptually, analog-voltage sensors output two signals: high and low.
Sometimes, the low signal is simply sensor ground. A single-ended measurement measures the high signal with reference to ground, with the low signal tied to
63
64
Section 5. System Overview ground. A differential measurement measures the high signal with reference to the low signal. Each configuration has a purpose, but the differential configuration is usually preferred.
A differential configuration may significantly improve the voltage measurement.
Following are conditions the often indicate that a differential measurement should be used:
• Ground currents cause voltage drop between the sensor and the signal-ground terminal. Currents >5 mA are usually considered undesirable. These currents may result from resistive-bridge sensors using voltage excitation, but these currents only flow when the voltage excitation is applied. Return currents associated with voltage excitation cannot influence other singleended measurements of small voltage unless the same voltage-excitation terminal is enabled during the unrelated measurements.
• Measured voltage is less than 200 mV.
Figure 18. Analog Sensor Wired to Single-Ended Channel #1
Figure 19. Analog Sensor Wired to Differential Channel #1
Section 5. System Overview
Table 2. Differential and Single-Ended Input
Terminals
DIFF Terminals
1H
SE Terminals
1
1L 2
4H
4L
5H
5L
6H
6L
7H
7L
8H
2H
2L
3H
3L
8L
9
10
7
8
11
12
13
14
15
5
6
3
4
16
5.1.2.1.1 Single-Ended Measurements — Overview
Related Topics:
• Single-Ended Measurements — Overview
• Single-Ended Measurements — Details
A single-ended measurement measures the difference in voltage between the terminal configured for single-ended input and the reference ground. The measurement sequence is illustrated in figure Simplified Voltage Measurement
Sequence
While differential measurements are usually preferred, a singleended measurement is often adequate in applications wherein some types of noise are not a problem and care is taken to avoid problems caused by ground currents.
Examples of applications wherein a single-ended measurement may be preferred include:
• Not enough differential terminals available. Differential measurements use twice as many H/L] terminals as do single-ended measurements.
• Rapid sampling is required. Single-ended measurement time is about half that of differential measurement time.
• Sensor is not designed for differential measurements. Many Campbell
Scientific sensors are not designed for differential measurement, but the draw backs of a single-ended measurement are usually mitigated by large programmed excitation and/or sensor output voltages.
65
Section 5. System Overview
However, be aware that because a single-ended measurement is referenced to
CR1000 ground, any difference in ground potential between the sensor and the
CR1000 will result in error, as emphasized in the following examples:
• If the measuring junction of a thermocouple used to measure soil temperature is not insulated, and the potential of earth ground is greater at the sensor than at the point where the CR1000 is grounded, a measurement error will result.
For example, if the difference in grounds is 1 mV, with a copper-constantan thermocouple, the error will be approximately 25 °C.
• If signal conditioning circuitry, such as might be found in a gas analyzer, and the CR1000 use a common power supply, differences in current drain and lead resistance often result in different ground potentials at the two instruments despite the use of a common ground. A differential measurement should be made on the analog output from the external signal conditioner to avoid error.
5.1.2.1.2 Differential Measurements — Overview
Related Topics:
• Differential Measurements — Overview
• Differential Measurements — Details
Summary Use a differential configuration when making voltage measurements, unless constrained to do otherwise.
A differential measurement measures the difference in voltage between two input terminals. Its sequence is illustrated in the figure Simplified Differential-Voltage
Measurement Sequence
and is characterized by multiple automatic measurements, the results of which are averaged automatically before the final value is reported. For example, the sequence on a differential measurement using the VoltDiff() instruction involves two measurements — first with the high input referenced to the low, then with the inputs reversed. Reversing the inputs before the second measurement cancels noise common to both leads as well as small errors caused by junctions of different metals that are throughout the measurement electronics.
66
Figure 20. Simplified Differential-Voltage Measurement Sequence
5.1.2.2 Current Measurements — Overview
Related Topics:
• Current Measurements — Overview
• Current Measurements — Details
Section 5. System Overview
A measurement of current is accomplished through the use of external resistors to convert current to voltage, then measure the voltage as explained in the section
Differential Measurements — Overview
The voltage is measured with the
CR1000 voltage measurement circuitry.
5.1.2.3 Resistance Measurements — Overview
Related Topics:
• Resistance Measurements — Specifications
• Resistance Measurements — Overview
• Resistance Measurements — Details
• Resistance Measurements — Instructions
Many analog sensors use a variable-resistive device as the fundamental sensing element. These elements are placed in a wheatstone bridge or related circuit. The
CR1000 can measure most bridge circuit configurations. A bridge measurement is a special case voltage measurement. Examples include:
• Strain gage: resistance in a pressure-transducer strain gage correlates to a water pressure.
• Position potentiometer: a change in resistance in a wind-vane potentiometer correlates to a change in wind direction.
5.1.2.3.1 Voltage Excitation
Bridge resistance is determined by measuring the difference between a known voltage applied to the excitation (input) arm of a resistor bridge and the voltage measured on the output arm. The CR1000 supplies a precise-voltage excitation via Vx terminals . Return voltage is measured on H/L] terminals configured for single-ended or differential input. Examples of bridge-sensor wiring using voltage excitation are illustrated in figures Half-Bridge Wiring — Wind Vane
Potentiometer
and Full-Bridge Wiring — Pressure Transducer
Figure 21. Half-Bridge Wiring Example — Wind Vane Potentiometer
67
Section 5. System Overview
Figure 22. Full-Bridge Wiring Example — Pressure Transducer
68
5.1.2.4 Strain Measurements — Overview
Related Topics:
• Strain Measurements — Overview
• Strain Measurements — Details
• FieldCalStrain() Examples
Strain gage measurements are usually associated with structural-stress analysis.
When making strain measurements, please first consult with a Campbell Scientific application engineer.
5.1.3 Pulse Measurements — Overview
Related Topics
• Pulse Measurements — Specifications
• Pulse Measurements — Overview
• Pulse Measurements — Details
• Pulse Measurements — Instructions
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 CR1000 detects the state transition as each wave varies between voltage extremes (high-to-low or low-to-high). Measurements are processed and presented as counts, frequency, or timing data.
P terminals are configurable for pulse input to measure counts or frequency from the following signal types:
• High-frequency 5 Vdc square-wave
• Switch closure
• Low-level ac
C terminals configurable for input for the following:
• State
• Edge counting
Section 5. System Overview
• Edge timing o Resolution — 540 ns
Note A period-averaging sensor has a frequency output, but it is connected to a
SE terminal configured for period-average input and measured with the
PeriodAverage() instruction (see section Period Averaging — Overview
).
5.1.3.1 Pulses Measured
Pulse outputs vary. These variations are illustrated in the figure Pulse-Sensor
Output-Signal Types
Figure 23. Pulse-Sensor Output-Signal Types
5.1.3.2 Pulse-Input Channels
Table Pulse-Input Channels and Measurements
lists devices, channels and options for measuring pulse signals.
Table 3. Pulse-Input Terminals and Measurements
Pulse-Input
Terminal Input Type Data Option
P Terminal
•
•
•
Low-level ac
High-frequency
Switch-closure
• Counts
• Frequency
• Run average of frequency
C Terminal
• Low-level ac with LLAC4 (p.
module
• High-frequency
• Switch-closure
• Counts
• Frequency
• Running average of frequency
• Interval
• Period
• State
CRBasic
Instruction
PulseCount()
PulseCount()
TimerIO()
69
Section 5. System Overview
5.1.3.3 Pulse Sensor Wiring
Read More See the section Pulse Measurement Tips
An example of a pulse sensor connection is illustrated in figure Pulse-Input
Wiring Example — Anemometer Switch
Pulse sensors have two active wires, one of which is ground. Connect the ground wire to a (signal ground) terminal. Connect the other wire to a P terminal. Sometimes the sensor will require power from the CR1000, so there may be two power wires — one of which will be power ground. Connect power ground to a G terminal. Do not confuse the pulse wire with the positive-power wire, or damage to the sensor or
CR1000 may result. Some switch-closure sensors may require a pull-up resistor.
Figure 24. Pulse-Input Wiring Example — Anemometer
70
5.1.4 Period Averaging — Overview
Related Topics:
• Period Averaging — Specifications
• Period Averaging — Overview
• Period Averaging — Details
The CR1000 can measure the period of an analog signal.
Numbered SE terminals are configurable for period average:
• Voltage gain: 1, 10, 33, 100
• Maximum frequency: 200 kHz
• Resolution: 136 ns
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
CR1000 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
Section 5. System Overview 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 the signal.
Period-average measurements use 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 pulsecount measurements. The frequency resolution of pulse-count measurements can be improved by extending the measurement interval by increasing the scan interval and by averaging. For information on frequency resolution, see
Frequency Resolution
5.1.5 Vibrating-Wire Measurements — Overview
Related Topics:
• Vibrating-Wire Measurements — Specifications
• Vibrating-Wire Measurements — Overview
• Vibrating-Wire Measurements — Details
Vibrating-wire sensors impart long term stability to many environmental and industrial measurement applications. The CR1000 is equipped to measure these sensors either directly or through interface modules.
A thermistor included in most sensors can be measured to compensate for temperature errors.
Measuring the resonant frequency by means of period averaging is the classic technique, but Campbell Scientific has developed static and dynamic spectralanalysis techniques (VSPECT TM
) that produce superior noise rejection, higher resolution, diagnostic data, and, in the case of dynamic VSPECT, measurements up to 333.3 Hz. Dynamic measurements require addition of an interface module.
SE terminals are configurable for time-domain vibrating-wire measurement, which is a technique now superseded in most applications by VSPECT
vibrating-wire analysis. See appendix Vibrating-Wire Input Modules List
for more information
5.1.6 Reading Smart Sensors — Overview
Related Topics:
• Reading Smart Sensors — Overview
• Reading Smart Sensors — Details
A smart sensor is equipped with independent measurement circuitry that makes the basic measurement and sends measurement and measurement related data to the CR1000. Smart sensors vary widely in output modes. Many have multiple output options. Output options supported by the CR1000 include SDI-12
RS-232
Modbus
and DNP3
The following smart sensor types can be measured on the indicated terminals:
71
72
Section 5. System Overview
• SDI-12 devices: C
• Synchronous Devices for Measurement (SDM): C
• Smart sensors: C terminals, RS-232 port, and CS I/O port with the appropriate interface.
• Modbus or DNP3 network: RS-232 port and CS I/O port with the appropriate interface
• Other serial I/O devices: C terminals, RS-232 port, and CS I/O port with the appropriate interface
5.1.6.1 SDI-12 Sensor Support — Overview
Related Topics:
• SDI-12 Sensor Support — Overview
• SDI-12 Sensor Support — Details
• Serial I/O: SDI-12 Sensor Support — Programming Resource
• SDI-12 Sensor Support — Instructions
SDI-12 is a smart-sensor protocol that uses one SDI-12 port and is powered by 12
Vdc. It is fully supported by the CR1000 datalogger. Refer to the chart CR1000
Terminal Definitions
which indicates C terminals that can be configured for
SDI-12 input. For more information about SDI-12 support, see section Serial I/O:
SDI-12 Sensor Support — Details
5.1.6.2 RS-232 — Overview
The CR1000 has 6 ports available for RS-232 input as shown in figure Terminals
Configurable for RS-232 Input
Note With the correct adapter, the CS I/O port can often be used as an RS-232
I/O port.
As indicated in figure Use of RS-232 and Digital I/O when Reading RS-232
Devices
RS-232 sensors can often be connected to C terminal pairs configured for serial I/O, to the RS-232 port, or to the CS I/O port with the proper adapter. Ports can be set up for baud rate, parity, stop-bit, and so forth as described in CRBasic Editor Help.
Section 5. System Overview
Figure 25. Terminals Configurable for RS-232 Input
Figure 26. Use of RS-232 and Digital I/O when Reading RS-232 Devices
5.1.7 Field Calibration — Overview
Related Topics:
• Field Calibration — Overview
• Field Calibration — Details
Calibration increases accuracy of a measurement device by adjusting its output, or the measurement of its output, to match independently verified quantities.
Adjusting sensor output directly is preferred, but not always possible or practical.
By adding FieldCal() or FieldCalStrain() instructions to the CR1000 CRBasic program, measurements of a linear sensor can be adjusted by modifying the programmed multiplier and offset applied to the measurement.
73
74
Section 5. System Overview
5.1.8 Cabling Effects — Overview
Related Topics:
• Cabling Effects — Overview
• Cabling Effects — Details
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.
5.1.9 Synchronizing Measurements — Overview
Related Topics:
• Synchronizing Measurements — Overview
• Synchronizing Measurements — Details
Timing of a measurement is usually controlled relative to the CR1000 clock.
When sensors in a sensor network are measured by a single CR1000, 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 CR1000s.
5.2 PLC Control — Overview
Related Topics:
• PLC Control — Overview
• PLC Control — Details
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• PLC Control — Instructions
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
This section is slated for expansion. Below are a few tips.
• Short Cut programming wizard has provisions for simple on/off control.
• PID control can be done with the CR1000. Ask a Campbell Scientific application engineer for more information.
• When controlling a PID algorithm, a delay between processing (algorithm input) and the control (algorithm output) is not usually desirable. A delay will not occur in either sequential mode
or pipeline mode
assuming an appropriately fast scan interval is programmed, and the program is not skipping scans. In sequential mode, if some task occurs that pushes processing time outside the scan interval, skipped scans will occur and the
PID control may fail. In pipeline mode, with an appropriately sized scan buffer, no skipped scans will occur. However, the PID control may fail as the processing instructions work through the scan buffer.
• To avoid these potential problems, bracket the processing instructions in the
CRBasic program with ProcHiPri and EndProcHiPri. Processing
Section 5. System Overview instructions between these instructions are given the same high priority as measurement instructions and do not slip into the scan buffer if processing time is increased. ProcHiPri and EndProcHiPri may not be selectable in
CRBasic Editor. You can type them in anyway, and the compiler will recognize them.
5.3 Datalogger — Overview
Related Topics:
• Datalogger — Quickstart
• Datalogger — Overview
• Dataloggers — List
The CR1000 datalogger is the principal component of a data-acquisition system.
It is a precision instrument designed for demanding environments and low-power applications. CPU, analog and digital measurements, analog and digital outputs, and memory usage are controlled by the operating system, the on-board clock, and the CRBasic application program you write.
The application program is written in CRBasic, a programming language that includes measurement, data processing, and analysis routines and a standard
BASIC instruction set. Short Cut
a very user-friendly program generator software application, can be used to write programs for many basic measurement and control applications. CRBasic Editor, a software application available in some datalogger support software
packages, is used to write more complex programs.
Measurement data are stored in non-volatile memory. Most applications do not require that every measurement be recorded. Rather, measurements are usually combined in statistical or computational summaries. The CR1000 has the option of evaluating programmed instructions sequentially (sequential mode), or in the more efficient pipeline mode. In pipeline mode, the CR1000 determines the order of instruction execution.
5.3.1 Time Keeping — Overview
Related Topics:
• Time Keeping — Overview
• Time Keeping — Instructions
Nearly all CR1000 functions depend on the internal clock. The operating system and the CRBasic user program use the clock for scheduling operations. The
CRBasic program times functions through various instructions, but the method of timing is nearly always in the form of "time into an interval." For example, 6:00
AM is represented in CRBasic as "360 minutes into a 1440 minute interval", 1440 minutes being the length of a day and 360 minutes into that day corresponding to
6:00 AM.
Zero minutes into an interval puts it at the "top" of that interval, that is at the beginning of the second, minute, hours, or day. For example, 0 minutes into a
1440 minute interval corresponds to Midnight. When an interval of a week is programmed, the week begins at Midnight on Monday morning.
75
76
Section 5. System Overview
5.3.2 Wiring Panel — Overview
Related Topics
• Wiring Panel — Quickstart
• Wiring Panel — Overview
• Measurement and Control Peripherals
The wiring panel of the CR1000 is the interface to most functions. These functions are introduced in the following sections while reviewing wiring-panel features illustrated in the figure Wiring Panel
The table CR1000 Terminal
Definitions
details the functions of the various terminals on the wiring panel.
Measurement and control peripherals expand the input and output capabilities of the wiring panel.
Figure 27. Wiring Panel
Section 5. System Overview
Table 4. CR1000 Wiring Panel Terminal Definitions
SE 1 2
DIFF
┌ 1 ┐
3 4 5
┌ 2 ┐
6
┌ 3 ┐
7 8
┌ 4 ┐
9 10 11 12 13 14 15 16 COM1 COM2 COM3 COM4
┌ 5 ┐ ┌ 6 ┐ ┌ 7 ┐ ┌ 8 ┐
T x
R x
T x
R x
T x
R x
T x
R x
Analog Input
Single-ended
Differential (high/low)
Analog period average
H L H L H L H L H L H L H L H L
-
1
6
8
1
6
Vibrating wire
2 1
6
Analog Output
Switched Precision Voltage 3
Pulse Counting
Switch closure
1
0
High frequency
Low-level Vac
Digital I/O
Control
Status
General I/O (TX,RX)
Pulse-width modulation
Timer I/O
Interrupt
Continuous Regulated
3
5 Vdc
Continuous Unregulated
3
12 Vdc
Switched Regulated
3
5 Vdc
Switched Unregulated
3
12 Vdc
UART
True RS-232 (TX/RX)
TTL RS-232 (TX/RX)
SDI-12
SDM (Data/Clock/Enable)
1
0
2
8
8
4
8
8
8
1
2
8
1
4 2
4
4
1
77
Section 5. System Overview
1
Terminal expansion modules are available.
2
Static, frequency-domain measurement
3
Check the table Current Source and Sink Limits
4
Requires an interfacing device for sensor input. See the table CS I/O to RS-232 Interfaces
5.3.2.1 Switched Voltage Output — Overview
Related Topics:
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• PLC Control — Overview
• PLC Control — Details
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• PLC Control — Instructions
C terminals are selectable as binary inputs, control outputs, or communication ports. See the section Measurement — Overview
for a summary of measurement functions. Other functions include device-driven interrupts, asynchronous communications and SDI-12 communications. Table CR1000
Terminal Definitions
summarizes available options.
Figure Control and Monitoring with C Terminals
illustrates a simple application wherein a C terminal configured for digital input and another configured for control output are used to control a device (turn it on or off) and monitor the state of the device (whether the device is on or off).
78
Section 5. System Overview
Figure 28. Control and Monitoring with C Terminals
5.3.2.2 Voltage Excitation — Overview
Related Topics:
• Voltage and Current Excitation — Specifications
• Voltage Excitation — Overview
The CR1000 has several terminals designed to supply switched voltage to peripherals, sensors, or control devices:
• Voltage Excitation (switched-analog output) — Vx terminals supply precise voltage in the range of ±2500 mV. These terminals are regularly used with
• resistive-bridge measurements. Each terminal will source up to ±25 mA.
• Digital I/O — C terminals configured for on / off and PWM (pulse width modulation) or PDM (pulse duration modulation) on C4, C5 and C7.
• Switched 12 Vdc — SW12 terminals. Primary battery voltage under program control to switch external devices (such as humidity sensors) requiring nominal 12 Vdc. SW12 terminals can source up to 900 mA. See the table Current Source and Sink Limits
• Continuous Analog Output — available by adding a peripheral analog output device available from Campbell Scientific. Refer to section Analog-Output
Modules
for information on available expansion modules.
79
80
Section 5. System Overview
5.3.2.3 Grounding Terminals
Read More See Grounding
Proper grounding lends stability and protection to a data acquisition system. It is the easiest and least expensive insurance against data loss — and often the most neglected. The following terminals are provided for connection of sensor and
CR1000 datalogger grounds:
• Signal Ground ( ) — reference for single-ended analog inputs, pulse inputs, excitation returns, and as a ground for sensor shield wires. Signal returns for pulse inputs should use terminals located next to the pulse input terminal.
Current loop sensors, however, should be grounded to power ground.
• Power Ground ( G) — return for 5V, SW12, 12V, current loop sensors, and C configured for control. 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.
• Earth Ground Lug ( ) — connection point for a heavy-gage earth-ground wire. A good earth connection is necessary to secure the ground potential of the CR1000 and shunt transients away from electronics. Minimum 14 AWG wire is recommended.
5.3.2.4 Power Terminals
Related Topics:
• Power Supplies — Specifications
• Power Supplies — Quickstart
• Power Supplies — Overview
• Power Supplies — Details
• Power Supplies — Products
• Power Sources
• Troubleshooting — Power Supplies
5.3.2.4.1 Power In
The POWER IN connector is the connection point for external power supply components.
5.3.2.4.2 Power Out Terminals
Note Refer to the section Switched Voltage Output — Details
for more information on using the CR1000 as a power supply for sensors and peripheral devices.
The CR1000 can be used as a power source for sensors and peripherals. The following voltages are available:
• 12V terminals: unregulated nominal 12 Vdc. This supply closely tracks the primary CR1000 supply voltage, so it may rise above or drop below the power requirement of the sensor or peripheral. Precautions should be taken to prevent damage to sensors or peripherals from over- or under-voltage
Section 5. System Overview conditions, and to minimize the error associated with the measurement of underpowered sensors. See section Power Supplies — Overview
• 5V terminals: regulated 5 Vdc at 300 mA. The 5 Vdc supply is regulated to within a few millivolts of 5 Vdc so long as the main power supply for the
CR1000 does not drop below <MinPwrSupplyVolts>.
5.3.2.5 Communication Ports
Read More See sections RS-232 and TTL
Data Retrieval and
Telecommunications — Details
and PakBus — Overview
The CR1000 is equipped with hardware ports that allow communication with other devices and networks, such as:
• PC
• Smart sensors
• Modbus and DNP3 networks
• Ethernet
• Modems
• Campbell Scientific PakBus networks
• Other Campbell Scientific dataloggers
• Campbell Scientific datalogger peripherals
Communication ports include:
• CS I/O
• RS-232
•
• SDI-12
• SDM
• CPI (requires a peripheral device)
• Ethernet (requires a peripheral device)
• Peripheral Port — supports Ethernet and CompactFlash memory card modules
5.3.2.5.1 CS I/O Port
Read More See the appendix Serial Port Pinouts
• One nine-pin port, labeled CS I/O, for communicating with a PC or modem through Campbell Scientific communication interfaces, modems, or peripherals. CS I/O telecommunication interfaces are listed in the appendix
Serial I/O Modules List
Note CS I/O communications normally operate well over only a few feet of serial cable.
81
82
Section 5. System Overview
5.3.2.5.2 RS-232 Ports
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.
• One nine-pin DCE port, labeled RS-232, normally used to communicate with a PC running datalogger support software
or to connect a third-party modem. With a null-modem adapter attached, it serves as a DTE device.
Read More See the appendix Serial Port Pinouts
• Two-terminal (TX and RX) RS-232 ports can be configured: o Up to Four TTL ports, configured from C terminals.
Note RS-232 ports are not isolated
5.3.2.5.3 Peripheral Port
Provided for connection of some Campbell Scientific CF memory card modules and IP network link hardware. See the appendices Network Links List
and
Data Storage Devices — List
See the section Memory Card (CRD: Drive)
— Overview
for precautions when using memory cards.
Read More See the section TCP/IP
• One multi-pin port, labeled Peripheral Port.
5.3.2.5.4 SDI-12 Ports
Read More See the section Serial I/O: SDI-12 Sensor Support — Details
SDI-12 is a 1200 baud protocol that supports many smart sensors. Each port requires one terminal and supports up to 16 individually addressed sensors.
• Up to four ports configured from C terminals.
5.3.2.5.5 SDM Port
SDM is a protocol proprietary to Campbell Scientific that supports several
Campbell Scientific digital sensor and telecommunication input and output expansion peripherals and select smart sensors.
• One SDM port configured from C1, C2, and C3 terminals.
5.3.2.5.6 CPI Port
CPI is a new proprietary protocol that supports an expanding line of Campbell
Scientific CDM modules. CDM modules are higher-speed input- and outputexpansion peripherals. CPI ports also enable networking between compatible
Campbell Scientific dataloggers.
• Connection to CDM devices requires a peripheral CPI interface as listed in the appendix CDM/CPI Interfaces
Section 5. System Overview
5.3.2.5.7 Ethernet Port
Read More See the section TCP/IP
• Ethernet capability requires a peripheral Ethernet interface device, as listed in the appendix Network Links List
5.3.3 Keyboard Display — Overview
Related Topics:
• Keyboard Display — Overview
• Keyboard Display — Details
• Keyboard Display — List
• Custom Menus — Overview
The CR1000KD Keyboard Display is a powerful tool for field use. The
CR1000KD, illustrated in figure CR1000KD Keyboard Display
is a peripheral optional to the CR1000.
The keyboard display is an essential installation, maintenance, and troubleshooting tool for many applications. It allows interrogation and programming of the CR1000 datalogger independent of other telecommunication links. More information on the use of the keyboard display is available in the section Custom Menus — Overview
See the appendix Keyboard
Displays List
for more information on available products.
Figure 29. CR1000KD Keyboard Display
5.3.3.1 Character Set
The keyboard display character set is accessed using one of the following three procedures:
• Most keys have a characters shown in blue printed above the key. To enter a character, press Shift one to three times to select the position of the character shown above the key, then press the key. For example, to enter Y, press Shift three times, then press the PgDn.
83
84
Section 5. System Overview
• To insert a space ( Spc) or change case (Cap), press Shift one to two times for the position, then press BkSpc.
• To insert a character not printed on the keyboard, enter Ins , scroll down to
Character, press Enter, then scroll up, down, left, or right to the desired character in the list, then press Enter.
5.3.3.2 Custom Menus — Overview
Related Topics:
• Custom Menus — Overview
• Data Displays: Custom Menus — Details
• Custom Menus — Instruction Set
• Keyboard Display — Overview
• CRBasic Editor Help for DisplayMenu()
CRBasic programming in the CR1000 facilitates creation of custom menus for the
CR1000KD Keyboard Display.
Figure Custom Menu Example
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 one of four values. Each submenu displays two values from CR1000 memory. PanelTemps shows the CR1000 wiring-panel temperature at each scan, and the one-minute sample of panel temperature. TCTemps displays two thermocouple temperatures. For more information on creating custom menus, see section Data Displays: Custom Menus
— Details
Figure 30. Custom Menu Example
Section 5. System Overview
5.3.4 Measurement and Control Peripherals — Overview
Related Topics:
• Measurement and Control Peripherals — Overview
• Measurement and Control Peripherals — Details
• Measurement and Control Peripherals — Lists
Modules are available from Campbell Scientific to expand the number of terminals on the CR1000. These include:
Multiplexers
Multiplexers increase the input capacity of terminals configured for analog-input, and the output capacity of Vx excitation terminals.
SDM Devices
Serial Device for Measurement expand the input and output capacity of the
CR1000. These devices connect to the CR1000 through terminals C1, C2, and
C3.
CDM Devices
Campbell Distributed Modules are a growing line of measurement and control modules that use the higher speed CAN Peripheral Interface (CPI) bus technology. These connect through the SC-CPI interface.
5.3.5 Power Supplies — Overview
Related Topics:
• Power Supplies — Specifications
• Power Supplies — Quickstart
• Power Supplies — Overview
• Power Supplies — Details
• Power Supplies — Products
• Power Sources
• Troubleshooting — Power Supplies
The CR1000 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 connector on the face of the CR1000. The positive power lead connects to 12V. The negative lead connects to G. The connection is internally reverse-polarity protected.
The CR1000 is internally protected against accidental polarity reversal on the power inputs.
The CR1000 has a modest-input power requirement. For example, in low-power applications, it can operate for several months on non-rechargeable batteries.
Power systems for longer-term remote applications typically consist of a charging source, a charge controller, and a rechargeable battery. When ac line power is available, a Vac-to-Vac or Vac-to-Vdc wall adapter, a peripheral charging
85
86
Section 5. System Overview regulator, and a rechargeable battery can be used to construct a UPS (uninterruptible power supply).
5.3.6 CR1000 Configuration — Overview
Related Topics:
• CR1000 Configuration — Overview
• CR1000 Configuration — Details
• Status, Settings, and Data Table Information (Status/Settings/DTI)
The CR1000 is shipped factory-ready with an operating system (OS) installed.
Settings default to those necessary to communicate with a PC via RS-232 and to accept and execute user-application programs. For more complex applications, some settings may need adjustment. Settings can be changed with the following:
• DevConfig (Device Configuration Utility). See section Device Configuration
Utility
)
• CR1000KD Keyboard Display. See section Keyboard Display — Details
(p.
and the appendix Keyboard Display — List
• Datalogger support software. See section Datalogger Support Software —
Overview
OS files are sent to the CR1000 with DevConfig or through the program Send button in datalogger support software. When the OS is sent with DevConfig, most settings are cleared, whereas, when sent with datalogger support software, most settings are retained. Operating systems can also be transferred to the CR1000 with a Campbell Scientific mass storage device or memory card.
OS updates are occasionally made available at www.campbellsci.com. OS and settings remain intact when power is cycled.
5.3.7 CRBasic Programming — Overview
Related Topics:
• CRBasic Programming — Overview
• CRBasic Programming — Details
• CRBasic Programming — Instructions
• Programming Resource Library
• CRBasic Editor Help
A CRBasic program directs the CR1000 how and when sensors are to be measured, calculations made, and data stored. A program is created on a PC and sent to the CR1000. The CR1000 can store a number of programs in memory, but only one program is active at a given time. Two Campbell Scientific software applications, Short Cut and CRBasic Editor, are used to create CR1000 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 add more complex code with CRBasic Editor.
Section 5. System Overview
Note Once a Short Cut generated program has been edited with CRBasic Editor
it can no longer be modified with Short Cut.
5.3.8 Memory — Overview
Related Topics:
• Memory — Overview
• Memory — Details
• Data Storage Devices — List
Data concerning CR1000 memory are posted in the Status
table. Memory is organized as follows:
• OS Flash o 2 MB o Operating system (OS) o Serial number and board rev o Boot code o Erased when loading new OS (boot code only erased if changed)
• Serial Flash o 512 KB o Device settings o Write protected o Non-volatile o CPU: drive residence
̶ Automatically allocated
̶ FAT file system
̶ Limited write cycles (100,000)
̶ Slow (serial accesses)
• Main Memory o 4 MB SRAM o Battery backed o OS variables o CRBasic compiled program binary structure (490 KB maximum) o CRBasic variables o Data memory o Communication memory o USR: drive
̶ User allocated
̶ FAT32 RAM drive
̶ Photographic images (See the appendix Cameras )
̶ Data files from TableFile() instruction (TOA5, TOB1, CSIXML and CSIJSON) o Keep
memory (OS variables not initialized) o Dynamic runtime memory allocation
Note CR1000s with serial numbers smaller than 11832 were usually supplied with only 2 MB of SRAM.
87
88
Section 5. System Overview
Memory for data can be increased with the addition of a CF
card and CF storage module (connects to the Peripheral port) or a mass storage device (thumb drive) that connects to CS I/O or both. See the appendix Data-Storage Devices
— List
for information on available memory expansion products.
By default, final-data memory (memory for stored data) is organized as ring memory. When the ring is full, oldest data are overwritten by newest data. The
DataTable() instruction, however, has an option to set a data table to Fill and
Stop.
5.3.9 Data Retrieval and Telecommunications — Overview
Related Topics:
• Data Retrieval and Telecommunications — Quickstart
• Data Retrieval and Telecommunications — Overview
• Data Retrieval and Telecommunications — Details
• Data Retrieval and Telecommunication Peripherals — Lists
Final data are written to tables in final-data memory. When retreived, data are copied to PC files via a telecommunication link (Data Retrieval and
Telecommunications — Details the PC.
) or by transporting a CompactFlash ® (CF) card (CRD: drive) or a Campbell Scientific mass storage media (USB: drive) to
5.3.9.1 PakBus® Communications — Overview
Related Topics:
• PakBus ® Communications — Overview
• PakBus
• PakBus
®
®
Communications — Details
Communications — Instructions
• PakBus Networking Guide (available at www.campbellsci.com/manuals
(http://www.campbellsci.com/manuals))
The CR1000 communicates with datalogger support software
telecommunication peripherals
and other dataloggers
with PakBus, a proprietary network communication protocol. PakBus is a protocol similar in concept to IP (Internet Protocol). By using signatured data packets, PakBus increases the number of communication and networking options available to the
CR1000. Communication can occur via TCP/IP, on the RS-232 port, CS I/O port, and C terminals.
Advantages of PakBus are as follows:
• Simultaneous communication between the CR1000 and other devices.
• Peer-to-peer communication — no PC required. Special CRBasic instructions simplify transferring data between dataloggers for distributed decision making or control.
• Data consolidation — other PakBus dataloggers can be used as "sensors" to consolidate all data into one CR1000.
• Routing — the CR1000 can act as a router, passing on messages intended for another Campbell Scientific datalogger. PakBus supports automatic route detection and selection.
Section 5. System Overview
• Short distance networks — with no extra hardware, a CR1000 can talk to another CR1000 over distances up to 30 feet by connecting transmit, receive and ground wires between the dataloggers.
In a PakBus network, each datalogger is set to a unique address. The default
PakBus address in most devices is 1. To communicate with the CR1000, the datalogger support software must know the CR1000 PakBus address. The PakBus address is changed using the CR1000KD Keyboard Display
DevConfig utility
CR1000 Status table
or PakBus Graph
software.
5.3.9.2 Telecommunications
Data are usually copied through a telecommunication link to a file on the supporting PC using Campbell Scientific datalogger support software
See also the manual and Help for the software being used.
5.3.9.3 Mass-Storage Device
Caution When removing a Campbell Scientific mass storage device (thumb drive) from the CR1000, do so only when the LED is not lit or flashing.
Removing the device while it is active can cause data corruption.
Data stored on a Campbell Scientific mass storage device are retrieved via a telecommunication link to the CR1000, if the device remains on the CS I/O port, or by removing the device, connecting it to a PC, and copying files using
Windows File Explorer.
5.3.9.4 Memory Card (CRD: Drive) — Overview
Related Topics:
• Memory Card (CRD: Drive) — Overview
• Memory Card (CRD: Drive) — Details
• Memory Cards and Record Numbers
• Data Output: Writing High-Frequency Data to Memory Cards
• File-System Errors
• Data Storage Devices — List
• Data-File Format Examples
• Data Storage Drives Table
Caution Observe the following precautions when using memory cards:
• Before installing a memory card, turn off power to the CR1000.
• Before removing a card from the card slot, disable it by pressing the Eject button, wait for the green light, and then turn CR1000 power off.
• Do not remove a memory card while the drive is active or data corruption and damage the card may result.
• Prevent data loss by collecting data before sending a program from the memory card to the CR1000. Sending a program from the card to the
CR1000 often erases all data.
Data stored on a memory card are collected to a PC through a telecommunication link with the CR1000 or by removing the card and collecting it directly using a third-party adapter on a PC.
89
90
Section 5. System Overview
Telecommunications
The CR1000 accesses data on the card as needed to fill data-collection requests initiated with the datalogger support software Collect
command. An alternative, if care is taken, is to collect data in binary form. Binary data are collected using the datalogger support software File Control | Retrieve
command. Before collecting data this way, stop the CR1000 program to ensure data are not written to the card while data are retrieved, or data will be corrupted.
Direct with Adapter to PC
Data transfer is much faster through an adapter than through a telecommunications link. This speed difference is especially noticeable with large files.
The format of data files collected with a PC with an adapter is different than the standard Campbell Scientific data file formats. See section Data-File Format
Examples
for more information. Data files can be converted to a Campbell
Scientific format using CardConvert
software.
5.3.9.5 Data-File Formats in CR1000 Memory
Routine CR1000 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 Data Storage — On-board
for more information on the use of the TableFile() instruction.
5.3.9.6 Data Format on Computer
CR1000 data stored on a PC with datalogger support software
are formatted as either ASCII or binary depending on the file type selected in the support software. Consult the software manual for details on available data-file formats.
5.3.10 Alternate Telecommunications — Overview
Related Topics:
• Alternate Telecommunications — Overview
• Alternate Telecommunications — Details
The CR1000 communicates with external devices to receive programs, send data, or act in concert with a network. The primary communication protocol is PakBus
Other telecommunication protocols are supported, including Web API
(p.
Modbus
and DNP3
Refer to the section Specifications
for a complete list of supported protocols. The appendix Data Retrieval and
Telecommunications — Peripherals Lists
lists peripheral communication devices available from Campbell Scientific.
Keyboard displays also communicate with the CR1000. See Keyboard Display —
Overview
for more information.
Section 5. System Overview
5.3.10.1 Modbus
Related Topics:
• Modbus — Overview
• Modbus — Details
The CR1000 supports Modbus master and Modbus slave communications for inclusion in Modbus SCADA networks. 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 CR1000 communicates with Modbus over RS-232, RS-485 (with a RS-232 to
RS-485 adapter), and TCP.
Modbus systems consist of a master (PC), RTU / PLC slaves, field instruments
(sensors), and the communication-network hardware. The communication 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 communication modes, RTU and ASCII. However, CR1000s communicate in RTU mode exclusively.
Field instruments can be queried by the CR1000. Because Modbus has a set command structure, programming the CR1000 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
CR1000 without additional hardware.
5.3.10.2 DNP3 — Overview
Related Topics:
• DNP3 — Overview
• DNP3 — Details
The CR1000 supports DNP3 slave communications for inclusion in DNP3
SCADA networks.
5.3.10.3 TCP/IP — Overview
Related Topics:
• TCP/IP — Overview
• TCP/IP — Details
• TCP/IP — Instructions
• TCP/IP Links — List
The CR1000 supports the following TCP/IP protocols:
• DHCP
• DNS
• FTP
• HTML
• HTTP
•
• Micro-serial server
• NTCIP
• NTP
91
92
Section 5. System Overview
• PakBus over TCP/IP
• Ping
• POP3
• SMTP
• SNMP
• Telnet
• Web API
• XML
5.3.11 Security — Overview
Related Topics:
• Security — Overview
• Security — Details
The CR1000 is supplied void of active security measures. By default, RS-232,
Telnet, FTP and HTTP services, all of which give high level access to CR1000 data and CRBasic programs, are enabled without password protection.
You may wish to secure your CR1000 from mistakes or tampering. The following may be reasons to concern yourself with datalogger security:
• Collection of sensitive data
• Operation of critical systems
• Networks accessible by many individuals
If you are concerned about security, especially TCP/IP threats, you should send the latest operating system
to the CR1000, disable un-used services, and secure those that are used. Security actions to take may include the following:
• Set passcode lockouts
• Set PakBus/TCP password
• Set FTP username and password
• Set AES-128 PakBus encryption key
• Set .csipasswd file for securing HTTP and web API
• Track signatures
• Encrypt program files if they contain sensitive information
• Hide program files for extra protection
• Secure the physical CR1000 and power supply under lock and key
Note All security features can be subverted through physical access to the
CR1000. If absolute security is a requirement, the physical CR1000 must be kept in a secure location.
Related Topics
• Auto Calibration — Overview
• Auto Calibration — Details
• Auto-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
The CR1000 auto-calibrates to compensate for changes caused by changing
Section 5. System Overview operating temperatures and aging. With auto-calibration disabled, measurement accuracy over the operational temperature range is specified as less accurate by a factor of 10. That is, over the extended temperature range of –40 °C to 85 °C, the accuracy specification of ±0.12% of reading can degrade to ±1% of reading with auto-calibration disabled. If the temperature of the CR1000 remains the same, there is little calibration drift if auto-calibration is disabled. Auto-calibration can become disabled when the scan rate is too small. It can be disabled by the
CRBasic program when using the Calibrate() instruction.
Note The CR1000 is equipped with an internal voltage reference used for calibration. The voltage reference should be periodically checked and recalibrated by Campbell Scientific for applications with critical analog voltage measurement requirements. A minimum two-year recalibration cycle is recommended.
Unless a Calibrate() instruction is present, the CR1000 automatically autocalibrates during spare time in the background as an automatic slow sequence
(p.
with a segment of the calibration occurring every four seconds. If there is insufficient time to do the background calibration because of a scan-consuming user program, the CR1000 will display the following warning at compile time:
Warning: Background calibration is disabled.
5.3.12 Maintenance — Overview
Related Topics:
• Maintenance — Overview
• Maintenance — Details
With reasonable care, the CR1000 should give many years of reliable service.
5.3.12.1 Protection from Moisture — Overview
Protection from Moisture — Overview
Protection from Moisture — Details
Protection from Moisture — Products
The CR1000 and most of its peripherals must be protected from moisture.
Moisture in the electronics will seriously damage, and probably render unrepairable, the CR1000. Water can come from flooding or sprinkler irrigation, but most often comes as condensation. In most cases, protection from water is easily accomplished by placing the CR1000 in a weather-tight enclosure with desiccant and elevating the enclosure above the ground. The CR1000 is shipped with internal desiccant packs to reduce humidity. Desiccant in enclosures should be changed periodically.
Note 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 Enclosures List
for information on available weather-tight enclosures.
93
94
Section 5. System Overview
5.3.12.2 Protection from Voltage Transients
Read More See Grounding
The CR1000 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 CR1000. Refer to the appendix Transient-Voltage Suppressors List
for information on available surge-protection devices.
5.3.12.3 Factory Calibration
Related Topics
• Auto Calibration — Overview
• Auto Calibration — Details
• Auto-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
The CR1000 uses an internal voltage reference to routinely calibrate itself.
Campbell Scientific recommends factory recalibration every two years. If calibration services are required, refer to the section entitled Assistance
at the front of this manual.
5.3.12.4 Internal Battery — Details
Related Topics:
• Internal Battery — Quickstart
• Internal Battery — Details
Warning Misuse or improper installation of the internal lithium battery can cause severe injury. Fire, explosion, and severe burns can result. Do not recharge, disassemble, heat above 100 °C (212 °F), solder directly to the cell, incinerate, or expose contents to water. Dispose of spent lithium batteries properly.
The CR1000 contains a lithium battery that operates the clock and SRAM when the CR1000 is not externally powered. In a CR1000 stored at room temperature, the lithium battery should last approximately three years (less at temperature extremes). If the CR1000 is continuously powered, the lithium cell should last much longer. Internal lithium battery voltage can be monitored from the CR1000
Status table. Operating range of the battery is approximately 2.7 to 3.6 Vdc.
Replace the battery as directed in Replacing the Internal Battery
when the voltage is below 2.7 Vdc.
The lithium battery is not rechargeable. Its design is one of the safest available and uses lithium thionyl chloride technology. Maximum discharge current is limited to a few mA. It is protected from discharging excessive current to the internal circuits (there is no direct path outside) with a 100 ohm resistor. The design is UL listed. See: http://www.tadiran-batterie.de/download/eng/LBR06Eng.pdf.
Section 5. System Overview
The battery is rated from -55 °C up to 85 °C.
5.4 Datalogger Support Software — Overview
Reading List:
• Datalogger Support Software — Quickstart
• Datalogger Support Software — Overview
• Datalogger Support Software — Details
• Datalogger Support Software — Lists
Datalogger support software are PC or Linux software available from Campbell
Scientific that facilitate communication between the computer and the CR1000.
A wide array of software are available, but most of the heavy lifting gets done by the following:
• Short Cut Program Generator for Windows (SCWin) — Short Cut is used to write simple CRBasic programs without the need to learn the CRBasic programming language. Short Cut is an easy-to-use wizard that steps you through the program building process.
• PC200W Datalogger Starter Software for Windows — Supports only direct serial connection to the CR1000 with hardwire or spread-spectrum radio. It supports sending a CRBasic program, data collection, and setting the CR1000 clock. PC200W is available at no charge at www.campbellsci.com/downloads
(http://www.campbellsci.com/downloads).
• LoggerLink Mobile Apps — Simple tool that allows an iOS or Android device to communicate with IP-enabled CR1000s. It includes most PC200W functionality.
• PC400 Datalogger Support Software — Includes PC200W functions,
CRBasic Editor, and supports all telecommunication modes (except satellite) in attended mode.
• LoggerNet Datalogger Support Software — Includes all PC400 functions and supports all telecommunication options (except satellite) in unattended mode.
It also includes many enhancements such as graphical data displays.
Note More information about software available from Campbell Scientific can be found at www.campbellsci.com http://www.campbellsci.com. Please consult with a Campbell Scientific application engineer for a software recommendation to fit a specific application.
95
6. Specifications
CR1000 specifications are valid from ─25° to 50°C in non-condensing environments unless otherwise specified. Recalibration is recommended every two years. Critical specifications and system configurations should be confirmed with a Campbell Scientific application engineer before purchase.
PROGRAM EXECUTION RATE
10 ms to one day at 10 ms increments
3.0 -- 8 10 30
3.0.1 -- 8 10 30
PERIOD AVERAGE
3.5.0a -- 8 10 30
DIGITAL I/O PORTS (C 1–8)
7.0.1 -- 8 10 30 configured input channels. Channel expansion provided by optional analog multiplexers. basic resolution (Basic Res) is the resolution of a single A/D
better (finer) resolution by twice than Basic Res.
3.1.1 -- 8 10
Range (mV)
±5000
±2500
±250
±25
±7.5
±2.5
1
DIFF
Res (μV) 2
667
333
3.33
0.33
Basic
Res (μV)
1333
667
6.7
0.67
2
Range overhead of ≈9% on all ranges guarantees full-scale
Resolution of DIFF measurements with input reversal.
(p. 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:
3.5.1 -- 8 10
Volt-
Input
Peak-Peak mV 6
Pulse
µs
Max kHz 8
1
10
100 mV250 mV25 mV2_5
500
10
2
10
2
2
2.5
10
100
200
50
5
6
7
8
Signal to be centered around Threshold (see PeriodAvg()
Signal to be centered around ground.
The maximum frequency = 1/(twice minimum pulse width) outputs. Provide on/off, pulse width modulation, edge timing, subroutine interrupts / wake up, switch-closure pulse counting, high-frequency pulse counting, asynchronous communications
(UARTs), and SDI-12 communications. SDM communications are also supported.
7.1 -- 8 10 30 LOW FREQUENCY MODE MAX: <1 kHz
7.2 -- 8 10 30 HIGH FREQUENCY MODE MAX: 400 kHz
7.3 -- 8 10 30 SWITCH-CLOSURE FREQUENCY MAX: 150 Hz
7.4 -- 8 10 30 EDGE-TIMING RESOLUTION: 540 ns
7.5 -- 8 10 30 OUTPUT VOLTAGES (no load): high 5.0 V ±0.1 V; low < 0.1 V
7.6 -- 8 10 30 OUTPUT RESISTANCE: 330 Ω
7.7 -- 8 10 30 INPUT STATE: high 3.8 to 16 V; low -8.0 to 1.2 V
7.8 -- 8 10 30 INPUT HYSTERISIS: 1.4 V
7.9 -- 8 10 30
100 kΩ with inputs < 6.2 Vdc
220 Ω with inputs ≥ 6.2 Vdc
SERIAL DEVICE / RS-232 SUPPORT: 0 to 5 Vdc UART
SWITCHED 12 Vdc (SW-12)
One independent 12 Vdc unregulated terminal switched on and
3.2 -- 8 10 ANALOG INPUT ACCURACY
±(0.12% of reading + offset
±(0.18% of reading + offset
3
3
3
3
:
), 0° to 40°C
), -25° to 50°C
), -55° to 85°C (-XT only)
Accuracy does not include sensor and measurement noise.
Offset definitions:
Offset = 1.5 x Basic Res + 1.0 µV (for DIFF measurement w/ input reversal)
Offset = 3 x Basic Res + 2.0 µV (for DIFF measurement w/o input reversal)
Offset = 3 x Basic Res + 3.0 µV (for SE measurement)
ANALOG MEASUREMENT SPEED:
3.3.1 -- 8 10
Inte-
Type
Code
250
_60Hz 5
5 gration
Time
250 µs
20.00 ms
Settling
Time
450 µs
3 ms
---Total Time 4
SE with no
Rev
---
DIFF
Input
Rev
≈1 ms
≈25 ms
≈12 ms
≈50 ms
4
5
Includes 250 μs for conversion to engineering units.
AC line noise filter 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
3.4.3 -- 8 10 30 DC COMMON-MODE REJECTION: >100 dB
3.4.4 -- 8 10 30 NORMAL-MODE REJECTION: 70 dB @ 60 Hz when using 60 Hz rejection
INPUT VOLTAGE RANGE W/O MEASUREMENT CORRUPTION: ±8.6
Vdc max.
SUSTAINED-INPUT VOLTAGE W/O DAMAGE: ±16 Vdc max
3.4.7 -- 8 10 30 INPUT CURRENT: ±1 nA typical, ±6 nA max. @ 50°C; ±90 nA @ 85°C
3.4.8 -- 8 10 30 INPUT RESISTANCE: 20 GΩ typical
3.4.9 -- 8 10 30
5.0 -- 8 10 30 RATIOMETRIC MEASUREMENTS
MEASUREMENT TYPES: The CR1000 provides ratiometric resistance measurements using voltage excitation. Three switched voltage excitation outputs are available for measurement of four- and six-wire full bridges, and two-, three-, and four-wire half bridges. Optional excitation polarity reversal minimizes dc errors.
5.2 -- 8 10 RATIOMETRIC MEASUREMENT ACCURACY 9,11
Note Important assumptions outlined in footnote 9:
±(0.04% of Voltage Measurement + Offset 12 )
Accuracy specification assumes excitation reversal for
11 include bridge resistor errors and sensor and measurement noise.
BRFull() Instruction: ∆X = 1000 x ∆V1/VX, expressed as mV•V -1 . accuracy. See manual section Resistance Measurements
for more information.
12 Offset definitions:
(
Offset = 1.5 x Basic Res + 1.0 µV (for DIFF measurement w/ input reversal)
Offset = 3 x Basic Res + 2.0 µV (for DIFF measurement w/o input reversal) p.
Note Excitation reversal reduces offsets by a factor of two.
6.0 -- 8 10 30 PULSE COUNTERS (P 1–2)
6.0.1 -- 8 10 30 for each input.
6.1 -- 8 10 30 MAXIMUM COUNTS PER SCAN: 16.7 x 10 6
SWITCH-CLOSURE MODE:
Minimum Switch Closed Time: 5 ms
Minimum Switch Open Time: 6 ms
Max. Bounce Time: 1 ms open without 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
6.4 -- 8 10 30 above 2.2 V after input filter with 1.2 μs time constant. at 20°C, 650 mA at 50°C, and 360 mA at 85°C.
8.0 -- 8 10 30 CE COMPLIANCE
8.1 -- 8 10 30 STANDARD(S) TO WHICH CONFORMITY IS DECLARED:
IEC61326:2002
DCE nine-pin: (not electrically isolated) for computer connection or connection of modems not manufactured by Campbell
Scientific.
COM1 to COM4: four independent Tx/Rx pairs on control ports
(non-isolated); 0 to 5 Vdc UART
Baud Rate: selectable from 300 bps to 115.2 kbps.
Optional Formats: seven data bits; two stop bits; odd, even parity.
CS I/O PORT: Interface with telecommunication peripherals manufactured by Campbell Scientific.
SDI-12: Digital control ports C1, C3, C5, C7 are individually
9.4 -- 30 configurable and meet SDI-12 Standard v. 1.3 for datalogger or Ethernet peripherals.
9.5 -- 8 10 30
Modbus, DNP3, FTP, HTTP, XML, HTML, POP3, SMTP, Telnet,
NTCIP, NTP, web API, SDI-12, SDM. core running at 7.3 MHz)
10.2 -- 8 10 30 backed SRAM for CPU, CRBasic programs, and data.
10.3 -- 8 10 30
GPS optional.
10.4 -- 8 10 30 RTC CLOCK RESOLUTION: 10 ms
11.0 -- 8 10 30 SYSTEM POWER REQUIREMENTS
11.1 -- 8 10 30 VOLTAGE: 9.6 to 16 Vdc
11.2 -- 8 10
SRAM backup. Typically provides three years of back-up.
EXTERNAL BATTERIES: Optional 12 Vdc nominal alkaline and protected.
11.4 -- 8 10 30 thermocouple measurements):
±0.3°C, -25° to 50°C
4.0 -- 8 10 30 ANALOG OUTPUTS (VX 1–3)
Three switched voltage outputs sequentially active only during measurement.
4.0.2 -- 8 10 30 RANGES AND RESOLUTION:
4.1 -- 8 10
Channel Range tion
Current
/ Sink
Input Hysteresis: 12 mV RMS @ 1 Hz
Maximum ac-Input Voltage: ±20 V
6.4.1 -- 8 10 30 Sine wave (mV RMS)
20
Range (Hz)
1.0 to 20
2000
5000
DIGITAL I/O PORTS (C 1–8)
7.0.1 -- 8 10 30
0.3 to 10,000
0.3 to 20,000
Eight ports software selectable as binary inputs or control outputs. Provide on/off, pulse width modulation, edge timing,
Sleep Mode: 0.7 mA typical; 0.9 mA maximum
1 Hz Sample Rate (one fast SE meas.) mA
100 Hz Sample Rate (one fast SE meas.): 16 mA
100 Hz Sample Rate (one fast SE meas. with RS-232
Active external keyboard display adds 7 mA (100 mA with backlight on).
PHYSICAL
12.1
12.2 clearance required for cables and leads.
MASS / WEIGHT: 1.0 kg / 2.1 lbs
WARRANTY
13.1 4.2 -- 8 10
(VX 1–3) ±2.5 Vdc 0.67 mV
ANALOG OUTPUT ACCURACY (VX):
±25 mA
±(0.06% of setting + 0.8 mV, 0° to 40°C
±(0.12% of setting + 0.8 mV, -25° to 50°C
±(0.18% of setting + 0.8 mV, -55° to 85°C (-XT only)
VX FREQUENCY SWEEP FUNCTION: Switched outputs provide a programmable swept frequency, 0 to 2500 mV square waves for exciting vibrating wire transducers. high-frequency pulse counting, asynchronous communications are also supported.
97
98
7. Installation
Reading List
• Quickstart
• Specifications
• Installation
• Operation
7.1 Protection from Moisture — Details
Protection from Moisture — Overview
Protection from Moisture — Details
Protection from Moisture — Products
When humidity levels reach the dew point, condensation occurs and damage to
CR1000 electronics can result. Effective humidity control is the responsibility of the user.
The CR1000 module is protected by a packet of silica gel desiccant, which is installed at the factory. This packet is replaced whenever the CR1000 is repaired at Campbell Scientific. The module should not normally be opened except to replace the internal lithium battery.
Adequate desiccant should be placed in the instrumentation enclosure to provide added protection.
7.2 Temperature Range
The CR1000 is designed to operate reliably from –40 to 75 °C (–55 °C to 85 °C, optional) in non-condensing environments.
7.3 Enclosures
Enclosures — Details
Enclosures — Products
Illustrated in figure Enclosure
is the typical use of enclosures available from
Campbell Scientific designed for housing the CR1000. This style of enclosure is classified as NEMA 4X (watertight, dust-tight, corrosion-resistant, indoor and outdoor use). Enclosures have back plates to which are mounted the CR1000 datalogger and associated peripherals. Back plates are perforated on one-inch centers with a grid of holes that are lined as needed with anchoring nylon inserts.
The CR1000 base has mounting holes (some models may be shipped with rubber inserts in these holes) through which small screws are inserted into the nylon anchors. Remove rubber inserts, if any, to access the mounting holes. Screws and nylon anchors are supplied in a kit that is included with the enclosure.
99
Section 7. Installation
Figure 31. Enclosure
100
7.4 Power Supplies — Details
Related Topics:
• Power Supplies — Specifications
• Power Supplies — Quickstart
• Power Supplies — Overview
• Power Supplies — Details
• Power Supplies — Products
• Power Sources
• Troubleshooting — Power Supplies
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. For example, the power requirement of a weather station may be substantially higher during extreme cold, while at the same time, the extreme cold constricts the power available from the power supply.
The CR1000 is internally protected against accidental polarity reversal on the power inputs.
The CR1000 has a modest-input power requirement. For example, in low-power applications, it can operate for several months on non-rechargeable batteries.
Power systems for longer-term remote applications typically consist of a charging source, a charge controller, and a rechargeable battery. When ac line power is available, a Vac-to-Vac or Vac-to-Vdc wall adapter, a peripheral charging regulator, and a rechargeable battery can be used to construct a UPS (un-
Section 7. Installation interruptible power supply).
Contact a Campbell Scientific application engineer if assistance in selecting a power supply is needed, particularly with applications in extreme environments.
7.4.1 CR1000 Power Requirement
The CR1000 is operable with power from 9.6 to 16 Vdc applied at the POWER
IN terminals of the green connector on the face of the wiring panel.
The CR1000 is internally protected against accidental polarity reversal on the power inputs. A transient voltage suppressor (TVS) diode at the POWER IN 12V terminals provides protection from intermittent high voltages by clamping these transients to within the range of 19 to 21 V . Sustained input voltages in excess of
19 V, can damage the TVS diode.
Caution Voltage levels at the 12V and switched SW12 terminals, and pin 8 on the CS I/O port, are tied closely to the voltage levels of the main power supply.
For example, if the power received at the POWER IN 12V and G terminals is 16
Vdc, the 12V and SW12 terminals, and pin 8 on the CS I/O port, will supply 16
Vdc to a connected peripheral. If the connected peripheral or sensor is not designed for that voltage level, it may be damaged.
7.4.2 Calculating Power Consumption
Read More Power Supplies — Overview
System operating time for batteries can be determined by dividing the battery capacity (ampere-hours) by the average system current drain (amperes). The
CR1000 typically has a quiescent current drain of 0.5 mA (with display off) 0.6 mA with a 1 Hz sample rate, and >10 mA with a 100 Hz scan rate. When the
CR1000KD Keyboard Display is active, an additional 7 mA is added to the current drain while enabling the backlight for the display adds 100 mA.
7.4.3 Power Sources
Related Topics:
• Power Supplies — Specifications
• Power Supplies — Quickstart
• Power Supplies — Overview
• Power Supplies — Details
• Power Supplies — Products
• Power Sources
• Troubleshooting — Power Supplies
Be aware that some Vac-to-Vdc power converters produce switching noise or ac
ripple as an artifact of the ac-to-dc rectification process. Excessive switching noise on the output side of a power supply can increase measurement
101
Section 7. Installation noise, and so increase measurement error. Noise from grid or mains power also may be transmitted through the transformer, or induced electro-magnetically from nearby motors, heaters, or power lines.
High-quality power regulators typically reduce noise due to power regulation.
Using the optional 50 Hz or 60 Hz rejection arguments for CRBasic analog input measurement instructions (see Sensor Support
) often improves rejection of noise sourced from power mains. The CRBasic standard deviation instruction,
SDEV(), can be used to evaluate measurement noise.
The main power for the CR1000 is provided by an external-power supply.
7.4.3.1 Vehicle Power Connections
If a CR1000 is powered by a motor-vehicle power supply, a second power supply may be needed. When starting the motor of the vehicle, battery voltage often drops below the voltage required for datalogger operation. This may cause the
CR1000 to stop measurements until the voltage again equals or exceeds the lower limit. A second supply can be provided to prevent measurement lapses during vehicle starting. The figure Connecting CR1000 to Vehicle Power Supply
illustrates how a second power supply is connected to the CR1000. The diode OR connection causes the supply with the largest voltage to power the CR1000 and prevents the second backup supply from attempting to power the vehicle.
Figure 32. Connecting to Vehicle Power Supply
102
7.4.4 Uninterruptable Power Supply (UPS)
If external alkaline power is used, the alkaline battery pack is connected directly to the POWER IN 12V and G terminals (9.6 to 16 Vdc).
A UPS (un-interruptible power supply) is often the best power source for longterm installations. An external UPS consists of a primary-power source, a charging regulator external to the CR1000, and an external battery. The primary power source, which is often a transformer, power converter, or solar panel, connects to the charging regulator, as does a nominal 12 Vdc sealed rechargeable battery. A third connection connects the charging regulator to the 12V and G terminals of the POWER IN connector..
Section 7. Installation
7.4.5 External Power Supply Installation
When connecting external power to the CR1000, remove the green POWER IN connector from the CR1000 face. Insert the positive lead into the green connector, then insert the negative lead. Re-seat the green connector into the
CR1000. The CR1000 is internally protected against reversed external-power polarity. Should this occur, correct the wire connections.
7.5 Switched Voltage Output — Details
Related Topics:
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• PLC Control — Overview
• PLC Control — Details
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• PLC Control — Instructions
The CR1000 wiring panel is a convenient power distribution device for powering sensors and peripherals that require a 5 Vdc, or 12 Vdc source. It has two 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 can vary widely and will fluctuate with the dc supply used to power the CR1000, so be careful to match the datalogger power supply to the requirements of the sensors. The 5V terminal is internally regulated to within ±4%, which is good regulation as a power source, but typically not adequate for bridge sensor excitation. Table Current Sourcing Limits
lists the current limits of 12V and 5V terminals. Greatly reduced output voltages on these terminals may occur if the current limits are exceeded. See the section
Terminals Configured for Control
for more information.
Table 5. Current Source and Sink Limits
Terminal
VX or EX (voltage excitation)
2
SW-12
3
12V + SW-12 (combined)
4
5V + CS I/O (combined)
5
±25 mA maximum
< 900 mA @ 20°C
< 630 mA @ 50°C
< 450 mA @ 70°C
< 3.00 A @ 20°C
< 2.34 A @ 50°C
< 1.80 A @ 70°C
< 1.50 A @ 85°C
< 200 mA
Limit
1
103
104
Section 7. Installation
Table 5. Current Source and Sink Limits
Terminal Limit
1
1
"Source" is positive amperage; "sink" is negative amperage (–).
2
Exceeding current limits will cause voltage output to become unstable. Voltage should stabilize once current is again reduced to within stated limits.
3
A 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.
4
Polyfuse protected. See footnote 3.
5
Current is limited by a current limiting circuit, which holds the current at the maximum by dropping the voltage when the load is too great.
7.5.1 Switched-Voltage Excitation
Three switched, analog-output (excitation) terminals ( VX1 to VX3) operate under program control to provide ±2500 mV dc excitation. Check the accuracy specification of terminals configured for exctitation in CR1000 Specifications
(p.
to understand their limitations. Specifications are applicable only for loads not exceeding ±25 mA.
Read More Table Current Source and Sink Limits
has more information on excitation load capacity.
CRBasic instructions that control voltage excitation include the following:
• BrFull()
• BrFull6W()
• BrHalf()
• BrHalf3W()
• BrHalf4W()
• ExciteV()
Note Square-wave ac excitation for use with polarizing bridge sensors is configured with the RevEx parameter of the bridge instructions.
7.5.2 Continuous Regulated (5V Terminal)
The 5V terminal is regulated and remains near 5 Vdc (±4%) so long as the
CR1000 supply voltage remains above 9.6 Vdc. It is intended for power sensors or devices requiring a 5 Vdc power supply. It is not intended as an excitation source for bridge measurements. However, measurement of the 5V terminal output, by means of jumpering to an analog input on the same CR1000), will facilitate an accurate bridge measurement if 5V must be used.
Note Table Current Source and Sink Limits
has more information on excitation load capacity.
7.5.3 Continuous Unregulated Voltage (12V Terminal)
Use 12V terminals to continuously power devices that require 12 Vdc. Voltage
Section 7. Installation on the 12V terminals will change with CR1000 supply voltage.
Caution Voltage levels at the 12V and switched SW12 terminals, and pin 8 on the CS I/O port, are tied closely to the voltage levels of the main power supply.
For example, if the power received at the POWER IN 12V and G terminals is 16
Vdc, the 12V and SW12 terminals, and pin 8 on the CS I/O port, will supply 16
Vdc to a connected peripheral. If the connected peripheral or sensor is not designed for that voltage level, it may be damaged.
7.5.4 Switched Unregulated Voltage (SW12 Terminal)
The SW12 terminal is often used to power devices such as sensors that require 12
Vdc during measurement. Current sourcing must be limited to 900 mA or less at
20 °C. See table Current Source and Sink Limits
Voltage on a SW12 terminal will change with CR1000 supply voltage. Two CRBasic instructions,
SW12() and PortSet(), control the SW12 terminal. Each instruction is handled differently by the CR1000. SW12() is a processing task. Use it when controlling power to SDI-12 and serial sensors that 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 designed to be driven by a C terminal is available from Campbell Scientific. It is listed in the appendix Relay Drivers — Products
(p.
Note SW12 terminal power is unregulated and can supply up to 900 mA at 20
°C. See table Current Source and Sink Limits
A resettable polymeric fuse protects against over-current. Reset is accomplished by removing the load or turning off the SW12 terminal for several seconds.
The SW12 terminal may behave differently under pipeline
and sequential
(p.
modes. See CRBasic Editor Help for more information.
7.6 Grounding
Grounding the CR1000 with its peripheral devices and sensors is critical in all applications. Proper grounding will ensure maximum ESD (electrostatic discharge) protection and measurement accuracy.
7.6.1 ESD Protection
Reading List:
• ESD Protection
• Lightening Protection
ESD (electrostatic discharge) can originate from several sources, the most common and destructive being lightning strikes. Primary lightning strikes hit the
CR1000 or sensors directly. Secondary strikes induce a high voltage in power lines or sensor wires.
105
106
Section 7. Installation
The primary devices for protection against ESD are gas-discharge tubes (GDT).
All critical inputs and outputs on the CR1000 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
Grounds
signal grounds and power grounds have independent paths to the earth-ground lug.
Communication ports are another path for transients. You should provide communication paths, such as telephone or short-haul modem lines, with sparkgap protection. Spark-gap protection is usually an option with these products, so request it when ordering. Spark gaps 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 large brass ground lug on the wiring panel 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, search for published literature on lightning protection or contact a qualified lightningprotection 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 Vac receptacles on older Vac wiring may indicate that a safety ground exists when, in fact, the socket is not grounded. If a safety ground does exist, good practice dictates the verification that it carries no current. If the integrity of the Vac power ground is in doubt, also ground the system through the building plumbing, or use another verified connection to earth ground.
Figure 33. Schematic of Grounds
Section 7. Installation
7.6.1.1 Lightning Protection
Reading List:
• ESD Protection
• Lightening 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 on the market, Campbell Scientific, for many years, has employed a simple and inexpensive design that protects most systems in most circumstances. The system employs a lightening rod, metal mast, heavy-gage ground wire, and ground rod to direct damaging current away from the CR1000. This system, however, not infallible. Figure Lightning-Protection Scheme
is a drawing of a typical application of the system.
107
Section 7. Installation
Note Lightning strikes may damage or destroy the CR1000 and associated sensors and power supplies.
In addition to protections discussed in
,
use of a simple lightning rod and lowresistance path to earth ground is adequate protection in many installations. .
Figure 34. Lightning-Protection Scheme
108
7.6.2 Single-Ended Measurement Reference
Low-level, single-ended voltage measurements (<200 mV) are sensitive to ground potential fluctuation due to changing return currents from 12V, SW12, 5V, and
C1 – C8 terminals. The CR1000 grounding scheme is designed to minimize these
Section 7. Installation fluctuations by separating signal grounds ( ) from power grounds ( G). To take advantage of this design, observe the following rules:
• Connect grounds associated with 12V, SW12, 5V, and C1 – C8 terminals to
G terminals.
• Connect excitation grounds to the nearest terminal on the same terminal block.
• Connect the low side of single-ended sensors to the nearest terminal on the same terminal block.
• Connect shield wires to the terminal nearest the terminals to which the sensor signal wires are connected.
Note Several ground wires can be connected to the same ground terminal.
If offset problems occur because of shield or ground leads with large current flow, tying the problem leads into terminals next to terminals configured for excitation and pulse-count should help. Problem leads can also be tied directly to the ground lug to minimize induced single-ended offset voltages.
7.6.3 Ground-Potential Differences
Because a single-ended measurement is referenced to CR1000 ground, any difference in ground potential between the sensor and the CR1000 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 CR1000 ground. See the section Single-Ended Measurements — Details
for more information.
Ground potential differences are a common problem when measuring full-bridge sensors (strain gages, pressure transducers, etc), and when measuring thermocouples in soil.
7.6.3.1 Soil Temperature Thermocouple
If the measuring junction of a thermocouple is not insulated when in soil or water, and the potential of earth ground is, for example, 1 mV greater at the sensor than at the point where the CR1000 is grounded, the measured voltage is 1 mV greater than the thermocouple output. With a copper-constantan thermocouple, 1 mV equates to approximately 25 °C measurement error.
7.6.3.2 External Signal Conditioner
External instruments with integrated signal conditioners, such as an infrared gas analyzer (IRGA), are frequently used to make measurements and send analog information to the CR1000. These instruments are often powered by the same
Vac-line source as the CR1000. Despite being tied to the same ground, differences in current drain and lead resistance result in different ground potentials at the two instruments. For this reason, a differential measurement should be made on the analog output from the external signal conditioner.
7.6.4 Ground Looping in Ionic Measurements
When measuring soil-moisture with a resistance block, or water conductivity with a resistance cell, the potential exists for a ground loop error. In the case of an ionic soil matric potential (soil moisture) sensor, a ground loop arises because soil
109
110
Section 7. Installation and water provide an alternate path for the excitation to return to CR1000 ground.
This example is modeled in the diagram Model of a Ground Loop with a Resistive
Sensor
With R g
in the resistor network, the signal measured from the sensor is described by the following equation: where
V
R
R s f x
is the excitation voltage
is a fixed resistor
R g
is the sensor resistance
is the resistance between the excited electrode and CR1000 earth ground.
R x
R f
/R g
is the source of error due to the ground loop. When R g
is large, the error is negligible. Note that the geometry of the electrodes has a great effect on the magnitude of this error. The Delmhorst gypsum block used in the Campbell
Scientific 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 CR1000 earth ground form a galvanic cell, with the water/soil solution acting as the electrolyte. If current is allowed to flow, the resulting oxidation or reduction will soon damage the electrode, just as if dc excitation was used to make the measurement. Campbell Scientific resistive soil probes and conductivity probes are built with series capacitors to block this dc current. In addition to preventing sensor deterioration, the capacitors block any dc component from affecting the measurement.
Figure 35. Model of a Ground Loop with a Resistive Sensor
Section 7. Installation
7.7 CR1000 Configuration — Details
Related Topics:
• CR1000 Configuration — Overview
• CR1000 Configuration — Details
• Status, Settings, and Data Table Information (Status/Settings/DTI)
Your new CR1000 is already configured to communicate with Campbell
Scientific datalogger support software
on the RS-232 port, and over most telecommunication links. If you find that an older CR1000 no longer communicates with these simple links, do a full reset of the unit, as described in the section Resetting the CR1000
Some applications, especially those implementing TCP/IP features, may require changes to factory defaults.
Configuration (verb) includes actions that modify firmware or software in the
CR1000. Most of these actions are associated with CR1000 settings registers.
For the purpose of this discussion, the CRBasic program, which, of course, configures the CR1000, is discussed in a separate section (CRBasic Programming
— Details
.
7.7.1 Configuration Tools
Configuration tools include the following:
•
•
•
Device Configuration Utility
Network Planner
Status/Settings/DTI
CRBasic program
•
•
•
Executable CPU: files
Keyboard display
• Terminal emulator
7.7.1.1 Configuration with DevConfig
The most versatile configuration tool is Device Configuration Utility, or
DevConfig. It is bundled with LoggerNet, PC400, RTDAQ, or it can be downloaded from www.campbellsci.com/downloads
(http://www.campbellsci.com/downloads). It has the following basic features:
• Extensive context sensitive help
• Connects directly to the CR1000 over a serial or IP connection
• Facilitates access to most settings, status registers, and data table information registers
• Includes a terminal emulator that facilitates access to the command prompt of the CR1000
DevConfig Help guides you through connection and use. The simplest connection is to, connect a serial cable from the computer COM port or USB port to the RS-
232 port on the CR1000 as shown in figure Power and Serial Communication
Connections
DevConfig updates are available at
www.campbellsci.com/downloads (http://www.campbellsci.com/downloads).
111
112
Section 7. Installation
Figure 36. Device Configuration Utility (DevConfig)
7.7.1.2 Network Planner
Network Planner is a drag-and-drop application used in designing PakBus datalogger networks. You interact with Network Planner through a drawing canvas upon which are placed PC and datalogger nodes. Links representing various telecommunication options are drawn between nodes. Activities to take place between the nodes are specified. Network Planner automatically specifies settings for individual devices and creates configuring XML files to download to each device through DevConfig
Figure 37. Network Planner Setup
Section 7. Installation
7.7.1.2.1 Overview
Network Planner allows you to
• Create a graphical representation of a network, as shown in figure Network
Planner Setup
• Determine settings for devices and LoggerNet, and
• Program devices and LoggerNet with new settings.
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 aids development of PakBus networks only.
• It does not make hardware recommendations.
• It does not generate datalogger programs.
• It does not understand distances or topography; that is, it does not warn when broadcast distances are exceeded, nor does it identify obstacles to radio transmission.
For more detailed information on Network Planner, please consult the LoggerNet manual, which is available at www.campbellsci.com.
113
114
Section 7. Installation
7.7.1.2.2 Basics
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 (for example, router or leaf node) will be assigned based on device links.
Device Links and Communication Resources
• Disallow links that will not work.
• Comparative desirability of links.
• Prevent over-allocation of resources.
• Optimal RS-232 and CS I/O ME baud rates based on device links.
• Optimal packet-size limits based on anticipated routes.
Fundamentals of Using Network Planner
• 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)
7.7.1.3 Configuration with Status/Settings/DTI
Related Topics:
• Status, Settings, and Data Table Information (Status/Settings/DTI)
• Common Uses of the Status Table
• Status Table as Debug Resource
The Status table, CR1000 settings, and the DataTableInfo table (collectively,
Status/Settings/DTI) contain registers, settings, and information essential to setup, programming, and debugging of many advanced CR1000 systems.
Status/Settings/DTI are numerous. Note the following:
• All Status/Settings/DTI, except a handful, are accessible through a keyword.
This discussion is organized around these keywords. Keywords and descriptions are listed alphabetically in sub-appendix Status/Settings/DTI
Descriptions (Alphabetical)
• Status fields are read only (mostly). Some are resettable.
• Settings are read/write (mostly).
• DTI are read only.
• Directories in sub-appendix Status/Settings/DTI Directories
list several groupings of keywords. Each keyword listed in these groups is linked to the relevant description.
• Some Status/Settings/DTI have multiple names depending on the interface
Section 7. Installation used to access them.
• No single interface accesses all Status/Settings/DTI. Interfaces used for access include the following:
Table 6. Status/Setting/DTI: Access Points
Access Point
Settings Editor
Status
DataTableInfo
Station Status
Edit Settings
Locate in...
Device Configuration Utility, LoggerNet Connect screen,
PakBus Graph. See Datalogger Support Software — Details (p.
View as a data table in a numeric monitor
View as a data table in a numeric monitor
Menu item in datalogger support software
Menu item in PakBusGraph software.
Settings
status.keyword/settings.keyword
Menu item in CR1000KD Keyboard Display Configure,
Settings
Syntax in CRBasic program
1
Information presented in Station Status is not updated automatically. Click the Refresh button to update.
Note Communication and processor bandwidth are consumed when generating the Status and DataTableInfo tables. If the CR1000 is very tight on processing time, as may occur in very long or complex operations, retrieving the Status table repeatedly may cause skipped scans
Status603/Settings/DTI
an be set or accessed using CRBasic instructions
SetStatus() or SetSetting().
For example, to set the setting StationName to BlackIceCouloir, the following syntax is used:
SetSetting("StationName","BlackIceCouloir") where StationName is the keyword for the setting, and BlackIceCouloir is the set value.
Settings can be requested by the CRBasic program using the following syntax: x = Status.[setting] where Setting is the keyword for a setting.
For example, to acquire the value set in setting StationName, use the following statement: x = Status.StationName
7.7.1.4 Configuration with Executable CPU: Files
Many CR1000 settings can be changed remotely over a telecommunication link either directly, or as discussed in section Configuration with CRBasic Program
(p.
as part of the CRBasic program. These conveniences come with the risk of inadvertently changing settings and disabling communications. Such an occurence will likely require an on-site visit to correct the problem if at least one of the provisions discussed in this section is not put in place. For example,
115
116
Section 7. Installation wireless-ethernet (cell) modems are often controlled by a switched 12 Vdc
( SW12) terminal. 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 CR1000 drops out of telecommunications.
Executable CPU: files automatically execute according to the schedule outlined in table . Each can contain code to set specific settings in the CR1000.
•
•
•
Executable CPU: files include the following:
'Include' file
Default.cr1 file
Powerup.ini file
To be used, each file needs to be created and then placed on the CPU: drive of the
CR1000. The 'include' file and default.cr1 file consist of CRBasic code.
Powerup.ini has a different, limited programming language.
7.7.1.4.1 Default.cr1 File
A file named default.cr1 can be stored on the CR1000 CPU: drive. At power up, the CR1000 loads default.cr1 if no other program takes priority (see Executable
File Run Priorities
. Default.cr1 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 CR1000 memory. If the intent is to load operating systems via a telecommunication link, and have a default.cr1 file in the CR1000, the default.cr1 program should not allocate significant memory, as might happen by allocating a large USR: drive. Do not use a DataTable() instruction set for auto allocation of memory, either. Refer to the section Updating the Operating System (OS)
for information about sending the operating system.
Execution of default.cr1 at power-up can be aborted by holding down the DEL key on the CR1000KD Keyboard Display.
CRBasic Example 1.
Simple Default.cr1 File to Control SW12 Terminal
'This program example demonstrates use of a Default.cr1 file. It must be restricted
'to few lines of code. This program controls the SW12 switched power terminal, which
'may be helpful in assuring that the default power state of a remote modem is ON.
BeginProg
Scan (1,Sec,0,0)
If TimeIntoInterval(15,60,Sec) Then SW12(1)
If TimeIntoInterval(45,60,Sec) Then SW12(0)
NextScan
EndProg
7.7.1.4.2 Executable File Run Priorities
1. When the CR1000 powers up, it executes commands in the powerup.ini file (on
Campbell Scientific mass storage device or memory card including commands to set the CRBasic program file attributes to Run Now or Run On Power-up.
2. When the CR1000 powers up, a program file marked as Run On Power-up
Section 7. Installation 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 step.
4. If there is no file selected in step 1, or if the selected file cannot be compiled, the CR1000 will attempt to run the program listed in the Include File Name setting. The CR1000 allows a SlowSequence statement to take the place of the BeginProg statement. This allows the "Include File" to act 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 CR1000 will attempt to run the program named default.cr1 on its CPU: drive.
6. If there is no default.cr1 file or it cannot be compiled, the CR1000 will not automatically run any program.
7.7.2 CR1000 Configuration — Details
Following are a few common configuration actions:
• Updating the operating system
• Access a CR1000 register
to help troubleshoot
• Set the CR1000 clock
• Save current configuration
• Restore a configuration
Tools available to perform these actions are listed in the following table:
Table 7. Common Configuration Actions and Tools
Access a register
Action
Updating the operating system
Tools to Use
1
DevConfig
software, Program Send (p.
memory card
mass storage device
DevConfig, PakBus Graph, CRBasic program,
'Include' file
Default.cr1 file
Set the CR1000 clock
Save / restore configuration
1
Tools are listed in order of preference.
DevConfig, PC200W, PC400, LoggerNet
DevConfig
7.7.2.1 Updating the Operating System (OS)
The CR1000 is shipped with the operating system pre-loaded. Check the preloaded version by connecting your PC to the CR1000 using the procedure outlined in DevConfig Help. OS version is displayed in the following location:
Deployment tab
Datalogger tab
OS Version text box
117
118
Section 7. Installation
Update the OS on the CR1000 as directed in DevConfig Help. The current version of the OS is found at www.campbellsci.com/downloads. OS updates are free of charge.
Note An OS file has a .obj extension. It can be compressed using the gzip compression algorithm. The datalogger will accept and decompress the file on receipt. See the appendix Program and OS Compression
Note the following precautions:
• Since sending an OS resets CR1000 memory, data loss will certainly occur.
Depending on several factors, the CR1000 may also become incapacitated for a time. o Is sending the OS necessary to correct a critical problem? If not, consider waiting until a scheduled maintenance visit to the site. o Is the site conveniently accessible such that a site visit can be undertaken to correct a problem of reset settings without excessive expense? o 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 CR1000.
• Campbell Scientific recommends upgrading operating systems only with a direct-hardwire link. However, the Send Program
button in the datalogger support software
allows the OS to be sent over all software supported telecommunication systems. o Operating systems are very large files — be cautious of line charges. o Updating the OS may reset CR1000 settings, even settings critical to supporting the telecommunication link. Newer operating systems minimize this risk.
Note Beginning with OS 25, the OS has become large enough that a CR1000 with serial number ≤ 11831, which has only 2 MB of SRAM, may not have enough memory to receive it under some circumstances. If problems are encountered with a 2 MB CR1000, sending the OS over a direct serial connection is usually successful.
The operating system is updated with one of the following tools:
7.7.2.1.1 OS Update with DevConfig Send OS Tab
Using this method results in the CR1000 being restored to factory defaults. The existing OS is over written as it is received. Failure to receive the complete new
OS will leave the CR1000 in an unstable state. Use this method only with a direct hardwire serial connection.
How
Use the following procedure with DevConfig: Do not software Connect to the
CR1000.
1. Select CR1000 from the list of devices at left
2. Select the appropriate communication port and baud rate at the bottom left
3. Click the Send OS tab located at the top of DevConfig window
Section 7. Installation
4. Follow the on-screen OS Download Instructions
Pros/Cons
This is a good way to recover a CR1000 that has gone into an unresponsive state.
Often, an operating system can be loaded even if you are unable to communicate with the CR1000 through other means.
Loading an operating system through this method will do the following:
1. Restore all CR1000 settings to factory defaults
2. Delete data in final storage
3. Delete data from and remove the USR drive
4. Delete program files stored on the datalogger
7.7.2.1.2 OS Update with DevConfig
This method is very similar to sending an OS as a program, with the exception that you have to manually prepare the datalogger to accept the new OS.
How
1. Connect to the CR1000 with Connect or DevConfig
2. Collect data
3. Transfer a default.CR1
program file to the CR1000 CPU: drive
4. Stop the current program and select the option to delete associated data (this will free up SRAM memory allocated for data storage)
5. Collect files from the USR: drive (if applicable)
6. Delete the USR: drive (if applicable)
7. Send the new .obj OS file to the CR1000
8. Restart the previous program (default.CR1 will be running after OS compiles)
Pros/Cons
This method is preferred because the user must manually configure the datalogger to receive an OS and thus should be cognizant of what is happening (loss of data, program being stopped, etc.).
Loading an operating system through this method will do the following:
1. Preserve all CR1000 settings
2. Delete all data in final storage
3. Delete USR: drive
4. Stop current program deletes data and clears run options
5. Deletes data generated using the CardOut() or TableFile() instructions
7.7.2.1.3 OS Update with DevConfig
A send program command is a feature of DevConfig and other datalogger support
software
Location of this command in the software is listed in table
Program Send Command Locations
119
120
Section 7. Installation
Program Send Command Locations
Datalogger Support
Software
DevConfig
LoggerNet
PC400
Name of Button
Send Program
Send New...
Send Program
PC200W
RTDAQ
Send Program
Send Program
Location of Button
Logger Control tab lower left
Connect window, lower right
Main window, lower right
Main window, lower right
Main window, lower right
This method results in the CR1000 retaining its settings (a feature since OS version 16). The new OS file is temporarily stored in CR1000 SRAM memory, which necessitates the following:
• Sufficient memory needs to be available. Before attempting to send the OS, you may need to delete other files in the CPU: and USR: drives, and you may need to remove the USR: drive altogether. Since OS 25, older 2 MB
CR1000s do not have sufficient memory to perform this operation.
• SRAM will be cleared to make room, so program run options and data will be lost. If CR1000 communications are controlled with the current program, first load a default.cr1 CRBasic program on to the CPU: drive. Default.cr1 will run by default after the CR1000 compiles the new OS and clears the current run options.
How
From the LoggerNet Connect window, perform the following steps:
1. Connect to the station
2. Collect data
3. Click the Send New…
4. Select the OS file to send
5. Restart the existing program through File Control, or send a new program with
CRBasic Editor and specify new run options.
Pros/Cons
This is the best way to load a new operating system on the CR1000 and have its settings retained (most of the time). This means that you will still be able to communicate with the station because the PakBus address is preserved and
PakBusTCP client connections are maintained. Plus, if you are using a TCP/IP connection, the file transfer is much faster than loading a new OS directly through
DevConfig.
The bad news is that, since it clears the run options for the current program, you can lose communications with the station if power is toggled to a communication peripheral under program control, such as turning a cell modem on/off to conserve power use.
Also, if sufficient memory is not available, instability may result. It’s probably best to clear out the memory before attempting to send the new OS file. If you have defined a USR drive you will probably need to remove it as well.
Section 7. Installation
Loading an operating system through this method will do the following:
1. Preserve all CR1000 settings
2. Delete all data in final storage
3. Stop current program (Stop and deletes data) and clears run options
4. Deletes data generated using the CardOut() instruction
7.7.2.1.4 OS Update with DevConfig
How
1. Place a powerup.ini
text file and operating system .obj file on the external memory device
2. Attached the external memory device to the datalogger
3. Power cycle the datalogger
Pros/Cons
This is a great way to change the OS without a laptop in the field. The down side is only if you want to do more than one thing with the powerup.ini, such as change OS and load a new program, which necessitates that you use separate cards or modify the .ini file between the two tasks you wish to perform.
Loading an operating system through this method will do the following:
1. Preserve all datalogger settings
2. Delete all data in final storage
3. Preserve USR drive and data stored there
4. Maintains program run options
5. Deletes data generated using the CardOut() or TableFile() instructions
DevConfig Send OS tab:
• If you are having trouble communicating with the CR1000
• If you want to return the CR1000 to a known configuration
Send Program
or Send New... command:
• If you want to send an OS remotely
• If you are not too concerned about the consequences
File Control tab:
• If you want to update the OS remotely
• If your only connection to the CR1000 is over IP
• If you have IP access and want to change the OS for testing purposes
External memory and PowerUp.ini file:
• If you want to change the OS without a PC
121
Section 7. Installation
7.7.2.2 Restoring Factory Defaults
In DevConfig, clicking the Factory Defaults button at the base of the Settings
Editor tab sends a command to the CR1000 to revert to its factory default settings. The reverted values will not take effect until the changes have been applied.
7.7.2.3 Saving and Restoring Configurations
In DevConfig, clicking Save on a summary screen saves the configuration to an
XML file. This file can be used to load a saved configuration back into the
CR1000 by clicking Read File and Apply.
Figure 38. Summary of CR1000 Configuration
122
7.8 CRBasic Programming — Details
Related Topics:
• CRBasic Programming — Overview
• CRBasic Programming — Details
• CRBasic Programming — Instructions
• Programming Resource Library
• CRBasic Editor Help
Programs are created with either Short Cut
or CRBasic Editor
Old
CR10X and CR23X programs can be converted to CRBasic code using
Transformer.exe (executable file included with LoggerNet). Programs can be up to 490 KB in size; most programs, however, are much smaller.
Section 7. Installation
7.8.1 Program Structure
Essential elements of a CRBasic program are listed in the table CRBasic Program
Structure
and demonstrated in CRBasic example Program Structure
Table 8. CRBasic Program Structure
Declarations
Define CR1000 memory usage. Declare constants, variables, aliases, units, and data tables.
Declare constants
Declare Public variables
Declare Dim variables
Define Aliases
Define Units
Define data tables.
Process / store trigger
Table size
Other on-line storage devices
Processing of data
Begin program
Set scan interval
Measurements
Processing
Call data table(s)
Initiate controls
NextScan
End program
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 CR1000 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 Campbell Scientific mass storage device or memory card 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 defines the beginning of statements defining CR1000 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 CR1000 actions.
123
124
Section 7. Installation
'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
'Define data tables
DataTable (Temp,1,2000)
DataInterval (0,10,min,10)
Average (1,RefTemp,FP2,0)
Average (6,TC(),FP2,0)
EndTable
'Begin Program
BeginProg
'Set scan interval
Scan (1,Sec,3,0)
'Measurements
PanelTemp (RefTemp,250)
TCDiff (TC()...Offset)
'Processing (None in this
'example)
'Call data table
CallTable Temp
'Controls (None in this
'example)
'Loop to next scan
NextScan
'End Program
EndProg
CRBasic Program Structure
Declare constants
Declare public variables, dimension array, and declare units.
Declarations
Define data table
Measure
Call data table
Scan loop
Section 7. Installation
7.8.2 Writing and Editing Programs
7.8.2.1 Short Cut Programming Wizard
Short Cut is easy-to-use, menu-driven software that presents lists of predefined measurement, processing, and control algorithms from which to choose. You make 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. Quickstart Tutorial
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.
7.8.2.2 CRBasic Editor
CR1000 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 CR1000 application program. CRBasic Editor is a component of LoggerNet
RTDAQ
,
and
PC400 datalogger support software
Fundamental elements of CRBasic include the following:
• Variables — named packets of CR1000 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 CR1000 memory into which are stored specific values that do not vary during program executions. Constants are given alphanumeric names and assigned values at the beginning declarations of a CRBasic program.
Note Keywords and predefined constants are reserved for internal CR1000 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 Editor Help provides a list of keywords and predefined constants.
• Common instructions — instructions (called "commands" in BASIC) and operators used in most BASIC languages, including program control statements, and logic and mathematical operators.
• Special instructions — instructions (commands) unique to CRBasic, including measurement instructions, and processing instructions that compress many common calculations used in CR1000 dataloggers.
These four elements must be properly placed within the program structure.
125
126
Section 7. Installation
7.8.2.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
comments are inserted into a program by preceding the comment with a single quote ( '). Comments can be entered either as independent lines or following CR1000 code. When the
CR1000 compiler sees a single quote ( '), it ignores the rest of the line.
CRBasic Example 2.
Inserting Comments
'This program example demonstrates the insertion of comments into a program. Comments are
'placed in two places: to occupy single lines, such as this explanation does, or to be
'placed after a statement.
'Declaration of variables starts here.
Public Start(6) 'Declare the start time array
BeginProg
EndProg
7.8.2.2.2 Conserving Program Memory
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. Arrays save memory over the use of scalars as there is less "meta-data" required per value. However, as a rough approximation, 192000 (4 kB memory) or 87000 (2 kB 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 String Operations
7.8.3 Sending CRBasic Programs
The CR1000 requires that a CRBasic program file be sent to its memory to direct measurement, processing, and data-storage operations. The program file can have the extension cr1 or .dld and can be compressed using the GZip algorithm before sending it to the CR1000. Upon receipt of the file, the CR1000 automatically decompresses the file and uses it just as any other program file. See the appendix
Program and OS Compression
for more information.
Options for sending a program include the following:
• Program Send
command in datalogger-support software
• Program send command in Device Configuration Utility (DevConfig
• Campbell Scientific mass storage device
or memory card
Section 7. Installation
A good practice is to always retrieve data from the CR1000 before sending a program; otherwise, data may be lost.
Read More See File Management
and the Campbell Scientific mass storage device or memory card documentation available at www.campbellsci.com.
7.8.3.1 Preserving Data at Program Send
When sending programs to the CR1000 through the software options listed in table Program Send Options that Reset Memory
memory is reset and data are erased.
When data retention is desired, send programs using the File Control Send
command or CRBasic Editor command Compile, Save, Send in the Compile menu. The window shown in the figure CRBasic Editor Program Send File
Control Window
is displayed before the program is sent. Select Run Now,
Run On Power-up, and Preserve data if no table changed before pressing Send
Program.
Note To retain data, Preserve data if no table changed must be selected whether or not a Campbell Scientific mass storage device or memory card is connected.
Regardless of the program-upload tool used, if any change occurs to data table structures listed in table Data Table Structures
data will be erased when a new program is sent.
Table 9. 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
Figure 39. CRBasic Editor Program Send File Control window
127
128
Section 7. Installation
Table 10. Data Table
Structures
–Data table name(s)
–Data-output interval or offset
–Number of fields per record
–Number of bytes per field
–Field type, size, name, or position
–Number of records in table
7.8.4 Programming Syntax
7.8.4.1 Program Statements
CRBasic programs are made up of a series of statements. Each statement normally occupies one line of text in the program file. Statements consist of instructions, variables, constants, expressions, or a combination of these.
"Instructions" are CRBasic commands. Normally, only one instruction is included in a statement. However, some instructions, such as If and Then, are allowed to be included in the same statement.
Lists of instructions and expression operators can be found in the appendix
CRBasic Programming Instructions
A full treatment of each instruction and operator is located in the Help files of CRBasic Editor
7.8.4.1.1 Multiple Statements on One Line
Multiple short statements can be placed on a single text line if they are separated by a colon ( :). This is a convenient feature in some programs. However, in general, programs that confine text lines to single statements are easier for humans to read.
In most cases, regarding statements separated by : as being separate lines is safe.
However, in the case of an implied EndIf, CRBasic behaves in what may be an unexpected manner. In the case of an If...Then...Else...EndIf statement, where the EndIf is only implied, it is implied after the last statement on the line. For example:
If A then B : C : D does not mean:
If A then B (implied EndIf ) : C : D
Rather, it does mean:
If A then B : C : D (implied EndIf )
7.8.4.1.2 One Statement on Multiple Lines
Long statements that overrun the CRBasic Editor page width can be continued on the next line if the statement break includes a space and an underscore ( _). The underscore must be the last character in a text line, other than additional white space.
Section 7. Installation
Note CRBasic statements are limited to 512 characters, whether or not a line continuation is used.
Examples:
Public A, B, _
C,D, E, F
If (A And B) _
Or (C And D) _
Or (E And F) then ExitScan
7.8.4.2 Single-Statement Declarations
Single-statements are used to declare variables, constants, variable and constant related elements, and the station name. The following instructions are used usually before the BeginProg instruction:
• Public
• Dim
• Constant
• Units
• Alias
• StationName
The table Rules for Names
lists declaration names and allowed lengths. See the section Predefined Constants
for other naming limitations.
7.8.4.3 Declaring Variables
A variable is a packet of memory that is given an alphanumeric name.
Measurements and processing results pass through variables during program execution. Variables are declared as Public or Dim. Public variables are viewable through numeric monitors
Dim variables cannot be viewed. A public variables can be set as read-only, using the ReadOnly instruction, so that it cannot be changed from a numeric monitor. The program, however, continues to have read/write access to the variable.
Declared variables are initialized once when the program starts. Additionally, variables that are used in the Function() or Sub() declaration, or that are declared within the body of the function or subroutine, are local to that function or subroutine.
Variable names can be up to 39 characters in length, but most variables should be no more than 35 characters long. This allows for four additional characters that are added as a suffix to the variable name when it is output to a data table.
Variable names can contain the following characters:
• A to Z
• a to z
• 0 to 9
• _ (underscore)
• $
Names must start with a letter, underscore, or dollar sign. Spaces and quote marks are not allowed. Variable names are not case sensitive.
129
130
Section 7. Installation
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. Following is an example of declaring a variable and assigning it an initial value.
Public SetTemp = {35}
In string variables, string size defaults to 24 characters (changed from 16 characters in April 2013, OS 26).
7.8.4.3.1 Declaring Data Types
Variables and data values stored in final memory can be configured with various data types to optimize program execution and memory usage.
The declaration of variables with the Dim or Public instructions allows an optional type descriptor As that specifies the data type. The default data type
(declaration without a descriptor) is IEEE4 floating point, which is equivalent to the As Float declaration. Variable data types are listed in the table Data Types in
Variable Memory
Final-data memory data types are listed in the table
Data Types in Final-Data Memory
CRBasic example Data Type
Declarations
shows various data types in use in the declarations and output sections of a program.
CRBasic allows mixing data types within a single array of variables; however, this practice can result in at least one problem. The datalogger support software is incapable of efficiently handling different data types for the same field name.
Consequently, the software mangles the field names in data file headers.
Table 11. Data Types in Variable Memory
Name Command Description
Word Size
(Bytes)
Float
Long
Boolean
As Float or
As IEEE4
As Long
As Boolean
IEEE floating point
Signed integer
Signed integer
4
4
4
Notes Resolution / Range
Data type of all variables unless declared otherwise.
IEEE Standard 754
Use to store count data in the range of
± 2,147,483,648
Speed: integer math is faster than floating point math.
Resolution: 32 bits. Compare to 24 bits in IEEE4.
Suitable for storing whole numbers, counting number, and integers in final-data memory. If storing nonintegers, the fractional portion of the value is lost.
Use to store true or false states, such as states of flags and control ports. 0 is always false. –1 is always true.
Depending on the application, any other number may be interpreted as true or false. See the section True = -
1, False = 0
± 1.4E–45 to ±3.4E38
–2,147,483,648 to +2,147,483,647
True = –1 or any number ≥ 1
False = any number ≥ 0 and < 1
Section 7. Installation
Table 11. Data Types in Variable Memory
Name Command Description
Word Size
(Bytes)
Notes Resolution / Range
String As String ASCII string
Minimum: 3
(4 with null terminator)
Default: 24
Maximum: limited only to the size of available
CR1000 memory.
See caution.
1
String size is defined by the CR1000 operating system and CRBasic program.
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 non-numeric, the FLOAT will be
NAN. If the string contains multiple numeric values separated by nonnumeric characters, the SplitStr() instruction can be used to parse out the numeric values. See the sections
String Operations
and Serial
I/O
Unless declared otherwise, string size is 24 bytes or characters. String size is allocated in multiples of four bytes; for example,
String * 25, String * 26, String * 27, and
String * 28 allocate 28 bytes (27 usable).
Minimum string size is 4 (3 usable). See
CRBasic Editor Help for more information.
Maximum length is limited only by available CR1000 memory.
1
CAUTION When using a very long string in a variable declared Public, the operations of datalogger support software
will frequently transmit the entire string over the communication link. If communication bandwidth is limited, or if communications are paid for by they byte, declaring the variable Dim may be preferred.
Table 12. Data Types in Final-Data Memory
Name Argument Description
Word Size
(Bytes)
FP2
IEEE4
Long
FP2
IEEE4 or
Float
Long
Campbell Scientific floating point
IEEE floating point
Signed integer
2
4
4
Default final-memory data type. Use
FP2 for stored data requiring 3 or 4 significant digits. If more significant digits are needed, use IEEE4 or an offset.
Notes Resolution / Range
Zero
0.000
Absolute
Value
0 – 7.999
8 – 79.99
80 – 799.9
800 – 7999.
Minimum Maximum
±0.001 ±7999.
Decimal Location
X.XXX
XX.XX
XXX.X
XXXX.
IEEE Standard 754 ± 1.4E–45 to ±3.4E38
Use to store count data in the range of
± 2,147,483,648
Speed: integer math is faster than floating point math.
Resolution: 32 bits. Compare to 24 bits in IEEE4.
Suitable for storing whole numbers, counting number, and integers in final-data memory. If storing nonintegers, the fractional portion of the value is lost.
–2,147,483,648 to +2,147,483,647
131
132
Section 7. Installation
Table 12. Data Types in Final-Data Memory
Name Argument Description
Word Size
(Bytes)
UINT2
UINT4
Boolean
Bool8
NSEC
String
UINT2
UINT4
Boolean
Bool8
NSEC
String
Unsigned integer
Unsigned integer
Signed integer
Integer
Time stamp
ASCII string
Notes
2
4
4
1
8
Minimum: 3
(4 with null terminator)
Default: 24
Maximum: limited only to the size of available
CR1000 memory.
Use to store positive count data ≤
+65535.
Use to store port or flag status. See
CRBasic example Load binary
information into a variable
When Public FLOATs convert to
UINT2 at final data storage, values outside the range 0 – 65535 yield unusable data. INF converts to
65535. NAN converts to 0.
Use to store positive count data ≤
2147483647.
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.
Use to store true or false states, such as states of flags and control ports. 0 is always false. –1 is always true.
Depending on the application, any other number may be interpreted as true or false. See the section True = -
1, False = 0
To save memory, consider using UINT2 or
BOOL8.
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 Bool8 Data Type
Divided up as four bytes of seconds since 1990 and four bytes of nanoseconds into the second. Used to record and process time data. See
NSEC Data Type
See caution.
1
String size is defined by the CR1000 operating system and CRBasic program.
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 non-numeric, the FLOAT will be
NAN. If the string contains multiple numeric values separated by nonnumeric characters, the SplitStr() instruction can be used to parse out the numeric values. See the sections
String Operations
and Serial
I/O
.
0 to 65535
Resolution / Range
0 to 2147483647
True = –1 or any number ≥ 1
False = any number ≥ 0 and < 1
True = 1, False = 0
1 nanosecond
Unless declared otherwise, string size is 24 bytes or characters. String size is allocated in multiples of four bytes; for example,
String * 25, String * 26, String * 27, and
String * 28 allocate 28 bytes (27 usable).
Minimum string size is 4 (3 usable). See
CRBasic Editor Help for more information.
Maximum length is limited only by available CR1000 memory.
Section 7. Installation
CRBasic Example 3.
Data Type Declarations
'This program example demonstrates various data type declarations.
'Data type declarations associated with any one variable occur twice: first in a Public
'or Dim statement, then in a DataTable/EndTable segment. If not otherwise specified, data
'types default to floating point: As Float in Public or Dim declarations, FP2 in data
'table declarations.
'Float Variable Examples
Public Z
Public X As Float
'Long Variable Example
Public CR1000Time 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,CR1000Time,Nsec)
EndTable
BeginProg
'Program logic goes here
EndProg
133
134
Section 7. Installation
7.8.4.3.2 Dimensioning Numeric Variables
Some applications require multi-dimension arrays. Array dimensions are analogous to spatial dimensions (distance, area, and volume). A single-dimension array, declared as,
Public VariableName(x) with (x) being the index, denotes x number of variables as a series.
A two-dimensional array, declared as,
Public VariableName(x,y) with (x,y) being the indices, denotes (x • y) number of variables in a square x-by-y matrix.
Three-dimensional arrays, declared as
Public VariableName (x,y,z) with (x,y,z) being the indices, have (x • y • z) number of variables in a cubic x-byy-by-z matrix. Dimensions greater than three are not permitted by CRBasic.
When using variables in place of integers as dimension indices (see CRBasic example Using variable array dimension indices
, declaring the indices As
Long variables is recommended. Doing so allows for more efficient use of
CR1000 resources.
CRBasic Example 4.
Using Variable Array Dimension Indices
'This program example demonstrates the use of dimension indices in arrays. The variable
'VariableName is declared with three dimensions with 4 in each index. This indicates the
'array has means it has 64 elements. Element 24 is loaded with the value 2.718.
'
Dim aaa As Long
Dim bbb As Long
Dim ccc As Long
Public VariableName(4,4,4) As Float
BeginProg
Scan (1,sec,0,0)
aaa = 3
bbb = 2
ccc = 4
VariableName(aaa,bbb,ccc) = 2.718
NextScan
EndProg
7.8.4.3.3 Dimensioning String Variables
Strings can be declared to a maximum of two dimensions. The third "dimension" is used for accessing characters within a string. See String Operations
String length can also be declared. See the table Data Types in Variable Memory.
A one-dimension string array called StringVar, with five elements in the array and each element with a length of 36 characters, is declared as
Public StringVar(5) As String * 36
Section 7. Installation
Five variables are declared, each 36 characters long:
StringVar(1)
StringVar(2)
StringVar(3)
StringVar(4)
StringVar(5)
7.8.4.3.4 Declaring Flag Variables
A flag is a variable, usually declared As Boolean
that indicates True or
False, on or off, go or not go, etc. Program execution can be branched based on the value in a flag. Sometime flags are simply used to inform an observer that an event is occurring or has occurred. While any variable of any data type can be used as a flag, using Boolean variables, especially variables named "Flag", usually works best in practice. CRBasic example Flag Declaration and Use
demonstrates changing words in a string based on a flag.
CRBasic Example 5.
Flag Declaration and Use
'This program example demonstrates the declaration and use of flags as Boolean variables,
'and the use of strings to report flag status. To run the demonstration, send this program
'to the CR1000, then toggle variables Flag(1) and Flag(2) to true or false to see how the
'program logic sets the words "High" or "Low" in variables FlagReport(1) and FlagReport(2).
'To set a flag to true when using LoggerNet Connect Numeric Monitor, simply click on the
'forest green dot adjacent to the word "false." If using a keyboard, a choice of "True" or
'"False" is made available.
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
7.8.4.4 Declaring Arrays
Related Topics:
• Declaring Arrays
• Arrays of Multipliers and Offsets
• VarOutOfBounds
Multiple variables of the same root name can be declared. The resulting series of like-named variables is called an array. An array is created by placing a suffix of
135
136
Section 7. Installation
(x) on the variable name. X number of variables are created that differ in name only by the incrementing number in the suffix. For example, the four statements
Public TempC1
Public TempC2
Public TempC3
Public TempC4 can simply be condensed to
Public TempC(4).
This statement 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
shows compact code that converts four temperatures (°C) to °F.
In this example, a For/Next structure with an incrementing 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, as is the case in the declaration
Dim TempC()
CRBasic references only the first element of the array, TempC(1).
See CRBasic example Concatenation of Numbers and Strings
for an example of using the += assignment operator
when working with arrays.
CRBasic Example 6.
Using a Variable Array in Calculations
'This program example demonstrates the use of a variable array to reduce code. In this
'example, two variable arrays are used to convert four temperature measurements from
'degree C to degrees F.
Public TempC(4)
Public TempF(4)
Dim T
BeginProg
Scan (1,Sec,0,0)
Therm107 (TempC(),1,1,Vx1,0,250,1.0,0)
Therm107 (TempC(),1,2,Vx1,0,250,1.0,0)
Therm107 (TempC(),1,3,Vx1,0,250,1.0,0)
Therm107 (TempC(),1,4,Vx1,0,250,1.0,0)
For T = 1 To 4
TempF(T) = TempC(T) * 1.8 + 32
Next T
NextScan
EndProg
7.8.4.5 Declaring Local and Global Variables
Advanced programs may use subroutines
or functions
each of which can have a set of Dim variables dedicated to that subroutine or function. These
Section 7. Installation are called local variables. Names of local variable can be identical to names of
global variables
and to names of local variables declared in other subroutines and functions. This feature allows creation of a CRBasic library of reusable subroutines and functions that will not cause variable name conflicts. If a program with local Dim variables attempts to use them globally, the compile error undeclared variable will occur.
To make a local variable displayable, in cases where making it public creates a naming conflict, sample the local variable to a data table and display the data element table in a numeric monitor
When exchanging the contents of a global and local variables, declare each passing / receiving pair with identical data types and string lengths.
7.8.4.6 Initializing Variables
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
CRBasic Example 7.
Initializing Variables
'This program example demonstrates how variables can be declared as specific data types.
'Variables not declared as a specific data type default to data type Float. Also
'demonstrated is the loading of values into variables that are being declared.
Public aaa As Long = 1 'Declaring a single variable As Long and loading the value of 1.
Public bbb(2) As String *20 = {"String_1", "String_2"} 'Declaring an array As String and
'loading strings in each element.
Public ccc As Boolean = True 'Declaring a variable As Boolean and loading the value of 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
BeginProg
EndProg
7.8.4.7 Declaring Constants
CRBasic example Using the Const Declaration
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 CR1000KD Keyboard Display menu ( Configure, Settings | Constant Table) or the C command in a terminal emulator (see Troubleshooting – Terminal Emulator
).
Note Using all uppercase for constant names may make them easier to recognize.
137
138
Section 7. Installation
CRBasic Example 8.
Using the Const Declaration
'This program example demonstrates the use of the Const declaration.
'Declare variables
Public PTempC
Public PTempF
'Declare constants
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
7.8.4.7.1 Predefined Constants
Many words are reserved for use by CRBasic. These words cannot be used as variable or table names in a program. Predefined constants include instruction names and valid alphanumeric names for instruction parameters. On account the list of predefined constants is long and frequently increases as the operating system is developed, the best course is to compile programs frequently during
CRBasic program development. The compiler will catch the use of any reserved words. Following are listed predefined constants that are assigned a value:
• LoggerType = 1000 (as in CR1000)
These may be useful in programming.
7.8.4.8 Declaring Aliases and Units
A variable can be assigned a second name, or alias, in the CRBasic program.
Aliasing is particularly useful when using arrays. Arrays are powerful tools for complex programming, but they place near identical names on multiple variables.
Aliasing allows the power of the array to be used with the clarity of unique names.
The declared variable name can be used interchangeably with the declared alias in the body of the CRBasic program. However, when a value is stored to finalmemory, the value will have the alias name attached to it. So, if the CRBasic program needs to access that value, the program must use the the alias-derived name.
Variables in one, two, and three dimensional arrays can be assigned units. Units are not used elsewhere in programming, but add meaning to resultant data table headers. If different units are to be used with each element of an array, first assign aliases to the array elements and then assign units to each alias. For example:
Alias var_array(1) = solar_radiation
Alias var_array(2) = quanta
Units solar_radiation = Wm-2
Units variable2 = moles_m-2_s-1
Section 7. Installation
7.8.4.9 Numerical Formats
Four numerical formats are supported by CRBasic. Most common is the use of base-10 numbers. Scientific notation, binary, and hexadecimal formats can also be used, as shown in the table Formats for Entering Numbers in CRBasic
Only standard, base-10 notation is supported by Campbell Scientific hardware and software displays.
Table 13. Formats for Entering Numbers in CRBasic
Format
Standard
Scientific notation
Example
6.832
5.67E-8
Base-10 Equivalent Value
6.832
5.67X10
-8
Binary
Hexadecimal
&B1101
&HFF
13
255
Binary format (1 = high, 0 = low) is useful when loading the status of multiple flags or ports into a single variable. For example, storing the binary number
&B11100000 preserves the status of flags 8 through 1: flags 1 to 5 are low, 6 to 8 are high. CRBasic example Load binary information into a variable
shows an algorithm that loads binary status of flags into a LONG integer variable.
CRBasic Example 9.
Load binary information into a variable
'This program example demonstrates how binary data are loaded into a variable. The binary
'format (1 = high, 0 = low) is useful when loading the status of multiple flags
'or ports into a single variable. For example, storing the binary number &B11100000
'preserves the status of flags 8 through 1: flags 1 to 5 are low, 6 to 8 are high.
'This example demonstrates an algorithm that loads binary status of flags into a LONG
'integer variable.
Public FlagInt As Long
Public Flag(8) As Boolean
Public I
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
139
140
Section 7. Installation
7.8.4.10 Multi-Statement Declarations
Multi-statement declarations are used to declare data tables, subroutines, functions, and incidentals. Related instructions include the following:
• DataTable() / EndTable
• Sub() / EndSub
• Function() / EndFunction
• ShutDown / ShutdownEnd
• DialSequence() / EndDialSequence
• ModemHangup() / EndModemHangup
• WebPageBegin() / WebPageEnd
Multi-statement declarations can be located as follows:
• Prior to BeginProg,
• After EndSequence or an infinite Scan() / NextScan and before EndProg or
SlowSequence
• Immediately following SlowSequence. SlowSequence code starts executing after any declaration sequence. Only declaration sequences can occur after
EndSequence and before SlowSequence or EndProg.
7.8.4.10.1 Declaring 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
A data table is essentially a file that resides in CR1000 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 CR1000 clock, or by an event, such as a high temperature. The number of data tables declared is limited only by the available
CR1000 memory (prior to OS 28, the limit was 30 data tables). 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 the following:
• 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."
Section 7. Installation
Table 14. Typical Data Table
TOA5
TIMESTAMP
CR1000 CR1000 1048
RECORD BattVolt_Avg PTempC_Avg
TS
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
2
3
4
RN
0
1
5
6
Volts
Avg
13.18
13.18
13.19
13.19
13.19
13.19
13.18
Deg C
Avg
23.5
23.5
23.51
23.54
23.55
23.55
23.55
CR1000.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.cr1
TempC_Avg(2)
Deg C
Avg
25.12
25.51
25.73
25.95
26.05
26.05
25.04
The table Typical Data Table
shows a data file as it appears after the associated data table is downloaded from a CR1000 programmed with the code in
CRBasic example Definition and Use of a Data Table
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 (ASCII or binary) can also be written to a CR1000 memory drive using the TableFile() instruction.
The first header line is the environment line. It consists of eight fields, listed in table TOA5 Environment Line
35723 OneMin
5
6
7
8
3
4
Table 15. TOA5 Environment Line
Field
1
Description
TOA5
2
Station name
Datalogger model
Datalogger serial number
Datalogger OS version
Datalogger program name
Datalogger program signature
Table name
Changed By
DevConfig or CRBasic program acting on the setting
New OS
New program
New or revised program
Revised program
The second header line reports field names. This line consists of a set of commadelimited strings that identify the name of individual fields as given in the datalogger program. 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, which is declared as a two-by-two array in the datalogger program, will be represented by four field 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
141
142
Section 7. Installation each scalar value defined by the table. Default field names 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 outputs the data to storage.
For example, Avg is the abbreviation for the data process called by the Average() instruction. If the default field names are not acceptable to the programmer,
FieldNames() instruction can be used to customize the names. TIMESTAMP,
RECORD, Batt_Volt_Avg, PTemp_C_Avg, TempC_Avg(1), and
TempC_Avg(2) are the default field names in the table Typical Data Table
The third-header line identifies engineering units for that field of data. These units are declared at the beginning of a CRBasic program, as shown in CRBasic example Definition and Use of a Data Table
Units are strictly for documentation. The CR1000 does not make use of declared units, nor does it check their accuracy.
The fourth line of the header reports abbreviations of the data process used to produce the field of data. See the table Data Process Abbreviations
Subsequent lines are observed data and associated record keeping. The first field being a time stamp, and the second being the record (data line) number.
As shown in CRBasic example Definition and Use of a Data Table
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.
CRBasic Example 10.
Definition and Use of a Data Table
'This program example demonstrates definition and use of data tables.
'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()=Deg_C
'Define Data Tables
DataTable (OneMin,True,-1) 'Required beginning of data table declaration
DataInterval (0,1,Min,10) 'Optional instruction to trigger table at one-minute interval
Average (1,Batt_Volt,FP2,False) 'Optional instruction to average variable Batt_Volt
Average (1,PTemp_C,FP2,False) 'Optional instruction to average variable PTemp_C
Average (2,Temp_C(),FP2,False) 'Optional instruction to average variable Temp_C
EndTable 'Required end of data table declaration
DataTable (Table1,True,-1)
DataInterval (0,1440,Min,0) 'Optional instruction to trigger table at 24-hour interval
Minimum (1,Batt_Volt,FP2,False,False) 'Optional instruction to determine minimum Batt_Volt
EndTable
Section 7. Installation
'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
DataTable() / EndTable Instructions
The DataTable() instruction has three parameters: a user-specified alphanumeric name for the table such as OneMin, a trigger condition (for example, True), and the size to make the table in memory such as -1 (automatic allocation).
• Name — The table name can be any combination of numbers, letters, and underscore up to 20 characters in length. The first character must be a letter or underscore.
Note While other characters may pass the precompiler and compiler, runtime errors may occur if these naming rules are not adhered to.
• 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
).
Read More Section, TrigVar and DisableVar — Controlling Data Output and
Output Processing
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 allocated automatically at the time the program compiles. Automatic allocation is preferred in most applications since the
CR1000 sizes all tables such that they fill (and begin overwriting the oldest data) at about the same time. Approximately 2 kB of extra data-table space are allocated to minimize the possibility of new data overwriting the oldest data in ring memory when datalogger 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.
143
144
Section 7. Installation
Rules on table size change if a CardOut() instruction or TableFile() instruction with Option 64 are included in the table declaration. These instructions support writing of data to a memory card. Writing data to a card requires additional memory be allocated as a data copy buffer. The CR1000 automatically determines the size the buffer needs to be (see Memory Cards and Record Numbers
).
CRBasic example Definition and Use of a Data Table
creates a data table named OneMin, stores data once a minute as defined by DataInterval(), and retains the most recent records in SRAM. DataRecordSize entries in the
DataTableInformation table report allocated memory in terms of number of records the tables hold.
DataInterval() Instruction
DataInterval() instructs the CR1000 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, usually because of a timing issue, program logic prevents a record from being written. If a record is not written, the CR1000 recognizes the omission as a "lapse" and increments the 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() instruction parameter Lapses controls the CR1000 response to a lapse. See table DataInterval () Lapse Parameter
Options
for more information.
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, and logic that directs program execution around the CallTable() instruction.
A data table consists of successive 1 KB data frames. Each data frame contains a time stamp, frame number, and one or more records. By default, a time stamp and record number are not stored with each record. Rather, the datalogger support software data extraction extraction routine uses the frame time stamp and frame number to time stamp and number each record as it is stored to computer memory.
This technique saves telecommunication bandwidth and 16 bytes of CR1000 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 Lapses is set to an argument of 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(), or the CF CardOut() instruction, or a
TableFile() instruction with Option 64.
If a program is planned to experience multiple lapses, and if telecommunication bandwidth is not a consideration, the Lapses parameter should be set to 0 to
Section 7. Installation ensure the CR1000 allocates adequate memory for each data table.
Table 16. DataInterval() Lapse Parameter Options
DataInterval() Lapse
Argument
Lapse > 0
Lapse = 0
Lapse < 0
Effect
If table record number is fixed, X data frames (1 kB per data frame) are added to data table if memory is available. If record number is auto-allocated, no memory is added to table.
Time stamp and record number are always stored with each record.
When lapse occurs, no new data frame is created. Record time stamps calculated at data extraction may be in error.
Scan Time and System Time
In some applications, system time (see System Time
), rather than scan time
(see Scan Time
), is desired. To get the system time, the CallTable() instruction must be run outside the Scan() loop. See section Time Stamps
OpenInterval() Instruction
By default, the CR1000 uses closed intervals. Data output to a data table based on
DataInterval() includes measurements from only the current interval.
Intermediate memory that contains measurements is cleared the next time the data table is called regardless of whether or not 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 data-output interval, the memory that contains the measurements for the time-series data are cleared. If a data-output interval is missed (because all criteria are not met for output to occur), the memory is cleared the next time the data table is called. 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 were stored (even though the data may span multiple data-output intervals).
Note Array-based dataloggers, such as CR10X and CR23X, use open intervals exclusively.
Data-Output Processing Instructions
Data-storage processing instructions (aka, "output processing" instructions) determine what data are stored in a data table. When a data table is called in the
CRBasic program, data-storage processing instructions process variables holding current inputs or calculations. If trigger conditions are true, for example if the data-output interval has expired, processed values are stored into the data table. In
CRBasic example Definition and Use of a Data Table
three averages are stored.
Consider the Average() instruction as an example data-storage processing instruction. Average() stores the average of a variable over the data-output interval. Its parameters are:
145
146
Section 7. Installation
• Reps — number of sequential elements in the variable array for which averages are calculated. Reps is set to 1 to average PTemp, and set to 2 to average two 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
.
Read More See Declaring Data Types
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
and CRBasic example Using NAN to Filter Data
show how DisableVar can be used to exclude values from an averaging process. In these examples, DisableVar is controlled by Flag1. When Flag1 is high, or True, DisableVar is True.
When it is False, DisableVar is False. When False is entered as the argument for DisableVar, all readings are included in the average. The average of variable Oscillator does not include samples occurring when
Flag1 is high (True), which results in an average of 2; when Flag1 is low or
False (all samples used), the average is 1.5.
Read More TrigVar and DisableVar
Controlling Data Output and
Output Processing
and Measurements and NAN
discuss the use of
TrigVar and DisableVar in special applications.
Read More For a complete list of output processing instructions, see the section
Final Data (Output to Memory) Precessing
CRBasic Example 11.
Use of the Disable Variable
'This program example demonstrates the use of the 'disable' variable, or DisableVar, which
'is a parameter in many output processing instructions. Use of the 'disable' variable
'allows source data to be selectively included in averages, maxima, minima, etc. If the
''disable' variable equals -1, or true, data are not included; if equal to 0, or false,
'data are included. The 'disable' variable is set to false by default.
'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
Section 7. Installation
'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
EndIf
Else
DisableVar = False
EndIf
'Call Data Tables and Store Data
CallTable (OscAvgData)
NextScan
EndProg
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 the appendix
Numbers of Records in Data Tables
7.8.4.10.2 Declaring Subroutines
Read More See section Subroutines
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.
Note A particular subroutine can be called by multiple program sequences simultaneously. To preserve measurement and processing integrity, the CR1000 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.
7.8.4.10.3 'Include' File
An alternative to a subroutine is an 'include' file. An 'include' file is a CRBasic program file that resides on the CR1000 CPU: drive and compiles as an insert to the CRBasic program. It may also run on its own
It is essentially a subroutine stored in a file separate from the main program file. It can be used once or multiple times by the main program, and by multiple programs. The file begins with the SlowSequence instruction and can contain any code.
Procedure to use the "Include File":
1. Write the file, beginning with the SlowSequence instruction followed by any other code.
147
148
Section 7. Installation
2. Send the file to the CR1000 using tools in the File Control menu of datalogger support software
3. Enter the path and name of the file in the Include File setting using DevConfig or PakBusGraph.
Figures "Include File" Settings with DevConfig
and "Include File" settings with PakBusGraph
show methods to set required settings with DevConfig or with telecommunications. There is no restriction on the length of the file.
CRBasic example Using an "Include File" to Control Switched 12 V
shows a program that expects a file to control power to a modem; CRBasic example
"Include File" to Control Switched 12 V
lists the code.
Consider the the example "include file", CPU:pakbus_broker.dld. The rules used by the CR1000 when it starts are as follows:
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.cr1 on its CPU: drive.
5. If there is no default.cr1 file or if that file cannot be compiled, the datalogger will not run any program.
The CR1000 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 "." file-extension. device-name := "CPU" | "USR" | "CRD"
File-extension := "dld" | "cr1"
Figure 40. "Include File" Settings Via DevConfig
Section 7. Installation
Figure 41. "Include File" Settings Via PakBusGraph
CRBasic Example 12.
Using an 'Include' File
'This program example demonstrates the use of an 'include' file. An 'include' file is a CRBasic file that usually
'resides on the CPU: drive of the CR1000. It is essentially a subroutine that is
'stored in a file separate from the main program, but it compiles as an insert to the main
'program. It can be used once or multiple times, and by multiple programs.
''Include' files begin with the SlowSequence instruction and can contain any code.
'
'Procedure to use an 'include' file in this example:
'1. Copy the code from the CRbasic example 'Include' File to Control Switched 12 V
to
149
Section 7. Installation
' CRBasic Editor, name it 'IncludeFile.cr1, and save it to the same PC folder on which
' resides the main program file (this make pre-compiling possible. Including the
' SlowSequence instruction as the first statement is required, followed by any other code.
'2. Send the 'include' file to the CPU: drive of the CR1000 using the File Control menu
' of the datalogger support software
Be sure to de-select the Run Now and Run On
' Power-up options that are presented by the software when sending the file.
'3. Add the Include instruction to the main CRBasic program at the location from which the
' 'include' file is to be called (see the following code).
'4. Enter the CR1000 file system path and file name after the Include() instruction, as shown
' in the following code.
'
'IncludeFile.cr1 contains code to control power to a cellular phone modem.
'
'Cell phone + wire to be connected to SW12 terminal. Negative (-) wire
'to G.
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 "CPU:IncludeFile.CR1" '<<<<<<<<<<<<<<<'include' file code executed here
EndProg
150
CRBasic Example 13.
'Include' File to Control SW12 Terminal.
'This program example demonstrates the use of an 'include' file. See the documentation in CRBasic example
'Using an Include File
'
'<<<<<<<<<<<<<<<<<<<<<<<NOTE: No BeginProg instruction
SlowSequence '<<<<<<<<<<NOTE: Begins with SlowSequence
Scan (1,Sec,0,0)
If TimeIntoInterval (9,24,Hr) Then SW12 (1) 'Modem on at 9:00 AM (900 hours)
If TimeIntoInterval (17,24,Hr) Then SW12 (0) 'Modem off at 5:00 PM (1700 hours)
NextScan
'
'<<<<<<<<<<<<<<<<<<<<<<<NOTE: No EndProg instruction
7.8.4.10.4 Declaring Subroutines
Function() / EndFunction instructions allow you to create a customized CRBasic instruction. The declaration is similar to a subroutine declaration.
7.8.4.10.5 Declaring Incidental Sequences
A sequence is two or more statements of code. Data-table sequences are essential
Section 7. Installation features of nearly all programs. Although used less frequently, subroutine and function sequences also have a general purpose nature. In contrast, the following sequences are used only in specific applications.
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 Editor Help.
Dial Sequences
The DialSequence / EndDialSequence instructions are used to define the code necessary to route packets to a PakBus
CRBasic Editor Help.
® device. More information is available in
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 Editor Help.
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 Editor Help.
7.8.4.11 Execution and Task Priority
Execution of program instructions is divided among the following three tasks:
• Measurement task — rigidly timed measurement of sensors connected directly to the CR1000
• CDM task — rigidly timed measurement and control of CDM
peripheral devices
• SDM task — rigidly timed measurement and control of SDM
peripheral devices
• Processing task — converts measurements to numbers represented by engineering units, performs calculations, stores data, makes decisions to actuate controls, and performs serial I/O communication.
Instructions or commands that are handled by each task are listed in table
Program Tasks
These tasks are executed in either pipeline or sequential mode. When in pipeline mode, tasks run more or less in parallel. When in sequential mode, tasks run more or less in sequence. When a program is compiled, the CR1000 evaluates the program and automatically determines which mode to use. Using the
PipelineMode or SequentialMode instruction at the beginning of the program will force the program into one mode or the other. Mode information is included in a message returned by the datalogger, which is displayed by the datalogger support software
The CRBasic Editor pre-compiler returns a similar message.
151
152
Section 7. Installation
Note A program can be forced to run in sequential or pipeline mode by placing the SequentialMode or PipelineMode instruction in the declarations section of the program.
Some tasks in a program may have higher priorities than others. Measurement tasks generally take precedence over all others. Task priorities are different for pipeline mode and sequential mode.
•
Table 17. Program Tasks
Measurement Task Digital Task
Analog measurements
• Excitation
• Read pulse counters
• Read control ports
( GetPort())
• Set control ports
( SetPort())
• VibratingWire()
• PeriodAvg()
• CS616()
• Calibrate()
• SDM instructions, except SDMSI04() and SDMI016()
• CDM instructions /
CPI devices.
Processing Task
• Processing
• Output
• Serial I/O
• SDMSIO4()
• SDMIO16()
• ReadIO()
• WriteIO()
• Expression evaluation and variable setting in measurement and SDM instructions
7.8.4.11.1 Pipeline Mode
Pipeline mode handles measurement, most digital, 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 measurement, 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 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, like 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 ms
(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,
Section 7. Installation all tasks are given equal processing time by the CR1000.
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
Table 18. Pipeline Mode Task Priorities
1. Measurements in main program
2. Background calibration
3. Measurements in slow sequences
4. Processing tasks
7.8.4.11.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 arguments that are included in the measurement command, and then program execution proceeds to the next instruction. This line-by-line 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 communication activity, or if other interrupts, such as accessing a Campbell
Scientific mass storage device or memory card, 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 pre-scheduling of measurements; instead, all instructions are executed in the 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.
Note Measurement tasks have priority over other tasks such as processing and communication to allow accurate timing needed within most measurement instructions.
Care must be taken when initializing variables when multiple sequences are used in a program. If any sequence relies on something (variable, port, etc.) that is initialized in another sequence, there must be a handshaking scheme placed in the
CRBasic program to make sure that the initializing sequence has completed before the dependent task can proceed. This can be done with a simple variable or even a delay, but understand that the CR1000 operating system will not do this handshaking between independent tasks.
153
154
Section 7. Installation
A similar concern is the reuse of the same variable in multiple tasks. Without some sort of messaging between the two tasks placed into the CRBasic program, unpredictable results are likely to occur. The SemaphoreGet() and
SemaphoreRelease() instruction pair provide a tool to prevent unwanted access of an object (variable, COM port, etc.) by another task while the object is in use.
Consult CRBasic Editor Help for information on using SemaphoreGet() and
SemaphoreRelease().
7.8.4.12 Execution Timing
Timing of program execution is regulated by timing instructions listed in the following table.
Table 19. Program Timing Instructions
Instructions
Scan() / NextScan
SlowSequence /
EndSequence
SubScan / NextSubScan
General Guidelines
Use in most programs. Begins
/ ends the main scan.
Use when measurements or processing must run at slower frequencies than that of the main program.
Use when measurements or processing must run at faster frequencies than that of the main program.
Syntax Form
BeginProg
Scan()
'.
'.
'.
NextScan
EndProg
BeginProg
Scan()
'.
'.
'.
NextScan
SlowSequence
Scan()
'.
'.
'.
NextScan
EndSequence
EndProg
BeginProg
Scan()
'.
'.
'.
SubScan()
'.
'.
'.
NextSubScan
NextScan
EndProg
7.8.4.12.1 Scan() / NextScan
Simple CR1000 programs are often built entirely within a single Scan() /
NextScan structure, with only variable and data-table declarations outside the scan. Scan() / NextScan creates an infinite loop; each periodic pass through the loop is synchronized to the CR1000 clock. Scan() parameters allow modification
Section 7. Installation of the period in 10 ms increments up to 24 hours. As shown in CRBasic example
BeginProg / Scan() / NextScan / EndProg Syntax
the CRBasic program may be relatively short.
CRBasic Example 14.
BeginProg / Scan() / NextScan / EndProg Syntax
'This program example demonstrates the use of BeginProg/EndProg and Scan()/NextScan syntax.
Public PanelTemp_
DataTable (PanelTempData,True,-1)
DataInterval (0,1,Min,10)
Sample (1,PanelTemp_,FP2)
EndTable
BeginProg ' <<<<<<<BeginProg
Scan (1,Sec,3,0) ' <<<<<<< Scan
PanelTemp (PanelTemp_,250)
CallTable PanelTempData
NextScan ' <<<<<<< NextScan
EndProg ' <<<<<<<EndProg
Scan() determines how frequently instructions in the program are executed, as shown in the following CRBasic code snip:
'Scan(Interval, Units, BufferSize, Count)
Scan (1,Sec,3,0)
'CRBasic instructions go here
ExitScan
Scan() has four parameters:
• Interval — the interval between scans. Interval is 10 ms ≤ Interval ≤ 1 day.
• Units — the time unit for the interval.
• BufferSize — 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
for troubleshooting tips.
• Count — 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
,
the scan is one second, three scans are buffered, and measurements and data storage continue indefinitely.
7.8.4.12.2 SlowSequence / EndSequence
Slow sequences include automatic and user entered sequences. Background calibration is an automatic slow sequence. A
User-entered slow sequences are declared with the SlowSequence instruction and run outside the main-program scan. Slow sequences typically run at a slower rate than the main scan. Up to four slow-sequence scans can be defined in a program.
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-scan
155
156
Section 7. Installation intervals in the main program. 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, as is the watchdog task.
Read More See the section CR1000 Auto Calibration — Overview
7.8.4.12.3 SubScan() / NextSubScan
SubScan() / NextSubScan are used in the control of analog multiplexers (see the appendix Analog Multiplexers
for information on available analog multiplexers) or to measure analog inputs at a faster rate than the program scan.
SubScan() / NextSubScan can be used in a SlowSequenc / EndSequence with an interval of 0. SubScan cannot be nested. PulseCount or SDM measurement cannot be used within a sub scan.
7.8.4.12.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
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.
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 CR1000 can make efficient use of this interstitialscan time to optimize program execution and communication control. Unless disabled, or crowded out by a too demanding schedule, self-calibration (see
CR1000 Auto Calibration — Overview
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 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.
Permission to proceed with a measurement is granted by the measurement
Section 7. Installation
Slow-Sequence Scans
Slow-sequence scans begin after a SlowSequence instruction. They start processing tasks prior to a measurement but stop to wait when a measurement semaphore is needed. Slow sequences release the semaphore
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 slowsequence scan and the beginning of a main scan gets to the top of the queue, the main scan will not start until it can acquire 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.
WaitDigTrig Scans semaphore
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.
Read More See Synchronizing Measurements
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 such as a 5 Vdc 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
according to the rules stated in Main Scans
and Slow-Sequence Scans
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() can be used to program a CR1000 to control another
CR1000.
157
Section 7. Installation
Figure 42. Sequential-Mode Scan Priority Flow Diagrams
158
7.8.4.13 Programming Instructions
In addition to BASIC syntax, additional instructions are included in CRBasic to facilitate measurements and store data. The section CRBasic Programming
Instructions
contains a comprehensive list of these instructions.
7.8.4.13.1 Measurement and Data-Storage Processing
CRBasic instructions have been created for making measurements and storing data. Measurement instructions set up CR1000 hardware to make measurements and store results in variables. Data-storage instructions process measurements into averages, maxima, minima, standard deviation, FFT, etc.
Each instruction is a keyword followed by a series of informational parameters needed to complete the procedure. For example, the instruction for measuring
CR1000 panel temperature is:
PanelTemp(Dest,Integ)
Section 7. Installation
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 µs integration time, the syntax is as shown in
CRBasic example Measurement Instruction Syntax
CRBasic Example 15.
Measurement Instruction Syntax
'This program example demonstrates the use of a single measurement instruction. In this
'case, the program measures the temperature of the CR1000 wiring panel.
Public RefTemp 'Declare variable to receive instruction
BeginProg
Scan (1,Sec,3,0)
PanelTemp (RefTemp, 250) '<<<<<<Instruction to make measurement
NextScan
EndProg
7.8.4.13.2 Argument Types
Most CRBasic commands or instructions, have sub-commands or parameters.
Parameters are populated by the programmer with arguments. Many instructions have parameters that allow different types of arguments. Common argument types are listed below. Allowed argument 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
7.8.4.13.3 Names in Arguments
Table Rules for Names
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.
Caution Concerning characters allowed in names, characters not listed in in the table, Rules for Names, may appear to be supported in a specific operating system.
However, they may not be supported in future operating systems.
Table 20. Rules for Names
Name
Category
1
Variable or array
Maximum Length
(number of characters)
39
Constant 38
Allowed characters
Letters A to Z, a to z, _ (underscore), and numbers 0 to 9. Names must start with a letter
159
160
Section 7. Installation
Table 20. Rules for Names
Name
Category
Units
Alias
1
Station name
Maximum Length
(number of characters)
38
39
64
20
Allowed characters or underscore. CRBasic is not case sensitive.
Units are excepted from the above rules. Since units are strings that ride along with the data, they are not subjected to the stringent syntax checking that is applied to variables, constants, subroutines, tables, and other names. Data-table name
Field name 39
Field-name description
64
1
Variables, constants, units, aliases, station names, field names, data table names, and file names can share identical names; that is, once a name is used, it is reserved only in that category. See the section Predefined Constants
for another naming limitation.
7.8.4.14 Expressions in Arguments
Read More See Programming Express Types
for more information on expressions.
Many CRBasic instruction parameters allow the entry of arguments as expressions. If an expression is a comparison, it will return -1 if true and 0 if false.
(See the section Logical Expressions
. The following code snip shows the use of an expressions as an argument in the TrigVar parameter of the
DataTable() instruction:
'DataTable(Name, TrigVar, Size)
DataTable (Temp, TC > 100, 5000)
When the trigger is TC > 100, a thermocouple temperature greater than 100 sets the trigger to True and data are stored.
7.8.4.15 Programming Expression Types
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, 32 bits) 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 (24 bits), or a function that results in a floating point, the rest of the expression is evaluated using floating-point, 24-bit math, even if the final function is to convert the result to an integer, so precision can be lost; for example, INT((rtYear-1993)*.25). This is a critical feature to consider when, 1) trying to use integer math to retain numerical resolution beyond the limit of floating point variables, or 2) if the result is to be tested for equivalence against another value. See section Floating-Point Arithmetic
for limits.
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.
Section 7. Installation
Consider the expressions: x = (z * 1.8) + 32 '(mathematical expression)
If x = 23 then y = 5 '(programming expression)
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.
7.8.4.15.1 Floating-Point Arithmetic
Variables and calculations are performed internally in single-precision IEEE fourbyte floating point with some operations calculated in double precision.
Note Single-precision float has 24 bits of mantissa. Double precision has a 32-bit 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(), Totalize(), and TotRun().
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 www.wikipedia.org. In summary, CR1000 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 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 an ever decreasing effect on the magnitude of the sum, because normal floating-point numbers are limited to about 7 digits of resolution.
7.8.4.15.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 Code space can be conserved while filling an array or partial array with the same value. See an example of how this is done in the CRBasic example
Use of Move() to Conserve Code Space. CRBasic example Use of Variable
Arrays to Conserve Code Space
shows example code to convert twenty temperatures in a variable array from °C to °F.
161
162
Section 7. Installation
CRBasic Example 16.
Use of Move() to Conserve Code Space
Move (counter(1),6,0,1) '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
'New measurement:
TCDiff (TempC(1),1,mV2_5C,8,TypeT,PTemp,True,0,_60Hz,1.0,0)
CRBasic Example 17.
Use of Variable Arrays to Conserve Code Space
For I = 1 to 20
TCTemp(I) = TCTemp(I) * 1.8 + 32
Next I
7.8.4.15.3 Expressions with Numeric Data Types
FLOATs, LONGs and Booleans are cross-converted to other data types, such as
FP2, by using '='.
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
zero becomes false ( 0) and non-zero becomes true ( -1).
CRBasic Example 18.
Conversion of FLOAT / LONG to Boolean
'This program example demonstrates conversion of Float and Long data types to Boolean
'data type.
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 'This will set Ba = False (0)
Bb = Fb 'This will Set Bb = True (-1)
Bc = L 'This will Set Bc = True (-1)
EndProg
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.
LONG from FLOAT or Boolean
When converted to Long, Boolean is converted to -1 or 0. When a FLOAT is
Section 7. Installation converted to a LONG, it is truncated. This conversion is the same as the INT function (Arithmetic Functions
). The conversion is to an integer equal to or less than the value of the float; for example, 4.6 becomes 4 and –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.
Integers in Expressions
LONGs are evaluated in expressions as integers when possible. CRBasic example
Evaluation of Integers
illustrates evaluation of integers as LONGs and
FLOATs.
CRBasic Example 19.
Evaluation of Integers
'This program example demonstrates the evaluation of integers.
Public I As Long
Public X As Float
BeginProg
I = 126
X = (I+3) * 3.4
'I+3 is evaluated as an integer, then converted to Float data type before it is
'multiplied by 3.4.
EndProg
Constants Conversion
Constants are not declared with a data type, so the CR1000 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, for example, if the expression has not yet encountered a FLOAT. CRBasic example Constants to
LONGs or FLOATs
lists a programming case wherein a value normally considered an integer (10) is assigned by the CR1000 to be As FLOAT.
CRBasic Example 20.
Constants to LONGs or FLOATs
'This program example demonstrates conversion of constants to Long or Float data types.
Public L As Long
Public F1 As Float
Public F2 As Float
Const ID = 10
BeginProg
F1 = F2 + ID
L = ID * 5
EndProg
In CRBasic example Constants to LONGs or FLOATs
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 LONG to FLOAT before each floating point addition.
163
164
Section 7. Installation
7.8.4.15.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 CR1000 can render the state of the event into binary form for further processing, so the event is either occurring (true), or the event has not occurred
(false).
True = -1, False = 0
In all cases, the argument 0 is translated as FALSE in logical expressions; by extension, any non-zero number is considered "non-FALSE." However, the argument TRUE is predefined in the CR1000 operating system to only equal -1, so only the argument -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 CR1000 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 four 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 if at least one of the bits in X is non-zero (if X is not zero). When a variable of data type BOOLEAN is assigned any non-zero number, the CR1000 internally converts it to -1.
The CR1000 is able to translate the conditions listed in table Binary Conditions of
TRUE and FALSE
to binary form (-1 or 0), using the listed instructions and saving the binary form in the memory location indicated. Table Logical
Expression Examples
explains some logical expressions.
Non-Zero = True (Sometimes)
Any argument other than 0 or -1 will be translated as TRUE in some cases and
FALSE in other cases. 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 is omitted from the expression, Condition(1) is considered true if it equals any non-zero value.
Section 7. Installation
Table 21. Binary Conditions of TRUE and FALSE
Condition
Time
Control Port Trigger
Communications
Measurement Event
CRBasic Instruction(s)
Used
TimeIntoInterval()
IfTime()
TimeIsBetween()
WaitDigTrig()
VoiceBeg()
ComPortIsActive()
PPPClose()
DataEvent()
Memory Location of Binary
Result
Variable, System
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 one of the following 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 OR links.
The following commands and logical operators are used to construct logical expressions. CRBasic example Logical Expression Examples
demonstrate some logical expressions.
• IF
• AND
• OR
• NOT
• XOR
• IMP
• IIF
Table 22. 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 CR1000 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 equals -1 if X > Y, or Z will equal 0 if X <= Y.
165
166
Section 7. Installation
Table 22. Logical Expression Examples
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 to a
'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 'This evaluates to TRUE.
not_is_true = NOT (is_true) 'This evaluates to FALSE.
not_a_and_b = NOT (a AND b) 'This evaluates to TRUE!
NextScan
EndProg
7.8.4.15.5 String Expressions
CRBasic facilitates concatenation of string variables to variables of all data 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
demonstrates CRBasic code for concatenating strings and integers. See section String Operations
in the
Programming Resource Library
for more information on string programming.
CRBasic Example 21.
String and Variable Concatenation
'This program example demonstrates the concatenation of variables declared As String to
'other strings and to variables declared as other data types.
'
'Declare Variables
Dim PhraseNum(2) As Long
Dim Word(15) As String * 10
Public Phrase(2) As String * 80
'Declare Data Table
DataTable (HAL,1,-1)
DataInterval (0,15,Sec,10)
'Write phrases to data table "Test"
Sample (2,Phrase,String)
EndTable
Section 7. Installation
'Program
BeginProg
Scan (1,Sec,0,0)
'Assign strings to String variables
Word(1) = "Good"
Word(2) = "morning"
Word(3) = "Dave"
Word(4) = "I'm"
Word(5) = "sorry"
Word(6) = "afraid"
Word(7) = "I"
Word(8) = "can't"
Word(9) = "do"
Word(10) = "that"
Word(11) = " "
Word(12) = ","
Word(13) = ";"
Word(14) = "."
Word(15) = Chr(34)
'Assign integers to Long variables
PhraseNum(1) = 1
PhraseNum(2) = 2
'Concatenate string "1. Good morning, Dave"
Phrase(1) = PhraseNum(1)+Word(14)+Word(11)&Word(15)&Word(1)&Word(11)&Word(2)& _
Word(12)&Word(11)&Word(3)&Word(14)&Word(15)
'Concatenate string "2. I'm afraid I can't do that, Dave."
Phrase(2) = PhraseNum(2)+Word(14)&Word(11)&Word(15)&Word(4)&Word(11)&Word(6)&Word(11)& _
Word(7)&Word(11)&Word(8)&Word(11)&Word(9)&Word(11)&Word(10)&Word(12)& _
Word(11)&Word(3)&Word(14)&Word(15)
CallTable HAL
NextScan
EndProg
7.8.4.16 Programming Access to Data Tables
A data table is a memory location where data records are stored. Sometimes, the stored data needs to be used in the CRBasic program. For example, a program can be written to retrieve the average temperature of the last five days for further processing. CRBasic has syntax provisions facilitating access to these table data, or to meta data relating to the data table. Except when using the GetRecord() instruction (Data Table Access and Management
), 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 is the name of the data table.
• FieldName is the name of the variable from which the processed value is derived.
• Prc is the abbreviation of the name of the data process used. See table Data
Process Abbreviations
for a complete list of these abbreviations. This is not needed for values from Status or Public tables.
167
168
Section 7. Installation
• Fieldname Index is the array element number in fields that are arrays
(optional).
• Records Back is how far back into the table to go to get the value (optional).
If left blank, the most recent record is acquired.
Table 23. Data Process Abbreviations
Abbreviation
Tot
Avg
Max
Min
SMM
Std
MMT
No abbreviation
Hst
LCr
WVc
Med
ETsz
RSo
Process Name
Totalize
Average
Maximum
Minimum
Sample at Max or Min
Standard Deviation
Moment
Sample
Histogram
1
Histogram4D
FFT
H4D
FFT
Cov
RFH
Covariance
Rainflow Histogram
Level Crossing
WindVector
Median
ET
Solar Radiation (from ET)
TMx
TMn
Time of Max
Time of Min
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 example, to access the number of watchdog errors, use the statement wderr = status.watchdogerrors where wderr is a declared variable, status is the table name, and watchdogerrors is the keyword for the watchdog error field.
Seven special variable names are used to access information about a table.
• EventCount
• EventEnd
• Output
• Record
• TableFull
• TableSize
• TimeStamp
Section 7. Installation
Consult CRBasic Editor Help index topic DataTable access for complete information.
The DataTableInformation table also include this information. See Status,
Settings, and Data Table Information (Status/Settings/DTI)
7.8.4.17 Programming to Use Signatures
Signatures help assure system integrity and security. The following resources provide information on using signatures.
•
•
•
•
•
Signature() instruction in Diagnostics
RunSignature entry in table Signature Status/Settings/DTI
ProgSignature entry in table Signature Status/Settings/DTI
OSSignature entry in table Signature Status/Settings/DTI
Security
Many signatures are recorded in the Status table, which is a type of data table.
Signatures recorded in the Status table can be copied to a variable using the programming technique described in the Programming Access to Data Tables
(p.
Once in variable form, signatures can be sampled as part of another data table for archiving.
7.9 Programming Resource Library
This library of notes and CRBasic code addresses a narrow selection of CR1000 applications. Consult a Campbell Scientific application engineer if other resources are needed.
7.9.1 Advanced Programming Techniques
7.9.1.1 Capturing Events
CRBasic example Capturing Events
demonstrates programming to output data to a data table at the occurrence of an event.
CRBasic Example 22.
BeginProg / Scan / NextScan / EndProg Syntax
'This program example demonstrates detection and recording of 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
169
170
Section 7. Installation
'Declare Event Driven Data Table
DataTable (Event,True,1000)
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
7.9.1.2 Conditional Output
CRBasic example Conditional Output
demonstrates programming to output data to a data table conditional on a trigger other than time.
CRBasic Example 23.
Conditional Output
'This program example demonstrates the conditional writing of data to a data table. It
'also demonstrates use of StationName() and Units instructions.
'Declare Station Name (saved to Status table)
StationName (Delta_Temp_Station)
'Declare Variables
Public PTemp_C, AirTemp_C, DeltaT_C
Section 7. Installation
'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
7.9.1.3 Groundwater Pump Test
CRBasic example Groundwater Pump Test
demonstrates:
• How to write multiple-interval data to the same data table
• Use of program-control instructions outside the Scan() / NextScan structure
• One way to execute conditional code
• Use of multiple sequential scans, each with a scan count
171
172
Section 7. Installation
CRBasic Example 24.
Groundwater Pump Test
'This program example demonstrates the use of multiple scans in a program by running a
'groundwater pump test. Note that Scan() time units of Sec have been changed to mSec for
'this demonstration to allow the program to run its course in a short time. To use this
'program for an actual pump test, change the Scan() instruction mSec arguments to Sec. You
'will also need to put a level measurement in the MeasureLevel subroutine.
'A groundwater pump test requires that water level be measured and recorded
'according to the following schedule:
'Minutes into Test Data-Output Interval
'----------------- --------------------
' 0-10 10 seconds
' 10-30 30 seconds
' 30-100 60 seconds
' 100-300 120 seconds
' 300-1000 300 seconds
' 1000+ 600 seconds
'Declare Variables
Public PTemp
Public Batt_Volt
Public Level
Public LevelMeasureCount As Long
Public ScanCounter(6) As Long
'Declare Data Table
DataTable (LogTable,1,-1)
Minimum (1,Batt_Volt,FP2,0,False)
Sample (1,PTemp,FP2)
Sample (1,Level,FP2)
EndTable
'Declare Level Measurement Subroutine
Sub MeasureLevel
LevelMeasureCount = LevelMeasureCount + 1 'Included to show passes through sub-routine
'Level measurement instructions goes here
EndSub
'Main Program
BeginProg
'Minute 0 to 10 of test: 10-second data-output interval
Scan (10,mSec,0,60) 'There are 60 10-second scans in 10 minutes
ScanCounter(1) = ScanCounter(1) + 1 'Included to show passes through this scan
Battery (Batt_volt)
PanelTemp (PTemp,250)
Call MeasureLevel
'Call Output Tables
CallTable LogTable
NextScan
Section 7. Installation
'Minute 10 to 30 of test: 30-second data-output interval
Scan (30,mSec,0,40) 'There are 40 30-second scans in 20 minutes
ScanCounter(2) = ScanCounter(2) + 1 'Included to show passes through this scan
Battery (Batt_volt)
PanelTemp (PTemp,250)
Call MeasureLevel
'Call Output Tables
CallTable LogTable
NextScan
'Minute 30 to 100 of test: 60-second data-output interval
Scan (60,mSec,0,70) 'There are 70 60-second scans in 70 minutes
ScanCounter(3) = ScanCounter(3) + 1 'Included to show passes through this scan
Battery (Batt_volt)
PanelTemp (PTemp,250)
Call MeasureLevel
'Call Output Tables
CallTable LogTable
NextScan
'Minute 100 to 300 of test: 120-second data-output interval
Scan (120,mSec,0,200) 'There are 200 120-second scans in 10 minutes
ScanCounter(4) = ScanCounter(4) + 1 'Included to show passes through this scan
Battery (Batt_volt)
PanelTemp (PTemp,250)
Call MeasureLevel
'Call Output Tables
CallTable LogTable
NextScan
'Minute 300 to 1000 of test: 300-second data-output interval
Scan (300,mSec,0,140) 'There are 140 300-second scans in 700 minutes
ScanCounter(5) = ScanCounter(5) + 1 'Included to show passes through this scan
Battery (Batt_volt)
PanelTemp (PTemp,250)
Call MeasureLevel
'Call Output Tables
CallTable LogTable
NextScan
'Minute 1000+ of test: 600-second data-output interval
Scan (600,mSec,0,0) 'At minute 1000, continue 600-second scans indefinitely
ScanCounter(6) = ScanCounter(6) + 1 'Included to show passes through this scan
Battery (Batt_volt)
PanelTemp (PTemp,250)
Call MeasureLevel
'Call Output Tables
CallTable LogTable
NextScan
EndProg
173
174
Section 7. Installation
7.9.1.4 Miscellaneous Features
CRBasic example Miscellaneous Features
demonstrates use of several
CRBasic features: data type, units, names, event counters, flags, data-output intervals, and control.
CRBasic Example 25.
Miscellaneous Program Features
'This program example demonstrates the use of a single measurement instruction. In this
'case, the program measures the temperature of the CR1000 wiring panel.
Public RefTemp 'Declare variable to receive instruction
BeginProg
Scan (1,Sec,3,0)
PanelTemp (RefTemp, 250) 'Instruction to make measurement
NextScan
EndProg
'A program can be (and should be!) extensively documented. Any text preceded by an
'apostrophe is ignored by the CRBasic compiler.
'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 'Declared as Float
Public PTemp_C 'Float by default
Public AirTemp_C 'Float by default
Public AirTemp_F 'Float by default
Public AirTemp2_F 'Float by default
Public DeltaT_C 'Float by default
Public HowMany 'Float by default
Public Counter As Long 'Declared as Long so counter does not have
'rounding error
Public SiteName As String * 16 '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
Section 7. Installation
'Optional – Declare a Station Name into a location in the Status table.
StationName (CR1000_on_desk)
'Optional -- Declare units. Units are not used in programming, but only appear in the
'data file header.
Units Batt_Volt = Volts
Units PTemp = deg C
Units AirTemp = deg C
Units AirTempF2 = deg F
Units DeltaT_C = deg C
'Declare an interval driven output table
DataTable (OneMin,True,-1) 'Time driven data storage
DataInterval (0,1,Min,0) 'Controls the interval
Average (1,AirTemp_C,IEEE4,0) 'Stores temperature average in high
'resolution format
Maximum (1,AirTemp_C,IEEE4,0,False) 'Stores temperature maximum in high
'resolution format
Minimum (1,AirTemp_C,FP2,0,False) 'Stores temperature minimum in low
'resolution format
Minimum (1,Batt_Volt,FP2,0,False) 'Stores battery voltage minimum in low
'resolution format
Sample (1,Counter,Long) 'Stores counter in integer format
Sample (1,SiteName,String) 'Stores site name as a string
Sample (1,HowMany, FP2) 'Stores how many data events in low
'resolution format
EndTable
'Declare an event driven data output table
DataTable (Event,True,1000) '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"
175
176
Section 7. Installation
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. This demonstrates the use of a
'Long integer variable in counters.
Counter = Counter + 1
'Calculate the difference between air and panel temps
DeltaT_C = AirTemp_C - PTemp_C
'Control the flag based on the difference in temperature. If DeltaT >= 3 then
'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: PortSet(1,high)
Else
PortSet (1,0) 'alternate syntax: PortSet(1,low)
EndIf
'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
Section 7. Installation
7.9.1.5 PulseCountReset Instruction
PulseCountReset is used in rare instances to force the reset or zeroing of CR1000 pulse accumulators (see Measurements — Overview
.
PulseCountReset is needed in applications wherein two separate PulseCount() instructions in separate scans measure the same pulse-input terminal. While the compiler does not allow multiple PulseCount() instructions in the same scan to measure the same terminal, multiple scans using the same terminal 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.
7.9.1.6 Scaling Array
CRBasic example Scaling Array
demonstrates programming to create and use a scaling array. Several multipliers and offsets are entered at the beginning of the program and then used by several measurement instructions throughout the program.
CRBasic Example 26.
Scaling Array
'This program example demonstrates the use of a scaling array. An array of three
'temperatures are measured. The first is expressed as degrees Celsius, the second as
'Kelvin, and the third as degrees Fahrenheit.
'Declare viewable variables
Public PTemp_C
Public Temp_C(3)
Public Count
'Declare scaling arrays as non-viewable variables
Dim Mult(3)
Dim Offset(3)
'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 (3,Temp_C(),FP2,0)
Minimum (3,Temp_C(1),FP2,0,0)
Maximum (3,Temp_C(1),FP2,0,0)
EndTable
'Begin Program
BeginProg
'Load scaling array
Mult(1) = 1.0 : Offset(1) = 0 'Scales 1st thermocouple temperature to Celsius
Mult(2) = 1.0 : Offset(2) = 273.15 'Scales 2nd thermocouple temperature to Kelvin
Mult(3) = 1.8 : Offset(3) = 32 'Scales 3rd thermocouple temperature to Fahrenheit
177
178
Section 7. Installation
Scan (5,Sec,1,0)
'Measure reference temperature
PanelTemp (PTemp_C,_60Hz)
'Measure three thermocouples and scale each. Scaling factors from the scaling array
'are applied to each measurement because the syntax uses an argument of 3 in the Reps
'parameter of the TCDiff() instruction and scaling variable arrays as arguments in the
'Multiplier and Offset parameters.
TCDiff (Temp_C(), 3, mV2_5C,1,TypeT,PTemp_C,True,0,250,Mult(),Offset())
CallTable (Min_5)
NextScan
EndProg
7.9.1.7 Signatures: Example Programs
A program signature is a unique integer calculated from all characters in a given set of code. When a character changes, the signature changes. Incorporating signature data into a the CR1000 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
7.9.1.7.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. See
CRBasic example Program Signatures
7.9.1.7.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.
7.9.1.7.3 Executable Code Signatures
Executable code signatures allow signatures to be calculated on discrete sections of executable code. Executable code is code that resides between BeginProg and
EndProg instructions. See CRBasic example Program Signatures
CRBasic Example 27.
Program Signatures
'This program example demonstrates how to request the program text signature (ProgSig =
Status.ProgSignature), and the
'binary run-time signature (RunSig = Status.RunSignature). It also calculates two
'executable code segment signatures (ExeSig(1), ExeSig(2))
'Define Public Variables
Public RunSig, ProgSig, ExeSig(2),x,y
Section 7. Installation
'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 'initialize executable code signature
'function
Scan (1,Sec,0,0)
ProgSig = Status.ProgSignature 'Set variable to Status table entry
'"ProgSignature"
RunSig = Status.RunSignature 'Set variable to Status table entry
'"RunSignature"
x = 24
ExeSig(1) = Signature 'signature includes code since initial
'Signature instruction
y = 43
ExeSig(2) = Signature 'Signature includes all code since
'ExeSig(1) = Signature
CallTable Signatures
NextScan
7.9.1.8 Use of Multiple Scans
CRBasic example Use of Multiple Scans
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.
CRBasic Example 28.
Use of Multiple Scans
'This program example 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 preceded with the SlowSequence instruction.
'Declare Public Variables
Public PTemp
Public Counter1
'Declare Data Table 1
DataTable (DataTable1,1,-1) 'DataTable1 is event driven.
'The event is the scan.
Sample (1,PTemp,FP2)
Sample (1, Counter1, fp2)
EndTable
'Main Program
BeginProg 'Begin executable section of program
Scan (1,Sec,0,0) 'Begin main scan
PanelTemp (PTemp,250)
Counter1 = Counter1 + 1
CallTable DataTable1 'Call DataTable1
NextScan 'End main scan
179
180
Section 7. Installation
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 (DataTable2,1,-1) 'DataTable2 is event driven.
'The event is the scan.
Sample (1,Batt_Volt,FP2)
Sample (1,Counter2,FP2)
EndTable
Scan (5,Sec,0,0) 'Begin 1st secondary scan
Counter2 = Counter2 + 1
Battery (Batt_Volt)
CallTable DataTable2 'Call DataTable2
NextScan 'End slow sequence scan
EndProg 'End executable section of program
7.9.2 Compiling: Conditional Code
When a CRBasic user program is sent to the CR1000, an exact copy of the program is saved as a file on the CPU: drive
A binary version of the program, the "operating program", is created by the CR1000 compiler and written to Operating Memory
This is the program version that runs the CR1000.
CRBasic allows definition of conditional code, preceded by a hash character (#), in the CRBasic program that is compiled into the operating program depending on the conditional settings. In addition, all Campbell Scientific datalogger (except the CR200) accept program files, or Include() instruction files, with .DLD extensions. This feature circumvents 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 models of CRBasic dataloggers.
Note Do not confuse CRBasic files with .DLD extensions with files of .DLD type used by legacy Campbell Scientific dataloggers.
As an example, pseudo code using this feature might be written as:
#Const Destination = LoggerType
#If Destination = 3000 Then
<code specific to the CR3000>
#ElseIf Destination = 1000 Then
<code specific to the CR1000>
#ElseIf Destination = 800 Then
<code specific to the CR800>
#ElseIf Destination = 6 Then
<code specific to the CR6>
#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
Section 7. Installation by using -p <outfile name>. This feature allows the smallest size program file possible to be sent to the CR1000, which may help keep costs down over very expensive telecommunication links.
CRBasic example Conditional Code
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 ( 6, 800, 1000, and 3000).
CRBasic Example 29.
Conditional Code
'This program example demonstrates program compilation than is conditional on datalogger
'model and program speed. Key instructions include #If, #ElseIf, #Else and #EndIf.
'Set program options based on:
' LoggerType, which is a constant predefined in the CR1000 operating system
' ProgramSpeed, which is defined in the following statement:
Const ProgramSpeed = 2
#If ProgramSpeed = 1
Const ScanRate = 1 '1 second
Const Speed = "1 Second"
#ElseIf ProgramSpeed = 2
Const ScanRate = 10 '10 seconds
Const Speed = "10 Second"
#ElseIf ProgramSpeed = 3
Const ScanRate = 30 '30 seconds
Const Speed = "30 Second"
#Else
Const ScanRate = 5 '5 seconds
Const Speed = "5 Second"
#EndIf
'Public Variables
Public ValueRead, SelectedSpeed As String * 50
'Main Program
BeginProg
'Return the selected speed and logger type for display.
#If LoggerType = 3000
SelectedSpeed = "CR3000 running at " & Speed & " intervals."
#ElseIf LoggerType = 1000
SelectedSpeed = "CR1000 running at " & Speed & " intervals."
#ElseIf LoggerType = 800
SelectedSpeed = "CR800 running at " & Speed & " intervals."
#ElseIf LoggerType = 6
SelectedSpeed = "CR6 running at " & Speed & " intervals."
#Else
SelectedSpeed = "Unknown Logger " & Speed & " intervals."
#EndIf
'Open the serial port
SerialOpen (ComC1,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.
181
182
Section 7. Installation
#If LoggerType = 3000
'This instruction is used if the datalogger is a CR3000
VoltSe (ValueRead,1,mV1000,22,0,0,_50Hz,0.1,-30)
#ElseIf LoggerType = 1000
'This instruction is used if the datalogger is a CR1000
VoltSe (ValueRead,1,mV2500,12,0,0,_50Hz,0.1,-30)
#ElseIf LoggerType = 800
'This instruction is used if the datalogger is a CR800 Series
VoltSe (ValueRead,1,mV2500,3,0,0,_50Hz,0.1,-30)
#ElseIf LoggerType = 6
'This instruction is used if the datalogger is a CR6 Series
VoltSe (ValueRead,1,mV1000,U3,0,0,50,0.1,-30)
#Else
ValueRead = NAN
#EndIf
NextScan
EndProg
7.9.3 Displaying Data: Custom Menus — Details
Related Topics:
• Custom Menus — Overview
• Data Displays: Custom Menus — Details
• Custom Menus — Instruction Set
• Keyboard Display — Overview
• CRBasic Editor Help for DisplayMenu()
Menus for the CR1000KD 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 six 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
Section 7. Installation 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 of 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 six characters long to mask default display clock.
CRBasic example Custom Menus
lists CRBasic programming for a custom menu that facilitates viewing data, entering notes, and controlling a device.
Following is a list of figures that show the organization of the custom menu that is programmed using CRBasic example Custom Menus
Custom Menu Example — Home Screen
Custom Menu Example — View Data Window
Custom Menu Example — Make Notes Sub Menu
Custom Menu Example — Predefined Notes Pick List
Custom Menu Example — Free Entry Notes Window
Custom Menu Example — Accept / Clear Notes Window
Custom Menu Example — Control Sub Menu
Custom Menu Example — Control LED Pick List
Custom Menu Example — Control LED Boolean Pick List
Figure 43. Custom Menu Example — Home Screen
Figure 44. Custom Menu Example — View Data Window
183
184
Section 7. Installation
Figure 45. Custom Menu Example — Make Notes Sub Menu
Figure 46. Custom Menu Example — Predefined Notes Pick List
Figure 47. Custom Menu Example — Free Entry Notes Window
Figure 48. Custom Menu Example — Accept / Clear Notes Window
Figure 49. Custom Menu Example — Control Sub Menu
Section 7. Installation
Figure 50. Custom Menu Example — Control LED Pick List
Figure 51. Custom Menu Example — Control LED Boolean Pick List
Note See figures Custom Menu Example — Home Screen
through Custom
Menu Example — Control LED Boolean Pick List
in reference to the following CRBasic example Custom Menus
CRBasic Example 30.
Custom Menus
'This program example demonstrates the building of a custom CR1000KD Keyboard Display menu.
'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
185
186
Section 7. Installation
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 'Set up Notes data table, written
DataTable (Notes,1,-1) 'to when a note is accepted
Sample (1,SelectNote,String) 'Sample Pick List Note
Sample (1,EnterNote,String) 'Sample Free Entry Note
EndTable
'Define temperature DataTable 'Set up temperature data table.
DataTable (TempC,1,-1) 'Written to every 60 seconds with:
DataInterval (0,60,Sec,10)
Sample (1,RefTemp,FP2) 'Sample of reference temperature
Sample (1,TCTemp(1),FP2) 'Sample of thermocouple 1
Sample (1,TCTemp(2),FP2) 'Sample of thermocouple 2
EndTable
'Custom Menu Declarations
DisplayMenu ("**CUSTOM MENU DEMO**",-3) 'Create Menu; Upon power up, the custom menu
'is displayed. The system menu is hidden
'from the user.
SubMenu ("") 'Dummy Sub menu to write a blank line
DisplayValue ("",Escape) 'a blank line
EndSubMenu 'End of dummy submenu
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
Section 7. Installation
SubMenu ("Control ") 'Create Submenu named PanelTemps
MenuItem ("Count to LED",CountDown) 'Create menu item CountDown
MenuPick (15,30,45,60) 'Create a pick list for CountDown
MenuItem ("Manual LED",toggleLED) 'Manual LED control Menu Item
MenuPick (On,Off)
EndSubMenu
EndMenu 'End custom menu creation
'Main Program
BeginProg
CycleNotes = "??????" 'Initialize Notes Sub Menu,
'write ????? as a null
Scan (1,Sec,3,0)
'Measurements
PanelTemp (RefTemp,250) 'Measure Reference Temperature
'Measure Two Thermocouples
TCDiff (TCTemp(),2,mV2_5C,1,TypeT,RefTemp,True,0,_60Hz,1.0,0)
CallTable TempC 'Call data table
'Menu Item "Make Notes" Support Code
If CycleNotes = "Accept" Then
CallTable Notes 'Write data to Notes data table
CycleNotes = "Accepted" 'Write "Accepted" after written
Delay (1,500,mSec) 'Pause so user can read "Accepted"
SelectNote = "" 'Clear pick list note
EnterNote = "" 'Clear free entry note
CycleNotes = "??????" 'Write ????? as a null prompt
EndIf
If CycleNotes = "Clear" Then 'Clear notes when requested
SelectNote = "" 'Clear pick list note
EnterNote = "" 'Clear free entry note
CycleNotes = "??????" 'Write ????? as a null prompt
EndIf
'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
187
188
Section 7. Installation
7.9.4 Data Input: Loading Large Data Sets
Large data sets, such as look up tables or tag numbers, can be loaded in the
CR1000 for use by the CRBasic program. This is efficiently accomplished by using the Data, DataLong, and Read instructions, as demonstrated in CRBasic example Loading Large Data Sets
CRBasic Example 31.
Loading Large Data Sets
'This program example demonstrates how to load a set of data into variables. Twenty values
'are loaded into two arrays: one declared As Float, one declared As Long. Individual Data
'lines can be many more values long than shown (limited only by maximum statement length),
'and many more lines can be written. Thousands of values can be loaded in this way.
'Declare Float and Long variables. Can also be declared as Dim.
Public DataSetFloat(10) As Float
Public DataSetLong(10) As Long
Dim x
'Write data set to CR1000 memory
Data 1.1,2.2,3.3,4.4,5.5
Data -1.1,-2.2,-3.3,-4.4,-5.5
DataLong 1,2,3,4,5
DataLong -1,-2,-3,-4,-5
'Declare data table
DataTable (DataSet_,True,-1)
Sample (10,DataSetFloat(),Float)
Sample (10,DataSetLong(),Long)
EndTable
BeginProg
'Assign Float data to variable array declared As Float
For x = 1 To 10
Read DataSetFloat(x)
Next x
'Assign Long data to variable array declared As Long
For x = 1 To 10
Read DataSetLong(x)
Next x
Scan (1,sec,0,1)
'Write all data to final-data memory
CallTable DataSet_
NextScan
EndProg
7.9.5 Data Input: Array-Assigned Expression
CRBasic provides for the following operations on one dimension of a multidimensional array:
Section 7. Installation
• Initialize
• Transpose
• Copy
• Mathematical
• Logical
Examples include:
• Process a variable array without use of For/Next
• Create boolean arrays based on comparisons with another array or a scalar variable
• Copy a dimension to a new location
• Perform logical operations for each element in a dimension using scalar or similarly located elements in different arrays and dimensions
Note Array-assigned expression notation is an alternative to For/Next instructions, typically for use by more advanced programmers. It will probably not reduce processing time significantly over the use of For/Next. To reduce processing time, consider using the Move() instruction, which requires more intensive programming.
Syntax rules:
• Definitions: o Least-significant dimension — the last or right-most figure in an array index. For example, in the array array(a,b), b is the least-significant dimension index. In the array array(a,b,c), c is least significant. o Negate — place a negative or minus sign (-) before the array index. For example, when negating the least-significant dimension in array(a,b,c), the notion is array(a,b,-c)
• An empty set of parentheses designates an array-assigned expression. For example, reference array() or array(a,b,c)().
• Only one dimension of the array is operated on at a time.
• To select the dimension to be operated on, negate the dimension of index of interest.
• Operations will not cross dimensions. An operation begins at the specified starting point and continues to one of the following: o End of the dimension o Where the dimension is specified by a negative o Where the dimension is the least significant (default)
• If indices are not specified, or none have been preceded with a minus sign, the least significant dimension of the array is assumed.
• The offset into the dimension being accessed is given by (a,b,c).
• If the array is referenced as array(), the starting point is array(1,1,1) and the least significant dimension is accessed. For example, if the array is declared as test(a,b,c), and subsequently referenced as test(), then the starting point is
test(1,1,1) and dimension c is accessed.
189
190
Section 7. Installation
Table 24. CRBasic Example. Array Assigned Expression: Sum Columns and Rows
'This example sums three rows and two columns of a 3x2 array.
'Source array image:
'1.23,2.34
'3.45,4.56
'5.67,6.78
Public Array(3,2) = {1.23,2.34,3.45,4.56,5.67,6.78} 'load values into source array
Public RowSum(3)
Public ColumnSum(2)
BeginProg
Scan (1,Sec,0,0)
'For each row, add up the two columns
RowSum() = Array(-1,1)() + Array(-1,2)()
'For each column, add up the three rows
ColumnSum() = Array(1,-1)() + Array(2,-1)() + Array(3,-1)()
NextScan
EndProg
Table 25. CRBasic Example. Array Assigned Expression: Transpose an Array
'This example transposes a 3x2 array to a 2x3 array
'Source array image:
'1,2
'3,4
'5,6
'Destination array image (transpose of source):
'1,3,5
'2,4,6
'Dimension and initialize source array
Public A(3,2) = {1,2,3,4,5,6}
'Dimension destination array
Public At(2,3)
'Delcare For/Next counter
Dim i
BeginProg
Scan (1,Sec,0,0)
For i = 1 To 2
'For each column of the source array A(), copy the column into a row of the
'destination array At()
At(i,-1)() = A(-1,i)()
Next i
NextScan
EndProg
Section 7. Installation
Table 26. CRBasic Example. Array Assigned Expression: Comparison / Boolean Evaluation
'Example: Comparison / Boolean Evaluation
'Element-wise comparisons is performed through scalar expansion or by comparing each
'element in one array to a similarly located element in another array to generate a
'resultant boolean array to be used for decision making and control, such as
'an array input to a SDM-CD16AC.
Public TempC(3) = {15.1234,20.5678,25.9876}
Public TempC_Rounded(3)
Public TempDiff(3)
Public TempC_Alarm(3) As Boolean
Public TempF_Thresh(3) = {55,60,80}
Public TempF_Alarm(3) As Boolean
BeginProg
Scan (1,Sec,0,0)
'element-wise comparison of each temperature in the array to a scalar value
'set corresponding alarm boolean value true if temperature exceeds 20 degC
TempC_Alarm() = TempC() > 20
'some, not all or most, instructions will accept this array notation to auto-index
'through the array
'round each temperature to the nearest tenth of a degree
TempC_Rounded() = Round(TempC(),1)
'element-wise subtraction
'each element in TempC_Rounded is subtracted from the similarly located element inTempC
'calculate the difference between each TempC value and the rounded counterpart
TempDiff() = TempC() - TempC_Rounded()
'element-wise operations can be mixed with scalar expansion operations
'set corresponding alarm boolean value true if temperature, after being
'converted to degF, exceeds it's corresponding alarm threshold value in degF
TempF_Alarm() = (TempC() * 1.8 + 32) > TempF_Thresh()
NextScan
EndProg
191
192
Section 7. Installation
Table 27. CRBasic Example. Array Assigned Expression: Fill Array Dimension
'Example: Fill Array Dimension
Public A(3)
Public B(3,2)
Public C(4,3,2)
Public Da(3,2) = {1,1,1,1,1,1}
Public Db(3,2)
Public DMultiplier(3) = {10,100,1000}
Public DOffset(3) = {1,2,3}
BeginProg
Scan (1,Sec,0,0)
A() = 1 'set all elements of 1D array or first dimension to 1
B(1,1)() = 100 'set B(1,1) and B(1,2) to 100
B(-2,1)() = 200 'set B(2,1) and B(3,1) to 200
B(-2,2)() = 300 'set B(2,2) and B(3,2) to 300
C(1,-1,1)() = A() 'copy A(1), A(2), and A(3) into C(1,1,1), C(1,2,1), and C(1,3,1),
'respectively
C(2,-1,1)() = A() * 1.8 + 32 'scale and then copy A(1), A(2), and A(3) into C(2,1,1),
'C(2,2,1), and C(2,3,1), respectively
'scale the first column of Da by corresponding multiplier and offset
'copy the result into the first column of Db
'then set second column of Db to NAN
Db(-1,1)() = Da(-1,1)() * DMultiplier() + DOffset()
Db(-1,2)() = NAN
NextScan
EndProg
7.9.6 Data Output: Calculating Running Average
The AvgRun() instruction calculates a running average of a measurement or calculated value. A running average (Dest) is the average of the last N values where N is the number of values, as expressed in the running-average equation: where X
N
is the most recent value of the source variable and X
N-1
is the previous value (X
1
is the oldest value included in the average, i.e., N-1 values back from the most recent). NANs are ignored in the processing of AvgRun() unless all values in the population are NAN.
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 should not normally be inserted within a For/Next construct with the Source and Destination parameters indexed and Reps set to 1.
Doing so will perform a single running average, using the values of the different
Section 7. Installation 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 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. Degree 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.
The figure Running-Average Frequency Response
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
Sin(0.4π) / (0.4π) = 0.757 (or read from figure Running-Average Frequency
Response
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:
An accelerometer was tested while mounted on a beam. The test had the following characteristics: o Accelerometer resonant frequency ≈ 36 Hz o Measurement period = 2 ms o Running average duration = 20 ms (frequency of 50 Hz)
Normalized resonant frequency was calculated as follows:
193
194
Section 7. Installation
36 Hz / 50 Hz = 0.72
SIN(0.72π) / (0.72π) = 0.34.
So, the recorded amplitude was about 1/3 of the input-signal amplitude. A
CRBasic program was written with variables Accel2 and Accel2RA. The raw measurement was stored in Accel2. Accel2RA held the result of performing a running average on the Accel2. Both values were stored at a rate of 500 Hz. Figure Running-Average Signal Attenuation
shows the two variables plotted to illustrate the attenuation. The running-average value has the lower amplitude.
The resultant delay, D r
, is calculated as follows:
D r
= (scan rate) • (N–1)/2 = 2 ms (10–1)/2
= 9 ms
D r
is about 1/3 of the input-signal period.
Figure 52. Running-Average Frequency Response
Figure 53. Running-Average Signal Attenuation
Section 7. Installation
7.9.7 Data Output: Triggers and Omitting Samples
TrigVar is the third parameter in the DataTable() instruction. It controls whether or not a data record is written to final memory. 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.
For individual measurements to affect summary data, output processing instructions such as Average() must be executed whenever the data table is called from the program — normally once each scan. For example, for an average 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 (such as DataInterval() and DataEvent()) must be true. Expressed another way, when TrigVar is false, output processing instructions (for example, Average()) perform intermediate processing but not the final process, 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.
Figure Data from TrigVar Program
shows data produced by CRBasic example Using TrigVar to Trigger Data Storage
which uses TrigVar rather than DataInterval() to trigger data storage.
195
Section 7. Installation
Figure 54. Data from TrigVar Program
196
CRBasic Example 32.
Using TrigVar to Trigger Data Storage
'This program example demonstrates the use of the TrigVar parameter in the DataTable()
'instruction to trigger data storage. In this example, the variable Counter is
'incremented by 1 at each scan. The data table, which includes the Sample(), Average(), and
'Totalize() instructions, is called every scan. Data are stored when TrigVar is true, and
'TrigVar is True when Counter = 2 or Counter = 3. 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
Section 7. Installation
7.9.8 Data Output: Two Intervals in One Data Table
CRBasic Example 33.
Two Data-Output Intervals in One Data Table
'This program example demonstrates the use of two time intervals in a data table. One time
'interval in a data table is the norm, but some applications require two.
'
'A table with two time intervals should be allocated memory as is done with a conditional table:
'rather than auto-allocate, set a fixed 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
'Declare Data Table
'
'Table is output on one of two intervals, depending on condition.
'Note the parenthesis around the TriggerVariable AND statements.
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
'Measure thermocouple
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 faster of
'the two data-table intervals.
If deltaT >= 3 Then
PortSet (4,true)
int_fast = true
int_slow = false
Else
PortSet (4,false)
int_fast = false
int_slow = true
EndIf
197
198
Section 7. Installation
'Call output tables
CallTable TwoInt
NextScan
EndProg
7.9.9 Data Output: Using Data Type Bool8
Variables used exclusively to store either True or False are usually declared As
BOOLEAN. When recorded in final-data memory, the state of Boolean variables is typically stored in BOOLEAN data type. BOOLEAN data type uses a fourbyte integer format. To conserve final-data memory or telecommunication band, you can use the BOOL8 data type. A BOOL8 is a one-byte value that holds eight bits of information (eight states with one bit per state). To store the same information using a 32 bit BOOLEAN data type, 256 bits are required (8 states *
32 bits per state).
When programming with BOOL8 data type, 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 CR1000 converts a LONG or FLOAT data type to BOOL8, only the least significant eight bits of the binary equivalent are used, i.e., only the binary representation of the decimal integer modulo divide
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 (CR1000 stores these bits in reverse order)
When datalogger support software
retrieves the BOOL8 value, it splits it apart into eight fields of -1 or 0 when storing to an ASCII file. Consequently, more memory is required for the ASCII file, but CR1000 memory is conserved.
The compact BOOL8 data type also uses less telecommunication band width when transmitted.
CRBasic example Programming with Bool8 and Bit-Shift Operators
programs the CR1000 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
Bit-Shift Example
Samples of the four public variables FlagsBool8(1),
FlagsBool8(2), FlagsBool8(3), and FlagsBool8(4) are stored in data table
Bool8Data as four one-byte values. However, as shown in figure Bool8 Data from Bit-Shift Example (Numeric Monitor)
when viewing the data table in a 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)
when datalogger support software
stores the data in an
ASCII file, it is stored as 32 columns of either -1 or 0, each column representing the state of an alarm. You can use variable aliasing
in the CRBasic program to make the data more understandable.
Figure 55. Alarms Toggled in Bit-Shift Example
Section 7. Installation
Figure 56. Bool8 Data from Bit-Shift Example (Numeric Monitor)
199
Section 7. Installation
Figure 57. Bool8 Data from Bit-Shift Example (PC Data File)
200
CRBasic Example 34.
Programming with Bool8 and a Bit-Shift Operator
'This program example demonstrates the use of the Bool8 data type and the ">>" 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
Section 7. Installation
'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 ' &b1
If Alarm(2) Then Flags = Flags OR &h2 ' &b10
If Alarm(3) Then Flags = Flags OR &h4 ' &b100
If Alarm(4) Then Flags = Flags OR &h8 ' &b1000
If Alarm(5) Then Flags = Flags OR &h10 ' &b10000
If Alarm(6) Then Flags = Flags OR &h20 ' &b100000
If Alarm(7) Then Flags = Flags OR &h40 ' &b1000000
If Alarm(8) Then Flags = Flags OR &h80 ' &b10000000
If Alarm(9) Then Flags = Flags OR &h100 ' &b100000000
If Alarm(10) Then Flags = Flags OR &h200 ' &b1000000000
If Alarm(11) Then Flags = Flags OR &h400 ' &b10000000000
If Alarm(12) Then Flags = Flags OR &h800 ' &b100000000000
If Alarm(13) Then Flags = Flags OR &h1000 ' &b1000000000000
If Alarm(14) Then Flags = Flags OR &h2000 ' &b10000000000000
If Alarm(15) Then Flags = Flags OR &h4000 ' &b100000000000000
If Alarm(16) Then Flags = Flags OR &h8000 ' &b1000000000000000
If Alarm(17) Then Flags = Flags OR &h10000 ' &b10000000000000000
If Alarm(18) Then Flags = Flags OR &h20000 ' &b100000000000000000
If Alarm(19) Then Flags = Flags OR &h40000 ' &b1000000000000000000
If Alarm(20) Then Flags = Flags OR &h80000 ' &b10000000000000000000
If Alarm(21) Then Flags = Flags OR &h100000 ' &b100000000000000000000
If Alarm(22) Then Flags = Flags OR &h200000 ' &b1000000000000000000000
If Alarm(23) Then Flags = Flags OR &h400000 ' &b10000000000000000000000
If Alarm(24) Then Flags = Flags OR &h800000 ' &b100000000000000000000000
If Alarm(25) Then Flags = Flags OR &h1000000 ' &b1000000000000000000000000
If Alarm(26) Then Flags = Flags OR &h2000000 ' &b10000000000000000000000000
If Alarm(27) Then Flags = Flags OR &h4000000 ' &b100000000000000000000000000
If Alarm(28) Then Flags = Flags OR &h8000000 ' &b1000000000000000000000000000
If Alarm(29) Then Flags = Flags OR &h10000000 ' &b10000000000000000000000000000
If Alarm(30) Then Flags = Flags OR &h20000000 ' &b100000000000000000000000000000
If Alarm(31) Then Flags = Flags OR &h40000000 ' &b1000000000000000000000000000000
If Alarm(32) Then Flags = Flags OR &h80000000 '&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 OR bit in The result
'Flags Is Bin/Hex Is Is
'---------- ---------- ----------
' 0 0 0
' 0 1 0
' 1 0 0
' 1 1 1
201
202
Section 7. Installation
FlagsBool8(1) = Flags AND &HFF 'AND 1st 8 bits of "Flags" & 11111111
FlagsBool8(2) = (Flags >> 8) AND &HFF 'AND 2nd 8 bits of "Flags" & 11111111
FlagsBool8(3) = (Flags >> 16) AND &HFF 'AND 3rd 8 bits of "Flags" & 11111111
FlagsBool8(4) = (Flags >> 24) AND &HFF 'AND 4th 8 bits of "Flags" & 11111111
CallTable (Bool8Data)
NextScan
EndProg
7.9.10 Data Output: Using Data Type NSEC
Data of NSEC type reside only in final-data memory. A datum of NSEC consists of eight bytes — four bytes of seconds since 1990 and four bytes of nanoseconds into the second. Nsec is declared in the Data Type parameter in final-data memory output-processing instructions
It is used in the following applications:
• Placing a time stamp in a second position in a record.
• Accessing a time stamp from a data table and subsequently storing it as part of a larger data table. Maximum(), Minimum(), and FileTime() instructions produce a time stamp 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 time stamp from another datalogger in a PakBus network.
7.9.10.1 NSEC Options
NSEC is used in a CRBasic program one of the following ways. In all cases, the time variable is only sampled with a Sample() instruction, Reps = 1.
1. Time variable is declared 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 memory is a standard time stamp. See CRBasic example NSEC — One Element Time Array
2. 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 — Two Element Time Array
3. 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 — Seven and Nine Element Time Arrays
CRBasic example NSEC — Convert Time Stamp to Universal Time
shows one of several practical uses of the NSEC data type.
Section 7. Installation
CRBasic Example 35.
NSEC — One Element Time Array
'This program example demonstrates the use of NSEC data type to determine seconds since
'00:00:00 1 January 1990. 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
CRBasic Example 36.
NSEC — Two Element Time Array
'This program example demonstrates how to determine seconds since 00:00:00 1 January 1990,
'and microseconds into the last second. This is done by retrieving variable TimeStamp into
'variables TimeOfMaxVar(1) and TimeOfMaxVar(2). Because the variable TimeOfMaxVar() is
'dimensioned to 2, NSEC assumes the following:
' 1) TimeOfMaxVar(1) = seconds since 00:00:00 1 January 1990, and
' 2) TimeOfMaxVar(2) = microseconds 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
203
204
Section 7. Installation
'Program
BeginProg
Scan (1,Sec,0,0)
PanelTemp (PTempC,250)
MaxVar = FirstTable.PTempC_Max
TimeOfMaxVar = FirstTable.PTempC_TMx
CallTable FirstTable
CallTable SecondTable
NextScan
EndProg
CRBasic Example 37.
NSEC — Seven and Nine Element Time Arrays
'This program example demonstrates the use of NSEC data type to sample a time stamp into
'final-data memory using an array dimensioned to 7 or 9.
'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 '(or Float)
Public rTime2(7) As Long '(or Float)
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
Section 7. Installation
CRBasic Example 38.
NSEC —Convert Timestamp to Universal Time
'This program example demonstrates the use of NSEC data type to convert a data time stamp
'to universal time.
'
'Application: the CR1000 needs to display Universal Time (UT) in human readable
'string forms. The CR1000 can calculate UT by adding the appropriate offset to a
'standard time stamp. Adding offsets requires the time stamp 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 memory.
' 3) sample it back into string form using the TableName.FieldName notation.
'Declarations
Public UTTime(3) As String * 30
Dim TimeLong As Long
Const UTC_Offset = -7 * 3600 '-7 hours offset (as seconds)
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. Note that TimeStamp is a
' system variable, so it is not declared.
TimeLong = Public.TimeStamp(1,1) + UTC_Offset
'2) Store it into a type NSEC datum in final-data memory.
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.9.11 Data Output: Writing High-Frequency Data to Memory
Cards
Related Topics:
• Memory Card (CRD: Drive) — Overview
• Memory Card (CRD: Drive) — Details
• Memory Cards and Record Numbers
• Data Output: Writing High-Frequency Data to Memory Cards
• File-System Errors
• Data Storage Devices — List
205
206
Section 7. Installation
• Data-File Format Examples
• Data Storage Drives Table
The best method for writing high-frequency time-series data to memory cards, especially in high-speed measurement applications, is usually to use the
TableFile() instruction with Option 64. It supports 16 GB or smaller memory cards and permits smaller and variable file sizes.
7.9.11.1 TableFile() with Option 64
Option 64 has been added as a format option for the CRBasic instruction
TableFile(). It combines the speed and efficiency of the CardOut() instruction with the flexibility of the TableFile() instruction. Memory cards 1 up to 16 GB are supported. TableFile() is a CRBasic instruction that creates a file from a data table in datalogger CPU memory. Option 64 directs that the file be written in
TOB3 format exclusively to the CRD: drive 2 .
Syntax for the TableFile() instruction is as follows:
TableFile (FileName, Option, MaxFiles, NumRecs/
TimeIntoInterval, Interval, Units, OutStat, LastFileName) where Option is given the argument of 64. Refer to CRBasic Editor Help detailed description of each parameter.
3 for a
Note The CRD: drive (the drive designation for the optional memory card) is the only drive that is allowed for use with Option 64.
Note Memory cards add a measure of security in guarding against data loss.
However, no system is infallible. Finding a functioning memory card in the mud after a moose has trampled your weather station or a tractor has run an offset disk over your soil-moisture station may be difficult. The best rule is to collect data from the CR1000 only as often as you can afford to lose the data. In other words, if you can afford to lose a months worth of data, you can afford to collect the data only once a month.
1
Memory cards for the CR1000 are the compact flash (CF) type.
2
The CRD: drive is a memory drive created when a memory card is connected into the CR1000 through the appropriate peripheral device. The CR1000 is adapted for CF use by addition of the
NL115 or CFM100 modules. NL115 and CFM100 modules are available at additional cost from
Campbell Scientific.
3
CRBasic Editor is included in Campbell Scientific datalogger support software
suites
LoggerNet, PC400, and RTDAQ.
7.9.11.2 TableFile() with Option 64 Replaces CardOut()
TableFile() with Option 64 has several advantages over CardOut() when used in most applications. These include:
• Allowing multiple small files to be written from the same data table so that storage for a single table can exceed 2 GB. TableFile() controls the size of its output files through the NumRecs, TimeIntoInterval, and Interval parameters.
• Faster compile times when small file sizes are specified.
Section 7. Installation
• Easy retrieval of closed files with File Control
utility, FTP, or e-mail.
7.9.11.3 TableFile() with Option 64 Programming
As shown in the following CRBasic code snip, the TableFile() instruction must be placed inside a DataTable() / EndTable declaration. The TableFile() instruction writes data to the memory card based on user-specified parameters that determine the file size based on number of records to store, or an interval over which to store data. The resulting file is saved with a suffix of X.dat, where X is a number that is incremented each time a new file is written.
DataTable (TableName,TriggerVariable,Size)
TableFile (FileName...LastFileName)
'Output processing instructions go here
EndTable
For example, in micrometeorological applications, TableFile() with Option 64 is used to create a new high-frequency data file once per day. The size of the file created is a function of the datalogger scan frequency and the number of variables saved to the data table. For a typical eddy-covariance station, this daily file is about 50 MB large (10 Hz scan frequency and 15 IEEE4 data points). CRBasic example Using TableFile() with Option 64 with CF Cards
is an example of a micromet application.
CRBasic Example 39.
Using TableFile() with Option 64 with CF Card
'This program example demonstrates the use of TableFile() with Option 64 in micrometeorology
'eddy-covariance programs. The file naming scheme used in instruction TableFile() is
'customized using variables, constants, and text.
Public Sensor(10)
DataTable (Ts_data,TRUE,-1)
'TableFile("filename",Option,MaxFiles,NumRec/TimeIntoInterval,Interval,Units,
' OutStat,LastFileName)
TableFile ("CRD:"&Status.SerialNumber(1,1)&".ts_data_",64,-1,0,1,Day,0,0)
Sample (10,sensor(1),IEEE4)
EndTable
BeginProg
Scan (100,mSec,100,0)
'Measurement instructions go here.
'Processing instructions go here.
CallTable ts_data
NextScan
EndProg
7.9.11.4 Converting TOB3 Files with CardConvert
The TOB3 format that is used to write data to memory cards saves disk space.
However, the resulting binary files must be converted to another format to be read or used by other programs. The CardConvert software, included in Campbell
Scientific datalogger support software
will convert data files from one format to another. CardConvert Help has more details.
207
208
Section 7. Installation
7.9.11.5 TableFile() with Option 64 Q & A
Q: How does Option 64 differ from other TableFile() options?
A: Pre-allocation of memory combines with TOB3 data format to give Option 64 two principal advantages over other TableFile() options. These are:
• increased runtime write performance
• short card eject times
Option 64 is unique among table file options in that it pre-allocates enough memory on the memory card to store an interval amount of data 1 . Pre-allocation allows data to be continuously and more quickly written to the card in ≈1 KB blocks. TOB3 binary format copies data directly from CPU memory to the memory card without format conversion, lending additional speed and efficiency to the data storage process.
Note Pre-allocation of memory card files significantly increases run time write performance. It also reduces the risk of file corruption that can occur as a result of power loss or incorrect card removal.
Note To avoid data corruption and loss, memory card removal must always be initiated by pressing the Initiate Removal button on the face of the NL115 or
CFM100 modules. The card must be ejected only after the Status light shows a solid green.
Q: Why are individual files limited to 2 GB?
A: In common with many other systems, the datalogger natively supports signed four-byte integers. This data type can represent a number as large as 231, or in terms of bytes, roughly 2 GB. This is the maximum file length that can be represented in the datalogger directory table.
Q: Why does a large card cause long program compile times?
A: Program compile times increase with card and file sizes. As the datalogger boots up, the card must be searched to determine space available for data storage.
In addition, for tables that are created by TableFile() with Option 64, an empty file that is large enough to hold all of the specified records must be created (i.e., memory is pre-allocated). When using TableFile() with Option 64, program compile times can be lessened by reducing the number of records or data-output interval that will be included in each file. For example, if the maximum file size specified is 2 GB, the datalogger must scan through and pre-allocate 2 GB of CF card memory. However, if smaller files are specified, then compile times are reduced because the datalogger is only required to scan through enough memory to pre-allocate memory for the smaller file.
Q: Why does a freshly formatted card cause long compile times?
A: Program compile times take longer with freshly formatted cards because the cards use a FAT32 system (File Allocation Table with 32 table element bits) to be compatible with PCs. To avoid long compile times on a freshly formatted card, format the card on a PC, then copy a small file to the card, and then delete the file
(while still in the PC). Copying the file to the freshly formatted card forces the
Section 7. Installation
PC to update the info sector. The PC is much faster than the datalogger at updating the info sector.
FAT32 uses an “info sector” to store the free cluster information. This info sector prevents the need to repeatedly traverse the FAT for the bytes free information.
After a card is formatted by a PC, the info sector is not automatically updated.
Therefore, when the datalogger boots up, it must determine the bytes available on the card prior to loading the Status table. Traversing the entire FAT of a 16 GB card can take up to 30 minutes or more. However, subsequent compile times are much shorter because the info sector is used to update the bytes free information.
Q: Which memory card should I use?
A: Campbell Scientific recommends and supports only the use of FMJ brand CF cards. These cards are industrial-grade and have passed Campbell Scientific hardware testing. Following are listed advantages these cards have over less expensive commercial-grade cards:
• less susceptible to failure and data loss
• match the datalogger operating temperature range
• faster read/write times
• better vibration and shock resistance
• longer life spans (more read/write cycles)
Note More CF card recommendations are presented in the application note, CF
Card Information, which is available at www.campbellsci.com.
Q: Can closed files be retrieved remotely?
A: Yes. Closed files can be retrieved using the Retrieve function in the datalogger support software File Control
utility, FTP, HTTP, or e-mail.
Although open files will appear in the CRD: drive directory, do not attempt to retrieve open files. Doing so may corrupt the file and result in data loss. Smaller files typically transmit more quickly and more reliably than large files.
Q: Can data be accessed?
A: Yes. Data in the open or most recent file can be collected using the Collect or
Custom Collect utilities in LoggerNet, PC400, or RTDAQ. Data can also be viewed using datalogger support software or accessed through the datalogger using data table access syntax such as TableName.FieldName (see CRBasic
Editor Help). Once a file is closed, data can be accessed only by first retrieving the file, as discussed previously, and processing the file using CardConvert software.
Q: What happens when a card is inserted?
A: When a card is inserted, whether it is a new card or the previously used card, a new file is always created.
Q: What does a power cycle or program restart do?
A: Each time the program starts, whether by user control, power cycle, or a watchdog, TableFile() with Option 64 will create a new file.
209
210
Section 7. Installation
Q: What happens when a card is filled?
A: If the memory card fills, new data are written over oldest data. A card must be exchanged before it fills, or the oldest data will be overwritten by incoming new records and lost. During the card exchange, once the old card is removed, the new card must be inserted before the data table in datalogger CPU memory rings 2 , or data will be overwritten and lost. For example, consider an application wherein the data table in datalogger CPU memory has a capacity for about 45 minutes of data 3 . The exchange must take place anytime before the 45 minutes expire. If the exchange is delayed by an additional 5 minutes, 5 minutes of data at the beginning of the last 45 minute interval (since it is the oldest data) will be overwritten in
CPU memory before transfer to the new card and lost.
1
Other options of TableFile() do not pre-allocate memory, so they should be avoided when collecting high-frequency time-series data. More information is available in CRBasic Editor Help.
2
"rings": the datalogger has a ring memory. In other words, once filled, rather than stopping when full, oldest data are overwritten by new data. In this context, "rings" designates when new data begins to overwrite the oldest data.
3
CPU data table fill times can be confirmed in the datalogger Status table.
7.9.12 Field Calibration — Details
Related Topics:
• Field Calibration — Overview
• Field Calibration — Details
Calibration increases accuracy of a sensor by adjusting or correcting its output to match independently verified quantities. Adjusting a sensor output signal is preferred, but not always possible or practical. By using the FieldCal() or
FieldCalStrain() instruction, a linear sensor output can be corrected in the
CR1000 after the measurement by adjusting the multiplier and offset.
When included in the CRBasic program, FieldCal() and FieldCalStrain() can be used through a datalogger support software calibration wizard
Help for using the wizard is available in the software.
A more arcane procedure that does not require a PC can be executed though the
CR1000KD Keyboard / Display. If you do not have a keyboard, the same procedure can be done in a numeric monitor
Numeric monitor screen captures are used in the following procedures. Running through these procedures will give you a foundation for how field calibration works, but use of the calibration wizard for routine work is recommended.
Syntax of FieldCal() and FieldCalStrain() is summarized in the section
Calibration Functions
More detail is available in CRBasic Editor Help.
7.9.12.1 Field Calibration CAL Files
Calibration data are stored automatically, usually on the CR1000 CPU: drive, in
CAL (.cal) files. These data become the source for calibration factors when requested by the LoadFieldCal() instruction. A file is created automatically on the same CR1000 memory drive and given the same name as the program that creates and uses it. For example, the CRBasic program file CPU:MyProg.cr1 generates the CAL file CPU:MyProg.cal.
Section 7. Installation
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 with new calibration factors factors. A calibration history is recorded only if the CRBasic program creates a data table
with the
SampleFieldCal() instruction.
Note CAL files created by FieldCal() and FieldCalStrain() differ from files created by the CalFile() instruction (File Management
.
7.9.12.2 Field Calibration Programming
Field-calibration functionality is included in a CRBasic program through either of the following instructions:
• FieldCal() — the principal instruction used for non-strain gage type sensors.
For introductory purposes, use one FieldCal() instruction and a unique set of
FieldCal() variables for each sensor. For more advanced applications, use variable arrays.
• FieldCalStrain() — the principal instruction used for strain gages measuring microstrain. Use one FieldCalStrain() instruction and a unique set of
FieldCalStrain() variables for each sensor. For more advanced applications, use variable arrays.
FieldCal() and FieldCalStrain() use the following 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).
FieldCal() and FieldCalStrain() use the following reserved Boolean variable:
• NewFieldCal — a reserved Boolean variable under CR1000 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.
7.9.12.3 Field Calibration Wizard Overview
The LoggerNet and RTDAQ field calibration wizards step you through the procedure by performing the mode-variable changes and measurements automatically. You set the sensor to known values and input those values into the wizard.
When a program with FieldCal() or FieldCalStrain() is running, select
LoggerNet or RTDAQ | Datalogger | Calibration Wizard to start the wizard. A list of measurements used is shown.
For more information on using the calibration wizard, consult LoggerNet or
RTDAQ Help.
7.9.12.4 Field Calibration Numeric Monitor Procedures
Manual field calibration through the numeric monitor (in lieu of a CR1000KD
Keyboard / Display is presented here to introduce the use and function of the
FieldCal() and FieldCalStrain() instructions. This section is not a
211
212
Section 7. Installation comprehensive treatment of field-calibration topics. The most comprehensive resource to date covering use of FieldCal() and FieldCalStrain() is RTDAQ software documentation available at www.campbellsci.com
http://www.campbellsci.com. Be aware of the following precautions:
• The CR1000 does not check for out-of-bounds values in mode variables.
• Valid mode variable entries are 1 or 4.
Before, during, and after calibration, one of the following codes will be stored in the CalMode variable:
Table 28. FieldCal() Codes
Value Returned
-1
-2
-3
0
1
2
3
4
5
6
State
Error in the calibration setup
Multiplier set to 0 or NAN; measurement = NAN
Reps is set to a value other than 1 or the size of MeasureVar
No calibration
Ready to calculate (KnownVar holds the first of a two point calibration)
Working
First point done (only applicable for two point calibrations)
Ready to calculate (KnownVar holds the second of a two-point calibration)
Working (only applicable for two point calibrations)
Calibration complete
7.9.12.4.1 One-Point Calibrations (Zero or Offset)
Zero operation applies an offset of equal magnitude but opposite sign. For example, when performing a zeroing operation on a measurement of 15.3, the value –15.3 will be added to subsequent measurements.
Offset operation applies an offset of equal magnitude and same sign. For example, when performing an offset operation on a measurement of 15.3, the value 15.3 will be added to subsequent measurements.
See FieldCal() Zero or Tare (Opt 0) Example
and FieldCal() Offset (Opt 1)
Example
for demonstration programs:
1. Use a separate FieldCal() instruction and variables for each sensor to be calibrated. In the CRBasic program , put the FieldCal() instruction immediately below the associated measurement instruction.
2. Set 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.
Section 7. Installation
7.9.12.4.2 Two-Point Calibrations (gain and offset)
Use this two-point calibration procedure to adjust multipliers (slopes) and offsets
(y intercepts). See FieldCal() Slope and Offset (Opt 2) Example
and
FieldCal() Slope (Opt 3) Example
for demonstration programs:
1. Use a separate FieldCal() instruction and separate variables for each sensor to be calibrated.
2. Ensure mode variable = 0 or 6 before starting. a. If Mode > 0 and ≠ 6, calibration is in progress. b. If Mode < 0, 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. Mode = 2 (automatic) during the first point calibration. b. Mode = 3 (automatic) when the first point is completed.
6. Place sensor into second known point condition.
7. Set KnownVar variable to second known point.
8. Set Mode = 4 to start second part of calibration. a. Mode = 5 (automatic) during second point calibration. b. Mode = 6 (automatic) when calibration is complete.
7.9.12.4.3 Zero Basis Point Calibration
Zero-basis calibration ( FieldCal() instruction Option 4) is designed for use with static vibrating-wire measurements. It loads values into zero-point variables to track conditions at the time of the zero calibration. See FieldCal() Zero
Basis (Opt 4) Example
for a demonstration program.
7.9.12.5 Field Calibration Examples
FieldCal() has the following calibration options:
• Zero
• Offset
• Two-point slope and offset
• Two-point slope only
• Zero basis (designed for use with static vibrating-wire measurements)
These demonstration programs are provided as an aid in becoming familiar with the FieldCal() features at a test bench without actual sensors. For the purpose of the demonstration, sensor signals are simulated by CR1000 terminals configured for excitation. To reset tests, use the support software File Control
menu commands to delete .cal files, and then send the demonstration program again to the CR1000. Term equivalents are as follows:
"offset" = "y- intercept" = "zero"
"multiplier" = "slope" = "gain"
213
214
Section 7. Installation
7.9.12.5.1 FieldCal() Zero or Tare (Opt 0) Example
Most CRBasic measurement instructions have a multiplier and offset parameter.
FieldCal() Option 0 adjusts the offset argument such that the output of the sensor being calibrated is set to the value of the FieldCal() KnownVar parameter, which is set to 0. Subsequent measurements have the same offset subtracted. Option 0 does not affect the multiplier argument.
Example 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. To step through the example, use the CR1000KD
Keyboard Display or software numeric monitor
to change variable values as directed.
Table 29. Calibration Report for Relative Humidity Sensor
CRBasic Variable
SimulatedRHSignal output
KnownRH (desiccated chamber)
RHMultiplier
RHOffset
RH
At Deployment
100 mV
0 %
0.05 % / mV
-5 %
0 %
At 30-Day Service
105 mV
0 %
0.05 % / mV
-5.25 %
0 %
1. Send CRBasic example FieldCal() Zero
to the CR1000. A terminal configured for excitation has been programmed to simulate a sensor output.
2. To place the simulated RH sensor in a simulated-calibration condition (in the field it would be placed in a desiccated chamber), place a jumper wire between terminals VX1 and SE1. The following variables are preset by the program:
SimulatedRHSignal = 100, KnownRH = 0.
3. To start the 'calibration', set variable CalMode = 1. When CalMode increments to 6, zero calibration is complete. Calibrated RHOffset will equal -5% at this stage of this example.
4. To continue this example and simulate a zero-drift condition, set variable
SimulatedRHSignal = 105.
5. To simulate conditions for a 30-day-service calibration, again with desiccated chamber conditions, keep variable KnownRH = 0.0. Set variable CalMode =
1 to start calibration. When CalMode increments to 6, simulated 30-dayservice zero calibration is complete. Calibrated RHOffset will equal -5.2 %.
Section 7. Installation
CRBasic Example 40.
FieldCal() Zero
'This program example demonstrates the use of FieldCal() in calculating and applying a zero
'calibration. A zero calibration measures the signal magnitude of a sensor in a known zero
'condition and calculates the negative magnitude to use as an offset in subsequent
'measurements. It does not affect the multiplier.
'
'This program demonstrates the zero calibration with the following procedure:
' -- Simulate a signal from a relative-humidity sensor.
' -- Measure the 'sensor' signal.
' -- Calculate and apply a zero calibration.
'You can set up the simulation by loading this program into the CR1000 and interconnecting
'the following terminals with a jumper wire to simulate the relative-humidity sensor signal
'as follows:
' Vx1 --- SE 1
'For the simulation, the initial 'sensor' signal is set automatically. Start the zero routine
'by setting variable CalMode = 1. When CalMode = 6 (will occur automatically after 10
'measurements), the routine is complete. Note the new value in variable RHOffset. Now
'enter the following millivolt value as the simulated sensor signal and note how the new
'offset is added to the measurement:
' SimulatedRHSignal = 1000
'NOTE: This program places a .cal file on the CPU: drive of the CR1000. The .cal file must
'be erased to reset the demonstration.
'DECLARE SIMULATED SIGNAL VARIABLE AND SET INITIAL MILLIVOLT SIGNAL MAGNITUDE
Public SimulatedRHSignal = 100
'DECLARE CALIBRATION STANDARD VARIABLE AND SET PERCENT RH MAGNITUDE
Public KnownRH = 0
'DECLARE MEASUREMENT RESULT VARIABLE.
Public RH
'DECLARE OFFSET RESULT VARIABLE
Public RHOffset
'DECLARE VARIABLE FOR FieldCal() CONTROL
Public CalMode
'DECLARE DATA TABLE FOR RETRIEVABLE CALIBRATION RESULTS
DataTable (CalHist,NewFieldCal,200)
SampleFieldCal
EndTable
BeginProg
'LOAD CALIBRATION CONSTANTS FROM FILE CPU:CALHIST.CAL
'Effective after the zero calibration procedure (when variable CalMode = 6)
LoadFieldCal (true)
215
216
Section 7. Installation
Scan (100,mSec,0,0)
'SIMULATE SIGNAL THEN MAKE THE MEASUREMENT
'Zero calibration is applied when variable CalMode = 6
ExciteV (Vx1,SimulatedRHSignal,0)
VoltSE (RH,1,mV2500,1,1,0,250,0.05,RHOffset)
'PERFORM A ZERO CALIBRATION.
'Start by setting variable CalMode = 1. Finished when variable CalMode = 6.
'FieldCal(Function, MeasureVar, Reps, MultVar, OffsetVar, Mode, KnownVar, Index, Avg)
FieldCal (0,RH,1,0,RHOffset,CalMode,KnownRH,1,30)
'If there was a calibration, store calibration values into data table CalHist
CallTable (CalHist)
NextScan
EndProg
7.9.12.5.2 FieldCal() Offset (Opt 1) Example
Most CRBasic measurement instructions have a multiplier and offset parameter.
FieldCal() Option 1 adjusts the offset argument such that the output of the sensor being calibrated is set to the magnitude of the FieldCal() KnownVar parameter.
Subsequent measurements have the same offset added. Option 0 does not affect the multiplier argument. Option 0 does not affect the multiplier argument.
Example 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 30. Calibration Report for Salinity Sensor
CRBasic Variable At Deployment
SimulatedSalinitySignal output 1350 mV
At Seven-Day Service
1345 mV
KnownSalintiy (standard solution)
30 mg/l 30 mg/l
SalinityMultiplier
SalinityOffset
Salinity reading
0.05 mg/l/mV
-37.50 mg/l
30 mg/l
0.05 mg/l/mV
-37.23 mg/l
30 mg/l
1. Send CRBasic example FieldCal() Offset
to the CR1000. A terminal configured for excitation has been programmed to simulate a sensor output.
2. To simulate the salinity sensor in a simulated-calibration condition, (in the field it would be placed in a 30 mg/l standard solution), place a jumper wire between terminals VX1 and SE1. The following variables are preset by the program: SimulatedSalinitySignal = 1350, KnownSalinity = 30.
3. To start a simulated calibration, set variable CalMode = 1. When CalMode increments to 6, offset calibration is complete. The calibrated offset will equal
-37.48 mg/l.
4. To continue this example and simulate an offset-drift condition, set variable
SimulatedSalinitySignal = 1345.
Section 7. Installation
5. To simulate seven-day-service calibration conditions (30 mg/l standard solution), the variable KnownSalinity remains at 30.0. Change the value in variable CalMode to 1 to start the calibration. When CalMode increments to 6, the seven-day-service offset calibration is complete. Calibrated offset will equal -37.23 mg/l.
CRBasic Example 41.
FieldCal() Offset
'This program example demonstrates the use of FieldCal() in calculating and applying an
'offset calibration. An offset calibration compares the signal magnitude of a sensor to a
'known standard and calculates an offset to adjust the sensor output to the known value.
'The offset is then used to adjust subsequent measurements.
'This program demonstrates the offset calibration with the following procedure:
' -- Simulate a signal from a salinity sensor.
' -- Measure the 'sensor' signal.
' -- Calculate and apply an offset.
'
'You can set up the simulation by loading this program into the CR1000 and interconnecting the
'following terminals with a jumper wire to simulate the salinity sensor signal as follows:
' Vx1 --- SE 1
'For the simulation, the value of the calibration standard and the initial 'sensor' signal
'are set automatically. Start the calibration routine by setting variable CalMode = 1. When
'CalMode = 6 (will occur automatically after 10 measurements), the routine is complete.
'Note the new value in variable SalinityOffset. Now enter the following millivolt value as
'the simulated sensor signal and note how the new offset is added to the measurement:
' SimulatedSalinitySignal = 1345
'NOTE: This program places a .cal file on the CPU: drive of the CR1000. The .cal file must
'be erased to reset the demonstration.
'DECLARE SIMULATED SIGNAL VARIABLE AND SET INITIAL MAGNITUDE
Public SimulatedSalinitySignal = 1350 'mg/l
'DECLARE CALIBRATION STANDARD VARIABLE AND SET MAGNITUDE
Public KnownSalinity = 30 'mg/l
'DECLARE MEASUREMENT RESULT VARIABLE.
Public Salinity
'DECLARE OFFSET RESULT VARIABLE
Public SalinityOffset
'DECLARE VARIABLE FOR FieldCal() CONTROL
Public CalMode
'DECLARE DATA TABLE FOR RETRIEVABLE CALIBRATION RESULTS
DataTable (CalHist,NewFieldCal,200)
SampleFieldCal
EndTable
217
218
Section 7. Installation
BeginProg
'LOAD CALIBRATION CONSTANTS FROM FILE CPU:CALHIST.CAL
'Effective after the zero calibration procedure (when variable CalMode = 6)
LoadFieldCal (true)
Scan (100,mSec,0,0)
'SIMULATE SIGNAL THEN MAKE THE MEASUREMENT
'Zero calibration is applied when variable CalMode = 6
ExciteV (Vx1,SimulatedSalinitySignal,0)
VoltSE (Salinity,1,mV2500,1,1,0,250,0.05,SalinityOffset)
'PERFORM AN OFFSET CALIBRATION.
'Start by setting variable CalMode = 1. Finished when variable CalMode = 6.
'FieldCal(Function, MeasureVar, Reps, MultVar, OffsetVar, Mode, KnownVar, Index, Avg)
FieldCal (1,Salinity,1,0,SalinityOffset,CalMode,KnownSalinity,1,30)
'If there was a calibration, store calibration values into data table CalHist
CallTable (CalHist)
NextScan
EndProg
7.9.12.5.3 FieldCal() Slope and Offset (Opt 2) Example
Most CRBasic measurement instructions have a multiplier and offset parameter.
FieldCal() Option 2 adjusts the multiplier and offset arguments such that the output of the sensor being calibrated is set to a value consistent with the linear relationship that intersects two known points sequentially entered in the
FieldCal() KnownVar parameter. Subsequent measurements are scaled with the same multiplier and offset.
Example 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 31. Calibration Report for Flow Meter
CRBasic Variable
SimulatedFlowSignal
KnownFlow
SimulatedFlowSignal
KnownFlow
FlowMultiplier
FlowOffset
At Deployment
300 mV
30 L/s
550 mV
10 L/s
-0.0799 L/s/mV
53.90 L
At Seven-Day Service
285 mV
30 L/s
522 mV
10 L/s
-0.0841 L/s/mV
53.92 L
1. Send CRBasic example FieldCal() Two-Point Slope and Offset
to the
CR1000.
2. To place the simulated flow sensor in a simulated calibration condition (in the field a real sensor would be placed in a condition of know flow), place a
Section 7. Installation jumper wire between terminals VX1 and SE1.
3. Perform the simulated deployment calibration as follows: a. For the first point, set variable SimulatedFlowSignal = 300. Set variable
KnownFlow = 30.0. b. Start the calibration by setting variable CalMode = 1. c. When CalMode increments to 3, for the second point, set variable
SimulatedFlowSignal = 550. Set variable KnownFlow = 10. d. Resume the deployment calibration by setting variable CalMode = 4
4. When variable CalMode increments to 6, the deployment calibration is complete. Calibrated multiplier is -0.08; calibrated offset is 53.9.
5. To continue this example, suppose the simulated sensor multiplier and offset drift. Simulate a seven-day service calibration to correct the drift as follows: a. Set variable SimulatedFlowSignal = 285. Set variable KnownFlow =
30.0. b. Start the seven-day service calibration by setting variable CalMode = 1. c. When CalMode increments to 3, set variable SimulatedFlowSignal = 522.
Set variable KnownFlow = 10. d. Resume the calibration by setting variable CalMode = 4
6. When variable CalMode increments to 6, the calibration is complete. The corrected multiplier is -0.08; offset is 53.9.
CRBasic Example 42.
FieldCal() Two-Point Slope and Offset
'This program example demonstrates the use of FieldCal() in calculating and applying a
'multiplier and offset calibration. A multiplier and offset calibration compares signal
'magnitudes of a sensor to known standards. The calculated multiplier and offset scale the
'reported magnitude of the sensor to a value consistent with the linear relationship that
'intersects known points sequentially entered in to the FieldCal() KnownVar parameter.
'Subsequent measurements are scaled by the new multiplier and offset.
'This program demonstrates the multiplier and offset calibration with the following procedure:
' -- Simulate a signal from a flow sensor.
' -- Measure the 'sensor' signal.
' -- Calculate and apply a multiplier and offset.
'You can set up the simulation by loading this program into the CR1000 and interconnecting
'the following terminals with a jumper wire to simulate a flow sensor signal as follows:
' Vx1 --- SE 1
'For the simulation, the value of the calibration standard and the initial 'sensor' signal
'are set automatically. Start the multiplier-and-offset routine by setting variable
'CalMode = 1. The value in CalMode will increment automatically. When CalMode = 3, set
'variables SimulatedFlowSignal = 550 and KnownFlow = 10, then set CalMode = 4. CalMode
'will again increment automatically. When CalMode = 6 (occurs automatically after 10
219
220
Section 7. Installation
'measurements), the routine is complete. Note the new values in variables FlowMultiplier and
'FlowOffest. Now enter a new value in the simulated sensor signal as follows and note
'how the new multiplier and offset scale the measurement:
' SimulatedFlowSignal = 1000
'NOTE: This program places a .cal file on the CPU: drive of the CR1000. The .cal file must
'be erased to reset the demonstration.
'DECLARE SIMULATED SIGNAL VARIABLE AND SET INITIAL MAGNITUDE
Public SimulatedFlowSignal = 300 'Excitation mV, second setting is 550
'DECLARE CALIBRATION STANDARD VARIABLE AND SET MAGNITUDE
Public KnownFlow = 30 'Known flow, second setting is 10
'DECLARE MEASUREMENT RESULT VARIABLE.
Public Flow
'DECLARE MULTIPLIER AND OFFSET RESULT VARIABLES AND SET INITIAL MAGNITUDES
Public FlowMultiplier = 1
Public FlowOffset = 0
'DECLARE VARIABLE FOR FieldCal() CONTROL
Public CalMode
'DECLARE DATA TABLE FOR RETRIEVABLE CALIBRATION RESULTS
DataTable (CalHist,NewFieldCal,200)
SampleFieldCal
EndTable
BeginProg
'LOAD CALIBRATION CONSTANTS FROM FILE CPU:CALHIST.CAL
'Effective after the zero calibration procedure (when variable CalMode = 6)
LoadFieldCal (true)
Scan (100,mSec,0,0)
'SIMULATE SIGNAL THEN MAKE THE MEASUREMENT
'Multiplier calibration is applied when variable CalMode = 6
ExciteV (Vx1,SimulatedFlowSignal,0)
VoltSE (Flow,1,mV2500,1,1,0,250,FlowMultiplier,FlowOffset)
'PERFORM A MULTIPLIER CALIBRATION.
'Start by setting variable CalMode = 1. Finished when variable CalMode = 6.
'FieldCal(Function, MeasureVar, Reps, MultVar, OffsetVar, Mode, KnownVar, Index, Avg)
FieldCal (2,Flow,1,FlowMultiplier,FlowOffset,CalMode,KnownFlow,1,30)
'If there was a calibration, store it into a data table
CallTable (CalHist)
NextScan
EndProg
7.9.12.5.4 FieldCal() Slope (Opt 3) Example
Most CRBasic measurement instructions have a multiplier and offset parameter.
FieldCal() Option 3 adjusts the multiplier argument such that the output of the sensor being calibrated is set to a value consistent with the linear relationship that
Section 7. Installation intersects two known points sequentially entered in the FieldCal() KnownVar parameter. Subsequent measurements are scaled with the same multiplier.
FieldCal() Option 3 does not affect offset.
Some measurement applications do not require determination of offset.
Frequency analysis, for example, may only require relative data to characterize change.
Example Case: A soil-water sensor is to be used to detect a pulse of water moving through soil. A pulse of soil water can be detected with an offset, but sensitivity to the pulse is important, so an accurate multiplier is essential. To adjust the sensitivity of the sensor, two soil samples, with volumetric water contents of 10% and 35%, will provide two known points.
Table 32. Calibration Report for Water Content Sensor
CRBasic Variable
SimulatedWaterContentSignal
KnownWC
SimulatedWaterContentSignal
KnownWC
WCMultiplier
At Deployment
175 mV
10 %
700 mV
35 %
0.0476 %/mV
The following procedure sets the sensitivity of a simulated soil water-content sensor.
1. Send CRBasic example FieldCal() Multiplier
to the CR1000.
2. To simulate the soil-water sensor signal, place a jumper wire between terminals
VX1 and SE1.
3. Simulate deployment-calibration conditions in two stages as follows: a. Set variable SimulatedWaterContentSignal to 175. Set variable
KnownWC to 10.0. b. Start the calibration by setting variable CalMode = 1. c. When CalMode increments to 3, set variable
SimulatedWaterContentSignal to 700. Set variable KnownWC to 35. d. Resume the calibration by setting variable CalMode = 4
4. When variable CalMode increments to 6, the calibration is complete.
Calibrated multiplier is 0.0476.
CRBasic Example 43.
FieldCal() Multiplier
'This program example demonstrates the use of FieldCal() in calculating and applying a
'multiplier only calibration. A multiplier calibration compares the signal magnitude of a
'sensor to known standards. The calculated multiplier scales the reported magnitude of the
'sensor to a value consistent with the linear relationship that intersects known points
'sequentially entered in to the FieldCal() KnownVar parameter. Subsequent measurements are
'scaled by the multiplier.
221
222
Section 7. Installation
'This program demonstrates the multiplier calibration with the following procedure:
' -- Simulate a signal from a water content sensor.
' -- Measure the 'sensor' signal.
' -- Calculate and apply an offset.
'
'You can set up the simulation by loading this program into the CR1000 and interconnecting
'the following terminals with a jumper wire to simulate a water content sensor signal as
'follows:
' Vx1 --- SE 1
'For the simulation, the value of the calibration standard and the initial 'sensor' signal
'are set automatically. Start the multiplier routine by setting variable CalMode = 1. When
'CalMode = 6 (occurs automatically after 10 measurements), the routine is complete. Note the
'new value in variable WCMultiplier. Now enter a new value in the simulated sensor signal
'as follows and note how the new multiplier scales the measurement:
' SimulatedWaterContentSignal = 350
'NOTE: This program places a .cal file on the CPU: drive of the CR1000. The .cal file must
'be erased to reset the demonstration.
'DECLARE SIMULATED SIGNAL VARIABLE AND SET INITIAL MAGNITUDE
Public SimulatedWaterContentSignal = 175 'mV, second setting is 700 mV
'DECLARE CALIBRATION STANDARD VARIABLE AND SET MAGNITUDE
Public KnownWC = 10 '% by Volume, second setting is 35%
'DECLARE MEASUREMENT RESULT VARIABLE.
Public WC
'DECLARE MULTIPLIER RESULT VARIABLE AND SET INITIAL MAGNITUDE
Public WCMultiplier = 1
'DECLARE VARIABLE FOR FieldCal() CONTROL
Public CalMode
'DECLARE DATA TABLE FOR RETRIEVABLE CALIBRATION RESULTS
DataTable (CalHist,NewFieldCal,200)
SampleFieldCal
EndTable
BeginProg
'LOAD CALIBRATION CONSTANTS FROM FILE CPU:CALHIST.CAL
'Effective after the zero calibration procedure (when variable CalMode = 6)
LoadFieldCal (true)
Scan (100,mSec,0,0)
'SIMULATE SIGNAL THEN MAKE THE MEASUREMENT
'Multiplier calibration is applied when variable CalMode = 6
ExciteV( Vx1,SimulatedWaterContentSignal,0)
VoltSE (WC,1,mV2500,1,1,0,250,WCMultiplier,0)
Section 7. Installation
'PERFORM A MULTIPLIER CALIBRATION.
'Start by setting variable CalMode = 1. Finished when variable CalMode = 6.
'FieldCal(Function, MeasureVar, Reps, MultVar, OffsetVar, Mode, KnownVar, Index, Avg)
FieldCal (3,WC,1,WCMultiplier,0,CalMode,KnownWC,1,30)
'If there was a calibration, store it into data table CalHist
CallTable (CalHist)
NextScan
EndProg
7.9.12.5.5 FieldCal() Zero Basis (Opt 4) Example -- 8 10 30
Zero-basis calibration ( FieldCal() instruction Option 4) is designed for use in static vibrating-wire measurements. For more information, refer to these manuals available at www.campbellsci.com:
AVW200-Series Two-Channel VSPECT Vibrating-Wire Measurement Device
CR6 Measurement and Control Datalogger Operators Manual
7.9.12.6 Field Calibration Strain Examples
Related Topics:
• Strain Measurements — Overview
• Strain Measurements — Details
• FieldCalStrain() Examples
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 CR1000 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 (FieldCal()
Examples
) is typically used in non-microstrain applications.
Shunt calibration of strain-gage systems is common practice. However, the technique provides many opportunities for misapplication and misinterpretation.
This section is not intended to be a primer on shunt-calibration theory, but only to introduce use of the technique with the CR1000 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 using search terms such as 'micro-measurements', 'stress analysis', 'strain gages', 'calculator list', at: http://www.vishaypg.com
Campbell Scientific application engineers also have resources that may assist you with strain-gage applications.
7.9.12.6.1 Field Calibration Strain Examples
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
223
224
Section 7. Installation adjusted gage factor (GF adj
), 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 CR1000.
4. The zero function of FieldCalStrain() allows a particular strain to be set as an arbitrary zero, if desired. Zeroing is normally done after the shunt calibration.
Zero and shunt options can be combined ina single CRBasic program.
CRBasic example FieldCalStrain() Calibration
is provided to demonstrate use of FieldCalStrain() features. If a strain gage configured as shown in figure
Quarter-Bridge Strain-Gage with RC Resistor Shunt
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, use the support software File Control
menu to delete .cal files, and then send the demonstration program again to the CR1000.
Example 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 shuntresistor (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 CRBasic example FieldCalStrain() Calibration
as a program to a
CR1000 datalogger.
7.9.12.6.2 Field Calibration Strain Examples
CRBasic example FieldCalStrain() Calibration
is provided to demonstrate use of FieldCalStrain() features. If a strain gage configured as shown in figure
Quarter-Bridge Strain-Gage with RC Resistor Shunt
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, use the support software File Control
menu to delete .cal files, and then send the demonstration program again to the CR1000.
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 CRBasic example FieldCalStrain() Calibration
as a program to a
CR1000 datalogger.
Section 7. Installation
Figure 58. Quarter-Bridge Strain-Gage with RC Resistor Shunt
CRBasic Example 44.
FieldCalStrain() Calibration
'This program example demonstrates the use of the FieldCalStrain() instruction by measuring
'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
'//////////////////////////// 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)
225
226
Section 7. Installation
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
NextScan
EndProg
7.9.12.6.3 FieldCalStrain() Quarter-Bridge Shunt Example
With CRBasic example FieldCalStrain() Calibration
sent to the CR1000, and the strain gage stable, use the CR1000KD 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
Start
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 249000. As shown in figure Strain-Gage Shunt Calibration Finish
set Shunt_Mode to 4. When Shunt_Mode = 6, shunt calibration is complete.
Figure 59. Strain-Gage Shunt Calibration Start
Figure 60. Strain-Gage Shunt Calibration Finish
Section 7. Installation
7.9.12.6.4 FieldCalStrain() Quarter-Bridge Zero
Continuing from FieldCalStrain() Quarter-Bridge Shunt Example
keep the
249 kΩ resistor in place to simulate a strain. Using the CR1000KD Keyboard
Display or software numeric monitor, change the value in variable Zero_Mode to
1 to start the zero calibration as shown in figure Zero Procedure Start
When Zero_Mode increments to 6, zero calibration is complete as shown in figure Zero Procedure Finish
Figure 61. Zero Procedure Start
Figure 62. Zero Procedure Finish
227
228
Section 7. Installation
7.9.13 Measurement: Excite, Delay, Measure
This example demonstrates how to make voltage measurements that require excitation of controllable length prior to measurement. Overcoming the delay caused by a very long cable length on a sensor is a common application for this technique.
CRBasic Example 45.
Measurement with Excitation and Delay
'This program example demonstrates how to perform an excite/delay/measure operation.
'In this example, the system requires 1 s of excitation to stabilize before the sensors
'are measured. A single-ended measurement is made, and a separate differential measurement
'is made. To see this program in action, connect the following terminal pairs to simulate
'sensor connections:
' Vx1 ------ SE1
' Vx2 ------ DIFF 2 H
' DIFF 2 L ------ Ground Symbol
'
'With these connections made, variables VoltageSE and VoltageDiff will equal 2500 mV.
'Declare variables.
Public VoltageSE As Float
Public VoltageDIFF As Float
'Declare data table
DataTable (Voltage,True,-1)
Sample (1,VoltageSE,Float)
Sample (1,VoltageDIFF,Float)
EndTable
BeginProg
Scan (5,sec,0,0)
'Excite - delay 1 second - single-ended measurement:
ExciteV (Vx1,2500,0) '<<<<Note: Delay = 0
Delay (0,1000,mSec)
VoltSe (VoltageSE,1,mV5000,1,1,0,250,1.0,0)
'Excite - delay 1 second - differential measurement:
ExciteV (Vx2,2500,0) '<<<<Note: Delay = 0
Delay (0,1000,mSec)
VoltDiff (VoltageDIFF,1,mV5000,2,True,0,250,1.0,0)
'Write data to final-data memory
CallTable Voltage
NextScan
EndProg
Section 7. Installation
7.9.14 Measurement: Faster Analog Rates
Certain data acquisition applications require the CR1000 to make analog measurements at rates faster than once per second (> 1 Hz
). The CR1000 can make continuous measurements at rates up to 100 Hz, and bursts
of measurements at rates up to 2000 Hz. Following is a discussion of fast measurement programming techniques in association with VoltSE(), single-ended analog voltage measurement instruction. Techniques discussed can also be used with the following instructions:
VoltSE ()
VoltDiff ()
TCDiff ()
TCSE ()
BrFull ()
BrFull6W ()
BrHalf ()
BrHalf3W ()
BrHalf4W ()
The table Summary of Analog Voltage Measurement Rates
summarizes the programming techniques used to make three classes of fast measurement: 100 Hz maximum-rate, 600 Hz maximum-rate, and 2000 Hz maximum-rate. 100 Hz measurements can have a 100% duty cycle
That is, measurements are not normally suspended to allow processing to catch up. Suspended measurements equate to lost measurement opportunities and may not be desirable. 600 Hz and
2000 Hz measurements (measurements exceeding 100 Hz) have duty cycles less than 100%.
229
230
Section 7. Installation
Table 33. Summary of Analog Voltage Measurement Rates
Maximum
Rate
Number of
Simultaneous Inputs
Maximum
Duty Cycle
Maximum
Measaurements
Per Burst
100 Hz
Multiple inputs
100%
N/A
600 Hz
Fewer inputs
< 100%
Variable
Description
Near simultaneous measurements on multiple channels
Up to 8 sequential differential or 16 single-ended channels.
Buffers are continuously
"recycled", so no skipped scans.
Near simultaneous measurements on fewer channels
Buffers maybe consumed and only freed after a skipped scan.
Allocating more buffers usually means more time will elapse between skipped scans.
Analog Terminal
Sequence
Differential: 1, 2, 3, 4, 5, 6, 7, 8, then repeat.
Single-ended: 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, then repeat.
Differential and single-ended:
1, 2, 1, 2, and so forth.
Excitation for Bridge
Measurements
Provided in instruction. Provided in instruction.
CRBasic
Programming
Highlights
Suggest using Scan() /
NextScan with ten (10) ms scan interval. Program for the use of up to 10 buffers.
See CRBasic example
Measuring VoltSE() at 100 Hz
Use Scan() / NextScan with a
20 ms or greater scan interval.
Program for the use of up to
100 buffers. Also use
SubScan() / NextSubScan with
1600 µs sub-scan and 12 counts.
See CRBasic example
Measuring VoltSE() at 200 Hz
2000 Hz
One input
< 100%
65535
A single CRBasic measurement instruction bursts on one channel.
Multiple channels are measured using multiple instructions, but the burst on one channel completes before the burst on the next channel begins.
1, 1, 1… to completion, then
2, 2, 2… to completion, then
3, 3, 3…, and so forth.
Provided in instruction.
Measurements per excitation must equal Repetitions
Use Scan() / NextScan with one
(1) second scan interval. Analog input Channel argument is preceded by a dash (-).
See CRBasic example Measuring
VoltSE() at 2000 Hz
7.9.14.1 Measurements from 1 to 100 Hz
Assuming a minimal CRBasic program, measurement rates between 1 and 100 Hz are determined by the Interval and Units parameters in the Scan() / NextScan instruction pair. The following program executes VoltSE() at 1 Hz with a 100% duty cycle.
CRBasic Example 46.
Measuring VoltSE() at 1 Hz
PipeLineMode '<<<<Pipeline mode ensures precise timing of measurements.
Public FastSE
DataTable (FastSETable,1,-1)
Sample (1,FastSE(),FP2)
EndTable
Section 7. Installation
BeginProg
Scan (1,Sec,0,0) '<<<<Measurement rate is determined by Interval and Units
VoltSe (FastSE(),1,mV2_5,1,False,100, 250,1.0,0)
CallTable FastSETable
NextScan
EndProg
By modifying the Interval, Units, and Buffers arguments, VoltSE() can be executed at 100 Hz at
100% duty cycle. The following program measures 16 analog-input terminals at 100 Hz.
CRBasic Example 47.
Measuring VoltSE() at 100 Hz
PipeLineMode '<<<<Pipeline mode ensures precise timing of measurements.
Public FastSE(16)
DataTable (FastSETable,1,-1)
Sample (16,FastSE(),FP2)
EndTable
BeginProg
Scan (10,mSec,10,0) '<<<<Measurement rate is determined by Interval, Units, and Buffers
VoltSe (FastSE(),1,mV2_5,1,False,100, 250,1.0,0)
CallTable FastSETable
NextScan
EndProg
7.9.14.2 Measurement Rate: 101 to 600 Hz
To measure at rates between 100 and 600 Hz, the SubScan() / NextSubScan instruction pair is added. Measurements over 100 Hz do not have 100% duty cycle, but are accomplished through measurement bursts. Each burst lasts for some fraction of the scan interval. During the remainder of the scan interval, the
CR1000 processor catches up on overhead tasks and processes data stored in the buffers. For example, the CR1000 can be programmed to measure VoltSE() on eight sequential inputs at 200 Hz with a 95% duty cycle as demonstrated in the following example:
CRBasic Example 48.
Measuring VoltSE() at 200 Hz
PipeLineMode '<<<<Pipeline mode ensures precise timing of measurements.
Public BurstSE(8)
DataTable (BurstSETable,1,-1)
Sample (8,BurstSE(),FP2)
EndTable
231
Section 7. Installation
232
BeginProg
Scan (1,Sec,10,0) '<<<<Buffers added
SubScan (5,mSec,190) '<<<<Interval, Units, and Count determine speed and number of measurements
VoltSe (BurstSE(),8,mV2_5,1,False,100,250,1.0,0)
CallTable BurstSETable
NextSubScan
NextScan
EndProg
Many variations of this basic code can be programmed to achieve other burst rates and duty cycles.
The SubScan() / NextSubScan instruction pair introduce additional complexities.
The SubScan() / NextSubScan Details
introduces some of these. Caution dictates that a specific configuration be thoroughly tested before deployment.
Generally, faster rates require measurement of fewer inputs. When testing a program, monitoring the SkippedScan
BuffDepth
and
MaxBuffDepth
registers in the CR1000 Status table may give insight into the use of buffer resources. Bear in mind that when the number of Scan() /
NextScan buffers is exceeded, a skipped scan, and so a missed-data event, will occur.
7.9.14.2.1 Measurements from 101 to 600 Hz 2
• The number of Counts (loops) of a sub-scan is limited to 65535
• Sub-scans exist only within the Scan() / NextScan structure with the Scan() interval set large enough to allow a sub-scan to run to completion of its counts.
• Sub-scan interval (i) multiplied by the number of sub-scans (n) equals a measure time fraction (MT
1
), a part of "measure time", which measure time is represented in the MeasureTime register in table Status Table Fields and
Descriptions
The EndScan instruction occupies an additional 100 µs of measure time, so the interval of the main scan has to be ≥ 100 µs plus measure time outside the SubScan() / EndSubScan construct, plus the time sub-scans consume.
• Because the task sequencer controls sub-scans, it is not finished until all subscans and any following tasks are complete. Therefore, processing does not start until sub-scans are complete and the task sequencer has set the delay for the start of the next main scan. So, one Scan() / NextScan buffer holds all the raw measurements inside (and outside) the sub-scan; that is, all the measurements made in a single main scan. For example, one execution of the following code sequence stores 30000 measurements in one buffer:
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
Note Measure time in the previous code is 300 µs + 19 ms, so a Scan() interval less than 20 ms will flag a compile error.
• Sub scans have the advantage of going at a rate faster than 100 Hz. But measurements that can run at an integral 100 Hz have an advantage as
Section 7. Installation follows: since all sub-scans have to complete before the task sequencer can set the delay for the main scan, processing is delayed until this point (20 ms in the above example). So more memory is required for the raw buffer space for the sub-scan mode to run at the same speed as the non-sub-scan mode, and there will be more delay before all the processing is complete for the burst. The pipeline (the raw buffer) has to fill further before processing can start.
• One more way to view sub-scans is that they are a convenient (and only) way to put a loop around a set of measurements. SubScan() / NextSubScan specifies a timed loop for so many times around a set of measurements that can be driven by the task sequencer.
7.9.14.3 Measurement Rate: 601 to 2000 Hz
To measure at rates greater than 600 Hz, VoltSE() is switched into burst mode by placing a dash (-) before argument in SEChan parameter argument and placing alternate arguments in other parameters. Alternate arguments are described in the table Parameters for Analog Burst Mode
In burst mode, VoltSE() dwells on a single channel and measures it at rates up to 2000 Hz, as demonstrated in the
CRBasic example Measuring VoltSE() at 2000 Hz
.
The example program has an
86% duty cycle. That is, it makes measurements over only the leading 86% of the scan. Note that burst mode places all measurements for a given burst in a single variable array and stores the array in a single (but very long!) record in the data table. The exact sampling interval is calculated as,
Tsample = 1.085069 * INT((SettleUSEC / 1.085069) + 0.5 where SettleUSEC is the sample interval (µs) entered in the SettlingTime parameter of the analog input instruction.
CRBasic Example 49.
Measuring VoltSE() at 2000 Hz
PipeLineMode '<<<<Pipeline mode ensures precise timing of measurements.
Public BurstSE(1735)
DataTable (BurstSETable,1,-1)
Sample (1735,BurstSE(),FP2)
EndTable
BeginProg
Scan (1,Sec,10,0)
' Measurement speed and count are set within VoltSE()
VoltSe (BurstSE(),1735,mV2_5,-1,False,500,0,1.0,0)
CallTable BurstSETable
NextScan
EndProg
Many variations of the burst program are possible. Multiple inputs can be measured, but one burst is completed before the next begins. Caution dictates that a specific configuration be thoroughly tested before deployment.
233
234
Section 7. Installation
200
Table 34. Parameters for Analog Burst Mode (601 to 2000 Hz)
CRBasic
Analog
Voltage
Input
Parameters
Description when in Burst Mode
Destination
A variable array dimensioned to store all measurements from one input. For example, the command,
Dim FastTemp(500) dimensions array FastTemp() to store 500 measurements (one second of data at 500 Hz, one-half second of data at 1000 Hz, etc.)
The dimension can be any integer from 1 to 65535.
Repetitions
Voltage Range
Single-Ended
Channel
Differential
Channel
The number of measurements to make on one input. This number usually equals the number of elements dimensioned in the Destination array.
Valid arguments range from 1 to 65535.
The analog input voltage range to be used during measurements. No change from standard measurement mode. Any valid voltage range can be used.
However, ranges appended with 'C' cause measurements to be slower than other ranges.
The single-ended analog input terminal number preceded by a dash (-). Valid arguments range from -1 to -16.
The differential analog input terminal number preceded by a dash (-). Valid arguments range from -1 to -8.
Measurements
per Excitation
Reverse Ex
Rev Diff
Settling Time
Integ
Multiplier
Offset
Must equal the value entered in Repetitions
No change from standard measurement mode. For fastest rate, set to False.
No change from standard measurement mode. For fastest rate, set to False.
Sample interval in µs. This argument determines the measurement rate.
500 µs interval = 2000 Hz rate
750 µs interval = 1333.33 Hz rate
Ignored if set to an integer. _50Hz and _60Hz are valid for AC rejection but are seldom used in burst applications.
No change from standard measurement mode. Enter the proper multiplier.
This is the slope of the linear equation that equates output voltage to the measured phenomena. Any number greater or less than 0 is valid.
No change from standard measurement mode. Enter the proper offset. This is the Y intercept of the linear equation that equates output voltage to the measured phenomena.
7.9.15 Measurement: PRT
PRTs (platinum resistance thermometers) are high-accuracy resistive devices used in measuring temperature.
Section 7. Installation
7.9.15.1 Measuring PT100s (100 Ω PRTs)
PT100s (100 Ω PRTs) are readily available. The CR1000 can measure PT100s in several configurations, each with its own advantages.
7.9.15.1.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.001°C in still air. To maximize measurement resolution, optimize the excitation voltage (Vx) such that the voltage drop spans, but does not exceed, the voltage input range.
7.9.15.1.2 PRT Calculation Standards
Two CRBasic instructions are available to facilitate PRT measurements.
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 E1137-04 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 CR1000 math). For the range of –200 to 0 °C, a fourth-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 R
S
/R
O
value input to the PRTCalc() instruction (by using the calibrated value of R
O
) and the multiplier and offset parameters.
235
236
Section 7. Installation
Refer to CRBasic Editor Help for specific PRTCalc() parameter entries. The following information is presented as detail beyond what is available in CRBasic
Editor Help.
The general form of the Callendar-Van Dusen (CVD) equation is shown in the following equations.
When R/R
0
< 1 (K = R/R
0
– 1):
T = g * K^4 + h * K^3 + I * K^2 + j * K
When R/R
0
>= 1:
T = (SQRT(d * (R/R
0
) + e) -a) / f
Depending on the code entered for parameter Type, which specifies the platinumresistance sensor type, coefficients are assigned values according to the following tables.
Note Coefficients are rounded to the seventh significant digit to match the
CR1000 math resolution.
Alpha is defined as:
α = (R
100
– R
0
) / (100 • R
0
)
α = (R
100
/ R
0
– 1) / 100 where R
100
and R
0
are the resistances of the PRT at 100 °C and 0 °C, respectively.
Table 35. 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 f i j g h d e
Coefficient
3.9083000E-03
-2.3100000E-06
1.7584810E-05
-1.1550000E-06
1.7909000E+00
-2.9236300E+00
9.1455000E+00
2.5581900E+02
Section 7. Installation
Table 36. PRTCalc() Type-Code-2 Sensor
US Industrial Standard, alpha = 0.00392 (Reference: Logan Enterprises)
Constant a f i j g h d e
Coefficient
3.9786300E-03
-2.3452400E-06
1.8174740E-05
-1.1726200E-06
1.7043690E+00
-2.7795010E+00
8.8078440E+00
2.5129740E+02
Table 37. PRTCalc() Type-Code-3 Sensor
US Industrial Standard, alpha = 0.00391 (Reference: OMIL R84 (2003))
Constant Coefficient a f i j g h d e
3.9690000E-03
-2.3364000E-06
1.8089360E-05
-1.1682000E-06
1.7010560E+00
-2.6953500E+00
8.8564290E+00
2.5190880E+02
Table 38. PRTCalc() Type-Code-4 Sensor
Old Japanese Standard, alpha = 0.003916 (Reference: JIS C 1604:1981, National Instruments)
Constant a f i j g h d e
Coefficient
3.9739000E-03
-2.3480000E-06
1.8139880E-05
-1.1740000E-06
1.7297410E+00
-2.8905090E+00
8.8326690E+00
2.5159480E+02
237
238
Section 7. Installation
Table 39. PRTCalc() Type-Code-5 Sensor
Honeywell Industrial Sensors, alpha = 0.00375 (Reference: Honeywell)
Constant Coefficient a f i j g h d e
3.8100000E-03
-2.4080000E-06
1.6924100E-05
-1.2040000E-06
2.1790930E+00
-5.4315860E+00
9.9196550E+00
2.6238290E+02
Table 40. PRTCalc() Type-Code-6 Sensor
Standard ITS-90 SPRT, alpha = 0.003926 (Reference: Minco / Instrunet)
Constant a
Coefficient
3.9848000E-03 f i j g h d e
-2.3480000E-06
1.8226630E-05
-1.1740000E-06
1.6319630E+00
-2.4709290E+00
8.8283240E+00
2.5091300E+02
7.9.15.2 PT100 in Four-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 (PRT Type 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
Section 7. Installation length having more than a few thousandths of an ohm resistance. In this example, the measurement range is –10° to 40 °C. The length of the cable from the
CR1000 and the bridge resistors to the PRT is 500 feet.
Figure PT100 in Four-Wire Half-Bridge
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 (R f
) and the PRT (R
S
) 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 R f
. 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 CR1000.
7.9.15.2.1 Calculating the Excitation Voltage
The voltage drop across the PRT is equal to V
X
multiplied by the ratio of R
S
to the total resistance, and is greatest when R
S
is greatest (R
S
= 115.54 Ω at 40 °C). To find the maximum excitation voltage that can be used on the ±25 mV input range, assume V
2
is equal to 25 mV and use Ohm's Law to solve for the resulting current, I.
I = 25 mV/R
S
= 25 mV/115. 54 ohms = 0.216 mA
Next solve for V
X
:
V
X
= I*(R
1
+ R
S
+ R f
) = 2.21 V
If the actual resistances were the nominal values, the CR1000 would not over range with V
X
= 2.2 V. However, to allow for the tolerance in actual resistors, set
V
X
equal to 2.1 V (e.g., if the 10 kΩ resistor is 5% low, i.e.,
R
S
/(R
1
+R
S
+R f
)=115.54 / 9715.54, and V
X
must be 2.102 V to keep V
S
less than
25 mV).
7.9.15.2.2 Calculating the BrHalf4W() Multiplier
The result of BrHalf4W() is equivalent to R
S
/R f
.
X = R
S
/R f
PRTCalc() computes the temperature (°C) for a DIN 43760 standard PRT from the ratio of the PRT resistance to its resistance at 0 °C (R
S
/R
0
). Thus, a multiplier of R f
/R
0
is used in BrHalf4W() to obtain the desired intermediate, R
S
/R
0
(=R
S
/R f
• R f
/R
0
). If R
S
and R
0
were each exactly 100 Ω, the multiplier would be 1.
However, neither resistance is likely to be exact. The correct multiplier is found by connecting the PRT to the CR1000 and entering BrHalf4W() with a multiplier of 1. The PRT is then placed in an ice bath (0 °C), and the result of the bridge measurement is read. The reading is R
S
/R f
, which is equal to R
0
/R f
since R
S
=R
0 at 0 °C. The correct value of the multiplier, R f
/R
0
, is the reciprocal of this reading. The initial reading assumed for this example was 0.9890. The correct multiplier is: R f
/R
0
= 1/0.9890 = 1.0111.
239
Section 7. Installation
7.9.15.2.3 Choosing Rf
The fixed 100 Ω 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.15 °C over the –10° to 40 °C temperature range. Because the measurement is ratiometric (R
S
/R f
), the properties of the 10 kΩ resistor do not affect the result.
A terminal-input module (TIM) can be used to complete the circuit shown in figure PT100 in Four-Wire Half-Bridge
Refer to the appendix Signal
Conditioners
for information concerning available TIM modules.
Figure 63. PT100 in Four-Wire Half-Bridge
240
CRBasic Example 50.
PT100 in Four-Wire Half-Bridge
'This program example demonstrates the measurement of a 100-ohm PRT using a four-wire half
'bridge. See FIGURE. PT100 in Four-Wire Half-Bridge
for the 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
Section 7. Installation
7.9.15.3 PT100 in Three-Wire Half Bridge
Example shows:
• How to measure a PRT in a three-wire half-bridge configuration.
Advantages:
• Uses half as many terminals configured for analog input as four-wire halfbridge.
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
PT100 in Four-Wire Half-Bridge
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 Three-Wire Half-
Bridge
As in section PT100 in Four-Wire Half-Bridge
the excitation voltage is calculated to be the maximum possible, yet allows the measurement to be made on the ±25 mV input range. The 10 kΩ resistor has a tolerance of ±1%; thus, the lowest resistance to expect from it is 9.9 kΩ. Solve for V
X
(the maximum excitation voltage) to keep the voltage drop across the PRT less than 25 mV:
0.025 V > (V
X
* 115.54)/(9900+115.54)
V
X
< 2.16 V
The excitation voltage used is 2.2 V.
The multiplier used in BRHalf3W() is determined in the same manner as in
PT100 in Four-Wire Half-Bridge
In this example, the multiplier (R f
/R
0
) is assumed to be 100.93.
The three-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 R
S
calculated with BRHalf3W() is actually R
S
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 (R
0
= 100 ohms) in the ice bath would be 100.17 ohms, and the resistance at
40°C would be 115.71. The measured ratio R
S
/R
0
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.1°C lower than the actual temperature of the PRT.
This source of error does not exist in the example in PT100 in Four-Wire Half-
Bridge
because a four-wire half-bridge is used to measure PRT resistance.
241
Section 7. Installation
A terminal input module can be used to complete the circuit in figure PT100 in
Three-Wire Half-Bridge
Refer to the appendix Signal Conditioners
for information concerning available TIM modules.
Figure 64. PT100 in Three-Wire Half-Bridge
242
CRBasic Example 51.
PT100 in Three-wire Half-bridge
'This program example demonstrates the measurement of a 100-ohm PRT using a three-wire half
'bridge. See FIGURE. PT100 in Three-Wire Half-Bridge
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
7.9.15.4 PT100 in Four-Wire Full-Bridge
Example shows:
• How to measure a PRT in a four-wire full-bridge
Advantages:
• Uses half as many terminals configured for analog input as four-wire halfbridge.
Example PRT Specifications:
• α = 0.00392 (PRTType 2)
This example measures a 100 ohm PRT in a four-wire full-bridge, as shown in figure PT100 in Four-Wire Full-Bridge
using CRBasic instruction
Section 7. Installation
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 with Voltage Excitation
the result of BRFull() is X,
X = 1000 V
S
/V
X where,
V
S
= measured bridge-output voltage
V
X
= excitation voltage or,
X = 1000 (R
S
/(R
S
+R
1
) – R
3
/(R
2
+R
3
)).
With reference to figure PT100 in Four-Wire Full-Bridge
the resistance of the PRT (R
S
) is calculated as:
R
S
= R
1 •
X' / (1-X') where
X' = X / 1000 + R
3
/(R
2
+R
3
)
Thus, to obtain the value R
S
/R
0
, (R
0
= R
S
@ 0 °C) for the temperature calculating instruction PRTCalc(), the multiplier and offset used in BRFull() are 0.001 and
R
3
/(R
2
+R
3
), respectively. The multiplier (R f
) used in the bridge transform algorithm (X = R f
(X/(X-1)) to obtain R
S
/R
0
is R
1
/R
0
or (5000/100 = 50).
The application requires control of the temperature bath at 50 °C with as little variation as possible. High resolution is desired so the control algorithm will respond to very small changes in temperature. The highest resolution is obtained when the temperature range results in a signal (V
S
) range that fills the measurement range selected in BRFull(). The full-bridge configuration allows the bridge to be balanced (V
S
= 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 Ω at 50 °C. The 120 Ω fixed resistor balances the bridge at approximately 51 °C. The output voltage is:
V
S
= V
X
• [R
S
/(R
S
+R
1
) – R
3
/(R
2
+R
3
)]
= V
X
• [R
S
/(R
S
+5000) – 0.023438]
The temperature range to be covered is 50 °C ±10 °C. At 40 °C, R
S
is approximately 115.8 Ω, or:
V
S
= –802.24E–6 V
X
.
Even with an excitation voltage (V
X
) equal to 2500 mV, V
S
There is a change of approximately 2 mV from the output at 40°C to the output at
51 °C, 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.0009 °C.
can be measured on the ±2_5 mV scale (40 °C / 115.8 Ω / –2.006 mV, 60 °C / 123.6 Ω / 1.714 mV).
243
Section 7. Installation
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 65. PT100 in Four-Wire Full-Bridge
244
CRBasic Example 52.
PT100 in Four-Wire Full-Bridge
'This program example demonstrates the measurement of a 100-ohm four-wire full bridge. See
'FIGURE. PT100 in Four-Wire Full-Bridge
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
7.9.16 PLC Control — Details
Related Topics:
• PLC Control — Overview
• PLC Control — Details
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• PLC Control — Instructions
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
Section 7. Installation
This section is slated for expansion. Below are a few tips.
• Short Cut programming wizard has provisions for simple on/off control.
• PID control can be done with the CR1000. Ask a Campbell Scientific application engineer for more information.
• When controlling a PID algorithm, a delay between processing (algorithm input) and the control (algorithm output) is not usually desirable. A delay will not occur in either sequential mode
or pipeline mode
assuming an appropriately fast scan interval is programmed, and the program is not skipping scans. In sequential mode, if some task occurs that pushes processing time outside the scan interval, skipped scans will occur and the
PID control may fail. In pipeline mode, with an appropriately sized scan buffer, no skipped scans will occur. However, the PID control may fail as the processing instructions work through the scan buffer.
• To avoid these potential problems, bracket the processing instructions in the
CRBasic program with ProcHiPri and EndProcHiPri. Processing instructions between these instructions are given the same high priority as measurement instructions and do not slip into the scan buffer if processing time is increased. ProcHiPri and EndProcHiPri may not be selectable in
CRBasic Editor. You can type them in anyway, and the compiler will recognize them.
7.9.17 Serial I/O: Capturing Serial Data
The CR1000 communicates with smart sensors that deliver measurement data through serial data protocols.
Read More See Telecommunications and Data Retrieval
for background on CR1000 serial communications.
7.9.17.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. Consider an instrument that transmits the byte "11001010" to the
CR1000. The instrument does this by translating "11001010" into a series of higher and lower voltages, which it transmits to the CR1000. The CR1000 receives and reconstructs these voltage levels as "11001010." Because an RS-232 or TTL standard is adhered to by both the instrument and the CR1000, 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
shows a sample of ASCII / ANSI character and code equivalents.
Table 41. ASCII / ANSI Equivalents
Byte
Received
00110010
ASCII
Character
Displayed
2
Decimal
ASCII
Code
50
1100010
00101011 b
+
98
43
Hex
ASCII
Code
32
62
2b
245
246
Section 7. Installation
Table 41. ASCII / ANSI Equivalents
Byte
Received
00001101
00000001
ASCII
Character
Displayed cr
☺
Decimal
ASCII
Code
13
1
Hex
ASCII
Code d
1
Read More See the appendix ASCII / ANSI Table
for a complete list of
ASCII / ANSI codes and their binary and hex equivalents.
The face value of the byte, 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 usable information, see the appendix FP2 Data Format
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 CR1000, 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 CRBasic program, and development time can extend into several hours or days.
7.9.17.2 I/O Ports
The CR1000 supports two-way serial communication with other instruments through ports listed in table CR1000 Serial Ports
A serial device will often be supplied with a nine-pin D-type connector serial port. Check the manufacture's pinout for specific information. In many cases, the standard nine-pin RS-232 scheme is used. If that is the case then,
Connect sensor RX (receive, pin 2) to a U or C terminal configured for Tx (C1,
C3, C5, C7).
• Connect sensor TX (transmit, pin 3) to a U or C terminal configured for Rx
(C2, C4, C6, C8)
• Connect sensor ground (pin 5) to datalogger ground ( G terminal)
Note Rx and Tx lines on nine-pin connectors are sometimes switched by the manufacturer.
Section 7. Installation
Table 42. CR1000 Serial Ports
Serial Port
RS-232 (9 pin)
Voltage Level
RS-232
CS I/O (9 pin)
COM1 (C1 – C2)
COM2 (C3 – C4)
COM3 (C5 – C6)
COM4 (C7 – C8)
TTL
TTL
TTL
TTL
C1
C3
C5
C7
TTL
5 Vdc
5 Vdc
5 Vdc
5 Vdc
C1, C2, C3 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
Full-duplex asynchronous RS-232/TTL
Full-duplex asynchronous RS-232/TTL
SDI-12
SDI-12
SDI-12
SDI-12
SDM (used with Campbell Scientific peripherals only)
7.9.17.3 Protocols
PakBus is the protocol native to the CR1000 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 CR1000 with minimal user configuration.
PakBus®, Modbus, and DNP3 operate on the RS-232, CS I/O, and four COM ports. SDI-12 is a protocol used by some smart sensors that requires minimal configuration on the CR1000.
Read More See SDI-12 Recording
SDI-12 Sensor Support
PakBus
Overview
DNP3
and Modbus
Many instruments require non-standard protocols to communicate with the
CR1000.
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 communication port, which makes for more efficient use of resources.
7.9.17.4 Glossary of Serial I/O Terms
Term. 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
247
248
Section 7. Installation each character surrounded by one or more start and stop bits which designate the beginning and ending points of the information (see synchronous
).
Indicates the sending and receiving devices are not synchronized using a clock signal.
Term. baud rate
The rate at which data are transmitted.
Term. big endian
"Big end first." Placing the most significant integer at the beginning of a numeric word, reading left to right. The processor in the CR1000 is MSB, or puts the most significant integer first. See the appendix Endianness
Term. cr
Carriage return
Term. 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.
Term. duplex
A serial communication protocol. Serial communications can be simplex, half-duplex, or full-duplex.
Reading list: simplex
duplex
half-duplex
and full-duplex
Term. lf
Line feed. Often associated with carriage return (<cr>). <cr><lf>.
Term. little endian
"Little end first." Placing the most significant integer at the end of a numeric word, reading left to right. The processor in the CR1000 is MSB, or puts the most significant integer first. See the appendix Endianness
Term. LSB
Least significant bit (the trailing bit). See the appendix Endianness
Term. 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 defined as the transition range that contains no information. A mark is a logic 1 and negative voltage. A space is a logic 0 and positive voltage.
Section 7. Installation
Term. MSB
Most significant bit (the leading bit). See the appendix Endianness
Term. RS-232C
Refers to the standard used to define the hardware signals and voltage levels.
The CR1000 supports several options of serial logic and voltage levels including RS-232 logic at TTL levels and TTL logic at TTL levels.
Term. RX
Receive
Term. SP
Space
Term. start bit
Is the bit used to indicate the beginning of data.
Term. stop bit
Is the end of the data bits. The stop bit can be 1, 1.5 or 2.
Term. TX
Transmit
7.9.17.5 Serial I/O CRBasic Programming
To transmit or receive RS-232 or TTL signals, a serial port (see table CR1000
Serial Ports
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 Receiving an RS-232 String
shows the use of SerialOpen(). Consult CRBasic Editor Help for more information.
SerialOpen (COMPort,BaudRate,Format,TXDelay,BufferSize)
• COMPort — Refer to CRBasic Editor Help for a complete list of COM ports available for use by SerialOpen().
• BaudRate — 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 -nnnn (where nnnn is the baud rate) or 0, auto baud-rate detect is enabled. Autobaud is useful when using the CS I/O and RS-232 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 an auto-baud rate argument ( 0 or -
nnnn) and ensure this option supports PakBus ® in the specific application.
• BufferSize — The buffer holds received data until it is removed. SerialIn(),
SerialInRecord(), and SerialInBlock() instructions are used to read data
249
250
Section 7. Installation from the buffer to variables. Once data are in variables, string manipulation instructions are used to format and parse the data.
SerialClose() must be executed before SerialOpen() can be used again to reconfigure the same serial port, or before the port can be used to communicate with a PC.
7.9.17.5.1 Serial I/O Programming Basics
SerialOpen() 1
• Closes PPP (if active)
• Returns TRUE or FALSE when set equal to a Boolean variable
• Be aware of buffer size (ring memory)
SerialClose()
• Examples of when to close o Reopen PPP o Finished setting new settings in a Hayes modem o 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 (one extra record + one byte)
SerialInBlock() 1
• For binary data (perhaps integers, floats, data with NULL characters).
• Destination can be of any type.
• Buffer-size margin (one extra record + one byte).
SerialOutBlock() 1,3
• Binary
• Can run in pipeline mode inside the digital measurement task (along with
SDM instructions) if the COMPort parameter is set to a constant such as
COM1, COM2, COM3, or COM4, and the number of bytes is also entered as a constant.
SerialOut()
• Use for ASCII commands and a known response, such as Hayes-modem commands.
• If open, returns the number of bytes sent. If not open, returns 0.
Section 7. Installation
SerialInRecord() 2
• Can run in pipeline mode inside the digital measurement task (along with
SDM instructions) if the COMPort parameter is set to a constant argument such as COM1, COM2, COM3, or COM4, and the number of bytes is also entered as 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, COM3, or COM4 coincidentally detects a time gap of >100 bits if the records are less than 256 bytes.
• Buffer size margin (one extra record + one byte).
1
Processing instructions
2
Measurement instruction in the pipeline mode
3
Measurement instruction if expression evaluates to a constant
7.9.17.5.2 Serial I/O 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: o Become thoroughly familiar with the data to be captured. o Can the sensor be polled? o Does the sensor send data on its own schedule? o Are there markers at the beginning or end of data? Markers are very useful for identifying a variable length record. o Does the record have a delimiter character such as a comma, space, or tab? Delimiters are useful for parsing the received serial string into usable numbers. o Will the sensor be sending multiple data strings? Multiple strings usually require filtering before parsing. o How fast will data be sent to the CR1000? o Is power consumption critical? o Does the sensor compute a checksum? Which type? A checksum is useful to test for data corruption.
2. Open a serial port with SerialOpen(). o Example:
SerialOpen(Com1,9600,0,0,10000) o Designate the correct port in CRBasic. o Correctly wire the device to the CR1000. o Match the port baud rate to the baud rate of the device in CRBasic (use a fixed baud rate — rather than autobaud — when possible).
251
252
Section 7. Installation
3. Receive serial data as a string with SerialIn() or SerialInRecord().
̶ Example:
SerialInRecord (Com2,SerialInString,42,0,35,"",01) o Declare the string variable large enough to accept the string.
̶ Example:
Public SerialInString As String * 25 o Observe the input string in the input string variable in a numeric monitor
Note SerialIn() and SerialInRecord() both receive data. SerialInRecord() is best for receiving streaming data. SerialIn() is best for receiving discrete blocks.
4. Parse (split up) the serial string using SplitStr() o Separates string into numeric and / or string variables. o Example:
SplitStr (InStringSplit,SerialInString,"",2,0) o Declare an array to accept the parsed data.
̶ Example:
Public InStringSplit(2) As String
̶ Example:
Public SplitResult(2) As Float
7.9.17.5.3 Serial I/O 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 with SerialOpen() to configure it for communications. o Parameters are set according to the requirements of the communication link and the serial device. o Example:
SerialOpen (Com1,9600,0,0,10000) o Designate the correct port in CRBasic. o Correctly wire the device to the CR1000. o Match the port baud rate to the baud rate of the device in CRBasic. o Use a fixed baud rate (rather than auto baud) when possible.
2. Build the output string. o Example:
SerialOutString = "*" & "27.435" & "," & "56.789" & "#" o Tip — concatenate (add) strings together using & instead of +. o Tip — use CHR() instruction to insert ASCII / ANSI characters into a string.
Section 7. Installation
3. Output string via the serial port ( SerialOut() or SerialOutBlock() command). o Example:
SerialOut (Com1,SerialOutString,"",0,100) o Declare the output string variable large enough to hold the entire concatenation. o 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.
7.9.17.5.4 Serial I/O Translating Bytes
One or more of three principle data formats may end up in the SerialInString() variable (see examples in Serial Input Programming Basics
). Data may be combinations or variations of these. The instrument manufacturer must provide the rules for decoding the data
• Alpha-numeric — Each digit represents an alpha-numeric value. For example, R = the letter R, and 2 = decimal 2. This is the easiest protocol to translate since the encode and translation are identical. Normally, the
CR1000 is programmed to parse (split) the string and place values in variables.
Example string from 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 to 9 and letters a to 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 sting from temperature sensor:
SerialInString = "23 30 31 38 34 0D" which 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 CR1000 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, use SerialInBlock() or SerialInRecord() when reading binary data.
The input string variable must be an array set As Long data type, for example:
Dim SerialInString As Long
7.9.17.5.5 Serial I/O Memory Considerations
Several points regarding memory should be considered when receiving and processing serial data.
253
254
Section 7. Installation
• Serial buffer: The serial port buffer, which is declared in SerialOpen(), must be large enough to hold all 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 memory added to the buffer reduces final-
data memory
Note Concerning SerialInRecord() running in pipeline mode with NBytes
(number of bytes) parameter = 0:
For the digital measurement sequence to know how much room to allocate in
Scan() buffers (default of 3), SerialInRecord() allocates the buffer size specified by SerialOpen() (default 10,000, an overkill), or default 3 • 10,000 = 30 kB 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
NumberOfBytes parameter is non-zero, then SerialInRecord() allocates 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. Declaring variables as Dim has the effect of consuming less telecommunication bandwidth. When public variables are viewed in software, the entire Public table is transferred at the update interval. If the Public table is large, telecommunication bandwidth can be taxed such that other data tables are not collected.
• 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 CR1000 adjusts upward the declared size of strings. One byte is always added to the declared length, which is then increased by up to another three bytes to make the length divisible by four.
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.
7.9.17.5.6 Demonstration Program
CRBasic example Receiving an RS-232 String
is provided as an exercise in serial input / output programming. The example only requires the CR1000 and a single-wire jumper between COM1 Tx and COM2 Rx. The program simulates a temperature and relative humidity sensor transmitting RS-232 (simulated data comes out of COM1 as an alpha-numeric string).
Section 7. Installation
CRBasic Example 53.
Receiving an RS-232 String
'This program example demonstrates CR1000 serial I/O features by:
' 1. Simulating a serial sensor
' 2. 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. If parsed data are strictly numeric, this
'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 'Set simulated temperature to transmit
RhOut = 56.789 'Set simulated relative humidity to transmit
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
255
256
Section 7. Installation
'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
7.9.17.6 Serial I/O Application Testing
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 later versions of
Windows, but can be purchased separately from http://www.hilgraeve.com.
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 hexadecimal data.
7.9.17.6.1 Configure HyperTerminal
Create a HyperTerminal instance file by clicking Start | All Programs |
Accessories | Communications | HyperTerminal. The windows in the figures
HyperTerminal Connection Description
through HyperTerminal ASCII
Setup
are presented. Enter an instance name and click OK.
Figure 66. HyperTerminal New Connection Description
Figure 67. HyperTerminal Connect-To Settings
Section 7. Installation
Figure 68. HyperTerminal COM-Port Settings Tab
Click File | Properties | Settings | ASCII Setup... and set as shown.
257
Section 7. Installation
Figure 69. HyperTerminal ASCII Setup
258
7.9.17.6.2 Create Send-Text File
Create a file from which to send a serial string. The file shown in the figure
HyperTerminal Send Text-File Example
will send the string
[2008:028:10:36:22]C to the CR1000. Use Notepad ® (Microsoft ® Windows ® utility) or some other text editor that will not place hidden characters in the file.
Figure 70. HyperTerminal Send Text-File Example
To send the file, click Transfer | Send Text File | Browse for file, then click OK.
7.9.17.6.3 Create Text-Capture File
Figure HyperTerminal Text-Capture File Example
shows a HyperTerminal capture file with some data. The file is empty before use commences.
Figure 71. HyperTerminal Text-Capture File Example
Section 7. Installation
Engage text capture by clicking on Transfer | Capture Text | Browse, select the file, and then click OK.
7.9.17.6.4 Serial I/O Example II
CRBasic example Measure Sensors / Send RS-232 Data
illustrates a use of
CR1000 serial I/O features.
Example — An energy company has a large network of older CR510 dataloggers into which new CR1000 dataloggers are to be incorporated. The CR510 dataloggers are programmed to output data in the legacy Campbell Scientific
Printable ASCII format, which satisfies requirements of the customer's dataacquisition network. The network administrator 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. CR1000 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
imports and exports serial data with the CR1000 RS-232 port. Imported data are 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 nine-pin RS-232 port can be used to download the CR1000 program if the SerialOpen() baud rate matches that of the datalogger support software
However, two-way PakBus ® communications will cause the CR1000 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 CR1000 RS-232 port with HyperTerminal as described in the section
Configure HyperTerminal
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 for the purposes of this example.
259
260
Section 7. Installation
CRBasic Example 54.
Measure Sensors / Send RS-232 Data
'This program example demonstrates the import and export serial data via the CR1000 RS-232
'port. Imported data are expected to have the form of the legacy Campbell Scientific
'time set C command:
' [YR:DAY:HR:MM:SS]C
'Exported data has the form of the legacy Campbell Scientific Printable ASCII format:
' 01+0115. 02+135 03+00270 04+7999 05+00138 06+07999 07+04771
'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
'One Minute Data Table
DataTable (OneMinTable,true,-1)
OpenInterval 'sets interval same as found in CR510
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
'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
'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
Section 7. Installation
261
262
Section 7. Installation
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 year, use this section.
Else
Select Case DOY
Case Is < 32
Month = 1
Date = DOY
Case Is < 60
Month = 2
Date = DOY + -31
Case Is < 91
Month = 3
Date = DOY + -59
Case Is < 121
Month = 4
Date = DOY + -90
Case Is < 152
Month = 5
Date = DOY + -120
Case Is < 182
Month = 6
Date = DOY + -151
Case Is < 213
Month = 7
Date = DOY + -181
Case Is < 244
Month = 8
Date = DOY + -212
Case Is < 274
Month = 9
Date = DOY + -243
Section 7. Installation
Case Is < 305
Month = 10
Date = DOY + -273
Case Is < 336
Month = 11
Date = DOY + -304
Case Is < 366
Month = 12
Date = DOY + -334
EndSelect
EndIf
EndSub
'//////////////////////////// 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
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
263
264
Section 7. Installation
'/////////////////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
7.9.17.7 Serial I/O Q & A
Q: I am writing a CR1000 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?
A: Strings created with CRBasic are NULL terminated. Adding strings together means the second 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 summarize when the CR1000 powers the RS-232 port. I get that there is an "always on" setting. How about when there are beacons? Does the
Section 7. Installation
SerialOpen() instruction cause other power cycles?
A: The RS-232 port is left on under the following conditions:
• When the setting RS-232Power
is set
• When a SerialOpen() with argument COMRS232 is used in the program
Both conditions power-up the interface and leave it on with no timeout. If
SerialClose() is used after SerialOpen(), 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. After 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 the datalogger support software
because the software sends information as part of the protocol that lets the CR1000 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 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. For this reason SerialOpen() leaves the interface powered up so no incoming bytes are lost.
When the CR1000 has data to send with the RS-232 port, if the data are not a response to a received packet, such as sending a beacon, it will power up the interface, send the data, and return to the "dormant" state with no 40 second timeout.
Q: How can I reference specific characters in a string?
A: The third 'dimension' of a string variable provides access to that part of the string after the position specified. For example, if
TempData = "STOP" then,
TempData(1,1,2) = "TOP"
TempData(1,1,3) = "OP"
TempData(1,1,1) = "STOP"
To handle single-character manipulations, declare a string with a size of 1. This single-character string is then used to search for specific characters. In the following example, the first character of string LargerString is determined and used to control program logic:
Public TempData As String * 1
TempData = LargerString
If TempData = "S" Then ...
A single character can be retrieved from any position in a string. The following example retrieves the fifth character of a string:
Public TempData As String * 1
TempData = LargerString(1,1,5)
Q: How can I get SerialIn(), SerialInBlock(), and SerialInRecord() to read extended characters?
265
266
Section 7. Installation
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 CR1000 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 CR1000 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 kept in mind when setting timeouts for the SerialIn() and SerialOut() instructions, or user-defined timeouts in constructs using the SerialInChk() instruction.
Q: What are the termination conditions that will stop incoming data from being stored?
A: Termination conditions:
• TerminationChar argument is received
• MaxNumChars argument is met
• TimeOut argument is exceeded
SerialIn() does NOT stop storing when a Null character (&h00) is received
(unless a NULL character is specified as the termination character). As a string variable, a NULL character received will terminate the string, but nevertheless characters after a NULL character will continue to be received into the variable space until one of the termination conditions is met. These characters can later be accessed with MoveBytes() if necessary.
Q: How can a variable populated by SerialIn() be used in more than one sequence and still avoid using the variable in other sequences when it contains old data?
A: A simple caution is that the destination variable should not be used in more than one sequence to avoid using the variable when it contains old data.
However, this is not always possible and the root problem can be handled more elegantly.
When data arrives independent from execution of the CRBasic program, such as occurs with streaming data, measures must be taken to ensure that the incoming data are updated in time for subsequent processes using that data. When the task of writing data is separate from the task of reading data, you should control the flow of data with deliberate control features such as the use of flags or a timestamped weigh point as can be obtained from a data table.
There is nothing unique about SerialIn() with regard to understanding how to correctly write to and read from global variables using multiple sequences.
SerialIn() is writing into an array of characters. Many other instructions write into an array of values (characters, floats, or longs), such as Move(),
MoveBytes(), GetVariables(), SerialInRecord(), SerialInBlock(). In all cases, when writing to an array of values, it is important to understand what you are reading, if you are reading it asynchronously, in other words reading it from some other task that is polling for the data at the same time as it is being written, whether that other task is some other machine reading the data, like LoggerNet, or
Section 7. Installation a different sequence, or task, within the same machine. If the process is relatively fast, like the Move() instruction, and an asynchronous process is reading the data, this can be even worse because the “reading old data” will happen less often but is more insidious because it is so rare.
7.9.18 Serial I/O: SDI-12 Sensor Support — Programming
Resource
Related Topics:
• SDI-12 Sensor Support — Overview
• SDI-12 Sensor Support — Details
• Serial I/O: SDI-12 Sensor Support — Programming Resource
• SDI-12 Sensor Support — Instructions
See the table CR1000 Terminal Definitions
for C terminal assignments for
SDI-12 input. Multiple SDI-12 sensors can be connected to each configured terminal. If multiple sensors are wired to a single terminal, each sensor must have a unique address. SDI-12 standard v 1.3 sensors accept addresses 0 through 9, a through z, and A through Z. For a CRBasic programming example demonstrating the changing of an SDI-12 address on the fly, see Campbell Scientific publication
PS200/CH200 12 V Charging Regulators, which is available at
www.campbellsci.com.
The CR1000 supports SDI-12 communication through two modes — transparent mode and programmed mode.
• Transparent mode facilitates sensor setup 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.
7.9.18.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, CR1000 programs may not execute. CR1000 security may need to be unlocked before transparent mode can be activated.
Transparent mode is entered while the PC is in telecommunications with the
CR1000 through a terminal emulator program. It is easily accessed through a terminal emulator. Campbell Scientific DevConfig program has a terminal utility, as to other datalogger support software
Keyboard displays cannot be used.
To enter the SDI-12 transparent mode, enter the datalogger support software terminal emulator as shown in the figure Entering SDI-12 Transparent Mode
(p.
Press Enter until the CR1000 responds with the prompt CR1000>. Type
SDI12 at the prompt and press Enter. In response, the query Enter Cx Port is presented with a list of available ports. Enter the port number assigned to the terminal to which the SDI-12 sensor is connected. For example, port 1 is entered for terminal C1. An Entering SDI12 Terminal response indicates that SDI-12
267
Section 7. Installation transparent mode is active and ready to transmit SDI-12 commands and display responses.
Figure 72. Entering SDI-12 Transparent Mode
268
7.9.18.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 the Address Query command.
Some manufacturers may allow it to be used in other commands.
• Command body (for example, 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 the table Standard SDI-12 Command &
Response Set
Sensor manufacturers determine which commands to support. The most common commands are detailed in the table SDI-12
Commands for Transparent Mode
Section 7. Installation
Table 43. SDI-12 Commands for Transparent Mode
Command Name Command Syntax
1
Response
2
Notes
Break
Address Query
Acknowledge Active
Change Address
Continuous spacing for at least
12 milliseconds
?!
a!
aAb!
None
a<CR><LF>
a<CR><LF>
b<CR><LF> (support for this command is required only if the sensor supports software changeable addresses)
atttnn<CR><LF> Start Concurrent Measurement
Additional Concurrent
Measurements
Additional Concurrent
Measurements and Request CRC
Send Data
aC!
aC1! ... aC9!
aCC1! ... aCC9!
atttnn<CR><LF>
atttnn<CR><LF>
Send Identification
aD0! ... aD9!
aI!
a<values><CR><LF> or a<values><CRC><CR><LF>
allccccccccmmmmmmvvvxxx...xx<CR><LF>. For example,
013CampbellCS1234003STD.03.01 means address = 0, SDI-12 protocol version number = 1.3, manufacturer is Campbell Scientific, CS1234 is the sensor model number (fictitious in this example), 003 is the sensor version number, STD.03.01 indicates the sensor revision number is .01.
Start Measurement
3
Start Measurement and Request CRC
3
Additional Measurements
3
Additional Measurements and
Request CRC
3
Continuous Measurements
aM!
aMC!
aM1! ... aM9!
aMC1! ... aMC9!
atttn<CR><LF>
atttn<CR><LF>
atttn<CR><LF>
atttn<CR><LF>
aR0! ... aR9! a<values><CR><LF> (formatted like the D commands)
Continuous Measurements and
Request CRC
Start Verification
3
aRC0! ... aRC9!
aV!
a<values><CRC><CR><LF> (formatted like the D commands)
atttn<CR><LF>
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.
2
Complete response string can be obtained when using the SDI12Recorder() instruction by declaring the Destination variable as String.
3
This command may result in a service request.
SDI-12 Address Commands
Address and identification commands request metadata about the sensor. Connect only a single probe when using these commands.
?!
Requests the sensor address. Response is address, a.
Syntax:
?!
269
270
Section 7. Installation
aAb!
Changes the sensor address. a is the current address and b is the new address.
Response is the new address.
Syntax: aAb!
aI!
Requests the sensor identification. Response 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.
Syntax: aI!
An example of a response from the aI! command is:
013NRSYSINC1000001.2101 <CR><LF> where:
0 is the SDI-12 address.
13 is the SDI-12 version (1.3).
NRSYSINC indicates the manufacturer.
100000 indicates the sensor model.
1.2 is the sensor version.
101 is the sensor serial number.
SDI-12 Start Measurement Commands
Measurement commands elicite responses in the form: atttnn where:
a is the sensor address
ttt is the time (s) until measurement data are available
nn is the number of values to be returned when one or more subsequent D! commands are issued.
aMv!
Starts a standard measurement. 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), or a diagnostic of the sensor internal battery.
Syntax: aMv!
As an example, the response from the command 5M! is:
500410
Section 7. Installation where:
5 reports the sensor SDI-12 address.
004 indicates the data will be available in 4 seconds.
10 indicates that 10 values will be available.
The command 5M7! elicites a similar response, but the appendage 7 instructs the sensor to return the voltage of the internal battery.
aC!
Start concurrent measurement. The CR1000 requests a measurement, continues program execution, and picks 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. This command is new with v. 1.2 of the SDI-12 specification.
Syntax: aC!
Aborting an SDI-12 Measurement Command
A measurement command ( M! or C!) is aborted when any other valid command is sent to the sensor.
SDI-12 Send Data Command
Send data commands are normally issued automatically by the CR1000 after the
aMv! or aCv! measurement commands. In transparent mode through CR1000 terminal commands, you need to issue these commands in series. When in automatic mode, if the expected number of data values are not returned in response to a aD0! command, the datalogger issues aD1!, aD2!, etc., until all data are received. In transparent mode, you must do likewise. The limiting constraint is that the total number of characters that can be returned to a aDv! command is
35 (75 for aCv!). If the number of characters exceed the limit, the remainder of the response are obtained with subsequent aDv! commands wherein v increments with each iteration.
aDv!
Request data from the sensor.
Example Syntax: aD0!
SDI-12 Continuous Measurement Command (aR0! to aR9!)
Sensors that are continuously monitoring, such as a shaft encoder, do not require an M command. They can be read directly with the Continuous Measurement
Command ( R0! to R9!). For example, if the sensor is operating in a continuous measurement mode, then aR0! will return the current reading of the sensor.
Responses to R commands are formatted like responses to send data (aDv!) commands. The main difference is that R commands do not require a preceding
271
272
Section 7. Installation
M command. The maximum number of characters returned in the <values> part of the response is 75.
Each R command is an independent measurement. For example, aR5! need not be preceded by aR0! through aR4!. If a sensor is unable to take a continuous measurement, then it must return its address followed by <CR><LF> (carriage return and line feed) in response to an R command. If a CRC was requested, then the <CR><LF> must be preceded by the CRC.
aRv!
Request continuous data from the sensor.
Example Syntax: aR5!
7.9.18.2 SDI-12 Recorder Mode
The CR1000 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 SDI-12
Transparent Mode
issue CRLF ( <Enter> key) until CR1000> prompt appears. Type W and 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.
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 CR1000 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 the SDI-12 address is a separate instruction parameter), the CR1000 issues the aM! and aD0! commands with proper elapsed time between the two. The CR1000 automatically issues retries and performs other services that make the SDI-12 measurement work as trouble free as possible. Table SDI-12Recorder() Commands
summarizes CR1000 actions triggered by some SDI12Recorder() commands.
If the SDI12Recorder() instruction is not successful, NAN will be loaded into the first variable. See NAN and ±INF
for more information.
Section 7. Installation
Command Name
Address Query
Change Address
Concurrent Measurement
Alternate Concurrent Measurement
SDIRecorder()
SDICommand
Argument
?!
Ab!
Cv!, CCv!
Cv
(note — no ! termination)
2
SDI-12 Command Sent
Sensor Response
1
CR1000 Response
Notes
CR1000: issues a?! command. Only one sensor can be attached to the C terminal configured for SDI-12 for this command to elicit a response.
Sensor must support this command.
CR1000: issues aAb! command
CR1000: issues aCv! command
Sensor: responds with atttnn
CR1000: if ttt = 0, issues aDv! command(s). If nnn = 0 then NAN put in the first element of the array.
Sensor: responds with data
CR1000: else, if ttt > 0 then moves to next CRBasic program instruction
CR1000: at next time SDIRecorder() is executed, if elapsed time < ttt, moves to next CRBasic instruction
CR1000: else, issues aDv! command(s)
Sensor: responds with data
CR1000: issues aCv! command (to request data for next scan)
CR1000: tests to see if ttt expired. If ttt not expired, loads 1e9 into first variable and then moves to next CRBasic instruction. If ttt expired, issues aDv! command(s).
See section Alternate Start Concurrent Measurement Command (Cv) (p. 273)
Sensor: responds to aDv! command(s) with data, if any. If no data, loads
NAN into variable.
CR1000: moves to next CRBasic instruction (does not re-issue aCv! command)
CR1000: issues aI! command Send Identification I!
Start Measurement M!, Mv!, MCv! CR1000: issues aMv! command
Sensor: responds with atttnn
CR1000: If nnn = 0 then NAN put in the first element of the array.
CR1000: waits until immediately. ttt
3
seconds (unless a service request is received).
Issues aDv! command(s). If a service request is received, issues aDv!
Sensor: responds with data
CR1000: issues aRv! command Continuous Measurements Rv!, RCv!
Start Verification V! CR1000: issues aV! command
1
See table SDI-12 Commands for Transparent Mode
for complete sensor responses.
2
Use variable replacement in program to use same instance of SDI12Recorder() as issued aCV! (see the CRBasic example Using Alternate
Concurrent Command (aC)
).
3
Note that ttt is local only to the SDIRecorder() instruction. If a second SDIRecorder() instruction is used, it will have its own ttt.
Note aCv and aCv! are different commands — aCv does not end with !.
273
274
Section 7. Installation
The SDIRecorder() aCv command facilitates using the SDI-12 standard Start
Concurrent command ( aCv!) without the back-to-back measurement sequence normal to the CR1000 implementation of aCv!.
Consider an application wherein four SDI-12 temperature sensors need to be nearsimultaneously measured at a five minute interval within a program that scans every five 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 shown in the following CRBasic example:
Public BatteryVolt
Public Temp1, Temp2, Temp3, Temp4
BeginProg
Scan (5,Sec,0,0)
'Non-SDI-12 measurements here
SDI12Recorder (Temp1,1,0,"M!",1.0,0)
SDI12Recorder (Temp2,1,1,"M!",1.0,0)
SDI12Recorder (Temp3,1,2,"M!",1.0,0)
SDI12Recorder (Temp4,1,3,"M!",1.0,0)
NextScan
EndProg
However, the code sequence has three problems:
1. It does not allow measurement of non-SDI-12 sensors at the required frequency because the SDI12Recorder() instruction takes too much time.
2. It does not achieve required five-minute sample rate because each
SDI12Recorder() instruction will take about 95 seconds to complete before the next SDI12Recorder() instruction begins, resulting is a real scan rate of about 6.5 minutes.
3. There is a 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 measurements here
NextScan
SlowSequence
Scan (5,Min,0,0)
SDI12Recorder (Temp(1),1,0,"M!",1.0,0)
SDI12Recorder (Temp(2),1,1,"M!",1.0,0)
SDI12Recorder (Temp(3),1,2,"M!",1.0,0)
Section 7. Installation
SDI12Recorder (Temp(4),1,3,"M!",1.0,0)
NextScan
EndSequence
EndProg
However, problems 2 and 3 still 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 measurements here
NextScan
SlowSequence
Scan (5,Min,0,0)
SDI12Recorder (Temp(1),1,0,"C!",1.0,0)
SDI12Recorder (Temp(2),1,1,"C!",1.0,0)
SDI12Recorder (Temp(3),1,2,"C!",1.0,0)
SDI12Recorder (Temp(4),1,3,"C!",1.0,0)
NextScan
EndProg
A new problem introduced by the C! command, however, is that it causes high power usage by the CR1000. 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 (hard-coded 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 (aC)
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, that is, 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.
aCv
Start alternate concurrent measurement.
Syntax: aCv
275
276
Section 7. Installation
CRBasic Example 55.
Using SDI12Sensor() to Test Cv Command
'This program example demonstrates how to use CRBasic to simulate four SDI-12 sensors. This program can be used to
'produce measurements to test the CRBasic example Using Alternate Concurrent Command (aC)
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) 'Measure CR1000 wiring panel temperature to use as base for
'simulated temperatures Temp(2), Temp(3), and Temp(4).
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
SlowSequence
Do
SDI12SensorSetup (1,5,2,95)
Delay (1,95,Sec)
SDI12SensorResponse (Temp(3))
Loop
EndSequence
Section 7. Installation
SlowSequence
Do
SDI12SensorSetup (1,7,3,95)
Delay (1,95,Sec)
SDI12SensorResponse (Temp(4))
Loop
EndSequence
EndProg
CRBasic Example 56.
Using Alternate Concurrent Command (aC)
'This program example demonstrates the use of the special SDI-12 concurrent measurement
'command (aC) when back-to-back measurements are not desired, as can occur in an application
'that has a tight power budget. To make full use of the aC command, measurement control
'logic is used.
'Declare variables
Dim X
Public RunSDI12
Public Cmd(4)
Public Temp_Tmp(4)
Public Retry(4)
Public IndDone(4)
Public Temp_Meas(4)
Public GroupDone
'Main Program
BeginProg
'Preset first measurement command to C!
For X = 1 To 4
cmd(X) = "C!"
Next X
'Set five-second scan rate
Scan (5,Sec,0,0)
'Other measurements here
'Set five-minute SDI-12 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
277
278
Section 7. Installation
'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 move 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.
ElseIf (Temp_Tmp(X) = NAN) Then 'Comms failed or sensor not attached
cmd(X) = "C!" '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
'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
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 String. CRBasic example Use of an SDI-12
Extended Command
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 customized evaluation of the response. For more
Section 7. Installation information on parsing strings, see Input Programming Basics
CRBasic Example 57.
Using an SDI-12 Extended Command
'This program example demonstrates the use of SDI-12 extended commands. In this example,
'a temperature measurement, tt.tt, is sent to a CH200 Charging Regulator using the command
'XTtt.tt!'. The response from the CH200 should be '0OK', if 0 is the SDI-12 address.
'
'Declare Variables
Public PTemp As Float
Public SDI12command As String
Public SDI12result As String
'Main Program
BeginProg
Scan (20,Sec,3,0)
PanelTemp (PTemp,250)
SDI12command = "XT" & FormatFloat(PTemp,"%4.2f") & "!"
SDI12Recorder (SDI12result,1,0,SDI12command,1.0,0)
NextScan
EndProg
7.9.18.3 SDI-12 Sensor Mode
The CR1000 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 SDI-12
Transparent Mode
issue CRLF ( <Enter> key) until CR1000> prompt appears. Type W and 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.
The SDI12SensorSetup() / SDI12SensorResponse() instruction pair programs the CR1000 to behave as an SDI-12 sensor. A common use of this feature is the transfer of data from the CR1000 to other Campbell Scientific dataloggers over a single-wire interface (terminal configured for SDI-12 to terminal configured for
SDI-12), or to transfer data to a third-party SDI-12 recorder.
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.
279
280
Section 7. Installation
When programmed as an SDI-12 sensor, the CR1000 will respond to SDI-12 commands M, MC, C, CC, R, RC, V, ?, and I. See table SDI-12 Commands for
Transparent Mode
for full command syntax. The following rules apply:
1. A CR1000 can be assigned only one SDI-12 address per SDI-12 port. For example, a CR1000 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 CR1000 will handle additional measurement ( aMx!) commands. When an
SDI-12 recorder issues aMx! commands as shown in CRBasic example SDI-
12 Sensor Setup
measurement results are returned as listed in table SDI-
12 Sensor Setup — Results
CRBasic Example 58.
SDI-12 Sensor Setup
'This program example demonstrates the use of the SDI12SensorSetup()/SDI12SensorResponse()
'instruction pair to program the CR1000 to emulate an SDI-12 sensor. A common use of this
'feature is the transfer of data from the CR1000 to SDI-12 compatible instruments, including
'other Campbell Scientific dataloggers, over a single-wire interface (SDI-12 port to
'SDI-12 port). The recording datalogger simply requests the data using the aD0! command.
Public PanelTemp
Public Batt_volt
Public SDI_Source(10)
BeginProg
Scan (5,Sec,0,0)
PanelTemp (PanelTemp,250)
Battery (batt_volt)
SDI_Source(1) = PanelTemp 'temperature, degrees C
SDI_Source(2) = batt_volt 'primary power, volts dc
SDI_Source(3) = PanelTemp * 1.8 + 32 'temperature, degrees F
SDI_Source(4) = batt_volt 'primary power, volts dc
SDI_Source(5) = PanelTemp 'temperature, degrees C
SDI_Source(6) = batt_volt * 1000 'primary power, millivolts dc
SDI_Source(7) = PanelTemp * 1.8 + 32 'temperature in degrees F
SDI_Source(8) = batt_volt * 1000 'primary power, millivolts dc
SDI_Source(9) = Status.SerialNumber 'serial number
SDI_Source(10) = Status.LithiumBattery 'data backup battery, V
NextScan
SlowSequence
Do
SDI12SensorSetup (10,1,0,1)
Delay (1,500,mSec)
SDI12SensorResponse (SDI_Source)
Loop
EndSequence
EndProg
Section 7. Installation
Table 44. SDI-12 Sensor Setup CRBasic Example — Results
Measurement
Command from
SDI-12 Recorder
0M!
0M0!
0M1!
0M2!
0M3!
0M4!
Source Variables
Accessed from the
CR1000 acting as a
SDI-12 Sensor
Source(1), Source(2)
Same as 0M!
Source(3), Source(4)
Source(5), Source(6)
Source(7), Source(8)
Source(9), Source(10)
Contents of
Source Variables temperature °C, battery voltage temperature °F, battery voltage temperature °C, battery mV temperature °F, battery mV serial number, lithium battery voltage
7.9.18.4 SDI-12 Power Considerations
When a command is sent by the CR1000 to an SDI-12 probe, all probes on the same SDI-12 port will wake up. However, only the probe addressed by the datalogger will respond. All other probes will remain active until the timeout period expires.
Example:
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 C1.
The time line in table Example Power Usage Profile for a Network of SDI-12
Probes
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.
281
282
Section 7. Installation
Table 45. Example Power Usage Profile for a Network of SDI-12 Probes
29
30
•
•
31
15
16
17
•
Time (s) Command
1 1M!
2
•
•
•
14
•
35
•
•
1D0!
•
•
66
•
66
66
0.25
•
66
66
66
3 mA
66
66
•
•
•
•
•
0.25
•
•
66
•
66
66
0.25
•
66
66
66
2 mA
66
66
•
•
•
•
•
0.25
•
•
66
•
66
66
0.25
1 mA
120
120
•
•
•
120
120
66
•
•
•
0.25
Yes
Time
Out
Expires
Yes
All
Probes
Awake
Yes
Yes
7.9.19 String Operations
String operations are performed using CRBasic string functions, as listed in String
Functions
•
•
66
•
66
66
0.25
•
66
66
66
4 mA
66
66
•
•
•
•
•
0.25
264
•
•
•
264
264
1
•
1
•
•
Total mA
318
318
•
•
•
318
318
264
7.9.19.1 String Operators
The table String Operators
lists and describes available string operators.
String operators are case sensitive.
Section 7. Installation
Table 46. 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 as 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:
Note — ASCII code for a = 97, b = 98, c = 99, d = 100, e = 101, and all strings end with NULL.
Difference between NULL and NULL
"abc" - "abc" = 0
Difference between e and c
"abe" - "abc" = 2
Difference between c and b
"ace" - "abe" = 1
Difference between d and NULL
"abcd" - "abc" = 100
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
7.9.19.2 String Concatenation
Concatenation is the building of strings from other strings ("abc123"), characters
("a" or chr()), numbers, or variables. The table String Concatenation Examples
(p.
lists some expressions and expected results. CRBasic example Concatenation of Numbers and Strings
demonstrates several concatenation examples.
When non-string values are concatenated with strings, once a string is encountered, all subsequent operands will first be converted to a string before the
283
284
Section 7. Installation
+ operation is performed. When working with strings, exclusive use of the & operator ensures that no string value will be converted to an integer.
Table 47. String Concatenation Examples
Expression
Str(1) = 5.4 + 3 + " Volts"
Str(2) = 5.4 & 3 & " Volts"
Comments
Add floats, concatenate strings
Concatenate floats and strings
Lng(1) = "123"
Lng(2) = 1+2+"3"
Convert string to long
Add floats to string / convert to long
Lng(3) = "1"+2+3
Lng(4) = 1&2&"3"
Concatenate string and floats
Concatenate floats and string
Result
"8.4 Volts"
"5.43 Volts"
123
33
123
123
CRBasic Example 59.
Concatenation of Numbers and Strings
'This program example demonstrates the concatenation of numbers and strings to variables
'declared As Float and As String.
'
'Declare Variables
Public Num(12) As Float
Public Str(2) As String
Dim I
BeginProg
Scan (1,Sec,0,0)
I = 0 'Set I to zero
'Data type of the following destination variables is Float
'because Num() array is declared As Float.
I += 1 'Increment I by 1 to clock through sequential elements of the Num() array
'As shown in the following expression, if all parameter are numbers, the result
'of using '+' is a sum of the numbers:
Num(I) = 2 + 3 + 4 '= 9
'Following are examples of using '+' and '*' when one or more parameters are strings.
'Parameters are processed in the standard order of operations. In the order of
'operation, once a string or an '&' is processed, all following parameters will
'be processed (concatenated) as strings:
I += 1
Num(I) = "1" + 2 + 3 + 4 '= 1234
I += 1
Num(I) = 1 + "2" + 3 + 4 '= 1234
I += 1
Num(I) = 1 + 2 + "3" + 4 '= 334
I += 1
Num(I) = 1 + 2 + 3 + "4" '= 64
Section 7. Installation
I += 1
Num(I) = 1 + 2 + "3" + 4 + 5 + "6" '= 33456
I += 1
Num(I) = 1 + 2 + "3" + (4 + 5) + "6" '= 3396
I += 1
Num(I) = 1 + 2 + "3" + 4 * 5 + "6" '= 33206
I += 1
Num(I) = 1 & 2 + 3 + 4 '= 1234
I += 1
Num(I) = 1 + 2 + 3 & 4 '= 64
'If a non-numeric string is attempted to be processed into a float destination,
'operations are truncated at that point
I += 1
Num(I) = 1 + 2 + "hey" + 4 + 5 + "6" '= 3
I += 1
Num(I) = 1 + 2 + "hey" + (4 + 5) + "6" '= 3
'The same rules apply when the destination is of data type String, except in the
'case wherein a non-numeric string is encountered as follows. Data type of the
'following destination variables is String because Str() array is declared As String.
I = 0
I += 1
Str(I) = 1 + 2 + "hey" + 4 + 5 + "6" '= 3hey456
I += 1
Str(I) = 1 + 2 + "hey" + (4 + 5) + "6" '= 3hey96
NextScan
EndProg
7.9.19.3 String NULL Character
All strings are automatically NULL terminated. NULL is the same as 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 48. String NULL Character Examples
Expression
LongVar(5) = "#"-""
LongVar(6) = StrComp("#","")
Comments Result
Subtract NULL, ASCII code results 35
Also subtracts NULL 35
Example:
Objective:
Insert a NULL character into a string, and then reconstitute the string.
Given:
Execute:
StringVar(3) = "123456789"
Results:
StringVar(3,1,4) = "" "123<NULL>56789"
StringVar(4) = StringVar(3) "123"
285
286
Section 7. Installation but,
StringVar(3) still = "123<NULL>56789", so,
StringVar(5) = StringVar(3,1,4+1)
'"56789"
StringVar(6) = StringVar(3) + 4 + StringVar(3,1,4+1)
'"123456789"
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.
7.9.19.4 Inserting String Characters
Example:
Objective:
Use MoveBytes() to change "123456789" to "123A56789"
Given:
StringVar(7) = "123456789" 'Result is
"123456789" try (does not work):
StringVar(7,1,4) = "A" 'Result is
"123A<NULL>56789"
Instead, use:
StringVar(7) = MoveBytes(Strings(7,1,4),0,"A",0,1) 'Result is
"123A56789"
7.9.19.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 49. Extracting String Characters
Expression
StringVar(3) = "Go Jazz"
Comments
Loads string into variable
StringVar(4) = StringVar(3,1,4) Extracts single character
Result
StringVar(3) = "Go Jazz"
StringVar(4) = "J"
Section 7. Installation
7.9.19.6 String Use of ASCII / ANSII Codes
Table 50. Use of ASCII / ANSII Codes Examples
Expression Comments
LongVar (7) = ASCII("#")
Result
35
LongVar (8) = ASCII("*")
LongVar (9) = "#"
LongVar (1) = "#"-""
Cannot be converted to Long with
NULL
Can be converted to Long without
NULL
7.9.19.7 Formatting Strings
Table 51. Formatting Strings Examples
Expression
Str(1)=123e4
Str(2)=FormatFloat(123e4,"%12.2f")
Str(3)=FormatFloat(Values(2)," The battery is %.3g Volts ")
Str(4)=Strings(3,1,InStr(1,Strings(3),"The battery is ",4))
Str(5)=Strings(3,1,InStr(1,Strings(3),"is ",2) + 3)
Str(6)=Replace("The battery is 12.4 Volts"," is "," = ")
Str(7)=LTrim("The battery is 12.4 Volts")
Str(8)=RTrim("The battery is 12.4 Volts")
Str(9)=Trim("The battery is 12.4 Volts")
Str(10)=UpperCase("The battery is 12.4 Volts")
Str(12)=Left("The battery is 12.4 Volts",5)
Str(13)=Right("The battery is 12.4 Volts",7)
42
NAN
35
Result
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
CRBasic Example 60.
Formatting Strings
'This program example demonstrates the formatting of string variables. To run the
'demonstration, send this program to the CR1000. String formatting will occur
'automatically.
'Objective:
'Extract "12.4 Volts" from the string "The battery is 12.4 Volts"
Public StringVar As String
BeginProg
'Note line continuation character _
StringVar() = 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"))
EndProg
287
288
Section 7. Installation
7.9.19.8 Formatting String Hexadecimal Variables
Table 52. Formatting Hexadecimal Variables — Examples
Expression
CRLFNumeric(1) = &H0d0a
Comment
Add leading zero to hex step 1
StringVar(20) = "0" & Hex(CRLFNumeric) Add leading zero to hex step 2
CRLFNumeric(2) = HexToDec(Strings(20)) Convert Hex string to Float
Result
3338
0D0A
3338.00
7.9.20 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.
• To ease integration of proven code segments into new programs.
• To compartmentalize programs to improve organization.
By executing the Call() instruction, the main program can call a subroutine from anywhere in the program.
A subroutine has access to all global variables
Variables local
to a subroutine are declared within the subroutine instruction. Local variables can be aliased (as of 4/2013; OS 26) but 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 variables declared as Public or Dim. See
Expressions with Numeric Data Types
for conversion types.
Note To avoid programming conflicts, pass information into local variables and / or define some global variables and use them exclusively by a subroutine.
CRBasic example Subroutine with Global and Local Variables
shows the use of global and local variables. 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.
Section 7. Installation
CRBasic Example 61.
Subroutine with Global and Local Variables
'This program example demonstrates the use of global and local variables with subroutines.
'
'Global variables are those declared anywhere in the program as Public or Dim.
'Local variables are those declared in the Sub() instruction.
'Program Function: Passes two variables to a subroutine. The 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
7.9.21 TCP/IP — Details
Related Topics:
• TCP/IP — Overview
• TCP/IP — Details
• TCP/IP — Instructions
• TCP/IP Links — List
289
290
Section 7. Installation
The following TCP/IP protocols are supported by the CR1000 when using network-links
that use the resident IP stack or when using a cell modem with the PPP/IP key enabled. More information on some of these protocols is in the following sections.
• DHCP
• DNS
• FTP
• HTML
• HTTP
•
• Micro-serial server
• NTCIP
• NTP
• PakBus over TCP/IP
• Ping
• POP3
• SMTP
• SNMP
• Telnet
• Web API
• XML
The most up-to-date information on implementing these protocols is contained in
CRBasic Editor Help. For a list of CRBasic instructions, see the appendix
TCP/IP
Read More Specific information concerning the use of digital-cellular modems for TCP/IP can be found in Campbell Scientific manuals for those modems. For information on available TCP/IP/PPP devices, refer to the appendix Network
Links
for model numbers. Detailed information on use of TCP/IP/PPP devices is found in their respective manuals (available at www.campbellsci.com
http://www.campbellsci.com) and CRBasic Editor Help.
7.9.21.1 PakBus Over TCP/IP and Callback
Once the hardware has been configured, basic PakBus ® communication over
TCP/IP is possible. These functions include the following:
• Sending programs
• Retrieving programs
• Setting the CR1000 clock
• Collecting data
• Displaying the current record in a data table
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 networklink model numbers is found in the appendix Network Links
Section 7. Installation
7.9.21.2 Default HTTP Web Server
The CR1000 has a default home page built into the operating system. The home page can be accessed using the following URL: http:\\ipaddress:80
Note Port 80 is implied if the port is not otherwise specified.
As shown in the figure, Preconfigured HTML Home Page
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.
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 CR1000 drives.
To copy files to these drives, choose File Control from the datalogger support
software
menu.
Figure 73. Preconfigured HTML Home Page
7.9.21.3 Custom HTTP Web Server
Although the default home page cannot be accessed for editing, it can be replaced with the HTML code of a customized web 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 CR1000 drive with File Control. Deleting
default.html will cause the CR1000 to use the original, default home page.
The CR1000 can be programmed to generate HTML or XML code that can be viewed by a web browser. CRBasic example HTML
shows how to use the
CRBasic instructions WebPageBegin() / WebPageEnd and HTTPOut() to create HTML code. Note that for HTML code requiring the use of quotation marks, CHR(34) is used, while regular quotation marks are used to define the
291
292
Section 7. Installation 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 is replaced by using
WebPageBegin to create a file called default.html. The new default home page created by the program appears as shown in the figure Home Page Created using
WebPageBegin() Instruction
The Campbell Scientific logo in the web page comes from a file called
SHIELDWEB2.JPG that must be transferred from the PC to the CR1000 CPU: drive using File Control in the datalogger support software.
A second web page, shown in figure Customized Numeric-Monitor Web Page
(p.
called "monitor.html" was created by the example program that contains links to the CR1000 data tables.
Figure 74. Home Page Created Using WebPageBegin() Instruction
Figure 75. Customized Numeric-Monitor Web Page
Section 7. Installation
CRBasic Example 62.
Custom Web Page HTML
'This program example demonstrates the creation of a custom web page that resides in the
'CR1000. In this example program, the default home page is replaced by using WebPageBegin to
'create a file called default.html. The graphic in the web page (in this case, the Campbell
'Scientific logo) comes from a file called SHIELDWEB2.JPG. The graphic file must be copied to
'the CR1000 CPU: drive using File Control in the datalogger support software. A second web
'page is created that contains links to the CR1000 data tables.
'NOTE: The "_" character used at the end of some lines allows a code statement to be wrapped
'to the next line.
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 CR1000 Datalogger</title>")
HTTPOut ("<h2>Welcome To the Campbell Scientific CR1000 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>")
293
294
Section 7. Installation
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 CR1000 Datalogger Tables</title>")
HTTPOut ("<p><h2>CR1000 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
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
7.9.21.4 FTP Server
The CR1000 automatically runs an FTP server. This allows Windows ® Explorer ® to access the CR1000 file system with FTP, with drives on the CR1000 being mapped into directories or folders. The root directory on the CR1000 can be any drive, but the USR: drive is usually preferred. USR: is a drive created by allocating memory in the USR: Drive Size box on the Deployment | Advanced tab of the CR1000 service in DevConfig. Files can be copied / pasted between drives. Files can be deleted through FTP.
7.9.21.5 FTP Client
The CR1000 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. Refer to a manual for a Campbell Scientific network link (see the appendix Network Links
), available at
www.campbellsci.com, or CRBasic Editor Help for details and sample programs.
Section 7. Installation
7.9.21.6 Telnet
Telnet is used to access the same commands that are available through the support software 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
CR1000.
7.9.21.7 SNMP
Simple Network Management Protocol (SNMP) is a part of the IP suite used by
NTCIP and RWIS for monitoring road conditions. The CR1000 supports SNMP when a network device is attached.
7.9.21.8 Ping (IP)
Ping can be used to verify that the IP address for the network device connected to the CR1000 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
CR1000.
7.9.21.9 Micro-Serial Server
The CR1000 can be configured to allow serial communication over a TCP/IP port.
This is useful when communicating with a serial sensor over Ethernet with microserial 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 the appendix Network Links
7.9.21.10 Modbus TCP/IP
The CR1000 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. See Modbus
7.9.21.11 DHCP
When connected to a server with a list of IP addresses available for assignment, the CR1000 will automatically request and obtain an IP address through the
Dynamic Host Configuration Protocol (DHCP). Once the address is assigned, use
DevConfig, PakBusGraph, Connect, or the CR1000KD Keyboard Display to look in the CR1000 Status table to see the assigned IP address. This is shown under the field name IPInfo.
295
296
Section 7. Installation
7.9.21.12 DNS
The CR1000 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.
7.9.21.13 SMTP
Simple Mail Transfer Protocol (SMTP) is the standard for e-mail transmissions.
The CR1000 can be programmed to send e-mail messages on a regular schedule or based on the occurrence of an event.
7.9.22 Wind Vector
The WindVector() instruction 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 supported. Vector direction and standard deviation of vector direction can be calculated weighted or unweighted for wind speed.
7.9.22.1 OutputOpt Parameters
In the CR1000 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 number. The array uses the name of the Speed/East variable as its base. Table OutputOpt
Options
lists and describes OutputOpt options.
Table 53. WindVector() OutputOpt Options
Option
0
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
2
3
WVc(1): Mean horizontal wind speed (S)
WVc(2): Unit vector mean wind direction (Θ1)
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.
WVc(1): Unit vector mean wind direction (Θ1)
Section 7. Installation
Table 53. WindVector() OutputOpt Options
Option
4
Description (WVc() is the Output Array)
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.
7.9.22.2 Wind Vector Processing
WindVector() uses a zero-wind-speed measurement when processing scalar wind speed only. Because vectors require magnitude and direction, measurements at zero wind speed are not used in vector speed or direction calculations. This means, for example, that manually-computed hourly vector directions from 15 minute vector directions will not agree with CR1000-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.
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-output interval is 60 minutes, the standard deviation is calculated from all 3600 scans when the subinterval 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.
297
298
Section 7. Installation
The EPA recommends hourly standard deviation of horizontal wind direction
(sigma theta) be computed from four fifteen-minute sub-intervals.
7.9.22.2.1 Measured Raw Data
• S i
: horizontal wind speed
• Θ i
: horizontal wind direction
• Ue i
: east-west component of wind
• Un i
: north-south component of wind
• N: number of samples
7.9.22.2.2 Calculations
Input Sample Vectors
Figure 76. Input Sample Vectors
In figure Input Sample Vectors
the short, head-to-tail vectors are the input sample vectors described by s i
and Θ i
, the sample speed and direction, or by Ue i and Un i
, the east and north components of the sample vector. At the end of datastorage 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,
Section 7. Installation where or, in the case of orthogonal sensors where
Standard deviation of wind direction (Yamartino algorithm) where, and Ux and Uy are as defined above.
Mean Wind Vector
Resultant mean horizontal wind speed, Ū:
Figure 77. Mean Wind-Vector Graph where for polar sensors:
299
300
Section 7. Installation 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, as shown in the figure Standard
Deviation of Direction
that where
Standard Deviation of Direction
Figure 78. Standard Deviation of Direction
The Taylor Series for the Cosine function, truncated after 2 terms is:
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 s i
;
Solving for (Θ i
') 2 , one obtains;
Section 7. Installation
Summing (Θ i
') 2 over N samples and dividing by N yields the variance of Θu.
Note 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 Campbell Scientific; 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).
301
8. Operation
Reading List
• Quickstart
• Specifications
• Installation
• Operation
8.1 Measurements — Details
Related Topics:
• Sensors — Quickstart
• Measurements — Overview
• Measurements — Details
• Sensors — Lists
Several features give the CR1000 the flexibility to measure most sensor types.
Contact a Campbell Scientific application engineer if assistance is required in assessing CR1000 compatibility to a specific application or sensor type. Some sensors require precision excitation or a source of power. See the section
Switched Voltage Output — Details
8.1.1 Time Keeping — Details
Related Topics:
• Time Keeping — Overview
• Time Keeping — Details
Measurement of time is an essential function of the CR1000. Time measurement with the on-board clock enables the CR1000 to attach time stamps to data, measure the interval between events, and time the initiation of control functions.
8.1.1.1 Time Stamps
A measurement without an accurate time reference has little meaning. Data on the CR1000 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 CR1000. 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.
303
304
Section 8. Operation
• data processed into averages, maxima, minima, and so forth 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 in the scan before time-consuming code.
• Programming the CR1000 such that the time stamp reflects the system time rather than the scan time. When CallTable() is executed from within the
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
shows the basic code requirements. The DataTime() instruction is a more recent introduction that facilitates time stamping with system time. See Data Table
Declarations
and CRBasic Editor Help for more information.
CRBasic Example 63.
Time Stamping with System Time
'This program example demonstrates the time stamping of data with system time instead of
'the default use of scan time (time at which a scan started).
'
'Declare Variables
Public value
'Declare data table
DataTable (Test,True,1000)
Sample (1,Value,FP2)
EndTable
SequentialMode
BeginProg
Scan (1,Sec,10,0)
'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 time stamp
SlowSequence
Do
WaitTriggerSequence
CallTable (Test)
Loop
EndProg
Section 8. Operation
Other time-processing CRBasic instructions are governed by these same rules.
Consult CRBasic Editor Help for more information on specific instructions.
8.1.2 Analog Measurements — Details
Related Topics:
• Analog Measurements — Overview
• Analog Measurements — Details
The CR1000 measures the following sensor analog output types:
• Voltage o Single-ended o Differential
• Current (using a resistive shunt)
• Resistance
• Full-bridge
• Half-bridge
Sensor connection is to H/L] terminals configurable for differential (DIFF) or single-ended ( SE) inputs. For example, differential channel 1 is comprised of terminals 1H and 1L, with 1H as high and 1L as low.
8.1.2.1 Voltage Measurements — Details
Related Topicss:
• Voltage Measurements — Specifications
• Voltage Measurements — Overview
• Voltage Measurements — Details
8.1.2.1.1 Voltage Measurement Mechanics
Measurement Sequence
An analog-voltage measurement, as illustrated in the figure Simplified Voltage
Measurement Sequence
proceeds as follows:
1. Switch
2. Settle
3. Amplify
4. Integrate
5. A to D (successive approximation)
6. Measurement scaled with multiplier and offset
7. Scaled value placed in memory
305
306
Section 8. Operation
FIGURE. Simplified Voltage Measurement Sequence -- 8 10 30
Figure 79. Simplified voltage measurement sequence
Voltage measurements are made using a successive approximation A-to-D
converter to achieve a resolution of 14 bits. Prior to the A-to-D, a high impedance programmable-gain instrumentation amplifier (PGIA) amplifies the signal. See figure Programmable Gain Input Amplifier (PGIA)
The
CRBasic program controls amplifier gain and configuration — either single-ended input or differential input. Internal multiplexers route individual terminals to the
PGIA.
Timing of measurement tasks is precisely controlled. The measurement schedule is determined at compile time and loaded into memory.
Using two different voltage-measurement instructions with the same voltage range takes about twice as long as using one instruction with two repetitions.
Parameters listed in table CRBasic Parameters Varying Measurement Sequence
and Timing
vary sequence and timing of voltage measurement instructions.
Figure 80. Programmable Gain Input Amplifier (PGIA)
A voltage measurement proceeds as follows:
1. Set PGIA gain for the voltage range selected with the CRBasic measurement instruction parameter Range.
2. Turn on excitation to the level selected with ExmV.
3. Multiplex selected terminals (InChan) to the PGIA and delay for the entered settling time (SettlingTime).
4. Integrate the signal (see section Measurement Integration
) and perform the A-to-D conversion.
5. Repeat for excitation reversal and input reversal as determined by parameters
RevEx and RevDiff.
6. Apply multitplier (Mult) and offset (Offset) to measured result.
Section 8. Operation
The CR1000 measures analog voltage by integrating the input signal for a fixed duration and then holding the integrated value during the successive approximation analog-to-digital (A-to-D) conversion. The CR1000 can make and store measurements from up to eight differential or 16 single-ended channels configured from H/L terminals at the minimum scan interval of 10 ms (100 Hz) using fast-measurement-programming techniques as discussed in Measurements:
Faster Analog Rates
The maximum conversion rate is 2000 per second (2 kHz) for measurements made on a one single-ended channel.
Table 54. CRBasic Parameters Varying Measurement Sequence and
Timing
CRBasic Parameter
MeasOfs
SettlingTime
Integ
RevDiff
RevEx
Description
Correct ground offset on single-ended measurements.
Sensor input settling time.
Duration of input signal integration.
Reverse high and low differential inputs.
Reverse polarity of excitation voltage.
Measurement Integration
Integrating the signal removes noise that creates error in the measurement. Slow integration removes more noise than fast integration. Integration time can be modified to reject 50 Hz and 60 Hz mains-power line noise.
Fast integration may be preferred at times to,
• minimize time skew between successive measurements.
• maximize throughput rate.
• maximize life of the CR1000 power supply.
• minimize polarization of polar sensors such as those for measuring conductivity, soil moisture, or leaf wetness. Polarization may cause measurement errors or sensor degradation. improve accuracy of an LVDT measurement. The induced voltage in an LVDT decays with time as current in the primary coil shifts from the inductor to the series resistance; a long integration time may result in most of signal decaying before the measurement is complete.
Single-Ended Measurements — Details
Related Topics:
• Single-Ended Measurements — Overview
• Single-Ended Measurements — Details
With reference to the figure Programmable Gain Input Amplifier (PGIA)
during a single-ended measurement, the high signal (H) is routed to V+. The low signal (L) is automatically connected internally to signal ground with the low signal tied to ground ( ) at the wiring panel. V+ corresponds to odd or even
307
308
Section 8. Operation numbered SE terminals on the CR1000 wiring panel. The single-ended configuration is used with the following CRBasic instructions:
• VoltSE()
• BrHalf()
• BrHalf3W()
• TCSE()
• Therm107()
• Therm108()
• Therm109()
• Thermistor()
Related Topics:
• Differential Measurements — Overview
• Differential Measurements — Details
Differential Measurements — Details
Using the figure Programmable Gain Input Amplifier (PGIA)
for reference, during a differential measurement, the high signal (H) is routed to V+ and the low signal (L) is routed to V–.
An H terminal of an H/L terminal pair differential corresponds to V+. The L terminal corresponds to V–. The differential configuration is used with the following CRBasic instructions:
• VoltDiff()
• BrFull()
• BrFull6W()
• BrHalf4W()
• TCDiff()
8.1.2.1.2 Voltage Measurement Limitations
Caution Sustained voltages in excess of ±8.6 V applied to terminals configured for analog input can temporarily corrupt all analog measurements.
Warning Sustained voltages in excess of ±16 V applied to terminals configured for analog input will damage CR1000 circuitry.
Voltage Ranges
Related Topicss:
• Voltage Measurements — Specifications
• Voltage Measurements — Overview
• Voltage Measurements — Details
In general, use the smallest fixed-input range that accommodates the full-scale output of the sensor. This results in the best measurement accuracy and resolution.
The CR6 has fixed input ranges for voltage measurements and an auto-range to automatically determine the appropriate input voltage range for a given measurement. The table Analog Voltage Input Ranges and Options
lists these input ranges and codes.
Section 8. Operation
An approximate 9% range overhead exists on fixed input voltage ranges. In other words, over-range on the ±2500 mV input range occurs at approximately 2725 mV and –2725 mV. The CR1000 indicates a measurement over-range by returning a NAN (not a number) for the measurement.
Automatic Range Finding
For signals that do not fluctuate too rapidly, range argument AutoRange allows the CR1000 to automatically choose the voltage range. AutoRange makes two measurements. The first measurement determines the range to use. It is made with a 250 µs integration on the ±5000 mV range. The second measurement is made using the range determined from the first. Both measurements use the settling time entered in the SettlingTime parameter. Auto-ranging optimizes resolution but takes longer than a measurement on a fixed range because of the two-measurement sequences.
An auto-ranged 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.
Use auto-ranging for a signal that occasionally exceeds a particular range, for example, a type-J thermocouple measuring a temperature usually less than 476 °C
(±25 mV range) but occasionally as high as 500 °C (±250 mV range).
AutoRange should not be used for rapidly fluctuating signals, particularly signals traversing multiple voltage ranges rapidly. The possibility exists that the signal can change ranges between the internal range check and the actual measurement.
Table 55. Analog Voltage Input Ranges and Options
Range Code
mV5000 mV2500
1 mV250
2 mV25
2
Description measures voltages between ±5000 mV measures voltages between ±2500 mV measures voltages between ±250 mV measures voltages between ±25 mV mV7_5
2 mV2_5
2
AutoRange
3 measures voltages between ±7.5 mV measures voltages between ±2.5 mV datalogger determines the most suitable range
1
Append with C to enable common-mode null / open-input detect and set excitation to full-scale
(~2700 mV) (Example: mV2500)
2
Append with C to enable common-mode null / open-input detect (Example: mV25C)
3
Append with C to enable common-mode null / open-input detect on ranges ≤ ±250 mV, or just common-mode null on ranges > ±250 mV (Example: AutoRangeC)
309
310
Section 8. Operation
Input Limits / Common-Mode Range
Related Topicss:
• Voltage Measurements — Specifications
• Voltage Measurements — Overview
• Voltage Measurements — Details
Note This section contains advanced information not required for normal operation of the CR1000.
Summary
• Voltage input limits for measurement are ±5 Vdc. Input Limits is the specification listed in the section Specifications
• Common-mode range is not a fixed number. It varies with respect to the magnitude of the input voltage.
• The CR1000 has features that help mitigate some of the effects of signals that exceed the Input Limits specification or the common-mode range.
With reference to the figure PGIA with Input-Signal Decomposition
the
PGIA processes the voltage difference between V+ and V–. It ignores the common-mode voltage, or voltages that are common to both inputs. The figure shows the applied input voltage decomposed into a common-mode voltage (V and the differential-mode component (V dm
) of a voltage signal. V average of the voltages on the V+ and V– inputs. So, V cm cm
is the cm
= (V+ + V–)/2 or the voltage remaining on the inputs when V dm
= 0. The total voltage on the V+ and
V– inputs is given as V+ = V cm
+ V dm
/2, and V– = V cm
– V dm
/2, respectively.
)
The PGIA ignores or rejects common-mode voltages as long as voltages at V+ and V– are within the Input Limits specification, which for the CR6 is ±5 Vdc relative to ground. Input voltages wherein V+ or V–, or both, are beyond the ±5
Vdc limit may suffer from undetected measurement errors. The Common-Mode
Range defines the range of common-mode voltages that are not expected to induce undetected measurement errors. Common-Mode Range is different than
Input Limits when the differential mode voltage in non-negligible. The following relationship is derived from the PGIA figure as:
Common-Mode Range = ±5 Vdc – |V dm
/2|.
The conclusion follows that the common-mode range is not a fixed number, but instead decreases with increasing differential voltage. For differential voltages that are small compared to the input limits, common-mode range is essentially equivalent to Input Limits. Yet for a 5000 mV differential signal, the commonmode range is reduced to ±2.5 Vdc, whereas Input Limits are always ±5 Vdc.
Consequently, the term Input Limits is used to specify the valid voltage range of the V+ and V– inputs into the PGIA.
Figure 81. PGIA with Input-Signal Decomposition
Section 8. Operation
–
8.1.2.1.3 Voltage Measurement Quality
Read More Consult the following technical papers at www.campbellsci.com/app-
notes (http://www.campbellsci.com/app-notes) for in-depth treatments of several topics addressing voltage measurement quality:
• Preventing and Attacking Measurement Noise Problems
• Benefits of Input Reversal and Excitation Reversal for Voltage Measurements
• Voltage Measurement Accuracy, Self- Calibration, and Ratiometric
Measurements
• Estimating Measurement Accuracy for Ratiometric Measurement Instructions.
The following topics discuss methods of generally improving voltage measurements. Related information for special case voltage measurements
(thermocouples
current loops
resistance
and strain
is located in sections for those measurements.
Single-Ended or Differential?
Deciding whether a differential or single-ended measurement is appropriate is usually, by far, the most important consideration when addressing voltage measurement quality. The decision requires trade-offs of accuracy and precision, noise cancelation, measurement speed, available measurement hardware, and fiscal constraints.
In broad terms, analog voltage is best measured differentially because these measurements include noise reduction features, listed below, that are not included in single-ended measurements.
• Passive Noise Rejection o No voltage reference offset o Common-mode noise rejection, which filters capacitively coupled noise
• Active Noise Rejection o Input reversal
̶ Review Input and Excitation Reversal
for details
̶ Increases by twice the input reversal signal integration time
311
312
Section 8. Operation
Reasons for using single-ended measurements, however, include:
• Not enough differential terminals available. Differential measurements use twice as many H/L] terminals as do single-ended measurements.
• Rapid sampling is required. Single-ended measurement time is about half that of differential measurement time.
• Sensor is not designed for differential measurements. Many Campbell
Scientific sensors are not designed for differential measurement, but the draw backs of a single-ended measurement are usually mitigated by large programmed excitation and/or sensor output voltages.
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 as single-ended without a significant reduction in accuracy or precision.
Sensors with a 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, which can exceed 2500 °C, a single-ended measurement may be appropriate. If sensors require differential measurement, but adequate input terminals are not available, an analog multiplexer should be acquired to expand differential input capacity. Refer to the appendix Analog Multiplexers
for information concerning available multiplexers.
Because a single-ended measurement is referenced to CR1000 ground, any difference in ground potential between the sensor and the CR1000 will result in an error in the measurement. For example, if the measuring junction of a copperconstantan 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 CR1000 is grounded, the measured voltage will be 1 mV greater than the true thermocouple output, or report a temperature that is approximately 25 °C too high. A common problem with ground-potential difference occurs in applications wherein external, signal-conditioning circuitry is powered by the same source as the CR1000, 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. So, as a precaution, 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.
Electronic Noise
Electronic "noise" can cause significant error in a voltage measurement, especially when measuring voltages less than 200 mV. So long as input limitations are observed, the PGIA ignores voltages, including noise, that are common to each side of a differential-input pair. This is the common-mode voltage. Ignoring (rejecting or canceling) the common-mode voltage is an essential feature of the differential input configuration that improves voltage measurements.
Figure PGIA with Input-Signal Decomposition
illustrates the commonmode component (V cm
) and the differential-mode component (V dm
) of a voltage signal. V cm
is the average of the voltages on the V+ and V– inputs. So, V cm
=
Section 8. Operation
(V+ + V–)/2 or the voltage remaining on the inputs when V dm voltage on the V+ and V– inputs is given as V+ = V cm
V dm
/2, respectively.
+ V dm
= 0. The total
/2, and V
L
= V cm
–
Measurement Accuracy
Read More For an in-depth treatment of accuracy estimates, see the technical paper Measurement Error Analysis available at www.campbellsci.com/app-notes
(http://www.campbellsci.com/app-notes).
Accuracy describes the difference between a measurement and the true value.
Many factors affect accuracy. This section discusses the affect percent-orreading, offset, and resolution have on the accuracy of the measurement of an analog-voltage sensor signal. Accuracy is defined as follows: accuracy = percent-of-reading + offset where percents-of-reading are tabulated in the table Analog-Voltage Measurement
Accuracy
and offsets are tabulated in the table Analog-Voltage
Measurement Offsets
Note Error discussed in this section and error-related specifications of the
CR1000 do not include error introduced by the sensor or by the transmission of the sensor signal to the CR1000.
Table 56. Analog-Voltage Measurement Accuracy 1
0 to 40 °C –25 to 50 °C
–55 to 85 °C
2
±(0.06% of reading + offset) ±(0.12% of reading + offset)
1
Assumes the CR1000 is within factory specifications
2
Available only with purchased extended temperature option (-XT)
±(0.18% of reading + offset)
Table 57. Analog-Voltage Measurement Offsets
Differential Measurement
With Input Reversal
1.5 • Basic Resolution + 1.0
µ V
Differential Measurement
Without Input Reversal
Single-Ended
3 • Basic Resolution + 2.0 µV 3 • Basic Resolution + 3.0 µV
Note — the value for Basic Resolution is found in the table Analog-Voltage Measurement
Resolution
Table 58. Analog-Voltage Measurement Resolution
Input
Voltage Range
(mV)
± 5000
Differential
Measurement
With Input Reversal
( µ V)
667
Basic Resolution
( µ V)
1333
± 2500 333 667
± 250
25
33.3
3.33
66.7
6.7
313
314
Section 8. Operation
7.5 1.0 2.0
2.5 0.33 0.67
Note — see Specifications
for a complete tabulation of measurement resolution
As an example, figure Voltage Measurement Accuracy Band Example
shows changes in accuracy as input voltage changes on the ±2500 input range.
Percent-of-reading is the principle component, so accuracy improves as input voltage decreases. Offset is small, but could be significant in applications wherein the sensor-signal voltage is very small, such as is encountered with thermocouples.
Offset depends on measurement type and voltage-input range. Offsets equations are tabulated in table Analog Voltage Measurement Offsets
For example, for a differential measurement with input reversal on the ±5000 mV input range, the offset voltage is calculated as follows: offset = 1.5 • Basic Resolution + 1.0 µV
= (1.5 • 667 µV) + 1.0 µV
= 1001.5 µV where Basic Resolution is the published resolution is taken from the table Analog-
Voltage Measurement Resolution
Figure 82. Example voltage measurement accuracy band, including the effects of percent of reading and offset, for a differential measurement with input reversal at a temperature between 0 to 40 °C.
Section 8. Operation
Measurement Accuracy Example
The following example illustrates the effect percent-of-reading and offset have on measurement accuracy. The effect of offset is usually negligible on large signals:
Example:
• Sensor-signal voltage: ≈2500 mV
• CRBasic measurement instruction: VoltDiff()
• Programmed input-voltage range (Range): mV2500 (±2500 mV)
• Input measurement reversal (RevDiff): True
• CR1000 circuitry temperature: 10 °C
Accuracy of the measurement is calculated as follows: accuracy = percent-of-reading + offset where percent-of-reading = 2500 mV • ±0.06%
= ±1.5 mV and offset = (1.5 • 667 µV) + 1 µV
= 1.00 mV
Therefore, accuracy = ±1.5 mV + 1.00 mV
= ±2.5 mV
Integration
The CR1000 incorporates circuitry to perform an analog integration on voltages to be measured prior to the A-to-D
conversion. Integrating the the analog signal removes noise that creates error in the measurement. Slow integration removes more noise than fast integration. When the duration of the integration matches the duration of one cycle of ac power mains noise, that noise is filtered out. The table Analog Measurement Integration
lists valid integration duration arguments.
Faster integration may be preferred to achieve the following objectives:
• Minimize time skew between successive measurements
• Maximize throughput rate
• Maximize life of the CR1000 power supply
• Minimize polarization of polar sensors such as those for measuring conductivity, soil moisture, or leaf wetness. Polarization may cause measurement errors or sensor degradation.
• Improve accuracy of an LVDT measurement. The induced voltage in an
LVDT decays with time as current in the primary coil shifts from the inductor to the series resistance; a long integration may result in most of signal decaying before the measurement is complete.
Read More See White Paper "Preventing and Attacking Measurement Noise
Problems" at www.campbellsci.com.
315
Section 8. Operation
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. 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.
Table 59. Analog Measurement Integration
Integration Time (ms)
0 to 16000 µs
16.667 ms
20 ms
Integration Parameter
Argument
0 to 16000
_60Hz
_50Hz
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. CR1000 voltage measurements can be programmed to reject (filter) 50 Hz or 60 Hz related noise.
Noise is rejected by using a signal integration time that is relative to the length of the ac noise cycle, as illustrated in the figure Ac Power-Line Noise Rejection
Techniques
FIGURE. Ac power line noise rejection techniques -- 8 10 30
Figure 83. Ac-Power Noise-Rejection Techniques
Comments
250 µs is considered fast and normally the minimum
Filters 60 Hz noise
Filters 50 Hz noise
316
The CR1000 rejects ac power line noise on all voltage ranges except mV5000 and
mV2500 by integrating the measurement over exactly one full ac cycle before A-
Section 8. Operation to-D
conversion as listed in table ac Noise Rejection on Small Signals
Table 60. Ac Noise Rejection on Small Signals 1
Ac Power Line
Frequency
60 Hz
Measurement Integration
Duration
16.667 ms
CRBasic Integration Code
_60Hz
50 Hz 20 ms
1
Applies to all analog input voltage ranges except mV2500 and mV5000.
_50Hz
If rejecting ac-line noise when measuring with the 2500 mV (mV2500) and 5000 mV (mV5000) ranges, the CR1000 makes two fast measurements separated in time by one-half line cycle. A 60 Hz half cycle is 8333 µs, so the second measurement must start 8333 µs after the first measurement integration began.
The A-to-D conversion time is approximately 170 µs, leaving a maximum inputsettling time of approximately 8160 µs (8333 µs – 170 µs). If the maximum input-settling time is exceeded, 60 Hz line-noise rejection will not occur. For 50
Hz rejection, the maximum input settling time is approximately 9830 µs (10,000
µs – 170 µs). The CR1000 does not prevent or warn against setting the settling time beyond the half-cycle limit. Table ac Noise Rejection on Large Signals
(p.
lists details of the half-cycle ac-power line-noise rejection technique.
Table 61. Ac Noise Rejection on Large Signals 1
Ac-Power Line
Frequency
60 Hz
Measurement
Integration
Time
250 μs • 2
CRBasic
Integration
Code
_60Hz
Default
Settling
Time
3000 μs
Maximum
Recommended
Settling Time
8330 μs
2
50 Hz 250 μs • 2 _50Hz 3000 μs 10000 μs
1
Applies to analog input voltage ranges mV2500 and mV5000.
2
Excitation time and settling time are equal in measurements requiring excitation. The CR1000 cannot excite VX excitation terminals during A-to-D conversion. The one-half-cycle technique with excitation limits the length of recommended excitation and settling time for the first measurement to one-half-cycle. The CR1000 does not prevent or warn against setting a settling time beyond the one-half-cycle limit. For example, a settling time of up to 50000 µs can be programmed, but the CR1000 will execute the measurement as follows:
1. CR1000 turns excitation on, waits 50000 µs, and then makes the first measurement.
2. During A-to-D, CR1000 turns off excitation for ≈170 µs.
3. Excitation is switched on again for one-half cycle, then the second measurement is made.
Restated, when the CR1000 is programmed to use the half-cycle 50 Hz or 60 Hz rejection techniques, 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 one-half cycle. This causes a truncated second excitation. Depending on the sensor used, a truncated second excitation may cause measurement errors.
Signal-Settling Time
Settling time allows an analog voltage signal to settle closer to the true magnitude prior to measurement. To minimize measurement error, signal settling is needed when a signal has been affected by one or more of the following:
• A small transient originating from the internal multiplexing that connects a
CR1000 terminal with measurement circuitry
317
318
Section 8. Operation
• A relatively large transient induced by an adjacent excitation conductor on the signal conductor, if present,because of capacitive coupling during a bridge measurement
• Dielectric absorption. 50 Hz or 60 Hz integrations require a relatively long reset time of the internal integration capacitor before the next measurement.
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 fixed-input capacitance (3.3 nfd) of the CR1000.
Rise and decay waveforms are exponential. Figure Input Voltage Rise and
Transient Decay
shows rising and decaying waveforms settling closer to the true signal magnitude, V so
. The SettlingTime parameter of an analog measurement instruction allows tailoring of measurement instruction settling times with 100 µs resolution up to 50000 µs.
Programmed settling time is a function of arguments placed in the SettlingTime and Integ parameters of a measurement instruction. Argument combinations and resulting settling times are listed in table CRBasic Measurement Settling Times
(p.
Default settling times (those resulting when SettlingTime = 0) provide sufficient settling in most cases. Additional settling time is often programmed when measuring high-resistance (high-impedance) sensors or when sensors connect to the input terminals 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 CR1000 to perform the instruction.
Figure 84. Input-voltage rise and transient decay
Table 62. CRBasic Measurement Settling Times
SettlingTime
Argument
0
0
0 integer ≥ 100
Integ
Argument
250
_50Hz
_60Hz integer
Resultant
Settling Time
1
450 µs
3 ms
3 ms
μs entered in SettlingTime argument
Section 8. Operation
Table 62. CRBasic Measurement Settling Times
SettlingTime
Argument
Integ
Argument
Resultant
Settling Time
1
1
450 µs is the minimum settling time required to meet CR1000 resolution specifications.
Settling Errors
When sensors require long lead lengths, use the following general practices to minimize settling errors:
• Do not use wire with PVC-insulated conductors. PVC has a high dielectric constant, which extends input settling time.
• Where possible, run excitation leads and signal leads in separate shields to minimize transients.
• 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 CR1000.
• In difficult cases, settling error can be measured as described in section
Measuring Settling Time
Measuring Settling Time
Settling time for a particular sensor and cable can be measured with the CR1000.
Programming a series of measurements with increasing settling times will yield data that indicate at what settling time a further increase results in negligible change in the measured voltage. The programmed settling time at this point indicates the settling time needed for the sensor / cable combination.
CRBasic example Measuring Settling Time
presents CRBasic code to help determine settling time for a pressure transducer using a high-capacitance semiconductor. 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 pressure. Reviewing the section Programming
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
Each trace in figure Settling Time for Pressure Transducer
contains all twenty PT() mV/V values (left axis) for a given record number, along with an average value showing the measurements as percent of final reading (right axis). The reading has settled to 99.5% of the final value by the fourteenth measurement, which is contained in variable PT(14). This is suitable accuracy for the application, so a settling time of 1400 µs is determined to be adequate.
319
320
Section 8. Operation
CRBasic Example 64.
Measuring Settling Time
'This program example demonstrates the measurement of settling time using a single
'measurement instruction multiple times in succession. In this case, the program measures
'the temperature of the CR1000 wiring panel.
Public RefTemp 'Declare variable to receive instruction
BeginProg
Scan (1,Sec,3,0)
PanelTemp (RefTemp, 250) 'Instruction to make measurement
NextScan
EndProg measures the settling time of a sensor measured with a differential
'voltage measurement
Public PT(20) 'Variable to hold the measurements
DataTable (Settle,True,100)
Sample (20,PT(),IEEE4)
EndTable
BeginProg
Scan (1,Sec,3,0)
BrFull (PT(1),1,mV7.5,1,Vx1,2500,True,True,100, 250,1.0,0)
BrFull (PT(2),1,mV7.5,1,Vx1,2500,True,True,200, 250,1.0,0)
BrFull (PT(3),1,mV7.5,1,Vx1,2500,True,True,300, 250,1.0,0)
BrFull (PT(4),1,mV7.5,1,Vx1,2500,True,True,400, 250,1.0,0)
BrFull (PT(5),1,mV7.5,1,Vx1,2500,True,True,500, 250,1.0,0)
BrFull (PT(6),1,mV7.5,1,Vx1,2500,True,True,600, 250,1.0,0)
BrFull (PT(7),1,mV7.5,1,Vx1,2500,True,True,700, 250,1.0,0)
BrFull (PT(8),1,mV7.5,1,Vx1,2500,True,True,800, 250,1.0,0)
BrFull (PT(9),1,mV7.5,1,Vx1,2500,True,True,900, 250,1.0,0)
BrFull (PT(10),1,mV7.5,1,Vx1,2500,True,True,1000, 250,1.0,0)
BrFull (PT(11),1,mV7.5,1,Vx1,2500,True,True,1100, 250,1.0,0)
BrFull (PT(12),1,mV7.5,1,Vx1,2500,True,True,1200, 250,1.0,0)
BrFull (PT(13),1,mV7.5,1,Vx1,2500,True,True,1300, 250,1.0,0)
BrFull (PT(14),1,mV7.5,1,Vx1,2500,True,True,1400, 250,1.0,0)
BrFull (PT(15),1,mV7.5,1,Vx1,2500,True,True,1500, 250,1.0,0)
BrFull (PT(16),1,mV7.5,1,Vx1,2500,True,True,1600, 250,1.0,0)
BrFull (PT(17),1,mV7.5,1,Vx1,2500,True,True,1700, 250,1.0,0)
BrFull (PT(18),1,mV7.5,1,Vx1,2500,True,True,1800, 250,1.0,0)
BrFull (PT(19),1,mV7.5,1,Vx1,2500,True,True,1900, 250,1.0,0)
BrFull (PT(20),1,mV7.5,1,Vx1,2500,True,True,2000, 250,1.0,0)
CallTable Settle
NextScan
EndProg
Figure 85. Settling Time for Pressure Transducer
Section 8. Operation
Table 63. First Six Values of Settling-Time Data
TIMESTAMP
1/3/2000 23:34
1/3/2000 23:34
REC
0
1
PT(1)
Smp
0.03638599
0.03658813
PT(2)
Smp
0.03901386
0.03921601
1/3/2000 23:34
1/3/2000 23:34
1/3/2000 23:34
2
3
4
0.03638599
0.03658813
0.03679027
0.03941815
0.03941815
0.03921601
PT(3)
Smp
0.04022673
0.04002459
0.04002459
0.03982244
0.04022673
Open-Input Detect
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
Note Much of the information in the following section is highly technical and is not necessary for the routine operation of the CR1000. The information is included to foster a deeper understanding of the open-input detection feature of the CR1000.
PT(6)
Smp
0.04123745
0.0414396
0.04123745
0.04103531
0.04083316
Summary
• An option to detect an open-input, such as a broken sensor or loose connection, is available in the CR1000.
• The option is selected by appending a C to the Range code.
• Using this option, the result of a measurement on an open connection will be
NAN (not a number).
A useful option available to single-ended and differential measurements is the detection of open inputs due to a broken or disconnected sensor wire. This prevents otherwise undetectable measurement errors. Range codes appended with
C enable open-input detect for all input ranges except the ±5000 mV input range
(see table Analog Voltage Input Ranges with CMN / OID
).
321
322
Section 8. Operation
Appending the Range code with a C results in a 50 µs internal connection of the
V+ input of the PGIA to a large over-voltage. The V– input is connected to ground. Upon disconnecting the inputs, the true input signal is allowed to settle and the measurement is made normally. If the associated sensor is connected, the signal voltage is measured. If the input is open (floating), the measurement will over-range since the injected over-voltage will still be present on the input, with
NAN as the result.
Range codes and applicable over-voltage magnitudes are found in the table
Range-Code Option C Over-Voltages
The C option may not work, or may not work well, in the following applications:
• 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 µs. There is little or no risk of damage, but the sensor output may be caused to temporarily oscillate. Programming a longer settling time in the
CRBasic measurement instruction to allow oscillations to decay before the Ato-D conversion may mitigate the problem.
Table 64. Range-Code Option C Over-Voltages
Input Range
± 2.5 mV
± 7.5 mV
± 25 mV
± 250 mV
Over-Voltage
300 mV
± 2500 mV C option with caveat
1
±5000 mV C option not available
1
C results in the H terminal being briefly connected to a voltage greater than 2500 mV, while the
L terminal is connected to ground. The resulting common-mode voltage is 1250 mV, which is not adequate to null residual common-mode voltage, but is adequate to facilitate a type of open-input detect. This requires inclusion of an If / Then / Else statement in the CRBasic program to test the results of the measurement. For example:
•The result of a VoltDiff() measurement using mV2500C as the Range code can be tested for a result >2500 mV, which would indicate an open input.
•The result of the BrHalf() measurement, X, using the mV2500C range code can be tested for values >1. A result of X > 1 indicates an open input for the primary measurement, V1, where X =
V1/Vx and Vx is the excitation voltage. A similar strategy can be used with other bridge measurements.
Section 8. Operation
Offset Voltage Compensation
Related Topics
• Auto Calibration — Overview
• Auto Calibration — Details
• Auto-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
Summary
Measurement offset voltages are unavoidable, but can be minimized.
Offset voltages originate with:
• Ground currents
• Seebeck effect
• Residual voltage from a previous measurement
Remedies include:
• Connect power grounds to power ground terminals ( G)
• Use input reveral (RevDiff = True) with differential measurements
• Automatic offset compensation for differential measurements when RevDiff =
False
• Automatic offset compensation for single-ended measurements when MeasOff
= False
• Better offset compensation when MeasOff = True
• Excitation reversal (RevEx = True)
• Longer settling times
Voltage offset can be the source of significant error. For example, an offset of 3
μV on a 2500 mV signal causes an error of only 0.00012%, but the same offset on a 0.25 mV signal causes an error of 1.2%. The primary sources of offset voltage are ground currents and the Seebeck effect.
Single-ended measurements are susceptible to voltage drop at the ground terminal caused by return currents from another device that is powered from the CR1000 wiring panel, such as another manufacturer's telecommunication modem, or a sensor that requires a lot of power. Currents >5 mA are usually undesirable. The error can be avoided by routing power grounds from these other devices to a power ground G terminal on the CR1000 wiring panel, rather than using a signal ground ( ) terminal. Ground currents can be caused by the excitation of resistive-bridge sensors, but these do not usually cause offset error. These currents typically only flow when a voltage excitation is applied. Return currents associated with voltage excitation cannot influence other single-ended measurements because the excitation is usually turned off before the CR1000 moves to the next measurement. However, if the CRBasic program is written in such a way that an excitation terminal is enabled during an unrelated measurement of a small voltage, an offset error may occur.
The Seebeck effect results in small thermally induced voltages across junctions of dissimilar metals as are common in electronic devices. Differential measurements are more immune to these than are single-ended measurements because of passive voltage cancelation occurring between matched high and low pairs such as
1H/1L. So use differential measurements when measuring critical low-level
323
324
Section 8. Operation voltages, especially those below 200 mV, such as are output from pyranometers and thermocouples. Differential measurements also have the advantage of an input reversal option, RevDiff. When RevDiff is True, two differential measurements are made, the first with a positive polarity and the second reversed.
Subtraction of opposite polarity measurements cancels some offset voltages associated with the measurement.
Single-ended and differential measurements without input reversal use an offset voltage measurement with the PGIA inputs grounded. For differential measurements without input reversal, this offset voltage measurement is performed as part of the routine auto-calibration of the CR1000. Single-ended measurement instructions VoltSE() and TCSe() MeasOff parameter determines whether the offset voltage measured is done at the beginning of measurement instruction, or as part of self-calibration. This option provides you with the opportunity to weigh measurement speed against measurement accuracy. When
MeasOff = True, a measurement of the single-ended offset voltage is made at the beginning of the VoltSE() instruction. When MeasOff = False, an offset voltage measurement is made during self-calibration. For slowly fluctuating offset voltages, choosing MeasOff = True for the VoltSE() instruction results in better offset voltage performance.
Ratiometric measurements use an excitation voltage or current to excite the sensor during the measurement process. Reversing excitation polarity also reduces offset voltage error. Setting the RevEx parameter to True programs the measurement for excitation reversal. Excitation reversal results in a polarity change of the measured voltage so that two measurements with opposite polarity can be subtracted and divided by 2 for offset reduction similar to input reversal for differential measurements. Ratiometric differential measurement instructions allow both RevDiff and RevEx to be set True. This results in four measurement sequences:
• positive excitation polarity with positive differential input polarity
• negative excitation polarity with positive differential input polarity
• positive excitation polarity with negative differential input polarity
• positive excitation polarity then negative excitation differential input polarity
For ratiometric single-ended measurements, such as a BrHalf(), setting RevEx =
True results in two measurements of opposite excitation polarity that are subtracted and divided by 2 for offset voltage reduction. For RevEx = False for ratiometric single-ended measurements, an offset-voltage measurement is made during the self-calibration.
When analog voltage signals are measured in series by a single measurement instruction, such as occurs when VoltSE() is programmed with Reps = 2 or more, measurements on subsequent terminals may be affected by an offset, the magnitude of which is a function of the voltage from the previous measurement.
While this offset is usually small and negligible when measuring large signals, significant error, or NAN, can occur when measuring very small signals. This effect is caused by dielectric absorption of the integrator capacitor and cannot be overcome by circuit design. Remedies include the following:
• Program longer settling times
• Use an individual instruction for each input terminal, the effect of which is to reset the integrator circuit prior to integration.
• Avoid preceding a very small voltage input with a very large voltage input in
Section 8. Operation
CRBasic
Measurement
Instruction
VoltDiff()
VoltSe()
TCDiff()
TCSe()
BrHalf()
BrHalf3W()
Therm107()
Therm108()
Therm109()
BrHalf4W()
BrFull()
BrFull6W()
AM25T() a measurement sequence if a single measurement instruction must be used.
The table Offset-Voltage Compensation Options
lists some of the tools available to minimize the effects of offset voltages.
Table 65. Offset Voltage Compensation Options
Input Reversal
(RevDiff =True)
Excitation
Reversal
(RevEx = True)
Measure
Offset During
Measurement
(MeasOff = True)
Measure Offset
During Background
Calibration
(RevDiff = False)
(RevEx = False)
(MeasOff = False)
Input and Excitation Reversal
Reversing inputs (differential measurements) or reversing polarity of excitation voltage (bridge measurements) cancels stray voltage offsets. For example, if 3
µ V offset exists in the measurement circuitry, a 5 mV signal is measured as 5.003 mV. When the input or excitation is reversed, the second sub-measurement is –
4.997 mV. Subtracting the second sub-measurement from the first and then dividing by 2 cancels the offset:
5.003 mV – (–4.997 mV) = 10.000 mV
10.000 mV / 2 = 5.000 mV
When the CR1000 reverses differential inputs or excitation polarity, it delays the same settling time after the reversal as it does before the first sub-measurement.
So, there are two delays per measurement when either RevDiff or RevEx is used.
If both RevDiff and RevEx are True, four sub-measurements are performed; positive and negative excitations with the inputs one way and positive and negative excitations with the inputs reversed. The automatic procedure then is as follows,
1. Switches to the measurement terminals
325
326
Section 8. Operation
2. Sets the excitation, and then settle, and then measure
3. Reverse the excitation, and then settles, and then measure
4. Reverse the excitation, reverse the input terminals, settle, measure
5. Reverse the excitation, settle, measure
There are four delays per measure. The CR1000 processes the four submeasurements into the reported measurement. In cases of excitation reversal, excitation 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.
Ground Reference Offset Voltage
When MeasOff is enabled (= True), the CR1000 measures the offset voltage of the ground reference prior to each VoltSe() or TCSe() measurement. This offset voltage is subtracted from the subsequent measurement.
From Background Calibration
If RevDiff, RevEx, or MeasOff is disabled (= False), offset voltage compensation is continues to be automatically performed, albeit less effectively, by using measurements from the automatic background calibration. Disabling RevDiff,
RevEx, or MeasOff speeds up measurement time; however, the increase in speed comes at the cost of accuracy because of the following:
1 RevDiff, RevEx, and MeasOff are more effective.
2 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 When measurement duration must be minimal to maximize measurement frequency, consider disabling RevDiff, RevEx, and MeasOff when CR1000 module temperatures and return currents are slow to change.
Time Skew Between Measurements
Time skew between consecutive voltage measurements is a function of settling and integration times, A-to-D conversion, and the number entered into the Reps parameter of the VoltDiff() or VoltSE() instruction. A close approximation is: time skew = settling time + integration time + A-to-D conversion time reps 2
1 +
1 A-to-D conversion time, which equals 15 µs.
2
If Reps > 1 (multiple measurements by a single instruction), no additional time is required. If Reps = 1 in consecutive voltage instructions, add 15 µs per instruction.
Section 8. Operation
8.1.2.2 Thermocouple Measurements —- Details
Related Topics:
• Thermocouple Measurements — Details
• Thermocouple Measurements — Instructions
Thermocouple measurements are special case voltage measurements.
Note Thermocouples are inexpensive and easy to use. However, they pose several challenges to the acquisition of accurate temperature data, particularly when using external reference junctions. Campbell Scientific strongly
encourages you to carefully evaluate the section Error Analysis
An introduction to thermocouple measurements is located in the section Hands-on
Exercise: Measuring a Thermocouple
The micro-volt resolution and low-noise voltage measurement capability of the
CR1000 is well suited for measuring thermocouples. A thermocouple consists of two wires, each of a different metal or alloy, joined at one end to form the measurement junction. At the opposite end, each lead connects to terminals of a voltage measurement device, such as the CR1000. These connections form the reference junction. If the two junctions (measurement and reference) are at different temperatures, a voltage proportional to the difference is induced in the wires. This phenomenon is known as the Seebeck effect. Measurement of the voltage between the positive and negative terminals of the voltage-measurement device provides a direct measure of the temperature difference between the measurement and reference junctions. A third metal (e.g., solder or CR1000 terminals) between the two dissimilar-metal wires form parasitic-thermocouple junctions, the effects of which cancel if the two wires are at the same temperature.
Consequently, the two wires at the reference junction are placed in close proximity so they remain at the same temperature. Knowledge of the referencejunction temperature provides the determination of a reference-junction compensation voltage, corresponding to the temperature difference between the reference junction and 0°C. This compensation voltage, combined with the measured thermocouple voltage, can be used to compute the absolute temperature of the thermocouple junction. To facilitate thermocouple measurements, a thermistor is integrated into the CR1000 wiring panel for measurement of the reference junction temperature by means of the PanelTemp() instruction.
TCDiff() and TCSe() thermocouple instructions determine thermocouple temperatures using the following sequence. First, the temperature (°C) of the reference junction is determined. Next, a reference-junction compensation voltage is computed based on the temperature difference between the reference junction and 0°C. If the reference junction is the CR1000 analog-input terminals, the temperature is conveniently measured with the PanelTemp() instruction. The actual thermocouple voltage is measured and combined with the referencejunction compensation voltage. It is then used to determine the thermocouplejunction temperature based on a polynomial approximation of NIST thermocouple calibrations.
8.1.2.2.1 Thermocouple Error Analysis
The error in the measurement of a thermocouple temperature is the sum of the errors in the reference-junction temperature measurement plus the temperature-to-
327
328
Section 8. Operation voltage polynomial fit error, the non-ideal nature of the thermocouple (deviation from standards published in NIST Monograph 175), the thermocouple-voltage measurement accuracy, and the voltage-to-temperature polynomial fit error
(difference between NIST standard and CR1000 polynomial approximations). The discussion of errors that follows is limited to these errors in calibration and measurement and does not include errors in installation or matching the sensor and thermocouple type to the environment being measured.
Panel-Temperature Error
The panel-temperature thermistor (Betatherm 10K3A1A) is just under the panel in the center of the two rows of analog input terminals. It has an interchangeability specification of 0.1 °C for temperatures between 0 and 70 °C. Below freezing and at higher temperatures, this specification is degraded. Combined with possible errors in the completion-resistor measurement and the Steinhart and Hart equation used to calculate the temperature from resistance, the accuracy of panel temperature is estimated in figure Panel Temperature Error Summary
In summary, error is estimated at ± 0.1 °C over 0 to 40 °C, ± 0.3 °C from –25 to 50
°C, and ± 0.8 °C from –55 to 85 °C.
The error in the reference-temperature measurement is a combination of the error in the thermistor temperature and the difference in temperature between the panel thermistor and the terminals the thermocouple is connected to. The terminal strip cover should always be used when making thermocouple measurements. It insulates the terminals from drafts and rapid fluctuations in temperature as well as conducting heat to reduce temperature gradients. In a typical installation where the CR1000 is in a weather-tight enclosure not subject to violent swings in temperature or uneven solar radiation loading, the temperature difference between the terminals and the thermistor is likely to be less than 0.2 °C.
With an external driving gradient, the temperature gradients on the input panel can be much worse. For example, the CR1000 was placed in a controlled temperature chamber. Thermocouples in terminals at the ends and middle of each analog terminal strip measured the temperature of an insulated aluminum bar outside the chamber. The temperature of this bar was also measured by another datalogger. Differences between the temperature measured by one of the thermocouples and the actual temperature of the bar are due to the temperature difference between the terminals the thermocouple is connected to and the thermistor reference (the figures have been corrected for thermistor errors). Figure
Panel-Temperature Gradients (Low Temperature to High)
shows the errors when the chamber was changed from low temperature to high in approximately 15 minutes. Figure Panel-Temperature Gradients (High Temperature to Low)
shows the results when going from high temperature to low. During rapid temperature changes, the panel thermistor will tend to lag behind terminal temperature because it is mounted deeper in the CR1000.
Figure 86. Panel-Temperature Error Summary
Section 8. Operation
Figure 87. Panel-Temperature Gradients (low temperature to high)
329
Section 8. Operation
Figure 88. Panel-Temperature Gradients (high temperature to low)
330
Thermocouple Limits of Error
The standard reference that lists thermocouple output voltage as a function of temperature (reference junction at 0°C) is the NIST (National Institute of
Standards and Technology) Monograph 175 (1993). ANSI (American National
Standards Institute) has established limits of error on thermocouple wire which is accepted as an industry standard (ANSI MC 96.1, 1975). Table Limits of Error for
Thermocouple Wire
gives the ANSI limits of error for standard and special grade thermocouple wire of the types accommodated by the CR1000.
When both junctions of a thermocouple are at the same temperature, no voltage is generated, a result of the law of intermediate metals. A consequence of this is that a thermocouple cannot have an offset error; any deviation from a standard
(assuming the wires are each homogeneous and no secondary junctions exist) is due to a deviation in slope. In light of this, the fixed temperature-limits of error
(e.g., ±1.0 °C for type T as opposed to the slope error of 0.75% of the temperature) in the table above are probably greater than one would experience when considering temperatures in the environmental range (i.e., the reference junction, at 0°C, is relatively close to the temperature being measured, so the absolute error — the product of the temperature difference and the slope error — should be closer to the percentage error than the fixed error). Likewise, because thermocouple calibration error is a slope error, accuracy can be increased when the reference junction temperature is close to the measurement temperature. For the same reason differential temperature measurements, over a small temperature gradient, can be extremely accurate.
To quantitatively evaluate thermocouple error when the reference junction is not fixed at 0°C limits of error for the Seebeck coefficient (slope of thermocouple voltage vs. temperature curve) are needed for the various thermocouples. Lacking this information, a reasonable approach is to apply the percentage errors, with perhaps 0.25% added on, to the difference in temperature being measured by the
Section 8. Operation thermocouple.
Table 66. Limits of Error for Thermocouple Wire (Reference
Junction at 0°C)
Thermocouple
Type
T
Temperature
Range °C
–200 to 0
Limits of Error
(Whichever is greater)
Standard
± 1.0 °C or 1.5%
Special
E
J
K
R or S
B
0 to 350
0 to 750
–200 to 0
0 to 900
–200 to 0
0 to 1250
0 to 1450
800 to 1700
± 1.0 °C or 0.75%
± 2.2 °C or 0.75%
± 1.7 °C or 1.0%
± 1.7 °C or 0.5%
± 2.2 °C or 2.0%
± 2.2 °C or 0.75%
± 1.5 °C or 0.25%
± 0.5%
± 0.5 °C or 0.4%
± 1.1 °C or 0.4%
± 1.0 °C or 0.4%
± 1.1 °C or 0.4%
± 0.6 °C or 0.1%
Not Established.
Thermocouple Voltage Measurement Error
Thermocouple outputs are extremely small — 10 to 70 µV per °C. Unless high resolution input ranges are used when programming, the CR1000, accuracy and sensitivity are compromised. Table Voltage Range for Maximum Thermocouple
Resolution
lists high resolution ranges available for various thermocouple types and temperature ranges. The following four example calculations of thermocouple input error demonstrate how the selected input voltage range impacts the accuracy of measurements. Figure Input Error Calculation
shows from where various values are drawn to complete the calculations. See
Measurement Accuracy for more information on measurement accuracy and accuracy calculations.
When the thermocouple measurement junction is in electrical contact with the object being measured (or has the possibility of making contact) a differential measurement should be made to avoid ground looping.
Table 67. Voltage Range for Maximum Thermocouple Resolution
Reference temperature at 20°C
TC Type and
Temperature
Range (°C)
T: –270 to 400
Temperature
Range (°C) for ±2.5 mV
Input Range
–45 to 75
Temperature
Range (°C) for ±7.5 mV
Input Range
–270 to 180
Temperature
Range (°C) for ±25 mV
Input Range
–270 to 400
Temperature
Range (°C) for ±250 mV
Input Range not used
E: –270 to 1000
K: –270 to 1372
–20 to 60
–40 to 80
–120 to 130
–270 to 200
–270 to 365
–270 to 620
>365
>620
J: –210 to 1200
B: –0 to 1820
–25 to 65
0 to 710
–145 to 155
0 to 1265
–210 to 475
0 to 1820
>475 not used
331
Section 8. Operation
Table 67. Voltage Range for Maximum Thermocouple Resolution
TC Type and
Temperature
Range (°C)
Reference temperature at 20°C
Temperature
Range (°C) for ±2.5 mV
Input Range
Temperature
Range (°C) for ±7.5 mV
Input Range
Temperature
Range (°C) for ±25 mV
Input Range
Temperature
Range (°C) for ±250 mV
Input Range
R: –50 to 1768 –50 to 320 –50 to 770 –50 to 1768 not used
S: –50 to 1768 –50 to 330 –50 to 820
N: –270 to 1300 –80 to 105 –270 to 260
Figure 89. Input Error Calculation
–50 to 1768
–270 to 725 not used
>725
332
Input Error Examples: Type T Thermocouple @ 45°C
These examples demonstrate that in the environmental temperature range, inputoffset error is much greater than input-gain error because a small input range is used.
Conditions:
CR1000 module temperature, –25 to 50 °C
Temperature = 45 °C
Section 8. Operation
Reference temperature = 25 °C
Delta T (temperature difference) = 20 °C
Thermocouple output multiplier at 45 °C = 42.4 µV °C -1
Thermocouple output = 20°C • 42.4 µV °C -1 = 830.7 µV
Input range = ±2.5 mV
Error Calculations with Input Reversal = True
µV error = gain term + offset term
= (830.7 µV • 0.12%) + (1.5 • 0.67 µV + 1.0 µV)
= 0.997 µV + 2.01 µV
= 3.01 µV (= 0.071 °C)
Error Calculations with Input Reversal = False
µV Error = gain term + offset term
= (830.7 µV • 0.12%) + (3 • 0.67 µV + 2.0 µV)
= 0.997 µV + 4.01 µV
= 5.01 µV (= 0.12 °C)
Input Error Examples: Type K Thermocouple @ 1300°C
Error in the temperature due to inaccuracy in the measurement of the thermocouple voltage increases at temperature extremes, particularly when the temperature and thermocouple type require using the ±200|250 mV range. For example, assume type K (chromel-alumel) thermocouples are used to measure temperatures around 1300°C.
These examples demonstrate that at temperature extremes, input offset error is much less than input gain error because the use of a larger input range is required.
Conditions
CR1000 module temperature, –25 to 50 °C
Temperature = 1300 °C
Reference temperature = 25 °C
Delta T (temperature difference) = 1275 °C
Thermocouple output multiplier at 1300 °C = 34.9 µV °C -1
Thermocouple output = 1275 °C • 34.9 µV °C -1 = 44500 µV
Input range = ±250 mV
Error Calculations with Input Reversal = True
µV error = gain term + offset term
= (44500 µV * 0.12%) + (1.5 * 66.7 µV + 1.0 µV)
= 53.4 µV + 101.0 µV
= 154 µV (= 4.41 °C)
333
334
Section 8. Operation
Error Calculations with Input Reversal = False
µV error = gain term + offset term
= (44500 µV * 0.12%) + (3 * 66.7 µV + 2.0 µV)
= 53.4 µV + 200 µV
= 7.25 µV (= 7.25 °C)
Ground Looping Error
When the thermocouple measurement junction is in electrical contact with the object being measured (or has the possibility of making contact), a differential measurement should be made to avoid ground looping.
Noise Error
The typical input noise on the ±2_5 mV range for a differential measurement with
16.67 ms integration and input reversal is 0.19 μV RMS. On a type-T thermocouple (approximately 40 μV/°C), this is 0.005°C.
Note This is an RMS value; some individual readings will vary by greater than this.
Thermocouple Polynomial Error
NIST Monograph 175 gives high-order polynomials for computing the output voltage of a given thermocouple type over a broad range of temperatures. To speed processing and accommodate the CR1000 math and storage capabilities, four separate 6th-order polynomials are used to convert from volts to temperature over the range covered by each thermocouple type. The table Limits of Error on
CR1000 Thermocouple Polynomials
gives error limits for the thermocouple polynomials.
Table 68. Limits of Error on CR1000 Thermocouple Polynomials
TC
Type
T – 270
–270
–200
–100
100
Range °C
to to to to to
400
–200
–100
100
400
Limits of Error °C
Relative to NIST
Standards
18 @ –270
±0.08
±0.001
±0.015
E
J – 150
–100
– 240
–240
–130
to to to
to to
760
300
1000
–130
200
±0.008
±0.002
±0.4
±0.005
Section 8. Operation
Table 68. Limits of Error on CR1000 Thermocouple Polynomials
TC
Type
200
Range °C to 1000
Limits of Error °C
Relative to NIST
Standards
±0.02
K – 50
–50
950
to to to
1372
950
1372
±0.01
±0.04
Reference-Junction Error
Thermocouple instructions TCDiff() and TCSe() include the parameter TRef to incorporate the reference-junction temperature into the measurement. A referencejunction compensation voltage is computed from TRef as part of the thermocouple instruction, based on the temperature difference between the reference junction and 0 °C. The polynomials used to determine the referencejunction compensation voltage do not cover the entire thermocouple range, as illustrated in tables Limits of Error on CR1000 Thermocouple Polynomials
and Reference-Temperature Compensation Range and Polynomial Error
Substantial errors in the reference junction compensation voltage will result if the reference-junction temperature is outside of the polynomial-fit ranges given.
The reference-junction temperature measurement can come from a PanelTemp() instruction or from any other temperature measurement of the reference junction.
The standard and extended (-XT) operating ranges for the CR1000 are –25 to 50
°C and –55 to 85 °C, respectively. These ranges also apply to the referencejunction temperature measurement using PanelTemp().
Two sources of error arise when the reference temperature is out of the polynomial-fit range. The most significant error is in the calculated compensation voltage; however, a small error is also created by non-linearities in the Seebeck coefficient.
Table 69. Reference-Temperature Compensation Range and Error
TC Type
T
Range °C
–100 to 100
Limits of Error °C
1
± 0.001
E
J
–150 to 206
–150 to 296
± 0.005
± 0.005
K –50 to 100
1
Relative to ITS-90 Standard in NIST Monograph 175
± 0.01
Thermocouple Error Summary
Errors in the thermocouple- and reference-temperature linearizations are extremely small, and error in the voltage measurement is negligible.
The magnitude of the errors discussed in Error Analysis
show that the greatest sources of error in a thermocouple measurement are usually,
335
336
Section 8. Operation
• The typical (and industry accepted) manufacturing error of thermocouple wire
• The reference temperature
The table Thermocouple Error Examples
tabulates the relative magnitude of these errors. It shows a worst case example where,
• A temperature of 45 °C is measured with a type-T thermocouple and all errors are maximum and additive:
• Reference temperature is 25 °C, but it is indicating 25.1 °C.
• The terminal to which the thermocouple is connected is 0.05 °C cooler than the reference thermistor (0.15 °C error).
Table 70. Thermocouple Error Examples
Source
Reference Temperature
Error: °C : % of Total Error
Single Differential
250 µs Integration
ANSI TC Error
(1°C)
0.15° : 11.5%
TC Error 1% Slope
0.15° : 29.9%
Reversing Differential
50/60 Hz Rejection Integration
ANSI TC Error (1°C)
0.15° : 12.2%
TC Error 1% Slope
0.15° : 34.7%
TC Output
Voltage Measurement
Noise
Reference Linearization
Output Linearization
Total Error
1.0° : 76.8%
0.12° : 9.2%
0.03° : 2.3%
0.001° : 0.1%
0.001° : 0.1%
1.302° : 100%
0.2° : 39.8%
0.12° : 23.9%
0.03° : 6.2%
0.001° : 0.2%
0.001° : 0.2%
0.502° : 100%
1.0° : 81.1%
0.07° : 5.7%
0.01° : 0.8%
0.001° : 0.1%
0.001° : 0.1%
1.232° : 100%
0.2° : 46.3%
0.07° : 16.2%
0.01° : 2.3%
0.001° : 0.25%
0.001° : 0.25%
0.432° : 100%
8.1.2.2.2 Use of External Reference Junction
An external junction in an insulated box is often used to facilitate thermocouple connections. It can reduce the expense of thermocouple wire when measurements are made long distances from the CR1000. Making the external junction the reference junction, which is preferable in most applications, is accomplished by running copper wire from the junction to the CR1000. Alternatively, the junction box can be used to couple extension-grade thermocouple wire to the thermocouples, with the PanelTemp() instruction used to determine the reference junction temperature.
Extension-grade thermocouple wire has a smaller temperature range than standard thermocouple wire, but it meets the same limits of error within that range. One situation in which thermocouple extension wire is advantageous is when the junction box temperature is outside the range of reference junction compensation provided by the CR1000. This is only a factor when using type K thermocouples, since the upper limit of the reference compensation polynomial fit range is 100 °C and the upper limit of the extension grade wire is 200 °C. With the other types of thermocouples, the reference compensation polynomial-fit range equals or is greater than the extension-wire range. In any case, errors can arise if temperature gradients exist within the junction box.
Figure Diagram of a Thermocouple Junction Box
illustrates a typical
Section 8. Operation junction box wherein the reference junction is the CR1000. Terminal strips are a different metal than the thermocouple wire. Thus, if a temperature gradient exists between A and A' or B and B', the junction box will act as another thermocouple in series, creating an error in the voltage measured by the CR1000. This thermoelectric-offset voltage is also a factor when the junction box is used as the reference junction. This offset can be minimized by making the thermal conduction between the two points large and the distance small. The best solution when extension-grade wire is being connected to thermocouple wire is to use connectors which clamp the two wires in contact with each other.
When an external-junction box is also the reference junction, the points A, A', B, and B' need to be very close in temperature (isothermal) to measure a valid reference temperature, and to avoid thermoelectric-offset voltages. The box should contain elements of high thermal conductivity, which will act to rapidly equilibrate any thermal gradients to which the box is subjected. It is not necessary to design a constant-temperature box. It is desirable that the box respond slowly to external-temperature fluctuations. Radiation shielding must be provided when a junction box is installed in the field. Care must also be taken that a thermal gradient is not induced by conduction through the incoming wires. The CR1000 can be used to measure the temperature gradients within the junction box.
Figure 90. Diagram of a Thermocouple Junction Box
8.1.2.3 Current Measurements — Details
Related Topics:
• Current Measurements — Overview
• Current Measurements — Details
For a complete treatment of current-loop sensors (4 to 20 mA, for example), please consult the following publications available at www.campbellsci.com/app-
notes (http://www.campbellsci.com/app-notes):
• Current Output Transducers Measured with Campbell Scientific Dataloggers
(2MI-B)
• CURS100 100 Ohm Current Shunt Terminal Input Module
8.1.2.4 Resistance Measurements — Details
Related Topics:
• Resistance Measurements — Specifications
• Resistance Measurements — Overview
• Resistance Measurements — Details
• Resistance Measurements — Instructions
337
338
Section 8. Operation
By supplying a precise and known voltage to a resistive-bridge circuit and measuring the returning voltage, resistance can be calculated.
CRBasic instructions for measuring resistance include:
BrHalf() — half-bridge
BrHalf3W() — three-wire half-bridge
BrHalf4W() — four-wire half-bridge
BrFull() — four-wire full-bridge
BrFull6W() — six-wire full-bridge
Read More Available resistive-bridge completion modules are listed in the appendix Signal Conditioners
The CR1000 has five CRBasic bridge-measurement instructions. Table Resistive-
Bridge Circuits with Voltage Excitation
shows ideal circuits and related equations. In the diagrams, resistors labeled R s
are normally the sensors and those labeled R f
are normally precision fixed (static) resistors. CRBasic example Four-
Wire Full-Bridge Measurement
lists CRBasic code that measures and processes four-wire full-bridge circuits.
Offset voltages compensation applies to bridge measurements. In addition to
RevDiff and MeasOff parameters discussed in the section Offset Voltage
Compensation
CRBasic bridge measurement instructions include the
RevEx parameter that provides the option to program a second set of measurements with the excitation polarity reversed. Much of the offset error inherent in bridge measurements is canceled out by setting RevDiff, MeasOff, and
RevEx to True.
Measurement speed can be slowed when using RevDiff, MeasOff, and RevEx.
When more than one measurement per sensor are necessary, such as occur with the BrHalf3W(), BrHalf4W(), and BrFull6W instructions, input and excitation reversal are applied separately to each measurement. For example, in the fourwire half-bridge ( BrHalf4W()), when excitation is reversed, the differential measurement of the voltage drop across the sensor is made with excitation at both polarities and then excitation is again applied and reversed for the measurement of the voltage drop across the fixed resistor. Further, the results of measurement instructions (X) must be processed further to obtain the resistance value. This processing requires additional program execution time.
Table 71. Resistive-Bridge Circuits with Voltage Excitation
Resistive-Bridge Type and
Circuit Diagram
Half-Bridge
1
CRBasic Instruction and
Fundamental Relationship
CRBasic Instruction: BrHalf()
Fundamental Relationship
2
:
Three-Wire Half-Bridge
1,3
CRBasic Instruction: BrHalf3W()
Fundamental Relationship
2
:
Section 8. Operation
Other
Relationships
Four-Wire Half-Bridge
1,3
CRBasic Instruction: BrHalf4W()
Fundamental Relationship
2
:
339
340
Section 8. Operation
Table 71. Resistive-Bridge Circuits with Voltage Excitation
Resistive-Bridge Type and
Circuit Diagram
Full-Bridge
1,3
CRBasic Instruction and
Fundamental Relationship
CRBasic Instruction: BrFull()
Fundamental Relationship
2
:
Other
Relationships
These relationships apply to BrFull() and
BrFull6W().
Six-Wire Full-Bridge
1
CRBasic Instruction: BrFull6W()
Fundamental Relationship
2
:
1
Key: V x = excitation voltage; V 1 , V 2 = sensor return voltages; R f = "fixed", "bridge" or "completion" resistor; R s = "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 the appendix Resistive Bridge Modules
for a list of available terminal input modules to facilitate this measurement.
Section 8. Operation
CRBasic Example 65.
Four-Wire Full-Bridge Measurement and Processing
'This program example demonstrates the measurement and processing of a four-wire resistive
'full bridge. In this example, the default measurement stored in variable X is
'deconstructed to determine the resistance of the R1 resistor, which is the variable
'resistor in most sensors that have a four-wire full-bridge as the active element.
'Declare Variables
Public X
Public X1
Public R1
Public R2 = 1000 'Resistance of fixed resistor R2
Public R3 = 1000 'Resistance of fixed resistor R2
Public R4 = 1000 'Resistance of fixed resistor R4
'Main Program
BeginProg
Scan (500,mSec,1,0)
'Full Bridge Measurement:
BrFull (X,1,mV2500,1,Vx1,1,2500,True,True,0,_60Hz,1.0,0.0)
X1 = ((-1 * X) / 1000) + (R3 / (R3 + R4))
R1 = (R2 * (1 - X1)) / X1
NextScan
EndProg
8.1.2.4.1 Ac Excitation
Some resistive sensors require ac excitation. Ac excitation is defined as excitation with equal positive (+) and negative (–) duration and magnitude. These include electrolytic tilt sensors, soil moisture blocks, water-conductivity sensors, and wetness-sensing grids. The use of single polarity dc excitation with these sensors can result in polarization of sensor materials and the substance measured.
Polarization may cause erroneous measurement, calibration changes, or rapid sensor decay.
Other sensors, for example, LVDTs (linear variable differential transformers), require ac excitation because they require inductive coupling to provide a signal.
Dc excitation in an LVDT will result in no measurement.
CRBasic bridge-measurement instructions have the option to reverse polarity to provide ac excitation by setting the RevEx parameter to True.
Note Take precautions against ground loops when measuring sensors that require ac excitation. See Ground Looping in Ionic Measurements
8.1.2.4.2 Resistance Measurements — Accuracy
Read More Consult the following technical papers at www.campbellsci.com/app-
notes (http://www.campbellsci.com/app-notes) for in-depth treatments of several topics addressing voltage measurement quality:
• Preventing and Attacking Measurement Noise Problems
• Benefits of Input Reversal and Excitation Reversal for Voltage Measurements
• Voltage Measurement Accuracy, Self- Calibration, and Ratiometric
Measurements
• Estimating Measurement Accuracy for Ratiometric Measurement Instructions.
341
342
Section 8. Operation
Note Error discussed in this section and error-related specifications of the
CR1000 do not include error introduced by the sensor or by the transmission of the sensor signal to the CR1000.
The accuracy specifications for ratiometric-resistance measurements are summarized in the tables Ratiometric-Resistance Measurement Accuracy
Table 72. Ratiometric-Resistance Measurement Accuracy
–25 to 50 °C
±(0.04% of voltage measurement + offset)
1
1
Voltage measurement is variable V 1 or V 2 in the table Resistive-Bridge Circuits with Voltage
Excitation
Offset is the same as that for simple analog-voltage measurements. See the table Analog-Voltage Measurement Offsets
Assumptions that support the ratiometric-accuracy specification include:
• CR1000 is within factory calibration specification.
• Excitation voltages less than 1000 mV are reversed during the excitation phase of the measurement.
• Effects due to the following are not included in the specification: o Bridge-resistor errors o Sensor noise o Measurement noise
For a tighter treatment of the accuracy of ratiometric measurements, consult the technical paper Estimating Measurement Accuracy for Ratiometric Measurement
Instructions., which should be available at www.campbellsci.com/app-notes
(http://www.campbellsci.com/app-notes) in June of 2015.
8.1.2.5 Strain Measurements — Details
Related Topics:
• Strain Measurements — Overview
• Strain Measurements — Details
• FieldCalStrain() Examples
A principal use of the four-wire full bridge is the measurement of strain gages in structural stress analysis. StrainCalc() calculates microstrain (µε) from the formula for the particular strain bridge configuration used. All strain gages supported by StrainCalc() use the full-bridge schematic. In strain-gage parlance,
'quarter-bridge', 'half-bridge' and 'full-bridge' refer to the number of active elements in the full-bridge schematic. In other words, a quarter-bridge strain gage has one active element, a half-bridge has two, and a full-bridge has four.
StrainCalc() requires a bridge-configuration code. The table StrainCalc()
Instruction Equations
shows the equation used by each configuration code.
Each code can be preceded by a dash ( -). Use a code without the dash when the bridge is configured so the output decreases with increasing strain. Use a dashed code when the bridge is configured so the output increases with increasing strain.
In the equations in table StrainCalc() Instruction Equations
a dashed code
Section 8. Operation sets the polarity of V r
to negative.
Table 73. StrainCalc() Instruction Equations
StrainCalc()
BrConfig Code Configuration
Quarter-bridge strain gage:
1
Half-bridge strain gage. One gage parallel to strain, the other at 90° to strain.
2
Half-bridge strain gage. One gage parallel to + , the other parallel to -
:
3
Full-bridge strain gage. Two gages parallel to + , the other two parallel to - :
4
Full-bridge strain gage. Half the bridge has two gages parallel to + and
- , and the other half to + and :
5
Full-bridge strain gage. Half the bridge has two gages parallel to + and
, and the other half to and + :
6 where:
• : Poisson's Ratio (0 if not applicable)
• GF: Gage Factor
• V
• V r r
: 0.001 (Source-Zero) if BRConfig code is positive (+)
: –0.001 (Source-Zero) if BRConfig code is negative (–) and where:
• "source": the result of the full-bridge measurement (X = 1000 • V
1
/ V x
) when multiplier = 1 and offset = 0.
• "zero": gage offset to establish an arbitrary zero (see FieldCalStrain() in
FieldCal() Examples
).
343
344
Section 8. Operation
StrainCalc Example: See FieldCalStrain() Examples
8.1.2.6 Auto-Calibration — Details
Related Topics
• Auto Calibration — Overview
• Auto Calibration — Details
• Auto-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
The CR1000 auto-calibrates to compensate for changes caused by changing operating temperatures and aging. With auto-calibration disabled, measurement accuracy over the operational temperature range is specified as less accurate by a factor of 10. That is, over the extended temperature range of –40 °C to 85 °C, the accuracy specification of ±0.12% of reading can degrade to ±1% of reading with auto-calibration disabled. If the temperature of the CR1000 remains the same, there is little calibration drift if auto-calibration is disabled. Auto-calibration can become disabled when the scan rate is too small. It can be disabled by the
CRBasic program when using the Calibrate() instruction.
Note The CR1000 is equipped with an internal voltage reference used for calibration. The voltage reference should be periodically checked and recalibrated by Campbell Scientific for applications with critical analog voltage measurement requirements. A minimum two-year recalibration cycle is recommended.
Unless a Calibrate() instruction is present, the CR1000 automatically autocalibrates during spare time in the background as an automatic slow sequence
(p.
with a segment of the calibration occurring every four seconds. If there is insufficient time to do the background calibration because of a scan-consuming user program, the CR1000 will display the following warning at compile time:
Warning: Background calibration is disabled.
8.1.2.6.1 Auto Calibration Process
The composite transfer function of the PGIA
and A-to-D
converter of the CR1000 is described by the following equation:
COUNTS = G • Vin + B where COUNTS is the result from an A-to-D conversion, G is the voltage gain for a given input range, Vin is the input voltage connected to V+ and V–, and B is the internally measured offset voltage.
Automatic self-calibration calibrates only the G and B values necessary to run a given CRBasic program, resulting in a program dependent number of selfcalibration segments ranging from a minimum of 6 to a maximum of 91. A typical number of segments required in self-calibration is 20 for analog ranges and one segment for the wiring-panel temperature measurement, totaling 21 segments.
So, (21 segments) • (4 s / segment) = 84 s per complete self-calibration. The
Section 8. Operation worst-case is (91 segments) • (4 s / segment) = 364 s per complete self-calibration.
During instrument power-up, the CR1000 computes calibration coefficients by averaging ten complete sets of self-calibration measurements. After power up, newly determined G and B values are low-pass filtered as follows:
Next_Value = (1/5) • (new value) + (4/5) • (old value)
This results in the following settling percentages:
• 20% for 1 new value,
• 49% for 3 new values
• 67% for 5 new values
• 89% for 10 new values
• 96% for 14 new values
If this rate of update is too slow, the Calibrate() instruction can be used. 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 input range with a 250 µs integration, which is always determined in self-calibration for use internally. For a VoltDiff() instruction, B is determined as part of self-calibration only if the parameter RevDiff = 0.
VoltSe() and VoltDiff() instructions, on a given input range with the same integration durations, use the same G values but different B values. The six inputvoltage ranges (±5000 mV, ±2500 mV, ±250 mV, and ±25 mV), in combination with the three most common integration durations (250 µs, 50 Hz half-cycle, and
60 Hz half-cycle) 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 CR1000 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
Automatic self-calibration can be overridden with the Calibrate() instruction, which forces a calibration for each execution, and does not employ low-pass filtering on the newly determined G and B values. The Calibrate() instruction has two parameters: CalRange and Dest. CalRange determines whether to calibrate only the necessary input ranges for a given CRBasic program (CalRange
= 0) or to calibrate all input ranges (CalRange ≠ 0). The Dest parameter should be of sufficient dimension for all returned G and B values, which is a minimum of two for the automatic self-calibration of VoltSE() including B (offset) for the
±2500 mV input range with first 250 µs integration, and a maximum of 54 for all input-voltage ranges used and possible integration durations.
An example use of the Calibrate() instruction programmed to calibrate all input ranges is given in the following CRBasic code snip:
'Calibrate(Dest,Range)
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 the table Calibrate() Instruction Results
(p.
345
346
Section 8. Operation
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)
CalSeOffset(6)
CalSeOffset(7)
CalSeOffset(8)
CalSeOffset(9)
CalSeOffset(10)
CalSeOffset(11)
CalSeOffset(12)
CalSeOffset(13)
CalSeOffset(14)
CalSeOffset(15)
SE
SE
SE
SE
SE
SE
SE
SE
SE
SE
SE
SE
SE
SE
SE
Differential (Diff)
Single-Ended (SE)
Table 74. Auto Calibration Gains and Offsets
Status Table
Element
Descriptions of Status Table Elements
Offset or Gain
25
7.5
2.5
5000
2500
250
25
7.5
2.5
5000
2500
250
250
25
7.5
2.5
5000
2500
250
±mV Input
Range
5000
2500
250
25
250
25
7.5
2.5
7.5
2.5
5000
2500
5000
2500
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Gain
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Gain
Gain
Gain
Gain
Offset
Offset
Offset
Integration
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
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
Table 74. Auto Calibration Gains and Offsets
Status Table
Element
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
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Diff
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Offset
Descriptions of Status Table Elements
Offset or Gain
250
25
7.5
2.5
5000
2500
250
±mV Input
Range
25
7.5
2.5
5000
2500
25
7.5
2.5
5000
2500
250
25
7.5
2.5
Table 75. Calibrate() Instruction Results
Array
Cal()
Element
7
8
5
6
9
3
4
1
2
Differential (Diff)
Single-Ended (SE)
SE
Diff
SE
Diff
SE
Diff
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Descriptions of Array Elements
Offset or Gain
±mV Input
Range
5000
5000
5000
2500
2500
2500
250
250
250
Integration
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
Section 8. Operation
Integration
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
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
347
348
Section 8. Operation
36
37
38
39
40
32
33
34
35
41
42
43
29
30
31
25
26
27
28
21
22
23
24
16
17
18
19
20
10
11
12
13
14
15
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Differential (Diff)
Single-Ended (SE)
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Diff
Table 75. Calibrate() Instruction Results
Array
Cal()
Element
Descriptions of Array Elements
Offset or Gain
2.5
5000
5000
5000
2500
7.5
7.5
2.5
2.5
250
250
250
25
25
25
7.5
2500
2500
250
2.5
2.5
2.5
5000
5000
5000
2500
2500
2500
±mV Input
Range
25
25
25
7.5
7.5
7.5
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Typical Value
±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
±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
Integration
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
50 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
250 ms
250 ms
250 ms
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
Section 8. Operation
Table 75. Calibrate() Instruction Results
Array
Cal()
Element
44
45
46
47
48
49
50
51
52
53
54
Differential (Diff)
Single-Ended (SE)
Diff
SE
Diff
SE
Diff
SE
Diff
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Descriptions of Array Elements
Offset or Gain
±mV Input
Range
250
250
25
25
25
7.5
7.5
7.5
2.5
2.5
2.5
8.1.3 Pulse Measurements — Details
Related Topics:
• Pulse Measurements — Specifications
• Pulse Measurements — Overview
• Pulse Measurements — Details
• Pulse Measurements — Instructions
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
Typical Value
±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
Read More Review the PULSE COUNTERS
and Pulse on C Terminals sections in CR1000 Specifications
Review pulse measurement programming in CRBasic Editor Help for the PulseCount() and TimerIO() instructions.
Note Peripheral devices are available from Campbell Scientific to expand the number of pulse-input channels measured by the CR1000. Refer to the appendix
Measurement and Control Peripherals Lists
for more information.
The figure Pulse-Sensor Output-Signal Types
illustrates pulse signal types measurable by the CR1000:
• low-level ac
• high-frequency
• switch-closure
The figure Switch-Closure Schematic
illustrates the basic internal circuit and the external connections of a switch-closure pulse sensor. The table Pulse
Measurements: Terminals and Programming
summarizes available measurements, terminals available for those measurements, and the CRBasic instructions used. The number of terminals configurable for pulse input is determined from the table CR1000 Terminal Definitions
349
350
Section 8. Operation
Figure 91. Pulse-Sensor Output-Signal Types
Figure 92. Switch-Closure Pulse Sensor
Figure 93. Terminals Configurable for Pulse Input
Section 8. Operation
Table 76. Pulse Measurements:, Terminals and Programming
Measurement
Low-level ac, counts
Low-level ac, Hz
Low-level ac, running average
High frequency, counts
High frequency, Hz
High frequency, running average
P
Terminals
C
Terminals
CRBasic
Instruction
Switch closure, counts
Switch closure, Hz
Switch closure, running average
Calculated period
Calculated frequency
Time from edge on previous port
Time from edge on port 1
Count of edges
Pulse count, period
Pulse count, frequency
351
352
Section 8. Operation
8.1.3.1 Pulse Measurement Terminals
P Terminals
• Input voltage range = –20 to 20 V
If pulse input voltages exceed ±20 V, third-party external-signal conditioners should be employed. Contact a Campbell Scientific application engineer if assistance is needed. Under no circumstances should voltages greater than 50 V be measured.
C Terminals
• Input voltage range = –8 to 16 Vdc
C terminals configured for pulse input have a small 25 ns input RC-filter time constant between the terminal block and the CMOS input buffer, which allows for high-frequency pulse measurements up to 250 kHz and edge counting up to 400 kHz. The CMOS input buffer recognizes inputs ≥3.8 V as being high and inputs
≤1.2 V as being low.
Open-collector (bipolar transistors) or open-drain (MOSFET) sensors are typically measured as frequency sensors. C terminals can be conditioned for open collector or open drain with an external pull-up resistor as shown in figure Using a Pull-up Resistor on C terminals
.
The pull-up resistor counteracts an internal 100 kΩ pull-down resistor, allowing inputs to be pulled to >3.8 V for reliable measurements.
8.1.3.2 Low-Level Ac Measurements — Details
Related Topics:
• Low-Level Ac Input Modules — Overview
• Low-Level Ac Measurements — Details
• Pulse Input Modules — Lists
Low-level ac (sine-wave) signals can be measured on P terminals. Sensors that commonly output low-level ac include:
• Ac generator anemometers
Measurements include the following:
• Counts
• Frequency (Hz)
• Running average
Rotating magnetic-pickup sensors commonly generate ac voltage ranging from thousandths of volts at low-rotational speeds to several volts at high-rotational speeds. Terminals configured for low-level ac input have in-line signal conditioning for measuring signals ranging from 20 mV RMS (±28 mV peak-topeak) to 14 V RMS (±20 V peak-to-peak).
Section 8. Operation
P Terminals
• Maximum input frequency is dependent on input voltage: o 1.0 to 20 Hz at 20 mV RMS o 0.5 to 200 Hz at 200 mV RMS o 0.3 to 10 kHz at 2000 mV RMS o 0.3 to 20 kHz at 5000 mV RMS
• CRBasic instruction: PulseCount()
Internal ac coupling is used to eliminate dc-offset voltages of up to ±0.5 Vdc.
C Terminals
Low-level ac signals cannot be measured directly by C terminals. Refer to the appendix Pulse Input Modules List
for information on peripheral terminal expansion modules available for converting low-level ac signals to square-wave signals.
8.1.3.3 High-Frequency Measurements
High-frequency (square-wave) signals can be measured on P or C terminals.
Common sensors that output high-frequency include:
• Photo-chopper anemometers
• Flow meters
Measurements include counts, frequency in hertz, and running average. Refer to the section Frequency Resolution
for information about how the resolution of a frequency measurement can be different depending on whether the measurement is made with the PulseCount() or TimerIO() instruction.
•
P Terminals
• Maximum input frequency = 250 kHz
• CRBasic instructions: PulseCount()
High-frequency pulse inputs are routed to an inverting CMOS input buffer with input hysteresis. The CMOS input buffer is at output 0 level with inputs ≥ 2.2 V and at output 1 level with inputs ≤ 0.9 V. An internal 100 kΩ resistor is automatically connected to the terminal to pull it up to 5 Vdc. This pull-up resistor accommodates open-collector (open-drain) output devices.
C Terminals
• Maximum input frequency = <1 kHz
• CRBasic instructions: PulseCount(), TimerIO()
8.1.3.3.1 Frequency Resolution
Resolution of a frequency measurement made with the PulseCount() instruction is calculated as
353
354
Section 8. Operation where
FR = resolution of the frequency measurement (Hz)
S = scan interval of CRBasic program
Resolution of a frequency measurement made with the TimerIO() instruction is where
FR = frequency resolution of the measurement (Hz)
R = timing resolution of the TimerIO() measurement = 540 ns
P = period of input signal (seconds). For example, P = 1 / 1000 Hz = 0.001 s
E = Number of rising edges per scan or 1, whichever is greater.
Table 77. Example. E for a 10 Hz input signal
Scan
5.0
0.5
0.05
Rising Edge / Scan
50
5
0.5
E
50
5
1
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 Comparison
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.
Increasing a measurement interval from 1 s 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 78. Frequency Resolution Comparison
PulseCount(), POption=1
0.5 s Scan
FR = 2 Hz
TimerIO(), Function=2 FR = 0.0011 Hz
5.0 s Scan
FR = 0.2 Hz
FR = 0.00011 Hz
8.1.3.3.2 Frequency Measurement Q & A
Q: When more than one pulse is in a scan interval, what does TimerIO() return when configured for a frequency measurement? Does it average the measured periods and compute the frequency from that (f = 1/T)? For example,
Scan (50,mSec,10,0)
TimerIO (WindSpd(),11111111,00022000,60,Sec)
Section 8. Operation
A: In the background, a 32-bit-timer counter is saved each time the signal transitions as programmed (rising or falling). This counter is running at a fixed high frequency. A count is also incremented for each transition. When the
TimerIO() instruction executes, it uses the difference of time between the edge prior to the last execution and the edge prior to this execution as the time difference. The number of transitions that occur between these two times divided by the time difference gives the calculated frequency. For multiple edges occurring between execution intervals, this calculation does assume that the frequency is not varying over the execution interval. The calculation returns the average regardless of how the signal is changing.
8.1.3.4 Switch-Closure and Open-Collector Measurements
Switch-closure and open-collector signals can be measured on P or C terminals.
Mechanical-switch closures have a tendency to bounce before solidly closing.
Unless filtered, bounces can cause multiple counts per event. The CR1000 automatically filters bounce. Because of the filtering, the maximum switchclosure frequency is less than the maximum high-frequency measurement frequency. Sensors that commonly output a switch-closure or open-collector signal include:
• Tipping-bucket rain gages
• Switch-closure anemometers
• Flow meters
Data output options include counts, frequency (Hz), and running average.
P Terminals
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 hardware debounce filter has a 3.3 ms time-constant. Connection configurations are illustrated in table Switch Closures and Open Collectors on P Terminals
• Maximum input frequency = 90 Hz
• CRBasic instruction: PulseCount()
C Terminals
Switch-closure mode is a special case edge-count function that measures drycontact-switch closures or open collectors. The operating system filters bounces.
Connection configurations are illustrated in table Switch Closures and Open
Collectors on C Terminals
• Maximum input frequency = 150 Hz
• CRBasic instruction: PulseCount()
8.1.3.5 Edge Timing
Edge time and period can be measured on P or C terminals. Applications for edge timing include:
• Measurements for feedback control using pulse-width or pulse-duration modulation (PWM/PDM).
Measurements include time between edges expressed as frequency (Hz) or period
(µs).
355
356
Section 8. Operation
C Terminals
• Maximum input frequency <1 kHz
• CRBasic instruction: TimerIO()
• Rising or falling edges of a square-wave signal are detected: o Rising edge — transition from <1.5 Vdc to >3.5 Vdc. o Falling edge — transition from >3.5 Vdc to <1.5 Vdc.
• Edge-timing resolution is approximately 540 ns.
8.1.3.6 Edge Counting
Edge counts can be measured on C terminals. o
C Terminals
• Maximum input frequency 400 kHz
• CRBasic instruction: TimerIO()
• Rising or falling edges of a square-wave signal are detected: o Rising edge — transition from <1.5 Vdc to >3.5 Vdc. o Falling edge — transition from >3.5 Vdc to <1.5 Vdc.
8.1.3.7 Pulse Measurement Tips
Basic connection of pulse-output sensors is illustrated in table Switch Closures
and Open Collectors
The PulseCount() instruction, whether measuring pulse inputs on P or C terminals, uses dedicated 24-bit counters to accumulate all counts over the programmed scan interval. The resolution of pulse counters is one count or 1 Hz.
Counters are read at the beginning of each scan and then cleared. Counters will overflow if accumulated counts exceed 16,777,216, resulting in erroneous measurements.
• Counts are the preferred PulseCount() output option when measuring the number of tips from a tipping-bucket rain gage or the number of times a door opens. Many pulse-output sensors, such as anemometers and flow meters, are calibrated in terms of frequency (Hz
) so are usually measured using the PulseCount() frequency-output 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 /
(scan interval). The sum is essentially ±1 / (scan interval).
• Use the LLAC4
module to convert non-TTL-level signals, including low-level ac signals, to TTL levels for input into C terminals.
• As shown in the table Switch Closures and Open Collectors on C Terminals
C terminals, with regard to the 6.2 V Zener diode, have an input resistance of 100 kΩ with input voltages < 6.2 Vdc. For input voltages ≥ 6.2
Vdc, C terminals have an input resistance of only 220 Ω.
Section 8. Operation
Table 79. Switch Closures and Open Collectors on P Terminals
Switch Closure on P Terminal Open Collector on on P Terminal
Table 80. Switch Closures and Open Collectors on C Terminals
Switch Closure on C Terminal:
No Pull-Up
Switch Closure on C Terminal:
5 Vdc Pull-Up
Open Collector on C Terminal:
5 Vdc Pull-Up
357
358
Section 8. Operation
Switch Closure on C Terminal:
12 Vdc Pull-Up
Open Collector on C Terminal:
12 Vdc pull-up
Internal CR1000 circuitry that supports open-collector
and switch-closure measurements (FYI)
• Pay attention to specifications. Take time to understand the signal to be measured and compatible input terminals and CRBasic instructions. The table Three Differing Specifications Between P and C Terminals
compares specifications for pulse-input terminals to emphasize the need for matching the proper device to the application.
Table 81. Three Specifications Differing Between P and C Terminals
P Terminal C Terminal
High-Frequency
Maximum
250 kHz 400 kHz
Input Voltage
Maximum
State Transition
Thresholds
20 Vdc
Count upon transition from
<0.9 Vdc to >2.2 Vdc
16 Vdc
Count upon transition from
<1.2 Vdc to >3.8 Vdc
Section 8. Operation
8.1.3.7.1 TimerIO() NAN Conditions
• NAN will be the result of a TimerIO() measurement if one of two conditions occurs: o Timeout expires o The signal frequency is too fast (> 3 KHz). When a C terminal experiences a too fast frequency, the CR1000 operating system disables the interrupt that is capturing the precise time until the next scan is serviced. This is done so that the CR1000 processor does not get occupied by excessive interrupts. A small RC filter retrofitted to the sensor switch should fix the problem.
8.1.3.7.2 Input Filters and Signal Attenuation
P and C terminals are equipped with pulse-input filters to reduce electronic noise that can cause false counts. The higher the time constant (τ) of the filter, the tighter the filter. The table Time Constants
lists τ values. So, while a C terminal measured with the TimerIO() frequency measurement may be superior for clean signals, a P terminal filter (much higher τ) may be required to get a measurement on an electronically noisy signal.
Input filters attenuate the amplitude (voltage) of the signal. The amount of attenuation is a function of the frequency passing through the filter. Higherfrequency signals are attenuated more. If a signal is attenuated enough, it may not pass the state transition thresholds required by the detection device as listed in table Pulse-Input Terminals and Measurements
). To avoid over attenuation, sensor-output voltage must be increased at higher frequencies. For example, table
Low-Level Ac Filter Attenuation
shows that increasing voltage is required for low-level ac inputs to overcome filter attenuation on P terminals configured for low-level ac: 8.5 ms time constant filter (19 Hz 3 dB frequency) for lowamplitude signals; 1 ms time constant (159 Hz 3 dB frequency) for larger (> 0.7
V) amplitude signals.
For P terminals, 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 Pulse-Count Waveform
For a 0 to 5 Vdc square wave input to a pulse terminal, the maximum frequency that can be counted in high-frequency mode is approximately 250 kHz.
Table 82. Time Constants (τ)
Measurement
P terminal low-level ac mode
P terminal high-frequency mode
P terminal switch-closure mode
C terminal high-frequency mode
C terminal switch-closure mode
τ
See footnote of the table Filter Attenuation of
Frequency Signals
1.2
3300
0.025
0.025
359
Section 8. Operation
Table 83. Low-Level Ac Amplitude and Maximum Measured
Frequency
Ac mV (RMS)
20
200
2000
5000
Maximum Frequency
20
200
10,000
20,000
Figure 94. Amplitude reduction of pulse-count waveform (before and after
1 µs time-constant filter)
360
8.1.4 Period Averaging — Details
Related Topics:
• Period Averaging — Specifications
• Period Averaging — Overview
• Period Averaging — Details
The CR1000 can measure the period of a signal on a SE terminal. The specified number of cycles is timed with a resolution of 136 ns, making the resolution of the period measurement 136 ns 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 programmed threshold. The threshold parameter allows referencing 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
Section 8. Operation signals, but it 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 CR1000 ground (threshold = 0) because of offset voltage drift along with limited accuracy (±10 mV) and resolution (1.2 mV) of a threshold other than zero. Figure Input Conditioning Circuit for Period
Averaging
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.
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 95. Input Conditioning Circuit for Period Averaging
8.1.5 Vibrating-Wire Measurements — Details
Related Topics:
• Vibrating-Wire Measurements — Specifications
• Vibrating-Wire Measurements — Overview
• Vibrating-Wire Measurements — Details
The CR1000 can measure vibrating-wire or vibrating-strip sensors, including strain gages, pressure transducers, piezometers, tilt meters, crack meters, and load cells. These sensors are used in structural, hydrological, and geotechnical applications because of their stability, accuracy, and durability. The CR1000 can measure vibrating-wire sensors through specialized interface modules. More sensors can be measured by using multiplexers (see Analog Multiplexers
).
361
Section 8. Operation
The figure Vibrating-Wire Sensor
illustrates basic construction of a sensor.
To make a measurement, plucking and pickup coils are excited with a swept frequency
The ideal behavior then is that all non-resonant frequencies quickly decay, and the resonant frequency continues. As the resonant frequency cuts the lines of flux in the pickup coil, the same frequency is induced on the signal wires in the cable connecting the sensor to the CR1000 or interface.
Measuring the resonant frequency by means of period averaging is the classic technique, but Campbell Scientific has developed static and dynamic spectralanalysis techniques (VSPECT
measurements up to 333.3 Hz. m ) that produce superior noise rejection, higher resolution, diagnostic data, and, in the case of dynamic VSPECT,
A resistive-thermometer device (thermistor or RTD), which is included in most vibrating-wire sensor housings, can be measured to compensate for temperature errors in the measurement.
Figure 96. Vibrating-Wire Sensor
362
8.1.5.1 Time-Domain Measurement
Although obsolete in many applications, time-domain period-averaging vibratingwire measurements can be made on H L terminals. The VibratingWire() instruction makes the measurement. Measurements can be made directly on these terminals, but usually are made through a vibrating-wire interface that amplifies and conditions the vibrating-wire signal and provides inputs for embedded thermistors or RTDs. Interfaces of this type are no longer available from
Campbell Scientific.
For most applications, the advanced techniques of static and dynamic VSPECT measurements are preferred.
TM
8.1.6 Reading Smart Sensors — Details
Related Topics:
• Reading Smart Sensors — Overview
• Reading Smart Sensors — Details
8.1.6.1 RS-232 and TTL
Read More Serial Input / Output Instructions
and Serial I/O
The CR1000 can receive and record most TTL (0 to 5 Vdc) and true RS-232 data from devices such as smart sensors. See the table CR1000 Terminal Definitions
(p.
Section 8. Operation
for those terminals and serial ports configurable for either TTL or true RS-232 communications. Use of the CS I/O port for true RS-232 communications requires use of an interface device. See the appendix CS I/O Serial Interfaces
(p.
If additional serial inputs are required, serial input expansion modules can be connected. See the appendix Serial I/O Modules List
Serial data are usually captured as text strings, which are then parsed (split up) as defined in the
CRBasic program.
Note C terminals configured as Tx transmit only 0 to 5 Vdc logic. However, C terminals configured as Rx read most true RS-232 signals. When connecting serial sensors to a C terminal configured as Rx, the sensor power consumption may increase by a few milliamps due to voltage clamps in the CR1000. 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 C Terminal RS-232 Input to 5 Volts
shows a circuit that limits voltage to 5 Vdc.
Figure 97. Circuit to Limit C Terminal Input to 5 Vdc
8.1.6.2 SDI-12 Sensor Support — Details
Related Topics:
• SDI-12 Sensor Support — Overview
• SDI-12 Sensor Support — Details
• Serial I/O: SDI-12 Sensor Support — Programming Resource
• SDI-12 Sensor Support — Instructions
SDI-12 is a communication 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. SDI12Recorder() instruction communicates with SDI-12 sensors on terminals configured for SDI-12 input.
See the table CR1000 Terminal Definitions
to determine those terminals configurable for SDI-12 communications.
8.1.7 Field Calibration — Overview
Related Topics:
• Field Calibration — Overview
• Field Calibration — Details
Calibration increases accuracy of a measurement device by adjusting its output, or the measurement of its output, to match independently verified quantities.
Adjusting sensor output directly is preferred, but not always possible or practical.
363
Section 8. Operation
By adding FieldCal() or FieldCalStrain() instructions to the CR1000 CRBasic program, measurements of a linear sensor can be adjusted by modifying the programmed multiplier and offset applied to the measurement.
8.1.8 Cabling Effects
Related Topics:
• Cabling Effects — Overview
• Cabling Effects — Details
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.
8.1.8.1 Analog-Sensor Cables
Cable length in analog sensors is most likely to affect the signal settling time. For more information, see the section Signal Settling Time
8.1.8.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 and so shorten switch life. As shown in figure Current Limiting Resistor in a Rain Gage Circuit
a 100 Ω resistor is connected in series at the switch to prevent arcing. This resistor is installed on all rain gages currently sold by Campbell Scientific.
Figure 98. Current-Limiting Resistor in a Rain Gage Circuit
364
8.1.8.3 RS-232 Sensors
RS-232 sensor cable lengths should be limited to 50 feet.
8.1.8.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 or powering the sensor with a second 12 Vdc power supply placed near the sensor.
Section 8. Operation
8.1.9 Synchronizing Measurements
Related Topics:
• Synchronizing Measurements — Overview
• Synchronizing Measurements — Details
Timing of a measurement is usually controlled relative to the CR1000 clock.
When sensors in a sensor network are measured by a single CR1000, 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 CR1000s. Techniques outlined below enable network administrators to synchronize CR1000 clocks and measurements in a CR1000 network.
Care should be taken when a clock-change operation is planned. Any time the
CR1000 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.
Techniques to synchronize measurements across a network include:
1. LoggerNet
– when reliable telecommunications are common to all
CR1000s in a network, the LoggerNet 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 telecommunication systems and can achieve synchronies of <100 ms deviation. Errors of 2 to 3 second may be seen on very busy RF connections or long distance internet connections.
Note Common PC clocks are notoriously inaccurate. Information available at
http://www.nist.gov/pml/div688/grp40/its.cfm gives some good pointers on keeping PC clocks accurate.
2. Digital trigger — a digital trigger, rather than a clock, can provide the synchronization signal. When cabling can be run from CR1000 to CR1000, each CR1000 can catch the rising edge of a digital pulse from the master
CR1000 and synchronize measurements or other functions, using the
WaitDigTrig() instructions, independent of CR1000 clocks or data time stamps. When programs are running in pipeline mode, measurements can be synchronized to within a few microseconds (see WaitDigTrig Scans
).
3. PakBus
commands — the CR1000 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 CR1000 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. This is not the same clock check process used by
LoggerNet as it does not use average round trip calculations to try to account for network connection latency.
365
366
Section 8. Operation
4. Radios — A PakBus enabled radio network has an advantage over Ethernet in that ClockReport() can be broadcast to all dataloggers in the network simultaneously. Each will set its clock 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. CR1000 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.
With any synchronization method, care should be taken as to when and how things are executed. Nudging the clock can cause skipped scans or skipped records if the change is made at the wrong time or changed by too much.
5. GPS — clocks in CR1000s can be synchronized to within about 10 ms of each other using the GPS() instruction. CR1000s built since October of 2008
(serial numbers ≥ [20409] ) can be synchronized within a few microseconds of each other and within ≈200 µs of UTC. While a GPS signal is available, the CR1000 essentially uses the GPS as its continuous clock source, so the chances of jumps in system time and skipped records are minimized.
6. Ethernet — any CR1000 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. The NTP server could be another logger or any
NTP server (such as an email server or nist.gov). Try to use a local server — something where communication latency is low, or, at least, consistent. Also, try not to execute the NetworkTimeProtocol() at the top of a scan; try to ask for the server time between even seconds.
8.2 Measurement and Control Peripherals — Details
Related Topics:
• Measurement and Control Peripherals — Overview
• Measurement and Control Peripherals — Details
• Measurement and Control Peripherals — Lists
Peripheral devices expand the CR1000 input and output capacities. Some peripherals are designed as SDM (synchronous devices for measurement) or
CDM (CPI devices for measurement). SDM and CDM devices are intelligent peripherals that receive instruction from, and send data to, the CR1000 using proprietary communication protocols through SDM terminals and CPI interfaces.
The following sections discuss peripherals according to measurement types.
8.2.1 Analog-Input Modules
Read More For more information see appendix Analog-Input Modules List
Mechanical and solid-state multiplexers are available to expand the number of analog sensor inputs. Multiplexers are designed for single-ended, differential, bridge-resistance, or thermocouple inputs.
Section 8. Operation
8.2.2 Pulse-Input Modules
Read More For more information see appendix Pulse-Input Modules List
Pulse-input expansion modules are available for switch-closure, state, pulse-count and frequency measurements, and interval timing.
8.2.2.1 Low-Level Ac Input Modules — Overview
Related Topics:
• Low-Level Ac Input Modules — Overview
• Low-Level Ac Measurements — Details
• Pulse Input Modules — Lists
Low-level ac input modules increase the number of low-level ac signals a
CR1000 can monitor by converting low-level ac to high-frequency pulse.
8.2.3 Serial I/O Modules — Details
Read More For more information see appendix Serial I/O Modules List
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 application engineer when deciding which serial-input module is suited to a particular application.
8.2.4 Terminal-Input Modules
Read More For more information see appendix Passive Signal Conditioners List
Terminal Input Modules (TIMs) are devices that provide simple measurementsupport circuits in a convenient package. TIMs include voltage dividers for cutting the output voltage of sensors to voltage levels compatible with the
CR1000, modules for completion of resistive bridges, and shunt modules for measurement of analog-current sensors.
8.2.5 Vibrating-Wire Modules
Read More For complete information see appendix Vibrating-Wire Modules List
Vibrating-wire modules interface vibrating-wire transducers to the CR1000.
8.2.6 Analog-Output Modules
Read More For more information see appendix Continuous-Analog-Output
(CAO) Modules List
The CR1000 can scale measured or processed values and transfer these values in digital form to an analog output device. The analog output device performs a
367
368
Section 8. Operation digital-to-analog conversion to output an analog voltage or current. The output level is maintained until updated by the CR1000.
8.2.7 PLC Control Modules — Overview
Related Topics:
• PLC Control — Overview
• PLC Control — Details
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• PLC Control — Instructions
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
Controlling power to an external device is a common function of the CR1000.
On-board control terminals and peripheral devices are available for binary (on / off) or analog (variable) control. A switched, 12 Vdc terminal ( SW12V) is also available. See the section Switched Unregulated (Nominal 12 Volt)
8.2.7.1 Terminals Configured for Control
C terminals can be configured as output ports so set low (0 Vdc) or high (5 Vdc) using the PortSet() or WriteIO() instructions. Ports C4, C5, and C7 can be configured for pulse width modulation with maximum periods of 36.4 s, 9.1 s, and
2.27 s, respectively. A terminal configured for digital I/O is normally used to operate an external relay-driver circuit because the port itself has limited drive capacity. Drive capacity is determined by the 5 Vdc supply and a 330 Ω output resistance. It is expressed as:
V o
= 4.9 V – (330 Ω) • I o
Where V o
is the drive limit, and I o
is the current required by the external device.
Figure Control Port Current Sourcing
plots the relationship.
Section 8. Operation
Figure 99. Current sourcing from C terminals configured for control
8.2.7.2 Relays and Relay Drivers
Read More For more information see appendix Relay Drivers Modules List
(p.
Several relay drivers are manufactured by Campbell Scientific. Compatible, inexpensive, and reliable single-channel relay drivers for a wide range of loads are also available from electronic vendors such as Crydom, Newark, and Mouser
(p.
8.2.7.3 Component-Built Relays
Figure Relay Driver Circuit with Relay
shows a typical relay driver circuit in conjunction with a coil driven relay, which may be used to switch external power to a device. In this example, when the terminal configured for control is set 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
illustrates this. If the device 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.
369
Section 8. Operation
Figure 100. Relay Driver Circuit with Relay
Figure 101. Power Switching without Relay
370
8.3 Memory
Related Topics:
• Memory — Overview
• Memory — Details
• Data Storage Devices — List
8.3.1 Storage Media
CR1000 memory consists of four non-volatile storage media:
• Internal battery-backed SRAM
• Internal flash
• Internal serial flash
• External flash (optional flash USB: drive)
• External CompactFlash ® optional CF card and module (CRD: drive)
Section 8. Operation
Table CR1000 Memory Allocation
and table CR1000 SRAM Memory
illustrate the structure of CR1000 memory around these media. The CR1000 uses and maintains most memory features automatically. However, users should periodically review areas of memory wherein data files, CRBasic program files, and image files reside. See section File Management in CR1000 Memory
for more information.
By default, final-data memory (memory for stored data) is organized as ring memory. When the ring is full, oldest data are overwritten by newest data. The
DataTable() instruction, however, has an option to set a data table to Fill and
Stop.
Table 84. CR1000 Memory Allocation
Memory
Sector
Main
Battery-Backed SRAM
1
4 MB*
Comments
• OS variables
• CRBASIC compiled program binary structure
• CRBASIC variables
• Final-data memory
• Communication memory
• USR: FAT32 RAM drive
• 'Keep' memory
• Dynamic runtime memory allocation
• See table CR1000 SRAM Memory
for detail.
Operating System
Flash Memory
2
2 MB
• Operating system
• Serial number
• Board revision
• Boot code
• Erased when loading new OS. Boot code erased only if changed.
371
372
Section 8. Operation
Table 84. CR1000 Memory Allocation
Internal
Serial Flash
3
512 kB
• Device settings (12 kB) — PakBus address and settings, station name.
Rebuilt when a setting changes.
• CPU:drive (500 kB) — program files, field calibration files, other files not frequently overwritten. 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.
• FAT32 file system
• Limited write cycles (100,000)
• Slow serial access
External Flash
(Optional)
2 GB: USB: drive
USB: drive
— Holds program files. Holds a copy of requested final-memory table data as files when TableFile() instruction is used. USB: data can be retrieved from the storage device with Windows Explorer. USB: drive can facilitate the use of
Powerup.ini.
External CompactFlash
(Optional)
≤ 16 GB: CRD: drive
CRD: drive
— Holds program files. Holds a copy of final-storage table data as files when TableFile() instruction with Option 64 is used (replaces CardOut()). See
Writing High-Frequency Data to Memory Cards
for more information. When data are requested by a PC, data first are provided from SRAM. If the requested records have been overwritten in SRAM, data are sent from CRD:. Alternatively, CRD: data can be retrieved in a binary format using datalogger support software
File
Control. Binary files are converted using CardConvert software. 10% or 80 kB of CF memory (whichever is smaller) is reserved for program storage. CF cards can facilitate the use of Powerup.ini.
1
SRAM
∙CR1000 changed from 2 to 4 MB SRAM in Sept 2007. SNs ≥ 11832 are 4 MB.
2 Flash is rated for > 1 million overwrites.
3
Serial flash is rated for 100,000 overwrites (50,000 overwrites on 128 kB units). Care should be taken in programs that overwrite memory to use the CRD: or USR: drives so as not to wear-out the CPU: drive.
∙The CR1000 changed from 128 to 512 kB serial flash in May 2007. SNs ≥ 9452 are 512 kB.
Section 8. Operation
Table 85. CR1000 Main Memory
Static Memory
Use Comments
Operational memory used by the operating system. 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, communication 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 used by the CRBasic program. These values may persist through power-up, recompile, and watchdog events if the PreserveVariables instruction is in the running program.
————————————
Final-Data Memory Stores data. 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. Given lowest priority in SRAM memory allocation.
————————————
Communication Memory 1
————————————
Communication 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 MB (4 MB Mem)
<= 1.5 MB (2 MB Mem)
Less on older units with more limited memory.
Optionally allocated. Holds image files. Holds a copy of final-data memory when TableFile() instruction used. Provides memory for FileRead() and
FileWrite() operations. Managed in File Control. Status reported in Status table fields "USRDriveSize" and "USRDriveFree."
373
374
Section 8. Operation
Table 86. Memory Drives
Drive
CPU:
1
USR:
2
Recommended File Types cr1, .CAL cr1, .CAL
USB: .DAT
CRD:
Principal use is to expand final-data memory
but it is also used to store .JPG, cr1, and .DAT files.
1
The CPU: drive uses a FAT16 file system, so it is limited to 128 file. If the file names are longer than 8.3 characters (e.g. 12345678.123), you can store less.
2
The USR: drive uses a FAT32 file system, so there is no limit, beyond practicality and available memory, to the number of files that can be stored. While a FAT file system is subject to fragmentation, performance degradation is not likely to be noticed since the drive has very fast access because it has a relatively small amount of solid state RAM.
3
The CRD: drive is a CompactFlash card attached to the CR1000 by use of a CF card storage
module
Cards should be formatted as FAT32 for optimal performance. The card format feature in the CR1000 will format the card with the same format previously used on the card.
8.3.1.1 Memory Drives — On-Board
Data-storage drives are listed in table CR1000 Memory Drives
Data-table
SRAM and the CPU: drive are automatically partitioned for use in the CR1000.
The USR: drive can be partitioned as needed. The USB: drive is automatically partitioned when a Campbell Scientific mass-storage device
is connected.
The CRD: drive is automatically partitioned when a memory card is installed.
8.3.1.1.1 Data Table SRAM
Primary storage for measurement data are those areas in SRAM allocated to data tables as detailed in table CR1000 SRAM Memory
Measurement data can be also be stored as discrete files on USR: or USB: by using TableFile() instruction.
The CR1000 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 Structure
). The DataTable() instruction allows the size of a data table to be programmed. Discrete data files are normally created only on a PC when data are retrieved using datalogger support software
Data are usually erased from this area when a program is sent to the CR1000.
However, when using support software File Control menu Send
command or CRBasic Editor Compile, Save and Send
command, options are available to preserve data when downloading programs.
8.3.1.1.2 CPU: Drive
CPU: is the default drive on which programs and calibration files are stored. It is formatted as FAT16, so it has a limit of 128 files. Do not store data on CPU: or premature failure of memory will likely result.
Section 8. Operation
8.3.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: 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 kB; i.e., for a CR1000 with 4 MB memory, the maximum size of USR: is about 3.6 MB.
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 by accessing it in the Status table or by loading a CRBasic program with a different
USR: drive size entered in a SetStatus() or SetSetting() instruction. See section
Configuration with CRBasic Program
Measurement data can be stored on USR: as discrete files by using the
TableFile() instruction. Table TableFile()-Instruction Data-File Formats
describes available data-file formats.
Note Placing an optional USR: size setting in the CRBasic program over-rides manual changes to USR: size. When USR: size is changed manually, the
CRBasic 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 the appendix Cameras ), certain configuration files, files written for
FTP retrieval, HTML files for viewing with web access, and files created with the
TableFile() instruction. Files on USR: can be collected using datalogger support
software
Retrieve
command, or automatically using the datalogger support software Setup File Retrieval tab functions.
Monitor use of available USR: memory to ensure adequate space to store new files. FileManage() command can be used in the CRBasic program to remove files. Files also can be removed using datalogger support software Delete
command.
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 File Control
window.
8.3.1.1.4 USB: Drive
USB: drive uses Flash
memory on a Campbell Scientific mass storage device (see the appendix Mass Storage Devices
). 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.
erm. Flash
escribes available data-file formats.
375
376
Section 8. Operation
Caution When removing mass-storage devices, do so when the LED is not flashing or lit.
Consider the following when using Campbell Scientific mass-storage devices:
• format as FAT32
• connect to the CR1000 CS I/O port
• remove only when inactive or data corruption may result
8.3.1.2 Memory Card (CRD: Drive) — Details
Related Topics:
• Memory Card (CRD: Drive) — Overview
• Memory Card (CRD: Drive) — Details
• Memory Cards and Record Numbers
• Data Output: Writing High-Frequency Data to Memory Cards
• File-System Errors
• Data Storage Devices — List
• Data-File Format Examples
• Data Storage Drives Table
The CRD: drive uses CompactFlash ® (CF) card memory cards exclusively. Its primary purpose is the storage of binary data files. The CR1000 requires addition of a peripheral card slot. See appendix Data Storage Devices List
Purchasing industrial grade memory cards from Campbell Scientific is recommended. Use of consumer grade cards substantially increases the risk of data loss.
Caution Use care when inserting or removing memory cards. Alway turn off
CR1000 power before installing or removing card modules. Removing a card from the module while it is being written to can cause data corruption or damage the card. Before removing the card, press the removal or eject button and wait for the LED to indicate that the card is disabled.
To prevent losing data, collect data from the memory card before sending a program to the datalogger. When a program is sent to the datalogger all data on the memory card may be erased.
Campbell Scientific CF card modules connect to the CR1000 peripheral port.
Each has a slot for Type I or Type II CF cards .A maximum of 30 data tables can be created on a memory card.
Note CardConvert software, included with mid- and top-level datalogger support software
converts binary card data to the standard Campbell Scientific data format.
When a data table is sent to a memory card, a data table of the same name in
SRAM is used as a buffer for transferring data to the card. When the card is present, the Status table will show the size of the table on the card. If the card is removed, the size of the table in SRAM is shown.
When a new program is compiled that sends data to the memory card, the CR1000 checks if a card is present and if the card has adequate space for the data tables. If no card is present, or if space is inadequate, the CR1000 will warn that the card is not being used. However, the CRBasic program runs anyway and data are stored
Section 8. Operation to SRAM. When a card is inserted later, data accumulated in the SRAM table are copied to the card.
Formatting Memory Cards
The CR1000 accepts memory cards formatted as FAT or FAT32; however,
FAT32 is recommended. Otherwise, some functionality, such as the ability to manage large numbers of files (>254) is lost. Older CR1000 operating systems formatted cards as FAT or FAT32. Newer operating systems always format cards as FAT32.
To avoid long compile times on a freshly formatted card, format the card on a PC, then copy a small file to the card, and then delete the file (while still in the PC).
Copying the file to the freshly formatted card forces the PC to update the info sector. The PC is much faster than the datalogger at updating the info sector.
FAT32 uses an “info sector” to store the free cluster information. This info sector prevents the need to repeatedly traverse the FAT for the bytes free information.
After a card is formatted by a PC, the info sector is not automatically updated.
Therefore, when the datalogger boots up, it must determine the bytes available on the card prior to loading the Status table. Traversing the entire FAT of a 16 GB card can take up to 30 minutes or more. However, subsequent compile times are much shorter because the info sector is used to update the bytes free information.
Table 87. Memory Card States
CardStatus
Card OK
CardBytesFr ee
>0
>0
CompileResult s
-1
LED Situation(s)
Formatted card inserted, powered up
Solid green for 20 s Card still inserted, but removal button has been pressed
CFM100/NL115 removed while logger is running (do not do this)
Program contains CardOut(). Card inserted before power up.
No Card
Present
No Card
Present.
Card Not
Being Used
>0
-1
-1
-1
-1
Compact Flash
Module not detected: CardOut not used.
Powered up, no card present
Card ejected / physically removed
Logger started without CFM100 / NL115
Program contains CardOut(). CFM100/NL115 not attached at power up.
Initializing
Table Files!
-1
0, have also seen with -1, that doesn't seem consistent
Solid Orange
Dim / fast flashing
Orange
Program contains CardOut(). Card not present at power up.
Program contains CardOut(). Card not present at power up. Card inserted after power up. If all goes well, CardStatus will change to "Card OK." and CardBytesFree will be >0.
8.3.2 Data-File Formats
Data-file format options are available with the TableFile() instruction. Timeseries data have an option to include header, time stamp and record number. See the table TableFile() Instruction Data-File Formats
For a format to be compatible with datalogger support software
graphing and reporting tools,
377
378
Section 8. Operation header, time stamps, 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, which is available at www.campbellsci.com.
Table 88. TableFile() Instruction Data-File Formats
TableFile()
Format
Option
Base
File
Format
Header
Information
Elements Included
Time
Stamp
0
1
TOB1
7
8
1
5
6
3
4
1
2
TOB1
TOB1
TOB1
TOB1
TOB1
TOB1
TOB1
TOA5
Record
Number
12
13
14
15
16
1
9
10
11
TOA5
TOA5
TOA5
TOA5
TOA5
TOA5
TOA5
CSIXML
17
18
19
32
1
CSIXML
CSIXML
CSIXML
CSIJSON
33
34
CSIJSON
CSIJSON
35
64
2
CSIJSON
TOB3
1
Formats compatible with datalogger support software
data-viewing and graphing utilities
2
See Writing High-Frequency Data to Memory Cards
for more information on using option 64.
Section 8. Operation
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' E1HŒŸp' E1H›Ÿp' E1HªŸp' E1H¹Ÿp' E1H
TOA5
TOA5 files contain ASCII
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
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>
<r time="2010-12-20T11:38:15" no="12"><v1>13.29</v1><v2>21.04</v2></r>
</data>
</csixml>
379
380
Section 8. Operation
CSIJSON
CSIJSON files contain header information and data in a JSON
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]}]}
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 CR1000 CRBasic program.
Line 1 – Data Origins
Includes the following metadata series: file type, station name, CR1000 model name, CR1000 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.
Line 3 – Data Units
Includes the units associated with each field in the record. If no units are programmed in the CR1000 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 CR1000 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.
Record Element 1 – Timestamp
Data without timestamps are usually meaningless. Nevertheless, the
Section 8. Operation
TableFile() instruction optionally includes timestamps in some formats.
Record Element 2 – Record Number
Record numbers are optionally provided in some formats as a means to ensure data integrity and provide an up-count data field for graphing operations. The maximum record number is &hffffffff (a 32-bit number), then the record number sequence restarts at zero. The CR1000 reports back to the datalogger support software 31 bits, or a maximum of &h7fffffff, then it restarts at 0. For example, if the record number increments once a second, restart at zero will occur about once every 68 years (yes, years).
8.3.3 Resetting the CR1000
A reset is referred to as a "memory reset." Be sure to backup the current CR1000 configuration before a reset in case you need to revert to the old settings.
The following features are available for complete or selective reset of CR1000 memory:
• Full memory reset
• Program send reset
• Manual data-table reset
• Formatting memory drives
8.3.3.1 Full Memory Reset
Full memory reset occurs when an operating system is sent to the CR1000 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 communication memory
• Recompiles current program
Full memory reset does not affect the CRD: drive directly. Subsequent user program uploads, however, can erase CRD:.
Operating systems can also be sent using the program Send feature in datalogger support software
A full reset does not occur in this case. Beginning with
CR1000 operating system v.16, settings and registers in the Status table are preserved when sending a subsequent operating system by this method; data tables are erased. Rely on this feature only with an abundance of caution when sending an OS to CR1000s in remote, expensive to get to, or difficult-to-access locations.
8.3.3.2 Program Send Reset
Final-memory
data are erased when user programs are uploaded, unless preserve / erase data options are used. Preserve / erase data options are presented when sending programs using File Control Send
command and CRBasic
381
382
Section 8. Operation
Editor Compile, Save and Send
See Preserving Data at Program Send
(p.
for a more-detailed discussion of preserve / erase data at program send.
8.3.3.3 Manual Data-Table Reset
Data-table memory is selectively reset from
• Support software Station Status
command
• CR1000KD Keyboard Display: Data | Reset Data Tables
8.3.3.4 Formatting Drives
CPU:, USR:, USB:, and CRD: 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 are erased. Drive formatting is performed through datalogger support software
Format
command.
8.3.4 File Management
As summarized in table File Control Functions
files in CR1000 memory
(program, data, CAL, image) can be managed or controlled with datalogger support software
CR1000 Web API
or CoraScript
Use of
CoraScript is described in the LoggerNet software manual, which is available at
www.campbellsci.com. More information on file attributes that enhance datalogger security, see the Security
section.
Table 89. File-Control Functions
File-Control Functions
Sending programs to the CR1000
Setting program file attributes. See File Attributes (p. 383)
Sending an OS to the CR1000. Reset CR1000 settings.
Sending an OS to the CR1000. Preserve CR1000 settings.
Formatting CR1000 memory drives
Retrieving programs from the CR1000
Prescribes the disposition (preserve or delete) of old data files on Campbell Scientific mass storage device or memory card
Accessed Through
Program Send
1
, File Control Send
2
, DevConfig
3
, keyboard or powerup.ini with a Campbell Scientific mass storage device or memory card
4,5
Datalogger)
, web API
HTTPPut (Sending a File to a
File Control device or memory card
FileControl
2
;power-up with Campbell Scientific mass storage
5
, FileManage() instruction
6
, web API
DevConfig
3
Send OS tab; DevConfig
3
File