C# ModbusTcp 概念

1 概念

要开发一个新项目,上位机与下位机通讯使用Modbus TCP协议,在网上找了好多资料了解此协议,此处仅描述TCP/IP协议。

Modbus原先是施耐德电气(Schneider Electric)为PLC(可编程逻辑控制器)通信而研发的一种串行通信协议,现在它已经成为工业领域通信协议的业界标准,并且现在是工业电子、工业控制、电力等设备之间常用的连接方式。

Modbus协议使用的是主从通讯技术,即由主设备主动查询和操作从设备,即由主设备主动查询和操作从设备。一般将主控设备方所使用的协议称为Modbus Master,从设备方使用的协议称为Modbus Slave。Modbus的工作方式是请求/应答,每次通讯都是主设备先发送指令,可以是广播,或是向特定从设备的单播,从设备响应指令,并按要求应答,或者报告异常。当主设备不发送请求时,从设备不会自己发出数据,从设备和从设备之间不能直接通讯。

Modbus TCP/IP协议应用于以太网连接,ModbusTCP的数据帧格式:ADU = MBAP + PDU,即 MBAP(7字节) + 功能码 (1字节)+ 数据域(长度不定,由具体功能决定)。

MBAP为报文头,长度为7字节,组成如下:

事务处理标识协议标识长度单元标识符
2byte2byte2byte1byte

事务处理标识: 报文的序列号,每次通信之后就要加1以区别不同的通信数据报文。
协议标识符 :  00 00表示ModbusTCP协议。
长度 :表示长度后面所有的字节数,即值为ADU字节长度减去6,单位为字节。
单元标识符 : 可以理解为从设备地址。

功能码

功能码作 用
0x01读线圈
0x02读离散量输入
0x03读保持寄存器
0x04读输入寄存器
0x05写单个线圈
0x06写单个寄存器
0x0F写多个线圈
0x10写多个寄存器

2 例子

数据帧格式:ADU = MBAP + PDU,即 MBAP(7字节) + 功能码 (1字节)+ 数据域

MODBUS请求的生成:


在收到来自用户应用的需求后,客户端必须生成一个MODBUS请求,并发送到TCP管理。

MBAP+ 功能码 +起始地址H+ 起始地址L+ 寄存器数量H+ 寄存器数量L(共12字节)。

  • 如:起始地址是0x0000,寄存器数量是 0x0003
    00 01 00 00 00 06 01 03 00 00 00 03

见下表:

类型描述字节大小实例
MBAP报文头事务处理标识符20x0001
协议标识符20x0000
长度20x0006
单元标识符(从设备地址)10x01
MODBUS请求功能码10x03
起始地址20x0000
寄存器数量20x0003

MODBUS响应的生成


一旦处理请求,MODBUS 服务器必须使用适当的MODBUS服务器事务处理生成一个响应,并且必须将响应发送到TCP管理组件。

根据处理结果,可以生成两类响应:

肯定的MODBUS响应
响应功能码 = 请求功能码

回:数据长度为0x06,第一个寄存器的数据为0x21,其余为0x00

00 01 00 00 00 09 01 03 06 00 21 00 00 00 00

类型描述字节大小实例
MBAP报文头事务处理标识符20x0001
协议标识符20x0000
长度20x0009
单元标识符(从设备地址)10x01
MODBUS请求功能码10x03
数据长度20x06
数据60x002100000000

MODBUS异常响应
目的是为客户机提供与处理过程检测到的错误相关的信息
响应功能码 = 请求功能码+0x80
提供异常码来表明出错的原因。

异常码MODBUS名称备注
01非法的功能码服务器不了解功能码
02非法的数据地址与请求有关
03非法的数据值与请求有关
04服务器故障在执行过程中,服务器故障
05确认服务器接受服务调用,但是需要相对长的时间完成服务。因此,服务器仅返回一个服务调用接收的确认
06服务器繁忙服务器不能接受MODBUS请求PDU。客户应用由责任决定是否和何时重发请求。
0A网关故障网关路经是无效的
0B网关故障
目标设备没有响应

参考建议:

https://blog.csdn.net/sgmcumt/article/details/87435191
https://blog.csdn.net/YiWangJiuShiXingFu/article/details/105557082

https://blog.csdn.net/qq_36339249/article/details/90664839

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值