"目前有一个项目,需要将一个s7-200作为从站,把数据通过modbus协议送给两个上位机。 如何解决?急求,谢谢~"
针对客户的以上需求,可以选用大连的的M02型PLC。该PLC通过其自带的Modbus_TCP协议可以连接12台上位机。
C# Modbus TCP 通讯实例:
这里简单的理解一下Modbus TCP/IP 协议的内容,就是去掉了modbus 协议本身的CRC 校验,增加了MBAP 报文头。
这里只是简单的理解,深入之后可能会有更多的东西需要学习,但为了可以快速入门,我们先按照这个思路往下走。
我们首先来看一下,MBAP 报文头都包括了哪些信息和内容
下面我们再来介绍一下针对我们 PLC 的功能码
1、0x01 功能码: 按位读取 Q 区(线圈 )例:我们来读取从 Q0.0 到 Q0.5 这 6 个线圈
发送码分析:
根据上面的分析,我们需要发送 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x01, 0x00, 0x00,0x00, 0x06
接收码分析:
我们收到的数据为 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01,0x01,0x01,0x2A
modbus 数据中从左数,0x01 表示功能码,0x01 表示 1 个字节数据,0x2A 表示数据值把 0x2A 转换为 2 进制为 0010 1010 , 从左数起,前 2 位是补充数据 00,剩下的 101010 表示我们读取的 Q0.5 到 Q0.0 的状态。
Q0.5------ ON,
Q0.4 ------ OFF,
Q0.3-------ON,
Q0.2--------OFF,
Q0.1-------ON,
Q0.0----------OFF。
注意数据的顺序,左侧是高位,右侧是低位。
注意:上述发送及接收数据中,红色数码是 MBAP 报文头,黑色码是 modbus 数据,下同。
2、0x02 功能码:按位读取 I 区 (离散输入)
例:我们来读取从 I0.0 到 I0.5 这 6 个离散输入点
发送码分析:
根据上面的分析,我们需要发送 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x01, 0x02, 0x00, 0x00,0x00, 0x06
接收码分析:
我们收到的数据为 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x01,0x02,0x01,0x00
modbus 数据中从左数,0x02 表示功能码,0x01 表示 1 个字节数据,0x00 表示数据值
把 0x0 转换为 2 进制为 0000 0000 ,从左数起,前2 位是补充数据 00,剩下的000000 表示我们读取的 I0.5 到 I0.0 的状态。
3、0x03 功能码:按双字节(VW)读取 V 区或者读 MW
Modbus 寄存器 0-------19999 是读取 VW
Modbus 寄存器 20000------20031 是读取 MW
例:我们来读取从 VW0 到 VW2 这个数据
发送码分析:
...........
更多具体设置详见www.dl-winbest.com
QQ:1242136482(注明中国工控网)