MSTP 固定/自动/强制 波特率

MSTP的波特率设置一直是个现场工程师头痛的问题,如果设备的波特率设置有误,就无法加入MSTP网络中。

大部分设备采用固定的波特率,如需修改波特率,工程师必须接触到设备并调整DIP开关。有的设备支持通过BACnet服务修改波特率,但是在这之前,设备必须要能接入到BACnet网络中。

有的厂商实现了自动波特率配置,但是也带来了更多的问题,目前市场上的自动波特率有两种类型:

  • 启动时探测:设备在启动时监听总线并探测波特率,随后一直以该波特率运行。
  • 动态探测:设备不但在启动时探测波特率,在运行中如果在一段时间内持续发生通讯错误,即认为波特率改变,重新探测波特率。

不管是哪种类型,在总线运行时改变波特率都是非常困难的。仅仅改变所有固定波特率设备的设置是无法影响总线波特率的,因为其它自动波特率设备仍然以旧的波特率运中。唯一可靠的方法是在改变所有固定波特率设备的设置后,关掉所有自动波特率设备,再启动所有自动波特率设备(不能一个接一个的重新启动自动波特率设备!因为仍在运行中的自动波特率设备将维持总线波特率)

BACRouter的新版本固件(版本>=2.0)引入了新的波特率管理机制(专利申请中)。BACRouter有三种波特率模式:固定/自动/强制。

  • 固定波特率模式与传统的固定波特率一样
  • 自动波特率模式类似于前述的动态探测。重新探测的条件是10个连续的错误帧。
  • 强制波特率模式类似于自动波特率模式,区别在于其在得到令牌后,将波特率改为预设的波特率。

当总线中有一个强制模式设备时,总线的波特率将会强制运行于预设值,而其它自动模式设备将自动同步波特率。固定模式但波特率设置值不同于预设值的设备将无法出现在总线中(通过检查BACRouter的运行信息中的“最近活动设备”项将很快地把这些设备找出)。对于上述的启动时探测设备,如果其探测到的波特率不同于预设值,也无法出现在总线中(同样可以通过检查BACRouter的运行信息中的“最近活动设备”项找出),但只需将其一个接一个的重新启动即可(不需全部断电,再全部上电)。

多个强制模式的设备可以共存在总线中,但这些设备中的波特率预设值必须相同。

BACnet路由版本升级记录

2.15  2017.10.19  下载

重定向 URL “/” 到 “/?” 以支持Edge 浏览器 (否则将不停地要求认证)

修正MSTP标准状态机中的Bug: 令牌重复可能导致转发令牌给自身.

MSTP标准状态机中,当设备处于单主机模式下,其开始查询一个主站后,发送max_info_frames * Npoll 个帧。修改为更合理的行为:当结束查询所有主站后发送max_info_frames * Npoll 个帧.

2.14  2017.10.13  下载

修复从2.0引入的Bug,当MSTP发送Expecting reply请求到255地址时,不必等待回应。

2.13  2017.9.19  下载

当MSTP自动地址分配与波特率强制功能同时启用时,隐藏的bug可能(极其罕见的条件下)引发。

2.12  2017.7.10  下载

优化路由表项保护功能: 来自下一跳的删除将跳过保护.

支持采用6.5.3中查找网络路由地址的方法1与4的设备。

2.11  2017.6.16  下载

此次更新有助于在大型BACnet互联网络中快速建立路由表。

当BACRouter启动时, 广播一个无目标网络号的Who_Is_Router_To_Network以学习其它路由的信息.

当收到无目标网络号的Who_Is_Router_To_Network/Router_Busy_To_Network/Router_Available_To_Network, BACRouter回复的网络号最多可达1120个(对比前版本的112个).

2.10  2017.6.13  下载

错误修下: ReadRange在读取property_list不应返回以下三个属性: object_identifier; object_name; object_type.

启动时延时1秒发送Network_Number_Is,因为如果路由器做为BIP的外部设备,此时注册流程尚未完成。

2.09  2017.6.10  下载

保护路由表项从最后活动计起60秒,避免路由回环时的广播风暴。

2.08  2017.6.7

错误修正: 正确转发私有的网络层包.

转发Reject-Message-To-Network(原因4,包太长)时,使用单播地址.

修改后台的最大apdu重试为10,与WebUI一致。

2.07  2017.6.5

遵从BACnet Router与BBMD的设备描述.

如果没有收到Who_Is_Router_To_Network或Initializing_Routing_Table包的回应, 删除无效的路由. 此特性有助于从错误的网络配置中恢复.

在网络回环时(当配置错误时), 避免发送过多的I_Am_Router_To_Network.

减少复杂网络下的内存消耗.

2.06  2017.6.1

避免BBMD广播风暴.

广播发送转发的Reject-Message-To-Network包(只针对拒绝理由1,2,4).

抛弃含有错误路由信息的Reject-Message-To-Network包.

检查NPDU包头的源网络.(对Initializing-Routing-Table包特别处理)

2.05  2017.5.23

修正全局广播的initializing-routing-table请求未执行的错误.

修正WebUI BIP的模式选择未提交即生效的错误.

限制运行信息页面的路表项个数,以避免在大型互联网络中的请求失败。

2.04  2017.5.11 下载

修正WebUI较验BDT时的错误.

当收到reinitialize-device服务请求时保存配置重启。

2.03  2017.5.7

BIP BBMD NAT模式支持端口号修改。

BIP BBMD NAT模式不监听本地广播地址及发送本地广播

BIP BBMD 外部设备模式不监听本地广播地址

2.02  2017.5.5

当收到Who-Is-Router-To查询时,假定源设备没有该路由(从路由表中删除)

当Initializing-Routing-Table修改了网络号,重新发送I-Am-Routr-To-Network以报告新网络号

修正v2.0引入的错误:保存BVLL Write-Broadcast-Distribution-Table修改的BDT表时出错

2.01  2017.5.3

增加后备的升级入口 http://ip/app/upgrade

更直觉的日志信息

改进网络层拒绝行为

修正发送I-Am-Routr-To-Network时的溢出(当报告的网络数量超过1476/2时)

以动态时间间隔发送I-Am-Routr-To-Network.

2.0  2017.4.19

提供选项启用路由内的设备对象。.

允许从BACnet端修改配置

支持What_is_Network_Number and Network_Number_Is 网络包

提供MSTP max_info_frames的by occupy time选项

实现新的MSTP自动/强制波特率机制.

MSTP包最大延迟保证(10 seconds).

WebUI界面更智能.

1.22  2016.10.26

将路由表项的数目由1024增加到65534(即没有限制).

1.21  2016.10.18

从设备代理: 如果对方是快速设备加快ReadProperty(Multiple)的发送速率.

BVLL回应NAK当收到BBMD相关的请求,但BBMD未使能. (附录135-2012ax-5)

BVLL回应NAK当收到Distribute-Broadcast-To-Network请求,但源设备未注册为外部设备. (附录135-2010ad-10)

1.20  2016.10.8

BIP提供选项接受发往255.255.255.255的广播报文

BIP外设设备模式的注册时间间隔的最小值从30秒减少到15秒。

1.19  2016.9.23

webui如果IP/掩码/网关/DHCP没有改动,采用快速重启

MSTP加入快速设备超时中止功能

MSTP快速设备最小超时改为0ms(实际是收发切换后1.5bits加上50us)

MSTP快速设备令牌传递超时最小值设为20ms

MSTP运行信息显示最近10秒活动的设备

1.18  2016.9.13

BIP BBMD 支持NAT,增加两个参数”接受BDT表写入“与”接受外部设备注册”

在“配置”页面显示以太网地址

1.17  2016.9.8

应某些OEM用户需求,登录认证的域名可以由用户定制。

1.16  2016.9.7

修正从站代理应答Who-is但查询到的设备并没有在该入口代理。

修正写远程BBMD的BDT表错误

许多的界面改进

1.15  2016.9.1

加入了从设备代理功能.

MSTP加入了无切换延时桢计数及带填充字节桢计数

一些界面改进。

修正无切换延时桢紧跟带填充字节桢时的解码错误

1.14  2016.8.24

这是一次大升级,比较多的修订:

MSTP增加令牌超时、回应超时配置项。

MSTP增加快速设备功能,允许指定设备使用小至1毫秒的令牌超时与回应超时。

MSTP增加运行诊断信息含地址冲突,发送冲突、令牌冲突、令牌丢失,令牌转发失败、无应答、包错误。

MSTP增强对不遵守40bit发送切换要求的设备的兼容性

MSTP修正发送扩展桢的编码错误

MSTP修正特定条件下应答测试桢的CRC错误

1.13  2016.8.16

底层api改动,对本软件无影响

1.12  2016.8.12

加入系列号

1.11  2016.8.10

固件文件名带版本号及校验字串。

左边树型菜单处显示版本号。

重启及升级固件后,自动刷新。

修复一些界面bug

BACnet MSTP的最高传输速度

在BACnet标准中,MSTP的最高波特率为115200bps,一个token包的长度为8字节,在两个包之间至少还要有4字节的切换时间(Tturnaround = 40bits),所以理论最高令牌转发率为115200/(80 + 40) = 960次/秒。

但是实际上市场上大部分产品的底层实现,都难以达到,造成MSTP的实际带宽受限,甚至造成丢包或丢令牌。

目前我司的产品上的进行的测试,4个节点,mac address从0~3, max_master=3,网络层静默,测得令牌转发率为948次/秒,带宽利用率98.8%.

在每秒一个读属性请求(23字节),一个读属性应答(29字节)的条件下,测得令牌转发率为943次/秒。

我司的协议栈是在完全满足标准时序要求下,基本榨干了MSTP的性能。

更新,2017年2月,我们在上述配置下做了ReadProperty服务的压力测试,把4个节点的max_info_frames均设为10,2个节点请求,2个节点响应。最后的结果每秒钟完成153~154个服务。

更新,2017年3月,现在通过详细的运行信息,用户可以方便地得到令牌转发率数据。在发布新一版固件9个月之后,我们重新做了上面的测试,这次的结果是每秒956.6次的令牌转发率,99.6%的带宽利用率。