Changed capability so OS can no longer be remotely downloaded into 2M dataloggers because of size increase in the OS. It can still be downloaded directly via DevConfig into 2M dataloggers.
Changed PakBus Comms watchdog timeout from 30 seconds to 10 minutes so that an inadvertent watchdog does not occur while a valid process is active. Addresses triggering of PAKBUS COMMS watchdog timer.
Added support for compact flash cards greater than 2G.
Changed SecsSince1990() to return date formatted as a String instead of as a Long if the return variable is of type STRING.
Added Append File (APPE) to FTP Server.
Added Append File options to FTPClient.
Added TableFile TOB3 output.
Added CWB100Diagnostics() instruction.
Added NL240 support as separate IP settings.
Added HTTPPost() and XMLParse() instructions.
Added CustomMenu DisplayLine().
Changed CWB100Routes() to parse each route into a separate array element of the destination if the destination variable is an array.
Changed CWB100() to not attempt to update the Card header information at compile time before the Card is initialized. When the card starts, the new table info will be used to create the header.
Fixed TableName.FieldName() reference so that in some expressions it is not truncated to an integer.
Fixed TableName.FieldName() when passed into a user function and when the type is FP2 or a timestamp converted to a date string.
Fixed expressions with table.field using a special field (Record etc.) using an uninitialized pointer when it is the endo of the expression (e.g. IIF(Test.Record(1,1)<0,0,Test.Record(1,1))). This was crashing pre-compiler.
Changed directory list behavior so that files currently being written by TableFile() will not be displayed. This prevents unsafe file access during the file write process.
Improved SortSpa: A new, optional, "dimension" parameter is added that will specify the dimension to sort on. 3 would be used with a 3 dimensioned array, 2 with a 2 dimensioned array. 1 (or the parameter is not present) would sort as it does currently.
Enhanced spatial instructions MaxSpa(), MinSPa(), AvgSpa(), RMSSpa(), and StdDevSpa() to allow the source to be type Long. When Source is LONG the destination can be either FLOAT or LONG. CovSpa() still only allows Float.
Fixed Compressed OS download.
Fixed GetVariables() when requesting type string and the swath requested exceeds the size of the variable. This was causing a hang condition.
Fixed TimeIntoInterval() / IfTime() problem introduced in OS 24. Not evaluating as true when the interval is a variable and is > 1 hour.
Changed Maximum() and Minimum() to store NAN if any NANs occur in the input.
Changed Median() output instruction to store NAN if any NANs occur in the data set.
Changed WindVector() to load all outputs with NAN if no values were processed for the current output interval. This can occur if the disable variable is set for all executions of the table. It is preferable to output NAN instead of 0 to flag the user not to consider the data valid.
Fixed SlowSequence scans syncing scan interval to system time when multiple clock sets occur between scan intervals.
Fixed PPP dialing in the event that a PPP session is terminated and before dialing is resumed characters from the modem enter the terminal mode causing PPP dialing to possibly not resume.
Improved PPP by having DTR (or ME or SDC) turned off during 2 to 3 second delay before starting to dial for PPP.
Fixed PPPOpen() to correctly return if initially closed then re-opened. Previously it was erroneously waiting 30 seconds and then erroneously returning "0.0.0.0".
Improved TCP by only doing TCP Beacon once if not yet a neighbor to avoid excessive traffic during a denial of service attack.
Changed threshold for triggering Out of IP Memory watchdog from 10 minutes to one hour. There are circumstances where it is acceptable for the memory to be low for a longer period of time (such as when downloading large files over IP).
Changed access to terminal mode. If the TELNET service is disabled then also disable entering terminal mode except through BMP/PakBus.
Changed EssVariables so that ?EssVariables Dim? declares all the ESS variables as DIM instead of PUBLIC.
Disabled SNMP protocol until ESSInitialize() executes at run time.
Allowed PakBus Node setting to adjust the TCP/IP Memory available. This can be monitored by the COMMSMemFree(2). (Default of 50 nodes results in 32 packets of memory.)
CR1000/CR800: Improved excitation channels by switching excitation channel to an off state when turning off switched analog power. This change was made to avoid voltage spikes on excitation channels when turning on analog power.
Changed internal function findrecord() to handle dealing with a hole in the record number differently. Previously the record prior to the hole was returned. This resulted in duplicating records in requested data. Now the record following the hole is returned so collection can proceed. Holes are introduced if a card is used and removed long enough for the internal memory to ring around completely, then the same card inserted again.
Fixed not writing data to card if the following sequence occurred: a) card removed; b) powered removed; c) card inserted; d) power restored. Records stored in SRAM while the card was removed before loss of power were not being written to the card when power was restored.
Fixed watchdog condition trigged by closing card files that were left open across a power cycle. (Introduced in OS24)
Improved AcceptData() so that compile error is flagged for a duplicate source PakBus address and Data Table ID.
Improved SDM. Enforced a timeout for SDM measurements. When time is changed and the SDM task resyncs with measurement there was a chance of stopping the program scan.
Added ModBus support via SDM-SIO1.
Enhanced ModBusSlave(port,...) so that if port is >=502 and <= 65535 ModBusSlave will listen on this TCP port number.
Improved HTTP and FTP. When the HTTP server and/or FTP server is disabled, close all existing connections to the disabled server.
Extended timeout on a file opened for writing to accommodate the time for TLS negotiation when using an HTTPS client.
Changed HTTPGet() and HTTPPost(): If the custom header includes "User-Agent:" at the beginning of a line, the default "User-Agent:" line is omitted.
Fixed web service data query and sending data via FTPClient(), HTTPPost(), and EmailSend() when the data specified is a single field and the beginning index is not 1.
Fixed HTTP data query for data types TOA5 and TOB1 when using the TableName.FieldName syntax to query a single field in the table. (This was OK with xml, json, and html.)
Fixed IPNetPower() and EthernetPower() so memory is released. Could have resulted in watchdog when Ethernet was off for a long time.
Changed TLS memory allocation to wait for up to 3 minutes if memory is not available instead of watchdog. This will help when running TLS concurrently in different CRBasic sequences.
Changed Custom menu to clear screen if CR1000KD attachment is detected.
Changed DisplayValue() parameter type to match MenuItem().
Changed display initialization to accommodate CD100 better. Also, fixed situation where CD100 would continue in a high power state even when display was not active.
Changed SendData() so that multiple datatable records or all previously unsent datarecords can be sent with each execution.
Changed low level COM (1-4) driver to avoid the rare occurrence of getting duplicate bytes in the input buffer.
Increased processing stack size to 16K when TLS is active.
Increased the number of chained certificates allowed by TLS from 3 to 8.
Enhanced IIF() function so that it can be used with strings for the True/False parameters.
Fixed Function / EndFunction of type STRING to work when used as parameters within instructions.
Enhanced IP security by not allowing the FTP Server to connect the data socket via the PORT command to a machine other than the one that connected to it as the FTP Client.
Added DNP CRC option 22 to CheckSum().
Fixed DNP3 protocol when returning a swath of static values not starting at index = 0; also removed setting the "operation in progress" bit when executing control objects.
Fixed referencing special table fields such as TableName.TIMESTAMP or TableName.RECORD when used inside expressions which expected the reference to be of type STRING.
Improved consistency of units in Status Table.
Changed CalFile to handle reading a file larger or smaller than what is requested. If the signature matches the file will load up to the bytes requested or the end of the file whichever comes first. This allows previous values to not be lost if the program changes.
Fixed PortGet() when reading the state of Pulse Channels.
Fixed table output instructions, when not using OpenInterval, so that intermediate storage is cleared if a record is skipped. For example, Totalize() will now occur over 1 output interval and not two if record is skipped in between.
Changed background calibration so that it is re-enabled after leaving a scan where the datalogger automatically disabled it.
Fixed displaying UINT2 values in Final Storage on keyboard display.
Improved UDP discovery response by adding PakBus address and PakBus TCP port parameters.
Changed ModemCallback() so that it sends a value of type 4 byte integer so that a datalogger on the receiving end can accept it.
Change receiving a PakBus Get or Send values message to accept a 2 byte signed integer type as if it were an unsigned 2 byte integer type so that it will accept a ModemCallback message from earlier OS's.
Changed ModemCallback() to give up trying to find a neighbor after 10 tries (one try per second) after dialing was successful. The result code returned is -21 (cannot find route).
Changed Delay() instruction to allow the interval parameter to be of type Float.
Changed terminal mode 'W' sniff command to insert a carriage return character before the line feed for the benefit of telnet.
Improved CRBASIC to ignore line continuation '_' within comments. This was causing the line following to be ignored.
Added de-bounce to GPS PPS signal.
Changed GPS so that the NMEA string and the Pulse Per Second must be sync'd for 60 seconds instead of 10 seconds.
Changed GPS to not change time if the NMEA string time syntax is incorrect.
Changed GPS to not erroneously set new time if the NMEA strings are lagging more than 1 second behind the PPS because of receiver latency.
Fixed Units when an array is partially aliased and units need to be assigned to the remaining un-aliased fields in the array.
Fixed setting IPAddress and mask via keyboard display. (Introduced in OS24.)
Removed warning message about memory being re-initialized at compile time.
Changed XMLParse() to allow a file as the source.
Changed FTP Server to use ephemeral port starting at 1024.
Changed IPNetPower() for the CR800 to flag a program error if option 1 is used (NL115 or NL120).
Changed FileList() so that files that are open for writing are excluded.
Fixed WaitTriggerSequence from falsely triggering when time was changed.
Changed TableFile() by adding an option to not flush data to card when removal button is pressed. To use this, add 100 to the data format option parameter. For example, 108 for no-flush TOA5.
Added support for decompression of *.gz operating systems. For example, CR1000.Std.25.obj.gz.