(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.