0x0001---数字量输出 功能码01/05 这是啥意思? 1x0001---数字量输入 功能码02 3x0001---读寄存器 功能码04 4x0001---写寄存器 功能码03/06 0x 1x 3x 4x 这是什么16进制还是10进制,与Modbus啥关系?
0x、1x、 3x、4x其实各是一片数据区,是Modbus协议规定的地址范围,即: 线圈(DO)地址:00000~09999 触点(DI)地址:10000~19999 输入寄存器(AI)地址:30000~39999 输出寄存器(AO)地址:40000~49999 由于上述各类地址是唯一对应的,因此有些资料就以其第一个数字区分各类地址,即:0x代表线圈(DO)类地址,1x代表触点(DI)类地址、 3x代表输入寄存器(AI)类地址、4x代表输出寄存器(AO)类地址。 同理,各类地址的数据区的Modbus功能码也是规定好的,不能乱用。如要操作0x地址数据区,就只能用规定的功能码01/05,而不能用其他的功能码。 所以,从各类地址的前缀就能知道它的数据区及功能码,反之亦然。 上述这些地址称为Modbus数据区地址,它是5位十进制地址。但在实际编程中,由于前缀的区分作用,所以只需说明后4位数,而且需转换为4位十六进制地址。 在单片机中实现时,需要定义4个数据区对应上述各类地址(长度可以缩短,视单片机RAM大小)。处理Modbus事务时,根据数据祯中的功能吗,再对对应的数据区进行操作(置位、复位、读数或写入数据)。具体过程看Modbus事务流程图。