Added Output instruction Moment. This instruction outputs the statistical moment of an array of data.
Added the FileSize(FileHandle) function which returns the number of bytes in the file defined by the FileHandle parameter.
Added TableHide instruction. This allows a table to be hidden from LoggerNet. If security is set in the datalogger when using TableHide, the highest level security password must be entered to see all tables.
Removed SetSettings instruction.
Added initial support for DNP3 protocol.
Added new COM ports SDC10 & SDC11, which allow for communication with an addressed device via the datalogger's CS I/O port.
Updated ModBusSlave to allow the user to specify a start register offset for all commands. The offset can be specified by entering Starting Register * 1000 + the address for the instruction's ModBusAddr parameter.
Updated SerialInRecord: 1) Returns a negative number of bytes received into a float variable if the destination string variable is not sized large enough to accommodate the number of bytes received. 2) Allows a variable to be used for the ComPort parameter. The instruction will be managed by the datalogger's processing task if the ComPort is a variable or it will be managed by the measurement task if the ComPort is a constant. This allows the instruction to be better synchronized to measurement for improved sensor readings.
Changed SerialOutBlock so if (1) the source parameter is a constant, (2) the COM port is COM1, COM2, COM3, or COM4, and (3) the NumBytes parameter is non-zero, the program will be managed by the measurement task, else the program will be managed by the processing task. This allows the instruction to be better synchronized to measurement for improved sensor readings.
Updated DialModem Communications: 1) If a modem is attached, the datalogger removes a device from its neighbor list after communication, thus stopping the datalogger from sending neighbor verification packets to the modem that could put the modem into a non-responsive state. 2) Increased the wait time from 1 second to 2 seconds for echoes from AT commands. 3) The datalogger no longer sends "ATZ" to the modem.
Fixed communication via the CS I/O port when the datalogger is communicating with SDC devices: 1) After communication with an SDC device (including a keyboard display), the port did not go into low power standby mode. This could significantly affect power consumption. 2) Improved the concurrent use of modem enabled devices and SDC devices.
Added the capability to display the number of bytes free for the CPU drive. This allows software to display a value for the available memory.
Implemented several significant changes that affect use of the COM310 modem: 1) Changed communication on the datalogger's CS I/O port to allow concurrent communication with any SDC device while COM310 data mode is active. 2) Fixed an issue where in certain instances when using a COM310 and compiling a program that used voice instructions, the complete voice.txt file would not be loaded. This resulted in words missing from the datalogger. 3) Fixed a problem where communication was being dropped after a program was compiled. 4) Updated the OS so that a voice sequence can abort when a subroutine is running.
Increased the timeout for SDI12 terminal talk-through to 40 seconds.
Added the terminal mode 'C' command to allow editing values in the constant table (defined in the datalogger program by using the ConstTable..EndConstTable declaration).
Added functionality to WebPageBegin...WebPageEnd declaration: 1) Added the optional parameter units=TRUE to table commands. This will display the units for each field if defined by the Units instruction in the datalogger program. 2) Added the ability to apply a style sheet to the HTML page displayed by the datalogger (StyleSheet=filename.css).
Made significant improvements to TCP/IP, FTP, and PPP communication.
Fixed ComportIsActive instruction for non-TCP/IP communication ports.
Increased the amount of time the EmailSend instruction will wait for a response back from the email server before returning an error from 1 minute to 10 minutes.
Improved flushing the COM port buffer for COM1, COM2, COM3, and COM4. The potential existed for the end of the buffer to be overwritten if flushing the buffer was interrupted by another task.
Fixed the FileOpen function. Some of the Write options (specified by the Mode parameter) were not working correctly.
Improved subroutine calls to disallow concurrent execution of a subroutine by two different processing tasks.
Fixed subroutines so that ExitSub or Exit Sub can be used to exit a subroutine.
Changed TableName.Timestamp so that a timestamp returned as a string includes leading zeros.
Fixed TableName.FieldName(n,m) when trying to access an element in a multi-dimensioned String variable.
Changed the datalogger compiler to return an error when a string variable is not dimensioned large enough to hold the value returned.
Fixed the Sample output instruction when a source variable formatted as a Float was stored as a Boolean value. Values were not being stored as True/False (now, all non-zero values are stored as True (-1)).
Fixed Sample output instruction so usage of TableName.FieldName as the Source parameter will work correctly with FP2, NSEC, UINT2, and BOOL8 data types.
Fixed the Replace function to correctly replace the string when the two strings are not the same size.
Made changes to the CardOut instruction so that data tables on the datalogger's CPU will not be reset if a program storing data to a card is stopped, the CFM100 or NL115 card module is removed, and then the program is restarted.
Improved the data output formatting for the SDI12Recorder instruction. There were cases where invalid numeric sequences (such as exponential notation or NAN) were being sent to the sensor. This change forces values greater than 9 characters to return as +/-99999999.
Fixed SDMCD16AC instruction so that each array index represents a port on the SDM-CD16AC when the source variable is declared as LONG and >= reps*16.
Changed the SDMCAN instruction's ID parameter so that any value < -2047 will set the ID to an 11 bit ID of 0.
Fixed CRBasic compiler and datalogger OS so that they check string parameters for unmatched string delimiters (opening and closing quotes).
Changed the compile process so it is faster.
Fixed a problem where slow sequence scans were not synchronized with the datalogger's clock after the clock was set, which resulted in slow sequence scans not starting at the correct time.
Improved the processing of slow sequence tasks when a program is compiled. In rare instances, the datalogger would be put into a non-responsive state.
Fixed a problem where the datalogger was writing settings changes to flash on a timed interval. In some instances, a setting might be changed but not written immediately to flash. If the program was then recompiled, the setting would be set back to the previous value.
Updated InstructionTimes instruction to detect a variable out of bounds error and determine which line the error occurred.
Updated RealTime instruction to load the destination array with the current value of the datalogger's clock if the instruction is used outside of a Scan..NextScan (within a Scan, RealTime returns the time of the datalogger's clock that the scan began). The resolution of RealTime outside of a scan time is 10 ms.
Changed the PWR function to accept a non-integer exponent.
Fixed the MenuItem instruction when displaying and editing string variables.
Fixed the handling of floating points numbers when two very small numbers approaching 0 were multiplied together. The result returned was INF instead of 0.