文档介绍:MODBUS协议
Modbus是一个串行通信协议, 是Modicon于1979年, 为使用可编程逻辑控制器(PLC)而发表。实际上, 它已经成为工业领域通信协议标准, 而且现在是工业电子设备之间相当常见连接方法。Modbus比其她通信协议使用更广泛关键原因有:
公开发表而且无版税要求
相对轻易工业网络布署
对供给商来说, 修改移动原生位或字节没有很多限制
Modbus允很多个设备连接在同一个网络上进行通信, 举个例子, 一个由测量温度和湿度装置, 而且将结果发送给计算机。在数据采集与监视控制系统(SCADA)中, Modbus通常见来连接监控计算机和remote terminal unit (RTU)。
Modbus协议现在存在用于串口、 以太网以及其她支持互联网协议网络版本。
大多数Modbus设备通信经过串口EIA-485物理层进行[1]。
对于串行连接, 存在两个变种, 它们在数值数据表示不一样和协议细节上略有不一样。Modbus RTU是一个紧凑, 采取二进制表示数据方法, Modbus ASCII是一个人类可读, 冗长表示方法。这两个变种都使用串行通讯(serial communication)方法。RTU格式后续命令/数据带有循环冗余校验校验和, 而ASCII格式采取纵向冗余校验校验和。被配置为RTU变种节点不会和设置为ASCII变种节点通信, 反之亦然。
对于经过TCP/IP(比如以太网)连接, 存在多个Modbus/TCP变种, 这种方法不需要校验和计算。
对于全部这三种通信协议在数据模型和功效调用上都是相同, 只有封装方法是不一样。
Modbus 有一个扩展版本 Modbus Plus(Modbus+或者MB+), 不过此协定是Modicon专有, 和 Modbus不一样。它需要一个专门协处理器来处理类似HDLC高速令牌旋转。它使用1Mbit/s双绞线, 而且每个节点都有转换隔离装置, 是一个采取转换/边缘触发而不是电压/水平触发装置。连接Modbus Plus到计算机需要尤其接口, 通常是支持ISA(SA85),PCI或者PCMCIA总线板卡。
Modbus协议是一个 master/slave 架构协议。有一个节点是 master 节点, 其她使用Modbus协议参与通信节点是 slave 节点。每一个 slave 设备都有一个唯一地址。在串行和MB+网络中, 只有被指定为主节点节点能够开启一个命令(在以太网上, 任何一个设备都能发送一个Modbus命令, 不过通常也只有一个主节点设备开启指令)。
一个ModBus命令包含了计划实施设备Modbus地址。全部设备都会收到命令, 但只有指定位置设备会实施及回应指令(地址 0例外, 指定地址 0 指令是广播指令, 全部收到指令设备都会实施, 不过不回应指令)。全部Modbus命令包含了检验码, 以确定抵达命令没有被破坏。基础ModBus命令能指令一个RTU改变它寄存器某个值, 控制或者读取一个I/O端口, 以及指挥设备回送一个或者多个其寄存器中数据。
有很多modems和网关支持Modbus协议, 因为Modbus协议很简单而且轻易复制。它们当中部分为这个协议尤其设计。有使用有线、 无线通信甚至短消息和GPRS不一样实现。不过设计者需要克服部分包含高延迟和时序问题。
MODBUS通信过程以下图
MODBUS RTU 报文格式
起始位
设备地址
功效代码
数据
CRC校验
结束符
T1-T2-T3-T4
8Bit
8Bit
n个8Bit
16Bit
T1-T2-T3-T4
MODBUS ASCII 报文格式
起始位
设备地址
功效代码
数据
LRC校验
结束符
1个字符
2个字符
2个字符
n个字符
2个字符
2个字符
MODBUS TCP报文
交互标识
协议标识
报文长度
设备标识
功效代码
数据
2字节
通常为0
2字节
通常为0
2字节
高字节在前
1字节
也就是设备地址
1个字符
n个字符
实际上MODBUS RTU与ASCII内容是完全相同, 不一样ASCII方法用“: ”标识帧起始, 用“CR LF”标识帧结束。校验采取LRC, 把RTU帧中一个字节内容换成了2个ASCII字符。比如在RTU方法下设备地址 01 只有一个字节, 在ASCII方法下转换成字符串“01”(16进制30 31 )。
MODBUS TCP 中设备标识, 功效码等与MODBUS RTU相同, 能够认为是在MODBUS RTU报文前边加了一个头, 去掉了CRC校验这个尾。
MODBUS协议定义了4种基础数据