欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#ModBus Tcp 报文解析

程序员文章站 2022-06-04 10:46:05
上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 读一组线圈 读取站号为1 从地址12开始的10个线圈 测试结果 上一篇博客已经总结了读操作报文格式,就按照格式划分 报文解析: 注意:报文 ......

上一篇博客已经完成 c#modbus tcp master的实现

本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文)

读操作

功能码 0x01 读一组线圈 读取站号为1 从地址12开始的10个线圈

测试结果

C#ModBus Tcp 报文解析

上一篇博客已经总结了读操作报文格式,就按照格式划分

C#ModBus Tcp 报文解析

 

报文解析:

C#ModBus Tcp 报文解析

注意:报文中线圈起始地址 00000 对应设备中 10001 地址,其他顺延 

 

功能码0x02 报文格式与功能码0x01一致,只是第八字节的功能码变为02 其他完全一致,不再重复解析

功能码0x03 读一组保持寄存器 读取站号为1 从地址12开始的10个值

C#ModBus Tcp 报文解析

报文解析:

C#ModBus Tcp 报文解析

 功能码0x04 报文格式与功能码0x03一致,只是第八字节的功能码变为04 其他完全一致,也不再重复解析

 

写操作

操作码:0x05 写单个线圈  将站号为1 地址为21的线圈置为on

注意:在报文中 指定线圈通断标志  ff00 置线圈为on  0000置线圈为off

C#ModBus Tcp 报文解析

报文解析:

C#ModBus Tcp 报文解析

 

功能码0x0f 写一组线圈  将站号1 起始地址21  的连续五个线圈置为 通,断,断,通,通

测试结果:

C#ModBus Tcp 报文解析

报文解析:

C#ModBus Tcp 报文解析

 

功能码 0x06  写单个保持寄存器  将6666写入从站1 地址为21 的保持寄存器中

测试结果

C#ModBus Tcp 报文解析

报文解析:

C#ModBus Tcp 报文解析

功能码0x10  写一组保持寄存器   例如 将12 23 34 45 56 67 78 分别写入从站1 起始地址为21的7个连续的保持寄存器中

测试结果

C#ModBus Tcp 报文解析

报文解析:

C#ModBus Tcp 报文解析

 

 

到此为止,我们常用的几个modbus功能码报文都解析完毕了 有错误之处 希望大家不吝赐教,感谢(抱拳~)

c#modbus tcp master