(原) 学习PLC常用协议 Modbus

原创文章,请后转载,并注明出处。

Modbus是PLC常用的通讯协议,经常用于与HMI通信。通过对此协议的分析,可以如同三菱MC协议一样,利用来与PC结合,发挥更大的作用。

若有精力,则从底层弄起,否则之前也看到有go的现成库可以使用。大致浏览了一下协议及相关文章,看起来不复杂。

先存储一下可能需要到的几个网址:

https://blog.csdn.net/liubing8609/article/details/78828686

C#ModBus Tcp 报文解析 https://blog.csdn.net/weixin_30699831/article/details/99182927

modbus TCP 示例报文 https://blog.csdn.net/qq_36132599/article/details/89055249

ModbusTCP协议学习笔记 https://blog.csdn.net/iknow_nothing/article/details/84292914

MODBUS TCP/IP协议规范详细介绍 https://blog.csdn.net/weixin_30568591/article/details/98575601

Modbus TCP指令格式说明 https://blog.csdn.net/m0_37549050/article/details/71794584

初识Modbus TCP/IP————-C#编写Modbus TCP客户端程序(一) https://blog.csdn.net/thebestleo/article/details/52269999


MODBUS功能码简述

代码 中文名称 寄存器PLC地址 位操作/字操作 操作数量
01 读线圈状态 00001-09999 位操作 单个或多个
02 读离散输入状态 10001-19999 位操作 单个或多个
03 读保持寄存器 40001-49999 字操作 单个或多个
04 读输入寄存器 30001-39999 字操作 单个或多个
05 写单个线圈 00001-09999 位操作 单个
06 写单个保持寄存器 40001-49999 字操作 单个
15 写多个线圈 00001-09999 位操作 多个
16 写多个保持寄存器 40001-49999 字操作 多个

Modbus TCP数据帧

Modbus TCP数据帧包含报文头、功能代码和数据3部分

MBAP报文头(MBAP、Modbus Application Protocol、Modbus应用协议)分4个域,共7个字节。

Modbus功能代码

共有3种类型分别为:

(1)公共功能代码(如表4所示):已定义好的功能码,保证其唯一性,由Modbus.org认可;

(2)用户自定义功能代码有两组,分别为65~72和100~110,无需认可,但不保证代码使用的唯一性。如变为公共代码,需交RFC认可;(3)保留的功能代码,由某些公司使用在某些传统设备的代码,不可作为公共用途。

Modbus应用举例

用Connect()命令建立目标设备TCP 502端口的连接数据通信的过程:

  1. 准备Modbus报文,包括7个字节的MBAP在内的请求;
  2. 使用send()命令发送;
  3. 在同一连接等待应答;
  4. 同recv()读报文,完成一次数据交换过程。
  5. 当通信任务结束时,关闭TCP连接,使服务器可以为其他服务。

相关文章