GRANITE 6 OS
GRANITE 6 OS
v3.2.1This download is for the GRANITE 6 datalogger. Execution of this download places the Operating System file(.obj) 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/Warning: 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
- New FeatureAdded a self-hosted recovery webpage to the datalogger OS for uploading .obj and .web.obj.gz files to restore custom user interfaces. [ /recovery]
- New FeatureAdded PING to the terminal commands.
- New FeatureMQTTPublishTable() will now send all unsent data ahead of OS update or program change, reducing potential data loss.
- New FeatureAdded FieldClassify() to the CRBasic instruction set, providing additional support for MQTTPublishTable(). Refer to the CRBasic help for more information.
- New FeatureAdded 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.
- 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.
- MajorRemoved TLS cipher suites that do not support forward secrecy.
- MajorFixed 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.
- MajorFixed 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.
- MajorImproved session resumption and logging for FTPS.
- MinorFixed 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.
- MajorFixed a memory leak issues when Campbell Cloud certificates rotate.
- MinorFixed an issue where the CR1000X datalogger republished all data from the microSD card to the MQTT broker after an OS update.
- MinorEnhanced MQTTPublish() to handle arrays. The payload parameter now accepts elements from a string array, and the return value can be stored in an array.
- MinorFixed 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.
- MinorRTMC 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.
- MinorFixed 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.
- MinorFixed a formatted print buffer overwrite. This improved operations such as the data logger’s terminal output and logging IP Trace info.
- MinorFixed an API call issue that caused the TableDisplay page to not load.
- MinorFixed 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.
- MinorFixed Invalid JSON responses across several settings when requested via MQTT.
- MinorFixed 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.
- MinorThe "FileName" parameter in NewFile() can now accept a variable of type string.
- MinorFixed a CPI buss data shift issue.
- New FeatureAdded 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.
- New FeatureCRITICAL – See Revision notes for OS version Granite6 3.00.
- MinorCorrected the handling of millisecond units for TimeIntoInterval in MQTTPublishTable().
- MinorFixed 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.
- New FeatureCRITICAL - 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 FeatureAdded "USB Port Not Trusted" setting. The default is '0' (Trusted), allowing connections on the USB port without requiring PakBus encryption.
- New FeatureAdded "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 FeatureAdded support for the CR1000Xe.
- New FeatureAdded the ability for "SFTPPrivateKey" and "SFTPPublicKey" to be set with the CRBasic instruction SetSetting().
- New FeatureAdded an optional parameter "StdDevType" to StdDevRun(). See CRBasic help for details.
- New FeatureAdded 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 FeatureAdded 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').
- MajorUpdated the LWIP stack.
- MajorFixed a condition when a watchdog timer IP Panic pbuf_free: p->ref > 0 triggered.
- MajorFixed a ComRS232-specific serial data overrun issue that manifested during intense PPP sessions.
- MajorFixed an intermittent watchdog that could be generated when connecting to an On-and-off MQTT broker.
- MajorMQTT tasks now detect an unopened TCP/IP socket and initiate primary retries immediately, without waiting for the keep-alive timeout to expire.
- MinorFixed an uncommon watchdog event triggered when an attached Volt108/116 has intermittent power.
- MinorResolved 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.
- MinorAddressed communication issues with the SDM-SIO1A/SIO4/SIO2R, resolving the associated flush events that affected the adjacent channel's input and output buffers.
- MinorResolved a compile error that occurred when using SemaphoreGet(4).
- MinorFixed an issue where an unintended null byte was being appended to the payload message in MQTTPublish().
- MinorFixed the terminal watch for outbound HTTP traffic in the IPTrace > HTTP option.
- MinorFixed an erroneous ApplyAndRestartSequence CRBasic compile error.
- MinorAdded a compiler check for out-of-bounds errors in aliased array elements used during measurement repetitions.
- MinorResolved the issue allowing the publish MQTT statusInfo topic to be disabled.
- MinorFixed a problem where the MQTT publishing rate might slow down because of timeouts waiting for an ACK.
- MinorUpdated the syntax for accessing DataTable structures using FieldNames(): TableName.FieldName_StructureMemberName.