Campbell Scientific CR3000 CR3000 Micrologger - Page 214
Hex Pairs, Binary, SerialInBlock, SerialInRecord, As Long, Serial buffer, SerialOpen, Variable
View all Campbell Scientific CR3000 manuals
Add to My Manuals
Save this manual to your list of manuals |
Page 214 highlights
Section 7. Installation Example (humidity, temperature, and pressure sensor): SerialInString = "RH= 60.5 %RH T= 23.7 °C Tdf= 15.6 °C Td= 15.6 °C a= 13.0 g/m3 x= 11.1 g/kg Tw= 18.5 °C H2O= 17889 ppmV pw=17.81 hPa pws 29.43 hPa h= 52.3 kJ/kg dT= 8.1 °C" • Hex Pairs: Bytes are translated to hex pairs, consisting of digits 0 - 9 and letters a - f. Each pair describes a hexadecimal ASCII / ANSI code. Some codes translate to alpha-numeric values, others to symbols or non-printable control characters. Example (temperature sensor): SerialInString = "23 30 31 38 34 0D", 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 CR3000 uses Null terminated strings, so anytime a Null is received, a string is terminated. The termination is usually premature when reading binary data. To remedy this problem, the SerialInBlock() or SerialInRecord() instruction is required when reading binary data from the serial port buffer to a variable. The variable must be an array set As Long data type, as in, Dim SerialInString As Long 7.8.8.5.5 Memory Considerations Several points regarding memory should be considered when receiving and processing serial data. • Serial buffer: The serial port buffer, which is declared in the SerialOpen() instruction, must be large enough to hold all the data a device will send. The buffer holds the data for subsequent transfer to variables. Allocate extra memory to the buffer when needed, but recognize that added memory to the buffer reduces memory available for long term data storage. Note SerialInRecord() running in pipeline mode, with the number of bytes parameter = 0. For the digital measurement sequence to know how much room to allocate in the Scan() instruction buffers (default of 3), SerialInRecord() has to allocate itself the buffer size specified by SerialOpen() (default 10,000, an overkill), or default 3*10,000 = 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() needs to allocate itself only this many bytes instead of the number of bytes specified by SerialOpen()). • Variable declarations: Variables used to receive data from the serial buffer can be declared as Public or Dim. Declaring variables as Dim has the effect of consuming less telecommunications bandwidth. When public variables are viewed in software, the entire Public table is transferred at the update interval. If the Public table is large, telecommunications bandwidth can be taxed such that other data tables are not collected. 214