modbus初识
来源:互联网 发布:c语言之家 编辑:程序博客网 时间:2024/05/21 18:37
近期因为用到了modbus,看了两天公司代码,有点蒙,周六的时候闲了在网上又搜了下相关的说明。现在清晰明了了。在这里总结下:
1.modbus协议,是在物理层的rs485电气连接的基础上广泛用于工业仪表通信的协议。因为rs485电器上采用了两根差分线来进行传输,因此抗干扰以及对外辐射减小,因此,传输距离更远。
2.modbus通信采用的是主从模式,跟i2c类似,有主设备和从设备之分。modbus支持的设备 32,64,128,256个设备,但是数量的不同好像是跟采用的rs485芯片有关,因该是芯片的参数决定的。
3.modbus有两种传输方式:ASCII 以及 RTU,但是普遍采用的好像还是 RTU 模式,两种方式的数据包结构相同都为 <地址> <功能码> <数据> <校验>。modbus的最大 协议数据单元(Protocol Data Unit)继承于第一次的modbus实现,最大 应用数据单元(Application Data Unit)256bytes限制。因此ADU的大小为253bytes:
RS232 / RS485 ADU = 253 bytes + Server address (1 byte) + CRC (2 bytes) = 256 bytes.
TCP MODBUS ADU = 253 bytes + MBAP (7 bytes) = 260 bytes.
请求 PDU 格式为 {function_code, request_data}
function_code = [1 byte] MODBUS function code,
request_data = [n bytes] 独立于功能码可以包含多种信息 such as variable references, variable counts, data offsets, sub-function codes etc.
响应 PDU 格式为 {function_code, response_data}
function_code = [1 byte] MODBUS function code
response_data = [n bytes] 独立于功能码可以包含多种信息 such as variable references, variable counts, data offsets, sub-function codes etc.
异常响应 PDU 格式为 {exception-function_code, request_data}
exception-function_code = [1 byte] MODBUS 功能码 + 0x80
exception_code = [1 byte] 一个字节的modbus异常码 "MODBUS Exception Codes" (see section 7 )
功能码包含公共定义以及用户自定义,公共定义直接查看定义即可。相关的bit的定义如下:
4.数据的传输采用大端方式,如果数据大于1个字节的,数据的排列方式为先是 高字节,后是 低字节。比如 16bits寄存器,0x1234,先传送0x12,然后再是0x34.
5.从设备流程图。
步骤如下:等待呼入 -->收到呼入-->检查功能码-->检查数据地址-->检查数据值/范围-->执行该请求-->发送结果。中间过程如有异常会直接返回异常响应。
6,命令格式:
读取多线圈:
上述格式为 PDU 部分的内容,前面的地址以及最后的crc部分没有标出来。例子中举例的为,请求读取多个线圈(0x01),起始地址为0x0013,读取数量为0x0013个。
响应PDU内容为,读取多个线圈(0x01),数据字节数目0x03个,27-20地址为0xCD,35-28地址为0x6B,38-36地址为0x05。这里要注意传回来的数据的话0xCD高位对应着高位寄存器,也就是27-20的状态为 1100_1101.
其它命令的格式都是类似的样子。看官方的应用协议规范就行了。去官网直接下载就行,http://www.modbus.org/specs.php
7,其它的 TCP的还没了解。等了解了再来补一下,其他的再有认识了也会再补充整理下。
- modbus初识
- Modbus
- modbus
- Modbus
- modbus
- Modbus
- modbus
- Modbus
- modbus
- Modbus
- 初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(一)
- 初识Modbus TCP/IP-------------C#编写Modbus TCP客户端程序(二)
- Modbus测试工具 :Modbus Poll,Modbus Slave
- Modbus测试工具 :Modbus Poll,Modbus Slave
- modbus.c
- Modbus通信协议
- modbus源代码
- Modbus协议
- TopLink
- javascriptDOM事件
- Unity预加载设计
- 【Maven】Maven配置以及eclipse创建Maven父子项目
- 机器学习NG
- modbus初识
- java多线程:2、Timer实现
- 基于MFC/WIN32写的坦克游戏
- HTTP协议
- Java基础——变量
- lintcode 二叉树的最大节点
- 技能系统设计
- 微服务
- 在Sublime Text中,node在本地服务启动一次,第一次正常,第二次端口被占用。