深入了解 modbus 协议
2023-09-18 23:18:30 20 举报
AI智能生成
《Modbus软件开发实战指南》 读书笔记
作者其他创作
大纲/内容
基本信息
是什么?
是一种应用于电子控制器上的通用语言
此协议定义了一个控制器能够认识使用的消息结构,描述了控制器请求访问其他设备的过程,以及符合应答来自其他设备的请求、怎样侦测错误并记录,制定了统一的消息域的结构和内容
行业地位?
已成为一种通用的工业标准
有什么用?
通过此协议,可以实现控制器相互之间、控制器经=由网络和其他设备之间的通信
使用它,不同厂商生产的控制设备可以连接工业网络,进行几种监控
使用Modbus在网络上进行通信,需要什么?
每个控制器需要知道:
设备的地址
识别按地址发来的消息决定要产生何种行为
如果需要回应,控制器将生成什么反馈信息发送
有什么特点?
标准开发,公开发表,无版税要求,可免费免责使用
支持多种电器接口,如RS232 RS485 TCP/IP 等;还可以在各种介质上传输,如双绞线 光纤 红外 无线等
消息帧格式简单 紧凑 通俗易懂;用户理解使用简单 厂商容易开发和集成
模拟软件
虚拟串口软件 Visual Serial Port Driver(VSPD)
模拟多串口,支持所有的设置和信号线;通过操作虚拟串口,写入到一个虚拟COM端口的数据可以从另外一个COM端口读取,通过这种方式实现两个串口程序之间交换数据
https://www.eltima.com/cn/products/vspdxp/
模拟 Modbus
Modbus 主站设备
Modbus Poll
Modbus 从站设备
Modbus Slave
参考
《Modbus软件开发实战指南》
《开放式IEC 61131 控制系统设计》
应用场景
在工业场景下使用
介质连接
使用 Modbus 协议,仅需要一根对绞线就可以连接很多现场设备,将所有数据传送到 Modbus 主站设备
网络方式连接
使用 Modbus 可以把现场设备连接到一个 DCS 过程控制系统,PLC(PLC 可编程逻辑控制器,Programmable Logic Controller)设备或工业计算机系统
整个工厂的连接都能够从对绞线控制室直连的方式转变成为 Modbus 的网络连接方式
网关设备支持
Modbus 协议简单且容易复制,与复杂的使用有线、无线通信甚至短消息等的GPRS(General Packet Radio Service)的设计不同,这些设备要简单的多,但是需要克服高延迟和时许等问题
数据传输
基本信息
通信模式
串行链路(Serial Communication)连接
两个变种(传输数据的字节表示上的不同)
RTU(Remote Terminal Unit)模式
一种紧凑的,采用二进制表示数据的方式
确保数据传输的完整性和准确性
循环冗余校验的校验和
ASCII(American Standard Code for Information Interchange,美国标准信息交换码)模式
一种人类可读的,冗长的表示方式
确保数据传输的完整性和准确性
纵向冗余校验的校验和
两种类型是互斥的,被配置为RTU模式的节点不能与配置为 ASCII 模型的节点通信,反之亦然
TCP/IP (例如以太网)物理层连接
存在多个 Modbus/TCP 变种
不需要校验和的计算
Modbus RTU 和 Modbus TCP
相同点
本质都是 Modbus 协议,都是依靠 Modbus 寄存器地址来交换数据
差异
使用硬件不同
Modbus RTU 一般采用串口 RS-232 或 RS-485
Modbus TCP 一般采用以太网口
数据
数据校验
Modbus 需要对数据进行校验,铲形协议中除了奇偶校验,ASCII模式采用LRC校验,RTU模式采用16位CRC校验
Modbus TCP 模式没有额外规定校验,因为TCP协议是一个面向可靠连接的协议,所以不需要CRC校验码
数据结构
TCP和RTU协议非常类似,只要在RTU协议的开始加上5个 "00"和 1个"06",然后把RTU协议的最后两个CRC校验码去掉,并通过TCP/IP网络发送出去即可
扩展版本
Modbus PLUS(Modebus+ 或 MB+)
MODICON 专有
通信结构
单主/多从(Master/Slave)
结构
一个节点是Master
一个或多个设备是 Slave
使用 Modbus 协议参与通信的节点是 Slave 节点,每个设备都有一个唯一的地址
特点
总线上只能有一个主设备,可以有1~247个从设备(地址范围从1~247),剩下值是保留位
Modbus 通信总是由主设备发起,当从设备没有收到来自该主设备的请求时,不会主动发送数据
从设备之间不能相互通信,主设备同时只能启动一个 Modbus 访问事务处理
通信模式区别
串行和MB+网络中
主节点才可以启动一个命令
以太网
任何一个设备都能发送一个 Modbus 命令,但通常也只有一个主节点设备用以引导指令
消息发送方式
主设备
单播模式
对指定单个从设备发送请求报文
广播模式
对线路上所有从设备发送请求报文,此模式下,Master请求指令必须是 Modbus 标准功能的写指令
从设备
被动接受请求报文给出响应报文
单播模式
应答,返回一个响应报文
广播模式
仅进行相关指令的事务处理,不要求返回应答
通信模式要求
Modbus ASCII
Modbus RTU
客户端/服务器(Client/Server)
通信模式要求
Modbus TCP
没有额外规定校验,因为 TCP 协议是一个面向可靠连接的协议
TCP 默认端口是 502
工作方式
请求/应答,每次通信都是主站先发送指令,可以是广播,也可以是向特定从站的单播
当主站不发送请求时,从站不会自己发出数据,从站与从站之间不能直接通信
帧结构
地址域
功能码
有效码字
十进制 1 ~ 255
异常响应保留
十进制 128~255
数据
差错校验
错误校验码
作用
确定到达的命令是否完整
注意
在 Modbus TCP 模式下,不存在差错校验字段
在某些特殊场合,如 串行 Modbus 协议转 Modbus TCP 的情况下,串行协议数据完整张载到 Modbus TCP 协议的数据字段,此时CRC或者是LRC差错校验字段仍然存在
Modbus RTU
地址码
1字节
功能码
1字节
起始地址
2字节
RTU协议采用3.5个字符的停顿时间作为指令的起始和结束
数据
n字节
组成
数据长度
2字节,表示寄存器的个数
数据正文
数据长度 * 2字节
校验码
2字节
Modbus TCP
在RTU协议前面添加了MBAP报文头,共7个字节
MBAP报文头
事务处理标识箱
2字节
协议标识符
2字节
长度
2字节
单元标识符
1字节
Modbus RTU 和 Modbus TCP 报文结构
Modbus RTU 和 Modbus TCP 数据帧结构
Modbus TCP 相比 RTU
取消了校验位
地址域换成了协议标识符
当网络中的设备全部使用 TCP/IP 协议时,此地址没有意义,因为IP就能完成路由寻址
若网络里还有串行通信的设备,则需要网关来实现 Modbus TCP 到 Modbus RTU 或 ASCII 之间的协议转换,此时就可以用标识符标识网关后见每个串行通信设备
新增长度,指后面数据的字节数
为了应对某些情况下,TCP/IP 协议会对应用层的数据拆包传输
发送指令
命令结构
目标设备的 Modbus 地址
指令
流程
响应指令
只有指定地址的设备会执行并回应指令
其他
地址0例外,指定地址0的指令是广播指令,所有收到指令的设备都会运行,不过不用回应指令
当Modbus协议用于更高级的网络时,改革宁波方式可能不被允许或以其他方式替代
寄存器
存放所有数据;非具体的物理寄存器,也可能是一块内存地址
分类
根据存放数据类型和读写特性,分为4个部分(可不连续)
线圈状态(Coil Status)
输出端口;可设定端口的输入状态,也可以读取该位的输出状态
可分为两种不同的执行状态,例如保持型或边沿触发型
离散输入状态(Input Status)
输入端口,通过外部设定改变输入状态
可读但不可写
保持寄存器(Holding Register)
输出参数或保持参数,控制器运行时被设定的某些参数
可读可写
输入寄存器(Input Register)
输入参数,控制器运行时从外部设备获得的参数
可读但不可写
与PLC类比
线圈状态 - DO 数字量输出
离散输入状态 - DI(数字量输入)
保持寄存器 - AO (模拟量输出)
输入寄存器 - AI (模拟量输入)
地址
地址分配
寄存器 Modbus 协议地址
通信时使用的寄存器寻址地址
0 条评论
下一页