在易维通的匠说上有网友留言S7-1200与S7-200的Modbus通信问题,我做了简单的回答。由于通信涉及很多方面,回答者只能根据提问者反馈的情况,猜测可能的问题原因。而当通信出现故障时,不同的情况遇到的问题可能不一样,无法一概而论。因此,我想最好的办法是做一个通信连载的教程,把整个流程梳理一遍。当你有了基本概念,再根据自己的实际情况,有针对性的查找原因会更简单些。
本文我们先简单介绍下Modbus的通信原理,然后介绍下例程中需要用的硬件及网络的拓扑结构。
Modbus RTU是一种主从通信协议,其物理层采用RS485网络。RS485的串行通信规程中规定应用数据单元(Application Data Unit,ADU)的最大长度为256个字节。在Modbus RTU协议中,从站地址占用1个字节,校验位占用2个字节,因此协议数据单元PDU(Protocol Data Unit)的最大长度为256-1-2=253字节。
在协议数据单元PDU中,功能代码占用1个字节,因此数据长度为0~252个字节。如下图:
Modbus通信协议的PDU包括三种:
1)Modbus请求PDU(Modbus Request PDU);
2)Modbus应答PDU(Modbus Response PDU);
3)Modbus异常应答PDU(Modbus Exception Response PDU);
以功能代码“0x01”为例,其请求PDU的格式如下表:
其应答PDU的格式如下表:
不同的功能码其数据长度的单位不同。位(bits)操作的功能码,其请求数据的长度以“位”为单位;字(WORD)操作的功能码,其请求数据的长度以“字”为单位;
比如:功能码0x01(读取线圈),其请求数据(线圈数量)是以“位(bits)”为单位的;而功能码0x03(读取保持寄存器),其请求数据(保持寄存器)是以“字(WORD)”为单位的;
Modbus通信协议规定了不同的参数地址,与PLC的CPU地址有一种对应关系。以S7-200 Smart为例,Modbus参数地址与CPU的地址的对应关系见下面的表格:
本例程主站采用S7-1200的PLC,从站采用S7-200 Smart的PLC。
1、硬件配置:
1.1 主站:
S7-1200 CPU1215C;
CM1241-RS485;
1.2 从站:
S7-200 Smart CPU ST40;
2、通信任务:
2.1 Modbus主站读取从站Modbus参数地址40001开始的10个字长的数据;
2.2 Modbus主站将6个字长的数据写入到从站起始Modbus参数地址40011;
2.3 Modbus主站读取从站Modbus参数地址10001开始的8个位的数据;
2.4 Modbus主站将8个位写入到从站Modbus参数地址00001;
3、网络连接:
主站的CM1241-RS485模块通过Profibus电缆连接到从站CPU ST40本体的RS485端口;为了监控和下载程序方便,可以用交换机将CPU ST40、CPU1215C和编程电脑PG/PC连接起来。整个网络拓扑图如下:
关于Modbus的通信原理及本例程的网络拓扑结构就介绍到这里,下一篇文章我们介绍Modbus主站CPU1215C的配置。欢迎扫描下面的二维码关注我们的微信公众号。
发表评论