在介绍modbus rtu数据帧格式之前,首先让我们先了解一下modbus的通讯模式。
modbus通讯模式
modbus协议是典型的主-从通讯结构,链路中只能有一台主设备,可以有多台从设备。主设备向从设备发送请求指令,从设备对该指令进行响应。从设备不能主动向主设备发送指令,并且从设备之间也不能进行通信。
modbus协议通过这些请求、响应指令,实现了主设备对从设备中数字量或模拟量数据的访问和控制。通常,主设备是人机界面、监控或数据采集系统,从设备是传感器、可编程自动化控制器、智能仪器仪表等。
modbus数据帧格式
知道了modbus是典型的主-从式通讯方式后,我们再来看modbus rtu数据帧格式。
modbus rtu数据帧由四部分组成,设备地址,功能码,数据和校验。
设备地址 功能码 数据 校验
1个字节 1个字节 0~252字节 2个字节
设备地址占1个字节,范围是0~255之间。0是广播地址,1~247是从站设备地址,248~255保留不用。
功能码占1个字节,由协议明确规定,表中列出了一些常用的功能码。譬如03功能码是读保持寄存器,16功能码是写多个寄存器。
功能码 名称 作用
02 读离散量输入 读取离散量输入的状态
05 写单个线圈 强置一个逻辑线圈的通断状态
03 读取保持寄存器 读取多个保持寄存器的当前值
04 读输入寄存器 读取输入寄存器的当前值
16 写多个寄存器 将数值写入一连串寄存器中
... _ _
数据部分0~252字节,其长度和内容由功能码决定。功能码不同,数据部分的定义不尽相同。
校验2个字节,由发送设备计算,将校验码之前的数据按照crc16算法进行计算,生成2个字节的数据,放置于发送信息的尾部。接受信息的设备再重新计算接收到的信息的crc码,比较计算得到的crc码是否与接收到的相符,如果不相符,则表明数据在传输过程中出错。通过数据校验增加了系统的安全与效率。
常用功能码数据帧格式
1) 功能码-0x04(读输入寄存器)
举例:读取2号站,30008~30009 2个输入寄存器的数值。
modbus rtu主站设备请求帧格式:
设备
地址
[1字节] 功能码
[1字节] 起始地址
[2字节] 寄存器数量
[2字节] 校验[2字节]
高8位 低8位 高8位 低8位 高8位 低8位
0x02 0x04 0x00 0x07 0x00 0x02 0xc0 0x39
2号站设备响应帧格式:
设备
地址
(1字节) 功能码
(1字节) 字节数
(1字节) 寄存器值
[寄存器数量*2字节] 校验[2字节]
寄存器1
[高8位] 寄存器1
[低8位] ... 寄存器n
[高8位] 寄存器n
[低8位] 高8位 低8位
0x02 0x04 0x04 0x08 0x20 0x1a 0x43 0x81 0xbf
_ _ _ 寄存器
30008数值 _ 寄存器
30009数值 _ _
2) 功能码-0x10(写多个寄存器)
举例:向2号站,40002~40003 2个保持寄存器分别写入0x000a,0x0102数值
modbus rtu主站设备请求帧格式[点击下图可放大查看]:
2号站设备响应帧格式:
设备
地址
[1字节] 功能码
[1字节] 起始地址
[2字节] 寄存器数量
[2字节] 校验[2字节]
高8位 低8位 高8位 低8位 高8位 低8位
0x02 0x10 0x00 0x01 0x00 0x02 0x10 0x3b
3) 功能码-0x02(读离散量输入)
举例:读取2号站,10197~10218 22个离散量的状态。
modbus rtu主站设备请求帧格式:
设备
地址
[1字节] 功能码
[1字节] 起始地址
[2字节] 离散输入数量
[2字节] 校验[2字节]
高8位 低8位 高8位 低8位 高8位 低8位
0x02 0x02 0x00 0xc4 0x00 0x16 0xb8 0x0a
2号站设备响应帧格式:
设备
地址
[1字节] 功能码
[1字节] 字节数
[1字节] 离散量输入状态 校验[2字节]
离散量
1-8 离散量
9-16 ... 离散量
n~n+7 高8位 低8位
0x02 0x02 0x03 0xac 0xdb _ 0x35 0x22 0xbb
数据传输模式
通过前面的介绍,可以看到modbus rtu协议数据帧是没有起始符和结束符,所以两个数据帧之间需要靠时间间隔来区分。协议中规定信息帧发送至少要有3.5个字符时间的停顿间隔。即在一个数据帧的最后一个字符传输完成之后,需要至少3.5个字符时间的停顿标定数据帧的结束,一个新的数据帧可在此停顿之后开始。如果一个新消息在小于3.5个字符时间内接着前个消息开始,接受的设备将认为它是前一数据帧的延续,这将导致crc校验出错。同时整个数据帧必须作为一连续的流传输。如果在帧完成之前有超过1.5字符时间的停顿时间,接受设备将刷新不完整的数据帧从而认为存在丢包现象。
那么一个字符是什么呢,他由1个bit起始位,8bit数据位,1个bit奇偶校验位,1个bit停止位组成,在发送时从起始位开始。
我们是专注于工业通信技术的hms,更多工业物联网洞察和技术知识可关注公众号:
hms工业网络,我们会深入浅出为您讲解modbus,profibus,opc ua, canopen等网络协议,业内专家都在看!
碰焊机的原理及种类
全球人工智能系统支出今年同比增加44.0% 达358亿美元
以太网供电技术
曝锐龙5 3500X将在10月底登陆韩国市场
为什么说CMOS迎来了机会
一文详解Modbus RTU数据帧格式
为什么焊接机器人会出现焊偏的现象
嵌入式工程师怎么写出效率高的C语言程序
我国新能源汽车未来发展趋势详解
NASA向公众征求小型有效载荷概念意见
芯片制造全流程:从晶圆加工到封装测试的深度解析
TFT液晶屏的优点
全民开发者时代到来,2月25日相约华为云开发者日深圳站!
紫光国微公布2022年半年度报告
最贵AR眼镜 - 微软HoloLens国行今年发售
雷蛇推出全新鼠标产品,支持雷蛇RGB灯效调节
话筒平衡差分放大电路
2018AWE黑科技看点聚焦柔性AMOLED屏幕
万能试验机拉伸试验设备的常见问题及解决方法
利用74ls192的倒计时计数器