Modbus应用层
概念:ADU:应用数据单元
PDU:协议数据单元
格式:
RS485-ADU最大长度256个字节
地址1字节,每个子节点必须有唯一的地址 (1 到 247),这样才能区别于其它节点被独立的寻址。地址 0 是专门用于表示广播数据的。
校验2字节
大端模式,高字节在先
比如0X1234,先发送0x12,然后发送0x34
数据类型:
modbus有三种PDU
1,请求
2,响应
3,异常响应
功能码:
功能码分为三种
1,公共功能码
机构认证的,所有设备都遵守的
2,用户定义功能码
自己定义的
3,保留功能码
保留着,以后扩展公共功能码。
异常功能码=请求功能码+0x80(注意区分异常功能码和异常码两个名词)
·低编号(如 0x01 到 0x10):通常用于基础的、通用的功能码,例如读写线圈、寄存器等操作。
·高编号(如 0x40 及以上):这些编号被设计为更多的扩展功能,包括用户定义功能码。
分类
功能码
备注
bit访问
离散量输入
读
02
离散量=单个ON或者OFF的点
输入就是输入的意思,比如从机的按键
线圈
读
01
线圈=单个ON或者OFF的输出
比如从机控制继电器
写单个
05
写多个
15
16bit访问
输入寄存器
读
04
输入寄存器=1个16bit的数值
主从机只能读,比如从机采集的温度值
输出寄存器
读多个
03
输出寄存器=1个16bit的数值
主机可以写,比如控制电机速度值
写单个
06
写多个
16
读写多个
23
屏蔽写
22
该功能码用于通过利用 AND 屏蔽、OR 屏蔽以及寄存器内容的组合来修改特定保持寄存器的内容。使用这个功能设置或清除寄存器中的单个比特。
文件访问
读文件
20
写文件
21
封装接口
读设备识别码
43
疑问1:有了写多个线圈功能码15,为什么还要写单个线圈的功能码05?
答:简单写单个线圈是使用05,比15功能码简洁
主站可能需要频繁地单独控制线圈时使用05效率高
疑问2:有了读多个输出寄存器03和写多个输出寄存器16,为什么还要读写多个寄存器23?
答:23可以一次完成读和写,这在需要读和写的场合中效率更高
具体应用:
读线圈
读保持寄存器
再多的内容就不再举例了,详细内容公众号后台回复“modbus协议”获取协议规范文件。
页:
[1]