1 Modbus概述
Modbus是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的应用层总线协议。
为更好地普及和推动Modbus在基于以太网上的分布式应用,目前施耐德公司已将Modbus协议的所有权移交给IDA(Interface for Distributed AutomaTIon,分布式自动化接口)组织,并成立了Modbus-IDA组织,为Modbus今后的发展奠定了基础。
IDA是一种完全建立在以太网基础上的工业以太网规范。

-
Modbus的协议本身并没有TCP/IP协议栈。
-
Modbus 协议是应用于电子控制器上的一种通用语言。
-
在我国,Modbus已经成为国家标准GB/T19582-2008。
-
截止到2007年,Modbus的节点安装数量已经超过了1000万个。
2 Modbus协议
2.2 数据编码
MODBUS 使用一个‘big-Endian’ 表示地址和数据项。
也就是,发送多个字节时,使用大端。
2.3 数据模型
以下为4种基本的数据类型。

MODBUS功能码中使用的MODBUS逻辑参考数字是以0开始的无符号整数索引。
2.4 事务处理
服务器侧MODBUS事务处理的一般处理过程。

3 数据链路层
3.1主从协议
Modbus支持单主机多从机。标准modbus网络可以支持高达247个服务器地址。地址编号1-247。
Modbus 通信总是由主节点发起。子节点在没有收到来自主节点的请求时,从不会发送数据。
3.1.1 发送模式
- 单播模式: 主设备通过专门的地址访问从设备,从设备处理请求,然后向主设备发送应答。
- 广播模式:主设备通过地址 0 访问所有从设备,在这种模式下,从设备不对广播消息作出应答。所有设备必须接受广播模式的写功能。
3.2 Modbus地址规则
Modbus 寻址空间有 256 个不同地址。

3.3 Modbus帧描述
- PDU :与基础通信层无关的简单协议数据单元。
- ADU:在应用数据单元(ADU)——网络层协议。


3.4主从站状态图
3.4.1 主站状态

- 状态 “空闲” = 无等待的请求。 这是电源上电后的初始状态。
- 当单播请求发送到一个子节点,主节点将进入"等待应答" 状态。
- 同时一个临界超时定时启动。这个超时称为 “响应超时”。避免主节点永远处于"等待应答" 状态。
- 在单播方式,响应超时必须设置到足够的长度以使任何子节点都能处理完请求并返回响应。
- 响应超时但没有收到应答时,则产生一个错误。那么主节点进入”空闲” 状态, 并发出一个重试请求。
- 同时一个临界超时定时启动。这个超时称为 “响应超时”。避免主节点永远处于"等待应答" 状态。
- 当收到一个应答时,主节点在处理数据之前检验应答。
- 在收到来自非期望子节点的应答时, 响应超时继续计时;
- 当检测到帧错时,可以执行一个重试。
- 当广播请求发送到串行总线上,没有响应从子节点返回。然而主节点需要进行延迟以便使子节点在发送新的请求处理完当前请求。该延迟被称作 “转换延迟”。
- 广播转换延迟必须有足够的长度以使任何子节点都能只处理完请求而可以接收新的请求。
转换延迟应该比响应超时要短。典型的响应超时在 9600 bps 时从1秒到几秒,而转换延迟从100 ms 到 200ms。
3.4.2 从机状态机

- 状态 “空闲” = 没有等待的请求。 这是电源上电后的初始状态。
- 当收到一个请求时,子节点在处理请求中要求的动作前检验报文包。
- 当检测到错误时,必须向主节点发送应答。
- 当要求的动作完成后,单播报文要求必须格式化一个应答并发往主节点。
- 如果子节点在接收到的帧中检测到错误, 则没有响应返回到主节点。
- 任何子节点均应该定义并管理Modbus 诊断计数器以提供诊断信息。通过使用Modbus诊断功能码,可以得到这些计数值。
2.4.3 主从通信时序

3.5 两种串行传输模式
两种串行传输模式被定义: RTU 模式 和 ASCII 模式。
定义了报文域的位内容在线路上串行的传送。它确定了信息如何打包为报文和解码。
达到 Modbus 设备之间的互操作性只有每个设备都有相同的模式: 所有设备必须必须实现 RTU 模式。 ASCII 传输模式是选项。
3.5.1 Modbus RTU
RTU (Remote Terminal Unit) 。
以RS-485或RS-232作为其物理层实现,允许多个设备共享同一通信线路。Modbus RTU的数据传输采用二进制编码,每个数据帧包含地址码、功能码、数据和校验码,通过CRC校验确保数据的准确性。
3.5.1.1 字符传送格式

默认校验模式模式 必须为偶校验。
注 : 使用无校验要求2 个停止位。
3.5.1.2 字符传送顺序

3.5.1.3 帧结构

Modbus RTU 帧最大为256字节。
3.5.1.4 传输时间
发送设备将Modbus 报文构造为带有已知起始和结束标记的帧。
在 RTU 模式,报文帧由时长至少为3.5 个字符时间的空闲间隔区分。
- 这个时间区间被称作t3.5。

- 应答时间,典型值 < 10 ms,最大值大约是 700 ms,建议在发送完一个 Modbus 请求后暂停 1 秒钟再继续。
整个报文帧必须以连续的字符流发送。

- 如果两个字符之间的空闲间隔大于1.5 个字符时间,则报文帧被认为不完整应该被接收节点丢弃。
3.5.1.5 驱动
RTU 接收驱动程序的实现,由于 t1.5 和 t3.5 的定时,隐含着大量的对中断的管理。
- 在通信速率等于或低于 19200 Bps 时,这两个定时必须严格遵守;
- 对于波特率大于19200 Bps 的情形,应该使用2 个定时的固定值:建议的字符间超时时间(t1.5)为750µs,帧间的超时时间 (t1.5) 为 1.750ms。
3.5.1.6 状态机

- 从 “初始” 态到 “空闲” 态转换需要t3.5 定时超时
- 当没有活动的传输的时间间隔达 3.5 个字符长时,通信链路被认为在 “空闲” 态。
- 当链路空闲时, 在链路上检测到的任何传输的字符被识别为帧起始。 链路变为 “活动” 状态。
- 当链路上没有字符传输的时间间个达到t3.5 后,被识别为帧结束。
- 检测到帧结束后,完成CRC 计算和检验。
注意:为了减少接收处理时间,地址域可以在一接到就分析,而不需要等到整个帧结束。这样,CRC 计算只需要在帧寻址到该节点 (包括广播帧) 时进行。
3.5.1.7 CRC计算
循环冗余校验
CRC 域检验整个报文的内容。不管报文有无奇偶校验,均执行此检验。
CRC 包含由两个8位字节组成的一个16位值。
计算后,首先附加低字节,然后是高字节。
只有字符中的8个数据位参与生成CRC 的运算,起始位,停止位和校验位不参与 CRC 计算。
CRC 的计算, 开始对一个16位寄存器预装全1。 然后将报文中的连续的8位子节对其进行后续的计算。
CRC 的生成过程中, 每个 8–位字符与寄存器中的值异或。然后结果向最低有效位(LSB)方向移动(Shift) 1 位,而最高有效位(MSB)位置充零。 然后提取并检查 LSB:如果LSB 为1, 则寄存器中的值与一个固定的预置值异或;如果LSB 为 0, 则不进行异或操作。
这个过程将重复直到执行完8次移位。完成最后一次(第8次)移位及相关操作后,下一个8位字节与寄存器的当前值异或,然后又同上面描述过的一样重复8次。当所有报文中字节都运算之后得到的寄存器忠的最终值,就是CRC。
3.5.2 Modbus ASCII
(American Standard Code for Information Interchange)
在该模式下,报文中的每个8位字节以两个ASCII字符发送。
使用情景:
当通信电路或设备无法符合RTU模式的定时管理时,可以使用该模式。
缺点:
由于一个子节需要两个字符,此模式比RTU 效率低。
0X5B 会被编码为两个字符 : 0x35 和 0x42 ( ASCII 编码 0x35 =“5”, 0x42 =“B”)。
ASCII编码系统:
十六进制字符0-9,A-F。
每个ASCII字符含有一个十六进制字符。
字节比特位
1 起始位
7 数据位,最先发送最低有效位。
1 奇偶校验
1 停止位
默认校验模式必须为偶校验。
注 : 使用无校验要求2 个停止位。
传送序列
最低有效位 (LSB) . . . 最高有效位 (MSB)
无奇偶校验,将传送一个附加的停止位

** 纵向冗余校验**
(LRC - Longitudinal Redundancy Checking)
3.5.2.1 modbus 报文帧
在 ASCII 模式, 报文用特殊的字符区分帧起始和帧结束。
- 须以一个‘冒号’ ( : ) (ASCII 十六进制3A )起始,
- 以 ‘回车-换行’ (CR LF) 对 (ASCII 十六进制 0D 和 0A) 结束。
不完整的报文必须能够被检测到而错误标志必须作为结果被设置。
报文中字符间的时间间隔可以达一秒。如果有更大的间隔,则接受设备认为发生了错误。

每个字符子节需要用两个字符编码。
ASCII 数据域最大数据长度为 (2x252) 是 RTU 数据域 (252) 的两倍。 Modbus ASCII 帧的最大尺寸为513 个字符。
3.5.2.2 状态机

- “空闲” 态是没有发送和接收报文要处理的正常状态。
- 每次接收到 “:” 字符表示新的报文的开始。
- 如果在一个报文的接收过程中收到该字符,则当前地报文被认为不完整并被丢弃。
- 检测到帧结束后,完成LRC 计算和检验。
为了减少接收处理时间,地址域可以在一接到就分析,而不需要等到整个帧结束。
3.5.2.3 LRC校验
LRC 域检验不包括起始“冒号”和结尾 CRLF对的整个报文的内容。不管报文有无奇偶校验,均执行此检验。
LRC 域为一个字节,包含一个 8 位二进制值。
计算方式
对报文中的所有的连续8位字节相加,忽略任何进位,然后求出其二进制补码。
放的位置
在 ASCII 模式, LRC 的结果被ASCII 编码为两个字节并放置于ASCII 模式报文帧的结尾
3.6 差错检验方法
奇偶校验(偶或奇) 应该被每个字符采用。
(LRC or CRC) 必须运用于整个报文。
3.6.1 奇偶校验
用户可以配置设备使用偶 (要求的) 或奇校验,或无校验 (建议的)。
指定了偶还是奇校验,则数据部分的为1的位的总数被计数 。
而奇偶位会被设置为0或1以使为1的位的总数为偶数或奇数。
RTU 字符帧的数据为:
1100 0101 为1的位的总数为4。
如果使用偶校验,帧的奇偶位为0,使为1的位的总数仍然为偶数(4);
如果使用奇校验,帧的奇偶位为1,使为1的位的总数为奇数(5)。
3.6.2 帧检验
依赖于传输模式,两种检验方法被使用: RTU 或 ASCII。
4 物理层
4.1 电气接口
Modbus应该按照EIA/TIA-485(即已知的RS485标准)实现电气接口。
该标准允许“两线结构”的点对点和多点系统。
设备也可能能实现RS232接口。
MODBUS系统中,一个主站和一个或几个从站在一个无源串行链路路上通信。
连接结构可能如下:
或是双向连到主干电缆上,形成菊花链,
或是经分支电缆连到一个无源接头上,
或是经特种电缆连到一个有源接头上。

设备上可用螺钉端子,RJ45,或9芯D-型连接器与电缆相接。
在主干电缆的两端需要有线路终端以使阻抗匹配。
- 集成有通信收发器的设备通过无源接头和分支电缆连接到主干上
- 没有集成通信收发器的设备通过有源接头和分支电缆连接到主干上
- 设备以菊花链形式直接连接到主干电缆上
规定:
主干间的接口称为ITr(主干接口)
设备和无源接头间的接口称为 IDv (分支接口)
设备和有源接头间的接口称为 AUI (附加单元接口)
4.2 数字信号发送速率
要求9600bps 波特率。
推荐19200bps 波特率。
其它波特率可选择来实现:1200, 2400, 4800, … 38400bps, 56Kbps, 115Kbps,…
每种波特率,对发送方,要求其精度必须高于1%,而对接收方,必须允许2%误差。
4.3 电气与线制
4.3.1 2线制Modbus
在这个2线-总线上,在任何时候只有一个驱动器有权发送信号。
实际上,还有第三条导线把总线上所有设备相互连接:公共地。也就是传说中的屏蔽层。
电路定义:

在与设备和接头有关的文件(用户指南,连线指南,…)中,必须使用 D0,D1 和公共地的电路名字,以提高互操作能力。
对于线路终端(LT),即上拉和下拉电阻,请参考“多点系统要求”部分。
4.3.2 4线制Modbus
MODBUS设备同样允许实现2对总线(4线)单向数据传输。
实际上,公共地作为第五条导线必须把4-线总线上的所有设备相互连接。
和2线-MODBUS一样,在任何时刻只有一个驱动器有权力发送数据。
这种设备必须依照EIA/TIA-485 对每一对平衡线实现一个驱动器和一个收发器。

对于线路终端(LT),即上拉和下拉电阻,请参考“多点系统要求”部分。
在这种4线-MODBUS中,主、从站均有带相同5类所需电路的IDv接口。
4 线-电缆系统必须在ITr与主站的IDv之间,使两对总线交叉:

4线与2 线电缆的兼容性
为了将执行2线物理接口的设备接入一个已存在的4线系统,4线电缆系统可以按下述修改:
TXD0信号应与RXD0信号连接,使之成为D0信号。
TXD1信号应与TXD0信号连接,使之成为D1信号。
上拉,下拉电阻和线路终端电阻应重新安排以正确地适应D0,D1信号。

为了将执行4线物理接口的设备接入一个已存在的2线系统,该新接入设备的4线接口可以按下述安排:
TXD0信号应与RXD0信号连接,之后连接到主干的D0信号线上;
TXD1信号应与RXD0信号连接,之后连接到主干的D1信号线上。

4.3.3 RS232-MODBUS 定义
某些设备是应用RS232接口以实现DCE和DTE通信。

标有“X”的信号只在选择执行RS232-MODBUS 时才需要。
信号都要符合EIA/TIA-232标准。
每个TXD都与另一设备的RXD连接。
RTS可以与另一设备的CTS连接。
DTR可以与另一设备的DSR连接。
4.4 多点系统
对于任何EIA/TIA-485 多点系统,无论是2线配置还是4线配置,以下要求均适用。
4.4.1 最大设备数量
没有中继器的任何RS485-MODBUS 系统中,总是允许最多有32台设备。
4.4.2 拓扑结构
没有配置中继器的RS-485 MODBUS有一个主干电缆,所有的设备沿着它直接(菊花链)或通过短的分支电缆连接起来。
主干电缆,又称总线,它的两端必须连接在线路终端上。
4.4.3 长度
主干电缆端到端的长度必须有限制。
其长度由波特率,电缆(规格,电容或特征阻抗),菊花链上的负载数,以及网络配置(2线或4线制)所决定。
对于最高波特率为9600,AWG26(或更粗)规格的电缆,其最大长度为1000m。
- (4线制用作2线制的系统中) 最大长度必须除以2。
分支必须短,不能超过20m 。如果使用n分支的多口接头,每个分支最大长度必须限制为40m除以n。
4.4.4 接地形式
《公共地》电路(信号与可选电源公共地)必须直接连到保护地上,最好是整条总线只接在一点。
4.4.5 线路终端
沿线路传播的移动信号波遇到不连续的阻抗,造成在传输线路中的反射。
为了使在RS-485电缆终端的反射最小,需要在接近总线两端点处放置线路终端。
由于传播是双向的,故在线路两端都加置终端是非常重要的,但在一个无源D0-D1平衡对线上,加的LT 不能超过2个。
每个线路终端必须连接在平衡线D0和D1的两条导线之间。
在4线系统中,在总线的两端,每一对线都必须有终端。
RS232互联中,可以不用连接终端。
线路终端可以是150欧姆(0.5W)的电阻。
当对线极性偏置时,最好选择电容(1nF,最低10V)与120欧姆(0.25W)电阻串联。
线路极性偏置
当没有数据在RS-485平衡对线上传递时,该线路不被驱动,,因此易受外部噪声与干扰的影响。
为确保它的接收器处于一个稳定状态,在没有数据信号出现时,一些设备需要使网络偏置。
如果一个或多个设备需要线路极性偏置,则必须在该RS-485平衡对线上接一对电阻
- D1线上的上拉电阻至5V电压,
- D0线上的下拉电阻至公共地线。
这些电阻的值必须介于450 和 650 欧姆之间,650欧姆的电阻值可以允许在串行链路总线上有较多设备。
通常该点选在主站或其接头上。
有线路极性偏置串行链路上允许的最多设备数,比无极性偏置的MODBUS系统少4个。
4.5机械接口
螺钉端子可用在IDv与ITr 两种连接中。
若一台标准的MODBUS设备使用RJ45或9引脚D型连接器,对每种实际电路必须注意下述输出引脚。

若一个4线MODBUS设备使用RJ45或9引脚D型连接器,对每种实际电路必须注意下述输出引脚。

当在同一个接口上既有2线又有4线制的配置时,必须遵守4线配置要求。
如果一个RS232-MODBUS设备使用RJ45或9引脚D型连接器,对每种实际电路必须注意下述输出引脚。

4.6 电缆
MODBUS串行链路电缆必须屏蔽。在电缆两端,其屏蔽必须接到保护地上。
若在这个端部使用了连接器,该连接器外壳要连在电缆屏蔽上。
AS485-MODBUS 必须使用一对平衡对线(用于 D0-D1)和第三根导线(用于公共地)。
在 4 线-MODBUS系统中还必须使用第二对平衡对线(用于RXD0-RXD1。
为使电缆连接中错误最少,推荐在RS485-MODBUS电缆连线中采用色彩标记

注: 第5类电缆使用其它色彩。
对在RS485-系统中使用的平衡对线,建议特征阻抗高于100欧姆,特别是对19200和更高波特率。
5 Modbus TCP/IP
1.1 Modbus TCP/IP
该协议由施耐德公司推出,以一种非常简单的方式将Modbus帧嵌入到TCP帧中,使Modbus与以太网和TCP/IP结合,成为Modbus TCP/IP。
在以太网环境下的实现,它利用TCP/IP协议栈进行数据传输,支持复杂的网络拓扑和大规模的设备集成。
- Modbus TCP通过IP地址来识别和通信
TCP特征
- 使用标准的以太网通信
- 使用标准的以太网电缆(如Cat5e、Cat6等),通常使用8针的RJ45连接器。
- 除了终端设备外,Modbus TCP/IP网络可能还需要交换机、路由器等网络设备来扩展网络范围或进行网络管理。
- 每个设备在网络中都需要一个唯一的IP地址,这可以通过DHCP服务器自动分配,也可以手动设置。
5.2 协议描述
5.2.1 TCP/IP 上的 MODBUS 应用数据单元

在TCP/IP上使用一种专用报文头识别MODBUS应用数据单元。
- 这种报文头称为MBAP报文头(MODBUS协议报文头)。
与 RTU应用数据单元比较的差别:
- 单个字节单元标识符取代
- 用接收者可以验证完成报文的方式设计所有MODBUS请求和响应。
- 在TCP上携带MODBUS时,即使将报文分成多个信息包来传输,只要在MBAP报文头上携带附加长度信息,以便接收者能识别报文边界。
5.2.2 MBAP报文头描述

报文头为7个字节:
- 事务处理标识符:用于事务处理配对。在响应中,MODBUS服务器复制请求的事务处理标识符。 (累加的报文序列号)
- 允许同时发生多个未处理的请求。主设备可以发送请求123,从设备能以231的顺序响应,并且不影响主从设备数据交互。
- 协议标识符:用于系统内的多路复用。通过值0识别MODBUS协议。
- 长度:长度域是下一个域的字节数,包括单元标识符和数据域。该帧剩余长度。
- 单元标识符:为了系统内路由,使用这个域。从站地址。
- MODBUS客户机在请求中设置这个域,在响应中服务器必须利用相同的值返回这个域。
3125

被折叠的 条评论
为什么被折叠?



