CR6 OS 3.0
Updated: 12-08-2015

  1. (KNOWN ISSUE) Modbus TCP/IP and Modbus RTU over USB are known not to work on this version of the CR6 operating system. If you need this functionality, please contact Campbell Scientific to request a newer operating system with these issues resolved.
  2. (CRITICAL) Upgrading from version 1 of the Operating System will reset all the CR6's settings back to factory default. It is recommended that this OS not be sent remotely and without getting a backup of you current logger settings or taking programmatic measures to insure your settings are restored after the logger is updated. This can be done using DevConfig's backup utility and CRBasic instruction SetSetting, respectively.
  3. (CRITICAL) The following instructions are still not implemented in the CR6: CWB100(), CWB100Diagnostics(), CWB100Routes(), and CWB100RSSI(). Some functionality is there, but it is considered beta at this point.
  4. Added CS I/O auto baud detection and also minion auto baud detection.
  5. Added CDM_MuxSelect(), CDM_PulsePort(), and sending variables to CDMs.
  6. Added CPIStatus table and allow editing of the module fields. (preliminary)
  7. Changed the keyboard display menu. Split up Settings (general) into Settings (general) and Settings (TCP/IP).
  8. Fixed the keyboard display's settings from accidently dropping into the WiFi or Radio settings after exiting the TCP/IP settings.
  9. Fixed setting items in the Settings table via the keyboard display that are UINT2_T data type.
  10. Fixed first element of a sampled array to show as array(1) instead of as a scalar.
  11. Changed TableInfo and ConstTable time stamps to update when they are changed instead of when they are monitored.
  12. Changed DNP3 for broadcast packets and control when an unsupported point is selected for control.
  13. Changed DNP(), PC Compiler to flag a compile error if the comport is in error.
  14. Fixed SerialOutBlock() and MoveBytes() so they can move or output an entire record or partial record from a data table. I.e., they will successfully cross field boundaries if the number of bytes specified is greater that the starting field size. This is the case only if the number of bytes parameter is not variable.
  15. Changed table accommodation to up to 255 tables: Public Table is int instead of char; bump the maximum scroll menu size to 256 lines from 100; removed start value maximum of 72 on scrolling.
  16. Added SDMBeginPort() for the CR6.
  17. Added optional parameter for ExciteI. If 1 then use larger range for excitations.
  18. Added optional parameter for ExciteV. If 1 then use differential excitation.
  19. Added CPIAddModule().
  20. Added Resistance3W().
  21. Changed FileOpen() so that if it is used in conjunction with the files manager setting, then change the name (if a variable) of the file in the public table also.
  22. Changed functions that are used in conjunction with the Files Manager setting so that if a new name is passed in then the variable holding the name is large enough.
  23. Added line number information to the units structure in order to provide line number in compile errors that are detected at completion of compile.
  24. Fixed preserving COM1..COM4 baud rates through OS download.
  25. Fixed SDI12Sensor() to allow a response time up to 999 seconds instead of 99 seconds.
  26. Fixed ApplyAndStart to be true if non-zero.
  27. Changed SetSetting() and SetStatus() so that when they are within any kind of sequence like a subroutine or a function then they will not execute at compile time.
  28. Changed the PC pre-compiler to not flag an error in SerialInRecord() when the comport is SDM-SIO1 based on the number of bytes parameter since it does not know the size allocated by SerialOpen().
  29. Fixed SerialInRecord() so that when writing "NAN" into a variable of type String where the destination address is on an odd boundary (as it would be if, for example it is referenced as Destination(1,1,4), the 4th character into the string), then "NAN" would be written starting at 1 character before the specified destination, for example, at Destination(1,1,3) instead of Destination(1,1,4).
  30. Changed UDPDataGram() to queue incoming data up to 20 datagrams before it discards.
  31. Changed FTPClient() in conjunction with the files manager setting (3210) to return the new filename controlled by the files manager setting into the local file name variable.
  32. Changed HTTPGet/Post to insert authorization into the header if the URL parameter is prefaced with username:password@.
  33. Added an optional parameter to IPNetPower() to specify a timeout after inactivity to power back down.
  34. Fixed FTPClient() when getting or putting multiple files.
  35. Changed FTPClient() to allow the NLST command to return 450 ("No such director or file") when using the optional header function for appending files in the remote.
  36. Added low power operation for smsc9221 chip (NL116, NL121).
  37. Changed so that NL200, 240 exchange net mask and gateway along with the IP address.
  38. Fixed setting values in the status or constant table via an RTMC project so that security is ignored since the .csipassword file is used instead as the security mechanism.
  39. Changed hidden data tables to allow access via HTTP if the highest security level is authorized.
  40. Fixed UTF-8- character- set for http and quote non-printable characters for JSON so KANJI come through correct.
  41. Changed dns_svr to use DeviceConfig setting (domain_name) as the domain name to which it will respond (rather than hard-coded to model.com).
  42. Added code to handle a DHCP renewal request. Engineering changed the DHCP lease time to 30 seconds and added the function joined_networks() to look through the DHCP cache and see if there are any clients in it that haven't timed out.
  43. Changed sniff and talk through to not have timeouts when connected in terminal mode via PakBus.
  44. Changed Constant Table so that if editing in the terminal and it fails, display a failure message of 'out of space'.
  45. Fixed warning message when get or sending variables via PakBus but the packet will not fit into a PakBus frame.
  46. Fixed losing settings in CR6 on OS download via File Send.
  47. Changed Get/Set Variables to allow swath parameter to be variable.
  48. Changed PakBus directory response so that it accommodates a '/' character instead of the ':' character in a file specification. This allows older LoggerNet versions to work that mistakenly replaced the colon with the forward slash character.
  49. Fixed GetDataRecord() and GetFile() and SendFile() so the expression function is not called erroneously, possibly resulting in an out of bounds warning and/or in rare cases a variable set erroneously.
  50. Fixed GetDataRecord() to start at the current record number in the event of reset and maximum records is negative (collect all data).
  51. Fixed a data collect bug where data was written beyond the end of the holding buffer. A call to FindRecord was requesting too much data. This affected non-interval data tables with small (<= 8 bytes) record sizes.
  52. Extended timeout for file upload (including table definitions upload) to 5 minutes.
  53. Changed error code for file upload to return an error code of 9 if there is a fragment offset error instead of 13.
  54. Enhanced ModBus PakBus DataGram routing.
  55. Fixed ModBus timeout for RS-232 and ME for CR6.
  56. Added TCP ModBus PakBus DataGram routing.
  57. Enhanced RTU ModBus PakBus DataGram routing.
  58. Changed FTPUserName and FTPPassword settings so that these settings are now accessible via CRBasic and the keyboard display.
  59. Added DNS setting via keyboard display.
  60. Fixed IP trace code reading via CRBasic or keyboard display.
  61. Added SDCInfo as a string field so that it can be accessed via the keyboard display, remotely, and via CRBasic.
  62. Changed TLS private key and certificate file names to NULL for default settings and if the setting is clearing the file.
  63. Fixed TLS Status on the keyboard display, via CRBasic and remotely.
  64. Fixed some issues with Files Manager setting for sniffing and IP Tracing when changing the maximum file size and also when the file size if very small.
  65. Added pointer type casting that will ensure floating point operations will not truncate to integers.
  66. Changed Doubles so that Double numbers must be "forced" using the 'L' or 'l' character at the end of the number.
  67. Fixed ArrayLength(!VariablePtr).
  68. Fixed a problem with re-assigning a pointer.
  69. Changed CRBasic pointer method such that once a pointer variable is assigned to point to a variable, it can never be 0, i.e., 0 would be an out of bounds, illegal pointer that can be detected by the program.
  70. Fixed ! (pointer) pointing to a variable of type String.
  71. Fixed Pointer = @(Setting) where variable reference by Setting is an array of type string.
  72. Fixed compiler to allow a reference to tablename.fieldname() to act the same as tablename.fieldname.
  73. Fixed CRBasic to flag an error if an assignment statement tries to assign a new value to a constant string.
  74. Added UDP IPV6 support.
  75. Added option 24 to the CheckSum() function for a 16 bit Fletcher checksum.
  76. Added a check for the maximum number of tables that can be used with Tablefile(), which is currently set to 30.
  77. Changed Tablefile() option 64 so that if a failure occurs while creating new TOB3 files, the logger closes the files, then it deletes. Zero length files were resulting from trying to delete files still held open.
  78. Added a check for duplicate file names when using TableFile().
  79. Fixed UTF-8 character set for http and quote non-printable characters for json so KANJI comes through correct.
  80. Fixed DataTableInfo when its size is larger than all other tables for buffer used by Findrecord() during data collection.
  81. Changed the limit on the number of tables (including Public, Status, DataTableInfo, Const) to 255.
  82. Fixed ConstTable setting MaxNumBytes (size of memory to allocate for data storage). If any table was larger than the Status table, and there was a ConsTable, the buffer was not large enough to store data into.
  83. Fixed units for WindVector() output options 3 and 4.
  84. Fixed a pre-compiler crash when not able to find a specific settings.field.
  85. Changed the Rx timeout calculation when changing baud. Give at least 35 bit periods to conform to Modbus.
  86. Changed SMTP IPv6, look for port number after ]:port
  87. Changed CheckDataGram (service) so it takes care of service.
  88. Fixed ModBus datagram and multiple TCP ModBus within a single packet.
  89. Fixed Replace() when the lookfor string is NULL.
  90. Fixed EmailSend() and EmailReceive(); let tcp_open() take care of port number.
  91. Fixed EmailReceive() using APOP authorization. The server includes this capability in its greeting, not in its CAPA list.
  92. Fixed BroadCast() to not use uninitialized variables.
  93. Changed throttling down PakBus client communication when the comport mailbox is backed up to limit it to no more than 4 in the queue or a 5 second timeout.
  94. Fixed AM25T with reps and no reversal. The channel was not getting advanced.
  95. Changed the subclass reported in USB enumeration from 0x20 to 0x02. This allows Windows 10 to load the usbser.sys driver without a .inf file.
  96. Increased the USB enumeration requested current limit from 200 to 300.
  97. Fixed DNP3 waiting for unsolicited response confirmation to always service a read request.
  98. Fixed PakBus Client instructions via TCP when the socket handle number mod 256 is within the range of COM1..COM4 (4..7 in a CR1000, 4..11) in a CR6), causing them to erroneously return -10 for a response code.
  99. Changed FileManage so changing attribute hidden does not update the directory information if the attribute is already set. This was found when a customer was hiding a file unconditionally in a 10 Sec scan and destroyed flash chips after ~1.5 years.
  100. Fix MuxSelect for the CR6. It was not properly decoding the channel numbers.
  101. Changed the password settings via the keyboard display and remote access so that they are hidden with "..." notation.
  102. Fixed GetDataRecord() when table is interval driven and there are multiple frames per request. An erroneous response code of either 8 or 9 was returned sometimes.
  103. When receiving a one way table definitions command, do not respond with a no type error response.
  104. Fixed GetDataRecord() and AcceptDataRecord() in the case the table they are storing into has DataInterval() with 0 lapses.
  105. Fixed seconds per record output in terminal mode 'O' command.
  106. Changed TableInfo record number to be updated when polled via BMP5 so as not to break Status Client.
  107. Fixed COM320 Voice timeouts for CR6.
  108. Fixed "variable not used" warning with aliases.
  109. Changed all data table instructions including sample(), to flag reps <= 0 as a compile error.
  110. Changed the CR6 to only allow ports that are set up as outputs to be changed via communications (e.g. toggle the ports via Connect Screen). (CR6 Only)
  111. Changed DNPUpdate so that the datalogger can optionally enable unsolicited data when a new connection is made by the datalogger as a TCP Client.
  112. Changed TCPopen() when there is a routing error; don't try forever but rather just what the timeout specifies.
  113. Fixed ETsz fieldnames issue where a fieldname with _Rso inside was being overwritten with _Rso.
  114. Modified CDM-A100 notch frequency thresholds. The specified notch frequency is now rounded to the nearest available notch frequency.
  115. Changed CDM-A100 notch frequency parameter to be a float. Module specific redefined notch frequency constants have been removed, but the logger's _50Hz & _60Hz still remain.
  116. Removed from the CR6 the terminal 'L' command. (CR6 only)
  117. Fixed CR6 evaluation of parameters that are specified as constant floating point expressions, including variable initialization of floating point expressions (single precision). (CR6 Only)
  118. Fixed PC compiler, SDMBeginPort(), to remove compile errors for channel conflicts. (CR6 only)
  119. Added Warning message in SubScan() if the scan interval is not an integral of 100 usec.
  120. Disabled checking CS I/O minion for up to date structure. This is a temporary change until we resolve what is going on. (CR6 only)
  121. Changed CPI to make sure that module id matches a known module in the program before acknowledging them to request their configuration. (CR6 Only)