目录
需要的软件modbus poll modbus slave,Wireshark和网络调试助手。
1.搭建硬件环境
先搭建硬件环境,需要用到以太网转485的设备,实物以及连接如下:
注:
(a)EE11直接将以太网的数据部分通过485发送出来,去掉了TCP/IP的包头。
(b)ee11输出的485通过 485 转usb模块 接到电脑usb上。
2.软件配置
A.对poll 设置EE11的IP地址和端口号。(此处省略EE11的配置)
B.poll采用读线圈的操作。
C.设置slave。
3.抓包分析
Modbus 主从软件启动并配置,读取线圈正常后,后用Wireshark 软件抓取包
抓到如下包
图片描述:169.254.1.1 是TCP转RTU 模块的地址(EE11的地址),169.254.195.252 是电脑网卡地址。上图中Data(12 bytes) 就是modbus 传输的协议内容。如下黄色为modbus相关的代码。
34 ea e7 1f e2 12 54 04 a6 79 78 55 08 00 45 00 4.....T..yxU..E.
00 34 0b 4f 40 00 40 06 00 00 a9 fe c3 fc a9 fe .4.O@.@.........
01 01 21 47 27 0f 99 d3 01 24 00 00 4a 81 50 18 ..!G'....$..J.P.
fa 04 19 21 00 00 04 3e 00 00 00 06 01 01 00 00 ...!...>........
00 0a
根据modbus tcp协议知
请求:
04 3e为此次通信事务处理标识符,一般每次通信之后将被要求加1以区别不同的通信数据报文;
00 00表示协议标识符,00 00为modbus协议;
00 06为数据长度,用来指示接下来数据的长度,单位字节;
01为设备地址,用以标识连接在串行线或者网络上的远程服务端的地址。以上七个字节也被称为modbus报文头;
01为功能码,01为读取线圈状态;
00 00为起始地址;
00 01为寄存器数量。
对应该包的响应为
54 04 a6 79 78 55 34 ea e7 1f e2 12 08 00 45 00 T..yxU4.......E.
00 33 07 10 00 00 ff 06 9b ba a9 fe 01 01 a9 fe .3..............
c3 fc 27 0f 21 47 00 00 4a 81 99 d3 01 30 50 18 ..'.!G..J....0P.
04 bc 5c ac 00 00 04 3e 00 00 00 05 01 01 02 40 ..\....>.......@
00 .
响应:
04 3e为此次通信事务处理标识符,应答报文要求与先前对应的请求保持一致;
00 00为协议标识符,与先前对应的请求保持一致;
00 05为数据长度,用来指示接下来数据的长度,单位字节;
01为设备地址,应答报文要求与先前对应的请求保持一致;
01为功能码,正常情况下应答报文要求与先前对应的请求保持一致,如果出错则返回80h+先前的功能码;
02指示接下来数据的字节长度;
40 00为被读取的保持寄存器中的数据值,即要求被读取的地址为00 00的保持寄存器中的数值为40 00 h。第六位为高。
其它的协议
以太网 2 的协议头
IP4 的目的IP和源Ip
端口号和 其它协议位
4.TCP server 和 client 通讯抓包
用网络调试助手建立连接
抓包后如下
与modbus通讯 对比,只是数据格式内容不同。其它协议一致。
总结
(1)Modbus tcp 是在tcp的数据包中定义一些数据的特定用途(定义为Modbus格式 ), 其它部分同tcp通讯一模一样。
(2)EE11 将tcp转为rtu后,modbus tcp的报文头并未从EE11的485输出,EE11 内部处理报文头(去掉了TCP/IP的包头),不需要单片机处理,单片机不用处理IP地址和端口号等等。