产品中心
通常来说Modbus网关的网口接主站,网口采用Modbus TCP协议,串口接各种RS485的仪表,串口采用Modbus RTU协议。但是也有少◆量情况是串口的(RS485)作为主站需要获得Modbus TCP从站的数据,如※下图所示:
由于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总线,产生了总※线的冲突,数据错乱。
以上方案的最终结果是由于数据冲突和无法使用。
根据上一■节的分析关键的问题在于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总线上,避免了冲☉突。
为了实现这个小的定制功能,需要从卓岚那边获得“RTU做主站”的配置文□件,将其下载∴到设备内部,重新上电即可。
在▓实际的使用场合中有比图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从站的查询。