Advertisement
Advertisement
Want to get going? Go to the Quickstart
CR1000 Datalogger
Revision: 12/16
C o p y r i g h t © 2 0 0 0 – 2 0 1 6
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-9000. After a support 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-9106. 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.
7
8
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).
• 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 un-trained 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 ............................................................... 29
1.3 Capturing CRBasic Code .................................................................. 30
2. Precautions .............................................................. 31
3. Initial Inspection ....................................................... 33
4. Quickstart ................................................................. 35
4.1 Sensors — Quickstart ...................................................................... 35
4.2 Datalogger — Quickstart ................................................................... 36
4.2.1 CR1000 Module ......................................................................... 36
4.2.1.1 Wiring Panel — Quickstart.............................................. 36
4.3 Power Supplies — Quickstart ........................................................... 37
4.3.1 Internal Battery — Quickstart .................................................... 38
4.4 Data Retrieval and Comms — Quickstart ......................................... 38
4.5 Datalogger Support Software — Quickstart ...................................... 39
4.6 Tutorial: Measuring a Thermocouple ................................................ 40
4.6.1 What You Will Need .................................................................. 40
4.6.2 Hardware Setup .......................................................................... 40
4.6.2.1 Connect External Power Supply ...................................... 41
4.6.2.2 Connect Comms .............................................................. 41
4.6.3 PC200W Software Setup ............................................................ 42
4.6.4 Write CRBasic Program with Short Cut .................................... 43
4.6.4.1 Procedure: (Short Cut Steps 1 to 5) ................................. 44
4.6.4.2 Procedure: (Short Cut Steps 6 to 7) ................................. 45
4.6.4.3 Procedure: (Short Cut Step 8) .......................................... 45
4.6.4.4 Procedure: (Short Cut Steps 9 to 12) ............................... 45
4.6.4.5 Procedure: (Short Cut Steps 13 to 14) ............................. 46
4.6.5 Send Program and Collect Data ................................................. 46
4.6.5.1 Procedure: (PC200W Step 1) ........................................... 47
4.6.5.2 Procedure: (PC200W Steps 2 to 4) .................................. 47
4.6.5.3 Procedure: (PC200W Step 5) ........................................... 48
4.6.5.4 Procedure: (PC200W Step 6) ........................................... 49
4.6.5.5 Procedure: (PC200W Steps 7 to 10) ................................ 50
4.6.5.6 Procedure: (PC200W Steps 11 to 12) .............................. 51
4.6.5.7 Procedure: (PC200W Steps 13 to 14) .............................. 51
4.7 Data Acquisition Systems — Quickstart ........................................... 52
5. Overview ................................................................... 55
5.1 Datalogger — Overview.................................................................... 56
5.1.1 Wiring Panel — Overview ......................................................... 57
5.1.1.1 Switched Voltage Output — Overview ........................... 60
5.1.1.2 Voltage Excitation — Overview .................................. 60
5.1.1.3 Power Terminals .............................................................. 61
5.1.1.3.1 Power In Terminals ............................................... 61
5.1.1.3.2 Power Out Terminals ............................................ 61
9
10
Table of Contents
5.1.1.4 Communication Ports — Overview ................................. 62
5.1.1.4.1 CS I/O Port............................................................ 63
5.1.1.4.2 RS-232 Ports ......................................................... 63
5.1.1.4.3 Peripheral Port ...................................................... 63
5.1.1.4.4 SDI-12 Ports ......................................................... 64
5.1.1.4.5 SDM Port .............................................................. 64
5.1.1.4.6 CPI Port and CDM Devices — Overview ............ 64
5.1.1.4.7 Ethernet Port ......................................................... 64
5.1.1.5 Grounding — Overview .................................................. 64
5.2 Measurements — Overview .............................................................. 65
5.2.1 Time Keeping — Overview ....................................................... 65
5.2.2 Analog Measurements — Overview .......................................... 66
5.2.2.1 Voltage Measurements — Overview ............................... 66
5.2.2.1.1 Single-Ended Measurements — Overview ........... 68
5.2.2.1.2 Differential Measurements — Overview .............. 69
5.2.2.2 Current Measurements — Overview ............................... 69
5.2.2.3 Resistance Measurements — Overview .......................... 70
5.2.2.3.1 Voltage Excitation ................................................ 70
5.2.2.4 Strain Measurements — Overview .................................. 71
5.2.3 Pulse Measurements — Overview ............................................. 71
5.2.3.1 Pulses Measured .............................................................. 72
5.2.3.2 Pulse Input Channels ....................................................... 72
5.2.3.3 Pulse Sensor Wiring......................................................... 73
5.2.4 Period Averaging — Overview .................................................. 74
5.2.5 Vibrating Wire Measurements — Overview .............................. 74
5.2.6 Reading Smart Sensors — Overview ......................................... 75
5.2.6.1 SDI-12 Sensor Support — Overview .............................. 75
5.2.6.2 RS-232 — Overview ....................................................... 76
5.2.7 Field Calibration — Overview ................................................... 77
5.2.8 Cabling Effects — Overview ..................................................... 77
5.2.9 Synchronizing Measurements — Overview ............................... 77
5.2.9.1 Synchronizing Measurements in the CR1000 —
Overview ...................................................................... 77
5.2.9.2 Synchronizing Measurements in a Datalogger
Network — Overview .................................................. 77
5.3 Data Retrieval and Comms — Overview .......................................... 77
5.3.1 Data File Formats in CR1000 Memory ...................................... 78
5.3.2 Data Format on Computer .......................................................... 78
5.3.3 Mass-Storage Device .................................................................. 78
5.3.4 Memory Card (CRD: Drive) — Overview ................................. 78
5.3.4.1 Comms ............................................................................. 79
5.3.4.2 Direct with Adapter to PC ............................................... 79
5.3.5 Comms Protocols ....................................................................... 79
5.3.5.1 PakBus Comms — Overview .......................................... 79
5.3.6 Alternate Comms Protocols — Overview .................................. 80
5.3.6.1 Modbus — Overview....................................................... 81
5.3.6.2 DNP3 — Overview .......................................................... 81
5.3.6.3 TCP/IP — Overview ........................................................ 81
5.3.7 Comms Hardware — Overview ................................................. 82
5.3.8 Keyboard/Display — Overview ................................................. 82
5.3.8.1 Character Set .................................................................... 83
5.3.8.2 Custom Menus — Overview ........................................... 83
5.4 Measurement and Control Peripherals — Overview ......................... 84
5.5 Power Supplies — Overview ............................................................ 85
5.6 CR1000 Setup — Overview .............................................................. 85
Table of Contents
5.7 CRBasic Programming — Overview ................................................ 85
5.8 Security — Overview ........................................................................ 86
5.9 Maintenance — Overview ................................................................. 87
5.9.1 Protection from Moisture — Overview ...................................... 87
5.9.2 Protection from Voltage Transients — Overview ...................... 87
5.9.3 Factory Calibration — Overview ............................................... 88
5.9.4 Internal Battery — Overview ..................................................... 88
5.10 Datalogger Support Software — Overview ....................................... 88
5.11 PLC Control — Overview ................................................................. 89
5.12 Auto Self-Calibration — Overview ................................................... 91
5.13 Memory — Overview ....................................................................... 91
6. Specifications ........................................................... 93
7. Installation ................................................................ 95
7.1 Enclosures — Details ........................................................................ 95
7.2 Power Supplies — Details ................................................................. 96
7.2.1 CR1000 Power Requirement ...................................................... 96
7.2.2 Calculating Power Consumption ................................................ 97
7.2.3 Power Sources ............................................................................ 97
7.2.3.1 Vehicle Power Connections ............................................. 97
7.2.4 Uninterruptable Power Supply (UPS) ........................................ 98
7.2.5 External Power Supply Installation ............................................ 98
7.2.6 External Alkaline Power Supply ................................................ 98
7.3 Grounding — Details ........................................................................ 98
7.3.1 ESD Protection ........................................................................... 99
7.3.1.1 Lightning Protection ...................................................... 100
7.3.2 Single-Ended Measurement Reference .................................... 101
7.3.3 Ground Potential Differences ................................................... 102
7.3.3.1 Soil Temperature Thermocouple ................................... 102
7.3.3.2 External Signal Conditioner........................................... 102
7.3.4 Ground Looping in Ionic Measurements .................................. 103
7.4 Protection from Moisture — Details ............................................... 104
7.5 CR1000 Setup — Details ................................................................ 104
7.5.1 Tools — Setup .......................................................................... 105
7.5.1.1 DevConfig — Setup Tools ............................................ 105
7.5.1.2 Network Planner — Setup Tools ................................... 106
7.5.1.2.1 Overview — Network Planner ............................ 107
7.5.1.2.2 Basics — Network Planner ................................. 108
7.5.1.3 Info Tables and Settings — Setup Tools ....................... 109
7.5.1.4 CRBasic Program — Setup Tools ................................. 110
7.5.1.5 Executable CPU: Files — Setup Tools .......................... 110
7.5.1.5.1 Default.cr1 File ................................................... 111
7.5.1.5.2 "Include" File ...................................................... 111
7.5.1.5.3 Executable File Run Priorities ............................ 115
7.5.2 Setup Tasks .............................................................................. 115
7.5.2.1 Operating System (OS) — Details ................................. 116
7.5.2.1.1 OS Update with DevConfig Send OS Tab .......... 117
7.5.2.1.2 OS Update with File Control .............................. 118
7.5.2.1.3 OS Update with Send Program Command ......... 118
7.5.2.1.4 OS Update with External Memory and
PowerUp.ini File ............................................. 120
7.5.2.2 Factory Defaults — Installation ..................................... 121
11
12
Table of Contents
7.5.2.3 Saving and Restoring Configurations — Installation .... 121
7.6 CRBasic Programming — Details ................................................... 122
7.6.1 Program Structure..................................................................... 122
7.6.2 Writing and Editing Programs .................................................. 125
7.6.2.1 Short Cut Programming Wizard .................................... 125
7.6.2.2 CRBasic Editor .............................................................. 125
7.6.2.2.1 Inserting Comments into Program ...................... 126
7.6.2.2.2 Conserving Program Memory ............................. 127
7.6.3 Programming Syntax ................................................................ 127
7.6.3.1 Program Statements ....................................................... 127
7.6.3.1.1 Multiple Statements on One Line ....................... 128
7.6.3.1.2 One Statement on Multiple Lines ....................... 128
7.6.3.2 Single-Statement Declarations ....................................... 128
7.6.3.3 Declaring Variables ....................................................... 129
7.6.3.3.1 Declaring Data Types ......................................... 130
7.6.3.3.2 Dimensioning Numeric Variables ....................... 134
7.6.3.3.3 Dimensioning String Variables ........................... 135
7.6.3.3.4 Declaring Flag Variables .................................... 135
7.6.3.4 Using Variable Pointers ................................................. 136
7.6.3.5 Declaring Arrays ............................................................ 137
7.6.3.5.1 Advanced Array Declaration .............................. 138
7.6.3.6 Declaring Local and Global Variables ........................... 139
7.6.3.7 Initializing Variables...................................................... 139
7.6.3.8 Declaring Constants ....................................................... 140
7.6.3.8.1 Predefined Constants .......................................... 141
7.6.3.9 Declaring Aliases and Units........................................... 141
7.6.3.10 Numerical Formats ........................................................ 142
7.6.3.11 Multi-Statement Declarations ........................................ 143
7.6.3.11.1 Declaring Data Tables ......................................... 144
7.6.3.11.2 Declaring Subroutines ......................................... 151
7.6.3.11.3 Declaring Subroutines ......................................... 152
7.6.3.11.4 Declaring Incidental Sequences .......................... 152
7.6.3.12 Execution and Task Priority........................................... 153
7.6.3.12.1 Pipeline Mode ..................................................... 154
7.6.3.12.2 Sequential Mode ................................................. 155
7.6.3.13 Execution Timing .......................................................... 156
7.6.3.13.1 Scan() / NextScan ............................................... 156
7.6.3.13.2 SlowSequence / EndSequence ............................ 157
7.6.3.13.3 SubScan() / NextSubScan ................................... 158
7.6.3.13.4 Scan Priorities in Sequential Mode ..................... 158
7.6.3.14 Programming Instructions .............................................. 160
7.6.3.14.1 Measurement and Data Storage Processing ........ 160
7.6.3.14.2 Argument Types.................................................. 161
7.6.3.14.3 Names in Arguments ........................................... 161
7.6.3.15 Expressions in Arguments ............................................. 162
7.6.3.16 Programming Expression Types .................................... 163
7.6.3.16.1 Floating-Point Arithmetic ................................... 163
7.6.3.16.2 Arithmetic Operations ......................................... 164
7.6.3.16.3 Expressions with Numeric Data Types ............... 164
7.6.3.16.4 Logical Expressions ............................................ 166
7.6.3.16.5 String Expressions .............................................. 169
7.6.3.17 Programming Access to Data Tables ............................. 170
7.6.3.18 Programming to Use Signatures .................................... 172
7.6.3.19 Functions (with a capital F) ........................................... 172
7.6.4 Sending CRBasic Programs ..................................................... 173
Table of Contents
7.6.4.1 Preserving Data at Program Send .................................. 173
7.7 Programming Resource Library ...................................................... 174
7.7.1 Advanced Programming Techniques ....................................... 174
7.7.1.1 Capturing Events ........................................................... 174
7.7.1.2 Conditional Output ........................................................ 175
7.7.1.3 Groundwater Pump Test ................................................ 176
7.7.1.4 Miscellaneous Features .................................................. 179
7.7.1.5 PulseCountReset Instruction .......................................... 181
7.7.1.6 Scaling Array ................................................................. 182
7.7.1.7 Signatures: Example Programs ...................................... 183
7.7.1.7.1 Text Signature ..................................................... 183
7.7.1.7.2 Binary Runtime Signature................................... 183
7.7.1.7.3 Executable Code Signatures ............................... 183
7.7.1.8 Use of Multiple Scans .................................................... 184
7.7.2 Data Input: Loading Large Data Sets ....................................... 185
7.7.3 Data Input: Array-Assigned Expression ................................... 186
7.7.4 Data Output: Calculating Running Average ............................. 190
7.7.5 Data Output: Two Intervals in One Data Table ........................ 193
7.7.6 Data Output: Triggers and Omitting Samples .......................... 195
7.7.7 Data Output: Using Data Type Bool8 ...................................... 196
7.7.8 Data Output: Using Data Type NSEC ...................................... 200
7.7.8.1 NSEC Options ............................................................... 200
7.7.9 Data Output: Wind Vector ....................................................... 204
7.7.9.1 OutputOpt Parameters ................................................... 204
7.7.9.2 Wind Vector Processing ................................................ 205
7.7.9.2.1 Measured Raw Data ............................................ 206
7.7.9.2.2 Calculations ........................................................ 206
7.7.10 Data Output: Writing High-Frequency Data to Memory
Cards ..................................................................................... 210
7.7.10.1 TableFile() with Option 64 ............................................ 210
7.7.10.2 TableFile() with Option 64 Replaces CardOut()............ 211
7.7.10.3 TableFile() with Option 64 Programming ..................... 211
7.7.10.4 Converting TOB3 Files with CardConvert .................... 212
7.7.10.5 TableFile() with Option 64 Q & A ................................ 212
7.7.11 Displaying Data: Custom Menus — Details ............................ 215
7.7.12 Field Calibration — Details ..................................................... 221
7.7.12.1 Field Calibration CAL Files .......................................... 222
7.7.12.2 Field Calibration Programming ..................................... 222
7.7.12.3 Field Calibration Wizard Overview ............................... 223
7.7.12.4 Field Calibration Numeric Monitor Procedures............. 223
7.7.12.4.1 One-Point Calibrations (Zero or Offset) ............. 224
7.7.12.4.2 Two-Point Calibrations (gain and offset) ............ 225
7.7.12.4.3 Zero Basis Point Calibration ............................... 225
7.7.12.5 Field Calibration Examples ........................................... 225
7.7.12.5.1 FieldCal() Zero or Tare (Opt 0) Example ........... 226
7.7.12.5.2 FieldCal() Offset (Opt 1) Example ..................... 228
7.7.12.5.3 FieldCal() Slope and Offset (Opt 2) Example ..... 230
7.7.12.5.4 FieldCal() Slope (Opt 3) Example ...................... 233
7.7.12.5.5 FieldCal() Zero Basis (Opt 4) Example .............. 235
7.7.12.6 Field Calibration Strain Examples ................................. 236
7.7.12.6.1 FieldCalStrain() Shunt Calibration Concepts...... 236
7.7.12.6.2 FieldCalStrain() Shunt Calibration Example ...... 237
7.7.12.6.3 FieldCalStrain() Quarter-Bridge Shunt
Example ........................................................... 239
7.7.12.6.4 FieldCalStrain() Quarter-Bridge Zero ................. 239
13
14
Table of Contents
7.7.13 Measurement: Fast Analog Voltage ......................................... 240
7.7.13.1 Tips — Fast Analog Voltage ......................................... 245
7.7.14 Measurement: Excite, Delay, Measure ..................................... 247
7.7.15 Serial I/O: SDI-12 Sensor Support — Details .......................... 248
7.7.15.1 SDI-12 Transparent Mode ............................................. 248
7.7.15.1.1 SDI-12 Transparent Mode Commands ............... 249
7.7.15.2 SDI-12 Recorder Mode .................................................. 253
7.7.15.2.1 Alternate Start Concurrent Measurement
Command ........................................................ 255
7.7.15.2.2 SDI-12 Extended Command Support.................. 260
7.7.15.3 SDI-12 Sensor Mode ..................................................... 261
7.7.15.4 SDI-12 Power Considerations........................................ 263
7.7.16 Compiling: Conditional Code................................................... 264
7.7.17 Measurement: RTD, PRT, PT100, PT1000 .............................. 266
7.7.17.1 Measurement Theory (PRT) .......................................... 267
7.7.17.2 General Procedure (PRT) ............................................... 268
7.7.17.3 Example: 100 Ω PRT in Four -Wire Half Bridge with
Voltage Excitation (PT100 / BrHalf4W() ) ................ 270
7.7.17.4 Example: 100 Ω PRT in Three -Wire Half Bridge with
Voltage Excitation (PT100 / BrHalf3W() ) ................ 274
7.7.17.5 Example: 100 Ω PRT in Four -Wire Full Bridge with
Voltage Excitation (PT100 / BrFull() ) ...................... 278
7.7.17.6 PRT Callendar-Van Dusen Coefficients ........................ 283
7.7.17.7 Self-Heating and Resolution .......................................... 287
7.7.18 Serial I/O: Capturing Serial Data ............................................. 287
7.7.18.1 Introduction.................................................................... 287
7.7.18.2 I/O Ports ......................................................................... 288
7.7.18.3 Protocols ........................................................................ 289
7.7.18.4 Glossary of Serial I/O Terms ......................................... 290
7.7.18.5 Serial I/O CRBasic Programming .................................. 292
7.7.18.5.1 Serial I/O Programming Basics ........................... 293
7.7.18.5.2 Serial I/O Input Programming Basics ................. 294
7.7.18.5.3 Serial I/O Output Programming Basics ............... 296
7.7.18.5.4 Serial I/O Translating Bytes ................................ 297
7.7.18.5.5 Serial I/O Memory Considerations ..................... 298
7.7.18.5.6 Serial I/O Example I ........................................... 298
7.7.18.6 Serial I/O Application Testing ....................................... 300
7.7.18.6.1 Configure HyperTerminal ................................... 300
7.7.18.6.2 Create Send-Text File ......................................... 302
7.7.18.6.3 Create Text-Capture File ..................................... 302
7.7.18.6.4 Serial I/O Example II .......................................... 303
7.7.18.7 Serial I/O Q & A ............................................................ 308
7.7.19 String Operations ...................................................................... 311
7.7.19.1 String Operators ............................................................. 311
7.7.19.2 String Concatenation...................................................... 312
7.7.19.3 String NULL Character ................................................. 314
7.7.19.4 Inserting String Characters ............................................ 315
8. Operation ................................................................ 319
8.1 Measurements — Details................................................................. 319
8.1.1 Time Keeping — Details .......................................................... 319
8.1.1.1 Time Stamps .................................................................. 319
8.1.2 Analog Measurements — Details ............................................. 321
Table of Contents
8.1.2.1 Voltage Measurement Quality ....................................... 322
8.1.2.2 Thermocouple Measurements — Details ....................... 339
8.1.2.2.1 Thermocouple Error Analysis ............................. 340
8.1.2.2.2 Use of External Reference Junction .................... 350
8.1.2.3 Resistance Measurements — Details ............................. 351
8.1.2.3.1 Ac Excitation ...................................................... 354
8.1.2.3.2 Accuracy — Resistance Measurements .............. 354
8.1.2.4 Auto Self-Calibration — Details ................................... 356
8.1.2.4.1 Auto Self-Calibration Process ............................. 356
8.1.2.5 Strain Measurements — Details .................................... 362
8.1.2.6 Current Measurements — Details .................................. 364
8.1.2.7 Voltage Measurements — Details ................................. 364
8.1.2.7.1 Voltage Measurement Limitations ...................... 364
8.1.2.7.2 Voltage Measurement Mechanics ....................... 367
8.1.2.7.3 Voltage Measurement Quality ............................ 371
8.1.3 Pulse Measurements — Details ................................................ 388
8.1.3.1 Pulse Measurement Terminals ....................................... 391
8.1.3.2 Low-Level Ac Measurements — Details ...................... 391
8.1.3.3 High-Frequency Measurements ..................................... 392
8.1.3.3.1 Frequency Resolution ......................................... 393
8.1.3.3.2 Frequency Measurement Q & A ......................... 394
8.1.3.4 Switch Closure and Open-Collector Measurements ...... 394
8.1.3.5 Edge Timing .................................................................. 395
8.1.3.6 Edge Counting ............................................................... 396
8.1.3.7 Timer Input on I/O NAN Conditions ............................. 396
8.1.3.8 Pulse Measurement Tips ................................................ 396
8.1.3.8.1 Pay Attention to Specifications ........................... 398
8.1.3.8.2 Input Filters and Signal Attenuation ................... 399
8.1.4 Vibrating Wire Measurements — Details ................................ 401
8.1.4.1 Time-Domain Measurement .......................................... 401
8.1.5 Period Averaging — Details .................................................... 402
8.1.6 Reading Smart Sensors — Details ........................................... 403
8.1.6.1 RS-232 and TTL — Details ........................................... 403
8.1.6.2 SDI-12 Sensor Support — Details ................................. 404
8.1.7 Field Calibration — Overview ................................................. 404
8.1.8 Cabling Effects — Details ........................................................ 405
8.1.8.1 Analog Sensor Cabling .................................................. 405
8.1.8.2 Pulse Sensor Cabling ..................................................... 405
8.1.8.3 RS-232 Sensor Cabling .................................................. 405
8.1.8.4 SDI-12 Sensor Cabling .................................................. 405
8.1.9 Synchronizing Measurements — Details ................................. 406
8.1.9.1 Synchronizing Measurement in the CR1000 —
Details ........................................................................ 406
8.1.9.2 Synchronizing Measurements in a Datalogger
Network — Details .................................................... 406
8.2 Switched-Voltage Output — Details ............................................... 407
8.2.1 Switched-Voltage Excitation .................................................... 408
8.2.2 Continuous-Regulated (5V Terminal) ...................................... 409
8.2.3 Continuous-Unregulated Voltage (12V Terminal) ................... 409
8.2.4 Switched-Unregulated Voltage (SW12 Terminal) ................... 409
8.3 PLC Control — Details ................................................................... 410
8.3.1 Terminals Configured for Control ............................................ 411
8.4 Measurement and Control Peripherals — Details ........................... 412
8.4.1 Analog Input Modules .............................................................. 412
8.4.2 Analog Output Modules ........................................................... 413
15
16
Table of Contents
8.4.3 PLC Control Modules — Overview ......................................... 413
8.4.3.1 Relays and Relay Drivers .............................................. 413
8.4.3.2 Component-Built Relays ................................................ 413
8.4.4 Pulse Input Modules ................................................................. 414
8.4.4.1 Low-Level Ac Input Modules — Overview .................. 414
8.4.5 Serial I/O Modules — Details .................................................. 415
8.4.6 Terminal-Input Modules ........................................................... 415
8.4.7 Vibrating Wire Modules ........................................................... 415
8.5 Datalogger Support Software — Details ......................................... 415
8.6 Program and OS File Compression Q and A ................................... 416
8.7.1 Vulnerabilities .......................................................................... 420
8.7.2 Pass-Code Lockout ................................................................... 421
8.7.2.1 Pass-Code Lockout By-Pass .......................................... 422
8.7.3.1 .csipasswd ...................................................................... 423
8.7.3.2 PakBus Instructions ....................................................... 423
8.7.3.3 TCP/IP Instructions........................................................ 423
8.7.3.4 Settings — Passwords .................................................... 424
8.7.4 File Encryption ......................................................................... 424
8.7.5 Communication Encryption...................................................... 424
8.7.8 Read Only Variables ................................................................ 425
8.8 Memory — Details .......................................................................... 425
8.8.1 Storage Media .......................................................................... 425
8.8.1.1 Memory Drives — On-Board ........................................ 428
8.8.1.1.1 Data Table SRAM............................................... 429
8.8.1.1.2 CPU: Drive ......................................................... 429
8.8.1.1.3 USR: Drive ......................................................... 429
8.8.1.1.4 USB: Drive ......................................................... 430
8.8.1.2 Memory Card (CRD: Drive) .......................................... 430
8.8.2 Data File Formats ..................................................................... 432
8.8.3 Memory Cards and Record Numbers ....................................... 436
8.8.4 Resetting the CR1000 ............................................................... 437
8.8.4.1 Full Memory Reset ........................................................ 438
8.8.4.2 Program Send Reset ....................................................... 438
8.8.4.3 Manual Data-Table Reset .............................................. 439
8.8.4.4 Formatting Drives .......................................................... 439
8.8.5 File Management in CR1000 Memory ..................................... 439
8.8.5.1 File Attributes ................................................................ 441
8.8.5.2 Files Manager ................................................................ 442
8.8.5.3 Data Preservation ........................................................... 443
8.8.5.4 Powerup.ini File — Details ........................................... 443
8.8.5.4.1 Creating and Editing Powerup.ini ....................... 444
8.8.5.5 File Management Q & A ............................................... 447
8.8.6 File Names................................................................................ 448
8.8.7 File System Errors .................................................................... 448
8.8.8 Memory Q & A ........................................................................ 449
8.9 Data Retrieval and Comms — Details ............................................. 450
8.9.2 Conserving Bandwidth ............................................................. 450
8.9.3 Initiating Comms (Callback) .................................................... 450
8.10 Alternate Comms Protocols ............................................................. 451
8.10.1 TCP/IP — Details ..................................................................... 452
Table of Contents
8.10.1.1 FYIs — OS2; OS28 ....................................................... 452
8.10.1.2 DHCP ............................................................................ 453
8.10.1.3 DNS ............................................................................... 453
8.10.1.4 FTP Server ..................................................................... 453
8.10.1.5 FTP Client...................................................................... 453
8.10.1.6 HTTP Web Server ......................................................... 453
8.10.1.6.1 Default HTTP Web Server.................................. 453
8.10.1.6.2 Custom HTTP Web Server ................................. 454
8.10.1.7 Micro-Serial Server ....................................................... 457
8.10.1.8 Modbus TCP/IP ............................................................. 457
8.10.1.9 PakBus Over TCP/IP and Callback ............................... 458
8.10.1.10 Ping (IP) ......................................................................... 458
8.10.1.11 SNMP ............................................................................ 458
8.10.1.12 Telnet ............................................................................. 458
8.10.1.13 SMTP ............................................................................. 459
8.10.1.14 Web API ........................................................................ 459
8.10.1.15 Web API — Details ....................................................... 459
8.10.2 DNP3 — Details....................................................................... 459
8.10.3 Modbus — Details ................................................................... 460
8.10.3.1 Modbus Terminology .................................................... 460
8.10.3.1.1 Glossary of Modbus Terms ................................. 461
8.10.3.2 Programming for Modbus .............................................. 461
8.10.3.2.1 Declarations (Modbus Programming) ................. 461
8.10.3.2.2 CRBasic Instructions (Modbus) .......................... 462
8.10.3.2.3 Addressing (ModbusAddr) ................................. 463
8.10.3.2.4 Supported Modbus Function Codes .................... 463
8.10.3.2.5 Reading Inverse Format Modbus Registers ........ 464
8.10.3.2.6 Timing................................................................. 464
8.10.3.3 Troubleshooting (Modbus) ............................................ 464
8.10.3.4 Modbus over IP ............................................................. 464
8.10.3.5 Modbus Security ............................................................ 465
8.10.3.6 Modbus Over RS-232 7/E/1 .......................................... 465
8.10.3.7 Converting Modbus 16-Bit to 32-Bit Longs .................. 466
8.11 Keyboard/Display — Details .......................................................... 466
8.11.2.1 Real-Time Tables and Graphs ....................................... 470
8.11.2.2 Real-Time Custom ......................................................... 470
8.11.2.3 Final-Storage Data ......................................................... 472
8.11.3 Run/Stop Program .................................................................... 473
8.11.4 File Management ...................................................................... 474
8.11.4.1 File Edit ......................................................................... 474
8.11.5 PCCard (Memory Card) Management ..................................... 476
8.11.6 Port Status and Status Table ..................................................... 476
8.11.7.1 CR1000KD: Set Time / Date ......................................... 478
8.11.7.2 CR1000KD: PakBus Settings ........................................ 478
8.11.8 Configure Display .................................................................... 478
8.12 CPI Port and CDM Devices — Details ........................................... 478
9. Maintenance — Details .......................................... 481
9.1 Protection from Moisture — Details ............................................... 481
9.2 Internal Battery — Details ............................................................... 481
9.3 Factory Calibration or Repair Procedure ......................................... 486
17
18
Table of Contents
10. Troubleshooting ..................................................... 487
10.1 Troubleshooting — Essential Tools ................................................ 487
10.2 Troubleshooting — Basic Procedure ............................................... 487
10.3 Troubleshooting — Error Sources ................................................... 488
10.4 Troubleshooting — Status Table ..................................................... 489
10.5 Troubleshooting — CRBasic Programs .......................................... 489
10.5.1 Program Does Not Compile ..................................................... 489
10.5.2 Program Compiles / Does Not Run Correctly .......................... 490
10.5.3 NAN and ±INF ......................................................................... 490
10.5.3.1 Measurements and NAN ................................................ 491
10.5.3.1.1 Voltage Measurements ........................................ 491
10.5.3.1.2 SDI-12 Measurements ........................................ 491
10.5.3.2 Floating-Point Math, NAN, and ±INF ........................... 491
10.5.3.3 Data Types, NAN, and ±INF ......................................... 491
10.5.3.4 Output Processing and NAN .......................................... 493
10.5.4 Status Table as Debug Resource .............................................. 494
10.5.4.1 CompileResults .............................................................. 495
10.5.4.2 SkippedScan .................................................................. 496
10.5.4.3 SkippedSystemScan ....................................................... 497
10.5.4.4 SkippedRecord ............................................................... 497
10.5.4.5 ProgErrors ...................................................................... 497
10.5.4.6 MemoryFree .................................................................. 497
10.5.4.7 VarOutOfBounds ........................................................... 497
10.5.4.8 Watchdog Errors ............................................................ 498
10.5.4.8.1 Status Table WatchdogErrors ............................. 498
10.5.4.8.2 Watchdoginfo.txt File ......................................... 499
10.6 Troubleshooting — Operating Systems ........................................... 499
10.7 Troubleshooting — Auto Self-Calibration Errors ........................... 499
10.8 Troubleshooting — Communications .............................................. 500
10.8.2 Communicating with Multiple PCs .......................................... 500
10.8.3 Comms Memory Errors ............................................................ 501
10.9 Troubleshooting — Power Supplies ................................................ 501
10.9.1 Troubleshooting Power Supplies — Overview ........................ 501
10.9.2 Troubleshooting Power Supplies — Examples ........................ 502
10.9.3 Troubleshooting Power Supplies — Procedures ...................... 502
10.9.3.1 Battery Test .................................................................... 502
10.9.3.2 Charging Regulator with Solar Panel Test ..................... 503
10.9.3.3 Charging Regulator with Transformer Test ................... 505
10.9.3.4 Adjusting Charging Voltage .......................................... 506
10.10 Troubleshooting — Using Terminal Mode ..................................... 507
10.10.1 Serial Talk Through and Comms Watch .................................. 510
10.11 Troubleshooting — Using Logs ...................................................... 510
10.12 Troubleshooting — Data Recovery ................................................. 510
10.13 Troubleshooting — Miscellaneous Errors ....................................... 511
10.13.1 Voltage Calibration Error! ........................................................ 511
10.14 Troubleshooting — Rebooting ........................................................ 512
11. Glossary.................................................................. 513
11.2.1 Accuracy, Precision, and Resolution ........................................ 547
Table of Contents
12. Attributions ............................................................. 549
Appendices
A. Info Tables and Settings ........................................ 551
A.1 Info Tables and Settings Directories .................................................... 553
A.1.1.1 Info Tables and Settings: Frequently Used ...................... 553
A.1.1.2 Info Tables and Settings: Keywords ................................ 554
A.1.1.3 Info Tables and Settings: Accessed by Keyboard/
Display .................................................................................... 556
A.1.1.4 Info Tables and Settings: Communications ..................... 558
A.1.1.5 Info Tables and Settings: Programming .......................... 559
A.1.1.6 Info Tables and Settings: Other ....................................... 559
A.2 Info Tables and Settings Descriptions .................................................. 560
B. Serial Port Pinouts ................................................. 579
B.1 CS I/O Communication Port ................................................................ 579
B.2 RS-232 Communication Port ............................................................... 580
B.2.2 Power States ........................................................................... 581
C. FP2 Data Format .................................................... 583
D. Endianness ............................................................. 585
E. Supporting Products — List .................................. 587
E.2 Measurement and Control Peripherals — List ..................................... 588
E.3 Sensor-Input Modules — List .............................................................. 588
E.3.1 Analog Input Modules — List ................................................ 588
E.3.2 Pulse Input Modules — List ................................................... 588
E.3.3 Serial I/O Modules — List ..................................................... 589
E.3.4 Vibrating Wire Input Modules — List ................................... 589
E.3.5 Passive Signal Conditioners — List ....................................... 589
E.3.5.1 Resistive-Bridge TIM Modules — List ........................... 590
E.3.5.2 Voltage Divider Modules — List .................................... 590
E.3.5.3 Current-Shunt Modules — List ....................................... 590
E.3.5.4 Transient Voltage Suppressors — List ............................ 590
E.3.6 Terminal Strip Covers — List ................................................ 591
E.4 PLC Control Modules — Lists ............................................................ 591
E.4.1 Digital-I/O Modules — List ................................................... 591
E.4.2 Continuous-Analog Output (CAO) Modules — List .............. 592
E.4.3 Relay-Drivers — List ............................................................. 592
E.4.4 Current-Excitation Modules — List ....................................... 592
E.5.1 Wired-Sensor Types — List ................................................... 593
E.5.2 Wireless-Network Sensors — List ......................................... 594
E.7 Data Retrieval and Comms Peripherals — List ................................... 595
E.7.1 Keyboard/Display — List ....................................................... 595
19
20
Table of Contents
E.7.2 Hardwire, Single-Connection Comms Devices — List .......... 596
E.7.3 Hardwire, Networking Devices — List .................................. 596
E.7.4 TCP/IP Links — List .............................................................. 596
E.7.5 Telephone Modems — List .................................................... 597
E.7.6 Private-Network Radios — List ............................................. 597
E.7.7 Satellite Transceivers — List .................................................. 597
E.8 Data Storage Devices — List ............................................................... 597
E.9 Datalogger Support Software — List ................................................... 598
E.9.1 Starter Software — List .......................................................... 598
E.9.2 Datalogger Support Software — List ..................................... 599
E.9.2.1 LoggerNet Suite — List ................................................... 600
E.9.3 Software Tools — List............................................................ 601
E.9.4 Software Development Kits — List ........................................ 602
E.10 Power Supplies — List .................................................................. 603
E.10.1 Battery / Regulator Combinations — List .............................. 603
E.10.2 Batteries — List ...................................................................... 603
E.10.3 Regulators — List ................................................................... 604
E.10.4 Primary Power Sources — List .............................................. 604
E.10.5 24 Vdc Power Supply Kits — List ......................................... 605
E.11 Enclosures — List ......................................................................... 605
E.12 Tripods, Towers, and Mounts — List ............................................ 606
E.13 Protection from Moisture — List .................................................. 607
Index ............................................................................. 609
List of Figures
FIGURE 2: Connect Power and Comms ....................................................... 41
FIGURE 3: PC200W Main Window ............................................................. 42
FIGURE 4: Short Cut Temperature Sensor Folder ....................................... 44
FIGURE 5: Short Cut Outputs Tab ............................................................... 45
FIGURE 6: Short Cut Compile Confirmation Window and Results Tab ...... 46
FIGURE 7: PC200W Main Window ............................................................. 47
FIGURE 8: PC200W Monitor Data Tab – Public Table ............................... 48
FIGURE 9: PC200W Monitor Data Tab — Public and OneMin Tables ...... 49
FIGURE 10: PC200W Collect Data Tab....................................................... 49
FIGURE 11: PC200W View Data Utility ..................................................... 50
FIGURE 12: PC200W View Data Table....................................................... 51
FIGURE 13: PC200W View Line Graph ...................................................... 52
FIGURE 14: Data Acquisition System Components .................................... 53
FIGURE 15: Data Acquisition System — Overview .................................... 56
FIGURE 17: Control and Monitoring with C Terminals............................... 60
FIGURE 18: Analog Sensor Wired to Single-Ended Channel #1 ................. 67
FIGURE 19: Analog Sensor Wired to Differential Channel #1 .................... 67
FIGURE 20: Half-Bridge Wiring Example — Wind Vane Potentiometer ... 70
FIGURE 21: Full-Bridge Wiring Example — Pressure Transducer ............. 71
FIGURE 22: Pulse Sensor Output Signal Types ........................................... 72
FIGURE 23: Pulse Input Wiring Example — Anemometer ......................... 73
FIGURE 24: Terminals Configurable for RS-232 Input ............................... 76
FIGURE 25: Use of RS-232 and Digital I/O when Reading RS-232
FIGURE 26: CR1000KD Keyboard/Display ................................................ 83
Table of Contents
FIGURE 27: Custom Menu Example ........................................................... 84
FIGURE 29: Connecting to Vehicle Power Supply ...................................... 98
FIGURE 30: Schematic of Grounds ............................................................ 100
FIGURE 31: Lightning Protection Scheme ................................................. 101
FIGURE 32: Model of a Ground Loop with a Resistive Sensor ................. 104
FIGURE 33: Device Configuration Utility (DevConfig) ............................ 106
FIGURE 34: Network Planner Setup .......................................................... 107
FIGURE 35: "Include" File Settings With DevConfig ............................... 113
FIGURE 36: "Include" File Settings With PakBusGraph ........................... 113
FIGURE 37: Summary of CR1000 Configuration ...................................... 122
FIGURE 38: Sequential-Mode Scan Priority Flow Diagrams .................... 160
FIGURE 39: CRBasic Editor Program Send File Control window ............ 174
FIGURE 40: Running-Average Frequency Response ................................. 193
FIGURE 41: Running-Average Signal Attenuation .................................... 193
FIGURE 42: Data from TrigVar Program .................................................. 195
FIGURE 43: Alarms Toggled in Bit Shift Example ................................... 197
FIGURE 44: Bool8 Data from Bit Shift Example (Numeric Monitor) ....... 198
FIGURE 45: Bool8 Data from Bit Shift Example (PC Data File) .............. 198
FIGURE 46: Input Sample Vectors ............................................................ 206
FIGURE 47: Mean Wind-Vector Graph ..................................................... 208
FIGURE 48: Standard Deviation of Direction ............................................ 209
FIGURE 49: Standard Deviation of Direction ............................................ 209
FIGURE 50: Custom Menu Example — Home Screen .............................. 216
FIGURE 51: Custom Menu Example — View Data Window .................... 216
FIGURE 52: Custom Menu Example — Make Notes Sub Menu ............... 217
FIGURE 53: Custom Menu Example — Predefined Notes Pick List ......... 217
FIGURE 54: Custom Menu Example — Free Entry Notes Window .......... 217
FIGURE 55: Custom Menu Example — Accept / Clear Notes Window .... 218
FIGURE 56: Custom Menu Example — Control Sub Menu ...................... 218
FIGURE 57: Custom Menu Example — Control LED Pick List ............... 218
FIGURE 58: Custom Menu Example — Control LED Boolean Pick
FIGURE 59: Quarter-Bridge Strain Gage with RC Resistor Shunt ............ 237
FIGURE 60: Strain Gage Shunt Calibration Start ....................................... 239
FIGURE 61: Strain Gage Shunt Calibration Finish .................................... 239
FIGURE 62: Zero Procedure Start .............................................................. 240
FIGURE 63: Zero Procedure Finish ............................................................ 240
FIGURE 64: Entering SDI-12 Transparent Mode ....................................... 249
FIGURE 65: PT100 BrHalf4W() Four-Wire Half-Bridge Schematic ......... 270
FIGURE 66: PT100 BrHalf3W() Three-Wire Half-Bridge Schematic ....... 274
FIGURE 67: PT100 BrFull() Four-Wire Full-Bridge Schematic ................ 278
FIGURE 68: HyperTerminal New Connection Description ....................... 300
FIGURE 69: HyperTerminal Connect-To Settings ..................................... 301
FIGURE 70: HyperTerminal COM Port Settings Tab: Click File |
Properties | Settings | ASCII Setup... and set as shown. ....................... 301
FIGURE 71: HyperTerminal ASCII Setup ................................................. 302
FIGURE 72: HyperTerminal Send-Text File Example ............................... 302
FIGURE 73: HyperTerminal Text-Capture File Example .......................... 303
FIGURE 74: Input voltage rise and transient decay .................................... 327
FIGURE 75: Settling Time for Pressure Transducer .................................. 329
21
22
Table of Contents
FIGURE 77: Panel Temperature Error Summary ....................................... 341
FIGURE 78: Panel Temperature Gradients (low temperature to high) ....... 342
FIGURE 79: Panel Temperature Gradients (high temperature to low) ....... 342
FIGURE 80: Input Error Calculation .......................................................... 345
FIGURE 81: Diagram of a Thermocouple Junction Box ............................ 351
FIGURE 82: PGIA with Input Signal Decomposition ................................ 367
FIGURE 83: Simplified voltage measurement sequence. ........................... 367
FIGURE 85: Ac Power Noise Rejection Techniques .................................. 374
FIGURE 86: Input voltage rise and transient decay .................................... 376
FIGURE 87: Settling Time for Pressure Transducer ................................... 378
FIGURE 89: Pulse Sensor Output Signal Types ......................................... 389
FIGURE 90: Switch Closure Pulse Sensor ................................................. 389
FIGURE 91: Terminals Configurable for Pulse Input ................................. 390
FIGURE 93: Vibrating Wire Sensor ........................................................... 401
FIGURE 94: Input Conditioning Circuit for Period Averaging .................. 403
FIGURE 95: Circuit to Limit C Terminal Input to 5 Vdc ........................... 404
FIGURE 96: Current-Limiting Resistor in a Rain Gage Circuit ................. 405
FIGURE 97: Current sourcing from C terminals configured for control .... 412
FIGURE 98: Relay Driver Circuit with Relay ............................................ 414
FIGURE 99: Power Switching without Relay ............................................. 414
FIGURE 100: Preconfigured HTML Home Page ....................................... 454
FIGURE 101: Home Page Created Using WebPageBegin() Instruction..... 455
FIGURE 102: Customized Numeric-Monitor Web Page ............................ 456
FIGURE 103: CR1000KD: Navigation....................................................... 468
FIGURE 104: CR1000KD: Displaying Data .............................................. 469
FIGURE 105: CR1000KD Real-Time Tables and Graphs. ......................... 470
FIGURE 106: CR1000KD Real-Time Custom ........................................... 471
FIGURE 107: CR1000KD: Final Storage Data .......................................... 472
FIGURE 108: CR1000KD: Run/Stop Program .......................................... 473
FIGURE 109: CR1000KD: File Management ............................................ 474
FIGURE 110: CR1000KD: File Edit .......................................................... 475
FIGURE 111: CR1000KD: PCCard (Memory Card) Management ............ 476
FIGURE 112: CR1000KD: Port Status and Status Table ........................... 477
FIGURE 113: CR1000KD: Settings ........................................................... 477
FIGURE 114: CR1000KD: Configure Display ........................................... 478
FIGURE 115: Loosen Retention Screws ..................................................... 483
FIGURE 116: Pull Edge Away from Panel ................................................. 484
FIGURE 117: Remove Nuts to Disassemble Canister ................................ 485
FIGURE 118: Remove and Replace Battery ............................................... 485
FIGURE 119: Potentiometer R3 on PS100 and CH100 Charger /
FIGURE 120: DevConfig Terminal Tab ..................................................... 509
FIGURE 121: Relationships of Accuracy, Precision, and Resolution ........ 548
Table of Contents
List of Tables
PC200W EZSetup Wizard Prompts ............................................. 43
CR1000 Wiring Panel Terminal Definitions ................................ 58
Differential and Single-Ended Input Terminals ........................... 68
Pulse Input Terminals and Measurements .................................... 73
Info Tables and Settings Interfaces ............................................ 109
Common Configuration Actions and Tools ............................... 116
Program Send Command Locations ........................................... 119
CRBasic Program Structure ....................................................... 123
Data Types in Variable Memory ................................................ 130
Data Types in Final-Storage Memory ...................................... 131
Formats for Entering Numbers in CRBasic .............................. 142
Typical Data Table ................................................................... 145
TOA5 Environment Line.......................................................... 145
DataInterval() Lapse Parameter Options .................................. 149
Program Tasks .......................................................................... 154
Program Timing Instructions .................................................... 156
Rules for Names ....................................................................... 162
Binary Conditions of TRUE and FALSE ................................. 167
Logical Expression Examples .................................................. 168
Data Process Abbreviations...................................................... 171
Program Send Options That Reset Memory 1 ........................... 174
WindVector() OutputOpt Options ............................................ 204
FieldCal() Codes ...................................................................... 224
Calibration Report for Relative Humidity Sensor .................... 226
Calibration Report for Salinity Sensor ..................................... 229
Calibration Report for Flow Meter ........................................... 231
Calibration Report for Water Content Sensor .......................... 234
Maximum Measurement Speeds Using VoltSE() .................... 241
Voltage Measurement Instruction Parameters for Dwell
SDI-12 Commands for Transparent Mode ............................... 250
SDI-12 Commands for Programmed (SDIRecorder()) Mode .. 254
SDI-12 Sensor Configuration CRBasic Example — Results ... 263
Example Power Usage Profile for a Network of SDI-12
PRT Measurement Circuit Overview ....................................... 268
PT100 Temperature and ideal resistances (RS); α =
CallandarVan Dusen Coefficients for PT100, α = 0.00385
Input Ranges (mV) ................................................................... 269
Input Limits (mV) .................................................................... 269
Excitation Ranges ..................................................................... 270
BrHalf4W() Four-Wire Half-Bridge Equations ....................... 270
Bridge Resistor Values (mΩ) ................................................... 270
BrHalf3W() Three-Wire Half-Bridge Equations ...................... 275
Bridge Resistor Values (mΩ) ................................................... 275
PRTCalc() PRTType = 1, α = 0.00385
1 ................................... 285
PRTCalc() PRTType = 2, α = 0.00392
PRTCalc() PRTType = 3, α = 0.00391
PRTCalc() PRTType = 4, α = 0.003916
1 ................................. 285
................................... 285
PRTCalc() PRTType = 6, α = 0.003926
1 ................................. 286
PRTCalc() PRTType = 5, α = 0.00375
1 ................................... 286
1 ................................. 287
23
24
Table of Contents
ASCII / ANSI Equivalents ....................................................... 288
CR1000 Serial Ports ................................................................. 289
String Operators ....................................................................... 311
String Concatenation Examples ............................................... 312
String NULL Character Examples ........................................... 314
Analog Measurement Integration ............................................. 324
Ac Noise Rejection on Small Signals 1 ..................................... 325
Ac Noise Rejection on Large Signals 1 ..................................... 326
CRBasic Measurement Settling Times ..................................... 327
First Six Values of Settling Time Data ..................................... 330
Range-Code Option C Over-Voltages ...................................... 331
Offset Voltage Compensation Options ..................................... 334
Analog Voltage Measurement Accuracy 1 ................................ 336
Analog Voltage Measurement Offsets ..................................... 336
Analog Voltage Measurement Resolution ................................ 337
Limits of Error for Thermocouple Wire (Reference
Voltage Range for Maximum Thermocouple Resolution 1 ....... 344
Limits of Error on CR1000 Thermocouple Polynomials.......... 348
Reference Temperature Compensation Range and Error ......... 349
Thermocouple Error Examples ................................................. 350
Resistive-Bridge Circuits with Voltage Excitation ................... 352
Ratiometric-Resistance Measurement Accuracy ...................... 355
CalGain() Field Descriptions .................................................... 358
CalSeOffset() Field Descriptions ............................................. 359
CalDiffOffset() Field Descriptions ........................................... 360
Calibrate() Instruction Results .................................................. 360
StrainCalc() Instruction Equations ........................................... 363
Analog Voltage Input Ranges and Options .............................. 365
Parameters that Control Measurement Sequence and Timing .. 369
Analog Measurement Integration ............................................. 373
Ac Noise Rejection on Small Signals 1 ..................................... 374
Ac Noise Rejection on Large Signals 1 ..................................... 375
CRBasic Measurement Settling Times ..................................... 376
First Six Values of Settling Time Data ..................................... 379
Range-Code Option C Over-Voltages ...................................... 380
Offset Voltage Compensation Options ..................................... 383
Analog Voltage Measurement Accuracy 1 ................................ 385
Analog Voltage Measurement Offsets ..................................... 386
Analog Voltage Measurement Resolution ................................ 386
Pulse Measurements: Terminals and Programming ................. 390
Example: E for a 10 Hz input signal ......................................... 393
Frequency Resolution Comparison .......................................... 394
Switch Closures and Open Collectors on P Terminals ............. 397
Switch Closures and Open Collectors ...................................... 397
Three Specifications Differing Between P and C Terminals .... 399
Time Constants (τ) ................................................................... 400
Low-Level Ac Pules Input Ranges ........................................... 400
Current Source and Sink Limits ............................................... 408
Typical Gzip File Compression Results ................................... 419
CR1000 Memory Allocation .................................................... 426
CR1000 SRAM Memory ........................................................ 427
CR1000 Memory Drives ........................................................ 428
Memory Card States ............................................................... 432
TableFile() Instruction Data File Formats .............................. 433
Table of Contents
File Control Functions ............................................................ 439
CR1000 File Attributes .......................................................... 441
Powerup.ini Script Commands and Applications ................... 446
File System Error Codes......................................................... 448
Modbus to Campbell Scientific Equivalents .......................... 460
Modbus Registers: CRBasic Port, Flag, and Variable
Supported Modbus Function Codes ....................................... 463
Special Keyboard/Display Key Functions .............................. 467
Internal Lithium Battery Specifications ................................. 482
Math Expressions and CRBasic Results ................................. 492
Variable and Final-Storage Data Types with NAN and
Warning Message Examples .................................................. 495
CR1000 Terminal Commands ................................................ 508
Log Locations ......................................................................... 510
Program Send Command........................................................ 535
Info Tables and Settings Interfaces ........................................ 551
Info Tables and Settings: Directories ..................................... 553
Info Tables and Settings: Frequently Used............................. 553
Info Tables and Settings: Keywords ....................................... 554
Info Tables and Settings: KD Settings | Datalogger ............... 556
Info Tables and Settings: KD Settings | Comports ................. 556
Info Tables and Settings: KD Settings | Ethernet ................... 556
Info Tables and Settings: KD Settings | PPP .......................... 556
Info Tables and Settings: KD Settings | CS I/O IP ................. 556
Info Tables and Settings: KD Settings (TCP/IP) on
CR1000KD Keyboard/Display ............................................................. 556
Info Tables and Settings: KD Settings | Advanced ................ 556
Info Tables and Settings: KD Status Table Fields .................. 557
Info Tables and Settings: Settings Only in Settings Editor .... 557
Info Tables and Settings: Communications, General ............. 558
Info Tables and Settings: Communications, PakBus .............. 558
Info Tables and Settings: Communications, TCP_IP I ........... 558
Info Tables and Settings: Communications, TCP_IP II ......... 558
Info Tables and Settings: Communications, TCP_IP III ........ 558
Info Tables and Settings: CRBasic Program I ........................ 559
Info Tables and Settings: CRBasic Program II ...................... 559
Info Tables and Settings: Auto Self-Calibration .................... 559
Info Tables and Settings: Data ............................................... 559
Info Tables and Settings: Data Table Information Table
Info Tables and Settings: Memory ......................................... 559
Info Tables and Settings: Miscellaneous ................................ 560
Info Tables and Settings: Obsolete ......................................... 560
Info Tables and Settings: OS and Hardware Versioning ........ 560
Info Tables and Settings: Power Monitors ............................. 560
Info Tables and Settings: Security .......................................... 560
Info Tables and Settings: Signatures ...................................... 560
Info Tables and Settings: B .................................................... 561
Info Tables and Settings: C .................................................... 562
Info Tables and Settings: D .................................................... 564
Info Tables and Settings: E .................................................... 565
Info Tables and Settings: F ..................................................... 565
Info Tables and Settings: H .................................................... 566
25
26
Table of Contents
Info Tables and Settings: I ...................................................... 566
Info Tables and Settings: L ..................................................... 567
Info Tables and Settings: M ................................................... 568
Info Tables and Settings: N .................................................... 569
Info Tables and Settings: O .................................................... 570
Info Tables and Settings: P ..................................................... 570
Info Tables and Settings: R .................................................... 572
Info Tables and Settings: S ..................................................... 573
Info Tables and Settings: T ..................................................... 575
Info Tables and Settings: U .................................................... 576
Info Tables and Settings: V .................................................... 576
Info Tables and Settings: W ................................................... 577
Pinout of CR1000 CS I/O D-Type Connector Port ................ 579
Pin Out of CR1000 RS-232 D-Type Connector Port ............. 580
Standard Null-Modem Cable Pin Out .................................... 580
FP2 Data-Format Bit Descriptions ......................................... 583
FP2 Decimal Locater Bits ...................................................... 583
Endianness in Campbell Scientific Instruments ..................... 585
Dataloggers ............................................................................. 587
Analog Input Modules ............................................................ 588
Pulse Input Modules ............................................................... 589
Serial I/O Modules List .......................................................... 589
Vibrating Wire Input Modules ............................................... 589
Resistive Bridge TIM 1 Modules ............................................. 590
Voltage Divider Modules ....................................................... 590
Current-Shunt Modules .......................................................... 590
Transient Voltage Suppressors ............................................... 590
Terminal-Strip Covers ............................................................ 591
Digital I/O Modules ................................................................ 591
Continuous-Analog Output (CAO) Modules.......................... 592
Relay-Drivers — Products ..................................................... 592
Current-Excitation Modules ................................................... 592
Wired Sensor Types ............................................................... 593
Wireless Sensor Modules ....................................................... 594
Sensors Types Available for Connection to CWS900 ............ 594
Cameras .................................................................................. 594
Datalogger Keyboard/Displays 1 ............................................. 595
Hardwire, Single-Connection Comms Devices ...................... 596
Hardwire, Networking Devices .............................................. 596
TCP/IP Links — List .............................................................. 596
Telephone Modems ................................................................ 597
Private-Network Radios ......................................................... 597
Satellite Transceivers ............................................................. 597
Mass-Storage Devices ............................................................ 598
CF Card Storage Module ........................................................ 598
Starter Software ...................................................................... 599
Datalogger Support Software ................................................. 599
LoggerNet Suite — List 1,2 ...................................................... 600
Software Tools ....................................................................... 601
Software Development Kits ................................................... 602
Battery / Regulator Combinations .......................................... 603
Batteries .................................................................................. 603
Regulators ............................................................................... 604
Primary Power Sources .......................................................... 604
24 Vdc Power Supply Kits ..................................................... 605
Table of Contents
Enclosures — Products .......................................................... 605
Prewired Enclosures ............................................................... 606
Tripods, Towers, and Mounts ................................................. 606
Protection from Moisture — Products ................................... 607
List of CRBasic Examples
Simple Default.cr1 File to Control SW12
Using an "Include" File ......................................... 114
'Include' File to Control SW12 Terminal. ............. 114
Inserting Comments .............................................. 127
Data Type Declarations ......................................... 133
Using Variable Array Dimension Indices ............. 135
Flag Declaration and Use ...................................... 136
Using a Variable Array in Calculations................. 138
Initializing Variables ............................................. 140
Using the Const Declaration................................ 141
Load binary information into a variable .............. 143
Declaration and Use of a Data Table ................... 146
Use of the Disable Variable................................. 151
BeginProg / Scan() / NextScan / EndProg
Measurement Instruction Syntax ......................... 161
Use of Move() to Conserve Code Space ............. 164
Use of Variable Arrays to Conserve Code
Conversion of FLOAT / LONG to Boolean ........ 165
Evaluation of Integers ......................................... 166
Constants to LONGs or FLOATs ........................ 166
String and Variable Concatenation ...................... 169
BeginProg / Scan / NextScan / EndProg
Conditional Output .............................................. 176
Groundwater Pump Test ...................................... 177
Miscellaneous Program Features......................... 179
Scaling Array ...................................................... 182
Program Signatures ............................................. 184
Use of Multiple Scans ......................................... 185
Loading Large Data Sets ..................................... 186
Array Assigned Expression: Transpose an
Array Assigned Expression: Comparison /
Array Assigned Expression: Fill Array
Two Data-Output Intervals in One Data Table ... 193
Using TrigVar to Trigger Data Storage ............... 196
Bool8 and a Bit Shift Operator ............................ 199
NSEC — One Element Time Array .................... 201
NSEC — Two Element Time Array ................... 202
NSEC — Seven and Nine Element Time
27
28
Table of Contents
NSEC —Convert Timestamp to Universal
Using TableFile() with Option 64 with
Custom Menus..................................................... 219
FieldCal() Zero .................................................... 227
FieldCal() Offset ................................................. 229
FieldCal() Two-Point Slope and Offset ............... 232
FieldCal() Multiplier ........................................... 234
FieldCalStrain() Calibration ................................ 238
Fast Analog Voltage Measurement: Fast Scan() . 242
Analog Voltage Measurement: Cluster Burst ...... 243
Dwell Burst Measurement ................................... 244
Measurement with Excitation and Delay............. 247
Using SDI12Sensor() to Test Cv Command ....... 258
Using Alternate Concurrent Command (aC) ....... 259
Using an SDI-12 Extended Command ................ 261
SDI-12 Sensor Setup ........................................... 262
Conditional Code ................................................. 265
PT100 BrHalf4W() Four-Wire Half-Bridge
PT100 BrHalf4W() Four-Wire Half-Bridge
PT100 BrHalf3W() Three-Wire Half-Bridge
PT100 BrHalf3W() Three-Wire Half-Bridge
PT100 BrFull() Four-Wire Full-Bridge
PT100 BrFull() Four-Wire Full-Bridge
PT100 BrFull() Four-Wire Full-Bridge
Receiving an RS-232 String ................................ 299
Measure Sensors / Send RS-232 Data ................. 304
Concatenation of Numbers and Strings ............... 313
Subroutine with Global and Local Variables ...... 316
Time Stamping with System Time ...................... 320
Measuring Settling Time ..................................... 328
Four-Wire Full-Bridge Measurement and
Measuring Settling Time ..................................... 377
Custom Web Page HTML ................................... 456
Concatenating Modbus Long Variables .............. 466
Using NAN to Filter Data ................................... 494
Reboot under program control with
FileManage() instruction: ...................................................................... 512
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 Quickstart
and the
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
Quickstart or Overview . Quickstart is a cursory view of CR1000 data-acquisition and walks you through a procedure to set up a simple 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.
Don't forget the Glossary
when you run across a term that is unfamiliar.
Many specialized terms are hyperlinked in this manual to a glossary entry.
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:
Technical Support
Sales Engineering
(435) 227-9100
(435) 227-9120
Orders (435) 227-9090
Accounts Receivable (435) 227-9092
Repairs
General Inquiries
(435) 227-9105
(435) 227-9000
29
30
Section 1. Introduction
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 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.
• Bold — CRBasic instructions within the body text, input commands, output responses, GUI commands, text on product labels, names of data tables.
• Italic — glossary entries and titles of publications, software, sections, tables, figures, and examples.
• Bold italic — CRBasic instruction parameters and arguments within the body text.
•
8 pt blue
— cross reference page numbers. In the PDF version of the manual, click on the page number to jump to the cross referenced page.
•
Lucida Sans Typewriter
— blocks of CRBasic code. Type colors are as follows:
○ instruction
○ 'comments
○ all other code
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 as 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.
2. Precautions
• 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
• IMPORTANT: Note the following about the internal battery: o When primary power is continuously connected to the CR1000, the battery will last up to 10 years or more. o When primary power is NOT connected to the CR1000, the battery will last about three years. o 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.
31
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 Quickstart
tutorial o A datalogger program pre-loaded into the CR1000 that measures power-supply 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 you received the expected cable lengths. Contact
Campbell Scientific immediately about discrepancies.
• Check the operating system version in the CR1000 as outlined in the
Operating System (OS) — Installation
and update as needed.
33
4. Quickstart
The following tutorial introduces the CR1000 by walking you through a programming and data retrieval exercise.
4.1 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
35
36
Section 4. Quickstart o Modbus o DNP3 o RS-485
Refer to the Sensors — Lists
for a list of specific sensors available from
Campbell Scientific. This list may not be comprehensive. A library of sensor manuals and application notes are available at www.campbellsci.com
to assist in measuring many sensor types.
4.2 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. Instead, individual measurements can be combined into statistical or computational summaries. The
CR1000 will store data in memory to await transfer to the PC with an external storage devices or telecommunication device.
4.2.1 CR1000 Module
CR1000 electronics are protected in a sealed stainless steel shell. This design makes the CR1000 economical, small, and very rugged.
4.2.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.
FIGURE 1: Wiring Panel
Section 4. Quickstart
4.3 Power Supplies — Quickstart
Related Topics:
• Power Input Terminals — 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 power supply components match the specifications of the device to which they are connected. When connecting power, first switch off the power supply, make the connection, then turn the power supply on.
The CR1000 operates 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.
37
38
Section 4. Quickstart
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.
4.3.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.4 Data Retrieval and Comms — Quickstart
Related Topics:
• Data Retrieval and Comms — Quickstart
• Data Retrieval and Comms — Overview
• Data Retrieval and Comms — Details
• Data Retrieval and Comms 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 comms option (or a combination of comms options) allows you to collect data from your CR1000 over long distances. It also allows you to discover system problems early.
A Campbell Scientific sales engineer can help you make a shopping list for any of these comms options:
• Standard o RS-232 serial
• Options o Ethernet o CompactFlash, Mass Storage
Section 4. Quickstart o Cellular, Telephone o iOS, Android o PDA o Multidrop, Fiber Optic o Radio, Satellite
Some comms options can be combined.
4.5 Datalogger Support Software — Quickstart
Related Topics:
• Datalogger Support Software — Quickstart
• Datalogger Support Software — Overview
• Datalogger Support Software — Details
• Datalogger Support Software — Lists
Campbell Scientific datalogger support software is PC or Linux software that facilitates comms between the computer and the CR1000. A wide array of software are available. 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. Use Short Cut 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 .
Note More information about software available from Campbell Scientific can be found at www.campbellsci.com
.
39
40
Section 4. Quickstart
4.6 Tutorial: Measuring a Thermocouple
This exercise guides you through the following:
• Attaching a sensor to the CR1000
• Creating a program for the CR1000 to measure the sensor
• Making a simple measurement
• Storing measurement data on the CR1000
• Collecting data from the CR1000 with a PC
• Viewing real-time and historical data with the PC
4.6.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, review and Power Supplies — Details
or contact Campbell Scientific.
• CR1000 datalogger
• Power supply with an output between 10 to 16 Vdc
• Thermocouple, 4 to 5 inches long; one 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; one 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 to be 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.6.2 Hardware Setup
Note The thermocouple is attached to the CR1000 later in this exercise.
Section 4. Quickstart
4.6.2.1 Connect External Power Supply
With reference to FIGURE: Connect Power and Serial Comms
proceed as follows:
1. Remove the green power connector from the CR1000 wiring panel.
2. Switch power supply to OFF .
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. Confirm the power supply connections have the correct polarity then insert the green power connector into its receptacle on the CR1000 wiring panel.
FIGURE 2: Connect Power and Comms
4.6.2.2 Connect Comms
Connect the serial cable between the RS-232 port on the CR1000 and the RS-232 port on the PC. If your CR1000 is Wi-Fi enabled, and you wish to use the
Wi-Fi link for this exercise, go to On-Board Wi-Fi.
Switch the power supply ON .
41
42
Section 4. Quickstart
4.6.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 Prompts
indicates what information to enter on each screen of the wizard. Click Next at the lower portion of the window to advance.
Note A video tutorial is available at https://www.campbellsci.com/videos?video=80
( https://www.campbellsci.com/videos?video=80 ). 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 clock and program information. Monitor Data and Collect Data tabs are also available. Icons across the top of the window access additional functions.
FIGURE 3: PC200W Main Window
Section 4. Quickstart
PC200W EZSetup Wizard Prompts
Screen Name Information Needed
Introduction
Provides an introduction to the EZSetup Wizard along with instructions on how to navigate through the wizard.
Datalogger Type and
Name
COM Port Selection
Datalogger Settings
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, but 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.
Datalogger Settings —
Security
For this tutorial, Security Code should be set to 0 and PakBus Encryption Key should be left blank.
Communication Setup
Summary
Summary of settings in previous screens. No changes are needed for this tutorial. Press Finish to exit the wizard.
4.6.4 Write CRBasic Program with Short Cut
Following are the objectives for this Short Cut programming exercise:
• 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 the program is downloaded to the CR1000, it will take samples once per second and store averages of the samples at one-minute intervals.
NOTE A video tutorial is available at https://www.campbellsci.com/videos?video=80 https://www.campbellsci.com/videos?video=80 . Other video resources are available at www.campbellsci.com/videos .
43
44
Section 4. Quickstart
4.6.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 other areas using 60 Hz ac voltage. Select 50 Hz for most of Europe and other 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 as shown in the following figure. 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 4: Short Cut Temperature Sensor Folder
Section 4. Quickstart
4.6.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 normal operations, battery and temperature can be recorded at least daily to assist in monitoring system status.
7. In the left pane 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 pane to return to the sensor selection screen.
4.6.4.3 Procedure: (Short Cut Step 8)
8. As shown in the following figure, 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 5: Short Cut Outputs Tab
4.6.4.4 Procedure: (Short Cut Steps 9 to 12)
9. As shown in the right-most pane of the previous figure, two output tables ( 1
Table1 and 2 Table2 tabs) are initially configured. 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.
45
Section 4. Quickstart
10. Only one table is needed for this tutorial, so remove Table 2. Click 2 Table2 tab, 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 in the center pane. Click Average in the center column of buttons. Repeat this procedure for PTemp_C and Temp_C .
4.6.4.5 Procedure: (Short Cut Steps 13 to 14)
13. Click Finish at the bottom of the Short Cut window to compile the program.
At the prompt, name the program MyTemperature . A summary screen, like the one in the following figure, will appear showing the pre-compiler results.
Pre-compile errors, if any, are displayed here.
FIGURE 6: Short Cut Compile Confirmation Window and Results Tab
46
14. Close this window by clicking on X in the upper right corner.
4.6.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.
Section 4. Quickstart
4.6.5.1 Procedure: (PC200W Step 1)
1. From the PC200W Clock/Program tab, click on Connect (upper left) to connect the CR1000 to the PC. As shown in the following figure, when connected, the Connect button changes to Disconnect .
CAUTION This procedure assumes there are no data already on the
CR1000. If there are data that you want to keep on the CR1000, you should collect it before proceeding to the next step.
FIGURE 7: PC200W Main Window
4.6.5.2 Procedure: (PC200W Steps 2 to 4)
2. Click Set Clock (right pane, center) to synchronize the CR1000 clock with the computer clock.
3. Click Send Program...
(right pane, bottom). A warning appears 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. As shown in the following figure, PC200W now displays data found in the
CR1000 Public table.
47
48
Section 4. Quickstart
FIGURE 8: PC200W Monitor Data Tab – Public Table
4.6.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. Quickstart
FIGURE 9: PC200W Monitor Data Tab — Public and OneMin Tables
4.6.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 10: PC200W Collect Data Tab
49
50
Section 4. Quickstart
4.6.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 .
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 the View utility.
icon at the top of the
FIGURE 11: PC200W View Data Utility
PC200W window to open
Section 4. Quickstart
4.6.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 12: PC200W View Data Table
4.6.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.
51
Section 4. Quickstart
FIGURE 13: PC200W View Line Graph
52
4.7 Data Acquisition Systems — Quickstart
Related Topics:
• Data Acquisition Systems — Quickstart
• Data Acquisition Systems — Overview
Acquiring data with a CR1000 datalogger requires integration of the following into a data acquisition system:
• Electronic sensor technology
• CR1000 datalogger
• Comms link
• Datalogger support software
A failure in any part of the system can lead to bad data or no data. The concept of a data acquisition system is illustrated 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 comms link.
Section 4. Quickstart
• Data Retrieval and Comms
— Data are copied (not moved) from the CR1000, usually to a PC, by one or more methods using datalogger support software. Most of these comms options are bi-directional, which allows programs and settings to be sent to the CR1000.
• Datalogger Support Software
— Software retrieves data and sends programs and settings. The software manages the comms 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.
• Measurement and Control Peripherals
— Sometimes, system requirements exceed the capacity of the CR1000. The excess can usually be handled by addition of input and output expansion modules.
FIGURE 14: Data Acquisition System Components
53
5. Overview
You have just received a big box (or several big boxes) from Campbell Scientific, opened it, spread its contents across the floor, and now you sit wondering what to do.
Well, that depends.
Probably, the first thing you should understand is the basic architecture of a data acquisition system. Once that framework is in mind, you can begin to conceptualize what to do next. So, job one, is to go back to the Quickstart
section of this manual and work through the tutorial. When you have done that, and then read the following, you should have the needed framework.
A Campbell Scientific data acquisition system is made up of the following five basic components:
• Sensors
• Datalogger, which includes: o Clock o Measurement and control circuitry o Memory o Hardware and firmware to communicate with comms devices o User-entered CRBasic program
• Power supply
• Comms link or external storage device
• Datalogger support software
The figure Data Acquisition Systems — Overview
illustrates a common
CR1000-based data acquisition system.
55
Section 5. Overview
FIGURE 15: Data Acquisition System — Overview
56
5.1 Datalogger — Overview
The CR1000 datalogger is the main part of the system. It is a precision instrument designed to withstand demanding environments and to use the smallest amount of power possible. It has a central-processing unit (CPU), analog and digital measurement inputs, analog and digital outputs, and memory. An operating system (firmware) coordinates the functions of these parts in conjunction with the on-board clock and the CRBasic application program.
Section 5. Overview
The application program is written in CRBasic, which is a programming language that includes measurement, data processing, and analysis routines and the standard BASIC instruction set. For simpler applications, Short Cut
a user-friendly program generator, can be used to write the progam. For more demanding programs, use CRBasic Editor
After measurements are made, data are stored in non-volatile memory. Most applications do not require that every measurement be recorded. Instead, the program usually combines several measurements into computational or statistical summaries, such as averages and standard deviations.
Programs are run by the CR1000 in either sequential mode
or the more efficient pipeline mode
In sequential mode, each instruction is executed sequentially in the order it appears in the program. In pipeline mode, the
CR1000 determines the order of instruction execution.
5.1.1 Wiring Panel — Overview
In the following figure, the CR1000 wiring panel is illustrated. The wiring panel is the interface to most CR1000 functions so studying it is a good way to get acquainted with the CR1000. Functions of the terminals are broken down into the following categories.
• Analog input
• Analog output
• Pulse counting
• Digital I/O input
• Digital I/O output
• Digital I/O communications
• Dedicated power output terminal
• Power input terminal
• Ground terminals
57
Section 5. Overview
FIGURE 16: Wiring Panel
CR1000 Wiring Panel Terminal Definitions
Analog Input
SE 1 2 3 4 5 6 7 8 9 1
0
DIFF
┌ 1 ┐ ┌ 2 ┐ ┌ 3 ┐ ┌ 4 ┐ ┌ 5 ┐
1
1
1
2
┌ 6 ┐
1
3
1
4
┌ 7 ┐
1
5
1
6
┌ 8 ┐
COM
Tx
1
R x
T x
COM
2
R x
T x
COM
3
R x
T x
COM
4
R x
H L H L H L H L H L H L H L H L
Single-ended 16
Differential
(high/low)
Analog period average
Vibrating wire
2
Analog Output
Switched Precision
Voltage
Pulse Counting
8
16
16
3
58
Section 5. Overview
Switch closure 10
High frequency
Low-level Vac
Digital I/O
Control
Status
General I/O
(TX,RX)
Pulse-width modulation
Timer I/O
10
2
8
8
4
3
Interrupt
Continuous
Regulated
3
5 Vdc
Continuous
Unregulated
3
12 Vdc 2
Switched Regulated
3
8 5 Vdc
Switched
Unregulated
3
12 Vdc
UART
True RS-232
(TX/RX)
8
4
8
1
1
2
TTL RS-232
(TX/RX)
SDI-12
SDM
(Data/Clock/Enable)
4
4
1
1 Terminal expansion modules are available. See section Measurement and Control Peripherals — Overview
2 Static, time-domain measurement. Obsolete. See section Vibrating Wire Measurements — Overview
3 Check the table Current Source and Sink Limits
4 Requires an interfacing device for sensor input. See the table Data Retrieval and Comms Peripherals — Lists
59
Section 5. Overview
5.1.1.1 Switched Voltage Output — Overview
Related Topics:
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• Current Source and Sink Limits
• PLC Control — Overview
• PLC Control Modules — Overview
• PLC Control Modules — Lists
C terminals are selectable as binary inputs, control outputs, or communication ports. See Measurements — 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).
FIGURE 17: Control and Monitoring with C Terminals
60
5.1.1.2 Voltage Excitation — Overview
Related Topics:
•
Voltage Excitation — Specifications (p. 60)
• Voltage Excitation — Overview
Section 5. 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. These terminals are regularly used with resistive-bridge measurements..
• 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 control 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 (CAO) — available by adding a peripheral analog output device available from Campbell Scientific. Refer to
Analog-Output Modules — List
for information on available expansion modules.
5.1.1.3 Power Terminals
5.1.1.3.1 Power In Terminals
The POWER IN connector is the connection point for external power supply components.
5.1.1.3.2 Power Out Terminals
Note Refer to Switched-Voltage Output — Details
for more information about 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 conditions, and to minimize the error associated with the measurement of underpowered sensors. See 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>.
61
62
Section 5. Overview
5.1.1.4 Communication Ports — Overview
Related Topics:
• Communication Ports — Overview
• Data Retrieval and Comms — Overview
• CPI Port and CDM Devices — Overview
• PakBus — Overview
• RS-232 and TTL
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
Section 5. Overview
5.1.1.4.1 CS I/O Port
Read More See 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 comms interfaces are listed in the appendix
Serial I/O Modules — List
Note Keep CS I/O cables short (maximum of a few feet).
5.1.1.4.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 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.1.1.4.3 Peripheral Port
Provided for connection of some Campbell Scientific CF memory card modules and IP network link hardware. See the appendices TCP/IP Links — List
and Data Storage Devices — List
See Memory Card (CRD: Drive) —
Overview
for precautions when using memory cards.
Read More See TCP/IP — Details
• One multi-pin port, labeled Peripheral Port .
63
64
Section 5. Overview
5.1.1.4.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.1.1.4.5 SDM Port
SDM is a protocol proprietary to Campbell Scientific that supports several
Campbell Scientific digital sensor and comms input and output expansion peripherals and select smart sensors.
• One SDM port configured from C1 , C2 , and C3 terminals.
5.1.1.4.6 CPI Port and CDM Devices — Overview
Related Topics:
• CPI Port and CDM Devices — Overview
• CPI Port and CDM Devices — Details
CPI is a new proprietary protocol that supports an expanding line of Campbell
Scientific CDM modules. CDM modules are higher-speed input- and output-expansion peripherals. CPI ports also enable networking between compatible Campbell Scientific dataloggers. Consult the manuals for CDM modules for more information.
• Connection to CDM devices requires the SC-CPI interface.
5.1.1.4.7 Ethernet Port
Read More See the section TCP/IP — Details
• Ethernet capability requires a peripheral Ethernet interface device, as listed in Network Links — List
5.1.1.5 Grounding — Overview
Related Topics:
• Grounding — Overview
• Grounding — Details
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
Section 5. Overview 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.
• G Power ground return for 5V , SW12 , 12V terminals, 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.2 Measurements — Overview
Related Topics:
• Sensors — Quickstart
• Measurements — Overview
• Measurements — Details
• Sensors — Lists
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 .
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.2.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.
65
66
Section 5. Overview
5.2.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.
The CR1000 can also measure analog current output when the current is converted to voltage by using a resistive shunt.
Sensor connection is to H / L terminals configured 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.2.2.1 Voltage Measurements — Overview
Related Topics:
• 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 terminal assignments.
Conceptually, analog voltage sensors output two signals: high and low. For example, a sensor that outputs 1000 mV on the high lead and 0 mV on the low has an overall output of 1000 mV. A sensor that outputs 2000 mV on the high lead and 1000 mV on the low also has an overall output of 1000 mV. Sometimes, the low signal is simply sensor ground (0 mV). A single-ended measurement measures the high signal with reference to ground, with the low signal tied to 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 that 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 single-ended measurements of small voltage
Section 5. Overview 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
67
68
Section 5. Overview
Differential and Single-Ended Input
Terminals
Differential
DIFF Terminals
1H
1L
2H
2L
3H
3L
6H
6L
7H
7L
8H
8L
4H
4L
5H
5L
11
12
13
14
15
16
7
8
9
10
Single-Ended
SE Terminals
1
2
3
4
5
6
5.2.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. While differential measurements are usually preferred, a single-ended measurement is often adequate in applications wherein some types of noise are not present 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.
Section 5. 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.2.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 autosequence is characterized by multiple measurements, the results of which are autoaveraged 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.
5.2.2.2 Current Measurements — Overview
Related Topics:
• Current Measurements — Overview
• Current Measurements — Details
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.
69
70
Section 5. Overview
5.2.2.3 Resistance Measurements — Overview
Related Topics:
• Resistance Measurements — Specifications
• Resistance Measurements — Overview
• Resistance Measurements — Details
• Measurement: RTD, PRT, PT100, PT1000
Many analog sensors use some kind of variable resistor as the fundamental sensing element. As examples, wind vanes use potentiometers, pressure transducers use strain gages, and temperature sensors use thermistors. These elements are placed in a Wheatstone bridge or related circuit. With the exception of PRTs, another type of variable resistor. See Measurement: RTD, PRT, PT100,
PT1000
This manual does not give instruction on how to build variable resistors into a resistor bridge. Sensor manufacturers consider many criteria when deciding what type of resistive bridge to use for their sensors. The CR1000 can measure most bridge circuit configurations.
5.2.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 20: Half-Bridge Wiring
Example — Wind Vane
Potentiometer
Section 5. Overview
FIGURE 21: Full-Bridge Wiring Example
— Pressure Transducer
5.2.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.
5.2.3 Pulse Measurements — Overview
Related Topics:
• Pulse Measurements — Specifications
• Pulse Measurements — Overview
• Pulse Measurements — Details
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
71
72
Section 5. Overview
C terminals configurable for input for the following:
• State
• Edge counting
• Edge timing
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 Period Averaging
— Overview
5.2.3.1 Pulses Measured
The CR1000 measures three types of pulse outputs, which are illustrated in the figure Pulse Sensor Output Signal Types
FIGURE 22: Pulse Sensor Output Signal Types
5.2.3.2 Pulse Input Channels
Table Pulse Input Terminals and Measurements
lists devices, channels and options for measuring pulse signals.
Section 5. Overview
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 module
(p.
High-frequency
Switch-closure
• Counts
• Frequency
• Running average of frequency
• Interval
• Period
• State
5.2.3.3 Pulse Sensor Wiring
Read More See Pulse Measurement Tips
CRBasic
Instruction
PulseCount()
PulseCount()
TimerIO()
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 added 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 23: Pulse Input Wiring
Example — Anemometer
73
74
Section 5. Overview
5.2.4 Period Averaging — Overview
Related Topics:
• Period Average Measurements — Specifications
• Period Average Measurements — Overview
• Period Average Measurements — Details
CR1000 SE terminals can be configured to measure period average.
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 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 pulse count measurements. The frequency resolution of pulse count measurements can be improved by extending the measurement interval by increasing the scan interval and by averaging. For information on frequency resolution, see Frequency
Resolution
5.2.5 Vibrating Wire Measurements — Overview
Related Topics:
• Vibrating Wire Measurements — Specifications
• Vibrating Wire Measurements — Overview
• Vibrating Wire Measurements — Details
Vibrating wire sensors are the sensor of choice in many environmental and industrial applications that need sensors that will be stable over very long periods, such as years or even decades. The CR1000 can measure these sensors either directly or through interface modules.
A thermistor included in most sensors can be measured to compensate for temperature errors.
Section 5. Overview
Measuring the resonant frequency by means of period averaging is the classic technique, but Campbell Scientific has developed static and dynamic spectral-analysis techniques ( VSPECT
that produce superior noise rejection, higher resolution, diagnostic data, and, in the case of dynamic VSPECT, measurements up to 333.3 Hz.
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 Vibrating Wire Input Modules — List
for more information
Dynamic VSPECT measurements require addition of an interface module.
5.2.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:
• 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.2.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 is a smart-sensor protocol that uses one input port on the CR1000 and is powered by 12 Vdc. Refer to the chart CR1000 Terminal Definitions
which indicates C terminals that can be configured for SDI-12 input.
75
76
Section 5. Overview
5.2.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
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 .
FIGURE 24: Terminals Configurable for
RS-232 Input
FIGURE 25: Use of RS-232 and Digital I/O when Reading RS-232
Devices
Section 5. Overview
5.2.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 without modifying or recompiling the CRBasic program.
5.2.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.2.9 Synchronizing Measurements — Overview
Related Topics:
• Synchronizing Measurements — Overview
• Synchronizing Measurements — Details
5.2.9.1 Synchronizing Measurements in the CR1000 — Overview
5.2.9.2 Synchronizing Measurements in a Datalogger Network — Overview
Large numbers of sensors, cable length restrictions, or long distances between measurement sites may require use of multiple CR1000s.
5.3 Data Retrieval and Comms — Overview
Related Topics:
• Data Retrieval and Comms — Quickstart
• Data Retrieval and Comms — Overview
• Data Retrieval and Comms — Details
• Data Retrieval and Comms Peripherals — Lists
77
78
Section 5. Overview
The CR1000 communicates with external devices to receive programs, send data, or join a network. Data are usually moved through a comms link consisting of hardware and a protocol using Campbell Scientific datalogger support software
(p.
Data can also be shuttled with external memory such as a CompactFlash (CF) card (CRD: drive) or a Campbell Scientific mass storage media (USB: drive) to the PC.
5.3.1 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 Memory Drives —
On-board
for more information on the use of the TableFile() instruction.
5.3.2 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.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 SC115 Campbell Scientific mass storage device can be retrieved via a comms link to the CR1000 if the device remains on the CS I/O port. Data can also be retrieved by removing the device, connecting it to a PC, and copying off files using Windows File Explorer .
5.3.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:
Section 5. Overview
• Before removing a card from the card module, or removing the card module from the CR1000, disable the card by pressing the Initiate
Removal button (NOT the eject button), wait for the green light.
• Do not remove a memory card while the drive is active or data corruption and damage to 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 comms link with the CR1000 or by removing the card and collecting it directly using a third-party adapter on a PC.
5.3.4.1 Comms
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.
5.3.4.2 Direct with Adapter to PC
Data transfer is much faster through an adapter than through a comm link. This speed difference is especially noticeable with large files.
The format of data files collected by direct connection of the card with a PC may be different than the standard Campbell Scientific data file formats (binary — format depends on the instruction used to write to the card). See section Data
File Format Examples
for more information. Binary data files can be converted to a Campbell Scientific format using CardConvert
software.
5.3.5 Comms Protocols
The primary communication protocol is PakBus
PakBus is a protocol proprietary to Campbell Scientific.
5.3.5.1 PakBus Comms — Overview
Related Topics:
• PakBus Comms — Overview
• PakBus Networking Guide (available at www.campbellsci.com/manuals )
The CR1000 communicates with datalogger support software
comms peripherals
and other dataloggers
with PakBus, a proprietary network communication protocol. PakBus is a protocol similar in concept to IP
79
80
Section 5. Overview
(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 Campbell Scientific datalogger.
• Routing — the CR1000 can act as a router, passing on messages intended for another Campbell Scientific datalogger. PakBus supports automatic route detection and selection.
• 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.6 Alternate Comms Protocols — Overview
Related Topics:
• Alternate Comms Protocols — Overview
• Alternate Comms Protocols — Details
Other comms protocols are also included:
• Web API
• Modbus
• DNP3
Refer to Specifications
for a complete list of supported protocols. See Data
Retrieval and Comms Peripherals — Lists
for devices available from
Campbell Scientific.
Keyboard displays also communicate with the CR1000. See Keyboard/Display
— Overview
for more information.
Section 5. Overview
5.3.6.1 Modbus — Overview
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, (with a RS-232 to
RS-485 such as an MD485 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 CR1000 supports RTU and ASCII communication modes on RS-232 and RS485 connections. It exclusively uses the TCP mode on IP connections.
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.6.2 DNP3 — Overview
Related Topics:
• DNP3 — Overview
• DNP3 — Details
The CR1000 supports DNP3 slave communications for inclusion in DNP3
SCADA networks.
5.3.6.3 TCP/IP — Overview
Related Topics:
• TCP/IP — Overview
• TCP/IP — Details
• TCP/IP Links — List
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. The following sections include information on some of these protocols:
81
82
Section 5. Overview
• DHCP
• DNS
• FTP
• HTML
• HTTP
• Micro-serial server
• Modbus TCP/IP
• NTCIP
• NTP
• PakBus over TCP/IP
• Ping
• POP3
• SMTP
• SNMP
• Telnet
• Web API
• XML
• UDP
• IPv4
• IPv6
5.3.7 Comms Hardware — Overview
The CR1000 can accommodate, in one way or another, nearly all comms options.
Campbell Scientific specializes in RS-232, USB, RS-485, short haul (twisted pairs), Wi-Fi, radio (single frequency and spread spectrum), land-line telephone, cell phone / IP modem, satellite, ethernet/internet, and sneaker net (external memory).
The most common comms hardware is an RS-232 cable or USB cable. These are short-distance direct-connect devices that require no configuration of the CR1000.
All other comms methods require peripheral devices; some require that CR1000 settings be configured differently than the defaults.
5.3.8 Keyboard/Display — Overview
The CR1000KD Keyboard/Display is a powerful tool for field use. The
CR1000KD, illustrated in figure CR1000KD Keyboard/Display
is purchased separately from the CR1000.
The keyboard/display is an essential installation, maintenance, and troubleshooting tool for many applications. It allows interrogation and configuration of the CR1000 datalogger independent of other comms links.
More information on the use of the keyboard/display is available in Custom
Menus — Overview
The keyboard/display will not operate when a USB cable is plugged into the USB port.
FIGURE 26: CR1000KD
Keyboard/Display
Section 5. Overview
5.3.8.1 Character Set
The keyboard display character set is accessed using one of the following three procedures:
• The 16 keys default to ▲, ▼, ◄, ►, Home, PgUp, End, PgDn, Del, and Ins .
• To enter numbers, first press Num Lock . Num Lock stays set until pressed again.
• Above all keys, except Num Lock and Shift , are characters printed in blue. To enter one of these characters, press Shift one to three times to select the position of the character as shown above the key, then press the key. For example, to enter Y , press Shift Shift Shift PgDn .
• 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 press ▲, ▼, ◄, ► to scroll to the desired character in the list that is presented, then press Enter .
5.3.8.2 Custom Menus — Overview
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 by the programmer. DataView appears in place of the default main menu on the keyboard display. As shown, DataView has menu item
83
Section 5. Overview
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.
FIGURE 27: Custom Menu Example
84
5.4 Measurement and Control Peripherals — Overview
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
S erial D evice for M easurement expand the input and output capacity of the
CR1000. These devices connect to the CR1000 through terminals C1 , C2 , and C3 .
CDM Devices
C ampbell D istributed M odules measurement and control modules that use the high speed CAN Peripheral Interface (CPI) bus technology. These connect through the SC-CPI interface.
Section 5. Overview
5.5 Power Supplies — Overview
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 regulator, and a rechargeable battery can be used to construct a UPS
(un-interruptible power supply).
5.6 CR1000 Setup — Overview
Related Topics:
• CR1000 Setup — Overview
• CR1000 Setup — Details
• Status, Settings, and Data Table Information (Info Tables and Settings)
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 application programs. For more complex applications, some settings may need adjustment. Settings can be changed with the following:
• DevConfig ( Device Configuration Utility)
• CR1000KD Keyboard/Display
• Datalogger support software
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 and settings remain intact when power is cycled.
OS updates are occasionally made available at www.campbellsci.com
.
5.7 CRBasic Programming — Overview
Related Topics:
• CRBasic Programming — Overview
85
86
Section 5. Overview
• CRBasic Programming — Details
• 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 .
Note Once a Short Cut generated program has been edited with
CRBasic Editor
,
it can no longer be modified with Short Cut .
5.8 Security — Overview
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
Section 5. Overview
• 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.
5.9 Maintenance — Overview
Related Topics:
• Maintenance — Overview
• Maintenance — Details
With reasonable care, the CR1000 should give many years of reliable service.
5.9.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 un-repairable, the CR1000. Water can come in liquid form from flooding or sprinkler irrigation, but most often it comes as condensation. In most cases, protection from water is easily accomplished by placing the CR1000 in a weather-tight enclosure with desiccant and by 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.
5.9.2 Protection from Voltage Transients — Overview
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.
87
88
Section 5. Overview
5.9.3 Factory Calibration — Overview
Related Topics
• Auto Self-Calibration — Overview
• Auto Self-Calibration — Details
• Auto Self-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 as specified in
Specifications
If calibration services are required, see Assistance
5.9.4 Internal Battery — Overview
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 powers SRAM when the CR1000 is not externally powered. Voltage of the battery is monitored from the CR1000 Status table ( LithiumBattery
. Replace the battery as directed in Internal Battery — Details
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.
5.10 Datalogger Support Software — Overview
Related Topics:
• Datalogger Support Software — Quickstart
• Datalogger Support Software — Overview
• Datalogger Support Software — Details
• Datalogger Support Software — Lists
Section 5. Overview
Datalogger support software handles communication between a computer or device and the CR1000. A wide array of software are available, but the following are the most commonly used:
• Short Cut Program Generator for Windows (SCWin) — Generates simple CRBasic programs without the need to learn the CRBasic programming language
• PC200W Datalogger Starter Software for Windows — Supports only direct serial connection to the CR1000 with hardwire or select Campbell
Scientific radios. It supports sending a CRBasic program, data collection, and setting the CR1000 clock; available at no charge at www.campbellsci.com/downloads
• LoggerLink Mobile Apps — Simple tools that allow an iOS or Android device to communicate with IP, Wi-Fi, or Bluetooth enabled CR1000s; includes most PC200W functionality.
• PC400 Datalogger Support Software — Includes PC200W functions,
CRBasic Editor , and supports all Campbell Scientific communications hardware, except satellite, in attended mode
• LoggerNet Datalogger Support Software — Includes all PC400 functions and supports all Campbell Scientific communication options, except satellite, attended and automatically; includes many enhancements such as graphical data displays and a display builder
Note More information about software available from Campbell Scientific can be found at www.campbellsci.com
.
5.11 PLC Control — Overview
Related Topics:
• PLC Control — Overview
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• Current Source and Sink Limits
The CR1000 can control instruments and devices such as the following:
• Wireless cellular modem to conserve power.
• GPS receiver to conserve power.
• Trigger a water sampler to collect a sample.
• Trigger a camera to take a picture.
• Activate an audio or visual alarm.
89
90
Section 5. Overview
• Move a head gate to regulate water flows in a canal system.
• Control pH dosing and aeration for water quality purposes.
• Control a gas analyzer to stop operation when temperature is too low.
• Control irrigation scheduling.
Controlled devices can be physically connected to C terminals, usually through an external relay driver, or the SW12V
terminal. C terminals can be set low (0
Vdc) or high (5 Vdc) using PortSet() or WriteIO() instructions. Control modules are available to expand and augment CR1000 control capacity. On / off and proportional control modules are available. See appendix PLC Control Modules
— List
Tips for writing a control program:
• Short Cut programming wizard has provisions for simple on/off control.
• PID control can be done with the CR1000.
Control decisions can be based on time, an event, or a measured condition.
Example:
In the case of a cell modem, control is based on time. The modem requires 12 Vdc power, so connect its power wire to the CR1000 SW12V terminal. The following code snip turns the modem on for ten minutes at the top of the hour using the
TimeIntoInterval() instruction embedded in an If / Then logic statement:
If TimeIntoInterval ( 0,60,Min) Then PortSet (9,1) 'Port “9” is the
SW12V Port. Turn phone on.
If TimeIntoInterval (10,60,Min) Then PortSet (9,0) 'Turn phone off.
TimeIsBetween() returns TRUE if the CR1000 real-time clock falls within the specified range; otherwise, the function returns FALSE . Like
TimeIntoInterval() , TimeIsBetween() is often embedded in an If / Then logic statement, as shown in the following code snip.
If TimeIsBetween (0,10,60,Min) Then
SW12 (1) 'Turn phone on.
Else
SW12 (0) 'Turn phone off.
EndIf
TimeIsBetween() returns TRUE for the entire interval specified whereas
TimeIntoInterval() returns TRUE only for the one scan that matches the interval specified.
For example, using the preceding code snips, if the CRBasic program is sent to the datalogger at one minute past the hour, the TimeIsBetween() instruction will evaluate as TRUE on its first scan. The TimeIntoInterval() instruction will evaluate as TRUE at the top of the next hour (59 minutes later).
Section 5. Overview
Note START is inclusive and STOP is exclusive in the range of time that will return a TRUE result. For example: TimeIsBetween (0,10,60,Min) will return TRUE at 8:00:00.00 and FALSE at 08:10:00.00.
5.12 Auto Self-Calibration — Overview
Related Topics
• Auto Self-Calibration — Overview
• Auto Self-Calibration — Details
• Auto Self-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
The CR1000 auto self-calibrates to compensate for changes caused by changing operating temperatures and aging. Disable auto self-calibration when it interferes with execution of very fast programs and less accuracy can be tolerated.
5.13 Memory — Overview
Related Topics:
• Memory — Overview
• Memory — Details
• Data Storage Devices — List
• TABLE: Info Tables and Settings: Memory
The CR1000 organizes memory as follows:
• OS Flash 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 Device settings o Write protected o Non-volatile o CPU: drive
— Automatically allocated
— FAT32 file system
— Limited write cycles (100,000)
— Slow (serial access)
91
92
Section 5. Overview
• Main Memory 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 Cameras — List
— 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.
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 Data Storage Devices — List
for information on available memory expansion products.
By default, final-storage 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 .
6. Specifications
CR1000 specifications are valid from ─25° to 50°C in non -condensing environments unless otherwise specified. Recalibration is recommended every three years. Critical specifications and system configurations should be confirmed with a Campbell Scientific sales 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
2
A/D better (finer) resolution by twice than Basic Res.
3.1.1 -- 8 10
Range (mV)
±5000
±2500
±25
±2.5
1
DIFF
Res (μV)
2
667
333
3.33
0.33
Basic
Res (μV)
1333
667
66.7
6.7
2.0
0.67
1
Range overhead of ≈9% on all ranges guarantees full -scale
(p. conversion. A DIFF measurement with input reversal has
Resolution of DIFF measurements with input reversal.
Accuracy is ±(0.01% of reading + resolution), where resolution is
136 ns divided by the specified number of cycles to be measured.
3.5.1 -- 8 10 age
Gain
Range
Code
Signal
Min mV
6
Peak
Max
V
7
Min
Width
µs
Freq kHz
8
10
100
6
Signal to be centered around Threshold (see PeriodAvg()
8 mV25 mV2_5
10
2
2
2
10
100
50
5
The maximum frequency = 1/(twice minimum pulse width) for 50% of duty cycle signals.
RATIOMETRIC MEASUREMENTS
5.1 -- 8 10
7
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
7.12 -- 8 10 30 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)
3.2.1 -- 8 10 30 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
3.4 -- 8 10 30
3.4.1 -- 8 10 30
Inte- gration
Type
Code
250
_50Hz
5
5
Inte- gration
Time
250 µs
20.00 ms
Settling
Time
450 µs
3 ms
---Total Time
4
SE with no
Rev
≈1 ms
≈25 ms
4
5
AC line noise filter
---
DIFF with
Input
Rev
≈12 ms
≈50 ms 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 NORMALMODE REJECTION: 70 dB @ 60 Hz when using 60 Hz rejection
INPUT VOLTAGE RANGE W/O MEASUREMENT CORRUPTION: ±8.6
Vdc max.
SUSTAINEDINPUT 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
INPUT RESISTANCE: 20 GΩ typical
3.4.9 -- 8 10 30 ACCURACY OF BUILTIN REFERENCE JUNCTION THERM ISTOR (for
±0.3°C, -25° to 50°C
±0.8°C, -55° to 85°C (-XT only)
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 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.
RATIOMETRIC MEASUREMENT ACCURACY
9,11
±(0.04% of Voltage Measurement + Offset
5.2.1 -- 8 10 30
12
)
Note Important assumptions outlined in footnote 9:
9
Accuracy specification assumes excitation reversal for excitation resistor errors and sensor and measurement noise. measurement with
BRFull()
Multiplier =1,
Instruction: ∆X = ∆V1/ VX. accuracy. See manual section
Offset = 0):
Resistance Measurements
-1
.
for more information.
12
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)
Excitation reversal reduces offsets by a factor of two.
PULSE COUNTERS (P 1– 2)
6.0.1 -- 8 10 30 Two inputs individually selectable for switch closure, high-frequency pulse, or low-level ac. Independent 24-bit counters for each input.
MAXIMUM COUNTS PER SCAN: 16.7 x 10
6
6.2 -- 8 10 30 SWITCH CLOSURE MODE:
Minimum Switch Closed Time: 5 ms
Minimum Switch Open Time: 6 ms
6.3 -- 8 10 30 HIGH -FREQUENCY PULSE MODE:
MaximumInput 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.
to ±0.5 Vdc.
Input Hysteresis: 12 mV RMS @ 1 Hz
Maximum ac-Input Voltage: ±20 V
Minimum ac-Input Voltage:
6.4.1 -- 8 10 30 Sine wave (mV RMS) Range (Hz)
1.0 to 20
200
5000
0.5 to 200
0.3 to 20,000
20°C, 650 mA at 50°C, and 360 mA at 85°C.
8.0 -- 8 10 30 COMPLIANCE
8.1 -- 8 10 30 www.campbellsci.com/cr1000
9.0 -- 8 10 30 COMMUNICATION
9.1 -- 8 10 30
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.
Default Format: eight data bits; one stop bits; no parity.
Optional Formats: seven data bits; two stop bits; odd, even parity.
CS I/O PORT: Interface with comms peripherals manufactured by
Campbell Scientific. configurable and meet SDI-12 Standard v. 1.3 for datalogger mode. Up to ten SDI-12 sensors are supported per port.
9.4 -- 30 PERIPHERAL PORT: 40 -pin interface for attaching CompactFlash or
Ethernet peripherals.
9.5 -- 8 10 30 PROTOCOLS SUPPORTED: PakBus, AES 128 Encrypted PakBus,
Modbus, DNP3, FTP, HTTP, XML, HTML, POP3, SMTP, Telnet,
NTCIP, NTP, web API, SDI-12, SDM.
10.0 -- 8 10 30 SYSTEM
10.1 -- 8 10 30 PROCESSOR: Renesas H8S 2322 (16 -bit CPU with 32-bit internal core running at 7.3 MHz)
MEMORY: 2 MB of flash for operating system; 4 MB of batterybacked SRAM for CPU, CRBasic programs, and data.
REAL-TIME CLOCK ACCURACY: ±3 min. per year. Correction via GPS optional.
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 INTERNAL BATTERY: 1200 mAhr lithium battery for clock and
SRAM backup. Typically provides three years of back -up.
11.3 -- 8 10 30 rechargeable available. Power connection is reverse polarity protected.
TYPICAL CURRENT DRAIN at 12 Vdc:
Sleep Mode: 0.7 mA typical; 0.9 mA maximum
1 Hz Sample Rate (one fast SE meas .): 1 mA
100 Hz Sample Rate (one fast SE meas.): 16 mA
100 Hz Sample Rate (one fast SE meas. with RS -232 communications): 28 mA
Active external keyboard display adds 7 mA (100 mA with backlight on).
DIMENSIONS: 239 x 102 x 61 mm (9.4 x 4.0 x 2.4 in.) ; additional clearance required for cables and leads.
12.2 MASS / WEIGHT: 1.0 kg / 2.1 lbs
4.2 -- 8 10
(VX 1–3) ±2.5 Vdc 0.67 mV
ANALOG OUTPUT ACCURACY (VX):
±(0.06% of setting + 0.8 mV, 0° to 40°C
±(0.12% of setting + 0.8 mV, -25° to 50°C
±25 mA
±(0.18% of setting + 0.8 mV, -55° to 85°C (-XT only)
4.4 -- 8 10 30
93
7. Installation
Related Topics:
• Quickstart
• Specifications
• Installation
• Operation
7.1 Enclosures — Details
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 through which small screws are inserted into the nylon anchors. Screws and nylon anchors are supplied in a kit that is included with the enclosure.
FIGURE 28: Enclosure
95
96
Section 7. Installation
7.2 Power Supplies — Details
Related Topics:
• Power Input Terminals — 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, when designing a solar power system, design it to operate with 14 days of reserve time at the winter solstice when the following are limiting environmental factors:
• Sunlight intensity is the lowest
• Sunlight duration is the shortest
• Battery temperatures are the lowest
• System power requires are often the highest
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-interruptible power supply).
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.2.1 CR1000 Power Requirement
The CR1000 operates 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.
Section 7. Installation
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.
7.2.2 Calculating Power Consumption
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.2.3 Power Sources
Related Topics:
• Power Input Terminals — 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 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 Measurements — Details
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.2.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 CR1000 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 to Vehicle Power Supply
illustrates how a second power supply is connected to the CR1000. The diode OR
97
Section 7. Installation 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 29: Connecting to Vehicle Power Supply
98
7.2.4 Uninterruptable Power Supply (UPS)
A UPS (un-interruptible power supply) is often the best power source for long-term 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..
7.2.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 12 Vdc 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 and the CR1000 will resume operation.
7.2.6 External Alkaline Power Supply
If external alkaline power is used, the alkaline battery pack is connected directly to the POWER IN 12V and G terminals. Voltage input range is 9.6 to 16 Vdc.
7.3 Grounding — Details
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.
Section 7. Installation
7.3.1 ESD Protection
Related Topics:
• 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.
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 spark-gap 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 five foot copper-sheathed grounding rod driven into the earth and connected to the large brass ground lug on the wiring panel with a 14 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 lightning-protection consultant.
In vehicle applications, the earth ground lug should be firmly attached to the vehicle chassis with 12 AWG wire or larger.
In laboratory applications, locating a stable earth ground is challenging, but still necessary. In older buildings, new 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.
99
Section 7. Installation
FIGURE 30: Schematic of Grounds
100
7.3.1.1 Lightning Protection
Related Topics:
• 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.
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 low-resistance path to earth ground is adequate protection in many installations. .
FIGURE 31: Lightning Protection Scheme
7.3.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
101
102
Section 7. Installation these 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.3.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.3.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.3.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
Section 7. Installation potentials at the two instruments. For this reason, a differential measurement should be made on the analog output from the external signal conditioner.
7.3.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 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.
103
Section 7. Installation
FIGURE 32: Model of a Ground Loop with a Resistive Sensor
104
7.4 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.5 CR1000 Setup — Details
Related Topics:
• CR1000 Setup — Overview
• CR1000 Setup — Details
• Status, Settings, and Data Table Information (Info Tables and Settings)
Your new CR1000 is already configured to communicate with Campbell
Scientific datalogger support software
on the RS-232 port, and over most comms links. If you find that an older CR1000 no longer communicates with these simple links, update the operating system and do a full reset of the unit, as described in Resetting the CR1000
Some applications, especially those implementing TCP/IP features, may require changes to factory defaults.
Configuring modifies the firmware of the CR1000. Programming modifies the
CR1000 CRBasic program. Settings are key to configuring the CR1000.
Section 7. Installation
7.5.1 Tools — Setup
Configuration tools include the following:
• Device Configuration Utility
• Network Planner
• Info tables and settings
• CRBasic program
• Executable CPU: files
• Keyboard display
• Terminal commands
7.5.1.1 DevConfig — Setup Tools
The most versatile set up tool is Device Configuration Utility , or DevConfig . It is bundled with LoggerNet , PC400 , RTDAQ , or it can be downloaded from 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 fields, and info table information fields
• 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 Connect Power and Comms.
105
106
Section 7. Installation
FIGURE 33: Device Configuration Utility (DevConfig)
7.5.1.2 Network Planner — Setup Tools
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 comms 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 34: Network Planner Setup
Section 7. Installation
7.5.1.2.1 Overview — Network Planner
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.
107
108
Section 7. Installation
• 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
.
7.5.1.2.2 Basics — Network Planner
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 )
Section 7. Installation
7.5.1.3 Info Tables and Settings — Setup Tools
Related Topics:
• Info Tables and Settings
• Common Uses of the Status Table
• Status Table as Debug Resource
Info tables and settings contain fields, settings, and information essential to setup, programming, and debugging of many advanced CR1000 systems. Info tables and settings are numerous. Note the following:
• All info tables and settings, except a handful, are accessible through a keyword. This discussion is organized around these keywords. Keywords and descriptions are listed alphabetically in sub appendix Info Tables and
Settings Descriptions
• Info table fields are mostly read only. Some are resettable.
• Settings are mostly read/write.
• Directories in sub appendix Info Tables and Settings Directories
list several groupings of keywords. Each keyword listed in these groups is linked to the relevant description.
• Some info tables and settings have multiple names depending on the interface used to access them. The names are listed with the descriptions.
• No single interface accesses all info tables and settings. Interfaces used for access include the following:
Info Tables and Settings Interfaces
Interface
Settings Editor
Location
Device Configuration Utility ,
LoggerNet Connect screen , PakBus
Graph
Info tables (Status, DataTableInfo,
CPIInfo, etc)
View as a data table in a numeric monitor
Station Status
Edit Settings
Menu item in
Menu item in
LoggerNet
PakBusGraph software.
Keyboard/Display Settings Menu items in Configure, Settings status.keyword/settings.keyword
Syntax in CRBasic program
1 Information presented in Station Status is not updated automatically. Click the Refresh button to update.
109
110
Section 7. Installation
Note Communication and processor bandwidth are consumed when generating the Status and and other information tables. If the CR1000 is very tight on processing time, as may occur in very long or complex operations, retrieving these tables repeatedly may cause skipped scans
(p.
7.5.1.4 CRBasic Program — Setup Tools
Info tables and settings can 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.5.1.5 Executable CPU: Files — Setup Tools
Many CR1000 settings can be changed remotely over a comms link either directly, or as discussed in CRBasic Program — Setup Tools
as part of the
CRBasic program. These conveniences come with the risk of inadvertently changing settings and disabling communications. Such an occurrence 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, 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 comms.
Executable CPU: files include the following:
• 'Include' file
• Default.cr1 file
• Powerup.ini file
Section 7. Installation
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.5.1.5.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 comms requires much of the available
CR1000 memory. If the intent is to load operating systems via a comms 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 Operating System — Installation
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.
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.5.1.5.2 "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.
2. Send the file to the CR1000 using tools in the File Control menu of datalogger support software
111
112
Section 7. Installation
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 comms. There is no restriction on the length of the file. CRBasic example Using an "Include File"
shows a program that expects a file to control power to a modem.
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"
Section 7. Installation
FIGURE 35: "Include" File Settings With DevConfig
FIGURE 36: "Include" File Settings With PakBusGraph
113
114
Section 7. Installation
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
' 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
'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
Section 7. Installation
7.5.1.5.3 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 will be the current program.
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.5.2 Setup Tasks
Following are a few common configuration actions:
• Updating the operating system
• Access CR1000 infor tables and settings
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:
115
116
Section 7. Installation
Common Configuration Actions and Tools
Action
Updating the operating system
Access a register
Tools to Use 1
DevConfig
software, Program
Send
memory card
mass storage device
DevConfig , PakBus Graph , CRBasic program, 'Include' file
Default.cr1 file
Set the CR1000 clock
Save / restore configuration
DevConfig , PC200W , PC400 ,
LoggerNet
DevConfig
1 Tools are listed in order of preference.
7.5.2.1 Operating System (OS) — Details
The CR1000 is shipped with the operating system pre-loaded. Check the pre-loaded 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
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 Program and OS Compression Q and A
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
Section 7. Installation datalogger support software allows the OS to be sent over all software supported comms 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 comms 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.5.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 click Connect .
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
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.
2.
3.
Loading an operating system through this method will do the following:
1. Restore all CR1000 settings to factory defaults
Delete data in final storage
Delete data from and remove the USR drive
4. Delete program files stored on the datalogger
117
118
Section 7. Installation
7.5.2.1.2 OS Update with File Control
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.5.2.1.3 OS Update with Send Program Command
A send program command is a feature of DevConfig and other datalogger support software
Location of this command in the software is listed in the following table:
Section 7. Installation
Program Send Command Locations
Datalogger Support
Software Name of Button
DevConfig
LoggerNet
PC400
PC200W
RTDAQ
Send Program
Send New...
Send Program
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
119
120
Section 7. Installation
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.
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.5.2.1.4 OS Update with External Memory and PowerUp.ini File
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
Section 7. Installation
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
7.5.2.2 Factory Defaults — Installation
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.5.2.3 Saving and Restoring Configurations — Installation
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 .
121
Section 7. Installation
FIGURE 37: Summary of CR1000 Configuration
122
7.6 CRBasic Programming — Details
Related Topics:
• CRBasic Programming — Overview
• CRBasic Programming — Details
• Programming Resource Library
• CRBasic Editor Help
Programs are created with either Short Cut
or CRBasic Editor
Read the instructions for the use of each in their respective Help systems.
7.6.1 Program Structure
Essential elements of a CRBasic program are listed in the table CRBasic Program
Structure
and demonstrated in CRBasic example Program Structure
Section 7. Installation
CRBasic Program Structure
Program Element 1 Purpose
Const
Public
Dim
Alias
Units
DataTable
Sample()
Average()
Maximum()
Minimum()
Declare fixed constants.
Declare and dimension variables viewable during program execution.
Declare and dimension variables not viewable during program execution.
Assign aliases to variables.
Optional. Assign engineering units to variables. Units are not active code. The CR1000 makes no use of units nor checks unit accuracy.
Define stored-data tables.
• Process or store trigger: 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.
Begin the action part of the program.
Set the interval for a series of measurements.
Make measurements.
Process measurement and other data.
BeginProg
Scan()
Measurements
Processing
CallTable()
Controls
NextScan
EndProg
Call data tables to process and store data.
Check measurements and initiate any control actions.
Loop back to Scan() and wait for the next scan.
End the program.
1 Fine points:
• Maximum program-line length is 512 characters.
• Maximum constant-name length is about 500 characters.
• Processes or calculations repeated during program execution can be packaged in a subroutine and called when needed rather than repeating the code each time.
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
CRBasic Program Structure
Declare constants
Declare public variables, dimension array, and declare units.
Define data table
Declarations
Section 7. Installation
'Begin Program
BeginProg
'Set scan interval
Scan (1,Sec,3,0)
'Measurements
PanelTemp (RefTemp,250)
TCDiff (TC()...Offset)
Measure
'Processing (None in this
'example)
'Call data table
CallTable Temp
'Controls (None in this
'example)
Call data table
Scan loop
'Loop to next scan
NextScan
'End Program
EndProg
7.6.2 Writing and Editing Programs
7.6.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
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.6.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
125
126
Section 7. Installation
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.
7.6.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.
Section 7. Installation
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.6.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.6.3 Programming Syntax
7.6.3.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 CRBasic Editor
Help
127
128
Section 7. Installation
7.6.3.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.6.3.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.
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.6.3.2 Single-Statement Declarations
Single-statements are used to declare variables, constants, variable and constant related elements, station name, and hardware settings. The following instructions are used usually before the BeginProg instruction:
• Public
• Dim
• Constant
• Units
Section 7. Installation
• Alias
• StationName
The table Rules for Names
lists declaration names and allowed lengths.
See Predefined Constants
for other naming limitations.
7.6.3.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.
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).
129
Section 7. Installation
7.6.3.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-Storage 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.
Data Types in Variable Memory
Name Command Description
Word
Size
(Bytes)
Float
As Float or
As IEEE4
IEEE floating point
4
Long
Boolean
As Long
As
Boolean
Signed integer
Signed integer
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-storage memory. If storing non-integers, 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
• 24 bits (about 7 digits)
• ± 1.4E–45 to ± 3.4E38
32 bits
–2,147,483,648 to +2,147,483,647
True = – 1 or any number ≥ 1
False = any number ≥ 0 and < 1
130
Section 7. Installation
Data Types in Variable Memory
Name Command Description
Word
Size
(Bytes)
Notes Resolution / Range
String As String ASCII string
Minimum
: 3 (4 with null terminato r)
Default:
24
Maximu m: 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 non-numeric 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. As a special case, a string can be declared as String * 1 .
This allows the efficient storage of a single character. The string will take up 4 bytes in memory and when stored in a data table, but it will hold only one character.
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.
Data Types in Final-Storage Memory
Name Argument Description
Word
Size
(Bytes)
Notes Resolution / Range
FP2 FP2
Campbell
Scientific floating point
2
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.
Absolute Value
0 – 7.999
8 – 79.99
80 – 799.9
800 – 7999.
Decimal
Location
X.XXX
XX.XX
XXX.X
XXXX.
Zero Minimum Maximum
0.000 ±0.001 ±7999.
IEEE4
IEEE4 or
Float
IEEE floating point
4 IEEE Standard 754 ± 1.4E–45 to ± 3.4E38
131
Section 7. Installation
Data Types in Final-Storage Memory
Name Argument Description
Word
Size
(Bytes)
Long
UINT2
UINT4
Boolean
Bool8
Long
UINT2
UINT4
Boolean
Bool8
Signed integer
Unsigned integer
Unsigned integer
Signed integer
Integer
4
2
4
4
1
Notes Resolution / Range
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-storage memory.
If storing non-integers, the fractional portion of the value is lost.
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 FLOAT s 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
(p.
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
–2,147,483,648 to +2,147,483,647
0 to 65535
0 to 4,294,967,295 (2 32 )
True = – 1 or any number ≥ 1
False = any number ≥ 0 and < 1
True = 1, False = 0
132
Section 7. Installation
Data Types in Final-Storage Memory
Name Argument Description
Word
Size
(Bytes)
Notes Resolution / Range
NSEC
String
NSEC
String
Time stamp
ASCII string
8
Minimum
: 3 (4 with null terminato r)
Default:
24
Maximu m: limited only to the size of available
CR1000 memory.
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 non-numeric characters, the SplitStr() instruction can be used to parse out the numeric values. See the sections String Operations
and Serial I/O
.
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. As a special case, a string can be declared as
String * 1 . This allows the efficient storage of a single character. The string will take up 4 bytes in memory and when stored in a data table, but it will hold only one character.
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
133
134
Section 7. Installation
'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
7.6.3.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)
Section 7. Installation with (x,y,z) being the indices, have (x • y • z) number of variables in a cubic x-by-y-by-z matrix. Dimensions greater than three are not permitted by
CRBasic.
When using variables in place of integers as 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.
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.6.3.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 table Data Types in Variable Memory.
(p.
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
Five variables are declared, each 36 characters long:
StringVar(1)
StringVar(2)
StringVar(3)
StringVar(4)
StringVar(5)
7.6.3.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
135
136
Section 7. Installation works best in practice. CRBasic example Flag Declaration and Use
demonstrates changing words in a string based on a flag.
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.6.3.4 Using Variable Pointers
A pointer is the memory address of a variable. Use a pointer as a convenient way to reference the memory location of a variable rather than referencing it by name.
This is useful in a Function() instruction function when parameters are local to the function and changes to them have no effect on original arguments.
Define a pointer variable using the @ operator. For example:
PTR = @X
Use the ! operator to de-reference a pointer (return the value at the pointer). For example:
!PTR = Myvar
Use the @ operatore to return the name of the variable stored in a memory location. For example:
Name=(@)X
Pointer variables must be of type LONG and initialized by the @ operator, or a variable out-of-bounds error will occur.
Section 7. Installation
When a Function() function returns a pointer, apply the ! operator to the function call, as shown in the following example:
Function ConstrainFunc(Value As Long,Low As Long,High As Long) As
Long
If !Value < !Low Then
Return Low
ElseIf !Value > !High Then
Return High
Else
Return Value
EndIf
EndFunction
‘Call within program
FuncFltRes = !ConstrainFunc(@FltVal,@FltLow,@FltHigh)
7.6.3.5 Declaring Arrays
Related Topics:
• Declaring Arrays
• 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
(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.
137
138
Section 7. Installation
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,1,Vx1,0,250,1.0,0)
Therm107 (TempC(2),1,2,Vx1,0,250,1.0,0)
Therm107 (TempC(3),1,3,Vx1,0,250,1.0,0)
Therm107 (TempC(4),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.6.3.5.1 Advanced Array Declaration
This section describes syntax that facilitates array filling, scaling, copying, etc.
The main applications are as follows: a) initiating an array b) scaling an array, for example converting all of the FREQ/HZ returned by a group of AVW200's into digits, strain, level, etc. c) creating boolean arrays based on comparisons with a scalar or another array
The main drivers at the time of starting down this path were
1) multiple years of feedback from customers asking me how to more tersely initialize and scale arrays - often trying to compare CRBasic to Matlab or Python.
2) Easier ways to scale vibrating wire measurements and transpose their resulting data arrays:
CRBasic provides an array notation that allows one to easily operate on a single dimension of an array. Using this notation one can easily:
• initialize an array dimension
• copy a dimension to a new location
Section 7. Installation
• scale an array dimension
• perform a mathematical or logical operation for each element in a dimension using scalar or similarly located elements in different arrays and dimensions
Here are some syntax rules and behaviors. Given the array, Array(A,B,C):
• The () pair must always be present, i.e., reference the array as Array() or
Array(A,B,C)().
• Only 1 dimension of the array can be operated on at a time. To select the dimension, negate the element index.
• Operations will not cross from 1 dimension into another. We access from the specified starting point to the end of the dimension, where the dimension is specified by a negative or by default is the least significant.
• If indices are not specified, or none have been negated, the least significant dimension of the array will be assumed.
• The offset into the dimension being accessed is given by A,B, and C in
Array(A,B,C)().
• If the Array is referenced as Array(), then the starting point is assumed
Array(1,1,1) and the least significant dimensioned is accessed.
7.6.3.6 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 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.6.3.7 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
139
140
Section 7. Installation
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.6.3.8 Declaring Constants
Declare a constant name at the beginning of a program to use the alphanumeric name in place of a numeric or string value. In the body of the program, use the name rather than the value itself to make the program more secure against unintended changes, and easier to read and modify. CRBasic example Using the
Const Declaration
shows how to declare and use constants.
If declared using ConstTable / EndConstTable instructions, constants can be changed on the CR1000KD Keyboard/Display while the program is running
( Configure , Settings | Constant Table ). Changes can also be made with the C command in a terminal emulator (see Troubleshooting – Using Terminal Mode
(p.
.
Constants, in memory, are four-byte signed integers or floating point numbers of up to about 500 characters in length (length limited to the maximum command line
length).
CRBasic syntax does not have a provision for declaring a data type for a constant, so the compiler infers data type based on the format of the constant value expression, which is usually a single scalar. There are three possible outcomes:
• string — the constant expression produces a string or the value is enclosed in quotes
• integer — the constant expression does not produce a floating point value or the constant does not h ave a decimal point. Range =
–2,147,483,648 to 2,147,483,647
• floating point. Range ≈ –1E38 to 1E38
If the constant is not written as a decimal, the compiler treats the value as an integer. Integer and floating point values are represented by 32 bits. A floating-point value achieves its extended range by using a base-two exponential format. The range of integers that a floating-point value can reliably store is
Section 7. Installation limited by the size of the mantissa, which is ± 16,777,216. If the attempt is made to express a floating-point constant outside of this range, precision may be lost.
Constants in a constant table can also be changed using the SetSetting() instruction and the constant table using the CR1000KD.
Note Using all uppercase for constant names may make them easier to recognize.
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.6.3.8.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.6.3.9 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 final-memory, the value will have the alias name attached to it. So, if the
141
142
Section 7. Installation
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
7.6.3.10 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.
Formats for Entering Numbers in CRBasic
Format
Standard
Scientific notation
Example
6.832
5.67E-8
Base 10 Equivalent Value
6.832
5.67 x 10 -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.
Section 7. Installation
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
7.6.3.11 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 ,
143
144
Section 7. Installation
• 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.6.3.11.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 maximum number of data tables is 253 (prior to OS 28, the limit was 30 data tables), but the maximum can vary with other programming considerations. If your need for data tables approaches the maximum, only testing will define your limit. 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
TOA5
Typical Data Table
CR1000 CR1000 1048 CR1000.Std.13.06
TIMESTAMP RECORD BattVolt_Avg PTempC_Avg TempC_Avg(1)
TS RN Volts Deg C Deg C
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
1
2
3
0
4
5
6
Avg
13.18
13.18
13.19
13.19
13.19
13.19
13.18
Avg
23.5
23.5
23.51
23.54
23.55
23.55
23.55
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
35723 OneMin
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 Declaration 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
Field
1
2
3
4
5
6
7
8
TOA5 Environment Line
Description
TOA5
Station name
Datalogger model
Datalogger serial number
Datalogger OS version
Datalogger program name
Datalogger program signature
Table name
Changed By
As named in datalogger support software (p.
New OS
New program
New or revised program
Revised program
The second header line reports field names. This line consists of a set of comma-delimited 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
145
146
Section 7. Installation 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 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 Declaration 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 Declaration 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 .
Declaration and Use of a Data Table
'This program example demonstrates declaration 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
Section 7. Installation
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
'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 Data Output: Processing Instructions
Read More Data Output: Triggers and Omitting Samples
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
147
148
Section 7. Installation 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.
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 Declaration 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 comms 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
Section 7. Installation 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 comms bandwidth is not a consideration, the Lapses parameter should be set to 0 to ensure the CR1000 allocates adequate memory for each data table.
DataInterval() Lapse
Argument
Lapse
Lapse
Lapse
DataInterval() Lapse Parameter Options
>
=
<
0
0
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 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).
149
150
Section 7. Installation
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 Declaration 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:
• 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 Data Output: Triggers and Omitting Samples
and
Measurements and NAN
discuss the use of TrigVar and DisableVar in special applications.
Section 7. Installation
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
'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 Memory Cards and
Record Numbers
7.6.3.11.2 Declaring Subroutines
Read More See 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.
151
152
Section 7. Installation
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.6.3.11.3 Declaring Subroutines
Function() / EndFunction instructions allow you to create a customized CRBasic instruction. The declaration is similar to a subroutine declaration.
7.6.3.11.4 Declaring Incidental Sequences
A sequence is two or more statements of code. Data-table sequences are essential 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.
Also see ApplyAndRestartSequence() instruction.
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 .
Section 7. Installation
7.6.3.12 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/CPI
peripheral devices
• Digital task (a.k.a, SDM task) — rigidly timed measurement and control of SDM
peripheral devices, pulse measurements, and RS-232 measurements.
• 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.
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.
153
154
Section 7. Installation
Program Tasks
Measurement Task Digital Task
• Analog measurements
• Excitation
• Read pulse counters
( Pulse() )
• Read control ports
( GetPort() )
• Set control ports
( SetPort() )
• VibratingWire(
)
• PeriodAvg()
• CS616()
• Calibrate()
• SDM instructions, except
SDMSI04() and
SDMI016()
• CDM instructions / CPI devices.
• Pulse counters
7.6.3.12.1 Pipeline Mode
Processing Task
• Processing
• Output
• Serial I/O
• SDMSIO4()
• SDMIO16()
• ReadIO()
• WriteIO()
• Expression evaluation and variable setting in measurement and SDM instructions
Pipeline mode handles measurement, most digital, and processing tasks separately, and, in many cases, 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, 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 following priority schedule:
1. Measurements in main program
2. Auto self-calibration
Section 7. Installation
3. Measurements in slow sequences
4. Processing tasks
7.6.3.12.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 auto self 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.
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() .
155
156
Section 7. Installation
7.6.3.13 Execution Timing
Timing of program execution is regulated by timing instructions listed in the following table.
Scan() /
Program Timing Instructions
Instructions
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.6.3.13.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 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.
Section 7. Installation
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 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 ).
7.6.3.13.2 SlowSequence / EndSequence
Slow sequences include automatic and programmed sequences. Auto self-calibration calibration is an automatic slow sequence.
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
157
158
Section 7. Installation splicing, measurements in a slow sequence may span across multiple-scan 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.
Auto self-calibration is an automatic, slow-sequence scan, as is the watchdog task.
Read More See Auto Self-Calibration — Overview
7.6.3.13.3 SubScan() / NextSubScan
SubScan() / NextSubScan are used in the control of analog multiplexers ( Analog
Multiplexers — List
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.6.3.13.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 auto self-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 interstitial-scan time to optimize program execution and communication control.
Unless disabled, or crowded out by a too demanding schedule, self-calibration
(see Auto Self-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.
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 slow-sequence scan and the beginning of a main scan gets to the top of the queue, the main scan will not start until it can 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
Permission to proceed with a measurement is granted by the measurement 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 — Details
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.
159
Section 7. Installation
FIGURE 38: Sequential-Mode Scan Priority Flow Diagrams
160
7.6.3.14 Programming Instructions
In addition to BASIC syntax, additional instructions are included in CRBasic to facilitate measurements and store data. See CRBasic Editor Help
for a comprehensive list of these instructions.
7.6.3.14.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)
PanelTemp is the keyword. Two parameters follow: Dest , a destination variable name in which the temperature value is stored; and Integ, of a length of time to integrate the measurement. To place the panel temperature measurement in the
Section 7. Installation variable RefTemp , using a 250 µs integration time, the syntax is as shown in
CRBasic example Measurement Instruction Syntax
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.6.3.14.2 Argument Types
Most CRBasic commands ( instructions ) have sub-commands ( 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.6.3.14.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.
161
162
Section 7. Installation
Name
Category 1
Rules for Names
Maximum
Length
(number of characters)
Variable or array 39
Allowed characters
Constant 38
Units
Alias
Station name
Data-table name
38
39
64
20
Letters A to Z, a to z, _ (underscore), and numbers 0 to 9. Names must start with a letter 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.
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 Predefined Constants
for another naming limitation.
7.6.3.15 Expressions in Arguments
Read More See Programming Expression Types
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 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.
Section 7. Installation
7.6.3.16 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 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.
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.6.3.16.1 Floating-Point Arithmetic
Related Topics:
• Floating-Point Arithmetic
• Floating-Point Math, NAN, and ±INF
• TABLE: Data Types in Variable Memory
All arithmetic in the CR1000, and all declared variables, are single precision IEEE four-byte floating point.
A few operations are performed as double precision. These 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.
163
164
Section 7. Installation
• Floating-point arithmetic does not perfectly mimic true arithmetic.
• Avoid use of equality in cond itional 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.6.3.16.2 Arithmetic Operations
Arithmetic operations are written out in CRBasic syntax much as they are in common algebraic notation. 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.
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)
Use of Variable Arrays to Conserve Code Space
For I = 1 to 20
TCTemp(I) = TCTemp(I) * 1.8 + 32
Next I
7.6.3.16.3 Expressions with Numeric Data Types
FLOAT s, LONG s and Boolean s 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 ).
Section 7. Installation
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 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
LONG s are evaluated in expressions as integers when possible. CRBasic example
Evaluation of Integers
illustrates evaluation of integers as LONG s and
FLOAT s.
165
166
Section 7. Installation
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 .
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 the just previous CRBasic example
,
L is an integer. F1 and F2 are FLOATS .
The numeral 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.
7.6.3.16.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
Section 7. Installation 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.
Time
Binary Conditions of TRUE and FALSE
Condition
Control Port Trigger
CRBasic
Instruction(s) Used
TimeIntoInterval()
IfTime()
TimeIsBetween()
WaitDigTrig()
Memory Location of
Binary Result
Variable, System
Variable, System
Variable, System
System
Communications
Measurement Event
VoiceBeg()
ComPortIsActive()
PPPClose()
DataEvent()
System
Variable
Variable
System
167
168
Section 7. Installation
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. TABLE: Logical Expression Examples
demonstrate some logical expressions.
• IF
• AND
• OR
• NOT
• XOR
• IMP
• IIF
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.
Section 7. Installation
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.6.3.16.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.
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
169
170
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.6.3.17 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, 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.
Section 7. Installation
• 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.
• 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.
Data Process Abbreviations
Abbreviation
Tot
Avg
Max
Min
SMM
Std
MMT
No abbreviation
Process Name
Totalize
Average
Maximum
Minimum
Sample at Max or Min
Standard Deviation
Hst
Moment
Sample
Histogram 1
Histogram4D H4D
FFT
Cov
RFH
LCr
WVc
Med
ETsz
FFT
Covariance
Rainflow Histogram
Level Crossing
WindVector
Median
ET
RSo
TMx
TMn
Solar Radiation (from ET)
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
171
172
Section 7. Installation 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
Consult CRBasic Editor Help index topic DataTable access for complete information.
The DataTableInformation table also include this information. See Info Tables and Settings
7.6.3.18 Programming to Use Signatures
Signatures help assure system integrity and security. The following resources provide information on using signatures.
• Signature() instruction in Diagnostics
• RunSignature
• ProgSignature
• OSSignature
• Security — Overview
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.6.3.19 Functions (with a capital F)
A Function is a subroutine that returns only one value of any data type
Use a Function to create a custom CRBasic "Instruction." It is declared with
Function() . An example is a Function that returns a string containing the day of
Section 7. Installation the week, such as Monday or Friday . See CRBasic Editor Help topic
Function/EndFunction
7.6.4 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
Program and OS Compression Q and A
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
(p.
• Campbell Scientific mass storage device
or memory card
A good practice is to always retrieve data from the CR1000 before sending a program; otherwise, data may be lost.
Note See File Management
and the Campbell Scientific mass storage device or memory card documentation available at www.campbellsci.com
.
7.6.4.1 Preserving Data at Program Send
You can send CRBasic programs to the CR1000 in multiple ways. Depending on the way you choose, the CR1000 keeps or deletes data already stored in memory.
Regardless of the program-upload tool used, if any change occurs to the following data table structures, data are erased when a new program is sent:
• 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
The program sending command path options listed in table Program Send Options
That Reset Memory
reset CR1000 memory and erase data. To keep data, send programs using the File Control Send
command in datalogger support software
or the Compile > Compile, Save, Send command in CRBasic
173
Section 7. Installation
Editor. Compile > Compile, Save, Send displays the window shown in figure
CRBasic Editor Program Send File Control Window
before the program is sent. To keep data, select Run Now , Run On Power-up , and Preserve data if no table changed, then press 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.
Program Send Options That Reset Memory 1
Datalogger Support
Software
LoggerNet >
First Click
Connect >
Next Click
PC400
PC200W
>
>
Clock/Program >
Clock/Program >
Program Send
Send Program
Send Program
RTDAQ >
DevConfig >
Clock/Program >
Logger Control >
Send Program
Send Program
1 Reset memory and set CRBasic program attributes to Run Always
FIGURE 39: CRBasic Editor Program Send File Control window
174
7.7 Programming Resource Library
This library of notes and CRBasic code addresses a narrow selection of CR1000 applications.
7.7.1 Advanced Programming Techniques
7.7.1.1 Capturing Events
CRBasic example Capturing Events
demonstrates programming to output data to a data table at the occurrence of an event.
Section 7. Installation
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
'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.7.1.2 Conditional Output
CRBasic example Conditional Output
demonstrates conditionally sending data to a data table based on a trigger other than time.
175
176
Section 7. Installation
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
'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 is met
'because DataInterval instruction is not included in the table declaration
'after the DataTable 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.7.1.3 Groundwater Pump Test
CRBasic example Groundwater Pump Test
shows how to do the following:
• Write multiple-interval data to the same data table
• Use program control instructions outside the Scan() / NextScan structure
• Execute conditional code
• Use multiple sequential scans, each with a scan count
Section 7. Installation
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
177
178
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
Section 7. Installation
7.7.1.4 Miscellaneous Features
CRBasic example Miscellaneous Program Features
shows how to use several CRBasic features: data type, units, names, event counters, flags, data-output intervals, and control statements.
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
179
180
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"
Section 7. Installation
Scan (1,Sec,1,0)
'Measurements
'Battery Voltage
Battery (Batt_Volt)
'Wiring Panel Temperature
PanelTemp (PTemp_C,250)
'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
7.7.1.5 PulseCountReset Instruction
PulseCountReset is used in rare instances to force the reset or zeroing of CR1000 pulse accumulators. See Measurements — Overview
181
182
Section 7. Installation
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.7.1.6 Scaling Array
CRBasic example Scaling Array
how 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.
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
Section 7. Installation
Scan (5,Sec,1,0)
'Measure reference temperature
PanelTemp (PTemp_C,250)
'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.7.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. Adding signatures to stored data allows system administrators to track program changes and data quality. The following program signatures are available.
• text signature
• binary-runtime signature
• executable-code signatures
7.7.1.7.1 Text Signature
The text signature is the most-widely used. It is calculated from all text in a program including blank lines and comments. It is found in ProgSignature field of the Status table. See CRBasic example Program Signatures
7.7.1.7.2 Binary Runtime Signature
The binary runtime signature is calculated only from program code — not from comments or blank lines. See CRBasic example Program Signatures
7.7.1.7.3 Executable Code Signatures
Executable code signatures allow signatures to be calculated on discrete sections of code that resides between the BeginProg and EndProg instructions. See
CRBasic example Program Signatures
183
184
Section 7. Installation
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
'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.7.1.8 Use of Multiple Scans
CRBasic example Use of Multiple Scans
shows how to 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.
Section 7. Installation
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
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.7.2 Data Input: Loading Large Data Sets
Large data sets like look-up tables or tag numbers, can be loaded in the CR1000 for use by the CRBasic program. Do this by using the Data , DataLong , and
Read
instructions, as demonstrated in CRBasic example Loading Large Data Sets
185
186
Section 7. Installation
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.7.3 Data Input: Array-Assigned Expression
CRBasic provides for the following operations on one dimension of a multi-dimensional array:
• Initialize
• Transpose
• Copy
Section 7. Installation
• 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 that can be used by 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 even 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)
187
188
Section 7. Installation
• 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.
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
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
Section 7. Installation
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
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
189
190
Section 7. Installation
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.7.4 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 value (X
1
is the most recent value of the source variable and X
N-1
is the previous
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.
Section 7. Installation
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 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 (runningaverage frequency = 1 / time length of the running average).
Example:
Scan period = 1 ms,
N value = 4 (number of points to average),
Runningaverage duration = 4 ms
Runningaverage frequency = 1 / (running average duration = 250 Hz)
Inputsignal frequency = 100 Hz
Input frequency to running average (normal ized 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:
D elay 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
191
192
Section 7. Installation
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:
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.
Section 7. Installation
FIGURE 40: Running-Average Frequency Response
FIGURE 41: Running-Average Signal Attenuation
7.7.5 Data Output: Two Intervals in One Data Table
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.
'
'Allocate memory to a data table with two time intervals as is done with a conditional table,
'that is, rather than auto-allocate, set a fixed number of records.
193
194
Section 7. Installation
'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)),15000)
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
'Call output tables
CallTable TwoInt
NextScan
EndProg
Section 7. Installation
7.7.6 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.
FIGURE 42: Data from TrigVar Program
195
196
Section 7. Installation
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
7.7.7 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 four-byte integer format. To conserve final-data memory or comms 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)
Section 7. Installation
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 comms band width when transmitted.
CRBasic example 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
(p.
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 43: Alarms Toggled in Bit Shift Example
197
198
Section 7. Installation
FIGURE 44: Bool8 Data from Bit Shift Example (Numeric Monitor)
FIGURE 45: Bool8 Data from Bit Shift Example (PC Data File)
Section 7. Installation
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
'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
199
200
Section 7. Installation
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
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.7.8 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 storage 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.7.8.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 .
Section 7. Installation
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.
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
201
202
Section 7. Installation
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
'Program
BeginProg
Scan (1,Sec,0,0)
PanelTemp (PTempC,250)
MaxVar = FirstTable.PTempC_Max
TimeOfMaxVar = FirstTable.PTempC_TMx
CallTable FirstTable
CallTable SecondTable
NextScan
EndProg
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
Section 7. Installation
'Program
BeginProg
Scan (1,Sec,0,0)
RealTime (rTime)
For x = 1 To 7
rTime2(x) = rTime(x)
Next
CallTable SecondTable
NextScan
EndProg
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
203
204
Section 7. Installation
7.7.9 Data Output: 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.7.9.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. See table
WindVector() OutputOpt Options
Option
0
1
2
3
4
WindVector() OutputOpt Options
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.
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)
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.
Section 7. Installation
7.7.9.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 sub-interval is 0. With a sub-interval of 900 scans (15 minutes) the standard deviation is the root-mean-square average of the four sub-interval standard deviations. The last sub-interval is weighted if it does not contain the specified number of scans.
The EPA recommends hourly standard deviation of horizontal wind direction
(sigma theta) be computed from four fifteen-minute sub-intervals.
205
206
Section 7. Installation
7.7.9.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.7.9.2.2 Calculations
Input Sample Vectors
FIGURE 46: 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 data storage interval T, the sum of the sample vectors is described by a vector of magnitude U and direction Θu. If the input sample interval is t, the number of samples in data storage interval T is N = T / t . The mean vector magnitude is Ū =
U / N .
Scalar mean horizontal wind speed, S: where in the case of orthogonal sensors:
Mean Wind Vector
Section 7. Installation
Unit vector mean wind direction, 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.
Resultant mean horizontal wind speed, Ū:
207
208
Section 7. Installation
FIGURE 47: Mean Wind-Vector Graph where for polar sensors: or, in the case of orthogonal sensors:
Resultant mean wind direction, Θu:
Standard deviation of wind direction, σ (Θu), u sing Campbell Scientific algorithm:
The algorithm for σ (Θu) is developed by noting, as shown in the figure Standard
Deviation of Direction
that where
Section 7. Installation
FIGURE 48: Standard Deviation of Direction
FIGURE 49: 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;
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
209
210
Section 7. Installation 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).
7.7.10 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
• Data File Format Examples
• Data Storage Drives Table
The usual method for writing high-frequency time series data to memory cards, especially in high-speed measurement applications, is to use the TableFile() instruction with Option 64 . It supports 16 GB or smaller memory cards and permits smaller and variable file sizes.
7.7.10.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 3 detailed description of each parameter.
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 .
Section 7. Installation
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.7.10.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.
• Easy retrieval of closed files with File Control
utility, FTP, or e-mail.
7.7.10.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 Memory Card
is an example of a micromet application.
211
212
Section 7. Installation
Using TableFile() with Option 64 with Memory 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.7.10.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.
7.7.10.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 wri tten 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.
Section 7. Installation
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 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. Because of the way the FAT32 card format works, you can avoid long CR1000 compile times with a freshly formatted card by first formatting the new card on a PC, then copy a small file to the card from the PC, and then delete the file with the PC. When the small file is copied to the card, the
PC updates a sector on the card that which allows the CR1000 program to compile faster. This only needs to be done once when the card is formatted. If you have the CR1000 update the card sector, the first CR1000 program compile with the card can take as long as 30 minutes. After that, compile times will be normal.
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
213
214
Section 7. Installation
• 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.
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 data 3
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
. The exchange must take place anytime before the 45 minutes expire. If the
Section 7. Installation 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 DataTableInfo table.
7.7.11 Displaying Data: Custom Menus — Details
Related Topics:
• Custom Menus — Overview
• Data Displays: Custom Menus — Details
• 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 immediately after MenuItem() . If variable is declared As Boolean ,
215
216
Section 7. Installation
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
demonstrates how to program a custom menu to facilitates viewing data, entering notes, and controlling a device.
Following is a list of figures that show the organization of the custom menu.
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 50: Custom Menu Example —
Home Screen
FIGURE 51: Custom Menu Example —
View Data Window
Section 7. Installation
FIGURE 52: Custom Menu Example —
Make Notes Sub Menu
FIGURE 53: Custom Menu Example —
Predefined Notes Pick List
FIGURE 54: Custom Menu Example —
Free Entry Notes Window
217
218
Section 7. Installation
FIGURE 55: Custom Menu Example —
Accept / Clear Notes Window
FIGURE 56: Custom Menu Example —
Control Sub Menu
FIGURE 57: Custom Menu Example —
Control LED Pick List
Section 7. Installation
FIGURE 58: 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
'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
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
219
220
Section 7. Installation
'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
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
Section 7. Installation
'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
7.7.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
221
222
Section 7. Installation 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.
More detail is available in CRBasic Editor Help .
7.7.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.
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 See File Management in CR1000
Memory
7.7.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).
Section 7. Installation
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.7.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.7.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 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
. 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:
223
224
Section 7. Installation
FieldCal() Codes
Value Returned
-1
-2
-3
0
1
2
3
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)
4
5
6
Ready to calculate ( KnownVar holds the second of a two-point calibration)
Working (only applicable for two point calibrations)
Calibration complete
7.7.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.7.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.7.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.7.12.5 Field Calibration Examples
FieldCal() has the following calibration options:
• Zero
• Offset
• Two-point slope and offset
225
226
Section 7. Installation
• 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"
7.7.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.
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 .
Section 7. Installation
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-day-service zero calibration is complete. Calibrated RHOffset will equal
-5.2
%.
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
227
228
Section 7. Installation
'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
'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.7.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.
Section 7. Installation
Calibration Report for Salinity Sensor
CRBasic Variable
SimulatedSalinitySignal output
At Deployment
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 .
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.
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
229
230
Section 7. Installation
'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
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.7.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.
Section 7. Installation
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.
Calibration Report for Flow Meter
CRBasic Variable
SimulatedFlowSignal
KnownFlow
SimulatedFlowSignal
KnownFlow
FlowMultiplier
FlowOffset
At Deployment
300 mV
30
550
10
-0.0799
L/s
mV
L/s
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 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 .
231
232
Section 7. Installation 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
.
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
'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
Section 7. Installation
'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.7.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 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.
233
234
Section 7. Installation
Calibration Report for Water Content Sensor
CRBasic Variable
SimulatedWaterContentSignal
KnownWC
SimulatedWaterContentSignal
KnownWC
WCMultiplier
At Deployment
175 mV
10
700
35
0.0476
%
mV
%
%/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
.
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.
'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:
Section 7. Installation
' 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)
'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.7.12.5.5 FieldCal() Zero Basis (Opt 4) Example
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:
235
236
Section 7. Installation
AVW200-Series Two-Channel VSPECT Vibrating Wire Measurement Device
CR6 Measurement and Control Datalogger Operators Manual
7.7.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 (see Field
Calibration 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
7.7.12.6.1 FieldCalStrain() Shunt Calibration Concepts
1. Shunt calibration does not calibrate the strain gage itself.
2. Shunt calibration does compensate for long leads and non-linearity in the resistive bridge. Long leads reduce sensitivity because of voltage drop.
FieldCalStrain() uses the known value of the shunt resistor to adjust the gain
(multiplier / span) to compensate. The gain adjustment (S) is incorporated by
FieldCalStrain() with the manufacturer's gage factor (GF), becoming the adjusted gage factor (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.
Section 7. Installation
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 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.
7.7.12.6.2 FieldCalStrain() Shunt Calibration Example
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, substi tuting 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.
FIGURE 59: Quarter-Bridge Strain
Gage with RC Resistor Shunt
237
238
Section 7. Installation
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)
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
Section 7. Installation
7.7.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 60: Strain Gage Shunt
Calibration Start
FIGURE 61: Strain Gage Shunt
Calibration Finish
7.7.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
239
Section 7. Installation
FIGURE 62: Zero Procedure Start
FIGURE 63: Zero Procedure Finish
240
7.7.13 Measurement: Fast Analog Voltage
Measurement speed requirements vary widely. The following are examples:
• An agricultural weather station measures weather and soil sensors once every 10 seconds.
• A station that warns of rising water in a stream bed measures at 10 Hz.
• A station measuring mechanical stress measures at 1000 Hz.
• A station measuring the temperature of a grass fire measures at 93750
Hz.
TABLE: Maximum Measurement Speeds Using VoltSE()
lists maximum speeds at which single-ended voltage inputs can be measured using the VoltSE() instruction. Differential measurements are slower. That fact that you can program the CR1000 to measure at these speeds, however, does not mean necessarily that you should. The integrity of measurements begins to come into question when fN1 , which is the reciprocal of signal integration time, is larger than 15000, and when SettlingTime is less than 500 µs. While programming the CR1000 for fast measurements, you must balance the need for data integrity with the need for speed.
Section 7. Installation
VoltSE()
Maximum Measurement Speeds Using VoltSE()
Measurement Type
Fast Scan()
Maximum Speed on n Channels
100 Hz, n = 16
Cluster Burst 1,2
1000 Hz, n = 1
500 Hz, n =3
Dwell Burst 1,3 ≤ 1735 samples @ 2000 Hz, n = 1
1 Bursts are programmed episodes of rapid analog measurements that cannot be maintained continuously. Input channels can be single-ended SE terminals or differential H / L terminal pairs. Bursts require pipeline mode and may require additional Scan() buffers. Test specific applications thoroughly before deployment.
2 Cluster bursts loop through a series of channels, one measurement per channel, until the programmed loop count is complete.
3 Dwell bursts sit on one channel until the programmed measurement count is complete.
You can make fast measurements with the following instructions:
• Single-Ended Instrucitons: o TCSe() o BrHalf() o BrHalf3W() o BrHalf4W() o Therm107() o Therm108() o Therm109()
• Differential Instructions: o VoltDiff() o TCDiff() o BrFull() o BrFull6W()
To do this, use the same programming techniques demonstrated in the following example programs. Actual measurements speeds will vary.
241
242
Section 7. Installation
Fast Analog Voltage Measurement: Fast Scan()
'This program makes 100 Hz measurements of one single-ended channel. The
'following programming features are key to making this application work:
'--PipelineMode enabled
'--Measurement speed set with Scan() Interval=10 and Units=mSec
'-Scan() BufferOption increased to 5
PipeLineMode
Public FastContinuousSE(1)
DataTable (FastContinuousSEData,1,-1)
Sample (1,FastContinuousSE(),FP2)
EndTable
BeginProg
'Scan(Interval,Units,BufferOption,Count)
Scan (10,mSec,5,0)
'VoltSe(Dest,Reps,Range,SEChan,MeasOff,SettlingTime, Integ ,Mult,Offset)
VoltSe (FastContinuousSE(),1,mV2_5,1,False,100,100,1.0,0)
CallTable FastContinuousSEData
NextScan
EndProg
Section 7. Installation
Analog Voltage Measurement: Cluster Burst
'This program makes 500 measurements of two single-ended channels at 500 Hz.
'Sample pattern is 1,2,1,2 . Measurement cycle is repeated every 1 Sec. The following
'programming features are key to making this application work:
'--PipelingMode enabled.
'--Measurement speed set as follows:
' Scan() Interval=1, Units=Sec.
' SubScan() SubInterval= 2 , Units=mSec, and Count= 500 .
'--Scan() BufferOption increased to 5.
'--At this measurement speed, CR1000 processing is not fast enough to keep up with the
' sample rate. The result is a periodic skipped scan, which allows processing
' to catch up. To program for measurements without skipped scans, modify the
' measurement speed. For example.set Scan() Interval=3, Units=Sec, SubScan()
' SubInterval=3, Units=mSec, and Count=666.
PipeLineMode
Public ClusterBurstSE(2)
DataTable (ClusterBurstSEData,1,-1)
Sample (2,ClusterBurstSE(),FP2)
EndTable
BeginProg
'Scan(Interval,Units,BufferOption,Count)
Scan (1,Sec,5,0)
'SubScan(SubInterval,Units,Count)
SubScan (2,mSec,500)
'VoltSE(Dest,Reps,Range,SEChan,MeasOff,SettlingTime,Integ,Mult,Offset)
VoltSe (ClusterBurstSE(),2,mV2_5,1,False,100,100,1.0,0)
CallTable ClusterBurstSEData
NextSubScan
NextScan
EndProg
243
244
Section 7. Installation
Dwell Burst Measurement
'This program makes 1735 measurements of two single-ended channels at
'2000 Hz. Sample pattern is 1,1,1..., pause, 2,2,2..., pause.
'Measurement cycle is repeated every 2 Sec. The following programming features are
'key to making this application work:
'--PipelineMode.enabled.
'--Dash (-) placed before channel number.
'--Measurement count per channel set with VoltSE() Count= 1735 .
'--Measurement speed set with VoltSE() SampleInterval (µs)=500 .
'--Scan() BufferOption increased to 5.
'NOTES:
'--Sampling occurs at the beginning of the Scan() interval.
'--All measurements for one channel are placed in a single large variable array.
'--The large array is stored in a single long record in the data table.
'--The exact sampling interval is calculated as follows:
' SampleTime = 1.085069 * INT((SampleInterval / 1.085069) + 0.5)
'--At scan interval=2 s, CR1000 processing is not fast enough to keep up with the
' 93750 Hz measurements. The result is that the CR1000 skips every other scan to
' catch up. If no skipped scans is wanted more than maximum speed, make adjustments
' to the program. For example, set Scan() Interval=3.
PipeLineMode
Public DwellBurstSE1(1735)
Public DwellBurstSE2(1735)
DataTable (DwellBurstSEData,1,-1)
Sample (1735,DwellBurstSE1(),FP2)
Sample (1735,DwellBurstSE2(),FP2)
EndTable
BeginProg
'Scan(Interval,Units,BufferOption,Count)
Scan (2,Sec,5,0)
'VoltSE(Dest,Count,Range,-SEChan,MeasOff,SampleInterval (µs), Integ ,Mult,Offset)
VoltSe (DwellBurstSE1(),1735,mV2_5,-1,False,500,100,1.0,0)
VoltSe (DwellBurstSE2(),1735,mV2_5,-2,False,500,100,1.0,0)
CallTable DwellBurstSEData
NextScan
EndProg
200
Section 7. Installation
Voltage Measurement Instruction Parameters for Dwell Burst
Parameters Description
Destination
A variable array dimensioned to store all measurements from one input. For example, the declaration,
Dim FastTemp(500) dimensions array FastTemp() to store 500 measurements, which is one second of data at 500 Hz or one-half second of data at 1000 Hz.
The dimension can be any integer from 1 to 65535 .
Count (was Repetitions
Voltage Range
Single-Ended Channel
Differential Channel
)
The number of measurements to make on one channel. 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. Use any valid voltage range. However, ranges appended with C cause measurements to be slower.
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.
Measure Offset No change from standard measurement mode. For fastest rate, set to False.
Measurements per Excitation Must equal the value entered in Repetitions .
Reverse Ex No change from standard measurement mode. For fastest rate, set to False.
Rev Diff No change from standard measurement mode. For fastest rate, set to False.
SampleInterval (was
SettlingTime)
Integ
Multiplier
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.Arguments _50Hz and _60Hz are valid for ac rejection but are probably not very useful 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.
Offset
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.7.13.1 Tips — Fast Analog Voltage
• In the preceding examples, the CR1000 disables the auto self-calibration to reach the stated measurement speeds. Disabling auto self-calibration increases the risk of measurement errors, especially when the CR1000 is exposed to temperature swings.
245
246
Section 7. Installation
• When testing and troubleshooting fast measurements, the following
Status table registers may provide useful information: o o o o o
SkippedScan
MeasureTime
ProcessTime
MaxProcTime
BuffDepth
o
MaxBuffDepth
• When the number of Scan()/NextScan BufferOptions is exceeded, a skipped scan occurs, which means a measurement was missed.
• Bursts have a duty cycle less than 100%. Assuming no other measurement instructions are present in the program, each burst occurs at the beginning of the Scan() Interval . During the rest of the scan, the
CR1000 catches up on overhead tasks and processes data stored in buffers.
• If you wish to account for the time needed in the Scan()/NextScan
Interval , consider the following two points: o Status table MeasureTime
field reports the measurement time that occupies the Scan()/NextScan Interval . MeasureTime includes time needed to make measurements inside and outside
SubScan() / NextSubScan . o NextScan needs 100 µs to run
• One Scan() / NextScan buffer holds the raw measurements made in one main scan, inside and outside the sub-scan.
For example, one execution of the following code sequence stores 30000 measurements in one buffer:
'Scan(Interval, Units, BufferOption, Count)
Scan (40,Sec,3,0)
SubScan (2,mSec,10000)
VoltSe (Measurement(),3,mV5000,[U6]1,False,150,250,1.0,0)
NextSubScan
NextScan
• You can dwell burst more than one channel with the same program by adding a voltage measurement instruction for each channel to be measured. Channels will be measured in series.
• The following points apply to cluster burst measurements: o Measure smaller clusters for faster speeds. o SubScan() / NextSubScan introduces potential problems. These are discussed in SubScan() / Next Sub
Section 7. Installation o SubScan() / NextSubScan Counts cannot be larger than 65535 . o For SubScan() / NextSubScan to work, set Scan() / NextScan
Interval large enough for Counts to finish before the next
Scan() / NextScan Interval .
7.7.14 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.
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
247
248
Section 7. Installation
7.7.15 Serial I/O: 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
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.7.15.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 comms 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 transparent mode is active and ready to transmit SDI-12 commands and display responses.
FIGURE 64: Entering SDI-12 Transparent Mode
Section 7. Installation
7.7.15.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
249
250
Section 7. Installation
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!
atttnn<CR><LF> aCC1!
... aCC9!
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. atttn<CR><LF> Start Measurement 3
Start Measurement and Request
CRC 3
Additional Measurements 3
Additional Measurements and
Request CRC 3
Continuous Measurements
Continuous Measurements and
Request CRC
Start Verification 3 aM!
aMC!
aM1! ... aM9!
aMC1!
...
aMC9!
atttn<CR><LF> aR0!
... aR9!
aRC0!
... aRC9!
atttn<CR><LF> atttn<CR><LF> a<values><CR><LF> (formatted like the D commands) a<values><CRC><CR><LF> (formatted like the D commands) aV!
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.
Section 7. Installation
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:
?! 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
251
252
Section 7. Installation 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 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.
Section 7. Installation
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
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.7.15.2 SDI-12 Recorder Mode
The CR1000 can be programmed to act as an SDI-12 recording device or as an
SDI-12 sensor.
253
254
Section 7. Installation
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.
SDI-12 Commands for Programmed (SDIRecorder()) Mode
Command Name
Address Query
SDIRecorder()
SDICommand
Argument
?!
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.
Change Address
Concurrent Measurement
Ab!
Cv!, CCv!
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
Section 7. Installation
SDI-12 Commands for Programmed (SDIRecorder()) Mode
Command Name
SDIRecorder()
SDICommand
Argument
SDI-12 Command Sent
Sensor Response 1
CR1000 Response Notes
CR1000: else, issues aDv!
command(s)
Sensor: responds with data
CR1000: issues aCv!
command (to request data for next scan)
Alternate Concurrent
Measurement
Cv
(note — no ! termination) 2
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
Send Identification
Start Measurement
I!
M!, Mv!, MCv!
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
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 ttt 3 seconds (unless a service request is received). Issues aDv!
command(s). If a service request is received, issues aDv!
immediately.
Sensor: responds with data
Continuous Measurements
Start Verification
Rv!, RCv!
V!
CR1000: issues aRv!
command
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 .
7.7.15.2.1 Alternate Start Concurrent Measurement Command
Note aCv and aCv!
are different commands — aCv does not end with !
.
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!
.
255
256
Section 7. Installation
Consider an application wherein four SDI-12 temperature sensors need to be near-simultaneously 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)
SDI12Recorder (Temp(4),1,3,"M!",1.0,0)
NextScan
Section 7. Installation
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
257
258
Section 7. Installation
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
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
259
260
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
7.7.15.2.2 SDI-12 Extended Command Support
SDI12Recorder() sends any string enclosed in quotation marks in the Command parameter. If the command string is a non-standard SDI-12 command, any response is captured into the variable assigned to the Destination parameter, so long as that variable is declared As 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,
Section 7. Installation the program can be coded to parse the response and issue subsequent SDI-12 commands based on a customized evaluation of the response. See Serial I/O
Input Programming Basics
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.7.15.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
261
262
Section 7. Installation
123, the SDI-12 recorder will accept only a response of n = 1 when issuing an aMx!
command, or a response of nn = 12 when issuing an aCx!
command.
When programmed as an SDI-12 sensor, the 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
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
SDI-12 Sensor Configuration CRBasic Example — Results
Measurement
Command from
SDI-12 Recorder
Source Variables
Accessed from the
CR1000 acting as a
SDI-12 Sensor
Contents of
Source Variables
0M!
Source(1) , Source(2)
Temperature °C, battery voltage
0M0!
Same as 0M!
0M1!
0M2!
0M3!
0M4!
Source(3)
Source(5)
Source(7)
Source(9) ,
,
,
,
Source(4)
Source(6)
Source(8)
Source(10)
Temperature °F, battery voltage
Temperature °C, battery mV
Temperature °F, battery mV
Serial number, lithium battery voltage
7.7.15.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
263
Section 7. Installation power draw would be excessive. Spreading sensors over several SDI-12 terminals will help reduce power consumption.
Example Power Usage Profile for a Network of SDI-12 Probes
Time into
Measuremen t Process (s) Command
Sleep
1
2–14
1M!
15
16
17–29
30
Sleep
1D0!
All
Probes
Awake
Yes
Yes
Time
Out
Expires
Yes
Yes
Probe 1
(mA 1 )
0.25
120
120
120
66
66
66
0.25
1 Current use:
0.25 mA = sleep
66 mA = awake
120 mA = measuring
7.7.16 Compiling: Conditional Code
Probe 2
(mA 1 )
0.25
66
66
66
66
66
66
0.25
Probe 3
(mA 1 )
0.25
66
66
66
66
66
66
0.25
Probe 4
(mA 1 )
0.25
66
66
66
66
66
66
0.25
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.
Total mA
1
318
318
318
264
264
264
1
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
http://www.
).
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 dataloggers (except the CR200X) accept program files, or Include() instruction files, with .DLD extensions.
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>
264
Section 7. Installation
#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
For example, this logic allows a simple change of a constant to direct, which measurement instructions to include.
CRBasic Editor features a pre-compile option that enables the creation of a
CRBasic text file with only the desired conditional statements from a larger master program. This option can also be used at the pre-compiler command line by using -p <outfile name>. This feature allows the smallest size program file possible to be sent to the CR1000, which may help keep costs down over very expensive comms 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 ).
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."
265
266
Section 7. Installation
#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.
#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.7.17 Measurement: RTD, PRT, PT100, PT1000
Related Topics:
• CRBasic Editor Help for PRTCalc()
• Resistance Measurements — Details
This manual includes this discussion of PRTs because of the following:
• Many applications need the accuracy of a PRT.
• PRT procedures confuse many users.
• PRTs are not usually manufactured ready to use for most CR1000 PRT setups.
This section gives procedures and diagrams for many circuit setups. It also has relatively simplified examples of each circuit type and associated CRBasic programming.
Section 7. Installation
7.7.17.1 Measurement Theory (PRT)
RTDs (resistance temperature detectors) are resistive devices made of platinum, nickel, copper, or other material. Platinum RTDs, known as PRTs (platinum resistance thermometers) are very accurate temperature measurement sensors.
This discussion f ocuses on the 100 Ω PRT. Apply the following principles to other RTDs.
• A PRT element is a specialized resistor with two connection points.
Most PRTs are either 100 Ω or 1000 Ω. This number is the resistance the PRT has at 0 °C.
• The resistance of a PRT increases as it is warmed. Industrial standards define how PRTs respond to temperature; see PRT Callendar-Van Dusen
Coefficients
• There are many ways to measure a PRT with a CR1000 datalogger.
When using Vx terminals , the most direct route is to measure a four-wire PRT in a three-wire half bridge. Other ways to measure a
PRT are listed in TABLE: PRT Measurement Circuit Overview
• Better excitation accuracy results if the highest possible excitation is used. Better measurement resolution results if the voltage output range from the PRT spans the analog-input voltage range of the CR1000.
Better measurement accuracy occurs when the output signal can be kept as large as possible. Procedures in the following example balance these best practices.
• A feature of PRT measurements is the ratio RS/RS
PRT resistance now and RS
0
0
, where RS is the
is the PRT resistance at 0 °C. RS/RS
0 makes it easy to apply the results of an ice-bath calibration to a temperature measurement. For jobs that do not need veryhigh accuracy, skip the calibration and assume that PRT resistance at 0 °C is either 100
Ω or 1000 Ω.
267
268
Section 7. Installation
•
PRT Measurement Circuit Overview
Configuration Features
Voltage Excitation
Four-wire half-bridge (p. 270)
• High accuracy over long leads
• More input terminals: four per sensor
• Slower: four differential sub measurements per measurement
Three-wire half-bridge (p. 274)
Four-wire full-bridge (p. 278)
• Good accuracy over long leads.
• Fewer input terminals: two per sensor
• Faster: two single-ended sub measurements per measurement
• High resolution response to change
• More complicated to build
• Two input terminals per sensor
• Two differential sub measurements per measurement
Note
Best configuration
Costs less to build
• Best over short leads.
• Best resolution since the bridge balances at the temperature-range midpoint.
7.7.17.2 General Procedure (PRT)
Following is a general procedure for using a PRT:
1.
Build circuit.
2.
Wire circuit to the CR1000.
3.
Calculate excitation voltage.
4.
Calibrate PRT.
5.
Measure PRT and convert output to temperature.
Several procedures follow that step you through use of common resistive-bridge configurations to measure a 100 Ω PRT (a.k.a, PT100). Use the following data to help you understand the examples:
Procedure Data
• Units used in examples: mV (millivolts), mA (milliamperes), and mΩ
(milliohms)
• RTD type for examples: 100 Ω PRT (a.k.a, PT100), α = 0.00385
• Temperature measurement range for examples: –40 to 60 °C
• General forms of Callander-Van Dusen equations using CRBasic notation: o T = g * K^4 + h * K^3 + i * K^2 + j * K (temperatures < 0°C) o T = (SQRT(d * (RS/RS0) + e) - a) / f (temperature ≥ 0°C)
Section 7. Installation
°C mΩ
PT100 Temperature and ideal resistances (RS); α = 0.00385
1
RS
–40
–40
84270
RS
0
0
100000
1 Commonly available tables provide these resistance values.
RS
10
10
103900
RS
60
60
123240
CallandarVan Dusen Coefficients for PT100, α = 0.00385
Constants Coefficient a d
3.9083000E-03
-2.3100000E-06 e f
1.7584810E-05
-1.1550000E-06 i j g h
1.7909000E+00
-2.9236300E+00
9.1455000E+00
2.5581900E+02
Input Ranges (mV)
CR6 CR800/CR1000
± 5000 ± 5000
±
±
1000
200
± 2500
± 250
± 25
± 7.5
± 2.5
CR3000
± 5000
± 1000
± 200
± 50
± 20
Input Limits (mV)
CR6 CR800/CR1000
± 5000 ± 5000
CR3000
± 5000
269
Section 7. Installation
Excitation Ranges
CR6 CR800/CR1000
± 2500 mV ± 2500 mV
CR3000
± 5000 mV
± 2.000 mA n/a ± 2.500 mA
7.7.17.3
Example: 100 Ω PRT in Four
-Wire Half Bridge with Voltage
Excitation (PT100 / BrHalf4W() )
FIGURE 65: PT100 BrHalf4W() Four-Wire Half-Bridge Schematic
270
Procedure Data
BrHalf4W() Four-Wire Half-Bridge Equations
X = RS / Rf
RS = Rf • X
VX = (VS • (Rf + RS + R1) / RS)
Bridge Resistor Values (mΩ)
R1
10000000
Rf
100000
Procedure
1. Build circuit 1 : a. Use FIGURE: PT100 BrHalf4W() Four-Wire Half-Bridge Schematic
as a template.
Section 7. Installation b. Rf should approximately equal the resistance of the PT100 at 0 °C. Use a
1%, 10 ppm/°C resistor.
2. Wire circuit to datalogger:
Use FIGURE: PT100 BrHalf4W() Four-Wire Half-Bridge Schematic
as the wiring diagram.
3. Calculate excitation voltage 2 :
Use the following equation to calculate the best excitation voltage (VX) for the measurement range –40 to 60 °C. The equation reduces the absolute result by 1% to allow for resistor inaccuracy:
VX max
= (VS max
• (Rf + RS max
+ R1) / RS max
) • 0.99 where,
VS max
= 25 mV (maximum voltage in the ± 25 mV input range)
Rf = 100000 mΩ (100 Ω)
R1 = 10000000 mΩ (10 kΩ)
RS max
= 123240 mΩ (PT100 at 60 °C) 3 so,
VX max
= 2053 mV
4. Calibrate the PT100:
If the PRT accuracy specification is good enough, and you trust it, assume
RS
0
= 100000 mΩ. Otherwise, do the following procedure: a. Enter CRBasic EXAMPLE: PT100 BrHalf4W() Four-Wire Half-Bridge
Calibration
into the CR1000. It is already programmed with the excitation voltage from step 3. b. Place the PRT in an ice bath (0 °C). c. Measure the PRT. If you are doing a dry run, assume the result of
BrHalf4W() = X
0
= 0.01000.
d. Calculate RS
0
RS
0
= X
0
• Rf = 100000 mΩ
Wow! We are lucky to have a perfect PRT! In the real world, PRT resistance at 0 °C will probably la nd on either side of 100 Ω.
271
272
Section 7. Installation
5. Measure the sensor:
If you are doing a dry run, assume the temperature is 10 °C. a. Enter CRBasic EXAMPLE: PT100 BrHalf4W() Four-Wire Half-Bridge
Measurement
into the CR1000. It is already programmed with the excitation voltage from step 3 and RS
0
from step 4. b. Place PT100 in medium to measure. c. Measure with BrHalf4W() . If you are doing a dry run, assume the result of Resistance() = X
10
= 1.039.
d. Calculate RS
10
:
RS
10
= X
10
• Rf = 103900
6. Calculate RS
10
/RS
0
, K, and temperature: a. RS
10
/RS
0
= 1.039
b. K = (RS
10
/RS
0
)1 = 0.039
c. T = g * K^4 + h * K^3 + i * K^2 + j * K = 9.99 °C d. T = (SQRT(d * (RS
10
/RS
0
) + e) - a) / f = 9.99 °C
1
A Campbell Scientific terminal-input module (TIM) can be used to complete the resistive bridge circuit. Refer to the appendix Passive-Signal Conditioners — List
2
The magnitude of the excitation voltage does not matter in mathematical terms because the result of the measurement is a ratio rather than an absolute magnitude, but it does matter in terms of reducing the effect of electromagnetic noise and of losing of resolution. A maximum excitation helps drown out noise. A minimum input-voltage range helps preserve resolution.
3
Get this value from a PRT resistance-to-temperature table
Section 7. Installation
CRBasic Programs and Notes
PT100 BrHalf4W() Four-Wire Half-Bridge Calibration
'This program example demonstrates the calibration of a 100-ohm PRT (PT100) in a four-wire
'half bridge with voltage excitation. See adjacent procedure and schematic.
'Declare constants and variables:
Const Rf = 100000 'Value of bridge resistor
Public X 'Raw output from the bridge
Public RS0 'Calculated PT100 resistance at 0 °C
BeginProg
Scan (1,Sec,0,0)
....'Measure X:
'BrHalf4W(Dest,Reps,Range1,Range2,DiffChan,ExChan,MeasPEx,ExmV,RevEx,RevDiff,
' SettlingTime,Integ,Mult,Offset)
BrHalf4W (X,1,mV25,mV25,1,Vx1,1,2053,True,True,0,250,1,0)
'Calculate RS0:
RS0 = X * Rf
NextScan
EndProg
PT100 BrHalf4W() Four-Wire Half-Bridge Measurement
'This program example demonstrates the measurement of a 100-ohm PRT in a four-wire
'half bridge using current excitation. See previous procedure and schematic.
'Declare constants and variables:
Const Rf = 100000 'Value of bridge resistor
Const RS0 = 100000 'Resistance of PT100 at 0 °C from calibration program
Public X 'Raw output from the bridge
Public RS 'Calculated PT100 resistance
Public RS_RS0 'Calculated ratio of RS/RS0
Public DegC 'Calculated temperature
BeginProg
Scan (1,Sec,0,0)
....'Measure X:
'BrHalf4W(Dest,Reps,Range1,Range2,DiffChan,ExChan,MeasPEx,ExmV,RevEx,RevDiff,
' SettlingTime,Integ,Mult,Offset)
BrHalf4W (X,1,mV25,mV25,1,Vx1,1,2053,True,True,0,250,1,0)
'Calculate RS and RS/RS0:
RS = X * Rf
RS_RS0 = RS/RS0
....'Calculate temperature from RS_RS0:
'PRTCalc(Dest,Reps,Source,PRTType,Mult,Offset)
PRTCalc (DegC,1,RS_RS0,1,1.0,0)
NextScan
EndProg
273
274
Section 7. Installation
Notes
• Why use four-wire half-bridge?
Use a four-wire half-bridge when lead resistance is more than a few thousandths of an ohm, such as occurs with long lead lengths.
• Why use 10 kΩ series resistor?
Referring to figure PT100 BrHalf4W() Four-Wire Half-Bridge Schematic
(p.
the 10 kΩ series resistor allows the use of a higher-excitation voltage and a low analog voltage input range.
• Why use high excitation and low range?
High excitation and low range minimize the effects of signal noise.
• Why use a bridge resistor near value of PT100?
By using a bridge resistor (Rf) that is close in value to that of the PT100
(RS), the differential measurement of V2 (voltage drop across PRT) can be made on the same range as the differential measurement of V1 (voltage drop across Rf). Using the same range eliminates range translation errors that can arise from variances in the 0.01% range translation resistors internal to the
CR1000.
7.7.17.4
Example: 100 Ω PRT in Three
-Wire Half Bridge with Voltage
Excitation (PT100 / BrHalf3W() )
FIGURE 66: PT100 BrHalf3W() Three-Wire Half-Bridge Schematic
Section 7. Installation
Procedure Information
BrHalf3W() Three-Wire Half-Bridge Equations
X = RS / Rf
RS = Rf • X
VX = VS/(RS/(Rf + RS))
Bridge Resistor Values (mΩ)
Rf
100000
Procedure
1. Build circuit 1 : a. Use FIGURE: PT100 BrHalf3W() Three-Wire Half-Bridge Schematic
(p.
as a template. b. For Rf, choose a 1%, 10 ppm/°C, 10000000 mΩ (10 kΩ resistor).
2. Wire circuit to datalogger:
Use FIGURE: PT100 BrHalf3W() Three-Wire Half-Bridge Schematic
as the wiring diagram.
3. Calculate excitation voltage:
Use the following equation to calculate the best excitation voltage (VX) for the measurement range of –40 to 60 °C. The equation reduces the absolute result by 1% to allow for resistor inaccuracy:
VX max
= VS max
/ (RS max
/ (Rf + RS max
)) • 0.99 where,
VS max
= 25 mV (maximum voltage in the ± 25 input range)
Rf = 10000000 mΩ
RS max
= 123240 mΩ (PT00 at 60 °C) 2 so,
VX max
= 1626420334066 mV
275
276
Section 7. Installation
4. Calibrate the PT100:
If the PRT accuracy specification is good enough, and you trust it, assume
RS
0
= 100000 mΩ. Otherwise, do the following procedure: a. Enter CRBasic EXAMPLE: PT100 BrHalf3W() Three-Wire Half-Bridge
Calibration
into the CR1000. It is already programmed with the excitation voltage from step 3. b. Place the PRT in an ice bath (0 °C). c. Measure the PRT. If you are doing a dry run, assume the result of
BrHalf3W() = X
0
. = 0.01000
d. Calculate RS
0
RS
0
= X
0
• Rf = 100000 mΩ
Wow! We are lucky to have a perfect PRT! In the real world, PRT resistance at 0 °C will probably land on either side of 100 Ω.
5. Measure the sensor:
If you are doing a dry run, assume the temperature is 10 °C. a. Enter CRBasic EXAMPLE: PT100 BrHalf3W() Three-Wire Half-Bridge
Measurement
into the CR1000. It is already programmed with the excitation voltage from step 3 and RS
0
from step 4. b. Place PT100 in medium to measure. c. Measure with BrHalf3W() . If you are doing a dry run, assume the result of BrHalf3W() = X
0
= 0.01039.
d. Calculate RS
10
:
RS
10
= X
10
• Rf = 103900
6. Calculate RS
10
/RS
0
, K, and temperature: a. RS
10
/RS
0
= 1.039
b. K = (RS
10
/RS
0
)1 = 0.039
c. T = g * K^4 + h * K^3 + i * K^2 + j * K = 9.99 °C d. T = (SQRT(d * (RS
10
/RS
0
) + e) - a) / f = 9.99 °C
1
A Campbell Scientific terminal-input module (TIM) can be used to complete the resistive bridge circuit. Refer to the appendix Passive-Signal Conditioners — List
4
Get this value from a PRT-resistance-to-temperature table
Section 7. Installation
CRBasic Programs and Notes
PT100 BrHalf3W() Three-Wire Half-Bridge Calibration
'This program example demonstrates the calibration of a 100-ohm PRT (PT100) in a three-wire
'half bridge with voltage excitation. See previous procedure and schematic.
'Declare constants and variables:
Const Rf = 10000000 'Value of bridge resistor
Public X 'Raw output from the bridge
Public RS0 'Calculated PT100 resistance at 0 °C
BeginProg
Scan (1,Sec,0,0)
....'Measure X:
'BrHalf3W(Dest,Reps,Range,SEChan,ExChan,MeasPEx,ExmV,RevEx,SettlingTime,
' Integ,Mult,Offset)
BrHalf3W (X,1,mV25,1,Vx1,1,2033,True,0,250,1,0)
'Calculate RS0:
RS0 = Rf * X
NextScan
EndProg
PT100 BrHalf3W() Three-Wire Half-Bridge Measurement
'This program example demonstrates the measurement of a 100-ohm PRT (PT100) in a three-wire
'half bridge with voltage excitation. See adjacent procedure and schematic.
'Declare constants and variables:
Const Rf = 10000000 'Value of bridge resistor
Const RS0 = 100000 'Resistance of PT100 at 0 °C from calibration program
Public X 'Raw output from the bridge
Public RS 'Calculated PT100 resistance
Public RS_RS0 'Calculated ratio RS/RS0
Public DegC 'Calculated temperature
BeginProg
Scan (1,Sec,0,0)
....'Measure X:
'BrHalf3W(Dest,Reps,Range,SEChan,ExChan,MeasPEx,ExmV,RevEx,SettlingTime,
' Integ ,Mult,Offset)
BrHalf3W (X,1,mV25,1,Vx1,1,2033,True,0,250,1,0)
'Calculate RS and RS_RS0:
RS = X * Rf
RS_RS0 = RS/RS0
....'Calculate temperature from RS_RS0:
'PRTCalc(Dest,Reps,Source,PRTType,Mult,Offset)
PRTCalc (DegC,1,RS_RS0,1,1.0,0)
NextScan
EndProg
277
Section 7. Installation
Notes
• 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 (see FIGURE: PT100 BrHalf3W() Three-Wire Half-Bridge
Schematic
. The maximum difference expected in wire resistance is 2%, but is more likely to be on the order of 1%.
• The average resistance of 22 AWG wire is 16.5 Ω per 1000 feet, which would give 500 ft lead wires (for example) a nominal resistance of 8.3 Ω.
Two percent of 8.3 Ω is 0.17 Ω. Assuming that the greater resistance is in wire b , the resistance measured for the PRT in the ice bath (RS0) is
100.17 Ω, and the resistance at 40 °C (RS) is 115.71 Ω.
• At 40 °C, because of the error from wire b , the measured ratio RS/RS0 is
1.1551 while the ratio without the error would be 115.54/100 = 1.1554.
As a result, the temperature computed by PRTCalc() from the ratio with the error is about 0.43 °C higher than the temperature measured without the error from wire b . This source of error does not exist in a four-wire half-bridge configuration.
7.7.17.5
Example: 100 Ω PRT in Four
-Wire Full Bridge with Voltage
Excitation (PT100 / BrFull() )
FIGURE 67: PT100 BrFull() Four-Wire Full-Bridge Schematic
278
Procedure
1. Build circuit 1 : a. Use FIGURE: PT100 BrFull() Four-Wire Full-Bridge Schematic
as a template. b. Choose a 1%, 10 ppm/°C, 5000000 Ω (5 kΩ) resistors for R1 and R4 c. Balance the bridge. i. Find the midpoint of the temperature range. The range of –40 to 60
°C is selected for this procedure, so the midpoint is 10 °C.
Section 7. Installation ii. Select a 1% resistor for R2 with a resistance that is approximately equal to the resistance of the PRT at 10 °C. See Procedure Information
(PT100 BrFull() Full Bridg e). Since a 103.9 Ω resistor is hard to find, use a 100 Ω resistor. It is close enough. Use 5 ppm/°C resistors.
Frequently, all the resistors in a full bridge are submerged in the medium to be measured, so they may see large temperature changes. 5 ppm resistors are more thermally stable than 10 ppm resistors.
2. Wire circuit to datalogger:
Use FIGURE: PT100 BrFull() Four-Wire Full Bridge Schematic
as the wiring diagram.
3. Calculate excitation voltage:
Use the following equation to calculate the best excitation voltage (VX) for the measurement range –40 to 60 °C. The equation reduces the absolute result by 1% to allow for resistor inaccuracy:
VX max
= (VS max
/ ((RS max
/ (RS max
+ R4)) – (R2 / R1 + R2))) • 0.99 where,
VS max
= 25 mV (maximum voltage in the ± 25 input range)
R1 = 5000000 mΩ (5 kΩ)
R2 = 100000 mΩ (100 Ω)
R4 = 5000000 mΩ (5 kΩ)
RS max
= 123240 mΩ (PT100 at 60 °C) 2 so,
VX max
= 44972562111243 mV
4. Calibrate the PT100:
If the PRT accuracy specification is good enough, and you trust it, assume
RS
0
= 100000 mΩ. Otherwise, do the following procedure: a. Enter
279
280
Section 7. Installation
PT100 BrFull() Four-Wire Full-Bridge Calibration
'This program example demonstrates the calibration of a 100-ohm PRT (PT100) in a four-wire
'full bridge with voltage excitation. See previous procedure and schematic.
'
'Declare constants and variables:
Const R1 = 5000000 'Value of R1 bridge resistor
Const R2 = 120000 'Value of R2 bridge resistor
Const R4 = 5000000 'Value of R4 bridge resistor
Public X1 'Raw output from the bridge
Public X2 'Calculated intermediate value
Public RS0 'Calculated PT100 resistance at 0 °C
BeginProg
Scan (1,Sec,0,0)
'Measure X1
'BrFull(Dest,Reps,Range,DiffChan,ExChan,MeasPEx,ExmV,RevEx,RevDiff,SettlingTime,
' Integ ,Mult,Offset)
BrFull (X1,1,mV25,1,Vx1,1,2500,True,True,0,250,1,0)
'Calculate X2:
X2 = (X1/1000) + (R2/(R1+R2)
'Calculate RS0:
RS0 = (R4*X2) / (1-X2)
NextScan
EndProg
into the CR1000. It is already programmed with the excitation voltage from step 3. b. Place the PRT in an ice bath (0 °C). c. Measure the PRT. If you are doing a dry run, assume the result of
BrFull() = X
0
= 0.
d. Calculate RS
0
X2
0
= (X
0
/ 1000) + (R2 / (R1 + R2) = 0.01961
RS
0
= (R4 • X2
0
) / (1 – X2
0
) = 100000 mΩ
Wow! We are lucky to have a perfect PRT! In the real world, PRT resistance at 0 °C will probably land on either side of 100 Ω.
5. Measure the sensor:
If you are doing a dry run, assume the temperature is 10 °C. a. Enter CRBasic EXAMPLE: PT100 BrFull() Four-Wire Full-Bridge
Measurement
into the CR1000. It is already programmed with the excitation voltage from step 3 and RS
0
from step 4. b. Place PT100 in medium to measure.
Section 7. Installation c. Measure with BrFull() . If you are doing a dry run, assume the result of
Resistance() = X
10
= 0.7491.
d. Calculate RS
10
:
X2
10
= (X
10
/ 1000) + (R2 / (R1 + R2) = 0.02036
RS
10
= (R4 • X2
10
) / (1 – X2
10
) = 103900
6. Calculate RS
10
/RS
0
, K, and temperature: a. RS
10
/RS
0
= 1.039
b. K = (RS
10
/RS
0
)1 = 0.039
c. T = g * K^4 + h * K^3 + i * K^2 + j * K = 9.99 °C d. T = (SQRT(d * (RS
10
/RS
0
) + e) - a) / f = 9.99 °C
1
A Campbell Scientific terminal-input module (TIM) can be used to complete the resistive bridge circuit. Refer to the appendix Passive-Signal Conditioners — List
4
Get this value from a PRT-resistance-to-temperature table
CRBasic Programs and Notes
PT100 BrFull() Four-Wire Full-Bridge Calibration
'This program example demonstrates the calibration of a 100-ohm PRT (PT100) in a four-wire
'full bridge with voltage excitation. See previous procedure and schematic.
'
'Declare constants and variables:
Const R1 = 5000000 'Value of R1 bridge resistor
Const R2 = 120000 'Value of R2 bridge resistor
Const R4 = 5000000 'Value of R4 bridge resistor
Public X1 'Raw output from the bridge
Public X2 'Calculated intermediate value
Public RS0 'Calculated PT100 resistance at 0 °C
BeginProg
Scan (1,Sec,0,0)
'Measure X1
'BrFull(Dest,Reps,Range,DiffChan,ExChan,MeasPEx,ExmV,RevEx,RevDiff,SettlingTime,
' Integ ,Mult,Offset)
BrFull (X1,1,mV25,1,Vx1,1,2500,True,True,0,250,1,0)
'Calculate X2:
X2 = (X1/1000) + (R2/(R1+R2)
'Calculate RS0:
RS0 = (R4*X2) / (1-X2)
NextScan
EndProg
281
282
Section 7. Installation
PT100 BrFull() Four-Wire Full-Bridge Measurement
'This program example demonstrates the measurement of a 100-ohm PRT (PT100) in a four-wire
'full bridge with voltage excitation. See previous procedure and schematic.
'
'Declare constants and variables:
Const R1 = 5000000 'Value of R1 bridge resistor
Const R2 = 120000 'Value of R2 bridge resistor
Const R4 = 5000000 'Value of R4 bridge resistor
Const RS0 = 100000 'Resistance of PT100 at 0 °C from calibration program
Public X1 'Raw output from bridge
Public X2 'Calculated intermediate value
Public RS 'Calculated PT100 resistance
Public RS_RS0 'Calculated ratio RS/RS0
Public DegC 'Calculated temperature of PT100
BeginProg
Scan (1,Sec,0,0)
'Measure X
'BrFull(Dest,Reps,Range,DiffChan,ExChan,MeasPEx,ExmV,RevEx,RevDiff,SettlingTime,
' Integ ,Mult,Offset)
BrFull (X1,1,mV25,1,Vx1,1,2500,True,True,0,250,1,0)
'Calculate X2
X2 = (X1/1000) + (R2/(R1+R2)
'Calculate RS and RS_RS0
RS = (R4*X2) / (1-X2)
RS_RS0 = RS/RS0
....'Calculate temperature from RS_RS0:
'PRTCalc(Dest,Reps,Source,PRTType,Mult,Offset)
PRTCalc (DegC,1,RS_RS0,1,1.0,0)
NextScan
EndProg
Notes
The following relationships are used in, or are related to, the previous procedure.
Maximum Excitation Voltage
Used:
V1
@maxT
= maximum voltage in the CR1000 analog voltage input range
VX
MAX
= V1
@maxT
/((R3
@maxT
/(R3
@maxT
+R4)) – (R2/(R1+R2)))
Related:
V1
@maxT
= VX*((R3
@maxT
/(R3
@maxT
+R4)) – (R2/(R1+R2)))
Section 7. Installation
Calibrate PRT
Used:
X
CAL
= (1000*(V1
CAL
/VX)), where (1000*(V1
CAL
/VX)) is the output of
BrFull() with Mult = 1, Offset = 0
X3
CAL
= (X
CAL
*0.001) + (R2/(R1+R2))
Related:
V1
CAL
= VX*((R3
CAL
/(R3
CAL
+R4)) – (R2/(R1+R2)))
Slope, Offset, and Xp
M = 0.001
B = (R2/(R1+R2))
Xp = ((1000*(V1/VX))*M+B
Rs/R0, K, and temperature
Rs/R0 = –(R4/((R4*X3
CAL
)/(1–X3
CAL
)))*(Xp/(Xp – 1))
K = (Rs/R0) –1
T = (SQRT(d * (R/R0) + e) – a) / f (see PRT Calculation Standards for coefficients) or
T = g * K^4 + h * K^3 + I * K^2 + j * K (see PRT Calculation Standards for coefficients)
Resistance of the PRT (R3) :
R3 = (R4 • X3)/(1 – X3)
X3 = (X / 1000) + (R2/(R1 + R2))
Measurement resolution:
There is a change of approximately 2 mV from the output at 40 °C to the output at 51 °C, or 200 µV / °C. With a resolution of 0.33 µV on the ±25 mV range, this means that the temperature resolution is 0.0009 °C.
7.7.17.6 PRT Callendar-Van Dusen Coefficients
As shown in the preceding PRT measurement examples, use the PRTCalc() instruction in the CRBasic program to process PRT resistance measurements.
283
284
Section 7. Installation
NOTE PRT() (not PRTCalc() ) is obsolete.
PRTCalc() uses the following inverse Callendar-Van Dusen equations to calculate temperature from resistance.
For temperatures <0 °C:
T = g • K • j + K 2 • i + K 3 • h + K 4 , where K = R
S
/R
0
– 1 (Eq. 1)
For temperatures ≥0 °C:
T = (sqrt(d • R
S
/R
0
+ e) – a) / f (Eq. 2)
Eq.1 conforms to US ASTM E1137-04 standard for conversion of resistance to temperature. For temperatures 0 to 650 °C, it introduces <±0.0005 °C error to the measurement. The source of the error is rounding errors in CR1000 math.
Eq. 2 is derived from US ASTM E1137-04 and conforms to other industry standards. For temperatures –200 to 0 °C, it introduces < ±0.003 °C error to the measurement.
Eq. 1 and Eq. 2 yield approximations of the true linearity of a PRT. The approximation error can be as high as several hundredths of a degree Celsius at different points in the temperature range, and it varies from sensor to sensor.
Individual sensors also have errors relative to the ASTM E1137-04 standard.
These errors can be as much as ±0.3 °C at 0 °C and increasing away from 0 °C.
Purchasing high quality PRTs will minimize this error.
The best accuracy comes from calibrated sensors over the range of use.
Calibration factors are applied to one or more of the following PRTCalc() parameters:
• Source
• Multiplier
• Offset
See the calibration sections in the previous PRT procedures for more information.
The following tables show sets of a, d, e, f, g, h, i, and j coefficients that are used in the Eqs. 1 and 2, depending on the PRTType code entered in PRTCalc() .
Coefficients are rounded to the seventh significant digit to match CR1000 math resolution.
PRTType codes depend on the alpha value of the PRT, which is determined and published by the PRT manufacturer.
Section 7. Installation
PRTCalc() PRTType = 1 , α = 0.00385
1
Constants a d e f g h i
Coefficient
3.9083000E-03
-2.3100000E-06
1.7584810E-05
-1.1550000E-06
1.7909000E+00
-2.9236300E+00
9.1455000E+00 j 2.5581900E+02
1 Compliant with the following standards: IEC 60751:2008 (IEC 751), ASTM
E1137-04, JIS 1604:1997, EN 60751, DIN43760, BS1904, and others
(reference IEC 60751 and ASTM E1137), α = 0.00385
PRTCalc() PRTType = 2 , α = 0.00392
1
Constant a d e f g h i
Coefficient
3.9786300E-03
-2.3452400E-06
1.8174740E-05
-1.1726200E-06
1.7043690E+00
-2.7795010E+00
8.8078440E+00 j 2.5129740E+02
1 US Industrial Standard, α = 0.00392 (Reference: Logan Enterprises)
PRTCalc() PRTType = 3 , α = 0.00391
1
Constant a d e f
Coefficient
3.9690000E-03
-2.3364000E-06
1.8089360E-05
-1.1682000E-06
285
286
Section 7. Installation
PRTCalc() PRTType = 3 , α = 0.00391
1 g h i
1.7010560E+00
-2.6953500E+00
8.8564290E+00 j 2.5190880E+02
1 US Industrial Standard, α = 0.00391 (Reference: OMIL R84 (2003))
PRTCalc() PRTType = 4 , α = 0.003916
1
Constant a d e f g h i
Coefficient
3.9739000E-03
-2.3480000E-06
1.8139880E-05
-1.1740000E-06
1.7297410E+00
-2.8905090E+00
8.8326690E+00 j 2.5159480E+02
1 Old Japanese Standard, α = 0.003916 (Reference: JIS C 1604:1981, National
Instruments)
PRTCalc() PRTType = 5 , α = 0.00375
1
Constant a d
Coefficient
3.8100000E-03
-2.4080000E-06 e f g
1.6924100E-05
-1.2040000E-06
2.1790930E+00 h i j
-5.4315860E+00
9.9196550E+00
2.6238290E+02
1 Honeywell Industrial Sensors, α = 0.00375 (Reference: Honeywell)
Section 7. Installation
PRTCalc() PRTType = 6 , α = 0.003926
1
Constant a d e f g h i j
Coefficient
3.9848000E-03
-2.3480000E-06
1.8226630E-05
-1.1740000E-06
1.6319630E+00
-2.4709290E+00
8.8283240E+00
2.5091300E+02
1 Standard ITS90 SPRT, α = 0.003926 (Reference: Minco / Instrunet)
7.7.17.7 Self-Heating and Resolution
Programming the CR1000 to make a PRT measurement requires a judgment call.
To maximize measurement resolution, the excitation voltage must be maximized.
However, to minimize self-heating of the PRT element, excitation voltage must be minimized. Keeping the voltage drop across the PRT to ≤2 5 mV addresses both concerns since self-heating is normally less than 0.001°C in still air. To maximize the measurement resolution, optimize the excitation voltage (Vx) such that the voltage drop across the PRT spans, but does not exceed, the voltage input range.
7.7.18 Serial I/O: Capturing Serial Data
The CR1000 communicates with smart sensors that deliver measurement data through serial data protocols.
Read More See Comms and Data Retrieval
for background on
CR1000 serial communications.
7.7.18.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.
287
288
Section 7. Installation
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.
Byte
Received
00110010
1100010
00101011
00001101
00000001
ASCII / ANSI Equivalents
ASCII
Character
Displayed
2 b
+ cr
☺
Decimal
ASCII
Code
50
98
43
13
1
Hex
ASCII
Code
32
62
2b d
1
Read More See ASCII / ANSI Table 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 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.7.18.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 the following apply:
Section 7. Installation
Connect sensor RX (receive, pin 2) to a U or C terminal set up for Tx (C1, C3,
C5, C7).
• Connect sensor TX (transmit, pin 3) to a U or C terminal set up 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.
CR1000 Serial Ports
Serial Port Voltage Level
RS-232 (9 pin)
CS I/O (9 pin)
COM1 ( C1 – C2 )
COM2 ( C3 – C4 )
COM3 ( C5 – C6 )
COM4 ( C7 – C8 )
C1
C3
C5
C7
C1, C2, C3
RS-232
TTL
TTL
TTL
TTL
TTL
5 Vdc
5 Vdc
5 Vdc
5 Vdc
5 Vdc
Logic
Full-duplex asynchronous
RS-232
Full-duplex asynchronous
RS-232
Full-duplex asynchronous
RS-232/TTL
Full-duplex asynchronous
RS-232/TTL
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.7.18.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.
289
290
Section 7. Installation
Read More See SDI-12 Sensor Support — Details
PakBus
Comms — Overview
DNP3 — Details
and Modbus — Details
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.7.18.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 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.
Section 7. Installation
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
(p.
Term: lf
L ine f eed. 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 Endianness
Term: LSB
Least significant bit (the trailing bit). See the 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.
Term: MSB
M ost s ignificant b it (the leading bit). See 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
291
292
Section 7. Installation
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.7.18.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 comms.
• 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 argument ( 0 or -nnnn ) and ensure this option supports PakBus specific application.
® telemetry operations, use an auto-baud rate
® in the
• BufferSize — The buffer holds received data until it is removed.
SerialIn() , SerialInRecord() , and SerialInBlock() instructions are used to read data from the buffer to variables. Once data are in variables, string manipulation instructions are used to format and parse the data.
Section 7. Installation
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.7.18.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).
293
294
Section 7. Installation
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.
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.7.18.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.
Section 7. Installation 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).
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.
295
296
Section 7. Installation
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.7.18.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.
3. Output string via the serial port ( SerialOut() or SerialOutBlock() command). o Example:
SerialOut (Com1,SerialOutString,"",0,100)
Section 7. Installation 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.7.18.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 ex ample, 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
297
298
Section 7. Installation
7.7.18.5.5 Serial I/O Memory Considerations
Several points regarding memory should be considered when receiving and processing serial data.
• Serial buffer: The serial port buffer, which is declared in 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 comms bandwidth. When public variables are viewed in software, the entire Public table is transferred at the update interval. If the Public table is large, comms 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.7.18.5.6 Serial I/O Example I
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
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
'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
299
300
Section 7. Installation
7.7.18.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.7.18.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 68: HyperTerminal New
Connection Description
Section 7. Installation
FIGURE 69: HyperTerminal Connect-To
Settings
FIGURE 70: HyperTerminal COM Port Settings Tab:
Click File | Properties | Settings | ASCII Setup... and set as shown.
301
Section 7. Installation
FIGURE 71: HyperTerminal ASCII
Setup
7.7.18.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 72: HyperTerminal Send-Text
File Example
302
To send the file, click Transfer | Send Text File | Browse for file, then click OK .
7.7.18.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.
Section 7. Installation
FIGURE 73: HyperTerminal Text-Capture File Example
Engage text capture by clicking on Transfer | Capture Text | Browse , select the file, and then click OK .
7.7.18.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 data acquisition 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 data-output signal.
® communication. This will produce some "noise" on the intended
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.
303
304
Section 7. Installation
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
Case Is < 214
Month = 7
Date = DOY + -182
Case Is < 245
Month = 8
Date = DOY + -213
Case Is < 275
Month = 9
Date = DOY + -244
Section 7. Installation
305
306
Section 7. Installation
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
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
Section 7. Installation
'//////////////////////////// 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
'/////////////////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)
307
308
Section 7. Installation
'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.7.18.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
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
Section 7. Installation
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?
309
310
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 time-stamped 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
Section 7. Installation 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 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.7.19 String Operations
String operations are performed using CRBasic string functions.
7.7.19.1 String Operators
The table String Operators
lists and describes available string operators.
String operators are case sensitive.
Operator
&
+
-
String Operators
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
311
312
Section 7. Installation
< ,
Operator
String Operators
> , <>
>= ,
,
=
<= ,
Description
"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.7.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
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
+ operation is performed. When working with strings, exclusive use of the & operator ensures that no string value will be converted to an integer.
String Concatenation Examples
Expression Comments
Str(1) = 5.4 + 3 + " Volts"
Add floats, concatenate strings
Str(2) = 5.4 & 3 & " Volts"
Lng(1) = "123"
Lng(2) = 1+2+"3"
Concatenate floats and strings
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
Section 7. Installation
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
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
313
314
Section 7. Installation
'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.7.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.
String NULL Character Examples
Expression
LongVar(5) = "#"-""
LongVar(6) = StrComp("#","")
Comments Resul t
Subtract NULL, ASCII code results
Also subtracts NULL
35
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" 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"
Section 7. Installation
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.7.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.7.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.
315
316
Section 7. Installation
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.
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
Section 7. Installation
317
8. Operation
Related Topics:
• 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.
Some sensors require precision excitation or a source of power. See
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.
319
320
Section 8. Operation
Time-stamp skew is not a problem with most applications because,
• program execution times are usually short, so time stamp skew is only a few milliseconds. Most measurement requirements allow for a few milliseconds of skew.
• data processed into averages, maxima, minima, 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 topics concerning data table declarations in CRBasic Editor Help for more information.
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
Section 8. Operation
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
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 configured 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.
321
322
Section 8. Operation
8.1.2.1 Voltage Measurement Quality
Read More Consult the following technical papers at 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
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.
Integration
Section 8. Operation
• 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.
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 copper-constantan thermocouple being used to measure soil temperature is not insulated, and the potential of earth ground is 1 mV greater at the sensor than at the point where the 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.
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
323
324
Section 8. Operation
• 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.
Note See White Paper "Preventing and Attacking Measurement Noise
Problems" at www.campbellsci.com
.
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.
Analog Measurement Integration
Integration Time (ms)
0 to 16000 µs
Integration
Parameter Argument
0 to 16000
16.667 ms
20 ms
_60Hz
_50Hz
Comments
250 µs is considered fast and normally the minimum
Filters 60 Hz noise
Filters 50 Hz noise
Ac Power 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 Noise Rejection
Techniques
Ac Power Noise Rejection Techniques
Section 8. Operation
Ac Noise Rejection on Small Signals
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-to-D
conversion as listed in table Ac Noise Rejection on Small Signals
(p.
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 _50Hz
1 Applies to all analog input voltage ranges except mV2500 and mV5000 .
Ac Noise Rejection on Large Signals
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 input-settling 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
lists details of the half-cycle ac-power line-noise rejection technique.
325
326
Section 8. Operation
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-toD, 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
• 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.
Section 8. Operation
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 74: Input voltage rise and transient decay
Settling Errors
0
0
0
CRBasic Measurement Settling Times
SettlingTime
Argument
Integ
Argument
250
_50Hz
_60Hz
Resultant
Settling Time 1
450 µs
3 ms
3 ms integer ≥ 100 integer
μs entered in
SettlingTime argument
1 450 µs is the minimum settling time required to meet CR1000 resolution specifications.
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.
327
328
Section 8. Operation
• 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
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 CRBasic Programming —
Details
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.
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 75: Settling Time for Pressure Transducer
Section 8. Operation
329
Section 8. Operation
First Six Values of Settling Time Data
TIMESTAMP
1/3/2000 23:34
REC
0
PT(1) PT(2)
Smp Smp
0.03638599 0.03901386
1/3/2000 23:34
1/3/2000 23:34
1/3/2000 23:34
1
2
3
0.03658813
0.03638599
0.03658813
0.03921601
0.03941815
0.03941815
1/3/2000 23:34 4 0.03679027 0.03921601
Open-Input Detect
PT(3) PT(4)
Smp Smp
0.04022673 0.04042887
0.04002459 0.04042887
0.04002459 0.04063102
0.03982244 0.04042887
0.04022673 0.04063102
PT(5) PT(6)
Smp Smp
0.04103531 0.04123745
0.04103531 0.0414396
0.04042887 0.04123745
0.04103531 0.04103531
0.04063102 0.04083316
Note The information in this section is highly technical. It is not necessary for the routine operation of the CR1000.
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 Input Voltage Ranges and Options
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 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.
330
Section 8. Operation
• 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 A-to-D conversion may mitigate the problem.
Range-Code Option C Over-Voltages
Input Range (mV)
± 2.5
± 7.5
± 25
± 250
Over-Voltage
300 mV
± 2500
±5000
C option with caveat 1
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.
Offset Voltage Compensation
Related Topics
• Auto Self-Calibration — Overview
• Auto Self-Calibration — Details
• Auto Self-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
331
332
Section 8. Operation
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 comms 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 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
Section 8. Operation 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 filtering.
• Avoid preceding a very small voltage input with a very large voltage input in a measurement sequence if a single measurement instruction must be used.
333
334
Section 8. Operation
TABLE: Offset Voltage Compensation Options
lists some of the tools available to minimize the effects of offset voltages.
Offset Voltage Compensation Options
CRBasic
Measurement
Instruction
AM25T()
BrHalf()
BrHalf3W()
BrHalf4W()
BrFull()
BrFull6W()
TCDiff()
TCSe()
Input Reversal
( RevDiff = True )
Therm107()
Therm108()
Therm109()
VoltDiff()
VoltSe()
Input and Excitation Reversal
Excitation
Reversal
( RevEx = True )
Measure
Offset During
Measurement
( MeasOff = True )
Measure Offset
During
Background
Calibration
( RevDiff = False )
( RevEx = False )
( MeasOff = False )
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,
Section 8. Operation
1. Switches to the measurement terminals
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 sub-measurements 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 Auto Self-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 auto self-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 Auto self-calibrations are performed only periodically, so more time skew occurs between the auto self-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
335
336
Section 8. Operation where A-to-D conversion time equals 15 µs. If reps (repetitions) > 1 (multiple measurements by a single instruction), no additional time is required. If reps = 1 in consecutive voltage instructions, add 15 µs per instruction.
Measurement Accuracy
Read More For an in-depth treatment of accuracy estimates, see the technical paper Measurement Error Analysis soon available at 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-or-reading, 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.
Analog Voltage Measurement Accuracy 1
0 to 40 °C
±(0.06% of reading + offset)
–25 to 50 °C
±(0.12% of reading + offset)
–55 to 85 °C 2
±(0.18% of reading + offset)
1 Assumes the CR1000 is within factory specifications
2 Available only with purchased extended temperature option (-XT)
Analog Voltage Measurement Offsets
Differential
Measurement
With Input Reversal
1.5 • Basic Resolution +
1.0 µ V
Differential
Measurement
Without Input
Reversal
3 • Basic Resolution +
2.0 µ V
Single-Ended
3 • Basic Resolution +
3.0 µ V
Note — the value for Basic Resolution is found in the table Analog Voltage
Measurement Resolution
Section 8. Operation
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
7.5
2.5
33.3
3.33
1.0
0.33
66.7
6.7
2.0
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
337
Section 8. Operation
FIGURE 76: 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.
338
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:
• Sensorsignal 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
Section 8. Operation where percent-ofreading = 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
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 common-mode component (V voltage signal. V cm
V cm cm
) and the differential-mode component (V
is the average of the voltages on the V+ and V– inputs. So,
= (V+ + V –)/2 or the voltage remaining on the inputs when V total voltage on the V+ and V– inputs is given as V+ = V cm
V cm
– V dm
/2, respectively.
+ V dm dm dm
) of a
= 0. The
/2, and V
L
=
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 Thermocouple
Error Analysis
An introduction to thermocouple measurements is located in the section Tutorial: Measuring a Thermocouple
339
340
Section 8. Operation
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 reference junction 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 reference junction compensation voltage. It is then used to determine the thermocouple-junction 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-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
Section 8. Operation 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 to High)
shows the errors when the chamber was changed from low temperature to high in approximately 15 minutes. FIGURE: Panel Temperature Gradients (High 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 77: Panel Temperature Error Summary
341
Section 8. Operation
FIGURE 78: Panel Temperature Gradients (low temperature to high)
FIGURE 79: Panel Temperature Gradients (high temperature to low)
342
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
Section 8. Operation 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 thermocouple.
Thermocouple
Type
T
Limits of Error for Thermocouple Wire (Reference Junction at 0°C)
Temperature
Range °C
–200 to 0
0 to 350
Limits of Error
(Whichever is greater)
Standard
± 1.0 °C or 1.5%
Special
± 1.0 °C or 0.75% ± 0.5 °C or 0.4%
J
E
0 to 750
–200 to 0
± 2.2 °C or 0.75%
± 1.7 °C or 1.0%
± 1.1 °C or 0.4%
K
R or S
B
0 to 900
–200 to 0
0 to 1250
0 to 1450
800 to 1700
Thermocouple Voltage Measurement Error
± 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%
± 1.0 °C or 0.4%
± 1.1 °C or 0.4%
± 0.6 °C or 0.1%
Not Established.
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
343
344
Section 8. Operation
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.
Voltage Range for Maximum Thermocouple Resolution 1
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
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
J: –210 to 1200
B: –0 to 1820
R: –50 to 1768
–25 to 65
0 to 710
–50 to 320
–145 to 155
0 to 1265
–210 to 475
0 to 1820
S: –50 to 1768 –50 to 330
N: –270 to 1300 –80 to 105
1 Reference temperature at 20°C
–50 to 770
–50 to 820
–270 to 260
–50 to 1768
–50 to 1768
–270 to 725
Temperature
Range (°C) for ±250 mV
Input Range not used
>365
>620
>475 not used not used not used
>725
FIGURE 80: Input Error Calculation
Section 8. Operation
Input Error Examples: Type T Thermocouple @ 45°C
These examples demonstrate that in the environmental temperature range, input-offset 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
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
345
346
Section 8. Operation
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)
Section 8. Operation
= 53.4 µV + 101.0 µV
= 154 µV (= 4.41 °C)
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.
347
348
Section 8. Operation
Reference Junction Error
E
J
K
TC
Type
T
– 150
–100
– 240
–240
–130
200
Limits of Error on CR1000 Thermocouple Polynomials
– 270
–270
–200
Range °C to to to
400
–200
–100
Limits of Error °C
Relative to NIST
Standards
18 @ –270
±0.08
–100
100 to to
100
400
±0.001
±0.015
±0.008
±0.002 to to to to to to
760
300
1000
–130
200
1000
±0.4
±0.005
±0.02
– 50
–50
950 to to to
1372
950
1372
±0.01
±0.04
Thermocouple instructions TCDiff() and TCSe() include the parameter TRef to incorporate the reference junction temperature into the measurement. A reference junction 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 reference junction 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 reference junction 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.
Section 8. Operation
TC Type
T
Reference Temperature Compensation Range and Error
Range °C
–100 to 100
Limits of Error °C 1
± 0.001
E
J
–150 to 206
–150 to 296
± 0.005
± 0.005
± 0.01 K –50 to 100
1 Relative to ITS-90 Standard in NIST Monograph 175
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,
• 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).
349
Section 8. Operation
Thermocouple Error Examples
Source
Error: °C : % of Total Error
Differential without Input Reversal
250 µs Integration
Differential with Input Reversal
50/60 Hz Rejection Integration
Reference Temperature
TC Output
Voltage Measurement
ANSI TC Error (1 °C)
0.15° : 11.5%
1.0° : 76.8%
0.12° : 9.2%
TC Error 1% Slope
0.15° : 29.9%
0.2° : 39.8%
0.12° : 23.9%
ANSI TC Error (1 °C)
0.15° : 12.2%
1.0° : 81.1%
0.07° : 5.7%
TC Error 1% Slope
0.15° : 34.7%
0.2° : 46.3%
0.07° : 16.2%
Noise
Reference Linearization
Output Linearization
Total Error
0.03° : 2.3%
0.001° : 0.1%
0.001° : 0.1%
0.03° : 6.2%
0.001° : 0.2%
0.001° : 0.2%
1.302° : 100% 0.502° : 100%
8.1.2.2.2 Use of External Reference Junction
0.01° : 0.8%
0.001° : 0.1%
0.001° : 0.1%
1.232° : 100%
0.01° : 2.3%
0.001° : 0.25%
0.001° : 0.25%
0.432° : 100%
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 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.
350
Section 8. Operation
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 81: Diagram of a Thermocouple Junction Box
8.1.2.3 Resistance Measurements — Details
Related Topics:
• Resistance Measurements — Specifications
• Resistance Measurements — Overview
• Resistance Measurements — Details
• Measurement: RTD, PRT, PT100, PT1000
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
Signal Conditioners — List
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 and those labeled R f s
are normally the sensors
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 Offset Voltage Compensation
(p.
351
352
Section 8. Operation
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 four-wire 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.
Resistive-Bridge Type and
Circuit Diagram
Half-Bridge 1
Resistive-Bridge Circuits with Voltage Excitation
CRBasic Instruction and
Fundamental Relationship
CRBasic Instruction: BrHalf()
Fundamental Relationship 2 :
Relational Formulas
Three-Wire Half-Bridge 1,3
CRBasic Instruction: BrHalf3W()
Fundamental Relationship 2 :
Four-Wire Half-Bridge 1,3
CRBasic Instruction: BrHalf4W()
Fundamental Relationship 2 :
Section 8. Operation
Resistive-Bridge Circuits with Voltage Excitation
Resistive-Bridge Type and
Circuit Diagram
CRBasic Instruction and
Fundamental Relationship
Relational Formulas
Full-Bridge 1,3
CRBasic Instruction: BrFull()
Fundamental Relationship 2 :
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 or sensing resistor.
1
, V
2
= sensor return voltages; R f
= fixed , bridge or completion resistor; R s
= variable
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.
353
354
Section 8. Operation
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.3.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
(p.
8.1.2.3.2 Accuracy — Resistance Measurements
Read More Consult the following technical papers at 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
Section 8. Operation
Measurements
• Voltage Measurement Accuracy, Self- Calibration, and Ratiometric
Measurements
• Estimating Measurement Accuracy for Ratiometric Measurement
Instructions.
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
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 full treatise on the accuracy of ratiometric measurements, consult the technical paper Estimating Measurement Accuracy for Ratiometric Measurement
Instructions at www.campbellsci.com/app-notes .
355
356
Section 8. Operation
8.1.2.4 Auto Self-Calibration — Details
Related Topics
• Auto Self-Calibration — Overview
• Auto Self-Calibration — Details
• Auto Self-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
The CR1000 auto self-calibrates to compensate for changes caused by changing operating temperatures and aging. Disable auto self-calibration when it interferes with execution of very fast programs and less accuracy can be tolerated.
With auto self-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 self-calibration disabled. If the temperature of the CR1000 remains the same, there is little calibration drift if auto-calibration is disabled. Auto self-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 re-calibrated 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 auto self-calibrates during spare time in the background as a slow sequence
with a segment of the calibration occurring every four seconds. If there is insufficient time to do the auto self-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.4.1 Auto Self-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.
Auto self-calibration calibrates only the G and B values necessary to run a given
CRBasic program, resulting in a program dependent number of auto self-calibration segments ranging from a minimum of six to a maximum of 91. A typical number of segments required in auto self-calibration is 20 for analog
Section 8. Operation ranges and one segment for the wiring-panel temperature measurement, totaling
21 segments. So, (21 segments) • (4 s / segment) = 84 s per complete auto self-calibration. The worstcase is (91 segments) • (4 s / segment) = 364 s per complete auto self-calibration.
During instrument power-up, the CR1000 computes calibration coefficients by averaging ten complete sets of auto 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 auto 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 auto self-calibration for use internally. For a VoltDiff() instruction, B is determined as part of auto 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 input-voltage 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 auto self-calibration (maximum of 54 values). These values can be viewed in the Status table, with entries identified as listed in table CalGain() Field Descriptions
Auto 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 auto 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.
357
358
Section 8. Operation
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.
CalGain() Field Descriptions
Field
CalGain(1)
±mV Input
Range
5000
CalGain(2)
CalGain(3)
CalGain(4)
2500
250
25
CalGain(5)
CalGain(6)
CalGain(7)
CalGain(8)
CalGain(9)
CalGain(10)
CalGain(11)
CalGain(12)
250
25
7.5
2.5
7.5
2.5
5000
2500
CalGain(13)
CalGain(14)
CalGain(15)
CalGain(16)
CalGain(17)
CalGain(18)
5000
2500
250
25
7.5
2.5
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
Section 8. Operation
CalSeOffset() Field Descriptions
CalSeOffset(1)
CalSeOffset(2)
±mV Input
Range
5000
2500
CalSeOffset(3)
CalSeOffset(4)
CalSeOffset(5)
CalSeOffset(6)
250
25
7.5
2.5
CalSeOffset(7)
CalSeOffset(8)
CalSeOffset(9)
CalSeOffset(10)
CalSeOffset(11)
CalSeOffset(12)
5000
2500
250
25
7.5
2.5
CalSeOffset(13)
CalSeOffset(14)
CalSeOffset(15)
CalSeOffset(16)
CalSeOffset(17)
CalSeOffset(18)
5000
2500
250
25
7.5
2.5
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
359
Section 8. Operation
CalDiffOffset() Field Descriptions
Field
CalDiffOffset(1)
±mV Input
Range
5000
CalDiffOffset(2)
CalDiffOffset(3)
CalDiffOffset(4)
CalDiffOffset(5)
2500
250
25
7.5
CalDiffOffset(6)
CalDiffOffset(7)
CalDiffOffset(8)
CalDiffOffset(9)
CalDiffOffset(10)
CalDiffOffset(11)
CalDiffOffset(12)
2.5
5000
2500
250
25
7.5
2.5
CalDiffOffset(13)
CalDiffOffset(14)
CalDiffOffset(15)
CalDiffOffset(16)
CalDiffOffset(17)
CalDiffOffset(18)
5000
2500
250
25
7.5
2.5
Cal()
Array
Field
4
5
6
1
2
3
7
8
9
Calibrate() Instruction Results
Descriptions of Array Elements
Differential (Diff)
Single-Ended (SE)
SE
Diff
SE
Diff
SE
Diff
Offset or Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
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
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
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
360
Section 8. Operation
Cal()
Array
Field
28
29
30
25
26
27
34
35
36
37
31
32
33
38
39
17
18
19
20
21
22
23
24
13
14
15
16
10
11
12
Calibrate() Instruction Results
Descriptions of Array Elements
Differential (Diff)
Single-Ended (SE)
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Diff
Offset or Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
2.5
2.5
5000
5000
5000
2500
2500
2500
±mV Input
Range
25
25
25
7.5
7.5
7.5
2.5
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Diff
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
250
250
250
25
25
25
7.5
7.5
7.5
2.5
2.5
2.5
5000
5000
5000
Integration
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
250 ms
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
60 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
Typical Value
±5 LSB
±5 LSB
–0.0067 mV/LSB
±10 LSB
±10 LSB
–0.002 mV/LSB
±20 LSB
±20 LSB
–0.00067 mV/LSB
±5 LSB
±5 LSB
–0.67 mV/LSB
±5 LSB
±5 LSB
–0.34 mV/LSB
±5 LSB
±5 LSB
–0.067 mV/LSB
±5 LSB
±5 LSB
–0.0067 mV/LSB
±10 LSB
±10 LSB
–0.002 mV/LSB
±20 LSB
±20 LSB
–0.00067 mV/LSB
±5 LSB
±5 LSB
–0.67 mV/LSB
361
Cal()
Array
Field
47
48
49
50
51
52
53
54
43
44
45
46
40
41
42
Section 8. Operation
Calibrate() Instruction Results
Descriptions of Array Elements
Differential (Diff)
Single-Ended (SE)
SE
Diff
SE
Diff
SE
Diff
SE
Diff
SE
Diff
Offset or Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
Offset
Offset
Gain
25
25
7.5
7.5
7.5
2.5
2.5
2.5
±mV Input
Range
2500
2500
2500
250
250
250
25
8.1.2.5 Strain Measurements — Details
Related Topics:
• Strain Measurements — Overview
• Strain Measurements — Details
• FieldCalStrain() Examples
Integration
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
50 Hz Rejection
Typical Value
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.
A dashed code sets the polarity of V r
to negative.
±5 LSB
±5 LSB
–0.34 mV/LSB
±5 LSB
±5 LSB
–0.067 mV/LSB
±5 LSB
±5 LSB
–0.0067 mV/LSB
±10 LSB
±10 LSB
–0.002 mV/LSB
±20 LSB
±20 LSB
–0.00067 mV/LSB
362
Section 8. Operation
StrainCalc() Instruction Equations
StrainCalc()
BrConfig Code
Quarter-bridge strain gage 1 :
Configuration
1
Half-bridge strain gage 1 other at 90° to strain:
. One gage parallel to strain, the
2
Half-bridge strain gage. One gage parallel to + , the other parallel to 1 :
3
Full-bridge strain gage. Two gages parallel to + , the other two parallel to 1 :
4
Full-bridge strain gage. Half the bridge has two gages parallel to + and - , and the other half to + and 1 :
5
Full-bridge strain gage. Half the bridge has two gages parallel to + and - , and the other half to - and + 1 :
6
1
• : Poisson's Ratio (0 if not applicable)
• GF: Gage Factor
• V r
: 0.001 (Source-Zero) if BRConfig code is positive (+)
• V r
: –0.001 (Source-Zero) if BRConfig code is negative (–) and where:
• "source": the result of the fullbridge measurement (X = 1000 • V
1 when multiplier = 1 and offset = 0.
/ V x
)
• "zero": gage offset to establish an arbitrary zero (see FieldCalStrain() in
FieldCal() Examples
.
363
364
Section 8. Operation
StrainCalc Example : See FieldCalStrain() Examples
8.1.2.6 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 :
• Current Output Transducers Measured with Campbell Scientific
Dataloggers (2MI-B)
• CURS100 100 Ohm Current Shunt Terminal Input Module
8.1.2.7 Voltage Measurements — Details
Related Topics:
• Voltage Measurements — Specifications
• Voltage Measurements — Overview
• Voltage Measurements — Details
8.1.2.7.1 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 Topics:
• 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.
Analog Voltage Input Ranges and Options
Range Code Description mV5000 measures voltages between ±5000 mV mV2500 1 measures voltages between ±2500 mV mV250 2 mV25 2 measures voltages between ±250 mV measures voltages between ±25 mV mV7_5 2 mV2_5 2 measures voltages between ±7.5 mV measures voltages between ±2.5 mV
AutoRange 3 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 )
365
366
Section 8. Operation
Input Limits / Common-Mode Range
Related Topics:
• 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 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 cm
) 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
is the cm
= (V+ + V –)/2 or the voltage remaining on the inputs when V
V– inputs is given as V+ = V cm
+ V dm dm
= 0. The total voltage on the V+ and
/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:
CommonMode 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 common-mode range is reduced to ±2.5 Vdc, whereas Input Limits are always ±5
Section 8. Operation
Vdc. Consequently, the term Input Limits is used to specify the valid voltage range of the V+ and V– inputs into the PGIA.
FIGURE 82: PGIA with Input Signal Decomposition
8.1.2.7.2 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
FIGURE 83: Simplified voltage measurement sequence.
367
368
Section 8. Operation
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.
See table Parameters That Control Measurement Sequence and Timing
FIGURE 84: Programmable Gain Input Amplifier (PGIA):
H to V+, L to V–, VH to V+, VL to V– correspond to text.
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 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.
See Basic Voltage Measurements — Specifications for measurement speeds.
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
Section 8. Operation 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 Measurement:
Fast Analog Voltage
The maximum conversion rate is 2000 per second (2 kHz) for measurements made on a one single-ended channel.
Measurement Integration
Timing
Parameters that Control Measurement Sequence and
CRBasic Instruction Parameter
MeasOfs
Action
Correct ground offset on single-ended measurements.
SettlingTime
Integ
RevDiff
RevEx
Sensor input settling time.
Duration of input signal integration.
Reverse high and low differential inputs.
Reverse polarity of excitation voltage.
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
369
370
Section 8. Operation
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 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()
Differential Measurements — Details
Related Topics:
• Differential Measurements — Overview
• 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()
Section 8. Operation
8.1.2.7.3 Voltage Measurement Quality
Read More Consult the following technical papers at 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
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.
371
372
Section 8. Operation
Integration
• 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.
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 copper-constantan thermocouple being used to measure soil temperature is not insulated, and the potential of earth ground is 1 mV greater at the sensor than at the point where the 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.
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
Section 8. Operation
• 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.
Note See White Paper "Preventing and Attacking Measurement Noise
Problems" at www.campbellsci.com
.
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.
Analog Measurement Integration
Integration Time (ms)
0 to 16000 µs
Integration
Parameter Argument
0 to 16000
16.667 ms
20 ms
_60Hz
_50Hz
Comments
250 µs is considered fast and normally the minimum
Filters 60 Hz noise
Filters 50 Hz noise
Ac Power 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 Noise Rejection
Techniques
373
Section 8. Operation
FIGURE 85: Ac Power Noise Rejection Techniques
374
Ac Noise Rejection on Small Signals
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-to-D
conversion as listed in table Ac Noise Rejection on Small Signals
(p.
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 _50Hz
1 Applies to all analog input voltage ranges except mV2500 and mV5000 .
Ac Noise Rejection on Large Signals
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 input-settling 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
lists details of the half-cycle ac-power line-noise rejection technique.
Section 8. Operation
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-toD, 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
• 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.
375
Section 8. Operation
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 86: Input voltage rise and transient decay
376
Settling Errors
0
0
0
CRBasic Measurement Settling Times
SettlingTime
Argument integer ≥ 100
Integ
Argument
250
_50Hz
_60Hz integer
Resultant
Settling Time 1
450 µs
3 ms
3 ms
μs entered in
SettlingTime argument
1 450 µs is the minimum settling time required to meet CR1000 resolution specifications.
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.
Section 8. Operation
• 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
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 CRBasic Programming —
Details
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.
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
377
378
Section 8. Operation
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 87: Settling Time for Pressure Transducer
Section 8. Operation
First Six Values of Settling Time Data
TIMESTAMP
1/3/2000 23:34
REC
0
PT(1)
Smp
0.03638599
PT(2) PT(3)
Smp Smp
0.03901386 0.04022673
1/3/2000 23:34
1/3/2000 23:34
1/3/2000 23:34
1
2
3
0.03658813
0.03638599
0.03658813
0.03921601
0.03941815
0.03941815
0.04002459
0.04002459
0.03982244
0.03921601 0.04022673 1/3/2000 23:34 4 0.03679027
Open-Input Detect
PT(4) PT(5) PT(6)
Smp Smp Smp
0.04042887 0.04103531 0.04123745
0.04042887 0.04103531 0.0414396
0.04063102 0.04042887 0.04123745
0.04042887 0.04103531 0.04103531
0.04063102 0.04063102 0.04083316
Note The information in this section is highly technical. It is not necessary for the routine operation of the CR1000.
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 Input Voltage Ranges and Options
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 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.
379
380
Section 8. Operation
• 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 A-to-D conversion may mitigate the problem.
Range-Code Option C Over-Voltages
Input Range (mV)
± 2.5
± 7.5
± 25
± 250
Over-Voltage
300 mV
± 2500
±5000
C option with caveat 1
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.
Offset Voltage Compensation
Related Topics
• Auto Self-Calibration — Overview
• Auto Self-Calibration — Details
• Auto Self-Calibration — Errors
• Offset Voltage Compensation
• Factory Calibration
• Factory Calibration or Repair Procedure
Section 8. Operation
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 sign al 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 comms 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 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
381
382
Section 8. Operation 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 filtering.
• Avoid preceding a very small voltage input with a very large voltage input in a measurement sequence if a single measurement instruction must be used.
Section 8. Operation
TABLE: Offset Voltage Compensation Options
lists some of the tools available to minimize the effects of offset voltages.
Offset Voltage Compensation Options
CRBasic
Measurement
Instruction
AM25T()
BrHalf()
BrHalf3W()
BrHalf4W()
BrFull()
BrFull6W()
TCDiff()
TCSe()
Input Reversal
( RevDiff = True )
Therm107()
Therm108()
Therm109()
VoltDiff()
VoltSe()
Input and Excitation Reversal
Excitation
Reversal
( RevEx = True )
Measure
Offset During
Measurement
( MeasOff = True )
Measure Offset
During
Background
Calibration
( RevDiff = False )
( RevEx = False )
( MeasOff = False )
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,
383
384
Section 8. Operation
1. Switches to the measurement terminals
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 sub-measurements 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 Auto Self-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 auto self-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 Auto self-calibrations are performed only periodically, so more time skew occurs between the auto self-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.
Section 8. Operation
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 + integ ration time + A-to-D conversion time + reps where A-to-D conversion time equals 15 µs. If reps (repetitions) > 1 (multiple measurements by a single instruction), no additional time is required. If reps = 1 in consecutive voltage instructions, add 15 µs per instruction.
Measurement Accuracy
Read More For an in-depth treatment of accuracy estimates, see the technical paper Measurement Error Analysis soon available at 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-or-reading, 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.
Analog Voltage Measurement Accuracy 1
0 to 40 °C –25 to 50 °C
±(0.06% of reading + offset)
±(0.12% of reading + offset)
–55 to 85 °C 2
±(0.18% of reading + offset)
1 Assumes the CR1000 is within factory specifications
2 Available only with purchased extended temperature option (-XT)
385
386
Section 8. Operation
Analog Voltage Measurement Offsets
Differential
Measurement
With Input Reversal
1.5 • Basic Resolution +
1.0 µ V
Differential
Measurement
Without Input
Reversal
3 • Basic Resolution +
2.0 µ V
Single-Ended
3 • Basic Resolution +
3.0 µ V
Note — the value for Basic Resolution is found in the table Analog Voltage
Measurement Resolution
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
7.5
2.5
33.3
3.33
1.0
0.33
66.7
6.7
2.0
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
Section 8. Operation
FIGURE 88: 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.
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:
• Sensorsignal 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
387
388
Section 8. Operation where percent-ofreading = 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
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 common-mode component (V voltage signal. V
V cm cm
is the average of the voltages on the V+ and V– inputs. So, cm
= (V+ + V –)/2 or the voltage remaining on the inputs when V total voltage on the V+ and V–
V cm
– V dm
/2, respectively.
) and the differential-mode component (V inputs is given as V+ = V cm
+ V dm dm
) of a dm
= 0. The
/2, and V
L
=
8.1.3 Pulse Measurements — Details
Related Topics:
• Pulse Measurements — Specifications
• Pulse Measurements — Overview
• Pulse Measurements — Details
Read More Review the PULSE COUNTERS
and Pulse on C
Terminals sections in Specifications
Review pulse measurement programming in CRBasic Editor Help for the PulseCount() and TimerIO() instructions.
Section 8. Operation
Note Peripheral devices are available from Campbell Scientific to expand the number of pulse input channels measured by the CR1000. See
Measurement and Control Peripherals — List
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 Pulse Sensor
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
FIGURE 89: Pulse Sensor Output Signal Types
FIGURE 90: Switch Closure Pulse Sensor
389
Section 8. Operation
FIGURE 91: Terminals Configurable for Pulse Input
390
Pulse Measurements: Terminals and Programming
Measurement
Low-level ac, counts
Low-level ac, Hz
P
Terminals
C
Terminals
CRBasic
Instruction
PulseCount()
PulseCount()
Low-level ac, running average
High frequency, counts
PulseCount()
PulseCount()
High frequency, Hz
High frequency, running average
PulseCount()
PulseCount()
Switch closure, counts
Switch closure, Hz
Switch closure, running average
Calculated period
PulseCount()
PulseCount()
PulseCount()
TimerIO()
Calculated frequency
Time from edge on previous port
Time from edge on port 1
TimerIO()
TimerIO()
TimerIO()
Section 8. Operation
Pulse Measurements: Terminals and Programming
Count of edges TimerIO()
Pulse count, period TimerIO()
TimerIO() Pulse count, frequency
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. 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
Connecting Switch Closures to C Terminals Configured for Control. 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 — List
Low-level ac (sine-wave) signals can be measured on P terminals. Sensors that commonly output low-level ac include:
• Ac generator anemometers
391
392
Section 8. Operation
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-to-peak) to 14 V RMS ( ± 20 V peak-to-peak).
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 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.
Section 8. Operation
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 where
FR = resolution of th e 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.
Example: E for a 10 Hz input signal
Scan Rising Edge / Scan
5.0 50
0.5
0.05
5
0.5
E
50
5
1
393
394
Section 8. Operation
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 resolutions 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.
PulseCount()
Frequency Resolution Comparison
0.5 s Scan
, POption =
TimerIO() , Function = 2
1 FR = 2 Hz
FR = 0.0011 Hz
8.1.3.3.2 Frequency Measurement Q & A
5.0 s Scan
FR = 0.2 Hz
FR = 0.00011 Hz
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)
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 switch
Section 8. Operation closure 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
.
• Maximum input frequency = 90 Hz
CRBasic instruction: PulseCount()
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
.
• Maximum input frequency = 90 Hz
• CRBasic instruction: PulseCount()
C Terminals
Switch closure mode is a special case edge-count function that measures dry-contact-switch closures or open collectors. The operating system filters bounces. Connection configurations are illustrated in table Switch Closures and
Open Collectors
• 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).
395
396
Section 8. Operation
Measurements include time between edges expressed as frequency (Hz) or period
(µs).
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.
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 Timer Input on I/O NAN Conditions
• NAN is the result of a TimerIO() measurement if one of the following 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.8 Pulse Measurement Tips
Basic connection of pulse-output sensors is illustrated in table Switch Closures and Open Collectors
Section 8. Operation
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
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 Ω.
Switch Closures and Open Collectors on P Terminals
Switch Closure on P Terminal Open Collector on on P Terminal
Switch Closures and Open Collectors
Switch Closure on C Terminal:
No Pull-Up
397
Section 8. Operation
Switch Closures and Open Collectors
Switch Closure on C Terminal:
5 Vdc Pull-Up
Open Collector on C Terminal:
5 Vdc Pull-Up
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)
398
8.1.3.8.1 Pay Attention to Specifications
Pay attention to specifications. Take time to understand the signal to be measured and compatible input terminals and CRBasic instructions. TABLE:
Three Specifications Differing Between P and C Terminals
compares
Section 8. Operation specifications for pulse input terminals to emphasize the need for matching the proper device to the application.
Three Specifications Differing Between P and C Terminals
High-Frequency
Maximum
P Terminal
250 kHz
C Terminal
400 kHz
Input Voltage
Maximum
20 Vdc
State Transition
Thresholds
Count upon transition from
<0.9 Vdc to >2.2 Vdc
8.1.3.8.2 Input Filters and Signal Attenuation
16 Vdc
Count upon transition from
<1.2 Vdc to >3.8 Vdc
P and C terminals configured for pulse input have internal filters that reduce electronic noise, which can cause false counts. However, input filters attenuate
(reduce) the amplitude (voltage) of the signal. Attenuation is a function of the frequency of the signal. Higher-frequency signals are attenuated more. If a signal is attenuated enough, it may not pass the detection thresholds required by the pulse count circuitry.
The metric for filter effectiveness is τ, the filter time constant. The higher the τ value, the less noise that gets through the filter. But, the higher the τ value, the lower the signal frequency must be to pass the detection thresholds.
Detection thresholds, τ values, and low -level ac pulse input ranges are listed in
TABLE: Time Constants
A deduction from the specifications is that 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.
SPEC For example, 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 low-amplitude signals; 1 ms time constant (159 Hz 3 dB frequency) for larger (> 0.7 V) amplitude signals.
For example , the amplitude reduction that results from τ in high -frequency pulse input mode is illustrated in figure FIGURE: Amplitude Reduction of Pulse Count
Waveform
399
400
Section 8. Operation
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
τ
TABLE: Low-Level Ac Amplitude and Maximum
1.2
3300
0.025
0.025
Low-Level Ac Pules Input Ranges
Sine Wave Input
(mV RMS)
20
Maximum Frequency
(Hz)
20
200
2000
200
10,000
5000 20,000
FIGURE 92: Amplitude reduction of pulse count waveform (before and after 1 µs µs time-constant filter)
Section 8. Operation
8.1.4 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 Input Modules — List
.
The figure Vibrating Wire Sensor
illustrates how a basic sensor is put together. 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 spectral-analysis techniques ( VSPECT
that produce superior noise rejection, higher resolution, diagnostic data, and, in the case of dynamic VSPECT, measurements up to 333.3 Hz.
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 93: Vibrating Wire Sensor
8.1.4.1 Time-Domain Measurement
Although obsolete in many applications, time-domain period-averaging vibrating wire 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.
401
402
Section 8. Operation
For most applications, the advanced techniques of static and dynamic VSPECT measurements are preferred.
8.1.5 Period Averaging — Details
Related Topics:
• Period Average Measurements — Specifications
• Period Average Measurements — Overview
• Period Average Measurements — 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 divided by the number of cycles chosen.
The measurement is performed as follows: 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 for additional input conditioning circuitry. The threshold allows direct connection of standard digital 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). Figure
Input Conditioning Circuit for Period Averaging
shows an example circuit.
A threshold other than zero results in offset voltage drift, limited accuracy
(≈ ±10 mV ), and limited resolution (≈1.2 mV).
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 in the schematics, 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.
Section 8. Operation
FIGURE 94: Input Conditioning Circuit for Period Averaging
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 — Details
Related Topics:
• RS-232 and TTL — Details
• 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
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 Hardware,
Single-Connection Comms Devices — List
If additional serial inputs are required, serial input expansion modules can be connected. See 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 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. See figure Circuit to Limit C Terminal
Input to 5 Volts Dc
403
Section 8. Operation
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. See Circuit to Limit C Terminal Input to
5 Volts
FIGURE 95: Circuit to Limit C Terminal Input to 5 Vdc
404
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 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.
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 without modifying or recompiling the CRBasic program.
Section 8. Operation
8.1.8 Cabling Effects — Details
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 Cabling
Cable length in analog sensors is most likely to affect the signal settling time. For more information, see Signal Settling Time
8.1.8.2 Pulse Sensor Cabling
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 96: Current-Limiting Resistor in a Rain Gage
Circuit
8.1.8.3 RS-232 Sensor Cabling
RS-232 sensor cable lengths should be limited to 50 feet.
8.1.8.4 SDI-12 Sensor Cabling
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.
405
406
Section 8. Operation
8.1.9 Synchronizing Measurements — Details
Related Topics:
• Synchronizing Measurements — Overview
• Synchronizing Measurements — Details
8.1.9.1 Synchronizing Measurement in the CR1000 — Details
Measurements are sychnronized in the CR1000 by the task sequencer. See
Execution and Task Priority
8.1.9.2 Synchronizing Measurements in a Datalogger Network — Details
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 comms 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 comms 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,
Section 8. Operation 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.
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 Switched-Voltage Output — Details
Related Topics:
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• Current Source and Sink Limits
• PLC Control — Overview
• PLC Control Modules — Overview
• PLC Control Modules — Lists
407
408
Section 8. Operation
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
Terminals Configured for Control
for more information.
Current Source and Sink Limits
Terminal
VX or EX (voltage excitation) 2
Limit 1
±25 mA maximum
SW-12 3
12V + SW-12 (combined) 4
< 900 mA @ 20°C
< 630 mA @ 50°C
< 450 mA @ 70°C
< 360 mA @ 85°C
< 1.85 A @ 20°C
< 1.33 A @ 50°C
< 1.00 A @ 70°C
< 0.74 A @ 85°C
5V + CS I/O (combined) 5 < 200 mA
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.
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.
8.2.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 Specifications
to understand their limitations. Specifications are applicable only for loads not exceeding ±25 mA.
Section 8. Operation
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.
8.2.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.
8.2.3 Continuous-Unregulated Voltage (12V Terminal)
Use 12V terminals to continuously power devices that require 12 Vdc. Voltage 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.
8.2.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. Voltage on a SW12 terminal will change with CR1000 supply voltage.
CRBasic instruction SW12() controls the SW12 terminal. Configure SW12() as a measurement or processing task in the instruction. Use it as a processing task
409
410
Section 8. Operation 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. See Execution and Task Priority
A 12 Vdc switching circuit designed to be driven by a C terminal is available from Campbell Scientific. It is listed in Relay Drivers — List
8.3 PLC Control — Details
Related Topics:
• PLC Control — Overview
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• Current Source and Sink Limits
The CR1000 can control instruments and devices such as the following:
• Wireless cellular modem to conserve power.
• GPS receiver to conserve power.
• Trigger a water sampler to collect a sample.
• Trigger a camera to take a picture.
• Activate an audio or visual alarm.
• Move a head gate to regulate water flows in a canal system.
• Control pH dosing and aeration for water quality purposes.
• Control a gas analyzer to stop operation when temperature is too low.
• Control irrigation scheduling.
Controlled devices can be physically connected to C terminals, usually through an external relay driver, or the SW12V
terminal. C terminals can be set low (0
Vdc) or high (5 Vdc) using PortSet() or WriteIO() instructions. Control modules are available to expand and augment CR1000 control capacity. On / off and proportional control modules are available. See appendix PLC Control Modules
— List
Tips for writing a control program:
• Short Cut programming wizard has provisions for simple on/off control.
• PID control can be done with the CR1000.
Section 8. Operation
Control decisions can be based on time, an event, or a measured condition.
Example:
In the case of a cell modem, control is based on time. The modem requires 12 Vdc power, so connect its power wire to the CR1000 SW12V terminal. The following code snip turns the modem on for ten minutes at the top of the hour using the
TimeIntoInterval() instruction embedded in an If / Then logic statement:
If TimeIntoInterval ( 0,60,Min) Then PortSet (9,1) 'Port “9” is the
SW12V Port. Turn phone on.
If TimeIntoInterval (10,60,Min) Then PortSet (9,0) 'Turn phone off.
TimeIsBetween() returns TRUE if the CR1000 real-time clock falls within the specified range; otherwise, the function returns FALSE . Like
TimeIntoInterval() , TimeIsBetween() is often embedded in an If / Then logic statement, as shown in the following code snip.
If TimeIsBetween (0,10,60,Min) Then
SW12 (1) 'Turn phone on.
Else
SW12 (0) 'Turn phone off.
EndIf
TimeIsBetween() returns TRUE for the entire interval specified whereas
TimeIntoInterval() returns TRUE only for the one scan that matches the interval specified.
For example, using the preceding code snips, if the CRBasic program is sent to the datalogger at one minute past the hour, the TimeIsBetween() instruction will evaluate as TRUE on its first scan. The TimeIntoInterval() instruction will evaluate as TRUE at the top of the next hour (59 minutes later).
• Note START is inclusive and STOP is exclusive in the range of time that will return a TRUE result. For example:
TimeIsBetween (0,10,60,Min) will return TRUE at 8:00:00.00 and
FALSE at 08:10:00.00.
8.3.1 Terminals Configured for Control
C terminals can be configured as output ports to set low (0 Vdc, turn off) or high
(5 Vdc, turn on) 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.Current sourcing for drive capcitiy is determined by the 5
Vdc supply and a 330 Ω output resistance. It is expressed as:
V o
= 4.9 V – (330 Ω • I o
)
411
Section 8. Operation
Where V o
is the drive limit, and I relationship. o
is the current required by the external device.
Figure Current Sourcing from C Terminals Configured for Control
plots the
FIGURE 97: Current sourcing from C terminals configured for control
412
8.4 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.4.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.4.2 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 digital-to-analog conversion to output an analog voltage or current. The output level is maintained until updated by the CR1000.
8.4.3 PLC Control Modules — Overview
Related Topics:
• PLC Control — Overview
• PLC Control Modules — Overview
• PLC Control Modules — Lists
• Switched Voltage Output — Specifications
• Switched Voltage Output — Overview
• Switched Voltage Output — Details
• Current Source and Sink Limits
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 Switched-Unregulated (Nominal 12 Volt)
8.4.3.1 Relays and Relay Drivers
Read More See Relay Drivers Modules — List
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.4.3.2 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.
413
Section 8. Operation
FIGURE 98: Relay Driver Circuit with Relay
FIGURE 99: Power Switching without Relay
414
8.4.4 Pulse Input Modules
Read More For more information see Pulse Input Modules — List
Pulse input expansion modules are available for switch-closure, state, pulse count and frequency measurements, and interval timing.
8.4.4.1 Low-Level Ac Input Modules — Overview
Related Topics:
• Low-Level Ac Input Modules — Overview
• Low-Level Ac Measurements — Details
• Pulse Input Modules — List
Section 8. Operation
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.4.5 Serial I/O Modules — Details
Read More
For more information see appendix Serial I/O Modules List
(p.
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.
8.4.6 Terminal-Input Modules
Read More See Passive Signal Conditioners — List
Terminal Input Modules (TIMs) are devices that provide simple measurement-support circuits in a convenient package. TIMs include voltage dividers for cutting the output voltage of sensors to voltage levels compatible with the CR1000, modules for completion of resistive bridges, and shunt modules for measurement of analog-current sensors.
8.4.7 Vibrating Wire Modules
Read More
For complete information, see Vibrating Wire Modules — List
Vibrating wire modules interface vibrating wire transducers to the CR1000.
8.5 Datalogger Support Software — Details
Related Topics:
• Datalogger Support Software — Quickstart
• Datalogger Support Software — Overview
• Datalogger Support Software — Details
• Datalogger Support Software — Lists
Datalogger support software facilitates program generation, editing, data retrieval, and real-time data monitoring.
• PC200W Starter Software is available at no charge at www.campbellsci.com/downloads . It supports a transparent RS-232 connection between PC and CR1000, and includes Short Cut for creating
CR1000 programs. Tools for setting the datalogger clock, sending programs, monitoring sensors, and on-site viewing and collection of data are also included.
• LoggerLink Mobile Apps are simple yet powerful tools that allow an iOS or Android device to communicate with IP-enabled CR1000s. The apps
415
416
Section 8. Operation support field maintenance tasks such as viewing and collecting data, setting the clock, and downloading programs.
• PC400 Datalogger Support Software supports a variety of comms options, manual data collection, and data monitoring displays. Short Cut and CRBasic Editor are included for creating CR1000 programs. PC400 does not support complex communication options, such as phone-to-RF,
PakBus® routing, or scheduled data collection.
• LoggerNet Datalogger Support Software supports combined comms options, customized data-monitoring displays, and scheduled data collection. It includes Short Cut and CRBasic Editor for creating
CR1000 programs. It also includes tools for configuring, trouble-shooting, and managing datalogger networks. LoggerNet Admin and LoggerNet Remote are available for more demanding applications.
• LNLINUX Linux-based LoggerNet Server with LoggerNet Remote provides a solution for those who want to run the LoggerNet server in a
Linux environment. The package includes a Linux version of the
LoggerNet server and a Windows version of LoggerNet Remote . The
Windows-based client applications in LoggerNet Remote are run on a separate computer, and are used to manage the LoggerNet Linux server.
• VISUALWEATHER Weather Station Software supports Campbell
Scientific weather stations. Version 3.0 or higher supports custom weather stations or the ET107, ET106, and MetData1 pre-configured weather stations. The software allows you to initialize the setup, interrogate the station, display data, and generate reports from one or more weather stations.
Note More information about software available from Campbell Scientific can be found at www.campbellsci.com
.
8.6 Program and OS File Compression Q and A
Q: What is Gzip?
A: Gzip is the GNU zip archive file format. This file format and the algorithms used to create it are open source and free to use for any purpose. Files with the .gz extension have been passed through these data compression algorithms to make them smaller. For more information, go to www.gnu.org.
Q: Is there a difference between Gzip and zip?
A: While similar, Gzip and zip use different file compression formats and algorithms. Only program files and OSs compressed with Gzip are compatible with the CR1000.
Q: Why compress a program or operating system before sending it to a CR1000 datalogger?
Section 8. Operation
A: Compressing a file has the potential of significantly reducing its size. Actual reduction depends primarily on the number and proximity of redundant blocks of information in the file. A reduction in file size means fewer bytes are transferred when sending a file to a datalogger. Compression can reduce transfer times significantly over slow or high-latency links, and can reduce line charges when using pay-by-the-byte data plans. Compression is of particular benefit when transmitting programs or OSs over low-baud rate terrestrial radio, satellite, or restricted cellular-data plans.
Q: Does my CR1000 support Gzip?
A: Version 25 of the standard CR1000 operating system supports receipt of Gzip compressed program files and OSs.
Q: How do I Gzip a program or operating system?
A: Many utilities are available for the creation of a Gzip file. This document specifically addresses the use of 7-Zip File Manager . 7-Zip is a free, open source, software utility compatible with Windows ® creating a Gzip file is as four-step process:
. Download and installation instructions are available at http://www.7-zip.org/. Once 7-Zip is installed, a) Open 7-Zip.
b) Drag and drop the program or operating system you wish to compress onto the open window. c) When prompted, set the archive format to “Gzip”.
417
Section 8. Operation c) When prompted, set the archive format to “Gzip”.
418 d) Select OK .
The resultant file names will be of the type “myProgram.cr1.gz” and
“CR1000.Std.25.obj.gz”. Note that the file names end with “.gz”. The ".gz” extension must be preceded with the original file extension (.cr1, .obj) as shown.
Q: How do I send a compressed file to the CR1000?
A: A Gzip compressed file can be sent to a CR1000 datalogger by clicking the
Send Program command in the datalogger support software
Compressed programs can also be sent using HTTP PUT to the CR1000 web server. The
CR1000 will not automatically decompress and use compressed files sent with
File Control , FTP, or a low-level OS download; however, these files can be manually decompressed by marking as Run Now using File Control ,
FileManage() , and HTTP.
Note Compression has little effect on an encrypted program (see
FileEncrypt() in the CRBasic Editor Help ), since the encryption process does not produce a large number of repeatable byte patterns. Gzip has little effect on files that already employ compression such as JPEG or
MPEG-4.
Section 8. Operation
File
Typical Gzip File Compression Results
Original Size Bytes Compressed Size Bytes
CR1000 operating system
1,753,976 671,626
Small program 2,600
32,157
1,113
7,085 Large program
8.7 Security — Details
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
419
420
Section 8. Operation
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.
8.7.1 Vulnerabilities
While "security through obscurity" may have provided sufficient protection in the past, Campbell Scientific dataloggers increasingly are deployed in sensitive applications. Devising measures to counter malicious attacks, or innocent tinkering, requires an understanding of where systems can be compromised and how to counter the potential threat.
Note Older CR1000 operating systems are more vulnerable to attack than recent updates. Updates can be obtained free of charge at www.campbellsci.com
.
The following bullet points outline vulnerabilities:
• CR1000KD Keyboard/Display o Pressing and holding the Del key while powering up a CR1000 will cause it to abort loading a program and provides a 120 second window to begin changing or disabling security codes in the settings editor (not Status table) with the keyboard display. o Keyboard display security bypass does not allow comms access without first correcting the security code. o Note These features are not operable in CR1000KDs with serial numbers less than 1263. Contact Campbell Scientific for information on upgrading the CR1000KD operating system.
• LoggerNet o All datalogger functions and data are easily accessed via RS-232 and Ethernet using Campbell Scientific datalogger support software. o Cora command find-logger-security-code
• Telnet o Watch IP traffic in detail. IP traffic can reveal potentially sensitive information such as FTP login usernames and passwords, and server connection details including IP addresses and port numbers. o Watch serial traffic with other dataloggers and devices. A Modbus capable power meter is an example. o View data in the Public and Status tables.
Section 8. Operation o View the datalogger program, which may contain sensitive intellectual property, security codes, usernames, passwords, connection information, and detailed or revealing code comments.
• FTP o Send and change datalogger programs. o Send data that have been written to a file.
• HTTP o Send datalogger programs. o View table data. o Get historical records or other files present on the datalogger drive spaces. o More access is given when a .csipasswd is in place, so ensure that users with administrative rights have strong log-in credentials.
8.7.2 Pass-Code Lockout
Pass-code lockouts (historically known in Campbell Scientific dataloggers simply as "security codes") are the oldest method of securing a datalogger. Pass-code lockouts can effectively lock out innocent tinkering and discourage wannabe hackers on non-IP based comms links. However, any serious hacker with physical access to the datalogger or to the comms hardware can, with only minimal trouble, overcome the five-digit pass-codes. Systems adequately secured with pass-code lockouts are probably limited to the following:
• Private, non-IP radio networks
• Direct links (hardwire RS-232, short-haul, multidrop, fiber optic)
• Non-IP satellite
• Land-line, non-IP based telephone, where the telephone number is not published
• Cellular phone wherein IP has been disabled, providing a strictly serial connection
Up to three levels of lockout can be set. Valid pass codes are 1 through 65535 ( 0 confers no security).
Note Although a pass code can be set to a negative value, a positive code must be entered to unlock the CR1000. That positive code will equal 65536 + (negative security code). For example, a security code of
-1111 must be entered as 64425 to unlock the CR1000.
421
422
Section 8. Operation
Methods of enabling pass-code lockout security include the following:
• Settings – Security(1)
Security(2) and Security(3) registers are writable variables in the Status table wherein the pass codes for security levels 1 through 3 are written, respectively.
• CR1000KD Keyboard/Display settings
• Device Configuration Utility ( DevConfig ) – Security passwords 1 through 3 are set on the Deployment tab.
• SetSecurity() instruction – SetSecurity() is only executed at program compile time. It may be placed between the BeginProg and Scan() instructions.
Note Deleting SetSecurity() from a CRBasic program is not equivalent to SetSecurity(0,0,0) . Settings persist when a new program is downloaded that has no SetSecurity() instruction.
Level 1 must be set before Level 2 . Level 2 must be set before Level 3 . If a level is set to 0, any level greater than it will be set to 0. For example, if level 2 is 0 then level 3 is automatically set to 0. Levels are unlocked in reverse order: level
3 before level 2, level 2 before level 1. When a level is unlocked, any level greater than it will also be unlocked, so unlocking level 1 (entering the Level 1 security code) also unlocks levels 2 and 3.
Functions affected by each level of security are:
• Level 1 — Collecting data, setting the clock, and setting variables in the
Public table are unrestricted, requiring no security code. If Security1 code is entered, read/write values in the Status table can be changed, and the datalogger program can be changed or retrieved.
• Level 2 — Data collection is unrestricted, requiring no security code. If the user enters the Security2 code, the datalogger clock can be changed and variables in the Public table can be changed.
• Level 3 — When this level is set, all communication with the datalogger is prohibited if no security code is entered. If Security3 code is entered, data can be viewed and collected from the datalogger (except data suppressed by the TableHide() instruction in the CRBasic program). If
Security2 code is entered, data can be collected, public variables can be set, and the clock can be set. If Security1 code is entered, all functions are unrestricted.
8.7.2.1 Pass-Code Lockout By-Pass
Pass-code lockouts can be bypassed at the datalogger using a CR1000KD
Keyboard/Displaykeyboard display. Pressing and holding the Del key while powering up a CR1000 will cause it to abort loading a program and provide a 120 second window to begin changing or disabling security codes in the settings editor
(not Status table) with the keyboard display.
Section 8. Operation
Keyboard display security bypass does not allow comms access without first correcting the security code.
Note These features are not operable in CR1000KDs with serial numbers less than 1263. Contact Campbell Scientific for information on upgrading the CR1000KD operating system.
8.7.3 Passwords
Passwords are used to secure IP based communications. They are set in various comms schemes with the .csipasswd file, CRBasic PakBus instructions, CRBasic
TCP/IP instructions, and in CR1000 settings.
8.7.3.1 .csipasswd
The .csipasswd file is a file created and edited through DevConfig
and which resides on the CPU: drive of the CR1000. It contains credentials
(usernames and passwords) required to access datalogger functions over IP comms. See CRBasic Editor Help subject Web Service API for details concerning the .csipasswd file.
8.7.3.2 PakBus Instructions
The following CRBasic PakBus instructions have provisions for password protection:
• ModemCallBack()
• SendVariable()
• SendGetVariables()
• SendFile()
• GetVariables()
• GetFile()
• GetDataRecord()
8.7.3.3 TCP/IP Instructions
The following CRBasic instructions that service CR1000 IP capabilities have provisions for password protection:
• EMailRecv()
• EMailSend()
• FTPClient()
423
424
Section 8. Operation
8.7.3.4 Settings — Passwords
Settings, which are accessible with DevConfig
enable the entry of the following passwords:
• PPP Password
• PakBus/TCP Password
• FTP Password
• TLS Password (Transport Layer Security (TLS) Enabled)
• TLS Private Key Password
• AES-128 Encrypted PakBus Communication Encryption
Key
See the section Status, Settings, and DTI (Registers
for more information.
8.7.4 File Encryption
Encryption is available for CRBasic program files and provides a means of securing proprietary code or making a program tamper resistant. .CR<X> files, or files specified by the Include() instruction, can be encrypted. The CR1000 decrypts program files on the fly. While other file types can be encrypted, no tool is provided for decryption.
The CRBasic Editor encryption facility ( Menus | File | Save and Encrypt ) creates an encrypted copy of the original file in PC memory. The encrypted file is named after the original, but the name is appended with "_enc". The original file remains intact. The FileEncrypt() instruction encrypts files already in
CR1000 memory. The encrypted file overwrites and takes the name of the original. The Encryption() instruction encrypts the contents of a file with
AES128 encryption, and decrypts a file created with encryption provide the correct encryption key is entered.
One use of file encryption may be to secure proprietary code but make it available for copying.
8.7.5 Communication Encryption
PakBus is the CR1000 root communication protocol. By encrypting certain portions of PakBus communications, a high level of security is achieved.
8.7.6 Hiding Files
The option to hide CRBasic program files provides a means, apart from or in conjunction with file encryption, of securing proprietary code, preventing it from being copied, or making it tamper resistant. .CR<X> files, or files specified by the Include() instruction, can be hidden using the FileHide() instruction. The
Section 8. Operation
CR1000 can locate and use hidden files on the fly, but a listing of the file or the file name are not available for viewing. See File Management in CR1000
Memory
8.7.7 Signatures
Recording and monitoring system and program signatures are important components of a security scheme. Read more about use of signatures in
Programming to Use Signatures
and Signatures: Example Programs
8.7.8 Read Only Variables
The following example of variable declaration demonstrates how to display a value in numeric display ( Connect or RTMC ) or on a CR1000KD but not allow the person viewing it to make changes:
• Var can be viewed and changed
• Reg() and Coil() can only be viewed
• The CRBasic program can read from and write to all variables
Public Var
Public Reg(4), Coil(4) as Boolean
ReadOnly Reg, Coil
8.8 Memory — Details
Related Topics:
• Memory — Overview
• Memory — Details
• Data Storage Devices — List
• TABLE: Info Tables and Settings: Memory
8.8.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)
(p.
425
426
Section 8. Operation
Table CR1000 Memory Allocation
and table CR1000 SRAM Memory
http://www.
) 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-storage 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 .
CR1000 Memory Allocation
Memory
Sector
Main
Battery-Backed SRAM1
Comments
• OS variables
• See following table CR1000 SRAM Memory
http://www.
) for detail.
Operating System
Flash Memory 2
Internal
Serial Flash3
•
•
Operating system
Serial number
• Board revision
• Boot code
• Erased when loading new OS. Boot code erased only if changed.
• Device settings — PakBus address and settings, station name. Rebuilt when a setting changes.
• CPU:drive — 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.
• FAT32 file system
• Limited write cycles (100,000)
• Slow serial access
External Flash
(Optional)
USB: drive
USB: drive
— SC115: connects to CR1000 by CS I/O, connects to PC by USB port. FAT32. See appendix External Memory – List
(p.
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
Section 8. Operation
CR1000 Memory Allocation
Memory
Sector
External
CompactFlash
(Optional)
Comments
CRD: drive
— FAT32 recommended. Holds program files. Holds a copy of final-storage table data as files when TableFile() instruction with Option 64
is used (replaces CardOut() ). 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% of card memory
(whichever is smaller) is reserved for program storage. Memory card can facilitate the use of Powerup.ini
1 See TABLE: CR1000 SRAM Memory
http://www.
)
2 Flash is rated for > 1 million overwrites.
3 Serial flash is rated for 100,000 overwrites (50,000 overwrites on 128 kB units). CRBasic program functions that overwrite memory should use the CRD: or USR: drives to minimize wear of the CPU: drive.
CR1000 SRAM Memory
Use Comments
Static Memory Operational memory used by the operating system. Rebuilt at power-up, program re-compile, and watchdog events.
"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.
———————————
—
Operating Settings and
Properties
———————————
—
CRBasic Program
Operating Memory
———————————
—
Variables & Constants
———————————
—
Final-Storage Memory
Stores the currently compiled and running user program. This sector is rebuilt on power-up, recompile, and watchdog events.
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.
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.
427
428
Section 8. Operation
CR1000 SRAM Memory
Use
———————————
—
Communication Memory 1
———————————
—
Communication Memory 2
———————————
—
USR: drive
≤ 3.6 MB (4 MB Mem)
≤ 1.5 MB (2 MB Mem)
Comments
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 increase this allocation.
Status table will
Optionally allocated. Holds image files. Holds a copy of final-storage 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
CR1000 Memory Drives
Drive
CPU: 1
Recommended File Types cr1, .CAL
USR:
CRD: 2
1
USB: cr1, .CAL, images
.DAT
Principal use is to expand final-storage memory
but it is also used to store .JPG, cr1, and .DAT files.
1 The CPU: and USR: drives use the FAT32 file system. 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 a relatively small amount of solid state RAM and so is accessed very quickly.
2 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.
8.8.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.
Section 8. Operation
8.8.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
http://www.
).
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 Program 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.8.1.1.2 CPU: Drive
CPU: is the default drive on which programs and calibration files are stored. It is formatted as FAT32. Do not store data on CPU: or premature failure of memory will probably result.
8.8.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: 2990000 bytes.
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
CRBasic Program — Setup Tools
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
429
430
Section 8. Operation 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 Cameras — List
, 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 fields monitor use and size of the USR: drive. Bytes remaining are indicated in field USRDriveFree . Total size is indicated in field
USRDriveSize . Memory allocated to USR: drive, less overhead for directory use, is shown in datalogger support software File Control
window.
8.8.1.1.4 USB: Drive
USB: drive uses Flash
memory on a Campbell Scientific mass storage device. See Mass Storage Devices — List
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. See Table: TableFile() Instruction Data
File Formats
Caution Only remove mass-storage devices when the LED is not flashing or lit.
Do 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.8.1.2 Memory Card (CRD: Drive)
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
Section 8. Operation
The CRD: drive uses CompactFlash (CF) card memory cards exclusively. Its primary purpose is the storage of data files in a compact binary format. 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 eject button and wait for the LED to indicate that the card is disabled. You then have 15 seconds to pull the card before normal operations resume.
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 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 FAT16 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 FAT16 or FAT32. Newer operating systems always format cards as FAT32.
Because of the way the FAT32 card format works, you can avoid long CR1000 compile times with a freshly formatted card by first formatting the new card on a
PC, then copy a small file to the card from the PC, and then delete the file with the PC. When the small file is copied to the card, the PC updates a sector on the card that which allows the CR1000 program to compile faster. This only needs to be done once when the card is formatted. If you have the CR1000 update the card sector, the first CR1000 program compile with the card can take as long as 30 minutes. After that, compile times will be normal.
431
Section 8. Operation
Memory Card States
CardStatus
Card OK
CardBytesFree CompileResults
>0
>0
LED Status
Formatted card inserted, powered up.
No Card Present
• No Card
Present
• Card Not
Being Used
-1
>0
-1
-1
-1
-1
Compact Flash
Module not detected: CardOut not used.
CFM100/NL115 removed while logger is running (do not do this).
Program contains CardOut() or TableFile() with Option 64 . Card inserted before power up.
Powered up, no card present.
Card ejected / physically removed
Logger started without CFM100 / NL115.
Program contains CardOut() or TableFile() with Option 64 . CFM100/NL115 not attached at power up.
Initializing Table
Files!
-1 Solid orange
Dim / fast flashing orange
Program contains CardOut() or TableFile() with Option 64 . Card not present at power up.
Program contains CardOut() or TableFile() with Option 64 . 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.8.2 Data File Formats
Data file format options are available with the TableFile() instruction.
Time-series 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, 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
.
432
Section 8. Operation
33
34
35
64 2
17
18
19
32 1
13
14
15
16 1
9
10
11
12
0 1
7
8 1
5
6
3
4
1
2
TableFile()
Format
Option
TOA5
TOA5
TOA5
TOA5
TOA5
TOA5
TOA5
TOB1
TOB1
TOB1
TOB1
TOB1
TOB1
TOB1
TOA5
TableFile() Instruction Data File Formats
Base
File
Format
TOB1
Header
Information
Elements Included
Time
Stamp
Record
Number
CSIXML
CSIXML
CSIXML
CSIXML
CSIJSON
CSIJSON
CSIJSON
CSIJSON
TOB3
1 Formats compatible with datalogger support software
data-viewing and graphing utilities
2 See Writing High-Frequency Data to Memory Cards information on using option 64 .
for more
433
434
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>
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