(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.
(WARNING) This operating system version (starting with operating system version 31.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().
(minor) TimeUntilTransmit() is no longer allowed outside a Scan/NextScan.
(minor) The GPS() instruction now accepts values prefaced with + or -.
(minor) The public declarations for the EssVariables() instruction now require a ten-element array for indexed OIDs.
(minor) The SNMPVariable() instruction now allows new OIDs to be inserted before the EssVariable space.
(minor) The ETsz() instruction now outputs the correct units.
(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) Settings.PPPInterface now disables auto baud functionality. A specific baud rate must be set.
(minor) The SDI12Recorder() instruction now detects if an error occurred while waiting for the ttt seconds timeout before getting data with the D command.
(minor) The SDI12Recorder() instruction timeout now ignores noise spikes while waiting for the sensor to be ready.
(minor) A Pointer can now be sent into an Array when the index is not constant. In previous operating systems, 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) The timeout parameter in the EmailRelay() instruction is the value specified (not twice the value, as in previous operating systems).
(minor) The Subject parameter in the EmailRelay() instruction now allows the subject to be Constant.
(minor) Function declarations now output the Return value when no parameters have been defined.
(major) PPP now discards packets with a bad Checksum when a modem is attempting to establish the PPP session.
(major) Settings.PPPDial now keeps the RS-232 port awake when the setting equals "PPP." In previous operating systems, the RS-232 port would go into sleep mode, which disabled communication between the datalogger and the cell modem. This issue was only present with datalogger and Raven XT combinations. Datalogger and RV50 combinations were not affected.
(minor) DNS will now attempt to resolve IPv6 first then IPv4.
(minor) The default DNS server is now listed last. The specified DNS address is listed first.
(minor) Storage to a one-byte string is now allowed (String * 1).
(minor) The Timer() instructionnow uses the system time instead of the clock so the timer is independent of the clock being adjusted.
(major) The ClockSet() instruction now avoids skipped records when the clock adjustments are less than one second.
(minor) The ClockSet() instruction will now allow "/" in the date if the parameter is of type String.
(major) The memory error that occurred when two PakBus/TCP Client connections were pointing to each other no longer occurs.
(major) Fixed an issue that could result in corrupt data on an external memory card 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, the read pointer for the card in internal memory was not established correctly on program start up, resulting in corrupt data on the card.
(minor) The Skipped System Scan counter no longer increments when the 4 second background calibration is deferred to the next available time slot due to measurements in a SlowSequence.
(minor) UDPDataGram() can now receive from multiple clients.
(major) Fixed ComME dead lock issue that could occur at program startup.
(minor) Added optional parameter (ExcusiveOption) to the IPRoute() instruction that is useful if more than one active interface is available (e.g., PPP and Ethernet) but the specified interface should be used exclusively for this outgoing communication.