Modbus 协议

2023-05-19
-
-

通讯格式

波特率: 一秒钟传送的位数,也就是通讯速率;通用都是9600,此外还有:比如波特率为9600,即,一秒种可以传送9600个位数,位的概念看下面的数据位介绍。
常用的波特率: 300、600、1200、2400、4800、9600、14400、19200、38400、57600、115200

校验方式: 奇校验、偶校验、无校验。一般用的都是无校验
目的是判断传输过程中是否有错误!它只是用于判断一个字符(比如八个位或是七个位组成一个字符)传输是否有错误。但是它并不能完全能够判断传输是否有错。比如偶校验,在检验送八个“11111111”时,如果到达接收方,由于干扰而变成了“10111101”,“1”的个数仍然是偶数,接收方就判断不出来传送的字符已经错误!

数据位: 传输一个字符由几个位组成,计算机的基本单位就是“位”,其值非“0”即“1”,又如传送A,定义通讯格式时,是定义的八位,其传送的数据可能就是:00001010;

停止位: 传输一个字符有几个停止位,用天判断某个字符是否传输结束,以便开始接收下一个字符。

通讯格式的作用是规范发送方与接收方的传输格式,如果双方通讯格式不一样,接收方就不可能正确判断发送方发来的东西是什么。

比如,接收方设置的波特率是10(一秒只接收十个位)位,而发送方的波特率是20(一秒发送二十个位),那么发送方一秒种发送的20个字符,接收方就不可能都收到,只能接收到10个,造成通讯出错。

校验方式:双方校验方式不一样,就没有一个统一的标准认定传输是否有错误。 数据位,接收方设定的七位,即它接收到七个位就认为是一个字符,而实际发送方设定的是八位,那么接收方认定的字符与发送方发送的字符就不一样了。 参与通讯的双方设定的通讯格式必须一样

Modbus 协议

  1. Modbus 主要为自动化设备提供通信
  2. Modbus 为 OSI 中的应用层报文传输协议,连接不同类型总线或网络的设备之间提供客户机/服务器通信
  3. Modbus 应用层协议和服务规范
    3.1 串行链路上的Modbus,取决于TIA/EIA 标准:232-F 和 485-A
    3.2 TCP/IP上的Modbus,取决于TIA/EIA 标准:232-F 和 485-A

图片来自网络

#Modbus 特点

  1. 标准、开放,用户可以免费、放心地使用Modbus协议,不需要交纳许可证费,也不会侵犯知识产权。目前,支持Modbus的厂家超过400家,支持Modbus的产品超过600种。
  2. Modbus可以支持多种电气接口,如RS-232、RS-485等,还可以在各种介质上传送,如双绞线、光纤、无线等。
  3. Modbus的帧格式简单、紧凑,通俗易懂。用户使用容易,厂商开发简单。

Modbus 4个存储区

Modbus总共分为0 1 3 4区 其中1区和4区是可读可写 ,1区和3区是只读
存储的数据类型可以分为:布尔量16位寄存器

  • 布尔量比如IO口的电平高低,灯的开关状态等,这里就是开关量,open/close
  • 16位寄存器比如传感器的温度数据,存储的密码等,这里就是模拟量
名称区号类型访问类型地址范围内容记忆点
输出线圈00单个比特位只读00001-09999I/O 系统提供这种类型数据1区只能读取的开关量
输入线圈01单个比特位读写10001-19999通过应用程序改变这种类型数据2区只能可读可写的开关量
输入寄存器03字节只读30001-39999I/O 系统提供这种类型数据3区只能读取的模拟量
保持寄存器04字节读写40001-49999通过应用程序改变这种类型数据4区只能可读可写的模拟量

Modbus 事务处理流程

图片来自网络

服务器处理了就会有请求会有两种结果
第一种正确的响应: 响应功能码 = 请求功能码
第二种异常的响应: 响应功能码 = 请求功能码 + 0x80

Modbus 协议类型

因为有很多的传输介质,所以传输模式分为:ASCIIRTU(远程终端控制系统)TCP 三种报文类型

串行端口存在多个版本的 Modbus 协议,常见下面四种:

  • Modbus-Rtu
  • Modbus-Ascii
  • Modbus-Tcp
  • ModbusPlus

Modbus RTU是一种紧凑的,十六进制表示数据的方式
Modbus ASCII是一种采用Ascii码表示数据,并且每个8Bit 字节都作为两个ASCII字符发送的表示方式。

RTU格式后续的命令/数据带有循环冗余校验的校验和,而ASCII格式采用纵向冗余校验的校验和。

Modbus 协议使用串口传输时可以选择RTUASCII 模式,并规定了消息、数据结构、命令和应答方式并需要对数据进行校验。
ASCII 模式采用LRC校验。
RTU模式采用16 位CRC校验。
通过以太网传输时使用TCP,这种模式不使用校验,因为TCP协议是一个面向连接的可靠协议。

常用的就是RTU模式ASCII模式 很少

Modbus-RTU协议

Modbus 协议定义了一个与基础通信层无关的简单协议数据单元(PDU),特定总线或网络上 的 Modbus 协议映射能够在应用数据单元(ADU)上引入一些附加域

图片来自网络

解析:

  • 地址域: 对应设备的地址信息;
  • 功能码: 指明服务器要执行的动作,有效的码字范围是十进制 1-255(128-255 为异常响应保留),当从客户机向服务器设备发送报文时,功能码域通知服务器执行哪种操作(功能码内容较多,建议查阅Modbus协议说明手册,上面介绍的很清晰)。常用的为01、02、03、04、06。
  • 数据: 传输的数据内容,在某种请求中,数据可以是不存在的(0 长度),在此情况下服务器不需要任何附加信息,功能码仅说明操作。
  • 差错校验: 验证收、发的数据是否正确。

图片来自网络

帧结构 = 从机地址 + 功能码 + 数据 + 校验

从站地址功能码数据CRC/LRC
1 byte1 byteN bytes2 bytes

Modbus 功能码

Modbus 协议同时规定了二十几种功能码,但是常用的只有8种,用于对存储区的读写,如下表所示:

功能码功能说明
01H读取输出线圈
02H读取输入线圈
03H读取保持寄存器
04H读取输入寄存器
05H写入单线圈
06H写入单寄存器
0FH写入多线圈
10H写入多寄存器

CRC校验

错误校验(CRC)域占用两个字节包含了一个16位的二进制值。
CRC值由传输设备计算出来,然后附加到数据帧上,接收设备在接收数据时重新计算CRC值,然后与接收到的CRC域中的值进行比较,如果这两个值不相等,就发生了错误。
比如主机发出01 06 00 01 00 17 98 04, 98 04 两个字节是校验位,那么从机接收到后要根据01 06 00 01 00 17 再计算CRC校验值,从机判断自己计算出来的CRC校验是否与接收的CRC校验(98 04主机计算的)相等,如果不相等那么说明数据传输有错误,这些数据就不能要。

Modbus 调试工具列表

分享的网盘密码都是four

modscan32(master) 与 modsim32(slave)

个人常用的一组工具,用的比较多的功能就是随机生成,可以生成一组范围内的模拟数据,可以模拟增量值与递减值。

Modscan32 就是 master,主要用来模拟主设备,可以发送指令到从机设备,从机响应后,就可以在界面上返回响应寄存器的数据。

Modsim32 就是slave,主要用来模拟从设备,可以通过Modscan32 发送指令到Modsim32,两者之间互相通信,如果 Modsim32改变寄存器状态的值,就是直接模拟终端的状态变化。

modscan32与modsim32下载地址:

点击下载open in new window

Modbus Poll(master) 与 Modbus Slave

同上一组工具,同样是主从设备的模拟

Modbus Poll :Modbus主机仿真器,用于测试和调试Modbus从设备。

Modbus Slave: Modbus从设备仿真器,可以仿真32个从设备/地址域。用于接收主设备的命令包,并回送数据包;可用于测试与调试Modbus主站设备,便于观察Modbus通信过程中的多种报文

Modbus Poll 下载地址:

点击下载open in new window

Modbus Slave 下载地址:

点击下载open in new window

scom 串口调试助手

下载地址:

点击下载

“您的支持是我持续分享的动力”

微信收款码
微信
支付宝收款码
支付宝

目录关闭