Resource Center

CR6 OS

Software applications, data logger operating systems, firmware, and drivers for Campbell Scientific products

CR6 OS

v14.5.1

This download is for the CR6 datalogger. Execution of this download places the current CR6 Operating System file(.obj) and WiFi, RF45x and RF4xx operating systems (iobj) on your computer. It also updates the CRBasic Editor compiler and support files. 

Why Update?   New features and bug fixes. With this OS update it is recommended that you also update the Device Configuration Utility to the most recent version so that new datalogger features are available in the utility.  

Note: Campbell Scientific always recommends updating operating systems on site if possible. When remote updates are required, it is recommended that you implement the necessary precautions to handle unexpected OS upload complications. All datalogger settings should be retained when updated remotely. If you choose to roll back to a previous operating system, the datalogger settings will be reset to default.

Watch the Video Tutorial: Sending an OS to a Local Datalogger.

Revision History

v14.5.1April 17, 2026
  • Major
    Fixed an issue introduced in OS CR1000X.8.5.0/CR6.14.5.0 where EmailRelay() could fail during table streaming due to incorrect time conversion when the datalogger was not set to UTC.
  • Major
    Fixed an issue introduced in OS CR1000X.8.5.0/CR6.14.5.0 where non-200 HTTP responses were not handled correctly during table streaming in EmailRelay(), HTTPPost(), and HTTPPut(), preventing response data from being written.
  • Major
    Fixed an issue where the measurement semaphore was not acquired for measurements in subroutines running in sequential mode (functions were not affected). Prior to this fix, background tasks could interfere with excitation and measurement timing.
  • Minor
    Fixed an issue introduced in OS CR1000X.8.5.0/CR6.14.5.0 where a mbedTLS configuration issue that was causing slower secure connections.
  • Minor
    Fixed WebSocket issue introduced in OS CR1000X.8.5.0/CR6.14.5.0.
v14.5.0February 12, 2026
  • New Feature
    Added LoggerEndian, CR_LITTLE_ENDIAN and CR_BIG_ENDIAN defined constants. See CRBasic Help for details.
  • New Feature
    Added UDPSocketOpen(), UDPSocketSend(), UDPSocketRecv(), and UDPSocketClose() to the CRBasic Instruction set. This function will allow protocols such as CoAP to operate over UDP. See the CRBasic help for details.
  • New Feature
    Added DNSQuery() to the CRBasic Instruction set. See the CRBasic help for details.
  • New Feature
    Added "DisableTcpDelayedAck" setting to control TCP delayed acknowledgements, improving performance for devices that experience delays due to interactions with Nagle’s Algorithm.
  • New Feature
    Added CommsMode 8 (TTL Half Duplex) to SerialOpen().
  • Major
    Fixed GOES settings corruption that could cause a factory reset.
  • Major
    Updated the servo mode control loop in NetworkTimeProtocol().
  • Major
    Fixed an issue with IPNetPower() that prevented the CELL2xx from entering a lower power state.
  • Major
    Improved server response handling in table streaming to prevent advancing past records when the server returns an error.
  • Major
    Updated the Mbed-TLS stack, enabling support for password-encrypted TLS private keys.
  • Minor
    Updated the MQTT command response to the public table.
  • Minor
    Improved the MQTT output trace in the terminal.
  • Minor
    Removed the trailing slash in the data loggers' MQTT state topic.
  • Minor
    Fixed an issue where TLS certificates specified in settings were applied to all internet clients using TLS, instead of only to the MQTTS client when mutual TLS authentication was enabled.
  • Minor
    Fixed setting of CampbellCloudEnable via SetSettings() or Settings.CampbellCloudEnable = 1.
  • Minor
    Fixed PCAP capture on the PPP interface and added directional information to distinguish sent and received packets.
  • Minor
    Added program line number the compiler is processing to the CR1000KD display screen.
  • Minor
    Improved the SFTP directory listing responce in FTPClient().
  • Minor
    Updated zlib to improve handling of gzip files, including web.obj.gz files.
  • Minor
    Improved WebSocket API efficiency, enhancing performance for RTMC screens and the built-in data loggers webpage's.
  • Minor
    Improved CPI communications when there are multiple unused modules on the BUS.
  • Minor
    Fixed an AvgRun() calculation error were including an extremely large Source value (> 1×10¹?) with smaller values could result in loss of precision.
  • Major
    Fixed an issue where TLS certificates specified in settings were applied to all internet clients using TLS, instead of only to the MQTTS client when mutual TLS authentication was enabled. IMPORTANT NOTE: (Only) If using TLS client certificates, ensure that MQTT Enable setting is Enable with TLS Mutual Authentication before deploying this OS update.
v14.4.0September 16, 2025
  • New Feature
    Added a built-in constant named is_CR1000Xe, which can be used within #IF statements to conditionally compiled code.
  • New Feature
    Added support for web.obj.gz files to automatically execute an embedded recipe.json when detected.
  • New Feature
    Added GOESAppend compile directive; see CRBasic help for details.
  • New Feature
    Added Base64Encode() instruction; see CRBasic help for details.
  • New Feature
    Added extra recovery mechanism for MQTT TLS Mutual Authentication failure.
  • New Feature
    MQTT publish now includes a publishing timestamp "publish_ts" in the payload for the GEOJSON format.
  • Major
    Updated the Real-Time Clock chip to assert the master reset line when voltage falls below 4.9 V, mitigating memory issues observed during brownout events.
  • Major
    Fixed memory allocation for MQTT during compile time. This resolved a potential "out of memory" compile error or a watchdog fault.
  • Minor
    Fixed IIF() to work with Type Double. This also fixed a potential "Pointer is out of bounds" compile error.
  • Minor
    Improved MQTT trace in terminal. It now includes PUBACK ID's.
v14.3.0July 28, 2025
  • (New Feature) Added a Basic JSON format to data streaming operations.

    • MQTTPublishTable() Output format 3 = BASICJSON
    • TableFile(), FTPClient(), HTTPPost(), HTTPPut() and, EmailRelay() Output format 36 = BASICJSON
  • (New Feature) Added a new setting FTPClientActivePort. This setting specifies the starting port the datalogger may use in Active FTP mode. It defines the lower bound of a block of 1000 consecutive TCP ports, which will be used for FTP data connections initiated by the datalogger. Each new data connection will use the next available port within this range.

    • Default value: 48000
    • Allowed range: 8000 to 48000
  • New Feature
    Added TableFieldNames() to the CRBasic Instruction list. Retrieves the name of a data table or one of its fields by index, enabling dynamic (at run time) identification of a DataTable and field names.
  • New Feature
    Added TableName.BytesPerRecord to return number of bytes in a DataTable record.
  • Major
    Refined the Operating System download process over MQTT.
  • Major
    Fixed an issue where heavy PPP traffic could overwhelm the system, causing the datalogger to drop outgoing packets. This sometimes led to missed LCP echo packets and unexpected connection closures, even when the link appeared healthy. Although the TCP layer would perform retries to prevent data loss, these retries significantly reduced data transfer rates.
  • Major
    Fixed watchdog resets caused by memory corruption due to TCP task queue buildup over slow data links, most commonly observed when RTMC projects were published on the datalogger.
  • Minor
    Fixed an issue where Implicit FTPS Active Mode incorrectly used reserved ports for data connections, leading to server rejections.
  • Minor
    A compile error is now triggered if FieldNames() contains a dot (.), and a warning is issued for other operator symbols; non-CRBasic-compliant field names will be deprecated and disallowed in a future update.
  • Minor
    The PakBus/TCP port (default 6785) is now restricted to PakBus traffic only; previously, if Telnet was enabled, the datalogger terminal could also be accessed on this port in addition to the standard Telnet port 23.
  • Minor
    When viewing the password settings via the CR1000KD, the value will now be displayed as '...' for security purposes.
  • Minor
    Modified GOES behavior for the TX325 to allow tables to be concatenated in a transmission.
  • Minor
    Improved handling of PPP flag bytes to ensure correct packet boundaries after a transmission error
  • Minor
    Lowered the TCP keepalive interval for FTPClient() command connections to prevent firewalls from closing them during long transfers. On slow links, the command connection can sit idle while data is still transferring, triggering idle timeouts.
  • Minor
    Temporarily provide access to MQTT v1 for units with a configured UID.
  • Minor
    Updated datalogger HTTP client to correctly handle absolute URLs in Location and Content-Location headers during redirection.
v14.2.1April 7, 2025
  • New Feature
    Added a self-hosted recovery webpage to the datalogger OS for uploading .obj and .web.obj.gz files to restore custom user interfaces. [ /recovery]
  • New Feature
    Added PING to the terminal commands.
  • New Feature
    MQTTPublishTable() will now send all unsent data ahead of OS update or program change, reducing potential data loss.
  • New Feature
    Added FieldClassify() to the CRBasic instruction set, providing additional support for MQTTPublishTable(). Refer to the CRBasic help for more information.
  • New Feature
    Added FieldOrigin() to the CRBasic instruction set, providing additional support for MQTTPublishTable(). Refer to the CRBasic help for more information.
  • (New Feature) Added the MQTT Auto-Publish Data option to the MQTT settings. This feature potentially simplifies the onboarding of existing datalogger applications to the Campbell Cloud without requiring program updates. Data Tables will automatically be published if the following conditions are met:

    • No Existing MQTTPublishTable(): The CRBasic program must not include any instances of the MQTTPublishTable() instruction.
    • Data Table with DataInterval(): The Data Table must utilize the DataInterval() instruction.
    • Data storage intervals less than 1 minute are excluded.
    • Data storage intervals between 1 minute and 10 minutes are published every 10 minutes.
    • Data storage intervals greater than 10 minutes are published at their defined interval.
  • New Feature
    Added an optional “Timeout” parameter to NetworkTimeProtocol().
    • Timeout = 0/Omitted: Default timeout is applied (75 seconds).
    • Timeout > 0: Acts as a timeout, specifying the maximum time the instruction will run before moving on.
    • Timeout < 0: The absolute value acts as a timeout and enables time servo mode. Time servo mode allows the datalogger to gradually adjust its clock to sync with the NTP server rather than making abrupt time changes. While this mode improves time tracking, accuracy is influenced by factors such as network latency and server variability.
      • Dependencies:
        • Execute the instruction every 2 to 5 minutes.
        • Set the "NTPMaxMSec" parameter to 1 second or less to maintain reliable synchronization.
  • Major
    Removed TLS cipher suites that do not support forward secrecy.
  • Major
    Fixed a memory leak in the MQTT process that occurred during reconnection events. This issue was observed when Cambell Cloud repeatedly rejected or dropped the communication link. This issue led to resource exhaustion over time, triggering the system to watchdog.
  • Major
    Fixed memory allocation issues in FTPClient() when using FTPS or SFTP put/get options. If a variable was used for the put/get option, insufficient memory was allocated. Conversely, negative values caused memory overallocation.
  • Major
    Improved session resumption and logging for FTPS.
  • Minor
    Fixed an issue were setting the "Timeout" parameters to 0 in client instruction may cause an infinite wait time. A value of 0 is now interpreted as the default timeout of 75 seconds.
  • Major
    Fixed a memory leak issues when Campbell Cloud certificates rotate.
  • Minor
    Fixed an issue where the CR1000X datalogger republished all data from the microSD card to the MQTT broker after an OS update.
  • Minor
    Enhanced MQTTPublish() to handle arrays. The payload parameter now accepts elements from a string array, and the return value can be stored in an array.
  • Minor
    Fixed an issue in sequential mode where a subroutine containing measurements, when called from a slow sequence, could cause the slow sequence to lock up due to incorrect handling of analog power control.
  • Minor
    RTMC projects published to a datalogger now take priority over default web pages by lowering the priority of the default web pages. This fix was originally implemented in a previous version, but the issue was reintroduced in version 8.0.
  • Minor
    Fixed an issue with MQTTPublishTable() that caused data to be published every other interval when the scan, data, and publish intervals were identical. Prior to the fix, no data was lost, as any missed data was included in the next successful publish.
  • Minor
    Fixed a formatted print buffer overwrite. This improved operations such as the data logger’s terminal output and logging IP Trace info.
  • Minor
    Fixed an API call issue that caused the TableDisplay page to not load.
  • Minor
    Fixed an issue where the MQTT command response incorrectly reported "File upload succeeded" when a file upload via MQTT command and control failed. The response now correctly states "File upload failed" on failure.
  • Minor
    Fixed Invalid JSON responses across several settings when requested via MQTT.
  • Minor
    Fixed a TLS memory allocation that caused an infinite reboot loop and over-allocated TLS memory when CRBasic functions requiring TLS were called within subroutines or functions.
  • Minor
    The "FileName" parameter in NewFile() can now accept a variable of type string.
  • Minor
    Fixed a CPI buss data shift issue.
  • Minor
    Fixed an issue were setting the "Timeout" parameters to 0 in client instruction may cause an infinite wait time. A value of 0 is now interpreted as the default timeout of 75 seconds. 1811
v14.01September 26, 2024
  • New Feature
    CRITICAL – See Revision notes for OS version CR6 14.00.
  • Minor
    Corrected the handling of millisecond units for TimeIntoInterval in MQTTPublishTable()
  • Minor
    Fixed an issue where rotating TLS certificates for Campbell Cloud caused the data logger to miss a byte of data on the COMC port due to port unnecessary being reconfigured.
v14.00September 12, 2024
  • New Feature
    CRITICAL - The data logger's UID (unique identifier) is now utilized for enhancing security. a) When Factory Defaults are applied: i) PakBus Encryption key is assigned to the UID. ii) An HTTP user account is created (user: admin, password: UID). iii) WiFi defaults to “Create a Network” mode with the password set to the UID. iv) The FTP service is disabled, and the password is set to the UID. b) If your device does not have a UID the above changes will not apply. c) The UID is set during the manufacturing process. If your device does not have a UID you may obtain one by contacting Campbell Scientific.
  • New Feature
    Added "USB Port Not Trusted" setting. The default is '0' (Trusted), allowing connections on the USB port without requiring PakBus encryption.
  • New Feature
    Added "USB Disable" setting. Default is '0' (USB port active). Set to '1' (Disable) to deactivate the port, which will take effect after a datalogger reboot.
  • New Feature
    Added support for the CR1000Xe.
  • New Feature
    Added the ability for "SFTPPrivateKey" and "SFTPPublicKey" to be set with the CRBasic instruction SetSetting().
  • New Feature
    Added an optional parameter "StdDevType" to StdDevRun(). See CRBasic help for details.
  • New Feature
    Added the ability to initialize an array with all the same values when declared. For example, Public array(50) as Boolean = True, or Public array(50) = 10.
  • New Feature
    Added two additional communication port configurations for SerialOpen(). a) Option 6 RS-485 Tx Only - In this configuration the transceiver is left on so the A(-) and B(+) idle in a marking state (logical '1'). b) Option 7 RS-422 - This configuration is full-duplex and the transceiver for the transmit pair is left on. The transmit pair A(-) and B(+) idle in a marking state (logical '1').
  • Major
    Updated the LWIP stack.
  • Major
    Fixed a condition when a watchdog timer IP Panic pbuf_free: p->ref > 0 triggered.
  • Major
    Fixed a ComRS232-specific serial data overrun issue that manifested during intense PPP sessions.
  • Major
    Fixed an intermittent watchdog that could be generated when connecting to an On-and-off MQTT broker.
  • Major
    MQTT tasks now detect an unopened TCP/IP socket and initiate primary retries immediately, without waiting for the keep-alive timeout to expire.
  • Minor
    Fixed an uncommon watchdog event triggered when an attached Volt108/116 has intermittent power.
  • Minor
    Resolved a potential memory allocation issue on the Miro SD card that could arise when the "Delete CardOut files if CardOut data table mismatch" setting is enabled.
  • Minor
    Addressed communication issues with the SDM-SIO1A/SIO4/SIO2R, resolving the associated flush events that affected the adjacent channel's input and output buffers.
  • Minor
    Resolved a compile error that occurred when using SemaphoreGet(4).
  • Minor
    Fixed an issue where an unintended null byte was being appended to the payload message in MQTTPublish().
  • Minor
    Fixed the terminal watch for outbound HTTP traffic in the IPTrace > HTTP option.
  • Minor
    Fixed an erroneous ApplyAndRestartSequence CRBasic compile error.
  • Minor
    Added a compiler check for out-of-bounds errors in aliased array elements used during measurement repetitions.
  • Minor
    Resolved the issue allowing the publish MQTT statusInfo topic to be disabled.
  • Minor
    Fixed a problem where the MQTT publishing rate might slow down because of timeouts waiting for an ACK.
  • Minor
    Updated the syntax for accessing DataTable structures using FieldNames(): TableName.FieldName_StructureMemberName.
v13.02March 19, 2024
  • Major
    Fixed the CRAM-MD5 authentication process within SMTP, exclusively influencing the EmailSend() function. It's important to note that this adjustment does not relate to EmailRelay().
v13.01December 15, 2023
  • Minor
    Multiple bug fixes for websocket behavior. a)When a structure is freed it is not used erroneously. b)"queues_active" now behaves as it should.
  • Minor
    Fixed error when parsing output names with constants for Flux systems using Covariance() instruction.
  • Minor
    Fixed SpiRead() not waiting for bytes to transfer after first occurrence.
  • Minor
    Fixed 1200 baud rate format for MeteoSat/EuroSat data instructions.
v13.00November 16, 2023
  • New Feature
    Added a find file option to the "NewFileVar" parameter of NewFile(). See the CRBasic help for details.
  • New Feature
    Added result codes to CPIFileSend(). See the CRBasic help for details.
  • New Feature
    Added MQTTPublish() to the CRBasic instruction set.
  • New Feature
    Added SDMSIO2R() to the available CRBasic instructions. This controls the relays on the SDM-SIO2R device.
  • New Feature
    The .csipasswd file must be updated with Device Configuration Utility. The data logger will no longer accept .csipasswd files sent with web API commands or from the RTMC Web Publisher. Clients using the RTMC Web Publisher to publish directly to a datalogger must now configure the .csipasswd with Device Configuration Utility.
  • New Feature
    ClockSet() now supports a structure as the source parameter.
  • New Feature
    Added an optional parameter to BrHalf4W() to return the voltage of V1.
  • New Feature
    Added an optional parameter to CDM_BrHalf4W() to return the voltage of V1. Volt100 Series must also be running an OS built after 9/1/22.
  • New Feature
    Added an optional parameter to BrFull6W() to return the voltage of V1.
  • New Feature
    Added an optional parameter to CDM_BrFull6W() to return the voltage of V1. Volt100 Series must also be running an OS built after 9/1/22.
  • New Feature
    Added #undef to allow reuse of constants at compile time.
  • New Feature
    Added IncludeSection() to the available CRBasic instructions.
  • New Feature
    Added optional parameters to AvgRun() which allow its use in a function or subroutine.
  • New Feature
    Added optional parameters to MaxRun() which allow its use in a function or subroutine.
  • New Feature
    Added optional parameters to MinRun() which allow its use in a function or subroutine.
  • New Feature
    Added StdDevRun() to the CRBasic instruction set.
  • New Feature
    Improved Status.ProgSignature to account for changes to Include files when calculating the unique signature value.
  • New Feature
    The WatchdogTimer() instruction can now output the remaining time until the expiration of the last programmed interval.
  • New Feature
    Added a "MQTT Auto-Publish Data" setting to the MQTT settings.
  • New Feature
    Added the ability to send a web.obj.gz file that contains a CRBasic program, and several Include files to a selected drive (CPU, USR, CRD). For example, cpu.web.obj.gz. This allows a data logger to easily extract a main CRBasic program and multiple include files from one web.obj.gz file.
  • New Feature
    Added SortSpaIndexed() to the CRBasic instruction set.
  • Minor
    Fixed the output array of WindVector() when repetitions are used, ensuring coherence between the data and labels.
  • Minor
    Fixed the transmit time offset when Line SHEF format is used in GOESTable().
  • Minor
    ModbusClient() will wait to receive a response through its sequence mailbox, rather than utilizing polling.
  • Minor
    Fixed 'Dim' declared structures no longer appear as 'Public'.
  • Minor
    Fixed a timeout issue when the Logger is the FTP server and large files are being moved over a slow communication link.
  • Minor
    To handle NAN inputs, the SIN, COS, and TAN functions now return NAN.
  • Minor
    Fixed an intermittent Modbus data gap when an SDM-SIO1A/SIO4A port is used.
  • Minor
    Fixed the issue with the control ports state when using the "stop program and retain data" option. The control ports now return to the default state. This means PWM will stop driving and output ports are changed to inputs.
  • Minor
    PWM() now checks for a 0 or 1 in the duty cycle parameter.
  • Minor
    Fixed a rare intermittent data spike in measurements, which was observed in a single known application, by addressing the presence of fast measurements that consumed nearly the entire scan duration.
  • Minor
    DNS changed to try IPV4 first before IPV6.
  • Minor
    If the MQTT State is in the “Connection retry wait” mode the retry event will take place at a set interval of 6015820mS (~100 minutes) or when MQTTConnect() is called in a CRBasic program.
  • Minor
    Fixed the extra records returned by the HTTP response to the data query API commands.
  • Minor
    Optimized the reconnection process for PakBusTCP Clients when connection drops occur in resource-intensive applications.
  • Minor
    Fixed a MQTT memory leak that occurred when a connection to a broker failed.
  • Minor
    When the SerilInChk() is executed all the buffered data in the comport minion will be processed.
  • Minor
    When a framing error is detected on the CPI bus the measurements returned from the CDM device will be NAN.
  • Minor
    Fixed using a Const in StationName().
  • New Feature
    Added support for the CR6-RF452
  • Major
    Fixed an issue that causes CR6 data loggers with integrated radio modules to become unresponsive after applying a changed radio setting and a data logger setting at the same time. A data logger reboot is required to restore communication.
v12.02March 6, 2023
  • Major
    Fixed longevity of the TX325/TX326 EEPROM by eliminating unnecessary writing during the setting of DCP addresses for GOES transmissions.
  • Major
    Fixed setting the output power on the TX325/TX326. The data logger now only resets the power level setting when there is a difference between the current setting in the transmitter and the desired setting.
  • Minor
    Fixed NTCIP globalTime to prevent adjustment during daylight saving time.
v12.01September 28, 2022
  • Minor
    Removed Default DNS address (208.67.222.222) to improve data logger network security.
  • Minor
    Removed the “Server:” line in the HTTP header response to improve data logger network security.
  • Minor
    Fixed a rare case where the serial port used for communications would revert to the default setting.
  • Minor
    Fixed an initialization error condition after ApplyAndRestart is triggered for constants declared as type Boolean in a ConstTable().
  • Minor
    RTMC projects published to a datalogger will now be displayed before the data logger default web pages. The memory drive for the default data logger web pages was given a lower priority.
  • Minor
    Changed when the OS checks the busy status of the micro SD card. The check is now performed before a write not after. This change lowers the power consumption when using Centon micro SD cards.
v12.00May 17, 2022
  • New Feature
    Added GOESAntennaGain setting to allow the GOES antenna gain to be read and set when using a TX325/326.
  • New Feature
    ModbusMaster() has been renamed to ModbusClient(). Existing programs that use ModbusMaster() will continue to work. This change was made to support the Modbus Organization Board of Trustee’s efforts to remove inappropriate language from its query/response protocol paradigm. https://www.modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf
  • New Feature
    ModbusSlave() has been renamed to ModbusServer(). Existing programs that use ModbusSlave() will continue to work. This change was made to support the Modbus Organization Board of Trustee’s efforts to remove inappropriate language from its query/response protocol paradigm. https://www.modbus.org/docs/Client-ServerPR-07-2020-final.docx.pdf
  • New Feature
    Added MQTTState to settings. A Device Configuration Utility update is required to expose the new setting in the MQTT tab.
  • New Feature
    Added CSAT3B capability to make simultaneous CPI measurements with filters.
  • New Feature
    SplitStr() now supports a defined StuctureType as an output.
  • Major
    Fixed GetDataRecord() with other data logger types. This issue was introduced in OS version CR6.Std.11.00.
  • Major
    Fixed a memory leak for the web API data query.
  • Minor
    Fixed an error where the ModbusClient() instruction sent duplicate data when using Modbus function 6 (Write Single Register).
  • Minor
    Fixed a compile error for MoveBytes() that occurred when a space was used between the function name and the opening "(". This error only occurred if pointers were passed in the MoveBytes() parameters.
  • Minor
    Fixed the GOES header for pseudo-binary transmission to include the required tick character. This only affected the TX325/326.
  • Minor
    GOES self-timed transmissions can now be greater than 1 hour. This only affected the TX325/326.
  • Minor
    GOES self-timed transmissions now respect the data logger UTC offset setting. This only affected the TX325/326.
  • Minor
    Fixed SDI12SensorResponse() instruction’s response to the Identify commands to comply with the SDI-12 Version 1.4 specification.
  • Minor
    Added a compile error to catch lines in the program that contains several "------" or "++++++" without formatting them as a comment.
  • Minor
    Improved MQTT implementation.
  • Minor
    Improved HTTP data output to handle multiple connections and rapid queries.
  • Minor
    Improved TCP communications with heavy loads.
  • Minor
    Fixed more than two concurrent PakBus clients collecting tables with records larger than one PakBus packet.
  • Minor
    Improved handling of malformed communications packets between the data logger and the RV50. This was observed when using the LoggerLink app on an iOS device.
  • Minor
    Fixed the wait time for the HAYES modem protocol. The data logger now waits 1.2 seconds instead of 0.5 seconds after +++ is sent for the modem hang-up sequence.
  • Minor
    DNP3 now supports more than 250 analog input values.
  • Minor
    Fixed a compiler crash that occurred when calling a function without parameters.
  • Minor
    Fixed the condition where NANs were not excluded from the StdDevSpa() instruction result.
  • Minor
    Fixed a "Watchdog Timer Minion Signature Ux Triggered" caused by SerialOpen().
  • Minor
    Fixed CDM instructions failing to execute in nested subroutines.
  • Minor
    Fixed overwriting an existing file when the file is opened using FileOpen() and the mode parameter set to option "a".
  • Minor
    Added a compiler check to generate an error if a string is used for the "SplitOption" in SplitStr(). "SplitOption" is an integer value.
  • Minor
    Added a compiler check to generate an error if a function name is equal to a declared Public variable.
  • Minor
    Fixed FTPClient() to properly handle a 550 response from a server. Before this change, the data logger failed to create a file on some FTP servers if the file was not already present and the "PutGetOption" parameter was set to append with a negative FileOption parameter setting (example, -1008).
  • Minor
    Fixed the "DisableVar" parameter in DataTable() instructions to handle referencing a value from a table.
  • Minor
    Fixed an SDM addressing issue when an SDM-SIO1A is set to address 8 and an SDM-CD16AC is set to address 0 on the same bus.
  • Minor
    Improved FieldNames() to work with a variable as a defined StuctureType.
  • Minor
    Fixed an issue in the timeout parameter for TCP client instructions, such as HTTPGet(),HTTPOut(),HTTPPost(),HTTPPut(), FTPClient(), and EmailRelay(). In a rare case, the timeout parameter would not be applied when client instruction used a DNS address to the server and the server was offline.
  • Minor
    Fixed SerialBrk() over RS-485.
v11.02January 28, 2022
  • New Feature
    Change was made to be compatible with additional microcontroller types. CR6 units with Serial Numbers greater than 19000 must use OS version 11.02 or greater.
v11.01May 24, 2021
  • Major
    PakBus WebSocket’s are now enabled only when the Enable Setting is True and the PakBus URL is set.
  • Minor
    Fixed a minion watchdog by improving interrupt handling. These Watchdogs can occur if there are comport configuration conflicts between the data logger settings and the running program.
  • Minor
    Fixed a potential watchdog event that can occur when using HTTP to list files when data logger memory resources are low.
  • Minor
    ARP messages are now transmitted correctly to improve static address mapping on a network. CR6-WIFI only: This also requires the WIFI card to be updated with CR6-WIFI.05.02.iobj.
  • Minor
    GOES channel can now be set to a value up to 566.
  • Minor
    Fixed a VibratingWire() CRBasic PC pre-compiler crash when the begin and end frequencies are a constant.
  • Minor
    The delete all option in FileManage() now clears out the cashed buffers to make sure the directory and FAT information is current. This fixed a rare condition where the delete all incorrectly reported the presence of files that no longer existed.
  • Minor
    Improve MQTT sensor talk-thru to parse sensor output before publishing to ensure proper JSON is returned in the response (i.e., JSON special characters are properly escaped).
v11.00March 3, 2021 Download this revision
  • New Feature
    MQTT is now supported.
  • New Feature
    Structures are now supported with StructureType/EndStructureType.
  • New Feature
    The CPIStatus table now displays CDM OS versions.
  • New Feature
    PortBridge() now supports the SDM-SIO1A and the SDM-SIO4A.
  • New Feature
    USB Configuration setting. This controls USB enumerating as a virtual comport and a virtual ethernet port (RNDIS) or a virtual comport only.
  • New Feature
    The terminal 'F' command now displays predefined constants as well as setting names.
  • New Feature
    The data logger now accepts a default program with. DLD or .CRB file extensions.
  • New Feature
    SFTP key authentication is supported with pem formatted Public and Private keys.
  • Major
    Settings of Type String are updated correctly when using SetSetting(). For example, SetSetting(“IPAddressEth”,”192.168.1.1”). In previous OS versions, string settings were only updated when the fist character of the string was changed, or after factory defaults were applied.
  • Major
    Updated SMSSend() to handle arrays. Warning - This update changed how SMSSend() was implemented in the operating system. Upgrading to this OS will also require the CRBasic programs running old instances of SMSSend() to be updated.
  • Major
    Improved streaming options in HTTPPost().
  • Major
    The CommsMode option is set correctly when SerialOpen() is placed between BeginProg and Scan. Prior to this change the CommsMode state would alternate between RS485 and Not Configured on subsequent program restarts.
  • Major
    Before creating a Wi-Fi host network, the data logger now checks for an existing network with the same SSID. If a network with the same SSID as the data logger already exists, the data logger will not create a host network.
  • Major
    The first GOES self-timed transmission now transmits when expected.
  • Major
    Added format option 0 to GOESTable() to allow for the pseudo-binary use of FP2 data. This change matches the data output that was available in format option 0 of GOESData() used in older Campbell Scientific GOES/METEOSAT radios.
  • Minor
    Improved Ethernet communication speeds with an RV50/RV50x.
  • Minor
    PortBridge() was updated to prevent a memory leak that could occur if a TCP connection handle was specified for one of the bridge ports, but the TCP connection was not successful.
  • Minor
    CRBasic now flags an error if a *, \, /, mod operator is used with a variable of Type String.
  • Minor
    CRBasic now checks for divide by zero errors.
  • Minor
    Files with a wild card name are uploaded correctly by LoggerNet scheduled file collection.
  • Minor
    WaitDigTrig() flags a compile error if it is declared inside a loop within a Scan.
  • Minor
    A variable of Type Double can now be aliased.
  • Minor
    The compiler was updated to allow spaces in Alias() array declarations.
  • Minor
    The compiler was updated to generate an error when quotes are used to declare an Alias. Example: Alias V = “newName” (error), Alias V = newName (correct).
  • Minor
    The size of an array index is set to the expected value when an expression uses constants of Type Long. For example: Const A as Long = 1, Const B as Long = 2, myArray(A+B).
  • Minor
    Replace() performs boundary checks correctly on strings larger than 24 bytes.
  • Minor
    Encryption() with option 0 returns the correct length of the original input.
  • Minor
    TOA5 format options in TableFile() display "NAN" instead of null for floating point numbers.
  • Minor
    Settings are retained when updating the datalogger OS using a web.obj.gz file.
  • Minor
    PWM() allows the Period parameter to be a variable of Type Float.
  • Minor
    Double-precision now uses a maximum resolution of 15 digits instead of 14.
  • Minor
    Improved CDM module support.
  • Minor
    ModbusSlave() now outputs the correct response to a function 6 command.
  • Minor
    SetSetting() now sets and reads the RadioNetID setting for the CR6-RF407.
  • Minor
    Move() now works with multidimensional arrays in a loop.
  • Minor
    The data logger Station Name setting does not accept slash characters.
  • Minor
    VibratingWire() now allows the begin and end frequency parameters to be variables. When variables are used the program will compile in SequentialMode.
  • Minor
    Case statements now evaluate a floating-point NAN.
  • Minor
    For GOES Table output, the “/” placeholder character now works as expected when using decimation.
  • Minor
    For GOES Table output containing historical values (Number of Values > 1) and using decimation, the most recent readings are now included.
  • Minor
    GOES Table format option 3, ASCII Comma separated, now includes the trailing comma after the end of each line.
  • Minor
    FTPClient() no longer waits until a new record is recorded before sending data when using values less than 0 in the NumRecs/TimeIntoInterval and Interval parameters.
  • New Feature
    FTPClient() now supports pem formatted Public and Private keys for SFTP connections.
  • Minor
    Fixed a brownout condition that could cause a minion processor to get stuck in a low power state. Symptom was a minion fault error appearing in compile results after recovering from the brownout condition.
v10.02March 31, 2020
  • Major
    GOESTable() now supports format option 0 (zero),pseudo-binary FP2, in order to match format option 0 of the GOESData() instruction used in older Campbell Scientific GOES/METEOSAT radios.
  • Minor
    GOESTable() format option 1 (one) no longer outputs extra spaces after the comma.
  • Minor
    Fixed setting Boolean values via the keyboard display.
  • Minor
    Exiting the terminal talk through (‘P’ command) now leaves the communication port open and retains the mode set in SerialOpen().
  • Minor
    GetRecord() now works correctly when passing a variable into the RecsBack parameter while using an optional format parameter.
v10.01March 4, 2020
  • New Feature
    Added support for the TX326.
  • Major
    TableFile() now works when then Interval parameter is greater than 1 hour. Introduced in OS CR6.Std.10.00 and CR1000X.Std.04.00 TableFile() would not generate an output file if the interval was greater than 1 hour.
  • Minor
    Improved double-precision floating-point Math.
  • New Feature
    Added support for the TX326 - Satellite Transmitter for Meteosat.
  • Major
    TableFile() now works when the Interval parameter is greater than 1 hour. Introduced in OS CR6.Std.10.00 and CR1000X.Std.04.00 TableFile() would not generate an output file if the interval was greater than 1 hour.
v10.00February 27, 2020
  • New Feature
    Added support for the TX325 satellite transmitter.
  • New Feature
    CPIStatus now reports the CDM OS version in the ModuleInfo() array when used with CDM_VW300/VWIRE305 OS 6 or newer, or CDM_A100/VOLT116 OS 7 or greater, or TEMP120 OS 2 or greater. There is no requirement for the CDM or datalogger OS to be updated or matched, unless a customer wants to see the CDM OS version. If either the datalogger or CDM OS does not have this update, the OS information is just ignored (not reported in CPIStatus).
  • New Feature
    CDM_VW300Config() now allows the Device Type parameter to be specified as either 2 or VWIRE305. Prior to this change, only VWIRE305 was valid.
  • New Feature
    Added WatchdogTimer() function that allows a user-programmed watchdog timer to be enabled.
  • New Feature
    DNS settings now allow IPv6 addresses. Requires Device Configuration Utility 2.23 or greater.
  • New Feature
    The data logger IP stack now fully supports IPv6.
  • New Feature
    The data logger now supports VJ TCP/IP Header Compression for compatibility with the RV50 firmware v4.11 and newer.
  • New Feature
    Added Tablename.TableBytes functionality. This special field, TableBytes, will return the allocated size for a table on a card (or the CPU if a card is not used or not inserted). EXAMPLE: Tbytes = Test.TableBytes, Tsize = Test.TableSize, Recsize = Tbytes /Tsize.
  • Major
    Fixed IP Panic watchdogs observed on busy networks and process intensive data logger programs. Increased memory for communication event handling.
  • Major
    Corrected Ethernet network ceasing operation. This was observed on 10Mbps networks when attempting to send significant amounts of data rapidly, often with the RV50 modem.
  • Minor
    Implicit FTPS (FTP via TLS) now works as expected with port 990.
  • Minor
    FTPS (FTP via TLS) now works correctly when running in a Slow Sequence.
  • Minor
    A compile error is now generated if there is a PPP conflict with CPI on COMRS232.
  • Minor
    Therm107(), Therm108(), and Therm109() functions now compile correctly when repetitions are used with excitation channels other than VX1.
  • Minor
    Connect Screen, send Program Table Fill Times are now reported correctly when a program is resent with a different Scan rate, and no other modifications.
  • Minor
    The TCPOpen() optional timeout parameter can now be specified as ,, or as 0 for the default.
  • Minor
    The Field Name in Tablename.FieldName can now be declared as a constant. Note that Table Name could already be declared as a constant.
  • Minor
    Modified SDM operation to resolve skipped scans generated by SDM communications failures.
  • Minor
    Improved timing for the SDM-IO16.
  • Minor
    Added the ability to detect and recover from lost communications to an SDM-SIO1.
  • Minor
    Improved quiescent power drain for scans (~250mS) or faster.
  • Minor
    Improved configuring control ports for serial communications operation.
  • Minor
    SerialOpen() modified to configure the hardware port upon executing the SerialOpen() instruction. Previously, the presence of the instruction enabled the port prior to program execution. This change reduces power consumption.
  • Minor
    Improved CELL2XX PPP throughput.
  • Minor
    TableFile() now uses the correct timestamp when used with DataInterval() and GetDataRecord().
  • Minor
    SDI-12 Terminal Mode now waits 2 seconds instead of 1 second for a sensor response.
  • Minor
    LoggerNet file retrieval now works correctly with a wild card name when scheduled data collection is also enabled in LoggerNet.
  • Minor
    WaitDigTrig() now works correctly in Slow Sequences.
  • Minor
    A compile error now occurs if WaitDigTrig() is used inside a loop within a Scan.
  • Minor
    The CELL2xx PPP reset now works correctly on power up.
  • Minor
    MenuPick() with constants now works correctly.
  • Minor
    Improved retention of data logger settings when updating operating systems.
  • Minor
    Improved CPI communications to CDM peripherals.
  • Minor
    Improved SDI-12 v.1.4 compliance for the high-volume binary command per the verifier.
  • Minor
    Improved operations of DataEvent() storage to an external card when removing the card during an event.
  • Minor
    Improved operation of double-precision expressions.
  • New Feature
    Added support for the TX325 - Satellite Transmitter for GOES.
v9.02April 22, 2019
  • New Feature
    Added support for VWIRE 305, VOLT 116, VOLT 108, TEMP 120.
  • New Feature
    Added an optional count parameter to AvgRun() that returns the actual number of values used to calculate the running average. The actual number of values used may be different than the number specified for the calculation due to NAN values in the buffer of historical data.
  • Major
    The CR6/CR1000x Datalogger no longer watchdogs when receiving DHCP packets larger than 500 bytes when the datalogger is the DHCP server. This change improves communication reliability over the RNDIS port and the integrated WIFI option when configured to create a network.
  • Major
    The memory allocated for the CPU no logger gets corrupted when a task interrupt occurs during the write process of a watchdog file.
  • Major
    PPP will now properly restart when the PPP state in the data logger shows “User interrupt”.
  • Minor
    The CR6 Datalogger ReadIO() now reads all U channels as expected. Prior to this change U9-U12 failed to read.
  • Minor
    The CR6 Datalogger now generates the expected compile error when SDI12Recorder() and PulseCount() instructions are programed on the same channel pair.
v9.01March 13, 2019
  • Major
    Fixed an issue that could corrupt the CR6/CR1000x Datalogger settings when updating the operating system using File Control or the Device Configuration Manage OS. Prior to this fix the issue could occur if 1) the running program was not stopped, and 2) the delete data option was not selected, before updating the operating system.
  • Minor
    The terminal mode in the datalogger web interface now works as expected.
v9.00January 31, 2019
  • New Feature
    Added support for Campbell Scientific external CELL2xx modem.
  • New Feature
    Added "Trusted Hosts" setting that allows the user to specify up to 4 trusted IP addresses or IP address ranges. An IP address outside of the trusted host list will not be allowed to connect.
  • New Feature
    Added TCPActiveConnections() which can be used to monitor information about TCP connections on a specified port.
  • New Feature
    Matrix() now allows the third parameter (B) to equal 0 for the Transpose and Invert options (options 4 and 5) that do not use the B parameter.
  • New Feature
    The Const declaration can now be an array of bytes signaled by a comma separated list of bytes enclosed by {}; For example: Const A = {1,2,3,4,5,6,7,0,9,10}, SerialOutBlock(ComRS232,A,10).
  • New Feature
    MoveBytes() now has an optional parameter(Transfer) to handle endian byte swapping.
  • New Feature
    GPS() now allows the result variable array to be of type Double. This supports GPS units with higher-precision latitude and longitude.
  • New Feature
    IPNetPower() now supports the CELL2xx external modem (interface 5).
  • New Feature
    UDPDataGram() is now able to receive from multiple clients.
  • New Feature
    IPRoute() now has the ability to set the default network. To set the default network, the IPAddr parameter must be set to empty quotes (“”).
  • New Feature
    Maximum number of ESS subsurface sensors increased from 10 to 20.
  • Major
    The Setting “RadioEnabled” was changed to “RadioEnable” for the CR6-RF451 version. Warning This OS will require you to change your datalogger program to match the setting name if it contains SetSetting(“RadioEnabled”,1) or settings.RadioEnabled. The “d” was dropped in the name and compile error will be generated with the old name.
  • Major
    The MaxNumBytes (bytes allocated to buffering) now calculates memory for Dim variables correctly. Prior to this change, Dim variables allocated six times more memory than needed (same as Public variables). Large programs with many Dim variables may have generated OUT OF MEMORY errors in the compile results.
  • Minor
    ScanTime now updates correctly when a single scan is missed due to a low12V condition.
  • Minor
    EmailRelay() now allows attachment names to be a constant or a variable.
  • Minor
    Storage to extended memory on CR6 dataloggers (serial number 7502 or greater) now works correctly when less than a sector is auto-allocated to internal RAM.
  • Minor
    ModBusSlave() function 6 now sets a single register correctly.
  • Minor
    SDI12Recorder() now sends the command after the break as expected. The symptom of this error was excessive retries in the SDI-12 communication log.
  • Minor
    SerialOpen() format options now correctly set the parity bit for ComME.
  • Minor
    SerialOpen() does not alter the ComPort configuration that was set by Device Configuration Utility unless the optional CommsMode parameter is used.
  • Minor
    The optional PCAP interface now filters as expected.
  • Minor
    Duplicate measurement instructions are now allowed in stacked scans. An example of stacked scans is a program that contains a pre-scan with a set number of scan counts. Once the pre-scan count is reached, the program will execute the main scan.
  • Minor
    A function referenced without parentheses now behaves like a variable that holds the last value returned by the function.
  • Minor
    CPI now works correctly with slow sequences in sequential mode. This resolves an issue that caused skipped scans and CDM frame errors with programs that have multiple scans and slow sequences.
  • Minor
    Table auto-allocation now works correctly in the case that both a slow (e.g., 1 day) table and a fast (e.g., 20 mS) table are both auto-allocated. The problem was the calculated fill time was less than the output interval of the slow table and this resulted in running out of memory.
  • Minor
    CPI Status now reports unused modules correctly, instead of reporting ‘Wait Config’.
  • Minor
    SW12() no longer forces sequential mode if the PipeLineMode() instruction is used.
  • Minor
    The read pointer in internal memory for CardOut() is now established correctly on program start up after a power cycle. The issue only occurred for data tables that were sized to 20 records or smaller and contained a CardOut() instruction. In this case, if power was lost during program run time data on the card could be corrupted.
  • Minor
    The skipped-scan counter now includes scans skipped due to insufficient power to the datalogger.
  • Minor
    OmniSatData(), OmniSatRandomSetup(), OmniSatStatus(), OmniSatSTSetup() now work with the OmniSat-3.
  • Minor
    Web API File control option 9 now works with a file name containing WEB.obj.gz.
v8.00June 27, 2018
  • (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.
  • (WARNING) If updating the dataloggers operating system from a version prior to 7.0, 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.
  • (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 4.0 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. If the version of the WiFi OS is older than 3.01 you need to install 3.01(included) prior to installing 4.0.
  • (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().
  • New Feature
    Added SDI-12 Version 1.4 support to SDI12Recorder() and SDI12SensorSetUp().
  • New Feature
    Added the Quadrature() instruction.
  • New Feature
    Added PCAP Settings in the advanced section to allow the creation of a PCAP file.
  • New Feature
    Added Settings.NTPServer. This setting keeps the datalogger clock synced with the specified server. This setting will be polled once per day. It will also be polled if something has changed the datalogger clock by more the 1.5 seconds. This setting is in the settings editor advanced section.
  • New Feature
    Added Settings.TCPMSS. This setting can be used to set the maximum TCP segment length. Valid range is between 300-1460 bytes. Some modems require smaller TCP Packets. This setting is in the settings editor network services section.
  • New Feature
    Added optional parameter to the PingIP() instruction to specify IP version.
  • New Feature
    Added an optional parameter to the PPPOpen() instruction to select the IP version.
  • New Feature
    Added Terminal Mode 'F' command to display datalogger setting names.
  • New Feature
    Added "press ESC ESC ESC ESC to close" when opening the Terminal Serial Talk Through mode.
  • New Feature
    Added a warning in the Status.CompileResult when a conflicting PakBus TCP route is found. This happens when there are two PakBus nodes with the same PakBus address on a network. While the conflict exists, PakBus polling will occur every 2 minutes instead of every 200 mSec to avoid unnecessary memory usage.
  • New Feature
    Added TTL (Time to Live) when monitoring DNS communication traffic.
  • New Feature
    Added Exclusive Option to the IPRoute() instruction.
  • New Feature
    Added the ability to load an operating system stored on a card via the CR1000KD File Directory (E.g., CR1000KD/File/Load OS From Card).
  • Minor
    The GPS() instruction now accepts values prefaced with + or -.
  • Minor
    The ETsz() instruction now outputs the correct units.
  • Minor
    The SerialOpen() instruction now reflects the CommsMode setting back to Device Configuration Utility.
  • Minor
    Improved the advanced settings section in the CR1000KD.
  • Minor
    Fixed SetSetting("EthernetPower",0); 0 = always on, 2 = one minute, 10 = disabled.
  • Minor
    The function parameter in the TimerInput() instruction now resolves the erroneous compiler error that states "There are too may function digits specified, maximum is 14."
  • Major
    Settings.PPPDial now always keeps the RS232 port awake when the setting equals "PPP." The RS232 port would go into sleep mode disabling communications between the datalogger and the cell modem. This was present with datalogger and Raven XT combinations. Datalogger and RV50 combinations were not affected.
  • Major
    The ClockSet() instruction now avoids skipped records when the clock adjustments are less than one second.
  • Major
    The memory error that occurred when two PakBus/TCP Client connections were pointing to each other no longer occurs.
  • Minor
    You can now store to a one-byte string (String * 1).
  • Minor
    Minion Pair configuration now allows SDI12 communication and PWM() on the same minion pair.
  • Minor
    The SDI12Recoder() instruction now detects if an error occurred while waiting for the ttt seconds timeout before getting data with the D command.
  • Minor
    You can now successfully retrieve RSSI via Settings.RadioRSSI in CR6-RF407.
  • Major
    The Disable Lithium Battery setting is now cleared on powerup.
  • Minor
    The HttpGet() and HttpPost() instructions now replace a space character in the URL with a %20.
  • Minor
    Parameters defined as Double are now correctly passed to functions that are not declared as type Double.
  • Minor
    Function declarations now output the Return value when no parameters have been defined.
  • Minor
    Fixed data type IEEE8 in the Sample() instruction for variable types as Double.
  • Minor
    The CPI Sync now works with a 1kHz program scan rate.
  • Minor
    XML output of data types now displays data type UINT4 as unsigned Int instead of Float.
  • Minor
    Sample() instruction now correctly executes when sampling from a Float into a Double.
  • Major
    If the Main Scan does not contain a measurement instruction, the SlowSequence will still run.
  • Minor
    A Pointer can now be sent into an Array when the index is not constant. For P(i), at run time i was used as the pointer rather than P.
  • Minor
    Fixed an erroneous compile error when the index of an array is an expression with the first number equal to 0 (e.g., X(0+1), X(0+i)). Note that variable array indexes always start at 1, so if the expression used for the index returns 0, a runtime variable out of bounds warning is generated.
  • Minor
    You can now use pointers in ArrayLenVar parameter in the ArrayLength() instruction.
  • Minor
    You can now use pointers in TypeVar parameter in the TypeOf() instruction.
  • Minor
    You can now update datalogger data table information using web sockets.
  • Major
    Fixed the EmailRelay() instruction stream all tables option.
  • Minor
    The Subject parameter in the EmailRelay() instruction now allows the subject to be Constant.
  • Minor
    The EmailRelay() instruction now ignores 'space' or 'tab' characters in the address string. The comma ',' character is the delineator for multiple address.
  • Minor
    The EmailRelay() instruction now returns the correct error code when there are connection failures.
  • Minor
    The timeout parameter in the EmailRelay() is the value specified (not twice the value, as in previous operating systems).
  • Major
    Sequential Mode background calibration now performs as expected.
  • Major
    When the measpex parameter in the BrFull() instruction does not equal the reps parameter; the data is no longer shifted into the wrong destination array elements.
  • Major
    PPP now discards packets with a bad Checksum when a modem is attempting to establish the PPP session.
  • Minor
    The Delay() instruction will no longer accept delay values less than 0.
  • Minor
    The ClockSet() instruction will now allow "/" in the date if the parameter is of type String.
  • Minor
    The SNMPVariable() instruction now allows new OIDs to be inserted before the ESSVariable space.
  • Minor
    The public declarations for the EssVariables() instruction now require a ten-element array for indexed OIDs.
  • Minor
    The SPIOpen() and I2COpen() instructions now configure the hardware at runtime.
  • Minor
    The reset parameter in the MaxRun() and MinRun() instructions now behave like AvgRun().
  • Minor
    String variables can now be referenced as (N,1) or (1). This avoids a variable out of bounds error at run time.
  • Minor
    Constant declarations now allow a Const to be equal value in the settings table. Example Const A = Settings.SerialNumber.
  • Minor
    The Timer() instruction now uses the system time instead of the clock so the timer is independent of the clock being adjusted.
  • Minor
    The SDI12Recorder() instruction now accepts type Double for the destination variable.
  • Minor
    The SDI12Recorder() instruction timeout now ignores noise spikes while waiting for the sensor to be ready.
  • Minor
    Channel configuration no longer allows the TimerInput() and PulseCount() instructions on same minion.
  • Minor
    The CDM_VW300Config() instruction now allows using the pre-defined constant CDM_VW300 or CDM_VW305 in type parameter (as well as 0 or 1, as in previous operating systems).
  • Minor
    The CPIStatus table now displays up to 50 CPI modules.
  • Minor
    The PakBus verify interval advertised in the 'Hello Exchange' is now equal to the verify interval setting rather than the setting / 2.5.
  • Minor
    DNS will now attempt to first resolve IPv6 then IPv4.
  • Minor
    The default DNS server is now listed last. The specified DNS address is listed first.
  • Minor
    TimeUntilTransmit is no longer allowed outside a Scan/NextScan.
  • Major
    SWVX now works outside of the main scan when setting VX1 to 5 V.
  • Minor
    Settings.PPPInterface now disables auto baud functionality. A specific baud rate must be set.
  • (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.
v7.02December 21, 2017
  • (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.
  • (WARNING) If updating the dataloggers operating system from a version prior to 7.0, 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.
  • (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 4.0 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. If the version of the WiFi OS is older than 3.01 you need to install 3.01(included) prior to installing 4.0.
  • (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().
  • IMPORTANT: Resolved an issue with PPP connections that timed out or were closed with the PPPClose() instruction and then reopened with the PPPOpen() instruction. This type of connection is often used with cellular modems. A flag that tells the datalogger that the network is online was not being reset correctly, resulting in an unresponsive PPP network interface.
  • Fixed terminal W mode so the terminal will not exit when receiving a character on another comport unless CR (carriage return), or ESC (escape) is received.
  • Fixed terminal mode monitoring via W command when a new connection is made. The datalogger now ignores a new connection unless it is via PakBus or Telnet. The datalogger recognizes a connection when a CR (carriage return) or ESC (escape) character is received from the new connection.
  • Fixed Tablename.Fieldname when sampled into another table when a record did not exist in the source table. The operation now returns a NAN when this condition occurs.
  • Fixed GoesTable() to output commas instead of spaces.
  • (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.
v7October 18, 2017
  • (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.
  • (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.
  • (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.
  • (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().
  • 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.
  • Added support for SNMP version 3 compliancy.
  • Added support for CR6 revision 19 boards that include additional flash memory storage.
  • TLS library changed from axTLS to mbedTLS in order to enhance security and work with modern cryptography features.
  • 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.
  • 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.
  • 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.
  • Added the MaxRun() instruction. MaxRun() is used to output the running maximum of a measurement.
  • Added the Restart() instruction. Restart() is used to restart the program under program control.
  • Added the SerialBrk() instruction. SerialRrk() is used to send a break signal with a specified duration to a serial port.
  • 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.
  • Added the DataFilled field to the DataTableInfo table.
  • Changed reset tables via the keyboard display to require first level security.
  • Changed terminal sniff on Ethernet to show the entire Ethernet packet instead of just the first 54 bytes.
  • Allow backspace when editing a hex value in terminal mode.
  • 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.
  • Added support for GPS() with no PPS on the RS-232 port.
  • Added append mode to Tablefile(). Append mode is activated by negating the Options parameter.
  • Modified TCPClose(socket) to close and remove the socket handle immediately.
  • Changed the CheckPort() instruction to return a Long instead of a Float.
  • 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.
  • Changed TableInfo.Tablefilled to not include the % sign in the string.
  • 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.
  • Added an optional parameter called NewFileName to NewFile() to return the name of a new file found.
  • Added a compile warning for SerialOpen() if the optional parameter CommsMode is set to invalid options.
  • List the default DNS server last in the list so it is not tried first.
  • CRBasic Sprintf() fixed to allow %% in the format string to output the % character.
  • PakBusClock(PakBusAddr) changed so PakBusAddr can be a variable.
  • 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.
  • ESSVariables(): enhanced the pre-compiler to flag an error if variables are declared as the wrong type or wrong dimensions.
  • 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.
  • Various fixes and adjustments made to make the PC CRBasic pre-compiler more robust and more verbose with warnings and error messages.
  • Fixed various settings of type Boolean (BOOL4 and BOOL) that were not being set correctly via the SetSetting() instruction.
  • Fixed EmailRelay() if the ServerResponse parameter is not a variable of type STRING.
  • 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.
  • 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.
  • Fixed EXP(Number) when Number is a type of DOUBLE.
  • Fix double precision when using ABS().
  • Fix double precision constant assignment when the expression is of type FLOAT.
  • Fixed NetworkTimeProtcol() which could have had a 500 msec offset error.
  • HTTPGet(): If neither Content-Length: nor Transfer-Encoding: chunked are in the header response from the server, chunked encoding is assumed.
  • Fixed changing an encrypted program when changing the Constant Table values.
  • 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.
  • Renew PPP timeout when we get a network packet in, else we will timeout in 31 minutes.
  • Fixed timestamps for one record tables.
  • 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.
  • Fixed HTTP authorization prefix to URL (http://username:password@www.campbellsci.com).
  • Fixed ModemCallback() result. This was broken in a previous operating system and was not returning the correct result.
  • 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.
  • 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.
  • 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.
  • Fixed the keyboard display when displaying RS232Power to show correctly and not a value of 255 when set to True.
  • Fixed the keyboard display when displaying floating point numbers greater than 2.0465E9.
  • Fixed a memory leak when using PingIP().
  • Fixed a memory lead when using EmailRelay().
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • 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.
  • Fixed an issue with SerialOutBlock() when the timeout was 0 (forever) that could cause the datalogger's running program to hang.
  • Fixed an issue with SDI12Recorder() in both the main scan and a Slowsequence that caused the first SDI12Recorder() in the SlowSequence to be missed.
  • (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.
v6.08June 30, 2017
  • (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.
  • (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.
  • (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().
  • Fixed the HTTPGet() instruction when neither Content-Length: nor Transfer-Encoding: chunked existed in the returned header. Chunked encoding is now assumed when the header is missing these two items in the returned header.
  • Fixed SequentialMode() when no CDM is attached. The datalogger now waits 20 seconds for all CDM instructions to complete rather than giving up and marking the CDM as not present.
  • Fixed TimerInput(). This required updating the minion OSes. The symptom of this bug was occasional erroneous jumps in the time or frequency measured. The fix was to use a more stable time reference for the timing calculations.
  • Improved checking for sufficient buffers in pipeline mode.
  • Changed waking a waiting task from another. It will only wake the waiting task if it is in the correct wait queue.
  • Modified the SlowMeas task to wake from scan tasks if it is waiting for the periodic event SLOW_MEAS. Unconditionally waking the task when the other scans started was causing the wait for slow sliced measurements to end early and possibly cause measurement watchdogs.
  • Fixed loading encrypted programs when using and changing the Constant Table values. This was failing in previous versions of the operating system and would produce a compile error when the program tried to start with the new settings.
  • The CR6 low level Ethernet driver was fixed to handle the case where more than 8 sub buffers were used in a single Ethernet transmission. The result of this situation was a lost TCP connection.
  • Fixed a case where subroutine or function containing a measurement instruction was called from a slow sequence in sequential mode. This had the possibility of a deadlock condition where the slow sequence would stop running.
v6.03April 28, 2017
  • CR6 WiFi Change – Changed the behavior when set to join a WiFi network when a SSID was not specified. Instead of joining the first open network found, the WiFi module will not join any network.
  • (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.
  • (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.
  • (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().
  • Fixed a minor issue when the TCP/IP memory buffer was set to NULL. This condition would mainly occur when set up to listen on TCP/IP ports.
  • Fixed Status.UTC offset.
  • Fixed a Declaration bug that occurred when whitespace (spaces and tabs) were used.
  • Fixed an issue when pulling data via LoggerNet when certain table conditions were present. (auto-allocated, interval driven tables that resulted in only one frame of data).
  • Fixed response of ModBusSlave() when a packet comes in that is not addressed to the datalogger.
  • Adjusted the maximum transmission unit (MTU) size of TCP/IP packets to 1380 from 1460. It was found that certain cellular networks reduce the size of the MTU, causing the packets from the datalogger to be fragmented. This specifically affected the use of TCP/IP instructions such as EmailRelay() and FTPClient().
  • CR6 WiFi daughter card changes (daughter card OS 03.01)(only affects CR6-WIFI dataloggers):
  • CR6 WiFi Change - Fixed possible memory leak in the DHCP server. The buffer allocated for DHCP response potentially was not big enough. (only applicable for CR6-WiFi when set to create a network)
  • CR6 WiFi Change - Changed the TTL on DNS responses to 30 seconds (from max) to reduce any possible DNS pollution (only applicable for CR6-WiFi when set to create a network).
  • CR6 WiFi Change - Changed the DNS server to respond to some known servers that Android uses to check for internet connectivity. This improves the experience when the CR6-WIFI is hosting a WiFi network because it prevents the 'No Internet' error message from Android devices that join the network.
  • CR6 WiFi Change - Added code to HTTP server to answer a 'generate_204' message with 204 No Content when a CR6-WIFI is hosting a WiFi network (or attached NL240 in bridge mode) is hosting a WiFi network), because it. This prevents the 'No Internet' error message from Android devices that join the network.
  • CR6 WiFi Change - Fixed a bug that occurred when accepting an IP address from an attached NL2XX device in bridge mode. In some situations, the IP address didn’t work properly when the NL2XX device sent an address to the logger to use. For example, when the NL24X is hosting a network and a DHCP server, the daughter card will send an erroneous IP for the datalogger to use.
  • Changed SetSetting() reference from "UTC Offset" to "UTCOffset". The syntax is now SetSetting("UTCOffset",value). This is consistent with the TableName.Fieldname syntax of Status.UTCOffset used to read the setting.
v6.02March 17, 2017
  • (CRITICAL) Upgrading the Operating System could reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended but is possible. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • (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 boards. This version of the CR6 operating system has been tested with version 3.0 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 the Device Configuration Utility, select Daughter Card Operating System Files (*iobj) from Files of type drop down.
  • (WARNING) This operating system version, 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().
  • Resolved an issue with the datalogger HTTP server that would cause the datalogger to lose memory due to a failure in one of the TCP timers.
  • Fixed an issue that would cause a TCP timer to reset when http packets were not complete. This would cause the pbufs to never close, and the datalogger would lose pbuf memory.
  • CR6-Wifi daughter board operating system - Fixed a memory leak that caused the Wi-Fi module to lock up under heavy load.
  • (WARNING) This operating system version, 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().
v6.01February 10, 2017
  • (CRITICAL) Upgrading the Operating System will reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger. to learn how to use the DevConfig backup utility.
  • (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 boards. This version of the CR6 operating system has been tested with version 2.0 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 OS using the Device Configuration Utility, select Daughter Card Operating System Files (*iobj) from Files of type drop down.
  • Added checking in the operating system to make sure that the RTC-RX processor interface is operational and that time is advancing in the RTC. If these conditions are not met the Real Time Clock is reset.
  • Reworked the Real Time Clock handling of power up and enabled the internal watchdog mechanism of the Real Time Clock processor.
  • Modified the operating system so when the ssept frequency sweep is complete for the vibrating wire instruction, it makes sure that the state machine RAM contains the settings to deselect the excitation. Previously, the operating system was just setting the hardware directly and when the state machine ran, it set it to the wrong state.
v6December 21, 2016
  • (CRITICAL) Upgrading the Operating System will reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • (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 boards. This version of the CR6 operating system has been tested with version 2.0 of the Wifi daughter board and version 3.0 of the RF-451 daughter board.
  • Fixed HTTPS when using HTTPPost() with large files.
  • Fixed Status Table to return -1 instead of 1 for port status.
  • Implemented file send for .iobj via the DevConfig protocol. This allows sending OSs to daughter boards using the Send OS tab in Device Configuration Utility.
  • Added the ability to display Type Double in Custom Menus.
  • Fixed an issue when CardOut() files are being allocated. It no longer allows other files to be opened for writing on the card until the process is finished.
  • Fixed referencing TableName.FieldName() when field is of type Double.
  • Fixed the datalogger’s FTP server so it will append the final packet to the incoming file.
  • Fixed PortsConfig() when SDM is active.
  • Fixed PPP dialing when dialing is done.
  • Fixed DHCP when the Ethernet setting is Always On and cable is removed then reinserted.
  • Fixed DHCP_release() when DHCP has not been started.
  • DNS client fixed to check for a negative TTL which can cause a much larger timeout before the DNS client tries to get a new IP address.
  • Fixed function declaration with (). Changes recently made to my_stricmp() internal function caused compile errors.
  • Updated operating system to get FILE_SEM when starting os_recompile() to avoid deadlock with SETTING_SEM elsewhere.
  • Fixed IP tracing of HTTP. It could possibly overwrite memory in certain conditions.
  • Fixed DHCP for non-Wi-Fi loggers.
  • Fixed GetDataRecord() when a data interval is specified and when the maximum number of records parameter is either 1 or -1.
  • Modified the operating system to avoid writing a file via IPTrace from the IP task or BMP task since it might take longer than the watchdog timer for these tasks.
  • Added DHCP_release before stopping DHCP so specific PPP modems will work when re-starting DHCP.
  • Fixed PPPClose() to not execute a callback function that has not yet been initialized. This can happen if PPP is opened, but the program closes PPP before the callback function is initialized.
  • Fixed TableName.TimeStamp() from using a bogus pointer.
  • Modified the operating system when an out-of-bounds condition is detected within a data table to no longer allow the compile to continue. This was causing the PC compiler to crash.
  • Modified the pre-compiler to allow new line _ continuation to be before the beginning of a comment.
  • Fixed false error for units "already assigned" by fixing my_stricmp() function when tabs and/or spaces are at the end of the two strings to be compared.
  • Fixed ArrayLength(X) when X is a parameter passed into a subroutine that is not an Array. It now returns 0 instead of the local array's dimension.
  • Added option 29 (MD5) to CheckSum().
  • Fixed a very unlikely bug: If PPP dial string is PPP or blank and "CLIENT" is received while trying to close PPP and PPP is on a comport that uses the flusher.
  • Fixed PortSet() and SW12() when called outside of a Scan/NextScan when the option is specified in the measurement task. In this case, force it to run in the processing task.
  • Fixed ArrayLength() when called within a large program.
  • Fixed ArrayLength() to return 0 if a variable array is not passed in.
  • Fixed parsing parameters; the operating systems now inserts a 4 byte value for line number at the start of each parsed instruction. Previously, one 4 byte value was used to maintain instruction number, structure size, and program line number. This allowed only 12 bits for the line number. With longer programs, this caused confusion in compile error messages.
  • Fixed CPI by removing delay when sending scan start information on the CPI bus. This delay was causing the scan to start late by one interval.
  • Fixed SDI-12 and PortSet() together. Let the minion handle the other port when configuring for SDI12 (inversion) and output.
  • Fixed PC compiler showing the wrong program name when an include file is used.
  • Fixed port status in Status table when SDI-12 is active.
  • Modified the initialization of SDI-12 so the control port will invert if the port is an output at the time of the SDI-12 configuration.
  • Removed extra space between <html> and <head> that were not needed in the Web API html output.
  • Removed extra <!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML//EN\"> that was being added to the html output of WebAPI commands ListFiles, SetValue, BrowseSymbols, and ClockCheck.
  • Modified the datalogger's web server to add <HEAD> and <TITLE> tags and to report the title with the same message that is sent in the http header (like other web servers do). For example, a 404 error now reports 404 Not "Found".
  • Changed SetClock() so the usec and seconds passed in are adjusted to be in bounds before converting to usec since 1990. This allows CRBasic code to adjust the clock by simply adjusting the usec component of the RealTime() instruction.
  • Fixed Include files with : and \ in them which resulted in erroneous error message of "file too long" in the pre-compiler.
  • Modified the operating system so CS I/O does not check if baud rate is faster than 115.2K for setting the power-up mode.
  • Added the ability to send all the data tables when streaming files and the source parameter is "" (a NULL string).
  • Limited UDPDataGram() queue to 10 before the head of the queue is released and the memory freed.
  • Changed SendGetVariables() to abort if it tries to access variables or store into variables out of bounds.
  • Modified the operating system when Status.WatchdogErrors is non-zero. It will no longer write to an IP Trace file that is writing via the 3212 option in the Files Manager setting.
  • Modified GetVariables() to allow a variable index into the destination variable.
  • Changed GetVariables() and SendVariables() to skip writing if they would write out of bounds in an array.
  • Enhanced EmailSend(...,Attachments,..) and FTPClient(...,LocalFileNames,...) when sending multiple files when some of the files are "streaming" data files. The comma-separated files can now include streaming data files intermixed with other files.
  • Modified DataEvent() to restart if the RecAfter parameter is negated and the start trigger condition occurs during the RecAfter count.
  • Modified Web service: if DataQuery references a field name that does not exist, return no command.
  • Modified the TCP Client data streaming functions (Email, HTTP, FTP). If the parameter specifying the data table is a variable, then state of variable is kept for all the declared data tables independently so the same instance of the function can be called referencing different data tables.
  • Fixed SIO4 getting output from a variable of type Long.
  • Fixed the CRBasic pre-compiler to flag an error if the Public or Dim declaration of an array is missing the ")" character terminating the dimension.
  • Modified the SDMSIO4() instruction so the Dest option can be of type Long.
  • Modified CheckSum() to work on a file if the source parameter is a file name present in the datalogger's file system.
  • Fixed the Datalogger Web Service API for the ClockCheck instruction when using the JSON formation option. Removed the extra space in the "description: " field.
  • Fixed CheckSum() using the CRC32 option to work with the CheckSum() of a File.
  • Fixed the Datalogger Web Service API "ListFiles" instruction's "last write" field for the drive. It is meant to be the date of the operating system, Status.OSDate.
  • Improved the TimerIO() port conflict error message. Changed from "To return time since chan %d, it must be programmed for a function < %d. to "To return time since chan %d, chan %d must be programmed for a function < %d.".
  • Modified the CRBasic pre-compiler to use our native csi_atof function rather than GCC library function to convert strings to floats. This brings the CR3000, CR1000, and CR8X0 pre-compilers in line with the CR6 pre-compiler which was already using this method.
  • Fixed HTTPPut() to not respond until the end of the message (file) in the event that it is not authorized (HTTP error 401). The web browser is not able to see the header response before the entire file is sent.
  • A hidden constant table can now be displayed via the keyboard display only if security is set to the highest level.
  • Modified the operating system to return 9 bytes for the TimerIO() internal read timer input capture result. Previously, we returned 8 bytes. Also, when doing port I/O commands, make sure the special port function is cleared.
  • Changed TimerIO() so that 9 bytes are returned indicating an error. Previously we reported this with the MSB of the count and only returned 8 bytes.
  • Changed the int-16 bit compare to an int-32 bit compare. This fixed a problem with TimerIO() and the time since previous.
  • Fixed a typo in the error message "Result must be a variable of type string" to "Result must be a variable of type string" in GOES instruction.
  • Web service services HTTPPost() the same as HTTPGet(). API commands like FileControl would generally be issued as HTTPPost() instead of HTTPGet().
  • Fixed GetDataRecord() to not insert a -1 for the interval of the local data table. This -1 erroneously flagged the table to act as an interval-driven table that resulted in a misleading compile error if the same table was referenced by a subsequent GetDataRecord(). The error was removed.
  • Fixed re-syncing the CPI bus with SC-CPI and slow sequences when a module is disconnected.
  • Modified the operating system to allow "then" with the "#ifdef" preprocessor directive.
  • Fixed reporting SDI-12 operations in port status of Status table.
  • (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 cards. This version of the CR6 operating system has been tested with version 2.0 of the Wifi daughter card and version 3.0 of the RF-451 daughter card. 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 OS using the Device Configuration Utility, select Daughter Card Operating System Files (*iobj) from Files of type drop down.
v5.01October 6, 2016
  • (CRITICAL) Upgrading the Operating System will reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • Removed PPP support for "VJ" compression protocol that was added in OS 5. This caused the RV-50 and LS-300 modems to no longer pass PakBus packets when PPP was enabled.
  • Removed an extra time out that was causing the datalogger to report incorrectly "timing out after close" after closing a PPP connection.
  • (CRITICAL) Upgrading from versions prior to version 28 of the Operating System will reset the datalogger’s CPU drive. This is due to a change in the format of the file system from FAT16 to FAT32. In order for the datalogger to operate correctly, as part of the upgrade, the CPU drive is formatted to FAT32. Any programs stored and running from the CPU drive will be lost. It is not recommended to update the datalogger’s Operating System over a remote connection where program control regulates the communication equipment (turning it on or off, etc.). In these cases, an on-site visit and a backup using DevConfig’s backup utility is necessary to update the datalogger’s Operating System. In all cases where the datalogger is being updated with an Operating System prior to 28, the use of DevConfig’s backup utility is recommended due to the fact that the CPU drive is formatted using the new FAT32 format. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • Removed PPP support for "VJ" compression protocol that was added in OS 05. This caused the RV-50 and LS-300 modems to no longer pass PakBus packets when PPP was enabled.
v5October 3, 2016
  • (CRITICAL) Upgrading from versions prior to version 28 of the Operating System will reset the datalogger’s CPU drive. This is due to a change in the format of the file system from FAT16 to FAT32. In order for the datalogger to operate correctly, as part of the upgrade, the CPU drive is formatted to FAT32. Any programs stored and running from the CPU drive will be lost. It is not recommended to update the datalogger’s Operating System over a remote connection where program control regulates the communication equipment (turning it on or off, etc.). In these cases, an on-site visit and a backup using DevConfig’s backup utility is necessary to update the datalogger’s Operating System. In all cases where the datalogger is being updated with an Operating System prior to 28, the use of DevConfig’s backup utility is recommended due to the fact that the CPU drive is formatted using the new FAT32 format. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • Fixed XMLParse() when it failed to open files as "r" instead of "rb".
  • Modified the operating system so it will check to see if there are modules present on peripheral bus before turning it off. (CR1000 and CR3000 only)
  • Fixed ModBus TCP so it will skip looking for more data in the same packet. Before it could get in a loop and watchdog the datalogger if the data was bad.
  • Fixed ModBus slave when it receives a bad address.
  • Fixed #ifdef by stripping off trailing whitespace prior to comparing constant names with the incoming string. (beta, private)
  • Introduced #ifdef to allow checking to determine if a constant has been declared. If so, the expression evaluates as true and all code to the next #else or #endif is included. This allows for code to be inserted without the constant being present.
  • Switch closure and PWM() cannot be active together on shared timer units. This means if C4 is used for PWM() C1..C4 cannot do switch closure, and if C5 or C7 is used for PWM() C6, or C8 respectively is not available for switch closure. (CR1000, CR3000, CR8X0 only)
  • Fixed FTPClient() append with optional header when the server is in active mode.
  • Fixed the FTP server to not send the 220 ready response until after the stack call back function is completed. The logger was progressing too quickly and not updating when the remote window size was being advertised.
  • The FTP server now returns error code 550 instead of 501 if it cannot find a file or if the path specified in the filename is too long.
  • When the FTP server is in active mode FTPClient() will no longer fail when appending a file that does not exist (error 550) on the FTP server.
  • Changed the variable type of “Delete_Files_on_Mismatch” (datalogger setting) to a boolean so "true" and "false" are shown on the keyboard display rather than 0 and 255.
  • Multiple RTU ModBusSlaves with different start register offsets are now allowed. This functionality was already allowed when using TCP/IP ModBus slaves.
  • Fixed SerialInBlock() when passing in a negative maximum number of bytes through the MaxNumberBytes parameter.
  • Internal operating system stack pointer changed to a type float instead of type double in the XMLParse() instruction.
  • @(variable_name) operation now allows variable_name to contain the name of a declared variable or TableName.FieldName.
  • Removed an error message at run time if a TableName.FieldName cannot be found when searched for inside the @(variable_name) operation.
  • Added sha1 and hmac_sha1 options to the CheckSum() function.
  • When Ethernet is very busy the start of a packet may be missed causing a buffer overflow and corrupting memory. Checks were added to limit the max bytes read into the temporary buffer to avoid overfilling it. The datalogger will now also throw away UDP packets that need reassembly and UDP packets over 1500 bytes. This was done to match specifications and to meet what is listed in our help and documentation.
  • After sending an operating system to a CPI module over CPI, the bus query is turned on for 30 seconds to make sure the module comes back on the bus after the operating system is loaded.
  • When SC-CPI module is used for CPI communications, give compile error if COM2 is being used. COM1 was already checked.
  • Changed CPIFileSend() so the CPIStatus table will show up.
  • Changed CPIFileSend() when sending an operating system to first reset the bus to make sure modules identify themselves. Increased the timeout to allow devices time to check their operating system.
  • Neighbor list is altered at start up by removing any neighbors that are on an inactive comport. This prevents a possible memory leak sending messages to a comport mailbox without an active task to receive the messages.
  • NetworkTimeProtocol() fixed so the datalogger can be both a NTP client and a NTP server at the same time.
  • NetworkTimeProtocol() has to be set to "" to be a NTP server. This prevents the server being activated when the logger only needs to be a client.
  • Fixed NetworkTimeProtocol() when two different clients are in the program.
  • Fixed ArrayLength() when used as a parameter passed into a subroutine.
  • Enabled PPP_IPV6_SUPPORT.
  • PPP support for "VJ" compression protocol added.
  • Modified the operating system TCP/IP stack when a remote connection closes. It now sends fin_ack and abandons the connection rather than calling tcp_close. This releases the pcb which was being subsequently used, and would eventually cause a crash due to loss of memory.
  • An OS load in the CR800 now correctly restores settings. The RS-232 baud rate was being overwritten due to too many beacon ids in the settings list. Removed 2 beacons, 2 verify intervals, and 2 baud rates from the settings list for the CR800. The arrays in the structure had room for 10, but 12 were showing up in the list. (CR800 only)
  • Modified changing the SDC baud rate setting to change all of the baud rates for the cs9pin port. Without this, the setting was only changing to the correct value every other time the SDC baud rate was changed.
  • Send one-way table definitions no longer sends the version number.
  • Changed the Files Manager setting. If the name coming in is the same name as the base name, then do not keep looking for another setting of the same type to create a duplicate copy of the file.
  • Modified the operating system to allow SNMPVariables() following ESSVariables().
  • Fixed an optional parameter in Resistance() to work with all integration types in the CR3000.
  • Flag error if ReadOnly(variable_name) is missing the variable name.
  • Added a message in compile results and in the CardStatus field of the Status Table when out of space for writing TableFile().
  • TriggerSequence() expressions now checked when editing a value via the keyboard display.
  • Input buffer now allocated when SerialOpen() is called and PakBus format set.
  • Fixed the datalogger’s web server when using web sockets to detect Connection: ... Upgrade.
  • Illegal numbers cannot be set via the web service or PakBus.
  • Fixed setting Web Service values via Post method.
  • Fixed displaying Web service newest record when the value is a large string.
  • Setting Status.FullMemReset via the web service is now ignored.
  • Fixed Settings.Security to display correctly via the http server.
  • Fixed SpaCov().
  • Fixed GetRecord() when TableName.FieldName is in the 3rd parameter expression.
  • Changed Rso ET calculation to avoid NAN values at nighttime.
  • Flagged an out of bounds error when an Alias name is referenced in an output instruction and the reps results in out of bounds.
  • Fixed double precision conversion to a string when specifying a precision greater than 15.
  • Modified the web server so it now decodes + into spaces after the ? sign in the URL.
  • If the number of TLS connections is 0 upon initialization, set it to 10.
  • Added support to new setting to skip ring and finish packets.
  • CType(x,double) now functions as Ctype(x,float) on loggers that do not support double precision (CR1000, CR800, CR3000).
  • Modified the operating system to not NAN CPI data when setting the datalogger clock.
  • Fixed FTP server when the client shuts down abnormally and concurrently when the IP task is servicing the connection.
  • Pointers enhanced with array indexing and pointing at structures.
  • Added debug tracing dumped out in CPI stream.
  • Fixed duplicate routes. It now searches the entire router list and doesn't stop when the first NULL entry is found. Routers can be removed at any time from any spot in the list.
  • Fixed processing of expressions where operands of type long precede the ^ (power). Ex: 40 * 2 ^ 8
  • Added a check for valid channel mask string when being set by keyboard display or CRBasic.
  • Fixed showing a single dimensioned string when sampled into a data table field whose type is not a string.
  • Modified the operating system to keep clients setting timeout going.
  • Fixed HTTPPost and HTTPGet() to output the header when specified as a variable.
  • Don’t allow “Copy Data to Card” via keypad for tables using CardOut().
  • Pointer to x.y fixed when assigned to an array element.
  • Added syntax to write to TableName.FieldName.
  • Added pointer functionality to be able to point to TableName.FieldName.
  • Fixed HTTPS web service and other SSL server applications.
  • Fix PPP writing when out of memory.
  • Fixed possible multiple tcp_abort() of a tcp_pcb that has already been aborted and removed to prevent corruption the TCP_PBUF pool.
  • Fixed a situation when the stack calls back with an error or that the remote is closing and aborts the tcp_pcb and free its memory. When we shutdown our side of the connection, we do not abort it to keep memp pool from corruption.
  • FindRecord() changed: 1) when searching for the oldest record, check to see if it could be in the internal data storage memory. 2) if a requested search fails to the card check to see if there is a better match in the internal memory.
  • Fixed DNS client when the IP address of the name cannot be found.
  • Fixed specifying email send authorization specification.
  • Fixed constant table ApplyandRestart when user did not set the apply inside the sequence.
  • Changing the constant table is no longer required to recompile using ApplyandRestart.
  • Fixed some non TLS authorizations (plain, login, cram-MD5).
  • Fixed SortSpa() when sorting on the least significant column (sort option = 1).
  • Fixed SortSpa() of an array of type float with the optional Dimension parameter.
  • TimedControl() now synchronizes its interval to midnight rather than the nearest hour. This change was only for intervals < 1 Hr. Greater intervals were sync'd correctly.
  • Increased packet size for AVW200() to support more than 8 individual AVW200() instructions running in pipeline mode.
  • Added support for wide character type in the command line for the PC CRBasic pre-compiler. This allows extended character set file paths to be used.
  • Fixed Include(FileName Expression) without a space before the (.
  • Added Modbus to PC CRBasic pre-compiler.
  • Fixed a possible semaphore deadlock with the TCP semaphore and the Routes semaphore when writing IP packets and a write error forced a socket close. A PakBus Main watchdog was triggered.
  • When receiving a multi-line response, FTPClient() will allow QUIT to pass even with an incorrect response (not 221).
  • Parsing a file with “#if_no_remove” no longer causes duplicate declarations to be written to the output file.
  • Added TDR200() instruction.
  • Added UART BREAK Send.
  • Added a screen to "Copy Data to CRD" via the keyboard display which shows the result of the copy and displays any problems (i.e. disk full).
  • Added CTYPE(expression, type) instruction. Where type can be FLOAT (or IEEE4), STRING, DOUBLE, or LONG.
  • Authorization checked before allowing websockets.
  • Changed EmailSend() to optionally add an authorization specification to the user name separated by a semi-colon. Options are CRAM-MD5, PLAIN, STARTTLS, and LOGIN.
  • Added MonitorComms(Destination,Comport,Ascii (1 or 0)) instruction.
  • Fixed measurements in sequential mode outside of Scan()/NextScan with SC-CPI.
  • Changed CONST to not release expression memory if there is an error in the expression. This was causing the PC CRBasic pre-compiler to crash.
  • Fixed PC compiler crash with MMx() and min() when using TableName.FieldName. The expression memory was being released twice.
  • Added DataTableNames(Names).
  • Updating a String constant in the Constant Table to a NULL string ("") no longer causes a compile error upon ApplyAndRestart().
  • TimeIsBetween() now evaluates correctly when called outside of Scan()/NextScan.
  • Websockets no longer watchdogs when a write error is generated by pulling the Ethernet cable during a write cycle.
  • Modified GetVariables() to flag a compile error if the local destination parameter is not a variable.
  • Quadrature() now fully operational.
  • Resistance3W() and Resistance2W() changed to allow optional parameter to return the measured excitation current.
  • Added CDM_Delay() instruction.
  • CDM devices now recover reliably when CPI cable is disconnected while logger is in low power mode.
  • Adjusted the FileControl response code to 23 (cannot format a drive because it is open for writing) and code 22 (cannot delete a file because the program has it open, i.e., it is the running program or the program specified to run on power up).
  • Calling !Ptr when Ptr = 0 no longer flags an out of bounds warning.
  • Constants cast as "DOUBLE" in a constants table now work correctly.
  • Fixed ModBus Datagram which was broken in OS 29 and OS 4.
  • A solitary erroneous line feed character from an SDI-12 sensor no longer locks up the slow sequence
  • Allow 100 msec gap between C! to multiple SDI-12 sensors.
  • Increased wait time from 20 msec to 100 msec when servicing multiple SDI-12 sensors.
  • Fixed I! command to record data correctly in an array when multiple SDI-12 sensors are specified.
  • Detect errors inside puts() to prevent BufCnt being zeroed and locking up the CR6 when 3+ SDI-12 sensors are polled in a single instruction.
  • Fixed sync problem.
  • Fixed problem with CPI Sync running with a 100khz crystal.
  • Fixed Status Table port status for pulse counters.
  • Yellow CPI LED turns on when RS-232 is active.
  • B4 thru B0 have a decode of the RTC's reset state.
  • Zero the power up code only after we detect a power down.
  • Changed where I2C is initialized.
  • Changed the GPS sync to debounce the GPS pulse input capture.
  • Fixed the CR6 RS-485 full duplex setting to set the baud rate for the second minion.
  • Disk parameters modified to prevent corrupted files and unreachable data.
  • Reverted PAKBUS_ACTIVE back to 4 for the CR6, but modified the operating system when configuring the minions with numeric_format == 4 so it does not use 2 stop bits. Changing the define for PASBUS_ACTIVE caused modem callback to fail, as well as previous issues we found and fixed.
  • Changed the default WiFi domain name setting to "example.com".
  • When loading obj.gz the contents of the decompressed image are copied from RAM to flash, then loads the OS.
  • Running program name and the power-up program name stored in flash rather than battery backed RAM. This allows the factory hibernate to work and still run a program out of the box.
  • Modified the operating system to not send a parameter to the compile task.
  • Rearranged CPU drive and other settings that are in serial flash.
  • SW12 shows –1 in the status table when active.
  • Added a delay in LatchAo4 to make sure long cable lengths work.
  • Changed PwrUp Bit indicator to B6 and RTC reset bit indicator to B7.
  • Cleaned up GPS input and removed math processing from the GPS input capture interrupt.
  • Improved the wording for invalid ports used in GPSClock for CR6.
  • Disabled the port SPI/UART selection when driving port high or low command are called.
  • Fixed RTC GPS sync.
  • DevConfig settings changed to no longer shut off CPI in the CR6.
  • Modified the OS to only allow GPS PPS sync on COMU1. The hardware has issues on any other port.
  • PC pre-compiler can now process and find setting HTTPSEnable and some other SSL server settings.
  • Added a compile error for scan interval of 0 for the CR6.
  • When changing RS-232 state, check to make sure CPI is not active.
  • (CRITICAL) Upgrading the Operating System will reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
v4February 29, 2016
  • Major
    Upgrading the Operating System will reset all the CR6’s settings back to the factory defaults. Sending this OS remotely is not recommended. To restore settings after the update, it is recommended that a backup be made of the current logger settings or take programmatic measures to ensure your settings can be restored. This can be done using the DevConfig backup utility or CRBasic instruction SetSetting. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • (WARNING) There is a known issue with this operating system when using CDM devices. If the cable is pulled from the CDM device or from the datalogger while the CDM device is running, the datalogger may not be able to get the CDM device running again. The datalogger will require a restart via a power cycle or by resending the program to get the CDM device working again. Please contact Campbell Scientific to receive a beta operating system that resolves this issue. The issue will also be fixed in the next release of the datalogger operating system.
  • Major
    This operating system is not compatible with earlier beta CDM OSs. Make sure the CDMs are running operating system version 1.0.
  • Added a check for Alias names that already exist as variables.
  • Fixed VibratingWire() when it is used outside of Scan() / NextScan and has Reps greater than 1.
  • Modified TableFile() to return an error upon detecting an invalid drive (CPU:). Before it would try to establish drive parameters and this would send the datalogger into a continuous compile loop.
  • Reordered the keyboard display configuration so the Constant table and the Field Calibration, if present, are above the settings.
  • Fixed SDI12SensorSetup() when the source variable is of type LONG.
  • Modified the operating system so it no longer allows SDI-12 and pulsecount() on the same minion pair.
  • Fixed SDI12SensorSetup() to respond to 'V' command when the 'D!' command does not come right away, as is the case when driving the sensor via the terminal mode.
  • Modified SDI12Recorder() by adding an optional parameter and the ability to work with multiple sensors in a single instruction call.
  • Fixed SDI12SensorSetup() where in some cases it would send trailing zeroes after the decimal.
  • Added optional parameter to SDI12Recorder() to fill array with NAN when communications fail.
  • Modified the operating system so when the use is in the SDI12 terminal, if "SDI12 Failed" appears or happens, exit SDI12 terminal.
  • Modified the operating system so when editing the constant table via the keyboard display do not ask the user to "Save Changes?" if backing out of a change.
  • Changed the open circuit check in the Thermistor() instruction to allow a larger margin. When the measured resistive element was small enough the open circuit check was resulting in NANs for the calculated resistance.
  • Modified the operating system so the table names of hidden tables are blanked out in DataTableInfo.
  • Fixed double precision Sprintf() with the Format %Lf and the number is larger than 14. Also allowed the precision digits to go to 15 instead of 14.
  • Modified the operating system so PakBus instructions (ie. SendData(), SendGetVariables(), SendVariables(), etc.) are forced to use a static route unless the ComPort parameter is set to 0. If the ComPort parameter specified is set to 0 and a dynamic route exists, the dynamic route will be used instead.
  • Fixed streaming data in FTPClient(), EmailSend(), HTTPPost(), etc. when an element within an array is specified that is part of a table and that variable is being streamed.
  • Fixed EmailSend() when streaming from a data table that does not exist. When this was done previously, it would watchdog the datalogger.
  • Fixed an issue when using large constant table, CPI table, and table information when the size of the data in the table exceeded the PakBus maximum packet size. The issue was seen when displaying the table in any Campbell Scientific software that displays the datalogger tables.
  • Fixed the operating system so when parsing parameters with trailing spaces caused an error in the case where an optional parameter was not present.
  • Fixed ArrayLength() so it reports the size correctly. There were certain conditions where it would report erroneously.
  • Fixed invalid error message when using WaitDigTrig() on certain ports of the CR6.
  • Fixed the timeout for VoiceNumber() and VoiceKey to convert an erroneous 10 millisecond timeout to use system ticks correctly instead.
  • Fixed the sort used with Median() and SortSpa() to put NAN always at the beginning of the array.
  • Changed Erase() instruction to allow a variable index in the EraseVar parameter.
  • Modified the start of the process of updating PakBus neighbor information to routers from 0 to 1 seconds to 0 to 15 seconds to help with congestion when an update is necessary.
  • Changed GOESData() to allow a constant declaration of the data table name. (This also fixes GetRecord() when the optional Format parameter was added to also work with a constant declared table name.)
  • Changed the minimum gap time on all but control ports for Modbus to 30 milliseconds instead of 20 milliseconds. The CR3000 could not handle a gap time of 20 milliseconds on SDC.
  • Added a new LineNum() instruction.
  • Fixed the OSVersion size in status table. Current beta operating systems were using a long date in the name which caused issues.
  • Fixed the streaming Public and Status tables.
  • Changed FTPClient() so the response code of 230 (logged in) is accepted after issuing the user name.
  • Fixed ModBus when using it over control ports. Memory was being released incorrectly.
  • Modified Settings.SDCInfo so it is set to a null string if no SDC device is attached.
  • Modified the operating system to update the Response parameter if used to store the file name in HTTPGet() when Files Manager is active.
  • Fixed an issue with the datalogger reporting Card OK when there was an error with the card.
  • Added an optional Timeout parameter to TCP Client instructions (HTTPGet(), FTPClient(), HTTPPost(), EmailSend(), etc.).
  • Modified the operating system to allow 4 optional parameters (NumRecs/TimeIntoInterval, Interval, IntervalUnits, FileOption) for IP data table streaming to be blank, as in ,,,, to get to the new Timeout parameter in EmailSend(), FTPClient(), HTTPPost(), etc.
  • Added redirection to a different URL in HTTPGet() when the webpage returns with a 302 status code.
  • Fixed PortsConfig(). Added an optional parameter to PortPairConfig() to allow setting the pull resistor.
  • Added more categories to the keyboard display in the settings menu to correspond with the tabs in the settings editor of DevConfig.
  • Fixed the timeout so it will be more precise when trying to get a TCP/IP address that was retrieved from a domain name server (DNS).
  • Added a new command line options to the PC pre-compiler. -i works like -p but expands non-encrypted include files into the specified output file.
  • Added HTTP Header setting to DevConfig and the datalogger.
  • Fixed an issue with clearing TLS certificate and private key settings.
  • Fixed ^ power operator when an operand is of type DOUBLE.
  • Fixed uploading a .gz file. Modified the timeout and now return an error if takes too long and return an error if cannot allocate space for the task.
  • Modified GoesData() format 0 and 1 so it now will convert any data type to FP2.
  • Added optional parameters to DisplayMenu() and SubMenu() to specify the default line to show the cursor at.
  • Fixed an issue for CD100 when using custom menus. Increased the length of the strings sent to 22 and set initialize to 0.
  • Modified the messages for IP networks that are powered down to be less ambiguous.
  • Added the ability to do VW measurements in slow sequence while using CDMVW300 instructions in the main scan.
  • Modified the operating system so TPC/IP over CSIO(1,2) when they are not active to filter out packets except when sent a shutdown packet.
  • Modified GetRecord() by adding an optional "format" parameter with the GOES format options. The parameter is variable. A fixed -1 format acts as if the parameter was not present.
  • Fixed an issue with FTPClient() when under some conditions of failure it would return 0 instead of a connection handle.
  • Modified the operating system so when reading string settings it accommodates, in all cases, fragmentation of the string.
  • Changed TCPClose() to wait for remote to ACK to close and abort instead of closing if the state is not established. This prevents holding on to memory too long (over one minute) and cause a problem with rapid TCPOpen() and TCPClose().
  • Fixed ModBus RTU on ComUSB and ComRS232.
  • Modified SerialClose() to allow shut down RS232 power unless always on or handshaking settings are active.
  • Fixed SendData() so when the optional parameter (Number of Records) is > 0 then it will send that many records back regardless if there are no new records stored since the last execution.
  • Added new power mode setting for the CR1000 and CR3000 that matches a similar setting on the CR6.
  • Changed the settings tabs that are displayed by DevConfig.
  • Fixed IPv6 having duplicate entries in the router list.
  • Fixed code in comport timeouts controlling comport off and also controlling ModBus RTU timeouts.
  • Modified CommsMemFree to not show the third line (IP PBUFS) if there are not any networks enabled. In this case this memory does not exist.
  • Added the ability to do ModBus RTU over USB with working timeouts.
  • Fixed FileGet() if the request for a swath is 0.
  • Fixed a slow slicing problem with the AM25T.
  • Changed the wording on the unable to calibrate error message (removed the reference to +/- 8V, CR6 specific).
  • Fixed network enable setting to recompile when necessary.
  • Modified the DHCP server if there are no networks enabled. This was done so the logger would not try to allocate memory for a network that does not exist.
  • Fixed recursive calls to TCPOpen() when there is no network active and there is a PakBus TCP ClientSetting. Previously this would cause memory corruption.
  • Changed dhcps_init() so the DHCP server starts up again after it has been closed.
  • Modified the binary 'W' monitor so it is now again compatible with Log View.
  • Fixed ip_frag.c LWiP stack bug when fragmenting a TCP packet and the packet needs to be resent, i.e., it is not ACKED. This could have caused a memory corruption and watchdogs caused by the ip task looping inside ip_frag() forever.
  • Changed receiving PakBus Get and Send variables to accept little endian longs (CSILONG, data type type 20).
  • Fixed PPP to not leak memory (PBUF_POOL) in the event that the comport task for the PPP interface is not running or in the event that we run out of services.
  • Fixed wireless sensor instructions when the configuration parameter is an expression using the & operator.
  • Modified the datalogger web service so it does not eliminate the security= command but rather nulls the string after the last digit in the command so only the security is copied into the links rather than a possible XXS string.
  • Fixed TableFile Mode 64 output occurring at the same time as FileMark.
  • Modified the PPP start up after reset and dial connect to hold off for 2 seconds. The Sierra Modems expect some hold off after dial connect else they keep echoing.
  • Implemented range checking parsing the processing field when changing settings via keyboard display, CRBasic, or remotely.
  • Changed the Terminal W watch binary to now include ASCII characters.
  • Chanded SolarPosition() so the TimeOffset parameter can now be variable as well as a constant.
  • Changed NewFile() to allow FileName to be an expression.
  • Added StationNameSetting to the pre-defined constant list. Its value is the station name setting of type string.
  • Added optional parameter to the Resistance() instruction to return the measured current as the last measurement in the array.
  • Fixed initializing boolean variables so a non-zero value is set to -1 (TRUE).
  • Modified the operating system to now discard Ethernet packets whose MAC address is our own.
  • Fixed a memory leak of PBUF_POOL in the event an https client which tries to connect on port 443. In the CR1000, CR3000, and CR800.
  • Modified the operating system so when the station name is changed, restart DHCP on all the networks.
  • Fixed HTTP newest record date/time for Status and Public tables.
  • Added ability for DHCP server to store fully qualified domain names from connecting clients. And function get_dhcp_cache_address_from_name(char *name) that returns the address of the client based on the name.
  • Added New PakBus windowing get and receive file and data collect commands.
  • Modified terminal W mode to only abort if the different connection is not PakBus or telcom or if the character coming in is CR or ESC.
  • Removed disabling PPP if the DEL key is pressed and held on the keyboard display that aborts a program running.
  • Changed PPP ECHO REQUEST response timeout for 1 try (2 tries total) to 105 seconds from 90 seconds, so the total timeout is 3.5 min instead of 3 min.
  • Changed the operating system so while polling TCP connections, if any connection is using a local IP address that is not the IP address of a network (PPP, Ethernet, Wi-Fi, etc.) then close the connection.
  • Fixed PC pre-compiler issue where Windows XP 32-bit users could not use the pre-compilers. All logger pre-compilers are now 32-bit operating system compatible.
  • Added CR300 to list of predefined constants, so programs can use it in LoggerType.
  • Fixed PC pre-compiler crash when using ConstTable with no name.
  • Allow Get/Send values to specify the "Settings" table along with "Status" to get or set settings.
  • Changed DataTable: If a user specifies only 1 record, provide only one record. This allows for multiple "public" type tables.
  • Fixed sprintf() with the '*' specifying dynamic width or precision.
  • Fixed NewFieldNames() when the entire generic array is named and an attempt is made to rename the fields again.
  • Changed the keyboard display pick list when working with a constant table.
  • Fixed EssVariables() when used in the same program as SNMPVariable().
  • Modified the operating system to allow ping via a PPP network to ping yourself instead of flagging an echoing error.
  • Fixed the code for GPs. It now sends the entire GPRMC string even if the GPS does not have a valid fix. Previously, the string was only sent if the 'A' was returned in the fix location.
  • Added a compile error if a Constant Table has the same name as another table, including the "settings" table.
  • Modified the PC pre-compiler to Allow up to 1000 warnings. This same process is limited to 3 in the datalogger. This was done because we enabled the unused variable check which would require many more listings than just three.
  • Fixed an error with ModBus TCP to RTU datagram.
  • Fixed Thermistor() with AutoRange.
  • Fixed Thermistor() measurement in Slow sequence.
  • Added line number information for the PC pre-compiler when reporting unused variables.
  • Enabled GPS() so it will work without a PPS signal. This is activated by using COMnum < 0 in the instruction.
  • Added a special PakBus DataGram destination ID of 506 which translates TCP ModBus into RTU ModBus.
  • Fixed promoting to float operands preceding the ^ operation. It will now always returns a float.
  • Fixed !Ptr when Ptr points to a String and !Ptr is the entire expression, as in MoveBytes() where !Ptr is the source pointer.
  • Added SPIOpen() and I2Copen() instructions.
  • Added Websocket Service support.
  • Added more precise timestamps on 'W' sniffing.
  • Fixed TableFile() with MaxFiles = -2 when no card present at compile time.
  • Modified the operating system to clear the card LED's when card inserted and no errors. When using CardOut() this was working correctly, but with TableFile(), the green LED remained on after the card was inserted.
  • Fixed ConstantTable data types (float and double).
  • Added I2c and SPI.
  • Fixed TCP Client Connections setting to handle port numbers greater than 32767.
  • Fixed TCP ModBus that was broken in CR6 operating system 3 and the previous beta operating systems for the CR1000, CR8X0, and CR3000.
  • Fixed EditTable(TableName, Record).
  • Modified ETsz() to not inherit units from source variables like windvector and also to allow user defined units if done with Filednames: Units.
  • Modified FTPClient() when appending a data file, allow response codes to NLST of 450 or 550 (no directory or file).
  • Added error checking for conflicts between pull up and pull down on port pairs.
  • Modified DataInterval() so if the Units of DataInterval() is MON (month) and auto allocation of the number of records is specified, seconds per record is set to 30*24*3600 rather than the scan interval of the CallTable() instruction.
  • Changed the keyboard display realtime data display of floats to show more digits when no digits right of decimal are present.
  • Fixed editing the constant table to keep comments once edited and to handle more than one constant per line (using : syntax).
  • Added an optional parameter to TriggerSequence() that enables remote setting of variables to trigger the sequence.
  • Fixed initializing double variables and constants with non-scalar expressions.
  • Modified FTPClient() modified to allow for a response of 550 to comeback from the NLST command when appending to a data file, even though 550 is not listed as a legal response to the NLST command in the FTP RFC 959.
  • Fixed Const As Type = expression when expression is not a simple scalar.
  • Added a number with 'R' or 'r' suffix is Double precision when declaring a constant as a double.
  • Added a number with 'F' or 'f' suffix is Floating point single precision when declaring a constant.
  • Fixed the keyboard displays categorization of settings.
  • Fixed the spelling of comports in the keyboard display to display Comports instead.
  • Major
    Upgrading from versions prior to version 28 of the Operating System will reset the datalogger’s CPU drive. This is due to a change in the format of the file system from FAT16 to FAT32. In order for the datalogger to operate correctly, as part of the upgrade, the CPU drive is formatted to FAT32. Any programs stored and running from the CPU drive will be lost. It is not recommended to update the datalogger’s Operating System over a remote connection where program control regulates the communication equipment (turning it on or off, etc.). In these cases, an on-site visit and a backup using DevConfig’s backup utility is necessary to update the datalogger’s Operating System. In all cases where the datalogger is being updated with an Operating System prior to 28, the use of DevConfig’s backup utility is recommended due to the fact that the CPU drive is formatted using the new FAT32 format. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
v3August 12, 2015
  • Major
    Upgrading from version 1 of the Operating System will reset all the CR6's settings back to factory default. It is recommended that this OS not be sent remotely and without getting a backup of you current logger settings or taking programmatic measures to insure your settings are restored after the logger is updated. This can be done using DevConfig's backup utility and CRBasic instruction SetSetting, respectively. Watch the Video Tutorial: Sending an OS to a Local Datalogger.
  • Major
    The following instructions are still not implemented in the CR6: CWB100(), CWB100Diagnostics(), CWB100Routes(), and CWB100RSSI(). Some functionality is there, but it is considered beta at this point.
  • Added CS I/O auto baud detection and also minion auto baud detection.
  • Added CDM_MuxSelect(), CDM_PulsePort(), and sending variables to CDMs.
  • Added CPIStatus table and allow editing of the module fields. (preliminary)
  • Changed the keyboard display menu. Split up Settings (general) into Settings (general) and Settings (TCP/IP).
  • Fixed the keyboard display's settings from accidently dropping into the WiFi or Radio settings after exiting the TCP/IP settings.
  • Fixed setting items in the Settings table via the keyboard display that are UINT2_T data type.
  • Fixed first element of a sampled array to show as array(1) instead of as a scalar.
  • Changed TableInfo and ConstTable time stamps to update when they are changed instead of when they are monitored.
  • Changed DNP3 for broadcast packets and control when an unsupported point is selected for control.
  • Changed DNP(), PC Compiler to flag a compile error if the comport is in error.
  • Fixed SerialOutBlock() and MoveBytes() so they can move or output an entire record or partial record from a data table. I.e., they will successfully cross field boundaries if the number of bytes specified is greater that the starting field size. This is the case only if the number of bytes parameter is not variable.
  • Changed table accommodation to up to 255 tables: Public Table is int instead of char; bump the maximum scroll menu size to 256 lines from 100; removed start value maximum of 72 on scrolling.
  • Added SDMBeginPort().
  • Added optional parameter for ExciteI. If 1 then use larger range for excitations.
  • Added optional parameter for ExciteV. If 1 then use differential excitation.
  • Added CPIAddModule().
  • Added Resistance3W().
  • Changed FileOpen() so that if it is used in conjunction with the files manager setting, then change the name (if a variable) of the file in the public table also.
  • Changed functions that are used in conjunction with the Files Manager setting so that if a new name is passed in then the variable holding the name is large enough.
  • Added line number information to the units structure in order to provide line number in compile errors that are detected at completion of compile.
  • Fixed preserving COM1..COM4 baud rates through OS download.
  • Fixed SDI12Sensor() to allow a response time up to 999 seconds instead of 99 seconds.
  • Fixed ApplyAndStart to be true if non-zero.
  • Changed SetSetting() and SetStatus() so that when they are within any kind of sequence like a subroutine or a function then they will not execute at compile time.
  • Changed the PC pre-compiler to not flag an error in SerialInRecord() when the comport is SDM-SIO1 based on the number of bytes parameter since it does not know the size allocated by SerialOpen().
  • Fixed SerialInRecord() so that when writing "NAN" into a variable of type String where the destination address is on an odd boundary (as it would be if, for example it is referenced as Destination(1,1,4), the 4th character into the string), then "NAN" would be written starting at 1 character before the specified destination, for example, at Destination(1,1,3) instead of Destination(1,1,4).
  • Changed UDPDataGram() to queue incoming data up to 20 datagrams before it discards.
  • Changed FTPClient() in conjunction with the files manager setting (3210) to return the new filename controlled by the files manager setting into the local file name variable.
  • Changed HTTPGet/Post to insert authorization into the header if the URL parameter is prefaced with username:password@.
  • Added an optional parameter to IPNetPower() to specify a timeout after inactivity to power back down.
  • Fixed FTPClient() when getting or putting multiple files.
  • Changed FTPClient() to allow the NLST command to return 450 ("No such director or file") when using the optional header function for appending files in the remote.
  • Added low power operation for smsc9221 chip (NL116, NL121).
  • Changed so that NL200, 240 exchange net mask and gateway along with the IP address.
  • Fixed setting values in the status or constant table via an RTMC project so that security is ignored since the .csipassword file is used instead as the security mechanism.
  • Changed hidden data tables to allow access via HTTP if the highest security level is authorized.
  • Fixed UTF-8- character- set for http and quote non-printable characters for JSON so KANJI come through correct.
  • Changed dns_svr to use DeviceConfig setting (domain_name) as the domain name to which it will respond (rather than hard-coded to model.com).
  • Added code to handle a DHCP renewal request. Engineering changed the DHCP lease time to 30 seconds and added the function joined_networks() to look through the DHCP cache and see if there are any clients in it that haven't timed out.
  • Changed sniff and talk through to not have timeouts when connected in terminal mode via PakBus.
  • Changed Constant Table so that if editing in the terminal and it fails, display a failure message of 'out of space'.
  • Fixed warning message when get or sending variables via PakBus but the packet will not fit into a PakBus frame.
  • Fixed losing settings on OS download via File Send.
  • Changed Get/Set Variables to allow swath parameter to be variable.
  • Changed PakBus directory response so that it accommodates a '/' character instead of the ':' character in a file specification. This allows older LoggerNet versions to work that mistakenly replaced the colon with the forward slash character.
  • Fixed GetDataRecord() and GetFile() and SendFile() so the expression function is not called erroneously, possibly resulting in an out of bounds warning and/or in rare cases a variable set erroneously.
  • Fixed GetDataRecord() to start at the current record number in the event of reset and maximum records is negative (collect all data).
  • Fixed a data collect bug where data was written beyond the end of the holding buffer. A call to FindRecord was requesting too much data. This affected non-interval data tables with small (<= 8 bytes) record sizes.
  • Extended timeout for file upload (including table definitions upload) to 5 minutes.
  • Changed error code for file upload to return an error code of 9 if there is a fragment offset error instead of 13.
  • Enhanced ModBus PakBus DataGram routing.
  • Fixed ModBus timeout for RS-232 and ME.
  • Added TCP ModBus PakBus DataGram routing.
  • Enhanced RTU ModBus PakBus DataGram routing.
  • Changed FTPUserName and FTPPassword settings so that these settings are now accessible via CRBasic and the keyboard display.
  • Added DNS setting via keyboard display.
  • Fixed IP trace code reading via CRBasic or keyboard display.
  • Added SDCInfo as a string field so that it can be accessed via the keyboard display, remotely, and via CRBasic.
  • Changed TLS private key and certificate file names to NULL for default settings and if the setting is clearing the file.
  • Fixed TLS Status on the keyboard display, via CRBasic and remotely.
  • Fixed some issues with Files Manager setting for sniffing and IP Tracing when changing the maximum file size and also when the file size if very small.
  • Added pointer type casting that will ensure floating point operations will not truncate to integers.
  • Changed Doubles so that Double numbers must be "forced" using the 'L' or 'l' character at the end of the number.
  • Fixed ArrayLength(!VariablePtr).
  • Fixed a problem with re-assigning a pointer.
  • Changed CRBasic pointer method such that once a pointer variable is assigned to point to a variable, it can never be 0, i.e., 0 would be an out of bounds, illegal pointer that can be detected by the program.
  • Fixed ! (pointer) pointing to a variable of type String.
  • Fixed Pointer = @(Setting) where variable reference by Setting is an array of type string.
  • Fixed compiler to allow a reference to tablename.fieldname() to act the same as tablename.fieldname.
  • Fixed CRBasic to flag an error if an assignment statement tries to assign a new value to a constant string.
  • Added UDP IPV6 support.
  • Added option 24 to the CheckSum() function for a 16 bit Fletcher checksum.
  • Added a check for the maximum number of tables that can be used with Tablefile(), which is currently set to 30.
  • Changed Tablefile() option 64 so that if a failure occurs while creating new TOB3 files, the logger closes the files, then it deletes. Zero length files were resulting from trying to delete files still held open.
  • Added a check for duplicate file names when using TableFile().
  • Fixed UTF-8 character set for http and quote non-printable characters for json so KANJI comes through correct.
  • Fixed DataTableInfo when its size is larger than all other tables for buffer used by Findrecord() during data collection.
  • Changed the limit on the number of tables (including Public, Status, DataTableInfo, Const) to 255.
  • Fixed ConstTable setting MaxNumBytes (size of memory to allocate for data storage). If any table was larger than the Status table, and there was a ConsTable, the buffer was not large enough to store data into.
  • Fixed units for WindVector() output options 3 and 4.
  • Fixed a pre-compiler crash when not able to find a specific settings.field.
  • Changed the Rx timeout calculation when changing baud. Give at least 35 bit periods to conform to Modbus.
  • Changed SMTP IPv6, look for port number after ]:port
  • Changed CheckDataGram (service) so it takes care of service.
  • Fixed ModBus datagram and multiple TCP ModBus within a single packet.
  • Fixed Replace() when the lookfor string is NULL.
  • Fixed EmailSend() and EmailReceive(); let tcp_open() take care of port number.
  • Fixed EmailReceive() using APOP authorization. The server includes this capability in its greeting, not in its CAPA list.
  • Fixed BroadCast() to not use uninitialized variables.
  • Changed throttling down PakBus client communication when the comport mailbox is backed up to limit it to no more than 4 in the queue or a 5 second timeout.
  • Fixed AM25T with reps and no reversal. The channel was not getting advanced.
  • Changed the subclass reported in USB enumeration from 0x20 to 0x02. This allows Windows 10 to load the usbser.sys driver without a .inf file.
  • Increased the USB enumeration requested current limit from 200 to 300.
  • Fixed DNP3 waiting for unsolicited response confirmation to always service a read request.
  • Fixed PakBus Client instructions via TCP when the socket handle number mod 256 is within the range of COM1..COM4 (4..11), causing them to erroneously return -10 for a response code.
  • Changed FileManage so changing attribute hidden does not update the directory information if the attribute is already set. This was found when a customer was hiding a file unconditionally in a 10 Sec scan and destroyed flash chips after ~1.5 years.
  • Fix MuxSelect. It was not properly decoding the channel numbers.
  • Changed the password settings via the keyboard display and remote access so that they are hidden with "..." notation.
  • Fixed GetDataRecord() when table is interval driven and there are multiple frames per request. An erroneous response code of either 8 or 9 was returned sometimes.
  • When receiving a one way table definitions command, do not respond with a no type error response.
  • Fixed GetDataRecord() and AcceptDataRecord() in the case the table they are storing into has DataInterval() with 0 lapses.
  • Fixed seconds per record output in terminal mode 'O' command.
  • Changed TableInfo record number to be updated when polled via BMP5 so as not to break Status Client.
  • Fixed COM320 Voice timeouts.
  • Fixed "variable not used" warning with aliases.
  • Changed all data table instructions including sample(), to flag reps <= 0 as a compile error.
  • Changed to only allow ports that are set up as outputs to be changed via communications (e.g. toggle the ports via Connect Screen).
  • Changed DNPUpdate so that the datalogger can optionally enable unsolicited data when a new connection is made by the datalogger as a TCP Client.
  • Changed TCPopen() when there is a routing error; don't try forever but rather just what the timeout specifies.
  • Fixed ETsz fieldnames issue where a fieldname with _Rso inside was being overwritten with _Rso.
  • Modified CDM-A100 notch frequency thresholds. The specified notch frequency is now rounded to the nearest available notch frequency.
  • Changed CDM-A100 notch frequency parameter to be a float. Module specific redefined notch frequency constants have been removed, but the logger's _50Hz & _60Hz still remain.
  • Removed the terminal 'L' command.
  • Fixed the evaluation of parameters that are specified as constant floating point expressions, including variable initialization of floating point expressions (single precision).
  • Fixed PC compiler, SDMBeginPort(), to remove compile errors for channel conflicts.
  • Added Warning message in SubScan() if the scan interval is not an integral of 100 usec.
  • Disabled checking CS I/O minion for up to date structure. This is a temporary change until we resolve what is going on.
  • Changed CPI to make sure that module id matches a known module in the program before acknowledging them to request their configuration.
  • Major
    Upgrading from version 1 of the Operating System will reset all the CR6's settings back to factory default. It is recommended that this OS not be sent remotely and without getting a backup of you current logger settings or taking programmatic measures to insure your settings are restored after the logger is updated. This can be done using DevConfig's backup utility and CRBasic instruction SetSetting, respectively.
  • Added SDMBeginPort() for the CR6.
  • Fixed losing settings in CR6 on OS download via File Send.
  • Fixed ModBus timeout for RS-232 and ME for CR6.
  • Fixed PakBus Client instructions via TCP when the socket handle number mod 256 is within the range of COM1..COM4 (4..7 in a CR1000, 4..11) in a CR6), causing them to erroneously return -10 for a response code.
  • Fix MuxSelect for the CR6. It was not properly decoding the channel numbers.
  • Fixed COM320 Voice timeouts for CR6.
  • Changed the CR6 to only allow ports that are set up as outputs to be changed via communications (e.g. toggle the ports via Connect Screen). (CR6 Only)
  • Removed from the CR6 the terminal 'L' command. (CR6 only)
  • Fixed CR6 evaluation of parameters that are specified as constant floating point expressions, including variable initialization of floating point expressions (single precision). (CR6 Only)
  • Fixed PC compiler, SDMBeginPort(), to remove compile errors for channel conflicts. (CR6 only)
  • Disabled checking CS I/O minion for up to date structure. This is a temporary change until we resolve what is going on. (CR6 only)
  • Changed CPI to make sure that module id matches a known module in the program before acknowledging them to request their configuration. (CR6 Only)
  • Known Issue
    Modbus TCP/IP and Modbus RTU over USB are known not to work on this version of the CR6 operating system. If you need this functionality, please contact Campbell Scientific to request a newer operating system with these issues resolved.
v2April 16, 2015
  • Major
    Upgrading from version 1 of the Operating System will reset all the CR6’s settings back to factory default. It is recommended that this OS not be sent remotely and without getting a backup of you current logger settings or taking programmatic measures to insure your settings are restored after the logger is updated. This can be done using DevConfig’s backup utility and CRBasic instruction SetSetting, respectively.
  • Major
    The following instructions are still not implemented in the CR6: CWB100(), CWB100Diagnostics(), CWB100Routes(), CWB100RSSI(), GPS(), and MuxSelect().
  • The IPInfo() instruction now provides a way to return the remote IP address of a connection handle. If the handle number is greater than or equal to 100, it will return either an IPv4 or IPv6 address. The second option of IPInfo() is ignored when the connection handle is greater than or equal to 100.
  • Fixed updating CommsMemFree when monitoring the status field via CRBasic.
  • Fixed stack allocation when email, FTP, and HTTP clients are within a subroutine or function that is declared in a different sequence than when executed at run time. This sometimes resulted in a watchdog.
  • Limited IPRoute() to not execute at compile time unless it is before BeginProg in the CRBasic program.
  • Modified IPRoute() so it can be changed on the fly.
  • Fixed PPPOpen() when assigning return value to an element in an array.
  • Changed serial comport shutdown process used by PPPClose() and SerialClose() to wait for the comm task to finish transmitting before they shutoff the comport.
  • Fixed data table streaming of a single element of an array as in "DataTable.FieldName(2).
  • Added a DHCP server that can be used for WiFi interfaces (e.g. NL240). Includes support for NL240 configured for ad hoc mode ("create a network") and connected by CSIOIP() (configured with Bridge Mode Enabled = TRUE)
  • Fixed EmailSend() and other client instructions so they can correctly run in the 4th slow sequence.
  • Changed EmailRecv() so that "From" (sender) information is not required to be enclosed in < > when parsing.
  • Enhanced EmailSend() so that leading spaces are stripped from email addresses before using, when multiple addresses are passed to the ToAddr parameter. Previously, the user needed to make sure the addresses specified in ToAddr contained no leading spaces.
  • Fixed TLS for email so that it will work every time instead of every other time.
  • Changed CSIOIP so that if the datalogger receives a non-zero IP address from the NL2xx and the datalogger CSIOIP address is not static, then stop DHCP and auto IP and remove the DNS servers.
  • Fixed EthernetPower to skip turning PPP off.
  • Enhanced FTPClient() in conjunction with the files manager setting (3210) so that it will return the new filename that is controlled by the files manager setting. The new filename is now placed into the local file name variable.
  • Added the ability to access all datalogger settings and status from CRBasic and keyboard display. Previously, some settings were not accessible from the keyboard display or program.
  • Changed PakBus hop metric for TCP connections to be 1 sec instead of 5 sec unless the connection is over PPP.
  • Changed PakBus/TCP to not close the TCP connection if a route is lost but neighbors still exists on the connection.
  • Fixed PakBus/TCP Password authorization so that the TCPOpen() does not return a connection before the authorization is complete. This manifested as not being able to connect with Konect GDS.
  • Fixed dialing a modem via PPP or Modem Callback so that if dialing fails, and the modem outputs unknown characters to the datalogger, that the echo process continues to work.
  • Fixed PPPClose() to get rid of the 5 second delay and to not inadvertently close the NL240 also.
  • Fixed possible asynchronous problem when dialing a modem with PPP.
  • Removed looking for "CLIENT" while connected in PPP.
  • Modified PPP so that if a comport is setup for PPP, don't let any characters enter the Terminal Mode even if the program has closed PPP.
  • Changed PPP so that when closing the session is unsuccessful, send +++ and AT+CGATT=0 to try to get the modem off line.
  • Enhanced PPP dialing messages in IP trace and IP status.
  • Fixed keyboard display security challenge to not incorrectly re-challenge when backing out of a secured menu.
  • Changed indentation (reduced) of displayed values while editing constant in ConstTable.
  • Added in keyboard display ConstTable editor an "Apply and Restart" flag that will cause the changes to the ConstTable to be applied and the program restarted. This behaves the same way as when you escape from the ConstTable menu and are prompted to save the changes.
  • Updated keyboard display of settings to show all logger settings available. Previously only a subset of settings were displayed for editing.
  • Added a 6th parameter (optional) to DNP instruction; 1 means TLS enabled.
  • Fixed DNP3 when the swath for the DNPVariable instruction is 1.
  • Fixed SDM-SIO1 DNP3 Master.
  • Changed the DNPFlag parameter so that if the flag parameter is smaller than the array for the source parameter, then the last element of the flag array is used for all of the remaining source array elements.
  • Changed the DNPEvent parameter so that if the DNPEvent array is smaller than the source array, the last element of the DNPEvent array is used for all of the remaining source array elements.
  • Changed DNP3 so that more than 65535 events can be stored and so that it does not use twice as much memory as needed.
  • Added DNP3 indexing into arrays so that multiple DNP3 classes can be specified with one source array.
  • Changed DNP datagram implementation so that if DNP comport parameter is negative then PakBus Datagram is activated.
  • Added support for DNP3 object 110 (string).
  • Added support for DNP3 group 21 (frozen counter).
  • Added DNP3 group 0, variations 240, 241, 242, 243, 247, 248, 250, 252, 254, 255.
  • Added an optional parameter to DNPUpdate() called ConnectHandle that provides a TCP Connection Handle controlled by TCPOpen().
  • Added support for DNP3 Unsolicited Responses.
  • Added support in DNP3 for single precision floating point.
  • Added DNP3 support for object 50, variation 1 (read time and date).
  • Changed the meaning of the link verification, timeout parameter in DNP() as follows: 1000 = Disable link layer confirmation, disable link verification, application layer timeout is 60 seconds. 1sss = Disable link layer confirmation, disable link verification, application layer timeout is sss seconds (max is 60 seconds). 0000 = Disable link layer confirmation, enable link verification, application layer timeout is 60 seconds. 0sss = Enable link verification, link layer and application layer confirmation timeout is sss seconds (max is 60 seconds).
  • Fixed erroneous closing of comport that is open for PPP or serial comms when characters directed to the terminal are intercepted.
  • Fixed GetVariables() responding to command when the remote wants ASCII and our variable is NSEC (timestamp), return the date/time instead of NAN.
  • Corrected a problem using the Const declaration when using values exceeding (2^31) – 1 (2,147,483,647). If a value greater than (2^31) -1 was used as the constant, the actual value used in the program was 2,147,483,647. If a user’s program contains a Const declaration with a desired floating point value greater than 2,147,483,647, they can correct previously gather data by doing a simple calculation. To correct calculation errors caused by this issue a user will need to reprocess values obtained using the erroneous constant. For example if the Const in question was used as a multiplier, you should divide the result by 2,147,483,647, then multiply by the actual desired constant.
  • Added support for ACPower() instruction. The instruction is the same as it is on the CRx000.
  • Added support for PWM() instruction. The instruction is the same as it is on the CRx000.
  • Added optional parameter to ExciteV() to allow differential excitation on the adjacent U channel.
  • Fixed SerialOpen() so that optional CommsMode parameter correctly overrode the current Configuration setting for ComC1 and ComC3 at runtime.
  • Changed compiler to allow a reference to tablename.fieldname() to act the same as tablename.fieldname.
  • Fixed compiling a program that is missing a referenced sub routine. This was crashing the PC compiler since FunctionsPtr is NULL yet was used.
  • Changed compile time error checking so that we don't flag a compile out of bounds error for covariance if a variable index is issued for the source. At run time an out of bounds will be flagged if necessary.
  • Modified SpaAvg() so a compile error will be reported if the swath parameter is a constant that is beyond the boundary of the source array.
  • Add -u command line in PC compiler. This option will instruct the PC compiler to check for and report unused variables and subroutines. For example "cr1comp.exe -u myprog.cr1" would report "Warning: VarA declared but not used" if myprog.cr1 had a variable VarA declared, but VarA is not actually used within the program.
  • Enhanced Instr() function by adding Search Options 9 and 10. Search options 9 and 10 find the start of FilterString, starting at the end of the string and searching backwards through SearchString until it finds the beginning of FilterString, reaches the StartString position, or reaches the beginning of SearchString. Option 9 performs a case sensitive search. Option 10 performs a case insensitive search.
  • Fixed a PortPairConfig() initialization problem. PortPairConfig() was only successful the first time it was used. They symptom was that the port was set to a 5V level even though the program contained a PortPairConfig Option parameter of 2 (3.3V).
  • Fixed slow slicing issue in pipeline mode with no measurements in main scan and running faster than 10mS scan intervals. There was not sufficient time to slice, due to the wake up of ADC.
  • Modified the OS so when resetting the settings coming from OS download. For the control port /comports, set the flag that says the baud rate was set via the settings instead of from serial open.
  • Set maximum number of tables that have Tablefile() to 30. (significant)
  • Modified the OS for streaming data so that the optional parameter ‘interval’ cannot be non-zero when the table specified is Public, Status, ConstTable, or DataTableInfo. Also, when streaming Public, Status, Constant, or Datatableinfo, increment the record number so there is a record to send.
  • Changed Settings by renaming the "Hibernate" settings field to "DisableLithium". The new field name will be used in the keyboard display and must be used when referencing in CRBasic SetSetting(“DisableLithium”,TRUE).
  • Changed exchange of settings for TLS Certificate, TLS Private Key, and TLS Private Key Password so that they are not passed back to Device Configuration if a) PakBus Encryption is not active and the connection is TCP/IP or b) the connection is not direct link.
  • Added support for DNP3 single-precision floating point variations to Objects 30, 32, 40 and 41.
v1November 26, 2014
  • First official release of the CR6 operating system.

Connect With Us

phone icon
Phone Number
General: (435) 227-9000
location icon
Corporate Address
815 W 1800 N
Logan, UT 84321
send icon
Email Address
sales@campbellsci.com

As a trusted leader in measurement systems for more than 50 years, our top priority at Campbell Scientific has always been to provide the most accurate, reliable data for research and industry.