电子产业一站式赋能平台

PCB联盟网

搜索
查看: 13|回复: 0
收起左侧

Modbus应用层

[复制链接]
匿名  发表于 昨天 18:42 |阅读模式
概念:
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协议”获取协议规范文件。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


联系客服 关注微信 下载APP 返回顶部 返回列表