searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

ModBus协议

2024-05-07 02:18:33
8
0

一、ModBus介绍

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP

Modbus协议是一项**应用层**报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

  • Modbus RTU(Remote Terminal Unit 远程终端单元)这种方式常采用RS-485做为物理层,一般利用芯片的串口实现数据报文的收发,报文数据采用二进制数据进行通信。
  • Modbus ASCII :报文使用 ASCII 字符。ASCII 格式使用纵向冗余校验和。Modbus ASCII 报文由冒号 (":")开始 和换行符 (CR/LF) 结尾构成。
  • Modbus TCP/IP 或 Modbus TCP :这是一种 Modbus 变体版本,使用 TCP/IP 网络进行通信,通过 502 端口进行连接。报文不需要校验和计算,因为以太网底层已经实现了CRC32 数据完整性校验。
  • Modbus over TCP/IP 或 Modbus over TCP 或 Modbus RTU/IP :这也是一种 Modbus 变体,与 Modbus TCP 的不同之处在于,与 Modbus RTU 一样,校验和包含在报文中。
  • Modbus UDP:也有在UDP上传输Modbus报文的,不过需要做错误重传机制,这么干的应该不多。

**Modbus 使用“大端模式”(big-Endian) ,**当发送多个字节时,首先发送高字节,再发送低字节。

二、ModBus RTU协议

1.协议格式

暂时无法在飞书文档外展示此内容

  • 地址****表示通信设备的地址,取值范围是0-247,如果是0,就是主站广播报文;如果是1-247,则有可能是主站请求或者从站应答
  • 功能码**,也就是报文命令**,代表主站对从站的操作,例如读或者写
  • 数据字段根据实际应用场景来自定义数据格式,主请求报文,从应答报文会有所差异。也就是说假设抓取总线报文,如何区分是主站请求还是从站应答,则需要通过数据字段进行区分了。
  • CRC校验,采样CRC16,16位循环冗余校验

2.单播通信

报文中的地址字段指定所需要访问的设备,该设备收到请求后作出对应的应答。

3.广播通信

主站向总线所有设备发出广播报文,所有从设备都不做应答报文中地址为0则为广播请求

4.帧间隔

Modbus通信时规定主机发送完一组命令必须间隔3.5个字符的延时**,再发送下一组新命令**,这3.5个字符的延时主要用来告诉其他设备这次命令(数据)已经结束。

通常情况下在串行通信中,1个字符包括1位起始位、8位数据位、1位校验位(或者没有)、1位停止位(一般情况下)这样一般情况下1个字符就包括11位,那么3.5个字符就是3.5x11=38.5位。

而串行通信中波特率的含义时每秒传输的二进制位的个数。例如波特率为9600bps,则意思就是说每1s(也就是1000ms)传输9600个位的数据;反过来说传输9600个二进制位的数据需要1000ms,那么传输38.5个二进制位的数据需要的时间就是: 38.5 x (1000 / 9600) = 4.0104167ms

Modbus RTU要求相邻两帧数据的起始和结束之间至少大于等于3.5个字符的时间间隔**,那么波特率为9600bps的情况下,只要大于4.0104167ms即可。**

另外还规定了报文需要连续发送字节间隔不得超过1.5字节时间

0条评论
0 / 1000
songziyang
6文章数
0粉丝数
songziyang
6 文章 | 0 粉丝
原创

ModBus协议

2024-05-07 02:18:33
8
0

一、ModBus介绍

Modbus由MODICON公司于1979年开发,是一种工业现场总线协议标准.1996年施耐德公司推出基于以太网TCP/IP的Modbus协议:ModbusTCP

Modbus协议是一项**应用层**报文传输协议,包括ASCII、RTU、TCP三种报文类型。标准的Modbus协议物理层接口有RS232、RS422、RS485和以太网接口,采用master/slave方式通信。

  • Modbus RTU(Remote Terminal Unit 远程终端单元)这种方式常采用RS-485做为物理层,一般利用芯片的串口实现数据报文的收发,报文数据采用二进制数据进行通信。
  • Modbus ASCII :报文使用 ASCII 字符。ASCII 格式使用纵向冗余校验和。Modbus ASCII 报文由冒号 (":")开始 和换行符 (CR/LF) 结尾构成。
  • Modbus TCP/IP 或 Modbus TCP :这是一种 Modbus 变体版本,使用 TCP/IP 网络进行通信,通过 502 端口进行连接。报文不需要校验和计算,因为以太网底层已经实现了CRC32 数据完整性校验。
  • Modbus over TCP/IP 或 Modbus over TCP 或 Modbus RTU/IP :这也是一种 Modbus 变体,与 Modbus TCP 的不同之处在于,与 Modbus RTU 一样,校验和包含在报文中。
  • Modbus UDP:也有在UDP上传输Modbus报文的,不过需要做错误重传机制,这么干的应该不多。

**Modbus 使用“大端模式”(big-Endian) ,**当发送多个字节时,首先发送高字节,再发送低字节。

二、ModBus RTU协议

1.协议格式

暂时无法在飞书文档外展示此内容

  • 地址****表示通信设备的地址,取值范围是0-247,如果是0,就是主站广播报文;如果是1-247,则有可能是主站请求或者从站应答
  • 功能码**,也就是报文命令**,代表主站对从站的操作,例如读或者写
  • 数据字段根据实际应用场景来自定义数据格式,主请求报文,从应答报文会有所差异。也就是说假设抓取总线报文,如何区分是主站请求还是从站应答,则需要通过数据字段进行区分了。
  • CRC校验,采样CRC16,16位循环冗余校验

2.单播通信

报文中的地址字段指定所需要访问的设备,该设备收到请求后作出对应的应答。

3.广播通信

主站向总线所有设备发出广播报文,所有从设备都不做应答报文中地址为0则为广播请求

4.帧间隔

Modbus通信时规定主机发送完一组命令必须间隔3.5个字符的延时**,再发送下一组新命令**,这3.5个字符的延时主要用来告诉其他设备这次命令(数据)已经结束。

通常情况下在串行通信中,1个字符包括1位起始位、8位数据位、1位校验位(或者没有)、1位停止位(一般情况下)这样一般情况下1个字符就包括11位,那么3.5个字符就是3.5x11=38.5位。

而串行通信中波特率的含义时每秒传输的二进制位的个数。例如波特率为9600bps,则意思就是说每1s(也就是1000ms)传输9600个位的数据;反过来说传输9600个二进制位的数据需要1000ms,那么传输38.5个二进制位的数据需要的时间就是: 38.5 x (1000 / 9600) = 4.0104167ms

Modbus RTU要求相邻两帧数据的起始和结束之间至少大于等于3.5个字符的时间间隔**,那么波特率为9600bps的情况下,只要大于4.0104167ms即可。**

另外还规定了报文需要连续发送字节间隔不得超过1.5字节时间

文章来自个人专栏
AI多面手
6 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0