CR6 OS 7
Updated: 18-10-2017

  1. (CRITICAL) Upgrading the Operating System could reset all CR6 settings back to the factory defaults. Sending this OS remotely is possible, but not recommended. To restore settings after the update, it is recommended that a backup be made of the current datalogger settings or take programmatic measures to ensure your settings can be restored. This can be done using the Device Configuration Utility Backup utility or the CRBasic instruction SetSetting()Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  2. (WARNING) Before updating the datalogger to this operating system, the user will need to install updated USB drivers for the CR6. Those new drivers are available in Device Configuration Utility version 2.16 (or greater). This software is available on the Campbell Scientific website.
  3. (WARNING) After upgrading the CR6-WiFi and CR6-RF451 to this version of the operating system, it is recommended that the user also update the operating system in the radio daughter card. This version of the CR6 operating system has been tested with version 3.1 of the WiFi daughter board and version 3.0 of the RF-451 daughter board. These operating systems have a *.iobj extension and are placed in the same directory as the CR6 operating system. Use the same procedure to load the WiFi or RF operating systems using Device Configuration Utility. Select Daughter Card Operating System Files (*iobj) from Files of type drop down.
  4. (WARNING) This operating system version (starting with operating system version 06.02), and all versions moving forward, will disable the datalogger FTP, Telnet, and Ping servers by default. Updating the operating system using the Send OS tab of Device Configuration Utility will revert all datalogger settings to factory defaults, and these services will be disabled. Sending the operating system as a program or by way of File Control will update the operating system but leave the FTP, Telnet, and Ping enabled settings intact. Note that disabling the FTP, Telnet, and Ping servers does not prevent the datalogger from acting as a client; the datalogger will continue to be able to use instructions such as FTPClient() and PingIP().
  5. Added support for SDI-12 specification version 1.4 when the datalogger is used as a sensor (SDI12SensorSetup() and SDI12SensorResponse()). The datalogger is SDI-12 standard version 1.3 compliant when used as a SDI-12 recorder.
  6. Added support for SNMP version 3 compliancy.
  7. Added support for CR6 revision 19 boards that include additional flash memory storage.
  8. TLS library changed from axTLS to mbedTLS in order to enhance security and work with modern cryptography features.
  9. lwIP libraries updated from to version 1 to version 2 in order to support SNMP version 3 and to further enhance and stabilize the datalogger TCP/IP stack.
  10. Changed the default username and password used by the datalogger FTP server. The new username and password are now both NULL. This change requires the user to set their own username and password (both required) in order to use the datalogger FTP server. Neither the username or the password can be blank. This change was made to better secure the datalogger FTP server against malicious attacks. This change does not affect the FTPClient() instruction.
  11. Added support for Remote Network Driver Interface Specification (RNDIS) to allow for Ethernet over USB communication. RNDIS allows users to access the datalogger via TCP/IP and the datalogger internal web pages via a USB cable.
  12. Added the MaxRun() instruction. MaxRun() is used to output the running maximum of a measurement.
  13. Added the Restart() instruction. Restart() is used to restart the program under program control.
  14. Added the SerialBrk() instruction. SerialRrk() is used to send a break signal with a specified duration to a serial port.
  15. Added the TCPsyc() instruction. TCPsyc() is used to measure one or more Peltier (Spanner) style thermocouple psychrometers (thermocouple attached either directly to a CR6 datalogger or via a relay multiplexer, such as the AM16/32B series, attached to a CR6 datalogger.
  16. Added the DataFilled field to the DataTableInfo table.
  17. Changed reset tables via the keyboard display to require first level security.
  18. Changed terminal sniff on Ethernet to show the entire Ethernet packet instead of just the first 54 bytes.
  19. Allow backspace when editing a hex value in terminal mode.
  20. Added TOACI1 option to TableFile() to support Ameriflux applications. This option uses bit 8 (256) for the file type and the 3 LSBs to determine the record, timestamp, and header combinations.
  21. Added support for GPS() with no PPS on the RS-232 port.
  22. Added append mode to Tablefile(). Append mode is activated by negating the Options parameter.
  23. Modified TCPClose(socket) to close and remove the socket handle immediately.
  24. Changed the CheckPort() instruction to return a Long instead of a Float.
  25. Changed the error message when an element of an array is assigned units. For example: Cannot assign units to Var(2), a singular element of an array, unless the element is aliased and the units are assigned to the alias name.
  26. Changed TableInfo.Tablefilled to not include the % sign in the string.
  27. Changed SDI12Recorder() when it receives an M command but has an array of > 9 values defined; the instruction should return a maximum of 9 values.
  28. Added an optional parameter called NewFileName to NewFile() to return the name of a new file found.
  29. Added a compile warning for SerialOpen() if the optional parameter CommsMode is set to invalid options.
  30. List the default DNS server last in the list so it is not tried first.
  31. CRBasic Sprintf() fixed to allow %% in the format string to output the % character.
  32. PakBusClock(PakBusAddr) changed so PakBusAddr can be a variable.
  33. Changed SerialIn(): if the timeout = 0 and the termination character/string is < 0 or a NULL string then it will record any characters in its buffer and then exit.
  34. ESSVariables(): enhanced the pre-compiler to flag an error if variables are declared as the wrong type or wrong dimensions.
  35. Changed GetDataRecord() and AcceptDataRecord() so that the DataInterval() declaration in the DataTable referenced can match the remote Datainterval() without flagging a compile error. This is useful if the remote DataInterval is shorter than the scan interval that GetDataRecord() is in. In other words, this change allows the DataInterval() declaration in the collector datalogger to specify the data interval in the remote without flagging a compile error due to its scan interval. A compile error will still occur if CallTable() rather than GetDataRecord() is populating the data table.
  36. Various fixes and adjustments made to make the PC CRBasic pre-compiler more robust and more verbose with warnings and error messages.
  37. Fixed various settings of type Boolean (BOOL4 and BOOL) that were not being set correctly via the SetSetting() instruction.
  38. Fixed EmailRelay() if the ServerResponse parameter is not a variable of type STRING.
  39. Fixed TableName.FieldName() when FieldName is a timestamp passed into a function as type string. The logger now allocates enough memory for the string instead of just the 8 bytes of the time stamp.
  40. Changed GetDataRecord() so that when the next collect data is issued the transaction number increments. This resolves a problem that could occur when a response came in late from the first command, but was assumed to be a response to the next command.
  41. Fixed EXP(Number) when Number is a type of DOUBLE.
  42. Fix double precision when using ABS().
  43. Fix double precision constant assignment when the expression is of type FLOAT.
  44. Fixed NetworkTimeProtcol() which could have had a 500 msec offset error.
  45. HTTPGet(): If neither Content-Length: nor Transfer-Encoding: chunked are in the header response from the server, chunked encoding is assumed.
  46. Fixed changing an encrypted program when changing the Constant Table values.
  47. Fixed User Functions and Subroutines with measurement in Sequential Mode. There was a potential of deadlock if called simultaneously from different sequences. The fix was to get the measurement semaphore prior to entering the function.
  48. Renew PPP timeout when we get a network packet in, else we will timeout in 31 minutes.
  49. Fixed timestamps for one record tables.
  50. Fixed setting a BOOLEAN in a Constant Table. Prior to this change, the timestamp would increment at every scan regardless of whether the table was updated or not.
  51. Fixed HTTP authorization prefix to URL (
  52. Fixed ModemCallback() result. This was broken in a previous operating system and was not returning the correct result.
  53. Fixed EmailRelay() when sending multiple files and/or to multiple to addresses. When there was a failure to write or receive, the commas were not restored to the variable for resending.
  54. Fixed a bug in the operating system when TimerInput() was used with U9 and USB. The TimerInput() instruction is a digital instruction and tied to the RS-232 capabilities of the Universal Channels. When the USB cable was disconnected or system power was cycled while the USB was connected, the TimerInput() instruction stopped working and the logger failed to control attached devices properly.
  55. Fixed an issue when looping through vibrating wire instructions when working with a sensor that does not have a thermistor measurement. The logger would not populate the array during the last trip through the loop.
  56. Fixed the keyboard display when displaying RS232Power to show correctly and not a value of 255 when set to True.
  57. Fixed the keyboard display when displaying floating point numbers greater than 2.0465E9.
  58. Fixed a memory leak when using PingIP().
  59. Fixed a memory lead when using EmailRelay().
  60. Fixed DNP()so that it correctly sets the baudrate for COMC1 to COMC4 (TX/RX pairs). Previous to this change, the Settings Editor would show that baudrate was set on these Com ports when it was not.
  61. Resolved an issue when using SerialOpen() with a SDM-SIO1A. Prior to this change, COMC3 was not being shut down properly which prevented it from being used in SDM communications.
  62. Fixed an issue with the Constant Table when setting the ApplyAndRestart field to -1 and the CRBasic program was encrypted. Prior to this fix, the program would fail to compile.
  63. Fixed an error when SerialClose() failed to close the communications port. Prior to this change the datalogger would still drive the TX line with -7 volts instead of returning the line to 0 volts.
  64. Fixed an issue with the Datalogger Web API command of /?command=NewestRecord&table=Settings.The issue was that all the Neighbors field was not being displayed correctly.
  65. Fixed SendData() when sending data from the Public table. The bug was that data was being transmitted from the DataTableInfo table instead of the Public table.
  66. Fixed an issue with FileClose() when files were open for 30 minutes. The datalogger no longer sets a timeout on files that are open and being written to from within the CRBasic program.
  67. Fixed an issue with SerialOutBlock() when the timeout was 0 (forever) that could cause the datalogger's running program to hang.
  68. Fixed an issue with SDI12Recorder() in both the main scan and a Slowsequence that caused the first SDI12Recorder() in the SlowSequence to be missed.