Software and OS Revision Histories

See the latest changes to our software and operating systems

CR3000 OS Revisions

Software & OS Revision Histories Home

Show revisions

Search this product's revisions


Revision: 11

Signature: 41019

  1. Fixed WorstCase not storing the correct number of records.
  2. Eliminated possible file handles leak with hidden files.
  3. Fixed TableFile interval mode tables off by one record between file data and table data.
  4. TDR100: Added more delay for TDR to respond after sending command and before receiving echoed command. Fixed loading the cable length in the waveform data when the TDR does not respond to commands.
  5. Fixed TCP/IP when sending PakBus packets with excessive amount of quoting. Packet size was exceeding the allowed size for Ethernet. Fix was to break up packet into smaller pieces.
  6. When converting a string to numeric, "TRUE" converts to -1 and "FALSE" converts to 0.
  7. Improved DNP3: Fixed problems with group 10, variation 1 and 2. Changed the response if the group and/or variation do not exist so that the sequence number is correct. Changed so that event timestamps are kept in UTC, using the datalogger's UTC offset setting if active. Fixed setting negative 16 bit integers.
  8. Changed String functionality: When comparing a String variable with a numeric variable, convert the string to numeric before comparing. Previously, if the string variable was on the left side of the operator, the numeric variable on the right was converted to a string before comparison.
  9. Improved checking for valid variable names. Don't allow ']', '[', or '#' characters.
  10. Changed SDM handling out of sync with measurement. Don't run through the acquisition code.
  11. Changed Files Manager Setting operation to eliminate possible corruption of the setting.
  12. Fixed possible problem with Files Manager setting partially changing the setting while concurrently recompiling. This is done by waiting for and locking the semaphore that protects the settings.
  13. Fixed terminal mode writing to an erroneous pointer in the case it timed out waiting for more input. For OS 16 this bug caused the table definitions to be corrupted due to overwriting the type of the CPUDriveFree field in the Status Table. In OS 17 this caused the Status table as a whole and the individual field CPUBytesFree to be uncollectable.
  14. Corrected a problem where the check for switching to sequential mode was being skipped. The "Do" instruction was not being detected as a conditional, so instructions that switched to sequential in conditionals were not.
  15. Change CallTable to 1) detect if called from outside Scan..NextScan and get pointer to correct time (system or scan). 2) Add checking to make sure the same table is not called simultaneously from multiple sequences.
  16. Added an optional parameter to GetDataRecord, MaxRecords. If MaxRecords is < 0, it will collect up to MaxRecords of the uncollected data, beginning with the oldest. If it is > 0, it will collect the uncollected data up to MaxRecords, beginning with the more recent. If not present, the default is 1 (the most recent record). Note that if the parameter is not 1, two exchanges will take place. The first will determine the current record number. Then a command to collect from beginning record number to ending record number will follow. - Fixed AVW200 when the destination has a variable index so that the data does not always store into the first variable that was accessed.
  17. Fixed potential FTP problem when dealing with file names longer than 12 characters. This was due to an OS build issue, where long file name support was not enabled in a header file accessed by the TCP/IP source code.
  18. If a default program compiled successfully after an attempt to compile another program resulted in errors, the error messages of the failed program will be appended to the compile results of the default program.
  19. Fixed SendFile instruction so that it does not sometimes erroneously report a file seek error -25 result code.
  20. Added a 3 second timeout when the VoiceSequence ends in the event that VoiceDial had triggered the voice sequence. This allows the COM320 to hang up properly before another attempt at dialing is made.
  21. Limited to only allow PWM instruction to occur once per port in a program.
  22. Fixed pipeline mode slow slicing issue that caused time to advance incorrectly due to the background calibration executing the task sequencer with the wrong starting opcode pointer. This was timing dependent, and required the measurement time to be 4 seconds long.
  23. Fixed AVW200 with variable reps so that the instruction will wait the extra 2 seconds per rep needed for the AVW200 to make the measurement.
  24. Removed non-interval table information from the pre-compiler's ?Show Labels? list output. Displaying this information caused confusion.
  25. Limited the number of files and COM ports that the user can open without closing in CRBasic so that the system does not run out of memory for normal file operations.
  26. Fixed reference to function names of type Long or Float, previously assigned, inside the function itself.
  27. Allowed variable initialization to occur on multiple lines, as long as the line break is after a ',' value separator.
  28. Fixed possible semaphore deadlock when retrieving files or getting table definitions while also concurrently servicing FTP or other file transactions via TCP/IP.
  29. Changed ModBusSlave as follows: 1) Accept a command to address 0 (a broadcast) 2) Added an optional parameter code that will allow Longs to be treated at 16 bits or treat 32 bit Floats or Longs as fully big Endian; i.e., it will reverse the order of the 16 bit registers.
  30. Changed terminal mode 'P' (talk through mode) and 'W' (snoop mode) to allow the user to override the default 40 second timeout. In addition the 'P' command will also stay on, like the 'W' command, if PakBus is active on the terminal COM port.
  31. Added "plain/txt" as a file type for http.
  32. Fixed sending attachments via EmailSend if the size of the attachment file is greater than roughly 3000 bytes. With these larger attachments, the boundary after the end of the attachment was not correct.
  33. Added globalLocalTimeDifference MIB to NTCIP.
  34. Added the FormatLongLong function which will convert a 64 bit long integer into an decimal string. The source is assumed to be 2 adjacent longs. Example: dim src(2) as Long = {2,3} public ID as String ID = FormatLongLong(src) ' ID is 8589934595
  35. Improved SNMP (NTCIP) as follows: 1) Allow time as mask variables' range to be the full 32 bits instead of just half. 2) Community names limited to only two, one with read/write access (default "private") and the second with read only access (default "public"). 3) Added an optional parameter to ESSInit that is of type String, can be variable, with two community names, comma separated, the first one with read/write access, the second with read only access.
  36. Fixed FormatFloat when trailing 0's need to be added since the precision specified is > than the precision of the value, when using "%.nf" where n is the precision.
  37. Improved TableFile: 1) updated the output status and the output file name at the same time. 2) Added more checking of return codes to improve robustness of the SC115. A power loss (or disconnected cable) during a write resulted in missing records. Now the failed write is detected and the last saved record number is not updated unless everything succeeds.
  38. Changed Custom menus to allow Constants from the constant table to be modified. To get this feature use MenuItem with the constant as the value to display, then use MenuPick with the Constant as the first name in the pick list, and subsequent pick choices as desired. Editing this constant will modify the value of the constant. For the change to be permanent (i.e., changed in the program) a new instruction: MenuRecompile(string,var) was added. After this menu item is selected for editing the expression for the variable is evaluated and if non zero the constants are saved and the program recompiles.
  39. Enhanced auto-switching to sequentialmode to include SerialInRecord and SerialOutBlock inside conditionals.

Revision: 10

Signature: 13348

  1. Added IPRoute() instruction.
  2. 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.
  3. Added FormatLong() function.
  4. Added variable initialization feature, as in Public Name(Dim) as Type = {v1,v2,...vN}.
  5. 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).
  6. 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.
  7. Optimized internal function that converts floats to string. This improves performance of TableFile when creating TOA5 files.
  8. 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.
  9. 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.
  10. Changed FillStop so when table fills, record number and table defs are updated so LoggerNet can collect all of the data.
  11. 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.
  12. Fixed SDI12Recorder so that at least 100 msec elapses between successive calls.
  13. Changed so SDI12 communication is displayed via the terminal 'W' snoop command.
  14. 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.
  15. 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.
  16. 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.
  17. Changed FTP Server to not drop the connection if it gets an AUTH request that it cannot satisfy.
  18. Changed HTTP to work with Google Client and also to be more efficient when retrieving a file or default web page by not requesting that the client ask for a new location.
  19. 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".
  20. Added Rename command to FTP Server which uses the CRBasic semaphore #4, as does the HTTP get file.
  21. 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.
  22. Fixed HTTP when setting a variable of type String.
  23. Changed ModBusMaster so that the Function, Start, and Length parameters can be variable.
  24. Improved ModBusSlave to allow multiple ModBusSlave instructions, with different addresses, over TCP/IP.
  25. Fixed Public variable declared as "is" crashing precompiler when used later.
  26. Fixed Log10 to return NAN when it receives a value <= 0. It was returning 0.
  27. Fixed SDM synchronization with measurement.
  28. Fixed VoiceNumber(timeout) function.
  29. 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.
  30. Fixed possible memory problem with file upload when aborted with two different tasks releasing the same memory.
  31. 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.
  32. Changed support for COM320 so that servicing keys does not get behind speaking.
  33. Modified SDI-12 Sensor to clean up verifier failures.
  34. Fixed precompiler when working with encrypted Include files.
  35. Fixed using fieldname when sampling Status.TimeStamp in a data table. This was crashing the precompiler.
  36. Added CS7500 Mode 3. It returns only the diagnostic, bandwidth, and delay interval.
  37. 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.
  38. Fixed a problem with auto-ranging measurements in SlowSequences when using 50Hz and 60Hz rejection integration.
  39. 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.
  40. Improved SequentialMode scans so when starting SequentialMode scans, the datalogger doesn?t lock the measurement semaphore while synchronizing time to the new scan interval.
  41. Changed CardFlush instruction to flush all pending TableFile data as well as CardOut data.
  42. 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.
  43. 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).
  44. 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.
  45. 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
  46. 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.
  47. Fixed ExitScan in SequentialMode not releasing the semaphore when executed from the main scan.
  48. 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.
  49. Improved precompiler for VoiceSpeak - If 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.
  50. Changed Alias declaration so that a constant string expression is legal.
  51. Fixed Pwr(x,j) when x < 0.
  52. 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.
  53. Changed keyboard/display editing so that when Num Lock is Off, the up and down cursor keys will scroll through the alphanumeric characters.
  54. Changed editing the ConstTable and editing files via the keyboard/display so that the prompting is more responsive.
  55. 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.
  56. Changed TimedControl to allow for synchronization intervals greater than one hour.
  57. Added another output mode to output duty cycle 1 and 2 for TGA instruction.
  58. 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.
  59. Fixed modem connecting using the COM320 when the Voice Sequence is using long delays.
  60. Changed constant table (ConstTable) so it can be used in an Include file.
  61. Added a compile error if a subroutine name is entirely numeric.
  62. 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.
  63. 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.
  64. ReadIO, WriteIO and SW12 changed to allow the source variable to be a variable of type Long.
  65. Changed SerialOutBlock when outputting in PipelineMode so that the 'W' snoop command in the terminal mode will show the output.
  66. Changed AVW200 instruction so that the destination, multiplier, and offset can be variable.
  67. 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.
  68. 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.
  69. 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.
  70. 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.
  71. Fixed Move() instruction to work correctly with Boolean arrays.
  72. 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).
  73. 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.
  74. 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.
  75. Changed CR800 compiler to return a compile error if EthernetPower() is in a program.
  76. Added a compile error when there are multiple instances of NewFieldNames or of the wireless network instruction.
  77. Removed possibility of PipelineMode skipped scan measurements overwriting processing data for one scan prior to detecting the skip.
  78. Fixed precompiler to work with encrypted program files.
  79. Improved the compiler's catch of a syntax error in the For statement.
  80. Fixed table called outside of Scan..NextScan. Calling table multiple times was hanging the task that called it.
  81. Added TLS (Transport Layer Security) protocol which can be used with EmailSend and EmailReceive.

Revision: 9

Signature: 57091

  1. Added new GPS() instruction. This is used to read in data from a GPS sensor. It can read in information such as Latitute, Longitude, Speed, Course, etc. This can also be used to keep a datalogger's clock synchronized with the GPS system.
  2. Added support for COM320.
  3. Added support for SC115.
  4. Added SemaphoreGet and SemaphoreRelease
  5. Added SerialBrk(port,duration) instruction. Sends a break on Com1..Com4 com ports. The duration parameter is in mSec.
  6. Added EthernetPower(state) instruction. The state parameter is a variable. Non-zero is on and zero is off.
  7. Added NewFieldNames(GenericName, NewNames) instruction. Used to assign a fieldname to a generic variable.
  8. Added GetFile() instruction.
  9. Added ClockChange() function that returns the change in the Clock, in milliseconds, since the last execution of the instruction.
  10. Added EndSequence instruction and flagged compile error when illegally locating Declaration Sequences such Sub/EndSub, DataTable/EndTable, ShutDown/ShutdownEnd, DialSequence/EndDialSequence, ModemHangup/EndModemHangup, and WebPageBegin/WebPageEnd. EndSequence ends the current sequence that started at BeginProg or after a SlowSequence and any accompanying Declaration Sequences. Only Declaration Sequences can occur after EndSequence and before SlowSequence or EngProg. Declaration Sequences can be located (1) prior to BeginProg, (2) after EndSequence or an infinite Scan/NextScan and before EndProg or SlowSequence, and (3) immediately following SlowSequence. SlowSequence code starts executing after any Declaration Sequences. The rule prevents insertion of a Declaration Sequence in the middle of some other executing sequence of code.
  11. Added PingIP("IPAddress",MsecTimeout). Returns response time in msec (0 if no response).
  12. Added FileEncrypt(filename) function. Returns true (success) or false. Used to encrypt CRBasic program files in the datalogger.
  13. Added Function/EndFunction, ExitFunction, and Return to CRBasic. Allows creation of user-defined functions.
  14. Added MuxSelect instruction. MuxSelect(clk_port,res_port,clk_pulse_width,mux_chan,mode) selects the specified channel on a multiplexer. Mux_chan can be a variable in sequential mode (it will auto-switch to sequential). Mode of 0 uses AM16/32A clocking, 1 uses AM16/32B clocking. This instruction can be used in conjunction with SubScan and PulsePort to control multiplexers. Example: MuxSelect(1,2,5,4,1) ' selects the multiplexer to channel 4 in B Mode SubScan (0,0,5) VoltDiff(Meas(i),1,mV5000,1,0,3000,250,1.0,0.0) PulsePort(1,5000) ' advance the multiplexer i = i + 1 NextSubScan portset(2,0)'shut off multiplexer (whether in A or B mode)
  15. Added ShutdownBegin/ShutdownEnd CRBasic declaration that defines a sequence of CRBasic code that will execute whenever the currently running program is gracefully shutdown. Such a shutdown event happens prior to compiling a new program or restarting the same program or by starting no program. Example: ShutdownBegin, SerialClose(Com1), ShutdownEnd
  16. Added RoutersNeighbors(DestArray(MaxRouters,MaxNeighbors+1)). Returns a list of all PakBus routers and their neighbors known to the datalogger.
  17. Added CSIXML data file type to TableFile. Model name, serial number, OS version, and program name are included with the xml file header.
  18. Added function so when downloading a new OS via LoggerNet, it saves all of the old settings even in the case that a new setting has been added.
  19. Added a new setting called Filter List that, if not empty, will allow only specified source and destination messages through that can alter the state of the datalogger. NOTE: This will cause settings to be reset, regardless of how the OS is loaded.
  20. Added support for DNP3 to use non-volatile final storage memory. It uses non-volatile memory reserved for data tables so that state and history is preserved through power resets and other reset conditions that preserve data tables.
  21. Added a warning in compile results if re-initializing final storage memory due to table mismatch or DNP3 change.
  22. Added a check for invalid Measurements per excitation in bridge instructions.
  23. Added SDM-SIO4 to terminal mode 'P' talk-through.
  24. Added trace info on DNS queries: address, age, time to live.
  25. Added Compile Error if a duplicate Sub is declared.
  26. Added Compile Error if the option parameter in Delay is > 2.
  27. Added "Name Server" and "Include File" as settings that can be changed via the SetStatus instruction. Name Server specifies up to two domain name servers that can be used for TCP/IP comms. Include File specifies a file that will be implicitly included at the end of CRBasic programs or a program to be run as the default program.
  28. Added checking of the length of the program file name to make sure it will run in the datalogger.
  29. Added a new setting: PakBus/TCP password. When active (not blank, and up to 31 characters in length), a log in process using this and md5 digest of a random number and this password must take place successfully before PakBus communication can proceed over the socket. The default setting is not active.
  30. Fixed GetPort to correctly load Boolean destination.
  31. Fixed encryption to work with Include files too.
  32. Changed setting clock via the keyboard so that the minimum day and month is 1 instead of 0, and the year is 1990 instead of 0.
  33. Fixed the keyboard/display for display of the dimensionality of an array of string names.
  34. Changed GOES: 1) Fixed TableOpt = 0 to send the most recent record only if it has not yet been sent. 2) Fixed sending records to GOES after &H80000000 (~2 GB) records have been sent.
  35. Improved SubScan..NextSubscan to be used in slow sequences. The interval parameter must be zero. This change was made to make using multiplexers in the slow sequence easier.
  36. Changed AM25T to allow it to be used in pipeline mode slow sequences. If slicing is required it is done on each measurement. This means that if using revdiff the two measurements may be sliced.
  37. Improved so if no card present then set all card table sizes to zero in status table.
  38. Changed data table instructions so that an expression can be used as the source, in which case the default field name is "Anonymous" with an incrementing suffix. For example, Average(1,2+Sin(x),IEEE4,0).
  39. Flagged a compile error if a string declaration is missing the '*' character before the size specification.
  40. Fixed EmailSend() so that when sent to multiple recipients, all recipients show up in the header instead of just the last address in the list.
  41. Fixed using TableName.FieldName as function parameters when the next parameter is a string parameter, as in FormatFloat(Table.Field,FormatString).
  42. Changed so if table requested table allocations change between compiles, as when new program sent with maintain data option, then re-initialize final storage memory.
  43. Improved to allow PortSet in pipeline slow sequences.
  44. Fixed TCPOpen() to work when the Port parameter is changed at run time.
  45. Changed AVW200 to allow Reps, Chan, Mux Chan, Vx, Begin Freq and End Freq to be variable expressions.
  46. Changed AVW200 response in the case of sequential mode and communication is cut off in the middle.
  47. Changed Warning Message to display the line number.
  48. Fixed keyboard / display when attempting to change a numeric value by entering more than 16 characters.
  49. Fixed Maximum and Minimum so that if one of the rep values is NAN on a scan when output occurs, all values are not set to NAN.
  50. Fixed Network Time Protocol client and server to remove a possible +/- 1 second error.
  51. Fixed PulseCount instruction when doing a running average of frequency to return correct values while the running average buffer is being filled.
  52. Changed so if running a Default.cr1 (or Include File if the setting is active), then wait to set Compile Ready until the Default program is loaded.
  53. Changed the DataTable time stamp to be the system time when called from outside a scan and when the table does not have a DataInterval declaration.
  54. Fixed the FindSpa Function to work with Long and String data types.
  55. Fixed adding and concatenating strings, including functions that have string parameters, to allocate enough memory.
  56. Fixed the DHCP Client Fully Qualified Domain Name option.
  57. Fixed HTTP displaying the Newest Record from the Public table when there are more bytes from variables declared as Dim and Public compared to the maximum number of bytes per record in the Data Tables and in the Public Table.
  58. Fixed false alarm Warning message when a Scan appears inside a subroutine before BeginProg.
  59. Limited the maximum size of the usr: drive to 400k - total memory available. When a larger value was entered the system crashed continuously.
  60. Fixed the RealTime Usec when called outside a Scan/NextScan. (It had 100 usec units there instead of usec, i.e., the usec field was 100 times too large.)
  61. Changed VoiceSpeak to handle case when voice.txt does not have a after the last word in the file.
  62. Changed TOB3 files to work with changed field names.
  63. Changed DHCP Client to advise the Server that its domain name is the Station Name.
  64. Improved efficiency of PakBus File Upload and retrieving Table Definitions and the directory, especially when the directory is large.
  65. Changed TableFile to allow Interval and TimeInto/Number of Records to be variable expressions.
  66. Fixed Sort not traversing far enough into the sorting array on initial pass that sets up the heap sort.
  67. Changed TimedControl to buffer the index values up to num_buffs deep and return the index that coincides with the scan that is being processed.
  68. Fixed Move instruction when source is a constant string.
  69. Fixed FieldNames description parsing when an array and description are both used.
  70. Fixed CRBasic accessing Status fields referencing Data Table information, such as Status.DataTableName(2,1).
  71. Changed CRBasic accessing TableName.FieldName(M,N) when the field data type is a time stamp. If M is > than the dimension of the field, and the destination is of type string, then M specifies the format of the time stamp returned as specified by TableName.TimeStamp(M,N).
  72. Modified formatting CF-Cards to always format FAT32. When switching from FAT to FAT32 this required rewriting the partition sector. Since the partition sector does not always exist the format always reads the low level disk geometry information and creates a new partition sector then formats (quick variety) the media.
  73. Flagged an error if a Boolean expression testing equality, such as (X = 1) is used out of context and would have no effect.
  74. Changed Neighbors Allowed setting so that if more than 10 neighbors are in the allowed list and the beacon interval is 0, the beacon interval is changed to 60 seconds and beaconing is used for neighbor discovery instead of directed hello requests that can eat up communications memory.
  75. Fixed GetVariables() and other PakBus communications instructions whose Result parameter is variably indexed so that the results for all iterations do not go into the first one.
  76. Changed EmailSend() to not advertise CRAM-MD5 authorization in the case that both the user name and password are NULL.
  77. Changed SerialIn so that the max number of characters can be a variable expression.
  78. Removed a 40 msec error when setting the run time datalogger clock from the battery backed up clock at reset.
  79. Improved going to low power standby when the system background calibration is waiting for the main scan to complete to slice in measurements.
  80. Don't allow reps on the same channel for bridges unless measurements per excitation equals reps.
  81. Fix Max when first value of a new interval is NAN.
  82. Changed Default datalogger generated web pages so that they pass "validation".
  83. Changed PPPClose to also look for "NO CARRIER" when ppp is closed before "AT" verification command is sent.
  84. Fix Precompiler checking for valid program filename length.
  85. Median fixed for reps>1 using FP2 data type.
  86. Fix Pipeline mode slow sequence slicing for Delay, and PulsePort instructions.
  87. Fix Status variable RunSignature to include the expression memory into the signature. Changing constants in a program was not giving a different signature. This caused LoadFieldCal to erroneously load the calibration data.
  88. FieldCal: include the reps as part of the signature used to determine whether or not to create a new file. Reps was changed and the old file was still used. This confused the FieldCal wizard. Also added checking for the gf_raw parameter to force it to be the same size as the other arrays etc. And fixed gf_raw when indexing into an array with reps set to 1.
  89. FieldCal: 1) added more checking for successful file creation. 2) improved checking to determine whether or not to use existing calibration file. 3) Added checking for reading and writing the file created. Will now give an error if the file cannot be created due to full disk.
  90. Fix sequential mode problem starting main scan causing the slow sequence to hang. This was only encountered in a CR5000 (because it is faster than the others), but was a potential problem for CR1000, and CR3000 too.
  91. Fixed a problem accessing TableName.Fieldname when in a parameter type that expects a pointer to possibly multiple values rather than a single value. The problems will exist in: SerialInBlock(comport,Source,..), the Source parameter CheckSum(Source,...), the Source parameter FileWrite/FileRead(handle,Source,..), the Source parameter FindSpa(SoughtLow, SoughtHigh, Step, Source), the SoughtLow, SoughtHigh, and Source parameters. Also fixed a problem when this type of parameter is an expression involving more than a simple reference to a variable.
  92. Changed Com1..Com4 activation so that if its baud rate setting is set to non-zero by some means other than SerialOpen(), then it will remain active even after switching from a program that uses SerialOpen to a program that does not. Previously, if a program was shut down that used SerialOpen, the comport would also be shut down.
  93. Fixed DNS client time to live to work with roll over timer.
  94. Changed PPP authorizations retry timeout to 15 seconds from 3 seconds.
  95. PPP PAP authentication tries reduced from 10 to 3.
  96. Allow Sequences like DialSequence/EndDialSequence, WebPageBeg/WebPageEnd, and VoiceBeg/EndVoice to be located inside a SlowSequence.
  97. Fixed FindSpa as follows: (1)when assigned to a non-scalar, (2) when the Low, High, and Source are Strings, and (3) when Low, High and Source are of different type, then a compile error is flagged.
  98. Fix Case statements with functions.
  99. Fix Alias problem when declaring an alias array. Very rarely an obscure and incorrect compile error resulted due to un-initialized memory.
  100. 'W' command in terminal mode enhanced to include TCP communication.
  101. TCP ModBus Master fixed to advertise number of bytes in packet correctly.
  102. Change main scan to recognize new time set without waiting for the next scan interval. The new time will now be detected as soon as processing for the current scan is completed.
  103. Fix memory problem created by the internal function that checks filename for tables storing to the card. The problem occurred only if the length of the table name (not file name) was greater than 8 characters. The problem was manifest by not being able to download files to the PCCard when the program had a CardOut instruction for the table that had > 8 characters in its name.
  104. Change FFT and FFTSpa options 1..4 to correctly return DC and Nyquist values.
  105. Changed compiler and pre-compiler to flag an error for alias declarations that are clearly illegal.
  106. Fixed x to power of y when x and y are long.
  107. Fixed sub 1 second error when setting the clock via LoggerNet.
  108. Changed GetDataRecord and AcceptDataRecords to work with TableFile.
  109. Changed FTPClient() to optionally do Passive Mode. The option code 2 = Send Passive, 3 = Receive Passive.
  110. Changed HTTP so that wget can be used to retrieve files since it could not handle "Chunk" data transfer protocol.
  111. Changed DialSequence to have its own thread so that it will not hold up various PakBus messages.
  112. Change FieldCal to give a compile error if KnownVar and MeasVar are different sizes.
  113. Fixed Network instruction to flag correctly overlapping networks that are identical.
  114. Allow declaration of public variables and constants to not cause a compile error when declared after variables declared locally to a subroutine with the same name.
  115. Change tob3 header creation to include array dimension info for fields that are created by sampling a single value from within an array.
  116. Card Storage change: When ringing the CPU memory force a flush of the file system to make sure there are no sectors hanging around in case power is lost.
  117. Improved synchronization between dig TS and processing when skipped scans occur or time is changed.
  118. Removed timeout waiting for the DIG_MEAS event. Will now wait forever.
  119. Fix data types reported in Pre-compiler table definition files to match the logger type rather than the endianness of the machine that the code is built for.
  120. Change PulseCount configure option to be a variable. This allows different sensor types to be configured within the same program.
  121. Change field formatting in table list option of precompiler. Added after each element of an array (to avoid lines too long). Also fixed dimension information for single values sampled from within an array.
  122. Changed string operators to all be case sensitive. Fixed String <, > <= >= and - operators to not return the negative value expected.
  123. Changed communications memory allocation so entire PakBus packet for output can be sent at once, else ComME packets could be broken up with pause/ready packets.
  124. Fixed SDC PakBus packets when specified to be broken up by the SerialOpen command to send the correct minimum size packets.
  125. Changed SDC output when special SDC addresses are specified by the SerialOpen (e.g., special communication with GOES) to used the baud rate specified by the SerialOpen command (the baud rate specified for ComME).
  126. Fixed the Network() instruction to (1) return the correct result code if the result code is of type float, and (2) to correctly advise the remotes on the correct time gap between each other's transmissions instead of telling them all to transmit with 0 time gap (on top of each other). This problem was introduced in version 15 when we made it work with Long. The problem was it forced it to Long instead of allowed it to be either Long or Float.
  127. Fixed the Routes instruction when not enough space is allocated for all the routes.
  128. Changed SerialOpen to allocate enough buffer space if PakBus format was specified with a larger buffer size than a previous SerialOpen had allocated.
  129. Fixed Email Send and Receive and TCPOpen to connect to a new server specified by a change in the server address parameter.
  130. Enhanced FileCopy to not return success if the filesize changes between opening the file and writing the bytes out, or if the file size is zero. This was done because of an application that was copying a file that was asynchronously sent to the logger on a periodic interval. Sometimes the copy in the program was occurring at the same time as the communications copy, this was resulting in a zero length file.
  131. Fixed array indices that are expressions that include floats and longs.
  132. Augmented 'W' command to optionally display ASCII and to not timeout if the terminal mode is via BMP5.
  133. Changed the Running Average instruction to zero the running total if the buffer is filled completely with NAN's.
  134. Changed http so that '?' used at the end of a file name will tell the browser not to use the cached file.
  135. Improved synchronization between processing and SDM task when skipped scans occur.
  136. Fixed TOB1 data file type in TableFile when a Boolean data type is present.
  137. Changed TOA5 data file type in TableFile to express 7 significant digits instead of 5 for IEEE4 data.
  138. Changed the filename parameter in CalFile to allow all types of strings.
  139. Fixed ClockSet to work with a Long array and with a string.
  140. Changed Status port configuration to reflect SerialOpen setting.
  141. Fixed DataGram when relatively long files are received.
  142. Changed Network instruction so that if the gap parameter < 0, no response is sent.
  143. Changed file download response to "invalid file name" if the file name is too large, and to a new code 15 (Root directory is full) if the root directory is full.
  144. Fixed communications so in a multi-drop network if a packet is received that is not for us, do not shut down the comport (e.g., drop Modem Enable) if the comport is currently opened.
  145. Fixed the directory update in the case that a file name length is >= 60 characters.
  146. Fixed SerialOut to return the number of characters successfully echoed in the case that not all characters were echoed.
  147. Changed File Upload so that a client can successfully retry getting the last fragment.
  148. Fixed very rare possibility that ModBus or PakBus would get or set a variable in the middle of being used or set by the running program.
  149. Fixed SecsSince1990 for option 1.
  150. Set timeout when retrieving via Terminal Mode the Status table or Public table, timeout after 30 seconds if no key hit for more data.
  151. Changed terminal mode so if entered via BMP, then extend the timeouts. This will allow the user to work with it remotely via interfaces like the RF95A.
  152. Protected the terminal mode when used concurrently by different clients.
  153. Reduced the allowable size of filenames for the file system from 64 to 60. This now matches the size of the run-now and run on power-up name lengths (they include the drive and :, and the file system does not).