文章目录
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校验确保数据的准确性。