modbus规约学习

modbus协议
1.历史 【modbus规约学习】modbus是一种串行协议, 是Modicon于1979年, 为使用可编辑逻辑控制器(PLC)而发表的.事实上, 它已经成为工业领域通信协议标准. 并且现在是工业电子设备之间相当常用的连接方式.modbus比其他通信协议使用的更广发的主要原因有:
公共发表无版税要求,相对容易的工业网络部署, 对供应商来说, 修改移动原生的位或字节没有很多限制.
2.用途 modbus允许多个设备连接在同一个网络上进行通信, 举个例子, 一个有测温度和湿度的装置, 并且将结果发送给和计算机. 在数据采集与监视控制系统(scada)中, modbus通常用来连接监控计算机和remote terminal unit(RTU).
Modbus协议目前存在用于串口,以太网以及其他支持互联网协议的网络的版本.
大多数Modbus设备通信通过串口EIA-485物理层进行.
3.种类 对于串行连,存在两个变种。他们再数值表示不同和协议细节上略有不同。ModbusRTU是一种紧凑的, 采用二进制表示数据的方式。Modbus ASCII是一种人类可读的, 冗长的表示方式。 这两个变种都是使用串行通讯(serial communication)方式。RTU格式后续的命令/数据带有循环荣誉校验的校验和. 而ASCII格式采用总想冗余校验的校验和。被配置为RTU变种的节点不会和设置ASCII变种的节点通信, 反之亦然。
对于TCP、IP的连接, 存在多个Modbus/TCP变种。这种方式不需要校验和的计算。
对于所有的这三种通信协议在数据模型和功能调用上都是相同的, 只有封装方式不同。
4.架构 modbus协议是一个master/slave架构的协议。 有一个节点是master节点, 其他使用Modbus协议参与通信的节点都是slave节点。每个slave设备都有唯一的地址。在串行和MB+网络中, 只有被指定为主节点的节点可以启动一个命令(在以太网上, 任何一个设备都能发送一个Modbus命令, 但是通常只有一个主节点设备启动指令)。

5.指令 一个modbus指令包含了打算执行的设备的modbus地址。所有设备都会受到命令,但只有指定位置的设备会执行及回应指令(地址0例外,指定地址0的指令是广播指令, 所有受到指令的设备都会执行, 不过不回应指令)。所有的Modbus指令包含了检查吗, 以确定到达的指令有没有被损坏。基本的Modbus指令能指令一个RTU改变它的寄存器的某个值,控制或者读取一个I/O端口, 以及指挥设备会送一个或多个其寄存器中的数据。
有许多modems和网关支持modbus协议, 因为modbus协议很简单很容易复制。 它们当中一些为这个协议特别设计的。使用有线,无线,甚至短消息和GPRS的不同实现。 不过设计者需要客服一些包括高延时和时序的问题。
6.报文格式 modbusRTU报文格式
modbus规约学习
文章图片

modbusASCII报文格式
modbus规约学习
文章图片

modbusTCp报文
modbus规约学习
文章图片


实际上ModbusRTU与ASCII的内容是完全相同的, 不同的是ASCII方式用“:”标识帧的开始,用“CR(回车)LF(换行)”标识帧结束。采用LRC校验。把RTU帧中一个字节的内容换成了两个ASCII字符。比如在RTU方式下设备地址01只有一个字节,在ASCII方式下转化成字符串“01”(16进制的30和31,10进制的48,49)。用ascii码来表示数字。
modbus规约学习
文章图片


modbustcp中的设备标识, 功能码等于MOdbus RTU相同, 可以认为在modbus rtu报文前边加了一个头,去掉了CRC校验这个尾。
7.功能码 modbus定义了4种基本数据类型:可读可写数据,只读位,只读16位数据,可读写16位数据。 这些数据分别被称为线圈状态,输入状态, 输入寄存器,保持寄存器。
modbus规约学习
文章图片

modbus规约学习
文章图片

modbus规约学习
文章图片


功能码对应的数据类型
modbus规约学习
文章图片

modbus规约学习
文章图片

8报文实例 modbustcp报文举例
(1)读取点位
00 16 00 00 00 05 00 01 02 46 05
00 16 交互标识
00 00 协议标识
00 05 报文长度
00设备地址
01功能码
00 00 起始地址
00 0B 数量 11个遥信
(2)返回点位
00 16 00 00 00 05 00 01 02 46 05
00 16 交互标识
00 00 协议标识
00 05 报文长度
00设备地址
01功能码
02数据长度
4601000110最末尾是0号遥信的值,往高位是1, 2, 3到7的值
0500000101最末尾是8的值,然后是9, 10
01读取线圈状态
modbus规约学习
文章图片

02读取输入状态
modbus规约学习
文章图片

03读取保持寄存器
modbus规约学习
文章图片

04读取输入寄存器
modbus规约学习
文章图片

05遥控开
modbus规约学习
文章图片

06遥调
modbus规约学习
文章图片

15多遥控
modbus规约学习
文章图片

16多遥调
modbus规约学习
文章图片

    推荐阅读