16  
查询码:00000079
Modbus地址区的0x、1x、3x、4x各代表什么?如何区分和应用?
作者: 张守坤 于 2024年06月25日 发布在分类 / PCS 下,并于 2024年06月25日 编辑

Modbus地址区的0x、1x、3x、4x各代表什么?如何区分和应用?
0x、1x、 3x、4x各是一片数据区,是Modbus协议规定的地址范围,各类地址是互相对应的,有些资料就以其第一个数字区分各类地址,即:
0x :离散量输出,可读/可写【对应PLC: DO】线圈类地址:00000~09999。使用功能码:01、05、15
1x :离散量输入16位,只读【对应PLC: DI】触点类地址:10000~19999。使用功能码:02
3x :输入寄存器16位,只读【对应PLC: AI】类地址:30000~39999。使用功能码:04
4x :保持寄存器,可读/可写【对应PLC: AO】类地址:40000~49999。使用功能码:03、06、16

功能码定义:
01(0x01 / 01H)读 - 线圈
02(0x02 / 02H)读 - 离散量输入
03(0x03 / 03H)读 - 保持寄存器
04(0x04 / 04H)读 - 输入寄存器
05(0x05 / 05H)写 - 单个线圈
06(0x06 / 06H)写 - 单个寄存器
15(0x0F / 0FH)写 - 多个线圈
16(0x10 / 10H)写 - 多个寄存器
同理,各类地址的数据区的Modbus功能码也是规定好的,不能乱用。如要操作0x地址数据区,就只能用规定的功能码01、05,而不能用其他功能码。所以,从各类地址的前缀就能知道它的数据区及功能码,反之亦然。
上述这些地址称为Modbus数据区地址,它是5位十进制地址。但在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。
在单片机中实现时,需要定义4个数据区对应上述各类地址(长度可以缩短,视单片机RAM大小)。处理Modbus事务时,根据数据祯中的功能吗,再对对应的数据区进行操作(置位、复位、读数或写入数据)。具体过程看Modbus事务流程图。

常用modbus功能码:01、02、03、04、05、06、15、16共8个
这8个功能码可以操作四块分区,其中两块boolean(布尔变量)寄存器,两块整数寄存器。

4个分区有只读区和读写区,并且命名为 : 0x、1x、3x、4x

0x:形象的叫做线圈(coil status),意味着可读可写(获取状态,设置状态),用功能码01,05,15操作这部分的寄存器
1x:离散输入(inputs status),很明显这是一块只读区。只能用功能码02 操作
3x:输入寄存器(input registers),也是一块只读区,只能用功能码04操作
4x:保持寄存器(holding registers),这是一块可读可写的数据区,用功能码03、06、16 操作这部分的寄存器

两块整数寄存器可以按位操作,使用一个字节表示8位,每一位1代表开,0代表关



 推荐知识

 历史版本

修改日期 修改人 备注
2024-06-25 14:29:56[当前版本] 张守坤 创建版本

知识分享平台 -V 4.9.5 -潍坊凯特智能