可以参考: http://git.oschina.net/jrain-group/ 组织下的Java Modbus支持库
Modbus-系列文章
1、什么是Modbus
Modbus 是一个请求/应答协议,是由Modicon(现为施耐德电气公司的一个品牌)在1979年发明的,是全球第一个真正用于工业现场的总线协议。
2、Modbus的传输方式
Modbus的传送有3种模式。
2.1、Modbus ASCII
当控制器设为在Modbus网络上以ASCII(美国标准信息交换代码)模式通信,一个信息中的每8个比特作为1个ASCII字符传输,如数值63H用ASCII方式时,需发送两个字节,即ASCII“6"(0110110)和ASCII”3“(0110011),ASCII字符占用的位数有7位和8位,国际通用7位为多。这种方式的主要优点是字符发送的时间间隔可达到1秒而不产生错误。
2.2、Modbus RTU
当控制器设为在Modbus网络上以RTU模式通信,在消息中的每个8Bit字节按照原值传送,不做处理,如63H,RTU将直接发送01100011。这种方式的主要优点是:数据帧传送之间没有间隔,相同波特率下传输数据的密度要比ASCII高,传输速度更快。
2.3、Modbus TCP
Tcp ModBus相对串行链路ModBus,去掉了从机地址、校验码,因为底层的TCP协议确保了端到端的连接,Tcp协议的校验也可确保传输数据的准确性。
3、Modbus消息帧
3.1、Mobus 的消息帧
3.2、 Modbus ASCII 与 RTU 消息帧区别
3.3、 Modbus ASCII 消息帧
(1)在消息中的每个8Bit 字节都作为两个ASCII字符发送
(2)十六进制,ASCII字符0...9,A...F消息中。
(3)每个ASCII字符都是一个十六进制字符组成
开始位 | 设备地址 | 功能代码 | 数据 | LRC校验 | 结束位 |
---|---|---|---|---|---|
1个字符 (冒号) | 2个字符 | 2个字符 | n个字符 | 2个字符 | 2个字符(回车换行) |
注意(数字编码大端序,高字节在前)
3.4、 Modbus RTU消息帧
注意(数字编码大端序,高字节在前)
设备地址 | 功能代码 | 数据 | CRC校验 |
---|---|---|---|
1个字节 | 1个字节 | n个字节 | 2个字节 |
3.5、 Modbus RTU 与 Modbus TCP 区别
在modbus TCP中包含一个MBAP头,该头包含以下几个部分
区域 | 长度 | 描述 | 客户端 | 服务器 |
---|---|---|---|---|
传输标志 | 2个字节 | MODBUS 请求和响应传输过程中序列号 | 客户端生成 | 应答时复制该值 |
协议标志 | 2个字节 | Modbus协议默认为0 | 客户端生成 | 应答时复制该值 |
长度 | 2个字节 | 剩余部分的长度 | 客户端生成 | 应答时由服务器端生成 |
单元标志 | 1个字节 | 串行链路或其它总线上连接的远程从站识别码 | 客户端生成 | 应答时复制该值 |
注意(数字编码大端序,高字节在前)
下一节 Modbus-数据校验
Modbus-系列文章
如果读完觉得有收获的话,欢迎点赞、关注、加公众号【小工匠技术圈】
个人公众号,欢迎关注,查阅更多精彩历史!