关注官方微信

EN

EN.

产品中心

产品中心

RTU做主站的Modbus网关

发布时间:2019-09-17 作者:上海卓岚 浏览量:7556
1.RTU做主站的问题

通常来说Modbus网关的网口接主站,网口采用Modbus TCP协议,串口接各种RS485的仪表,串口采用Modbus RTU协议。但是也有少量情况是串口的(RS485)作为主站需要获得Modbus TCP从站的数据,如下图所示:

RTU做主站的结构示意图

由于Modbus RTU和Modbus TCP的寻址方式不同,普通的方式无法实现这种功能。RTU一般通过Modbus RTU指令的第一个字节作为站地址,比如01 03 00 00 00 01 84 0a 的第一个字节01就是指查询站地址1,所有RS485总线上非01地址的设备都不会应答。但是当Modbus TCP协议由于采用TCP连接作为绑定主站和从站的纽带,不再需要从站地址的概念,只要是发给Modbus TCP从站的查询,它都会做应答。它忽略了01这个站地址字节,实际上Modbus TCP采用的是IP地址作为站号的识别。

普通的方式RTU主站的查询过程如下:

1.首先6路Modbus网关的(2个ZLAN5143×1路和1个ZLAN5443D×4路)分别配置连接到6个Modbus TCP从站,地址分别为192.168.1.61、192.168.1.62、192.168.1.63~192.168.1.66。Modbus RTU主站的RS485和6路Modbus网关的RS485连接在一起。

2.Modbus RTU主站PLC向RS485总线发送指令3d 03 00 00 00 01 81 36。

3.所有的6路Modbus网关都会收到3d 03 00 00 00 01 81 36,并且都转化为Modbus TCP格式的数据00 00 00 00 00 06 3d 03 00 00 00 01,分别发给192.168.1.62、192.168.1.63~192.168.1.66。

4.虽然00 00 00 00 00 06 3d 03 00 00 00 01指令里面也有3d这个地址字段(十六进制3d就是61),但是每个Modbus TCP从站不会关心这个站地址,所有的从站都会给出应答。

5.6路Modbus网关几乎同时收到Modbus TCP从站的应答,并同时发送到RS485总线,产生了总线的冲突,数据错乱。

以上方案的最终结果是由于数据冲突和无法使用。

2.RTU做主站的方案

根据上一节的分析关键的问题在于Modbus TCP和RTU的从站识别方式不同,前者是IP地址,后者是站地址。我们无法修改RTU主站PLC的协议也无法修改Modbus TCP从站的协议。所以需要在Modbus网关内部做这种地址转换。

具体的实现方法是:将Modbus TCP从站的IP地址的最后一个字段作为Modbus RTU的站地址。所以为了访问192.168.1.62、192.168.1.63~192.168.1.66,RTU主站发送的指令应该分别对应站地址61、62、63~66,即:3d 03 00 00 00 01 81 36、3e 03 00 00 00 01 81 05等。

Modbus网关在收到RS485总线指令后会识别站地址,如果站地址和自己连接的Modbus TCP的IP地址最后一个字段相同则转发,否则不做转发。也就是需要有一个小的定制功能。

有了这个定制功能后,再按照之前的通讯步骤运行时,由于现在只有一路Modbus网关转发了数据,相应的也就只有一路返回数据转发到RS485总线上,避免了冲突。

3.具体实现步骤

为了实现这个小的定制功能,需要从卓岚那边获得“RTU做主站”的配置文件,将其下载到设备内部,重新上电即可。

4.多目的连接

在实际的使用场合中有比图1更为有效的方法,即每个Modbus网关可以连接6个目的IP,所以以上图1,只需要一台ZLAN5143即可实现,只不过需要配置额外的5个目的IP分别连接到192.168.1.62、192.168.1.63~192.168.1.66。

“RTU做主站”的定制功能会识别连接的IP地址,目的IP地址最后一个字节和RTU从站地址不同不会转发,所以也可以用单台Modbus网关实现6个Modbus TCP从站的查询。