Granite 10 OS
Granite 10 OS
v3.2.0This OS should only be updated via direct connection with the Granite 10.
This download is for the Granite 10 datalogger. Execution of this download places the Operating System file(.obj) on your computer. It also updates the CRBasic Editor compiler and support files.
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 Base64() instruction; see CRBasic help for details.
- MinorFixed 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.
- MajorRefined the Operating System download process over MQTT.
- MinorFixed an issue where Implicit FTPS Active Mode incorrectly used reserved ports for data connections, leading to server rejections.
- New FeatureAdded 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 FeatureAdded a compile warning when PanelTemp() is used on Granite 9/10, which uses CPUTemp() instead.
- MinorWhen viewing the password settings via the CR1000KD, the value will now be displayed as '...' for security purposes.
- MinorThe 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.
- New FeatureAdded support for Precision Time Protocol PTPSlave().
- MinorImproved MQTT trace in terminal. It now includes PUBACK ID's.
- MinorFixed the PACP capture on the PPP interface.
- New FeatureMQTT publish now includes a publish timestamp "publish_ts" in the payload for the GEOJSON format.
- New FeatureAdded extra recovery mechanism for MQTT TLS Mutual Authentication failure.
- MajorFixed watchdog resets caused by memory corruption due to TCP task queue buildup over slow data links, most observed when RTMC projects were published on the datalogger.
- New FeatureAdded support for web.obj.gz files to automatically execute an embedded recipe.json when detected.
- MajorFixed memory allocation for MQTT during compile time. This resolved a potential "out of memory" compile error or a watchdog fault.
- MinorFixed IIF() to work with Type Double. This also fixed a potential "Pointer is out of bounds" compile error.
- MinorModified GOES behavior for the TX325 to allow tables to be concatenated in a transmission.
- New FeatureAdded TableName.BytesPerRecord to return number of bytes in a DataTable record.
- MinorLowered 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.
- MinorUpdated datalogger HTTP client to correctly handle absolute URLs in Location and Content-Location headers during redirection.
- MinorA 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.
- MinorImproved handling of PPP flag bytes to ensure correct packet boundaries after a transmission error.
- New FeatureAdded GOESAppend compile directive; see CRBasic help for details.
- MajorFixed 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.
- New FeatureAdded 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.
- MinorFixed an issue where the CR1000X datalogger republished all data from the microSD card to the MQTT broker after an OS update.
- 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.
- 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.
- New FeatureMQTTPublishTable() will now send all unsent data ahead of OS update or program change, reducing potential data loss.
- MinorFixed a formatted print buffer overwrite. This improved operations such as the data logger’s terminal output and logging IP Trace info.
- MajorFixed a memory leak issues when Campbell Cloud certificates rotate.
- New FeatureAdded PING to the terminal commands.
- 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.
- 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.
- 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 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.
- MajorImproved session resumption and logging for FTPS.
- 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 system performance, stability, and resource management for enhanced efficiency and reliability.
(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 FeatureAdded a self-hosted recovery webpage to the datalogger OS for uploading .obj and .web.obj.gz files to restore custom user interfaces. [ /recovery]
- MinorFixed Invalid JSON responses across several settings when requested via MQTT.
- 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.
- MinorFixed a CPI buss data shift issue.
- New FeatureAdded FieldOrigin() to the CRBasic instruction set, providing additional support for MQTTPublishTable(). Refer to the CRBasic help for more information.
- MinorFixed an API call issue that caused the TableDisplay page to not load.
- MajorRemoved TLS cipher suites that do not support forward secrecy.
- New FeatureAdded FieldClassify() to the CRBasic instruction set, providing additional support for MQTTPublishTable(). Refer to the CRBasic help for more information.
- 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.
- 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.
- MinorImproved data transfer rates over Ethernet with the RV50(X) modem. The modem should be configured for full-duplex 100Mb Ethernet to see the full benefit of this change.
- MajorFixed SerialOpen() so watchdogs no longer occur if the Comport is open and an interrupt is received while the Comport is being reconfigured.
- MinorPakBus WebSockets now only enables when the Enable is set and the PakBus URL is set.
- MinorARP messages are now transmitted correctly to improve address mapping on a network.
- MinorGOES channel can now be set to a value up to 566.
- MajorFixed task handling issues that could stop data storage to the SSD.
- MajorImproved CPI memory structure when using multiple scans to prevent watchdogs.
- MajorImproved CPI memory structure when using multiple scans to prevent watchdogs.
- MinorMove() now works with a multidimensional arrays in a loop.
- MajorFixed SerialOpen() so watchdogs no longer occur if the Comport is open and an interrupt is received while the Comport is being reconfigured.
- New FeatureStructures are now supported with StructureType/EndStructureType.
- MinorImproved SDM module support.
- MinorResolved a clock issue that could set an erroneous Station Date/Time on program startup.
- MinorReplace() performs boundary checks correctly on strings larger than 24 bytes.
- Major(Granite 10) Fixed CAN not working on ports 2-4.
- MajorThe streaming options in HTTPPost() are supported.
- MinorThe Granite 10 now pass all the SDI-12 Verifier tests.
- MinorThe compiler was updated to generate an error when quotes are used to declare an Alias. Example: Alias V = “newName” (error), Alias V = newname (correct).
- MinorImproved detection of Ethernet cable removal.
- New FeatureQuadrature() is now supported.
- New FeatureGetDataRecord(), AcceptData(), SendData(), and GetVariables() are now supported.
- MinorWaitDigTrig() flags a compile error if it is declared inside a loop within a Scan.
- MinorImproved micro-SD card insertion detection.
- MinorThe compiler was updated to allow spaces in Alias() array declarations.
- MajorBefore creating a WIFI 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.
- New FeatureModbus is now supported.
- MinorPWM() allows the Period parameter to be a variable of Type Float.
- MinorFiles with a wild card name are uploaded correctly by LoggerNet scheduled file collection.
- MinorSFTP key authentication is supported.
- MajorSettings of Type String are updated correctly when using SetSetting(). For example, SetSetting(“IPAddressEth”,”192.168.1.1”). In OS version 1.0, string settings were only updated when the fist character of the string was changed, or after factory defaults were applied.
- MinorImproved CDM module support.
- MinorEncryption() with option 0 returns the correct length of the original input.
- New FeatureAVW200() is now supported.
- MinorDouble-precision now uses a maximum resolution of 15 digits instead of 14.
- New FeaturePortBridge() now supports the SDM-SIO1A and the SDM-SIO4A.
- MinorPortBridge() 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.
- MajorThis OS release has many improvements to overall system stability over release 1.0.
- New FeatureThe CPIStatus table now displays CDM OS versions.
- MinorAdded terminal watch for CAN ports.
- MinorThe 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).
- MinorTOA5 format options in TableFile() display "NAN" instead of null for floating point numbers.
- MinorRS-485 half-duplex operation now correctly handles transmit and preparing the interface for reception.
- MinorSettings are retained when updating the datalogger OS using a web.obj.gz file.
- MinorA variable of Type Double can now be aliased.
- New FeatureExternal GPS devices can be connected to COMC1 through COMC7.
- New FeatureThe terminal 'F' command now displays predefined constants as well as setting names.
- MajorThe CommsMode option is set correctly when SerialOpen() is placed between BeginProg and Scan. In Granite 9/10 OS version 1.0, the CommsMode state would alternate between RS485 and Not Configured on subsequent program restarts.
- MinorFlag an error if string operand to *,\,/,mod operators.