Added UTC Offset setting, used by SendEmail and HTTP. Also modified DaylightSaving/DaylightSavingUS functions to change the setting by one hour if in use and the time changes.
Added FormatLong() function.
Added variable initialization feature, as in Public Name(Dim) as Type = {v1,v2,...vN}.
Added an optional 3rd parameter for the DNP() instruction such that DSSS means: D = 1, disable 60 second Link Verification; SSS is retry timeout of SSS seconds (000 defaults to 3 seconds).
Improved DNP: 1) Don't keep the previous structure when the data tables are not preserved. 2) Fix possible memory corruption from releasing memory multiple times. 3) Fixed possible watch dog when large responses with event data are longer than one fragment.
Optimized internal function that converts floats to string. This improves performance of TableFile when creating TOA5 files.
Improved TableFile. Created a new task to handle writing to files without holding up the processing. One task will handle all TableFiles. If the last write is not complete when it is time to write again then processing will wait. Task also handles SC115 being first being plugged in. 2) Fixed the filename creation and sequencing when digits are at the end of the file name, e.g., Table1.
Improved GPS: 1) Fixed occasional, unnecessary changing of the clock every second or two when the maximum allowable error is < 20 msec. 2) Improved better track time. 3) Changed so proprietary strings can be read and so that it works with all variations of NMEA RMC and GGA strings. 4) Improved detection of no PPS signal.
Changed FillStop so when table fills, record number and table defs are updated so LoggerNet can collect all of the data.
Changed SDI12Recorder so that if the variable command is 'C' instead of a previously issued 'C!", the datalogger will return 1e-9 until the timeout response from the previous "C!" expires. At this time it will query for the data and return the data (or NAN if unsuccessful) and exit, without issuing a subsequent measurement command.
Fixed SDI12Recorder so that at least 100 msec elapses between successive calls.
Changed so SDI12 communication is displayed via the terminal 'W' snoop command.
Changed SDI12Recorder to return NAN under the following conditions: 1) When busy with terminal commands. 2) When the command is an invalid command. 3) When the sensor aborts with CR LF and there is no data.
Modified histogram to detect special disable var = 12345. This overrides the constant NoReset and resets the histogram (if outputting). If disable var is -12345 then the histogram is reset whether outputting or not.
Fixed RWIS (NTCIP) clock set function and TimeZone such that if the UTC Offset setting is active, then it becomes the RWIS Time Zone variable.
Changed FTP Server to not drop the connection if it gets an AUTH request that it cannot satisfy.
改变了HTTP客户机和t也与谷歌合作o be more efficient when retrieving a file or default web page by not requesting that the client ask for a new location.
Changed HTTP syntax for entering security on URLs such that when there are multiple commands, it is entered as the last command as "&security=xxxx".
Added Rename command to FTP Server which uses the CRBasic semaphore #4, as does the HTTP get file.
Changed the HTTP web server so that it gets and uses the CRBasic semaphore #4 before serving up a file. This can be used along with CRBasic programming to coordinate access to a file with the same name.
Fixed HTTP when setting a variable of type String.
Changed ModBusMaster so that the Function, Start, and Length parameters can be variable.
Improved ModBusSlave to allow multiple ModBusSlave instructions, with different addresses, over TCP/IP.
Fixed Public variable declared as "is" crashing precompiler when used later.
Fixed Log10 to return NAN when it receives a value <= 0. It was returning 0.
Fixed SDM synchronization with measurement.
Fixed VoiceNumber(timeout) function.
Fixed AVW200 so that if it times out without response it will set the result code correctly and put NAN into the return values correctly.
Fixed possible memory problem with file upload when aborted with two different tasks releasing the same memory.
Fixed PakBus file retrieve so files are closed when file transfer is aborted by the client. The symptom was that the datalogger could run out of file handles so that the drives were not accessible.
Changed support for COM320 so that servicing keys does not get behind speaking.
Modified SDI-12 Sensor to clean up verifier failures.
Fixed precompiler when working with encrypted Include files.
Fixed using fieldname when sampling Status.TimeStamp in a data table. This was crashing the precompiler.
Added CS7500 Mode 3. It returns only the diagnostic, bandwidth, and delay interval.
Fixed SerialFlush for Com1, Com2, Com3, and Com4 so that a usec window of time is protected from incoming bytes possibly causing a watchdog interrupt and garbage bytes read into the serial buffer.
Fixed a problem with auto-ranging measurements in SlowSequences when using 50Hz and 60Hz rejection integration.
Changed updating CompactFlash card bytes free to check if the info sector is used. If it is not then update it. This avoids the repeated long delays of determining bytes available on the card.
Improved SequentialMode scans so when starting SequentialMode scans, the datalogger doesn?t lock the measurement semaphore while synchronizing time to the new scan interval.
Changed CardFlush instruction to flush all pending TableFile data as well as CardOut data.
Fixed a problem calculating offsets into an existing TOB3 file. This caused corrupt file headers when a table storing to a card was reset after starting to store to it. Also if the file existed when the program compiled then the table was filled and rung, the header was corrupted.
Changed DataInterval as follows: If the TrigVar in the DataTable instruction is not True when the DataInterval time for output is due, discard and reset the intermediate processing values right then rather then waiting for a time when the TrigVar is true. This way, on the next Interval step, if the TrigVar is true (and the table is called), we can get good output, with processing based on the correct Interval (based on the DataInterval instruction).
Removed a change made in OS 15.05 (released OS 16) which forced x ^ y to a double to avoid over ranging integers. This was causing incorrect evaluation of expressions like 180/2^15. If the result will over range an integer then the expression should be forced to a float.
Allow Alias and Units declarations to reference a declared string constant as an aid to foreign language support, as in: Const PTempUnits = CHR(HexToDec ("C9")) CHR(HexToDec ("E3")) CHR(HexToDec("CA")) CHR(HexToDec ("CF")) CHR(HexToDec("B6")) CHR(HexToDec ("C8")) Const PTempAlias = CHR(HexToDec ("CE")) CHR(HexToDec ("C2")) CHR(HexToDec("B6")) CHR(HexToDec ("C8")) Alias PTemp = PTempAlias Units PTemp = PTempUnits
Changed PWM to force the hardware to be updated the first time through when the duty cycle is zero. It was already updating for all other values, but zero was leaving the hardware unchanged.
Fixed ExitScan in SequentialMode not releasing the semaphore when executed from the main scan.
Added DisplayMenu mode -4. This works like -3 (show only the user menu with no system option), but adds the Display Settings menu to allow changing display parameters (timeout, contrast, etc.). Also changed mode -2 and -1 to include constant table menu (ConstTable) if one is active.
改善VoiceSpeak——如果voice.txt预编译程序is not present, don't give an error and assume program is being compiled for a COM320. Also, only try to open the voice file once.
Changed Alias declaration so that a constant string expression is legal.
Fixed Pwr(x,j) when x < 0.
Changed setting the baud rate for Com1..Com4 such that if it was changed (via the keyboard/display or via DevConfig)from 0 to non-zero or from non-zero to 0, the datalogger will recompile its program. If changed to non-zero, activate the ComPort as a PakBus port.
Changed keyboard/display editing so that when Num Lock is Off, the up and down cursor keys will scroll through the alphanumeric characters.
Changed editing the ConstTable and editing files via the keyboard/display so that the prompting is more responsive.
Fixed the User Function so that a reference to a user function name must be followed by a '(' if the function is meant to be called, else it is simply assigning or referencing a return value for the function. Also, flag an error if a function is recursively called.
Changed TimedControl to allow for synchronization intervals greater than one hour.
Added another output mode to output duty cycle 1 and 2 for TGA instruction.
Fixed some of the options in CheckSum so that if the length parameter is negative, it will exit immediately instead of locking up for a long time.
Fixed modem connecting using the COM320 when the Voice Sequence is using long delays.
Changed constant table (ConstTable) so it can be used in an Include file.
Added a compile error if a subroutine name is entirely numeric.
Fixed HexToDec("0") ? Function was returning NAN instead of 0. This was a bug in the low level scanf function when using the %x format.
Fixed expressions such as A - B*C in the case that A is of type Float while B and C are both of type Long.
ReadIO, WriteIO and SW12 changed to allow the source variable to be a variable of type Long.
Changed SerialOutBlock when outputting in PipelineMode so that the 'W' snoop command in the terminal mode will show the output.
Changed AVW200 instruction so that the destination, multiplier, and offset can be variable.
Improved COM320 - 1) Don't duplicate the compile warning message that the file Voice.Txt is not present (the COM320 does not use Voice.Txt, and this message is only for the Com310.) 2) When there is no VoiceBeg/VoiceEnd sequence active, exit as soon as a tone is received instead of staying on line for 3 messages.
Fixed RoutersNeighbors() in the case that the array is not large enough to hold all the routers. Also included the datalogger itself as one of the routers if it is a router.
Added feature to PakBus File Directory retrieval such that ".DIR/DRV/Filename" can be used to retrieve only the information for "DRV:FileName". Filename can have wild card characters.
Allow both Ethernet and PPP interfaces to work concurrently by adding a route when an IP packet is received back to the same source that it came in on for the first hop.
Fixed Move() instruction to work correctly with Boolean arrays.
Fixed SplitStr when the filter is white space (space or tab), and also when the right justify option is used when the destination variable is numeric (not a string).
Added feature to File Manager Setting so that an incoming file can be copied into two different files if there are two settings with the same node ID and the same file extension.
Fixed the Files Manager setting in the case where more than one setting is active and the sources are not both from a PakBus node, or not both from an FTP source, or not both from a FileOpen source. If the two files came in at the same time from two different types of source, then the file name might be corrupted.
Changed CR800 compiler to return a compile error if EthernetPower() is in a program.
Added a compile error when there are multiple instances of NewFieldNames or of the wireless network instruction.
Removed possibility of PipelineMode skipped scan measurements overwriting processing data for one scan prior to detecting the skip.
Fixed precompiler to work with encrypted program files.
Improved the compiler's catch of a syntax error in the For statement.
Fixed table called outside of Scan..NextScan. Calling table multiple times was hanging the task that called it.
Added TLS (Transport Layer Security) protocol which can be used with EmailSend and EmailReceive.