Measurement and Control Products for WEATHER Measurement and Control Products for WATER Measurement and Control Products for ENERGY Measurement and Control Products for MACHINES Measurement and Control Products for STRUCTURES Measurement and Control Products for EARTH
Software & OS Revision Histories Home

Show revisions

Search this product's revisions

CR3000 OS Revisions



Revision: 26

April 25, 2013

  1. Implemented support for CPI. Added instruction CPISpeed().
  2. Added support for CDM-VW300 and CDM-VW305. Added instructions CDM_VWConfig(), CDM_VW300Dynamic(), CDM_VW300Rainflow(), and CDM_VW300Static().
  3. Added PakBus communication encryption using AES-128. Added PakBus Encryption Key setting.
  4. Enhanced ModBusMaster() and ModBusSlave() by adding support for ModBus ASCII.
  5. Added HTTPPut().
  6. Added ability to stream table data using FTPClient(), HTTPPost(), HTTPPut(), or EMailSend() based on number of records or time-into-interval.
  7. Improved SerialOpen() by adding 76800 baud rate option for COM1-COM4.
  8. Changed TDR100() so that all configuration parameters are variable except for SDMAddress, Option, Mux/ProbSelect, and Points.
  9. Fixed IfTime() / TimeIntoInterval() to properly evaluate when a variable expression is used for time-into-interval or units and when the interval is > 1 hour and the time into is non-zero.
  10. Changed IfTime() / TimeIntoInterval() so that parameters of type float create a compile warning; parameters will be rounded to nearest integer.
  11. Changed default string size from 16 characters to 24 characters.
  12. Fixed TableName.Timestamp()returning date/time string when from within another instruction.
  13. Added new date/time formats to TableName.Timestamp() and SecsSince1990(). Option 5 excludes fraction of a second if zero and follows "YYYY-MM-DD_HH-MM-SS[.xx]". Option 6 always includes fractional seconds and follows "YYYY-MM-DD_HH-MM-SS.xx"
  14. Improved TableName.FieldName when converting number to string.
  15. Changed the numeric parameter behavior of CRBasic Functions so that if a String is passed in, a conversion to numeric is performed at run time. Previously a compile error was flagged.
  16. Added format string 'b' to FormatLong(); returns base 2 (binary) representation.
  17. Changed FormatFloat to remove a trailing '.'.
  18. Added Sprintf(); Sprintf(Dest,Format,Argument1..Argument10).
  19. Fixed string expressions when the concatenate operations are nested.
  20. Improved the TCPOpen() when it specifies multiple connections so that the array of connection handles specified will indicate that the remote side has closed the connection by setting the handle to 0 without needing to execute the TCPOpen() instruction.
  21. Changed TCPOpen() so that timeout parameter also applies to listening. Timeout parameter specifies amount of inactivity allowed before active connections are closed. 0 means no timeout.
  22. Added ability to use TCPOpen() to create listening socket for ModbusSlave(). This allows one to use TCPOpen() to specify an inactivity timeout for the connection.
  23. Changed IP handling so that all connections are closed when the datalogger goes to reset; this applies to all reset conditions expect unexpected events like loss of power.
  24. Changed IP reassembly of fragmented IP packets so that its memory usage is limited to 2176 bytes instead of 384K and the timeout for reassembly is 3 seconds instead of 120 seconds. This change prevents large UDP data grams that needed fragmentation or other fragmented IP packets that are coming in fast over Ethernet from eating up communication memory and therefore stopping all communication.
  25. Changed TLS to load user settings for certificate, key, and password.
  26. Changed UDPDatagram() so that it can optionally receive a UDP message response after transmission during the time specified by the timeout parameter.
  27. Enhanced FTPClient() so that local and remote filename parameters can be comma separated lists; e.g. "USR:file1.dat,USR:file2.dat"
  28. Changed EmailRecv() so it will decode with messages that are Base64 encoded.
  29. Changed EmailSend() to encode the message in base64. An '=' in the message would cause a problem.
  30. Fixed http data query of html formatted data of a single field when the time of query is > .5 seconds. After .5 seconds, the entire record was output instead of just the single field.
  31. Fixed HTTP server so that it properly handles the first IP packet received being less than 5 characters.
  32. Changed HTTP service to require administrative authorization to retrieve datalogger program files.
  33. Changed default HTTP home page to not display hidden files.
  34. Changed the HTTP Client instruction to not require the heading to specify either the length of the web page or "chunked" transfer encoding. If neither is specified it will wait instead for either the server to close or the 75 second timeout before quitting.
  35. Added a hold off delay of 200 milliseconds after a remote TCP Connection shuts down before its buffers that might hold incoming characters is closed. This change allows the last characters to be serviced from TCP clients or servers other than PakBus, e.g., HTTP, that close the connection immediately after sending their payload.
  36. Improved communication with NL200/NL240 with bridge mode enabled. Servicing them was slowed when an Ethernet module (NL120, NL115) was not also attached. Additionally, packets from the NL200/NL240 are now immediately sent to the IP receive task instead of waiting 200ms; this improves performance and memory management.
  37. Fixed DHCP so that it does not act on a network interface unless the device is present. Previously, if no NL240 or NL200 was connected there were still attempts to use DHCP.
  38. Changed the Ethernet driver so that it is more efficient discarding IP packets that are not for it.
  39. Fixed Serial I/O instructions to work with a TCP/IP handle of 255. 255 is the default terminal mode "talk through not active" com port, which caused a TCP/IP "com port" of 255 to not output or input to the serial buffer.
  40. Improved POWERUP.INI: a) fixed the delete associated data operation; b) fixed format command (5); c) added support for formatting any drive (CPU:, CRD:, USR:, USB:); d) added copy command (7). Command 7, copies files to the destination drive but does not set the run now or run on power-up attributes.
  41. Changed formatting a drive via the K/D and via File Control so that if a file is open for writing on the drive, formatting is disallowed.
  42. Fixed SetStatus() when setting a string variable array element that is not the first one.
  43. Changed ModbusMaster() and ModbusSlave() using SDM-SIO1 as interface to not over-ride settings specified for that interface by previously executed SerialOpen().
  44. Changed ModBusSlave() so that if a register below the specified starting register offset is queried, an error code of 2 will be returned instead of simply not responding.
  45. Changed ModBusSlave and DNP3 so that they can listen on multiple TCP ports.
  46. Changed DNP to serve up to 3 Masters instead of 2.
  47. Added support for the Delay Measurement and Record Current Time function codes used in time synchronization over DNP3.
  48. Changed DNP() by adding 2 parameters: UTC Offset and Max Msec Difference that are used to control setting the clock via DNP3.
  49. Implemented Object 11, Variation 1 and 2, in DNP3.
  50. Fixed DNP3 so it keeps data tables thru powerup. Previous OS's would not keep data if type 1 variables were not active.
  51. Changed DataGram()to allow a variable expression for the com port parameter and to allow the com port to be a TCP/IP socket handle returned by TCPOpen().
  52. Added to CRBasic SetStatus() to change the FTP, HTTP, and PakBus/TCP Service Port settings.
  53. Added action 21 to FileControl via HTTP and via BMP5 that is used for data recovery. It restarts the file specified, puts the data tables in a state so that the entire table can be collected, and stops the program from running before it can get started.
  54. Removed IP Information from the status table if no IP is active.
  55. Added indexing of disable variable arrays. Variable must be followed by empty parenthesis (). For example, Average (3,TempF(),IEEE4,TempF()=NAN)
  56. Allowed CR1000KD DEL key held down at startup to disable default.cr1 from running just like other programs.
  57. Changed CheckSum to add type 23. This returns the sum of all of the bytes with no masking. User can mask results as needed.
  58. Improved IPNetPower() so that it can be used at the very beginning of a program to turn off power to NL200/NL240.
  59. Fixed aliasing of variables within sub routines and functions
  60. Fixed Status.StartTime where data type of NSEC can now be sampled correctly.
  61. Fixed Sample() when the source is from another table with field type of UINT2.
  62. Changed Include File Name setting to trim leading and trailing spaces in file name.
  63. Fixed table definitions from hanging when updating after resetting status table.
  64. Fixed TableFile(64) TOB3 mode so that the read pointer is properly synchronized after a power cycle. A new file is always created at startup and will contain any previously unwritten buffered data.
  65. Fixed DataEvent() when using DataInterval() so that the correct number of records were written to final storage.
  66. Fixed precompiler to work with SendTableDef().
  67. Changed display of CommsMemFree array to be base 1. It will be displayed as CommsMemFree(1)...(3) instead of CommsMemFree(0)...(2).
  68. Increased File Control's reset advertise to 50 seconds hold off instead of 35 if PPP is active to give PPP time to shut down and start up again after reset.
  69. Changed File Control so that if we are already stopped when responding to the Stop Program command, we do not go through reset.
  70. Changed Keyboard menu to include USB: when copying files. Also made a change to accommodate longer file names.
  71. Improved auto allocation on cards. When auto allocating on the CF card and limiting the size of the file to not exceed 2G, include the size of the header in the check. Very large headers were causing attempts to create a file > 2G.
  72. Fixed preprocessing output to not duplicate lines of compound statements. Alias var()=al_name : Units al_name = m/s resulted in two identical lines in the output when using the precompiler with -p command line option.
  73. Changed COM320 Voice support so that garbage bytes handled to prevent premature hanging up.
  74. Removed sending Hello message to a router when set up as a leaf node in the case of a failed Send/Get Variable instruction. This was causing unnecessary communications traffic.
  75. Fixed Trim(), Left(), DisplayMenu() and other functions that return a string when their parameter is of type string and is Tablename.TimeStamp.
  76. Fixed single line If...Then...Else statements so that EndIf is implied at the end of the line and not after the first statement following Then. Example - If A Then B+=1 : C+=1 Else B=0 : C=0
  77. Changed ABS(Expression) to return as a LONG if Expression is of type LONG. This prevents loss of precision if the LONG Expression has more precision than Float. No longer need ABSLONG instruction; ABSLong() removed from CRBasic instruction pick list.
  78. Fixed status table units on calibration volts variable from Volts to mVolts.
  79. Fixed problem calling subroutine with a Scan...NextScan, when the main scan is set to run a fixed number of times.
  80. Fixed GetDataRecord() and AcceptDataRecords() when a communication error or timeout happens sometime after the second fragment of a multi-fragment record is received.
  81. Fixed terminal command SDI12 talk through to display exit message correctly when connected via TCP.
  82. Fixed compiler so that it does not crash while parsing SDI12Recorder() instructions that contain a SDICommand that is a compound string expression.
  83. Changed Terminal Mode 'P' talk through command so that it can handle a higher rate of incoming characters from the remote device being monitored.
  84. Changed Terminal mode 'F' command to ensure there is a valid public table before dumping the binary contents of it.
  85. Added to the Files Manager Setting node 3209 to specify logging communication traffic similar to that of the 'W' command. The "number of files" specifies the file size in bytes. The first character of the file name (after the drive) should specify 'W' for binary, 'w' for ASCII. The "com port" selection is specified by the number starting at the 2nd position. For example, "USR:W13Sniff.txt" would specify binary, 13 = TCP/IP communication.
  86. Added IP Trace option to terminal mode 'W' command.
  87. Added Ethernet misses to IP tracing.
  88. Added Ethernet packet sniff options to terminal mode 'W' command; shows first 54 bytes of Ethernet packets
  89. Fixed terminal mode 'D' command submenu when entering a task or command to not overwrite memory and therefore possibly cause a watch dog when 33 or more characters are input without a carriage return or space.
  90. Changed terminal mode 'D' so that names of tasks can be entered and recognized. This has not worked since all characters coming in the terminal mode are upper case and the names of tasks have lower case letters.
  91. Changed terminal mode to (1) allow the 'U' command only via PakBus, (2) provide a margin of 150 characters instead of 80 in print statements, and (3) display the maximum number of characters in a print statement at the top of the 'D' command.
  92. Fixed CRBasic Move() when moving within the same array and the array is of type STRING and when the Move must be done from end to start to prevent the destination overwriting the original source.
  93. Fixed sending PakBus messages over TCP/IP when the message including the low level quote characters are over 1500 bytes (about half of the characters in a 1000 byte packet are either 0xbc or 0xbd). The symptom is a watchdog with a watchdog text file indicating "Panic ptr underflow".
  94. Changed the Hello Request broadcast to "expect more client" instead of "expect more neutral". This changes the timeout for a response from 1.5 seconds to 40 seconds. The 1.5 seconds is sometimes too short when going through a modem via ComME, causing ModemCallback to fail.
  95. Fixed converting a long into a string to not convert to a float first which results in loss of resolution for numbers > 6 digits.
  96. Fixed TCP/IP serial output issue where several back to back output instructions plugged up the output stream.
  97. Fixed Slow Sequence scans sync'ing scan interval to new time when time is set multiple times between scan intervals.
  98. 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.
  99. Fixed For...Next so that start, end, and step conditions are evaluated before the statement block executes to match behavior of other Basic languages. Examples of conditions in which a For block will not execute include "For I=1 to 0" and "For I=0 to 1 Step -1". Also fixed compiler crash when "For I=1 to 1".
  100. Improved consistency of conversions from FP2 to String to eliminate reporting of false precision or and trailing zeros.
  101. Fixed editing ConstTable contained in an encrypted file Include file.
  102. Fixed DisplayValue() and MenuItem() so that the display is properly cleared after displaying long lines of text.

Revision: 25

July 10, 2012

  1. 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.
  2. 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.
  3. Added support for compact flash cards greater than 2G.
  4. Changed SecsSince1990() to return date formatted as a String instead of as a Long if the return variable is of type STRING.
  5. Added Append File (APPE) to FTP Server.
  6. Added Append File options to FTPClient.
  7. Added TableFile TOB3 output.
  8. Added CWB100Diagnostics() instruction.
  9. Added NL240 support as separate IP settings.
  10. Added HTTPPost() and XMLParse() instructions.
  11. Added CustomMenu DisplayLine().
  12. Changed CWB100Routes() to parse each route into a separate array element of the destination if the destination variable is an array.
  13. 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.
  14. Fixed TableName.FieldName() reference so that in some expressions it is not truncated to an integer.
  15. Fixed TableName.FieldName() when passed into a user function and when the type is FP2 or a timestamp converted to a date string.
  16. 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.
  17. 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.
  18. 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.
  19. 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.
  20. Fixed Compressed OS download.
  21. Fixed GetVariables() when requesting type string and the swath requested exceeds the size of the variable. This was causing a hang condition.
  22. Fixed TimeIntoInterval() / IfTime() problem introduced in OS 24. Not evaluating as true when the interval is a variable and is > 1 hour.
  23. Changed Maximum() and Minimum() to store NAN if any NANs occur in the input.
  24. Changed Median() output instruction to store NAN if any NANs occur in the data set.
  25. 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.
  26. Fixed SlowSequence scans syncing scan interval to system time when multiple clock sets occur between scan intervals.
  27. 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.
  28. Improved PPP by having DTR (or ME or SDC) turned off during 2 to 3 second delay before starting to dial for PPP.
  29. 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".
  30. Improved TCP by only doing TCP Beacon once if not yet a neighbor to avoid excessive traffic during a denial of service attack.
  31. 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).
  32. Changed access to terminal mode. If the TELNET service is disabled then also disable entering terminal mode except through BMP/PakBus.
  33. Changed EssVariables so that ?EssVariables Dim? declares all the ESS variables as DIM instead of PUBLIC.
  34. Disabled SNMP protocol until ESSInitialize() executes at run time.
  35. 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.)
  36. 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.
  37. 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.
  38. 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.
  39. Fixed watchdog condition trigged by closing card files that were left open across a power cycle. (Introduced in OS24)
  40. Improved AcceptData() so that compile error is flagged for a duplicate source PakBus address and Data Table ID.
  41. 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.
  42. Added ModBus support via SDM-SIO1.
  43. Enhanced ModBusSlave(port,...) so that if port is >=502 and <= 65535 ModBusSlave will listen on this TCP port number.
  44. Improved HTTP and FTP. When the HTTP server and/or FTP server is disabled, close all existing connections to the disabled server.
  45. Extended timeout on a file opened for writing to accommodate the time for TLS negotiation when using an HTTPS client.
  46. Changed HTTPGet() and HTTPPost(): If the custom header includes "User-Agent:" at the beginning of a line, the default "User-Agent:" line is omitted.
  47. 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.
  48. 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.)
  49. Fixed IPNetPower() and EthernetPower() so memory is released. Could have resulted in watchdog when Ethernet was off for a long time.
  50. 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.
  51. Changed Custom menu to clear screen if CR1000KD attachment is detected.
  52. Changed DisplayValue() parameter type to match MenuItem().
  53. 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.
  54. Changed SendData() so that multiple datatable records or all previously unsent datarecords can be sent with each execution.
  55. Changed low level COM (1-4) driver to avoid the rare occurrence of getting duplicate bytes in the input buffer.
  56. Increased processing stack size to 16K when TLS is active.
  57. Increased the number of chained certificates allowed by TLS from 3 to 8.
  58. Enhanced IIF() function so that it can be used with strings for the True/False parameters.
  59. Fixed Function / EndFunction of type STRING to work when used as parameters within instructions.
  60. 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.
  61. Added DNP CRC option 22 to CheckSum().
  62. 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.
  63. 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.
  64. Improved consistency of units in Status Table.
  65. 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.
  66. Fixed PortGet() when reading the state of Pulse Channels.
  67. 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.
  68. Changed background calibration so that it is re-enabled after leaving a scan where the datalogger automatically disabled it.
  69. Fixed displaying UINT2 values in Final Storage on keyboard display.
  70. Improved UDP discovery response by adding PakBus address and PakBus TCP port parameters.
  71. Changed ModemCallback() so that it sends a value of type 4 byte integer so that a datalogger on the receiving end can accept it.
  72. 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.
  73. 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).
  74. Changed Delay() instruction to allow the interval parameter to be of type Float.
  75. Changed terminal mode 'W' sniff command to insert a carriage return character before the line feed for the benefit of telnet.
  76. Improved CRBASIC to ignore line continuation '_' within comments. This was causing the line following to be ignored.
  77. Added de-bounce to GPS PPS signal.
  78. Changed GPS so that the NMEA string and the Pulse Per Second must be sync'd for 60 seconds instead of 10 seconds.
  79. Changed GPS to not change time if the NMEA string time syntax is incorrect.
  80. 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.
  81. Fixed Units when an array is partially aliased and units need to be assigned to the remaining un-aliased fields in the array.
  82. Fixed setting IPAddress and mask via keyboard display. (Introduced in OS24.)
  83. Removed warning message about memory being re-initialized at compile time.
  84. Changed XMLParse() to allow a file as the source.
  85. Changed FTP Server to use ephemeral port starting at 1024.
  86. Changed IPNetPower() for the CR800 to flag a program error if option 1 is used (NL115 or NL120).
  87. Changed FileList() so that files that are open for writing are excluded.
  88. Fixed WaitTriggerSequence from falsely triggering when time was changed.
  89. 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.
  90. Added support for decompression of *.gz operating systems. For example, CR1000.Std.25.obj.gz.

Revision: 24

December 23, 2011

  1. Added HTTPGet instruction.
  2. Added DataTime instruction as optional DataTable modifier. Parameter = 1 means time stamp the records with System Time instead of the Scan Time; parameter = 0 (default) means time stamp with Scan Time. Note that DataInterval will still use the top of scan to trigger the table.
  3. Added IPAddressCSIO, IPGatewayCSIO, and IPMaskCSIO settings to support new NL200 bridge mode. Old settings (IPAddress, IPMask, & IPGateway) remain. This allows multiple IP devices to be connected at the same time.
  4. Added IPNetPower instruction to turn power on or off for either the Ethernet or the NL200/NL240 network.
  5. Added EthernetPower() instruction to the CR800 so it can be used with a NL200.
  6. Added compile error if RETURN is used inside of a Subroutine.
  7. Added Compile Warning message if initialization of an array is out of bounds.
  8. Added .OGG files ("audio/ogg") as a content type returned with HTTP requests.
  9. Added support for decompression of *.gz programs. For example, myProgram.cr1.gz
  10. Added SolarPosition instruction. If Pressure is <0 then use the AirTemp to calculate an estimation of pressure. If Time is not a variable array then use the current time. Disclaimer: Only tested at Logan, Utah USA. Feedback on how it performs at other locations is welcome.
  11. Improved AVW200 by adding optional threshold parameter. The instruction will return NAN for frequency if the amplitude is less than the threshold. An error will be flagged at compile time if a constant mv level is entered that is < .01; i.e., < 10 uv.
  12. Improved TCP/IP so serial output instructions can send more than 1479 bytes of data.
  13. Changed TCP write when over PPP to wait for acknowledgement when > 2880 bytes have not yet been acknowledged, which makes transferring large files via ftp and HTTP over PPP more reliable.
  14. Changed large file transfer via FTP and HTTP over PPP so that it is more reliable by waiting for TCP acknowledgments using a smaller window.
  15. Improved FTP and HTTP servers so that they can receive large files much faster.
  16. Changed memory allocation for IP if datalogger memory size is less than 4 Meg and no program is running.
  17. Changed IP stack to start if PPP is active.
  18. Improved FTP server so that large files that take over 2 minutes to send are sent successfully.
  19. Changed FTP server when writing a file and a timeout error occurs to delete the partially written file.
  20. Improved TCPOpen() & UDPOpen() to add optional timeout parameter (4th parameter), in units of .01 seconds. If it is not present, it will default to 7500 (75 seconds).
  21. Change TCP/IP stack in how it handled out of memory condition. Sockets will be closed by TCP IP task when it detects the flag set when out of memory is detected. This avoids getting a semaphore lock in an interrupt.
  22. Improved FTPClient instruction to support FTPS if the option code is 1xx.
  23. Improved FTPClient instruction to allow directory retrieval in ACTIVE & PASSIVE mode.
  24. Added "Host: " field to header in HTTPGet/Post functions.

  25. Changed FTPClient so that when getting a file but some error is detected, (e.g., cannot open the data socket) the file is removed from the datalogger.
  26. Changed HTTP so if the .csipassword file is present it is used instead of the datalogger PakBus security settings.
  27. Changed TCP Port settings for PakBus, HTTP, and FTP to be unsigned instead of signed so that port numbers > 32767 are accepted.
  28. Changed PingIP to wait for DNS request.
  29. Changed DNPVariable such that if the flag parameter is a constant 0 then it will default all the flags to 1 ("On Line").
  30. Changed DNP3 so that more than 65535 events can be stored and so that it does not use twice as much memory as needed.
  31. Enhanced UDPOpen()to allow a zero length server name so that it can listen for communication from an unknown IP address.
  32. Improved AXTLS stack to accept asn1 type 0x0c used by some TLS servers, allowing the datalogger to work with them.
  33. Changed FTP Data Port range to 8019..8018 so that firewalls can be set up to accommodate this narrower range. It has been 8000..65535.
  34. Changed pre-compiler's table definitions of the status table in most cases identical to that of the dataloggers, in which case LoggerNet will not have to collect the status table's definition from the datalogger.
  35. Changed the TCP/IP windowing so that large files that are published to the datalogger via FTP or HTTP are throttled back enough to prevent running out of memory, possibly causing a watchdog error. The window is put to 0 if the datalogger has used 3/4 of its allocated big IP packets.
  36. Changed TableFile instruction's field names and HTTP DataQuery field names to look like a scalar if it is only 1 value and the beginning index is 1.
  37. Changed data query via HTTP and via BMP5 so that that no data is returned if the start time is newer than the newest record and so that the last record returned is the record just previous to the end date.
  38. Changed TCPOpen to not return until the connection is established.
  39. Changed HTTP BrowseSymbols command so it expands BOOL8 datatype to 8 Boolean fields per byte.
  40. Changed EmailRecv() so that the filters apply to the entire line in the header, not just the first N characters where N is the length of the filter string.
  41. Improved EmailSend and EmailRecv by adding tracing so that the conversation is traced if the trace code bit 16384 is set.
  42. Changed system to automatically allocate additional memory for TLS communications (TLS Enabled = 1) when a CRBasic program includes EmailSend(), EmailRecv(), HTTPGet(), and HTTPPost().
  43. Improved EmailSend, EmailRecv, and FTPClient so that they do the work in the CRBasic user sequences.
  44. Fixed EmailReceive() when the optional parameters are present.
  45. Improved MenuRecompile to work when there is no constant table present.
  46. Changed retrieving data via time so that if the time requested is older than the oldest data, then the oldest data will be collected. This affects BMP5 and HTTP data retrieval.
  47. Changed SerialIn() when waiting for input on a TCP/IP connection to return with 0 bytes if the connection is lost rather than continue to wait according to the user's timeout parameter.
  48. Changed HTTP so that if a drive but not file is referenced, as in /USR/, and an index.html or default.html exists on that drive, it will be served.
  49. Improved record allocation to allocate a record buffer for HTTP separate from the buffer used by the display so that concurrent use of the display and HTTP browsing data does not have problems.
  50. Removed listening on the HTTPS 443 port.
  51. Improved HTTP web service: error 404 handled without an extra crlf; if no tables exist, the data query acts correctly; files coming via the PUT or POST command that are "chunked" are read correctly.
  52. Added HTTP and FTP servers into socket task so file transfer does not interfere with the niche task. File transfer broken up so if the servicing task has other work it can be completed
  53. Changed Web Service and xml and json Data File display of BOOL8 data types so that they are converted to an array of Booleans as is done by LoggerNet.
  54. Changed SerialInRecord to optionally use a local read pointer out of the serial buffer to facilitate multiple SerialInRecords on the same COMPort. The option parameter accommodates this using the 3 least significant digit.
  55. Changed SerialInRecord to add an option so that the most negative integer (&H80000000) can be used for either the Start Word or the End Word to specify a NULL character.
  56. Moved TCP activity that involves file access out of the Niche Task so that IP memory is used more efficiently, lowering the probability of running out of IP memory that can cause a watchdog.
  57. Improved auto switch to sequential mode to not switch to sequential mode when SerialOut and SerialInRecord occur in the slow sequence.
  58. Improved starting up tables when reading data from the CF Card. 1) the file position was not set to the end of data correctly and 2) the read pointer into the copied data was such that the data copied in from the card was subsequently written back to the card resulting in duplicated data on the Card. This was only a problem in the CR9000X because the battery backed RAM of the other loggers removes the need to copy from the Card to internal memory at power up.
  59. Added checks in Card accesses to avoid reads/writes, from other tasks, while the card is in the process of being removed.
  60. Change CardOut allocation to accommodate > 2G cards. Limit individual files to be no larger than 2G.
  61. Added TableFile mode to not flush all data to card when removal button is pressed. This is done by adding 100 to the option parameter.
  62. Changed Card removal to wait for TableFile to finish baling its data before turning the LED green.
  63. Added Force a frame footer to be placed in interval tables when reading data from cards.
  64. Changed AddUnits to allow Units to be assigned to 2 and 3 dimensional arrays.
  65. Improved calling a function with optional parameters to not require trailing commas.
  66. Changed PWM to recalculate the duty cycle setting when period is changed.
  67. Changed FileReadLine so that it returns 0 if a variable is out of bounds or there is no space for the line.
  68. Improved Status so when monitoring Status.CommsMemFree values are refreshed first.
  69. Changed the COMPort prompt in the terminal mode 'W' command if CWB100 is active on a control port.
  70. Changed internet date/time displays. Changed "Tues" to "Tue" and "Thurs" to "Thu" and GMT displayed if the UTC offset is active.
  71. Modified PortGet to allow ports 9, 11, and 12 to read SW12, pulse channel 1, and pulse channel 2, respectively. In the CR3000 9, 10, 11, and 12 are valid, this corresponds to SW1, SW2, pulse channel 1, and pulse channel 2.
  72. Changed 'W' and 'P' command in terminal mode, allow a max of 2 days for the timeout entry.
  73. Improved terminal mode 'P' and 'W' to add some messages if the mode is exited and also changed to keep the terminal mode comport open during the user's specified timeout.
  74. Changed "Exiting from talk thru" to "Exiting" when exiting from either talk through ('P') or sniffer ('W') in terminal mode.
  75. Changed telnet/terminal/sniffer ('W') command so that the timeout specified by the user will keep the telnet connection open 40 seconds beyond the timeout of the sniffer.
  76. Changed CWS100 RSSI and Routes so they put the priority of their task back to normal. It previously was left in a high priority state that did not allow communication tasks to get in if the program contained tight loops, as does Send and Get Variables.
  77. Changed ModBusMaster to allow a constant Variable parameter if the Function parameter is also constant and is not in the range of 1..4.
  78. Changed to not allow Aliasing of Aliases.
  79. Changed IfTime() and TimeIntoInterval to flag a compile error if they cannot be synced to the scan interval.
  80. Improved SampleMaxMin to work with string source variables.
  81. Improved memory functions to detect insufficient memory for variable space and don't initialize.
  82. Changed FileEncrypt to only check the first byte in the file to determine if the file is already encrypted. Since control characters can be entered into strings they may have the MSB set and be legitimate so we don't want to stop encrypting.
  83. Added listening for a connection to a UDP "Discover Port" 6785. This is used by DevConfig.
  84. Optimized handling ARP packets via Ethernet that are not for the datalogger to ease use of IP memory packets.
  85. Optimized TLS memory usage to use less memory; CommsMemFree(1), when TLS is active, starts out at 0225459999.
  86. Accept Constant strings to be used as TableNames in DataTable and CallTable.
  87. Changed TableFile to correctly establish the number of files when the disk is full.
  88. Changed TableFile to not add error into compile results at run time when the drive fills up.
  89. Changed TimerIO to synchronize all involved timers when doing time since edge or time since channel 1. Also fixed case where error condition of signal too fast was causing an extra value to be written to user variable if timing since another edge.
  90. Changed SlowSequence in PipeLine Mode to allow CS616 and PeriodAvg.
  91. Reformatted IP information in the Settings and Status table to include before the so that telnet displays it better.
  92. Changed web service so that HTTP DataQuery & BrowseSymbols retrieving data arrays by including index of name when there is only one value & the index is greater than one.
  93. Fixed issues when flushing card (via eject button or CardFlush ()) and TableFile & CardOut are active so that the most recent data was correctly stored on the card.
  94. Improved OutofMemory() (internal function) to not cause a watchdog if called while stopping currently running program to start a new program.
  95. Fixed terminal mode 'W' command to not include COM3 and COM4 for CR800.
  96. Fixed synchronization of Digital task sequencer when it skips scans due to being too long in acquisition.
  97. Fixed DialModem instruction when using control ports, COM port was mapped incorrectly.
  98. Fixed HTTP data query via date range.
  99. Fixed PPP so that if PPP is not open packets trying to be sent will be freed, avoiding an eventual watchdog because IP memory (CommsMemFree(3)) is exhausted.
  100. Adjusted TCP window advertisement so that large incoming files do not use all of the IP memory available, which can cause a watchdog.
  101. Improved IP memory handling when memory is exhausted to reduce watchdogs. When IP memory is exhausted, it first tries to free memory by closing sockets that have more than one packet waiting to output. This affects applications that have several sockets opened and then are suddenly disconnected.
  102. Fixed TLS stack so that if an error occurs, for example "bad certificate", it does not duplicate freeing up memory.
  103. Fixed ClockSet via HTTP to be insensitive to the order of the parameters.
  104. Fixed putting files via HTTP PUT/POST when the file is an OS to act like sending an OS file via LoggerNet, which stops the scans and frees memory used by data tables to make temporary space for the OS. Subsequent HTTP GET with the FileControl command will cause the new OS to install, similar to the actions taken by LoggerNet.
  105. Fixed web service SetValue when the value is to be set to "true".
  106. Fixed terminal mode serial talk through with SDM-SIO1 so that the I/O in the program is halted correctly.
  107. Fixed SDM-SIO1 so that when the buffer fills the serial input functions do not miss data in some rare conditions.
  108. Fixed calling functions and subroutines when the last optional parameter is not passed in; a ',' was expected whereas a ')' should be expected.
  109. Fixed error where datalogger was returning incorrect bytes free for USR: drive.
  110. Changed File system so that files left open for writing at reset are closed to prevent loss of drive size.
  111. Fixed FileClose instruction to initialize the controller if it has not yet been initialized. With recent changes close can be called before open and if that happens the controller must be initialized.
  112. Fixed a watchdog condition caused by a SlowSequence with measurement, running in PipelineMode, when the main scan was setup to only run once and took a very long time (> 1 minute) to complete.
  113. Fixed an erroneous compile error when calling a subroutine when there is no space between the subroutine name and the opening parenthesis and when the first parameter is itself enclosed in parentheses.
  114. Fixed problem where memory was corrupted caused by plugging RS-232 cable into CS I/O port with SC115 being the last device to be connected to the CS I/O port.
  115. Fixed CWB100 so that programs with variable names that start with the ArrayName in CWB100() do not erroneously get their name changed.
  116. Fixed CWB100() instruction so that data tables are not reinitialized on a power reset.
  117. Fixed ModBusMaster() when the function code is 1 or 2 (get coils).
  118. Fixed Move(y(i),n,y(j),m) when i > j; that is, when the destination and source overlap.
  119. Fixed IfTime (TimeIntoInterval) function when the interval and offset both have the same seconds component and when the interval also has a sub second component.
  120. Fixed the precompiler when parsing #if to 1) allow % in strings, and 2) not output comments within disabled sections.
  121. Fixed slicing AutoRange measurements in Pipeline Slow sequences.
  122. Fixed FieldCalibration for slope only calibrations via keyboard.
  123. Fixed EC100Configure so that SDM instructions that follow it will work properly.
  124. Fixed string initialization when CHR() is used in the initialization.
  125. Fixed AM25T in Slow sequence running in Sequential Mode. The measurements were being stored into the wrong buffer.
  126. Fixed BOOL8 for TOA5 & TOB1 files & TOB3 header.
  127. Changed internal function get_ptr() which determines if expressions can be evaluated prior to run time by checking the loaded expression opcodes. Under very rare circumstances this was crashing the pre compiler because the opcodes were read in advance and if read via pointers that caused the read to be out of bounds the .exe crashed. This was not a real problem because the values were only used if the context warranted it, but just the read caused the PC program to crash. The change was to only read from the pointers when they are actually used. This does change the OS too.
  128. Fixed FinalStorageCompile() an internal function. It had an out of memory problem caused by lack of memory when executing FinalStorageCompile(). When the Card bytes free field in the status table was populated, there was insufficient memory to initialize the Card and open the directory. The fix was to allocate memory prior to locking allocations, then free it just before updating Status.card_mem_free.
Home \ Software and OS Revision Histories