CR1000 OS 15
更新:01-31-2008

  1. 添加SecsSince1990()函数。
  2. 增加了指令TriggerSequence()和WaitTriggerSequence()
  3. 添加AcceptDataRecords()指令。
  4. 增加终端命令'W'来窥探comport (ESC或40秒超时将终止该命令)。
  5. 添加FindSpa (SoughtLow SoughtHigh,一步,源)的功能。
  6. MessagesEnable补充道。
  7. 添加了#if, #elseif, #else和#endif条件编译。所有表达式都必须求值为常量,但可以使用已经声明的常量。
  8. 增加预定义常量:CR1000、CR3000、CR800、CR5000和CR9000X。还添加了预定义的常量LoggerType,它将被设置为与相应logger类型的对应常量相同的值。这使得条件编译可以跨日志记录器类型工作(一个程序可以在多个日志记录器类型中运行)。例如:#if LoggerType = CR3000 const MYRANGE = MV20 #else const MYRANGE = MV25 #endif)
  9. 添加文件列表的功能。
  10. 添加FileCopy函数。类似于FileRename(当指定不同的驱动器时),但源文件不会被删除。
  11. 固定的GetRecord()当没有记录存储在数据表源,当数据表中的一个或多个字段的类型为字符串,当目标数组不是类型的字符串。在本例中,GetRecord()写入超出目标变量数组边界的内容。
  12. 更改RealTime(X)以允许X声明为类型LONG。
  13. 改变Round()函数为完全对称。
  14. 使用别名修复winvector。
  15. 增加了对NaN的winvector的检查,因为非常小的数字的根号< 0。
  16. 改变GetDataRecord()接受一个大的(>1000字节)记录。
  17. 改变SerialOutBlock,这样当使用SDM- sio1时,它可以在数字任务序列中与其他SDM指令一起运行。
  18. 更改了NSEC数据表字段,以便如果源是浮点数,则必须对其进行量维处理>= 7,以避免为源使用错误的值。
  19. 在comport是TCP套接字的情况下,更改了SerialClose(comport),在这种情况下,它将关闭套接字而不是损坏内存。
  20. 改变GetRecord发出越界警告,如果目标数组不够大,无法容纳数据,则不继续。
  21. 增加了一个通过时间戳而不是记录号来访问数据的方法。在GetRecord(Dest,TableName,N)和TableName. fieldname (M,N)中,如果N为负值,它引用Secs Since 1990的时间戳。
  22. 固定替换,中间和其他字符串函数,当其中一个参数,而不是第一个是一个表达式,包括一个字符串函数。
  23. 固定的CHR,使它不使用多余的内存。
  24. 固定的TimeIntoInterval()在时钟被向后设置的情况下,函数在第一个时间实例返回true到interval为true。
  25. 改变了SerialClose(),如果Com1..Com4将保持PakBus通信的活动状态。
  26. 固定通信指令(PakBus和ModBus),如果参数包含一个变量索引到数组中,返回正确的结果代码。
  27. 改变SendData和SendTableDef发送非隐藏的id映射,如果特殊字符串"。在表名之后找到Secured”。这允许那些希望允许一些用户查看表而另一些用户不查看表(通过安全性)的用户仍然能够使用SendData。如果.secured不存在,则发送隐藏表将导致编译错误。用户负责编程正确的PakBus地址,以便LoggerNet的表定义与所使用的映射匹配(例如,如果使用.secured,那么在检索表defs时,LoggerNet应该启用安全性)。
  28. 修改了Network(ResultCode)指令,使ResultCode可以是LONG类型。
  29. 固定Move()指令在目标数组与源数组重叠时工作。
  30. 固定振动电线与代表> 1和代表延迟> 200mS。任务排序器使用一个循环来做延迟和相同的循环计数器的代表。
  31. 改变了EmailRecv过滤器忽略前导空格。
  32. 修正了SendData()在发送Public Table时发送正确的表id。
  33. 修改了DNP3: 1)修复了服务器关闭和重启时的问题2)修复了drop应用层数据包的bug。3)将链路层和应用层分离到不同的任务中;4)修复新300包版本的bug。5)固定内存泄漏6)固定事件回调7)固定通信问题与keepserver 8)固定写问题9)防止丢失事件有时10)移除超时linktimer当应用包进来。修正了将浮点数0转换为双0的错误。
  34. 改变了PPP,所以如果comport接口或用户名或密码通过程序控制改变,不重新编译。
  35. 改变了PPP IPCP,这样如果我们在启动IPCP时还没有获得对端IP地址,我们就会将对端地址设置为与我们自己的地址相同。这允许我们连接到一个新的网络,以前是未连接的。
  36. 改变了PPP连接的启动,所以它不再等待,直到程序编译完成。
  37. 修正了PPPOpen(),这样它就能为自己分配合适的内存了。
  38. 改进TCP/IP和PPP:限制为传入数据分配的报文数量。如果进来的太多,它就会扔掉。以前,如果所有数据包都被使用,内部函数panic()会强制看门狗。
  39. 通过移除魔术数字NAK的循环检查,改进了PPP连接协商。
  40. 改进了操作系统重新编译前的TCP和PPP关闭。
  41. 改进了PPP拨号,所以当通过SetSettings()改变PPP拨号和/或拨号响应时,如果当前和新的都不是NULL,那么就不要强制重新编译。
  42. 修正了在com1..com4上使用PPP,这样重新编译不会使控制端口被用作comport。
  43. 当通过DevConfig更改PPP或IP设置时,在重新编译之前断开PPP连接。
  44. 改变了PPP和DialCallback()拨号方式,使DialString中的';'后面跟着';'增加了1秒的暂停。
  45. 修改了ModemDial(), ModemCallback, PPP中的拨号字符串,如果它不以"AT"开头,那么以"ATDT"开头,而不是"ATV0;ATS7=180;ATDT"。
  46. 修正了在顺序模式下运行和在扫描之外进行测量时的测量问题。由于模拟电源被关闭,偶尔会在测量中出现NAN。这个问题只出现在CR3000上(因为额外的速度)。
  47. 固定PeriodAvg测量,以避免冲突,如果超时发生在同一时刻,周期的数量被测量。如果这两种情况同时发生,任务排序器就有可能在只前进一次的情况下被调用两次。这可能导致内存损坏或时间戳不正确地前进。
  48. 暂停程序执行时停止慢速处理(停止时不删除数据)。如果慢序列在循环中运行,而不是在扫描..nextscan中,它们不会停止,只有扫描被停止。
  49. 修复了当主扫描由于运行所需的扫描数而停止时,慢序列跳过扫描增加的问题。
  50. 固定的管道模式背景慢序列没有关闭时,没有足够的时间为片被做。在编译时正确地显示了警告消息,但是当扫描开始时,慢速序列没有被正确地禁用。在测试的案例中,这导致主扫描的第一次测量返回错误值。这只是一个问题,如果您收到关于禁用背景校准的警告。
  51. 更改自动量程测量,在量程确定测量之前延迟用户指定的设置时间,然后在实际测量之前再次延迟。例外的是,当在同一个频道上做rep时,自动测距。本案例测量距离与实际测量距离相差约450uS。用户在同一通道(通道< 0)上设置次数的时间决定采样间隔。这个功能是为了自动测距而维护的。
  52. 1/2周期积分时(_50Hz/ 2500mv或5000mv和_60Hz/ 2500mv或5000mv)同一通道上的rep固定采样间隔(带设定时间参数)。测量之间的延迟是不正确的。也固定代表在同一通道的反向激励和反向微分测量。
  53. 改变了桥测后的励磁关闭。激励被设置为零(仍然选择)等待10 uS然后取消选择激励。以前,激励被取消选择,然后DAC被设置为0。这允许外部激励浮下来(或被拉下来,如果负载)。这一变化是为了避免桥梁的激励不对称。
  54. 固定管道模式缓慢切片的问题,当快速扫描间隔是由于开始时,测量仍然被切片。这导致内存损坏。
  55. 消除了交流激励不对称,这导致某些传感器被极化。
  56. 固定调用子程序与变量索引字符串数组。
  57. 固定通信指令,当从子程序调用时,在不同的顺序运行,而不是在程序中声明。
  58. 修正了IfTime()、WorstCase()和Timer()函数在子例程中调用时使用正确的时间戳。
  59. 改进的FieldCal向导:如果rep是一个常量,它必须是1或测量数组的大小向导才能正常工作。其他大小现在会给出编译错误。增加了检查,以确保有效的选项使用了FielCalStrain。
  60. 更新自定义菜单:1)不要在行尾留下'>',如果没有子菜单,当滚动。2)固定模式-3不显示初始屏幕启动。修正了在选择列表中正确显示长字符串的问题。4)改进了允许变量名为字符串变量。
  61. 更改表文件1)在验证文件是否适合之前,确保卡的空闲字节是正确的。2)第一次启动时初始化当前文件号是固定的。3)当输出时间,没有记录已存储,不要创建空文件和返回0的结果参数。
  62. 修正了ModBusMaster使用错误的波特率时,comport是一个变量。-改进的ModBusSlave: 1)在程序编译期间跳过任何请求,否则我们可能会得到变量越界错误。2)可选的启动寄存器偏移量在编译时被正确初始化,如果可能的话(对于TCP)。3)允许返回奇数个寄存器作为16位值。
  63. 修正了SDMSW8A在通过()语法增加倍增器指针时,不返回倍增器没有“代表”的端口状态。增量发生在rep循环之外,而不是每次循环都发生。
  64. 固定终端TalkThru到SDM-SIO1 comport,使它不会损坏内存。
  65. 修正了SDMCD16AC中由于无效的源参数导致的编译器崩溃。
  66. 改变了SDMSIO4在运行获取代码时保持在相同的优先级。
  67. 更改SDMGeneric处理目标类型字符串时,numvalues > 1和bytes per value = 1,以在编译时不给出越界错误。
  68. 修改了SerialInRecord: 1)修正了SDMSIO1设置填充标志,当缓冲区被填充时,以前,有时会错误地报告“NO DATA”。2)修复当开始和结束同步字都是0和当得到最近的记录。3)修正当SyncChar和NBytes都是非零时,这样记录就不会丢失。4)当预期的字节数(或SerialOpen缓冲区的大小,如果bytes in = 0)是奇数。任何SDM输入指令(或另一个SerialInRecord)在一个带有奇数字节的指令之后都会在数据存储的位置和处理认为数据存储的位置之间出现不匹配。
  69. 更改SDI12Recorder():(1)正确地将NAN存储到字符串变量中,(2)修复了在第一次测量时可能出现的问题,如果目标变量被一个变量索引引用到一个数组中。3)存储到一个字符串数组固定不跳过4。4)存储为一个字符串,用来存储传感器响应D!命令,不包括cr、lf结束符。5)如果命令终止符'!如果在命令参数中不存在,那么测量命令将不会被发出,即使它仍然会从先前发出的“C!”命令中拾取数据。6)当加载值超出范围或NaN加载9999999而不是99999999(少一个数字)。这就是规范所要求的。
  70. 改变了SDI12Sensor来处理'D'命令的重试。这是通过将整个响应加载到缓冲区中,然后返回适当的字符串来实现的。此外,改进了对请求数据超出源数组范围的情况的处理。
  71. 在FTP服务器中增加了REST命令支持。
  72. 修改FTP服务器在打开文件进行写入之前先删除文件。
  73. 修正了FTPClient()的多个实例正常工作。
  74. 改变状态SlowScan字段,使“System”扫描信息被添加,并且慢扫描信息的编号遵循程序中输入的顺序。
  75. 更改状态,如果没有数据表和/或没有慢序列,则删除它们各自的字段。
  76. 改变状态。CommsMemFree,显示为LargePktsFree * 1000000 + MiddlePktsFree * 1000 + LittlePktsFree。
  77. 更改Long &H80000000 (NAN)存储为FP2 -7999,而不是0。
  78. 更改+INF浮动被转换为字符串“+INF”而不是“INF”
  79. 更改Float为Long +INF转换为最正整数而不是最负整数。
  80. 改变WaitDigTrig: 1)不允许不同的边在同一个端口上使用。修正了启动扫描时错误触发的问题。
  81. 改进的TableName采样。将TimeStamp输入到NSEC类型的字段中,以给出时间戳的完整分辨率,而不是仅第二分辨率。
  82. 更改了最大时间和最小时间,以使用调用表的序列的时间戳,而不一定是主扫描的时间戳。
  83. 改进了,如果创建表时出现内存不足的错误,停止任务并让软件获取错误。不要继续运行,否则系统可能会崩溃。如果变量太大而无法装入内存,就会出现这种情况。
  84. 减少了变量声明所消耗的内存量。
  85. 改变了通过BMP5检索目录的方式,这样当请求小片段时,它只计算第一个片段上的空闲卡字节,因此当有卡时速度会快得多。
  86. 修正了非法的单元声明会导致预编译器崩溃。
  87. 改变预编译器,将tdf文件写入与程序文件相同的目录(如果使用-z命令行选项)。
  88. 修改了预编译器的-l和-z选项,以接受文件的完整路径名以及仅文件名。如果只传入文件名,则它将在包含CRBASIC程序文件的同一目录中打开。
  89. 改变了UDPDataGram()在两个数据记录器之间工作。
  90. 固定PakBus路由使用静态路由,如果必要时转发消息。
  91. 固定的Case语句工作与函数具有字符串参数。
  92. 修正了在表达式中使用字符串时错误的"变量越界"消息。
  93. 固定的表达式是长+字符串或长&字符串。
  94. 固定RS-232电源总是打开设置,这样它将,在所有条件下,保持主CPU清醒接受第一个传入字符。这需要更大的功率,但确保不会因为唤醒硬件而丢失字节。
  95. 改进了If和'('或')'和Then之间不需要空格。也适用于While和Select。
  96. 修正了只使用table.field解析表达式类型的问题。当使用float以外的类型时,通过DisplayValue找到此值。
  97. 固定的空间指令,样本和MoveBytes正确工作与TableName数组。数据字段名。
  98. 固定的常量字符串。为了节省内存,在解析常量之后进行了更改,以释放所有常量表达式内存。问题是字符串常量使用表达式内存空间作为字符串的位置。这个位置的指针后来被用来解析对常量的引用。随着内存被释放,所需的常量不再存在。这是通过单独为字符串分配新内存来解决的,然后将字符串复制到新内存中并释放表达式内存。
  99. 固定的异步(RS-232,和CS I/O ME)通信锁定。这种情况发生在通讯中断后又重新建立的高波特率情况下。当数据包的处理中断时,会接收到几个字节并需要处理。由于没有检测到包的启动,字节被处理,这样所有的ASCII字符都被发送到终端模式,而非ASCII字符导致一个新的服务被请求。这个过程需要比10毫秒更长的时间。冲洗器被延迟太久的事实导致输入DMA流计数下降到零,这导致中断。中断关闭传入的流,以允许字节的处理赶上来。这一切都工作得很好,但是在错误条件导致数据停止后,刷新器就不能让事情再次运行了。虽然进行了一些更改以减少处理字节的时间,但仍然可能出现这种错误条件。冲洗器现在可以正确地处理状态恢复。
  100. 当磁盘已满或根目录已满时(不能创建更多的文件),更改文件下载的返回代码。错误代码现在将是资源耗尽,而不是不可访问的文件。
  101. 更改格式化驱动器和删除文件,以使启动和运行文件无效(如果设置了),但文件不存在。
  102. 允许长度大于256的表达式正确编译。
  103. 固定可能的数据包泄漏DHCP如果它有一个错误的条件。
  104. 更改了在下载过程开始时接收OS文件以检测错误类型或内存不足。
  105. 固定的路由器,所以它不会关闭一个comport,它是通过它的路由出去,但没有任何在到来的数据包由于请等待消息。
  106. 修改默认设置,ComME和coms232波特率恢复为- 115200k。
  107. 改进的TimerIO,因此任何非零间隔<扫描间隔现在设置为1次扫描的超时。以前,间隔必须至少为100uS才能设置为1。
  108. 修改了TDR100电缆长度参数,以接受变量,并允许在()语法与数组一起使用时通过多个电缆长度“代表”。
  109. 改进了检查,所以当添加变量时,会检查它是否已经被用作别名。
  110. 在预编译器中增加了表定义输出命令行选项。
  111. 修正了允许多个客户端并发检索表定义的代码。
Baidu