客户在使用Anybus网关时,遇到了一个很有意思的应用,在这里分享给大家。
客户通过ABC3000网关,将串行仪表接入PROFIBUS DP网络控制系统中,如下图所示。

简单介绍一下网关设备:
- Anybus 网关ABC3000实现将任何RS-232/485串行设备接入到PROFIBUS控制系统。
- 使用基于 Web 的拖拽式配置界面,非常易于使用。
- 采用屡获殊荣的 NP40 网络处理器,实现数据即时传输,使您可以利用高速工业网络。
客户遇到的问题:
- 客户的仪表是RS485接口,支持标准的ModbusRTU协议。仪表寄存器从40001开始到40020共20个寄存器,这20个寄存器必须连续读取,不支持分开访问。客户只需要其中的40001,40002和40010,40011这4个寄存器的数值传输到PROFIBUS控制系统中。
- 一个寄存器的数值占2个字节,连续读取20个寄存器对应的是40字节,客户需要连接20台仪表,总的数据量是800个字节,虽然网关的存储区是1500字节,但是PROFIBUS DP协议传输的数据量最大是244字节,显然受PROFIBUS协议限制,一台网关无法实现,需要4台才能满足连接20台仪表的需求,可是这样明显的增加了成本,并且里面有很多数据是不需要的。
- 可能有的人会提出,网关里为什么不增加一些数据处理功能,这样不管采集了什么样的数据,对数据过滤一下不就解决了。但是我们知道,只要增加了数据处理,就不仅仅是数据过滤,还需要包括客户很多别的处理需求,这样就会占用时间,而我们的网关为保证数据的即时传输,不对传输的数据做任何处理,只进行协议的转换,这样使得两侧网络的延迟控制在1ms以内,数据的处理在PLC侧完成即可。那么在无法对数据进行过滤的情况下,我们就需要想一些别的办法来解决客户当前的问题。
如何解决:
我们使用网关串行自定义协议来解决此问题,在指令的请求中依旧是请求连续读取20个寄存器数值,但在指令的响应中只把需要的数据映射到PROFIBUS 侧,不需要的数据不进行映射,间接的实现了过滤功能,这样1台网关就可以解决客户的问题。
让我们看看具体是如何实现的吧:
- 这是标准的03功能码读取40001到40020寄存器指令结构:

- 我们对指令的响应报文中,20个寄存器的数值区进行拆分,如下图所示。

- 没有修改指令前,在串行侧和PROFIBUS侧的数据映射关系中,读取到的这40个字节数据都需要传输到PROFIBUS侧。

- 经过修改后,在数据映射时,我们将需要的数据映射到PROFIBUS侧共8个字节,不需要的数据不进行映射。这样连接20台仪表,共160个字节,没有超过PROFIBUS侧244字节的上限,一台网关就可以搞定了!
