Modbus通信协议

MODBUS通信协议提供了ASCII和RTU两种通信模式。

ASCII模式的主要优点是允许字符之间的时间间隔长达1S,也不会出现错误。

RTU模式的优点是在相同波特率下其传输的字符的密度高于ASCII模式,每个信息必须连续传输。

MODBUS ASCLL通信方式:

起始位:1位

数据位:7位 低位先送

校验位:1位(有奇偶校验),0位(无校验);

停止位:1位(有奇偶校验),2位(无校验)。

波特率:可选

 

数据位是确定的,校验位,停止位,其通信格式可能的三种 :

(1)7E1   (2)701   (3)7N2

ASCII模式数据传送约定

  起始码

  地址码

  功能码

  数据码

  校验码

  停止码

 4位

8位

8位

n*8位

8位

8位

“:”

01-0F

功能码

n个字符

LRC

CR

LF

 

 

 

 

信息编码:16进制字符0-9,A-F

CR:回车 LF:下一行

ASCII模式数据传送约定:控制器在MODBUS 网络上以ASCLL码方式通信,在数据格式中每4位即HEX数1位都转换成ASCLL码发送,也就是每个十六进制字符(0-9 、A-F)都转换成ASCLL码。该模式的主要优点在于字符发送的时间间隔可达1s,而不产生错误。

ASCII模式数据传送举例

  起始码

  地址码

  功能码

  数据码

  校验码

  停止码

01

03

21 02 00 02

D7

CR

LF

 

 

 

将所有的字符转化为ASCII码,再发送给对方

3A

30 31

30 33

.. .. .. .. ..

44 37

0D

0A

 

 

ASCII模式数据格式的校验码采用LRC算法所形成的校验码

LRC算法

参与校验数据:从地址码到数据区的所有数据

算法:相邻216进制符相加求和

校验码:取其和的低八位的补码(原码取反加1)为校验位

LRC算法举例

  起始码

  地址码

  功能码

  数据码

  校验码

  停止码

:

01

03

21 02 00 02

LRC

CR

LF

 

 

 

求和:H01+H03+H21+H02+H00+H02=H29

求:H29的补码:29=0010 1001(原码)=11010110(反码)=1101 0111(补码)=D7

LRC的校验码:HD7

 

MODBUS RTU通信方

RTU通信格式如下:

起始位:1位

数据位:8位,低位先送

校验位:1位(有奇偶校验),0位(无校验);

停止位:1位(有奇偶校验),2位(无校验)。

波特率:可选

同样,MODBUS的RTU方式通信格式只能是:8,E,1和8,0,1和8,N,2

 

RTU模式数据传送约定

起始码

地址码

功能码

数据码

校验码

停止码

3-5字符

停止时间

01-1F

功能码

n个字符

CRC校验

3-5字符

停止时间

 

 

 

信息编码:16进制字符0-9,A-F

RTU模式数据传送约定:RTU模式数据传送按数据格式中16进制字符进行连续发送。如果在发送帧信息期间,出现大于1.5个字符的静止时间时,则信息出现错误。该模式的主要优点是在相同波特率下其传输效率高于ASCII模式。可以发现,RTU方式数据格式没有帧头和帧尾,那设备如何区别这一帧和下一帧呢。规定信息帧的发送至少要以3-5个字符时间间隔开始,校验码被传送后,又要以3-5个字符的停顿才标志发送结束。

 

RTU模式数据格式的校验码采用CRC算法所形成的校验码

CRC算法

……过程复杂。校验结果是一个16位数,有高8位和低8位。如校验码为20 1A高位 低位),在传送的时候, CRC为1A20

RTU模式数据传送举例

起始码

地址码

功能码

数据码

校验码

停止码

3-5字符

停止时间

01

03

21 02 00 02

CRC

3-5字符

停止时间

 

 

 

传送时不需要将01 03…转换为ASCII码,直接传送01 03 21 02 00 02 1A 20

 

 

MODBUS的常用功能码名称和功能:

      功能码

         名称

           功能

    H 01

    读线圈状态

  取输出开关量状态

    H 02

    读输入状态

  取输入开关量状态

    H 03

    读保持存储器

  读一个或多个输出存储器值

    H 04

    读取存储器

  读一个或多个输入存储器值

    H 05

    强置单线圈

  强置一个输出开关量状态

    H 06

    写保持存储器

  把字写入一个输出存储器

    H 07

    回送诊断校验

  把诊断报告送从站

    H 0F

    强制多线圈

  强置一组连续输出开关量状态

    H 10

    预置多存储器

  写入一组连续保持存储器值

ASCII码对照表:来源于C在线工具(http://tool.oschina.net/commons?type=4

ASCII值控制字符ASCII值控制字符ASCII值控制字符ASCII值控制字符
0NUT32(space)64@96
1SOH33!65A97a
2STX34"66B98b
3ETX35#67C99c
4EOT36$68D100d
5ENQ37%69E101e
6ACK38&70F102f
7BEL39,71G103g
8BS40(72H104h
9HT41)73I105i
10LF42*74J106j
11VT43+75K107k
12FF44,76L108l
13CR45-77M109m
14SO46.78N110n
15SI47/79O111o
16DLE48080P112p
17DCI49181Q113q
18DC250282R114r
19DC351383S115s
20DC452484T116t
21NAK53585U117u
22SYN54686V118v
23TB55787W119w
24CAN56888X120x
25EM57989Y121y
26SUB58:90Z122z
27ESC59;91[123{
28FS60<92/124|
29GS61=93]125}
30RS62>94^126`
31US63?95_127DEL

特殊字符解释:来源于C在线工具(http://tool.oschina.net/commons?type=4

NUL空VT 垂直制表SYN 空转同步
STX 正文开始CR 回车CAN 作废
ETX 正文结束SO 移位输出EM 纸尽
EOY 传输结束SI 移位输入SUB 换置
ENQ 询问字符DLE 空格ESC 换码
ACK 承认DC1 设备控制1FS 文字分隔符
BEL 报警DC2 设备控制2GS 组分隔符
BS 退一格DC3 设备控制3RS 记录分隔符
HT 横向列表DC4 设备控制4US 单元分隔符
LF 换行NAK 否定DEL 删除
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值