(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().
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.
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 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 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:firstname.lastname@example.org).
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 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 COM1 to COM4 (TX/RX pairs). Previous to this change, the Settings Editor would show that baudrate was set on these communication ports when it was not.
Fixed a problem with the M terminal command that would momentarily cause a communication loss if the logger had a NL115 or NL120 attached to it.
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 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.