请下载并解压缩zip压缩包,内有2个固件文件,一个是BACnet版本,另一个是Modbus版本
对于CCN Gateway 3.00之前的版本,请参见本页的底部
3.06 2025.04.10 下载
修复“IP路由”重启后丢失的问题。
3.05 2025.02.26 下载
修复bug当CCN总线上冲突时可能导致后台进程崩溃。
从BACRouter 6.09同步升级BACnet ms/tp驱动。
BACRouter内置了一个强大的Modbus主站模块,但是基于现场的复杂性,它仍然不能很好的应对某些场景,比如:
幸运的是,从固件版本v5.00起,我们引入了自由协议模块,可以用Lua脚本实现一个非常灵活的Modbus网关, 我们把modbus.lua 脚本托管于 github.com
modbus.lua定义的总线上所有设备采用相同的波特率/校验/超时参数。而对于Modbus主站模块,每个设备可以采用不同的设定。
用户应该首选尝试Modbus主站模块,因为Modbus主站模块内置的测试功能,可以方便用户在编辑映射时快速地验证。
当所有的常规点编辑完毕,可能留下几个古怪的点无法处理,但是请先对读操作进行验证。
接下来,请验证“编组读取”。
然后将Modbus设备的配置导出。
在github仓库中有一个 fcmbconv.py python程序, 请先安装 python 再运行它。它将提示你选择modbus.lua文件,再选择导出的Modbus设备配置文件,它会将其转换为自由协议总线配置文件。
然后在BACRouter的自由协议模块下导入上述配置文件。
最后编辑配置,处理那些古怪的点。
我们假设有一个这样的Modbus设备,除了几个常规点,还有:
首先我们配置一个Modbus主站模块的Modbus设置,配置文件: ExampleModbusDevice, 用“编组读取”测试验证使用上述的 fcmbconv.py将其转为自由协议的总线配置文件: FCModbus
将其导入到BACRouter的自由协议模块:
如 lamp1:
修改完毕后,使用Yabe 进行验证。假如脚本运行失败,请检查日志。
修改完毕的自由协议总线配置文件见:FCModbusFinal
Modbus 设备配置
Siemens_RDF302.json | 西门子 RD302 温控器 |
Schneider_TC500.json | 施耐德 TC500 温控器 |
JCI_T8600.json | 江森 T8600 温控器 |
JCI_T7000.json | 江森 T7000 系列温控器 |
ABB_ACS510.json | ABB ACS510 变频器 |
Lua 脚本
bcd.lua | BCD码。每个字节存储0~9, 例如: 0x05090702 = 5972 字节序由“大整数字节顺序”定义。 |
compat_bcd.lua | 紧凑式BCD码。每半字节存储0-9, 例如: 0x78695231 = 78695231 字节序由“大整数字节顺序”定义。 |
m10k.lua | 每个寄存器存储 -9999 ~ 9999, 例如: 0x1f740a69 = 0x1f74*10000 + 0x0a69 = 80522665 字节序由“大整数字节顺序”定义。 |
low10th.lua | 只有一个寄存器, 低字节单位为1/10, 所以数值范围为 0.0 to 255.9 例如: 0x0503 = 5.3 字节序由“”单寄存器字节顺序“定义。 此表达方式在约克TMS2100 风机盘管温控器上发现。 |
配置转换
从固件4.x起,BACRouter引入了离线配置功能。现在用户可以脱离设备实物进行配置,将配置结果导出为文件。在调试现场,只需导入前面导出的配置文件,再“保存并重启”即可生效。
从固件4.04起,Modbus网关的从站点表可以用CSV格式导入导出,CSV文件可以在Excel/WPS/Libreoffice中进行编辑,适合批量建立对象与Modbus地址的映射,再导入到WebUI进行精确化编辑。
在我们网站上离线配置 (不再支持IE浏览器,但Edge仍然可以)
下载并解压到磁盘,用浏览器打开index.html文件 (因为IE/Edge浏览器不支持本地网页的Local Storage功能,所以用户文本库及常用工程单位信息在浏览器关闭后将丢失)
配置文件分为以下三种:
此文件保存了BACRouter内的所有设定. 如果生成配置文件的固件版本与导入文件的固件版本一致,WebUI不应抱怨文件问题。
此文件保存了该主站范围内的配置。当导入时,基于当前映射模式的冲空检测机制将会检查此主站下每一个启用的从站。如果发现冲突,该从站将被停用。
如果该主站是RTU/ASCII类型且发现针对RS485端口的争用,此主站也将被停用。
如出现此类问题,WebUI将提示用户检查配置。
此文件保存了该从站范围内的配轩。当导入时,如基于当前映射模式的冲突检测机制发现问题,该从站将被停用。
WebUI允许将TCP从站的配置文件导入到RTU/ASCII主站下,反之亦然。但是如果从站的Modbus参数不匹配,该从站将被停用。
如出现此类问题,WebUI将提示用户检查配置。
因版本4.26于2023-03-07更新
从固件版本4.x起,BACRouter内置了Modbus网关功能。这篇文章尝试解释其底层运作机制。
BACRouter周期性地读取点数据并缓存。“刷新间隔”定义读取数据的间隔。
为了提高性能,BACRouter将尽可能在一次事务读取更多数据。在Modbus标准中,最多2000个位(指线圈或离散输入)或125个寄存器(指输入或保持寄存器)可以在一次请求中读回,但是特定的Modbus从站可能不支持读取大量的数据。在BACRouter的WebUI的”从站设定“页面的Modbus参数对话框中,”批量读比特位数“与”批量读寄存器数“两个参数定义了从站的对批量读数据的支持。
BACRouter不会分段读取单点的数据,即使”批量读寄存器数“小于该点占用的寄存器数。
通常来说,我们关心的数据的Modbus地址并不连续,比如我们只关心地址为1及2000的线圈,虽然我们可以一次批量读回地址1~2000的数据,然后抛弃地址2~1999的数据,先读取地址1的数据,再发请求读取地址2000的数据的做法可能更有效率。”比特位跳过“与”寄存器跳过“参数定义了在两个我们关心的数据地址中间,有多少个无用的数据允许被抛弃。假设在上述例子中,”比特位跳过“设为1998,BACRouter将尝试一次性读回地址1~2000,抛弃中间1998个数据。倘若”比特位跳过“为1997,则BACRouter将分两次读取地址1与地址2000。因为中间跳过的1998个数据大于设定值1997。
在从站的配置页面,“编组读取”显示读操作如何编组,并可进行测试。请特别关注服务端报告的非法数据地址!
BACRouter不会合并写请求。当接收到写指令时将马上发出Modbus写请求。
对于写单个数据,有两个Modbus功能号可供使用。例如,功能5为写单个线圈,功能号15为写多个线圈但写数量可以为1。有的从站只支持其中一个功能号。”写单个线圈”参数指定采用哪个功能号。
同样地,”写单个寄存器“参数指定用于写单个寄存器的功能号。假设有任一个BACnet输出对象映射到多个保持寄存器,这意味着从站支持功能号16写多个寄存器,”写单个寄存器“将被关闭,功能号16将被采用。
如果任何读写请求失败,BACRouter将会重试,如果连续失败次数达到3次,BACRouter将认为该从站离线。在离线状态下,BACRouter将间隔”离线刷新间隔“时间重试该请求。
在离线事件中,BACnet侧的反应将在后面描述。
BACRouter支持在同一条RS485总线上,不同波特率、奇偶较验、RTU/ASCII模式的从站共存。在发出请求前,BACRouter将根据从站的设定切换串口的参数。
如总线上的两个从站拥有相同的从站地址但是波特率或RTU/ASCII模式不同,BACRouter可以无冲突地通信。但是如果仅依赖不同的奇偶较验来防范冲突并不可靠,因为有的从站并不检查奇偶错误。
如VBUS网络端口未使能,BACRouter将工作于单设备模式,每个Modbus从站将被映射到”应用层设定“中定义的BACnet设备的不同对象实例空间。每个从站将占据1000实例空间。
对象的实际名称为“主站名称|从站名称|对象名称”,名隔分隔符”|”可由用户在数十个字符中选择。
依据BACnet标准的推荐做法,BACRouter将为每一个从站创建一个结构化视图对象。
本模式下当从站切换到离线状态,所有点的可靠性将被设为”COMMUNICATION_FAILURE”,当从站重新上线时,随着点数据的更新,各点的可靠性将被重新置回到”NO_FAULT_DETECTED”。
当VBUS网络端口被使能,每个从站将被映射为VBUS网络上的虚拟BACnet设备。虚拟设备的MAC地址将从1开始。
在本模式下,所有从站必须有一个唯一的“设备实例号”。从站的BACnet设备名称为”主站名称|从站名称”,其中”|”为可选择的名称分隔符。
在本模式下如果从站切换到离线,依据BACnet标准的推荐做法,对应的虚拟BACnet设备将停止收发包以模拟离线状态。当从站重新上线时后,当更新完所有点数据后,虚拟BACnet设备将退出离线状态。
针对每一个从站,BACRouter在缺省BACnet设备内创建3个对象。一个名为”online”的二进制输入对象,代表从站的上线状态。一个名为”update_delay”的模拟输入对象,代表最近平均数据更新延迟(对比”update_delay”), 最后一个是名为”fail_rate”的模拟输入对象,代表相对长时间内的Modbus侧通讯失败率。
这些对象名均有“主站名称|从站名称|comm|”的前缀,其中“|”为可选择的名称分隔符。
对象的实例号单独进行定义。当对象编辑窗口提交时,如对象被启用,将分配其声明的实例号,如该实例号被占用,将自动选择一个可用的实例号。
值对象的特性与属入对象类似,如值对象映射到可写Modbus地址时(0X或4X),此时值对象的当前值可写,写入的值被转发到Modbus侧(有以下2个例外)。
例外1:如果AV对象映射到保持寄存器,其数据类型为自定义,且其绑定的脚本不支持输出,此AV对象为只读。
例外2:如果AV对象映射到多个保持寄存器,但“写单个寄存器“参数生效,此AV对象为只读。
输出对象对应的点值仍然会被定期读回,且设置成对象的Relinguish_Default属性。如果读回的值与上次写入的值不匹配,BACRouter将把该对象的可靠性置为 “UNRELIABLE_OTHER”,BACRouter将尝试每隔一段时间重新写入。如“容忍不匹配”选项被启用,如果读回的值与上次写入的值不匹配,该对象的可靠性将不变,BACRouter将尝试以”离线刷新间隔“重新写入。(于v4.34版更新)
因为以上的验证重写机制,BACRouter禁止2个输出对象映射的可写Modbus地址发生重叠。
NaN是IEEE-754标准规定的特殊值,其意思为非有效数,BACRouter不接受NaN(正负无穷大仍然被视为有效值).
当一个Modbus点被定义为单精度浮点或双精度浮点,且BACRouter读到NaN值时,该点对应对象的可靠性将被设为”UNRELIABLE_OTHER”。
如一个模拟量对象为自定义,当从Modbus换算到BACnet时,脚本报告不支持的数据,此对象的可靠性将被置为”UNRELIABLE_OTHER”。
对于一个AO对象,如从BACnet换算到Modbus时,脚本报告不支持的数据,此对象的可靠性将被置为“PROCESS_RROR”。
对于一个AV对象,如从BACnet换算到Modbus时,脚本报告不支持的数据,此输出尝试被放弃,对象的可靠性保持不变。
从v6.00起的固件请访问: 新固件升级记录
Modbus RTU:某些设备不遵守字节之间的 T15空闲时间规定,我们删除了该验证以提高兼容性。
应用程序设置:删除了“客户端模式”以符合 BTL 要求。
Modbus/自由协议:调试映射或脚本时,经常需要从 BACnet 端执行写入,此时用户必须启动 BACnet 客户端,例如 Yabe。而计算机上通常已经有一个 BACnet 服务器在运行,此时用户必须启动 虚拟机 来运行 Yabe。这浪费了很多时间,所以我们在运行信息页面上集成了写入功能。
Modbus WebUI:
当对映射于单个寄存器的Analog对象进行写测试时,其字节序应该引用“单寄存器字节顺序”设定,而不是“大整数字节顺序”设定。
当对映射于2个寄存器的Multi-state对象进行写测试时,其字节序应该引用“大整数字节顺序”设定,而不是“单寄存器字节顺序”设定。
自由协议设备的运行信息页面中,Binary对象的真实值应参考极性设定。
自由协议的Binary输出对象的bug,由v5.08的“信号极性”特性引入。
Modbus主站模块:当写入到只读数据地址时,有的设备无响应,而不是报告错误码。在这种情况下,BACRouter将会不停尝试造成设备掉线。在本版本中,BACRouter只会重试3次。
修正bug: Modbus与自由协议模块中总线名称冲突检测。
自由协议:Binary对象增加“信号极性”属性。MultiState对象的状态数量增加最多256限制。
修复从v4.23引入的Modbus ASCII 模式下的bug
修复一个从4.19起引入的bug: 当升级固件时,如解压速度快于浏览器的传输速度,升级将失败(报告无效固件)。因为无法有效重现,我们很长时间不能定位故障。重启浏览器并重试可能有用,但如果是通过互联网升级,可能无法起效。
BIP bug: BDT重复表项检查逻辑
WebUI bug: BIP端口冲突检查逻辑
自由协议bug: 输出对象的present_value被修改时,脚本应得到通知。
Modbus/自由协义 bug: 设备运行信息可能无法从后台读到。
自由协议: API趋于稳定。
支持设置动态IP
Modbus模块从5.00起有一个bug: Modbus地址设置从点属性编辑窗口返回时不能保存。
v5.00从旧版本升级时有一个bug阻止界面显示。
增加自由协议模块以脚本支持各种RS485与TCP网关功能。API手册正在编写中
Modbus网关功能在v4.34引入一个bug,当写入映射于寄存器部分位的多态对象时将触发。
COV通知功能对多状态输入对象有一个竞态bug.
RS485 现在有两种无校验方式:无校验2停止位,无校验1停止位。通常无校验2停止位可以正常工作,不管对方的停止位怎么设定。但是对于某些诡异的Modbus设备,不遵守应答前静默3.5T的约定,如江*的TMS2000温控器,只有设为无校验1停止位才能工作。
网络层bug修复: 当缓存无法路由包时缓冲溢出。
135-2016br-2: 接受写NULL到不可命令属性。
MSTP驱动立即向上层报告新包,而非以20ms的周期。
Modbus脚本: context参数携带点名与点描述。
Modbus支持2个寄存器的多状态点。
Modbus支持映射到寄存器部分位的模拟量。
Modbus支持自定义模拟量映射到多达24个寄存器。
Modbus映射输出对象时增加“容忍不匹配”选项,当回读数值与上次写入数值不匹配时,可靠性属性不变,并以“离线刷新间隔”重复输出。
Modbus驱动移除一些不必要的优化:将对同一个寄存器的多个写请求合并为一个;缓存模拟量从Modbus到BACnet的换算。
X2BACnet工程转换支持早期的X2BAC版本。
v4.23 引入的Modbus后台bug:
RTU/ASCII可能无法工作于低波特率下。
TCP从站如报告错误码将导致程序崩溃。
WebUI: 在Modbus的从站设定页面,用户经常错点“编辑”与“复制”按钮,影响生产力。“编辑”按钮被删除。用户可点击点名或属性,弹出点编辑窗口。
一个长期的BACnet Bug: 当写属性的APDU中的优先级参数被忽略时,没有设置默认的优先级。
Modbus: 映射到保持寄存器的BV/BO,当选择写功能码时,应参考“单寄存器写”而不是“单线圈写“
Modbus: TCP从站地址范围由1~247扩展到0~255
Modbus bug 由v4.23导入: 离线设备可能增加在线设备的失败机率。
WebUI: Modbus“读测试”与”写测试”时将报告更详细的出错信息。
WebUI: Modbus参数编辑时的UI优化。
WebUI bug 由v4.25引入: Modbus “写测试“ 应不能在映射到只读Modbus地址,或BACnet对象类型为输入时启用。
WebUI: 当Modbus”写测试”写到多个寄存器时,提醒用户注意“单寄存器写“设定冲突。
WebUI: 在从站设定中启用拖放式移动点。
WebUI: Modbus多态点编辑时,启用拖放式移动状态定义。
WebUI: 当导出到文件时,弹出窗口以便修改文件名。
WebUI修正: Modbus 从站的”复原”按钮无法回滚”批量数据地址“所做的修改。
WebUI: Modbus从站增加”重排实例号”功能。
所有包捕捉缓冲区总和限制从16M改到12M.
WebUI修下: Modbus从站的”批量换算”功能应跳过自定义类型。
WebUI: 导出的Modbus主站/从站配置应携带引用的脚本。当导入配置时,脚本也将被导入。
BIP UDP 端口的最小值改为1024
许多脚本功能的Bug修正及改进:
当发生内存不足时,所有的脚本将被一个个地临时卸载,在卸载过程中回收的内存将被记录。回收内存最多的脚本将被视为存在内存泄露并被强制完全卸载,其余的脚本重新装入执行。
WebUI 增加脚本运行信息,以方便找到内存泄露。
脚本导入将跳转到编辑模式
创建与导入的脚本在经确认后,可以替换同名旧脚本的内容。
我们经常接到用户反馈一些奇怪的Modbus设备,它们的寄存器无法线性地换算到BACnet模拟量的浮点数,所以我们引入了Lua脚本功能以处理这些映射。
用户可以在WebUI上新建、导入、编辑Lua脚本,感谢现代浏览器对WASM的支持,用户甚至可以在Modbus设备不在线的情况下,通过WebUI运行、调试Lua脚本,运行错误将由WebUI捕捉并展示给用户,Lua的print函数将输出到浏览器的终端。
负面影响是从此版本开始,我们不得不停止支持IE浏览器(但Edge仍然可以完美兼容)
目前Lua脚本的创建功能将生成一个映射Modbus BCD码的样例脚本。
修正了v4.23引入的Modbus bug: AO对象持续报告可靠性问题。
从v4.23开始,我们对Modbus rs485驱动进行了抽象,以便在将来支持通用的rs485设备。当然这引入了Modbus网关串口功能一些bug(MSTP使用不同驱动,所以不受影响),这个固件修复了其中的一些:
离线设备引发程序重启
WebUI的串口Modbus设备的点位裸测试结果中的响应时间不精确。
修复: 当Modbus模块将Ananlog_Output映射到多个寄存器上时的缓冲溢出
修复Modbus模块Bug:当一个TCP主站下定义了多于一个从站,且“连接保持时间”为0时可能被触发。
WebUI 不再支持 IE10。
运行信息中的历史统计数据可以被重置。
MS/TP运行信息中用不同颜色的MAC地址表表示不同的状态。
支持单口路由.
Modbus网关导入CSV功能:
1. 修正从第2个点开始Modbus数据类型被忽略。
2. 状态未定义的多状态点不必被强制停用。
从版本v3.00起, 我们加入了一个数据完整性检查: 如转发的NPDU的hop count为255,将被认为是错误并丢弃。用户可以从日志上看到相关信息:[WARN]npdu_decode_pci: hop count should not be 255 for relayed npdu.
但这个行为可能导致与其它路由器的兼容性问题。虽然此处的hop count不正确,但是因为BTL测试没有完整覆盖相关内容,市场上仍有一些经BTL认证的路由器有此错误。
相关的细节请查看: https://hvac-talk.com/vbb/threads/2098761-BACRouter-from-China/page11, 非常感谢MaxBurn报告并协助我们定位问题。
解决方案是将hop count改为254并接受NPDU。用户可以从日志上看到:[WARN]npdu_decode_pci: hop count should not be 255 for relayed npdu, change to 254
提供更多信息的日志
ReadPropertyMultiple: 构建大的回应包的可能的缓冲区溢出
当设备实例号被BACnet服务修改时可能造成冲突
当处理write-bdt bvll请求时,如BDT无变化,不触发配置保存动作,以延长flash寿命。
当VBUS的网络号被initialize-routing-table请求修改,如正在处理到虚拟设备的确认请求,当造成冲突。
MS/TP由4.10版引入的bug,在收到错误的帧头时可能引发时序错误。
BBMD: 广播分布推送时遗忘了本地BBMD.
Modbus: 主站复制时WebUI bug.
Modbus: 更方便的主站/从站复制功能.
Modbus: 支持批量修改从站的Modbus参数.
Modbus: 多状态对象可以映射于寄存器内的部分位(不必映射于整个寄存器).
紧急升级功能存在一个bug导致旧的配置未被删除,如旧的配置有错误可能导致WebUI无法使用。如果旧版本固件因为配置问题无法使用,请用本固件紧急升级两次,第一次将升级固件,第二次就会删除旧的配置。
修复Modbus虚拟设备模式的bug,此bug在虚拟设备数量大于5时触发。
修复WebUI当导入的Modbus从站数量超过限制时的bug.
Modbus主站与从站的数量限制由100改为128.
修复WebUI停用“包捕捉映射”的bug.
为兼容更多的上位机系统及DDC编程软件,增加多个名称分隔符选项,修正内部对象名以避免与新增加的分隔符冲突。
Modbus从站设定增加“批量地址”功能。
MS/TP扩展帧支持选项移到扩展配置模式中。
从3.x开始的一个长期bug可能导致ms/tp端口停止工作。
在4.10版本中MS/TP更新时序引入一个bug,由高等级编译优化引发。
BACnet 协议版本号改为16
Polarity在Binary Value对象中是私有属性
Modbus 主站: 批量导入,批量实例号,批量点表
Modbus 从站: 导入点表
Modbus 主/从站: 复制与上下移动的UI.
兼容新硬件变更.
BTL兼容性: max_info_frames与max_master在BACnet侧可写
BTL 10.2.3.6 要求路由在发送拒绝包之前先尝试查找下游路由。
修复bug。此bug当VBUS被使能时可能被触发。
修正4.05版引入的bug,此bug可能造成特定情况下无法进入配置界面。(请注意在http://IP/app/upgrade有一个后备升级固件的入口)
一些UI的小修正.
Modbus对象名移除最顶层的”modbus_master”.
对象名分隔符”|” 改为可配置.
值对象允许与输出对象重叠.
一些界面修正
大量的Modbus网关功能的更新:多状态对象,值对象,二进制文本,编组读取,批量换算,导入导出CSV点定义
包捕捉到BACnet的映射模块的Bug被修复。此Bug可能导致包捕捉功能在BACnet侧启用时,后台程序崩溃重启。
修复Bug当扩展帧支持未被启用时,在ms/tp端口发出的请求中携带的max_apdu_length_accepted参数未正确设置。
WebUI的”系统设定“页面加入更多的信息,如全部/剩余内存,启动计时。
MSTP从站代理的bug修复:当从站绑定失效时守护程序崩溃与重启问题。当在其它端口发送I-Am应答时的Hop count不正确问题.
APDU应答包及网络层拒绝包同样必须遵守目的网络的忙碌状态。
取消创建网络端口的限制,现在只有总网络端口数量的限制。这将大大方便用户修改与切换端口的配置。
如果root密码还未被设置,在“系统设定”页内设置root密码的按钮将以红色字体提醒用户。
在3.18上可能偶然地触发一个芯片的bug造成MS/TP无法启动
网络层拒绝包应采用单播以遵守BTL测试标准。
外部设备的存活时间应加上30秒以遵守BTL测试标准。
发往广播地址的确认服务应在应用层被丢弃以遵守BTL测试标准
BBMD应丢弃相同UDP端口且单播的本地IP子网的转发包.
“同子网多个广播管理设备”逻辑在查找BDT表时遇到不同UDP端口判断出错的Bug被修正。
WebUI 增加网络层设定页面,该页面可以显示路由表。
修复一个从设备代理的bug:当收到一个发往从设备的单播who-is时,服务所携带的设备id范围参数也必须被遵守,就如同广播的who-is。
MS/TP加入了从JCI的FEC2611与IOM3731地址冲突中学习到的检测算法.
MS/TP加入了地址冲突检测功能,冲突的地址会用红色显示在“最近活动的其它站点”中。因为MS/TP在冲突场景下的表现非常多样复杂,该检测并不准确,只能用于参考。
修复了由3.0版本引入MS/TP底层状态机潜在bug.
基于测试及用户反馈,许多(可能是大部分)设备没有遵从BACnet标准中MS/TP接收有限状态机在遇到错误时的处理方式。我们私有的 “超时中止“特性在这种情况下并不能按预期工作,甚至造成性能下降。因此”超时中止”特性被移除。
MS/TP的运行信息页面增加更多的统计信息。
从3.08版本引入的WebUI在BIP的外部设备模式下的Bug被修复。
修正mstp对错误包的占用时间计算错误。
修正3.08引入的mstp从站代理的bug
一些小的UI改进。
因为从2.x升级到3.x,很多配置项改变。所以在3.00~3.09版中,升级固件时,升级脚本将安装新的配置文件。在这个版本中,升级功能增加一个“保留配置”的选项。如果配置文件错误,在打开WebUI时将有一个警告。
修正3.08版本引入的读取mstp运行信息时的错误。
一些小的UI改进。
修正: 单跳方式的广播分布在标准中只是可选功能。从版本3.00起,如果跨网广播支持被选中,BACRouter将强制其它广播管理设备(BBMD)使用单跳方式。这是不正确的行为,在此版本中得到修正。
广播分布表(BDT)的编辑方式得到改进。当提交时,广播分布表(BDT)中的表项将得到检查,排除可能错误配置。这种检查在收到BDT BVLL包时,同样执行。
如果同子网多个广播管理设备(BBMD)未被选中,当收到未记录在本地广播分布表(BDT)中的广播管理设备(BBMD)发来的转发包时,将记录并丢弃该转发包。此功能在绝大多数场合中将有助于识别BBMD的配置问题。上一版本的“报告多个广播管理设备”功能被本功能覆盖,所以取消。
下载配置的文件名设置为IP_版本号.json,例如:192.168.100.1_3.08.json
上传配置将先读入到WebUI中进行编辑,方可保存。如此可避免潜在的版本兼容问题。
因为Ethernet端口现在已很少用到,缺省将其关闭,同时如果BIP与Ethernet同时被启用,将弹出警告,提醒用户注意可能的路由回环。
将默认的捕捉缓冲区大小增加为4M。
包捕捉功能映射到BACnet。 每个链路层端口都有独立的”Capture buf_size”与”Capture command” 多状态值. “Capture buf_size”可以在”64K”到”16M”之间设置。 “Capture command”可以在”Stop&Clean”, “Start”, “Stop”之间设置。
此功能应国外用户需求开发,使用场景如下:路由默认开启包捕捉。当上位机发现某设备的通讯异常时,可以停止路由对应端口的包捕捉(使用“Stop”保留捕捉数据,而不是”Stop&Clean”),然后通过邮件提醒管理员,从WebUI读取当时的包捕捉数据进行分析。
增强安全性,由WebUI可修改root密码。
BACRouter以Initialize-Routing-Table包查询路由表的方式, 确认其它的路由器仍然存活。但是附录135-2012AL移除了路由器对Initialize-Routing-Table的强制支持。本版本增加通过Reject-Message-To-Network包确认路由存活的方式。
BIP BVLL对转发 (Forwarded) 的NPDU的包头要比其它的包头长6个字节,老版本在较验转发的NPDU包长时有个隐蒧的Bug,本版本已得以修正。
UI的小修正
系统设定增加下载配置与上传配置功能
增加包捕捉功能:
所有端口均支持包捕捉。
因为Wireshark不支持MSTP扩展帧解析,扩展帧在下载时转为常规数据帧(幸运的是,Wireshark并不抱怨长度溢出)。
MSTP支持包间隔格式,可以在Wireshark中以5us精度显示包前的空闲时间,是时序与性能分析的利器。
支持持续化包捕捉,提供API接口,方便自动化流量记录。
MSTP增加最大扫描地址实时分析功能,在运行信息中显示,如与配置值不符,将提示“不匹配”
MSTP增加侦听模式,可以在不干涉总线运行的前提下,检测总线运行情况。
MSTP的Web配置界面,提供简单模式与扩展模式选择。
MSTP的所有超时改为浮点数,方便精确定义。
MSTP从设备代理前版只支持广播的Who-Is查询,现版本增加支持单播的Who-Is查询
MSTP从设备代理前版应答I-Am采用网内广播,现版本采用单播
MSTP从设备代理功能修正前版中分析Who-Is查询的路由来源的漏洞。
BBMD增加选项在发现内网有多个BBMD时错误报警。
对2.17版提供功能的修正,增加“接受不匹配的目标地址”选项,如果启用,仅打印报警信息,如果未启用,打印错误信息并丢弃。
很多的WebUI小改进。
在Unconfirmed COV通知中的进程0保留给未订阅的COV通知,当没找到进程0时不再报告错误。
在前版中,当从单播地址接收到Original-broadcast BVLL包或从广播地址接收到Original-unicast BVLL包,认为是个错误而丢包。有客户报告江森的CCT用单播地址发送Original-broadcast BVLL包,所以此版中仅打印报警信息。
从版本2.0.8起, 仅支持转发私有的网络层包,其它不认识的网络层包将被拒绝。此行为不利于支持标准的升级。本版本中所有不认识的网络层包均支持转发。
重定向 URL “/” 到 “/?” 以支持Edge 浏览器 (否则将不停地要求认证)
修正MSTP标准状态机中的Bug: 令牌重复可能导致转发令牌给自身.
MSTP标准状态机中,当设备处于单主机模式下,其开始查询一个主站后,发送max_info_frames * Npoll 个帧。修改为更合理的行为:当结束查询所有主站后发送max_info_frames * Npoll 个帧.
修复从2.0引入的Bug,当MSTP发送Expecting reply请求到255地址时,不必等待回应。
当MSTP自动地址分配与波特率强制功能同时启用时,隐藏的bug可能(极其罕见的条件下)引发。
优化路由表项保护功能: 来自下一跳的删除将跳过保护.
支持采用6.5.3中查找网络路由地址的方法1与4的设备。
此次更新有助于在大型BACnet互联网络中快速建立路由表。
当BACRouter启动时, 广播一个无目标网络号的Who_Is_Router_To_Network以学习其它路由的信息.
当收到无目标网络号的Who_Is_Router_To_Network/Router_Busy_To_Network/Router_Available_To_Network, BACRouter回复的网络号最多可达1120个(对比前版本的112个).
错误修下: ReadRange在读取property_list不应返回以下三个属性: object_identifier; object_name; object_type.
启动时延时1秒发送Network_Number_Is,因为如果路由器做为BIP的外部设备,此时注册流程尚未完成。
保护路由表项从最后活动计起60秒,避免路由回环时的广播风暴。
错误修正: 正确转发私有的网络层包.
转发Reject-Message-To-Network(原因4,包太长)时,使用单播地址.
修改后台的最大apdu重试为10,与WebUI一致。
遵从BACnet Router与BBMD的设备描述.
如果没有收到Who_Is_Router_To_Network或Initializing_Routing_Table包的回应, 删除无效的路由. 此特性有助于从错误的网络配置中恢复.
在网络回环时(当配置错误时), 避免发送过多的I_Am_Router_To_Network.
减少复杂网络下的内存消耗.
避免BBMD广播风暴.
广播发送转发的Reject-Message-To-Network包(只针对拒绝理由1,2,4).
抛弃含有错误路由信息的Reject-Message-To-Network包.
检查NPDU包头的源网络.(对Initializing-Routing-Table包特别处理)
修正全局广播的initializing-routing-table请求未执行的错误.
修正WebUI BIP的模式选择未提交即生效的错误.
限制运行信息页面的路表项个数,以避免在大型互联网络中的请求失败。
修正WebUI较验BDT时的错误.
当收到reinitialize-device服务请求时保存配置重启。
BIP BBMD NAT模式支持端口号修改。
BIP BBMD NAT模式不监听本地广播地址及发送本地广播
BIP BBMD 外部设备模式不监听本地广播地址
当收到Who-Is-Router-To查询时,假定源设备没有该路由(从路由表中删除)
当Initializing-Routing-Table修改了网络号,重新发送I-Am-Routr-To-Network以报告新网络号
修正v2.0引入的错误:保存BVLL Write-Broadcast-Distribution-Table修改的BDT表时出错
增加后备的升级入口 http://ip/app/upgrade
更直觉的日志信息
改进网络层拒绝行为
修正发送I-Am-Routr-To-Network时的溢出(当报告的网络数量超过1476/2时)
以动态时间间隔发送I-Am-Routr-To-Network.
提供选项启用路由内的设备对象。.
允许从BACnet端修改配置
支持What_is_Network_Number and Network_Number_Is 网络包
提供MSTP max_info_frames的by occupy time选项
MSTP包最大延迟保证(10 seconds).
WebUI界面更智能.
将路由表项的数目由1024增加到65534(即没有限制).
从设备代理: 如果对方是快速设备加快ReadProperty(Multiple)的发送速率.
BVLL回应NAK当收到BBMD相关的请求,但BBMD未使能. (附录135-2012ax-5)
BVLL回应NAK当收到Distribute-Broadcast-To-Network请求,但源设备未注册为外部设备. (附录135-2010ad-10)
BIP提供选项接受发往255.255.255.255的广播报文
BIP外设设备模式的注册时间间隔的最小值从30秒减少到15秒。
webui如果IP/掩码/网关/DHCP没有改动,采用快速重启
MSTP加入快速设备超时中止功能
MSTP快速设备最小超时改为0ms(实际是收发切换后1.5bits加上50us)
MSTP快速设备令牌传递超时最小值设为20ms
MSTP运行信息显示最近10秒活动的设备
BIP BBMD 支持NAT,增加两个参数”接受BDT表写入“与”接受外部设备注册”
在“配置”页面显示以太网地址
应某些OEM用户需求,登录认证的域名可以由用户定制。
修正从站代理应答Who-is但查询到的设备并没有在该入口代理。
修正写远程BBMD的BDT表错误
许多的界面改进
加入了从设备代理功能.
MSTP加入了无切换延时桢计数及带填充字节桢计数
一些界面改进。
修正无切换延时桢紧跟带填充字节桢时的解码错误
这是一次大升级,比较多的修订:
MSTP增加令牌超时、回应超时配置项。
MSTP增加快速设备功能,允许指定设备使用小至1毫秒的令牌超时与回应超时。
MSTP增加运行诊断信息含地址冲突,发送冲突、令牌冲突、令牌丢失,令牌转发失败、无应答、包错误。
MSTP增强对不遵守40bit发送切换要求的设备的兼容性
MSTP修正发送扩展桢的编码错误
MSTP修正特定条件下应答测试桢的CRC错误
底层api改动,对本软件无影响
加入系列号
固件文件名带版本号及校验字串。
左边树型菜单处显示版本号。
重启及升级固件后,自动刷新。
修复一些界面bug
前两个月我们的工程师在现场调试CCN Gateway,冷机型号是30RB,控制系统是touch pilot,发现Web Gui里看到的机组状态是中文乱码,其它点的中文显示正确,工程师当场就凌乱了,查了开利美国版本的手册,及国内最常用的法国版本的手册,都对应不上。
工程师只能操作冷机的面板,看看什么状况,结果,居然冷机面板看到的一样是乱码。客户当场就要发飚,这根本就是汉化不完全的半成品。
联系到前两年有一款30XA的中文界面,在英文原版的界面中,机组状态有”Stopping”与”Off”,英文很好理解,“Stopping”就是正在停机中,”Off“就是停机状态。
但是中文的面板,将两者都翻译成”停止“,这样客户无法分辨机组到底停了没有,水泵能不能安全关闭。其实只要将”Stopping“翻译成”停止中“,就不会有这个混淆产生了。
今天,在一款30XA_NGA的热回收机组上,看到热回收进出水温度的英文是”Hear Reclaim Entering”, “Hear Reclaim Leaving”, 明显这里的单词”Hear”是错误的,本应为“Heat”。而且在”RECLAIM”表中的热回收进出水温度的数据一直为0,不更新。这意味着如果客户不幸高价采购了开利原装的网关,只能读到无效的热回收工作数据。
幸运的是在维持表“WCHRSTAT”中,有对应的数据点,而且数值持续更新中。我们新版的网关固件支持维持表映射(开利原装网关不支持),终于为客户解决了这个麻烦。
以我们的理解,这些问题的根源在于开利国内的开发部,在原版固件的基础上做二次开发时不严谨。而且CCN部门在面对用户时一贯强势,使得对于产品的缺陷,客户也只能逆来顺受,无法将需求传导到开发部门,从而修正缺陷。
而对我们来说,仅有最大程度满足客户需求,才有市场立足之地。因些对客户的所有问题,我们都尽力解答,甚至要为客户解释机组的运行逻辑、故障维修,半夜三更远程替客户配置网关。
16DJ的机型很早以前就测试过了。这次客户在现场遇到一台16DE机型,无法初始化成功。在客户协助下,进行了远程调试,并根据调试结果升级了固件。
一般这种问题的原因是我们的底层软件,为了避免对设备造成任何破坏,采用了极严格的校验,如果冷机的固件信息有一些不符,均拒绝操作,须经远程调试确认后,才能手动放行。
我司在这个领域几年以来,见识到了无数的固件版本,冷机型号相同,固件可能不同,点位也不一样,如果不深入研究内部的数据结构,照葫芦画瓢,只会把客户的设备置于风险之中。
我们的模拟演示网关连接6台模拟冷机,总线号为0,元素地址分别为1~6。
模拟网站的用户名为:admin,无密码。
Modbus网关的访问地址为:http://demo1.hvacrcontrol.com
BACnet网关的访问地址为:http://demo2.hvacrcontrol.com
同时根据网关上配置的Modbus TCP与BACnet IP端口,您可以用modscan和VTS进行测试。
因为这两台网关是开放访问的,如果有多个用户同时操作,可能会有奇怪地结果,如果您想独立地模拟操作,请联系我们,我们会提供一个独立的入口。