搜档网
当前位置:搜档网 › modbus 功能码请求格式

modbus 功能码请求格式

举例:16号命令请求格式(从设备地址为1、Modbus功能码16、Modbus寄存器开始地址0、写寄存器个数10)
01 10 00 00 00 0A 14 12 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 43 21 84 93
字节0为从设备ID、字节1为功能码(十六进制)、字节2-3为Modbus寄存器开始地址、字节4-5为寄存器个数、字节6为发送字节个数、字节7-26为发送数据(20个字节)、字节27-28为RCR校验

举例:15号命令请求格式(从设备地址为1、Modbus功能码15、Modbus寄存器开始地址0、写位变量个数16,即2个字节)
01 0F 00 00 00 10 02 01 00 E3 B0
字节0为从设备ID、字节1为功能码(十六进制)、字节2-3为Modbus寄存器开始地址、字节4-5为Modbus寄存器个数、字节6为发送字节个数、字节7-8为发送数据(2个字节即16个位)、字节9-10为CRC校验


对于功能码6,保持寄存器读出AQW0的值
//VW0(0),vw2(1),vw4(2),vw6,vw8...,本身AQW不能直接读,需要通过程序传送数据VW100到AQW0(看梯形图)
6,写单个保持寄存器(VW100--第51个作为AQW0值,寻址为50,0x32),0106003200002805


写单个:01 05 00 01 FF 00(开) --功能5
01 05 00 01 00 00(关)
写多个:01 0F 00 00 00 08 01 00(Q0...)--功能15
01 0F 00 08 00 10 02 02 00

读单个:01 01 00 01 00 01 --功能1
01 01 00 01 00 01 AC 0A

读多个:01 01 00 00 00 09


m_Command->AddString("1,读单个/多个线圈(实际输出)状态(位),010*********AC0A");
m_Command->AddString("2,读单个/多个接触器(实际输入)状态(位),01020000001079C6");
m_Command->AddString("3,读保持寄存器(字,两个字节,16位),010300000001840A");
m_Command->AddString("4,读单个/多个输入寄存器(字,两个字节,16位),01040000000131CA");
m_Command->AddString("5,写单个线圈(实际输出,位),01050001FF00DDFA");
//VW0(0),vw2(1),vw4(2),vw6,vw8...,本身AQW不能直接读,需要通过程序传送数据VW100到AQW0(看梯形图)
m_Command->AddString("6,写单个保持寄存器(VW100--第51个作为AQW0值,寻址为50,0x32),0106003200002805");
m_Command->AddString("15,写多个线圈(实际输出),010F000000080100FE95");
m_Command->AddString("16,写多个保持寄存器,011000000001020000A650");

相关主题