接上一篇,C#ModBus Tcp的学习及Master的实现,我们可以根据功能进行读写。本篇文章,主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文)。
例:读取站号为1,从地址12开始的10个线圈:
接下来,按照报文格式划分:
解析一下上文中读一组线圈的报文:
000002-Rx:00 01 00 00 00 06 01 01 00 0C 00 0A 000003-Tx:00 01 00 00 00 05 01 01 02 AE 00
Tip
报文中线圈起始地址 00000 对应设备中 10001 地址,其他顺延。
报文格式与功能码0x01一致,只是第八字节的功能码变为02,其他完全一致,解析参考上文。
例:读取站号为1 从地址12开始的10个值
解析报文:
报文格式与功能码0x03一致,只是第八字节的功能码变为04,其他完全一致,解析参考上文。
例:将站号为1,地址为21的线圈置为On:
Tip
在报文中,指定线圈通断标志: FF00 置线圈为ON, 0000置线圈为OFF
报文解析:
例:将站号1,起始地址21,的连续五个线圈置为:通,断,断,通,通
测试结果:
报文解析:
例:将6666写入从站1,地址为21的保持寄存器中:
测试结果
报文解析:
例:将12,23,34,45,56,67,78分别写入从站1,起始地址为21的7个连续的保持寄存器中:
测试结果
报文解析:
至此,我们常用的几个ModBus功能码报文都解析完毕了,有错误之处,欢迎指正!
本文作者:Peter.Pan
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!