Modbus协议在串行链路上的实现

简介: Modbus协议在串行链路上的实现

目录

1、串行链路通信简介


2、串行链路通信协议原理


3、串行链路通信帧描述


4、RTU、ASCII串行传输模式


4.1、RTU传输模式


4.2、ASCII传输模式


1、串行链路通信简介

Modbus协议标准定义了 OSI 模型第 7 层上的应用层报文传输协议,它在连接至不同类型总线或网络的设备之间提供客户机/服务器通信。它还将串行链路上的协议标准化,以便在一个主站和一个或多 个从站之间交换 Modbus 请求。 本博文的目的是表述串行链路上的 Modbus 协议,实现设备之间的互通。


Modbus 串行链路协议是一个主/从协议,该协议位于 OSI 模型的第二层,主/从协议系统:有一个向某个“子”节点发出显式命令并处理响应的节点(主节点)。典型的子节点在没有收到主节点的请求时并不主动发送数据,也不与其它子节点通信。Modbus 协议和 ISO/OSI 模型如下图所示:


在物理层,Modbus 串行链路系统可以使用不同的硬件物理接口(RS485、RS232)。最常用的是TIA/EIA-485 (RS485) 两线制接口。作为附加的选项,也可以实现 RS485 四线制接口。当只需要短距离的点到点通信时,TIA/EIA-232-E (RS232) 串行接口也可以使用。


image.png


2、串行链路通信协议原理

Modbus串行链路协议是一个主/从协议。 在同一时刻,只有一个主节点连接于总线,一个或多个子节点 (最大编号为 247 ) 连接于同一个串行总线。Modbus 通信总是由主节点发起,子节点在没 有收到来自主节点的请求时,从不会发送数据。子节点之间从不会互相通信。主节点在同一时刻只会发起一个 Modbus 事务处理。


主节点有两种模式对子节点发出 Modbus 请求,一种是单播模式,另一种是广播模式。


单播模式主节点以特定地址访问某个子节点,子节点接到并处理完请求后,子节点向主节点返回一个报文(一个 '应答')。 在这种模式, 一个 Modbus 事务处理包含 2 个报文: 一个来自主节点的请求, 一个来自子节点的应答。 每个子节点必须有唯一的地址 (1 到 247),这样才能区别于其它节点被独立的寻址。如下图所示:


广播模式主节点向所有的子节点发送请求,对于主节点广播的请求没有应答返回。,广播请求一般用于写命令,所有设备必须接受广播模式的写功能,地址 0 是专门用于表示广播数据的。如下图所示:


image.png


Modbus寻址空间有 256 个不同地址,地址 0 保留为广播地址, 所有的子节点必须识别广播地址。 Modbus主节点没有地址, 只有子节点必须有一个地址。 该地址必须在 Modbus 串行总线上唯一。地址规则如下所示:


image.png


3、串行链路通信帧描述

串行链路上的 Modbus结构必须符合通用Modbus帧协议要求,具体如下所示:


image.png


具体解析如下所示:


地址域:在 Modbus串行链路,地址域只含有子节点地址。合法的子节点地址为十进制 0 – 247。 每个子设备被赋予 1 – 247 范围中的地址。主节点通过将子节点的地址放到报文的地址域对子节点寻址。当子节点返回应答时, 它将自己的地 址放到应答报文的地址域以让主节点知道哪个子节点在回答;

功能码:功能码指明服务器要执行的动作。功能码后面可跟有表示含有请求和响应参数的数据域;

数据:收、发数据信息;

校验:错误检验域是对报文内容执行 "冗余校验" 的计算结果,通常用CRC或者LRC校验,根据不同的传输模式 (RTU or ASCII)使用两种不同的计算方法。

4、RTU、ASCII串行传输模式

Modbus串行链路传输数据有两种模式,RTU 模式和 ASCII模式,定义了报文域的位内容在线路上串行的传送,确定了信息如何打包为报文和解码,Modbus上所有设备的传输模式 (和串行口参数) 必须相同方可实现正常通信。


4.1、RTU传输模式

当设备使用 RTU (Remote Terminal Unit) 模式在 Modbus 串行链路通信, 报文中每个 8 位字节含有两个 4 位十六进制字符。这种模式的主要优点是较高的数据密度,在相同的波特率下比 ASCII 模式有更高的吞吐率,每个报文必须以连续的字符流传送。


RTU 模式每个字节 ( 11 位 ) 的格式如下所示:


编码系统: 8–位二进制
报文中每个8位字节含有两个 4 位十六进制字符(0–9, A–F)
Bits per Byte:  1 起始位
                8 数据位, 首先发送最低有效位
                1 位作为奇偶校验
                1 停止位

为了保证与其它产品的最大兼容性,默认RTU校验模式必须为偶校验,每个字符或字节均从左到右顺序发送,由发送设备将 Modbus 报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始接收 新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。 在 RTU 模式,报文帧由时长至少为 3.5 个字符时间的空闲间隔区分。在后续的部分,这个时间区间被称作 t3.5。RTC报文帧如下所示:


image.png


整个报文帧必须以连续的字符流发送,如果两个字符之间的空闲间隔大于 1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。


image.png


4.2、ASCII传输模式

当 Modbus 串行链路的设备被配置为使用 ASCII (American Standard Code for Information Interchange) 模式通信时, 报文中的每个 8 位子节以两个 ASCII 字符发送,当通信链路或者设备无法符合 RTU 模式的定时管理时使用该模式,只不过由于一个子节需要两个字符,此模式比 RTU 效率低。例 : 数值 0X5B 会被编码为两个字符 : 0x35 和 0x42 ( ASCII 编码 0x35 ="5", 0x42 ="B" )。


ASCII 模式每个字节 ( 10 位 ) 的格式如下所示:


编码系统: 十六进制,ASCII 字符 0-9, A-F
报文中每个 ASCII 字符含有 1 个十六进制字符
Bits per Byte:  1 起始位
                7 数据位, 首先发送最低有效位
                1 位作为奇偶校验
                1 停止位

为了保证与其它产品的最大兼容性,默认ASCII校验模式必须为偶校验,每个字符或字节均从左到右顺序发送,由发送设备将 Modbus 报文构造为带有已知起始和结束标记的帧。这使设备可以在报文的开始 接收新帧,并且知道何时报文结束。不完整的报文必须能够被检测到而错误标志必须作为结果被设置。报文帧的地址域含有两个字符,在 ASCII 模式, 报文用特殊的字符区分帧起始和帧结束。一个报文必须以一个‘冒号’ ( : ) (ASCII 十六进制 3A )起始,以 ‘回车-换行’ (CR LF) 对 (ASCII 十六进制 0D 和 0A) 结束。对于所有的域,允许传送的字符为十六进制 0–9, A–F (ASCII 编码)。 设备连续的监视总线 上的 ‘冒号’ 字符。 当收到这个字符后,每个设备解码后续的字符一直到帧结束。 报文中字符间的时间间隔可以达一秒。如果有更大的间隔,则接受设备认为发生了错误。ASCII 报文帧如下图所示:

image.png

相关文章
|
5月前
|
监控 API 数据处理
局域网监控软件中基于UDP协议的数据传输代码实现
本文介绍了在局域网监控系统中,使用UDP协议进行数据传输的实现。示例代码展示了如何用Python创建UDP套接字,接收并处理监控数据。处理后的数据可通过网站API自动提交到网站,例如利用requests库发送HTTP POST请求。这种方法便于实现监控数据的自动化提交和展示,提升效率与安全性。
185 7
|
5月前
|
网络协议 算法 安全
TCP/UDP 数据传输的链路解析
TCP/UDP 数据传输的链路解析
111 0
EMQ
|
传感器 监控 网络协议
使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
作为一款支持数十种工业协议转换的物联网边缘工业协议网关软件,Neuron也已经实现了基于Modbus RTU协议TCP传输的功能。本文将在Ubuntu 20.04.3、X86_64的环境下,介绍如何使用Neuron接入Modbus TCP及Modbus RTU协议设备。
EMQ
725 0
使用 Neuron 接入 Modbus TCP 及 Modbus RTU 协议设备
|
3月前
|
传感器 数据采集 网络协议
什么是网络通信中的 Modbus协议?
网络协议是网络通信中至关重要的一部分,它定义了网络中两个或多个设备之间通信的规则、过程和格式。这些规则确保了计算机网络设备能够使用一种通用语言来传输和接收数据,而不管它们的设计、硬件或基础设施如何。
49 1
|
4月前
|
网络协议 API 开发者
无线通信模块通过TCP/IP协议实现与PC端的数据传输
本文介绍了无线通信模块借助TCP/IP协议向PC端传输数据的过程,包括数据封装、发送和接收,并以WIFI模块为例,讨论了在QT平台下实现无线数据传输的方法。通过QTcpSocket类,开发者能轻松建立WIFI模块与PC间的连接。随着无线通信技术的进步,未来将有更多创新应用出现。
|
5月前
|
网络协议 算法
【MODBUS】Modbus的3种传输方式
【MODBUS】Modbus的3种传输方式
97 1
|
5月前
|
传感器 监控
【MODBUS】Modbus协议和PLC协议的区别和联系
【MODBUS】Modbus协议和PLC协议的区别和联系
180 0
|
存储 网络协议
Modbus通信协议学习笔记
Modbus通信协议学习笔记
126 0
|
12月前
|
网络协议 算法 Go
【协议分析】rpcx网络协议分析之kcp数据传输
【协议分析】rpcx网络协议分析之kcp数据传输
124 0