MODBUS-RTU功能码2
声明:文章摘自http://m.pcpop.com/article_4546662.html
常用功能码01和02
功能码01的作用是读取线圈状态。在数字量输出(Digital Output,DO)中,一个DO接点就能够控制一个线圈的通电和断电,所以读取线圈状态就是读取数字量输出点的状态,是1 bit的信息。例如,对于S7-200 PLC,Q0.0就是一个DO接点。对于单片机,若预置P0.0口用于DO,则P0.0就是一个DO接点,读取线圈状态就是读取P0.0端口的状态。
按Modbus协议,功能码01是读取输出点的状态,但在PLC、单片机方面可以对它有扩展性的解释。例如,在单片机程序设计时,可以把该功能码处理为读取一般意义的位,并不限于DO。
功能码02的作用是读取输入状态,也就是读取一个数字量输如(Digital Input,DI)接点的状态。例如,对于单片机,若预置P1.0口用于DI,则P1.0就是一个DI接点,读取输入状态就是读取P1.0端口的状态。同功能码01一样,功能码02在具体实现时,也可以扩展为读取一般意义的位,并不限于DI。
RTU模式下,主机发送功能码01、02命令的帧格式如下:
地址 | 功能码 | 读取线圈起始地址高字节 | 读取线圈起始地址低字节 | 读取线圈个数高字节 | 读取线圈个数低字节 | CRC校验 |
1字节 | 01或02 | 1字节 | 1字节 | 1字节 | 1字节 | 2字节 |
从机应答主机命令的帧格式如下:
地址 | 功能码 | 返回数据字节个数 | 返回数据字节1 | 返回数据字节2 | ...... | 返回数据字节n | CRC校验 |
1字节 | 01或02 | 1字节 | 1字节 | 1字节 | ....... | 1字节 | 2字节 |
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送:03 01 00 00 00 08 3C CC
命令解析:Modbus协议RTU模式的信息都以16进制数表示。03为从机地址:01为功能码01;00 00为线圈的起始地址;00 08为要读取的线圈数,共读取8个线圈;3C为CRC校验低字节,CC为CRC校验高字节。
从机应答:03 01 01 00 50 30
命令解析:03为从机地址;第一个01为功能码01;第二个01为返回数据字节个数;00为数据字节1,其最低位是起始地址线圈的状态;50为CRC校验低字节,30为CRC校验高字节。
03和04
功能码03的作用是读取保持寄存器的值。保持寄存器,就是其值不被外部输入信号改变的寄存器。例如,保存模拟量输出接点(Analog Output,AO)的数字量(即D/A转换的数字量)的寄存器,就是保持寄存器。功能码03也可以被扩展为读取控制器内部多种16位寄存器的值。
功能码04的作用是读取输入寄存器的值。输人寄存器,就是保存外部输入信号数字量的寄存器。例如,保存模拟量输入接点(Analog Iutput,AI)的数字量(即A/D转换的数字量)的寄存器,就是输入寄存器。功能码04也可以被扩展为读取控制器内部多种16位寄存器的值。
RTU模式下,主机发送功能码03、04命令的帧格式如下:
地址 | 功能码 | 读取线圈起始地址高字节 | 读取线圈起始地址低字节 | 读取线圈个数高字节 | 读取线圈个数低字节 | CRC校验 |
1字节 | 03或04 | 1字节 | 1字节 | 1字节 | 1字节 | 2字节 |
从机应答主机命令的帧格式如下:
地址 | 功能码 | 返回数据字节个数 | 返回第一个寄存器数据高字节 | 返回第一个寄存器数据低字节 | ...... | CRC校验 |
1字节 | 03或04 | 1字节 | 1字节 | 1字节 | ....... | 2字节 |
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送:01 03 00 00 00 08 44 0C
命令解析:01为从机地址;03为功能码03;00 00为寄存器的起始地址;00 08为要读取的寄存器数,共读取8个寄存器;44为CRC校验低字节,OC为CRC校验高字节。
从机应答:01 03 10 BD AB 15 A5 8C D4 3E B8 8B CF 86 E1 5E 8F 67 83 26 1B
命令解析:01为从机地址;03为功能码03;10为返回数据字节个数,共16个(16进制的10等于16);BD AB……67 83为读得的各寄存器的数值,其中BDAB为第一个寄存器的值:26为CRC校验低字节,1B为CRC校验高字节。
05和15
功能码05的作用是强置单线圈,也就是置某一DO接点为ON或OFF。例如,若预置单片机的P2.0为一个DO,则单片机在接收到主机强置该DO为ON的命令后。应执行使P2.0输出ON的程序代码。功能码05也可以扩展到强置控制器中其他有输出功能的位。
功能码05主机发送和从机接收的信息帧格式相同:
地址 | 功能码 | 写入线圈起始地址高字节 | 写入线圈起始地址低字节 | 写入值高字节 | 写入值低字节 | CRC校验 |
1字节 | 05 | 1字节 | 1字节 | 1字节 | 1字节 | 2字节 |
写入值为FF00时为ON,写入值为0000时为OFF。
功能码15的作用是强置多个线圈。
RTU模式下,主机发送功能码15命令的帧格式如下:
地址 | 功能码 | 写入线圈起始地址高字节 | 写入线圈起个数低字节 | 写入线圈个数高字节 | 写入线圈个数低字节 | 写入值字节数 | 写入值字节1 | ...... | CRC校验 |
1字节 | OF | 1字节 | 1字节 | 1字节 | 1字节 | 1字节 | 1字节 | ...... | 2字节 |
从机应答主机命令的帧格式如下:
地址 | 功能码 | 写入线圈起始地址高字节 | 写入线圈起始地址低字节 | 已写入线圈个数高字节 | 写入线圈个数低字节 | CRC校验 |
1字节 | OF | 1字节 | 1字节 | 1字节 | 1字节 | 2字节 |
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送:01 05 00 00 FF 00 8C 3A
从机应答:01 05 00 00 FF 00 8C 3A
命令解析:01为从机地址;05为功能码;00 00为写入线圈起始地址;FF00为写入值,即ON;8C为CRC校验低字节,3A为CRC校验高字节。
举例: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校验
06和16
功能码06的作用是预置单寄存器,也就是向一个保持寄存器写入数值。寄存器为16位,数值范围是0000~FFFF。
功能码06主机发送和从机接收的信息帧格式相同:
地址 | 功能码 | 写入寄存器地址高字节 | 写入寄存器地址低字节 | 写入值高字节 | 写入值低字节 | CRC校验 |
1字节 | 06 | 1字节 | 1字节 | 1字节 | 1字节 | 2字节 |
功能码16的作用是预置多寄存器。
RTU模式下,主机发送功能码16命令的帧格式如下:
地址 | 功能码 | 写入寄存器起始地址高字节 | 写入寄存器起始地址低字节 | 写入寄存器个数高字节 | 写入寄存器个数低字节 | 写入值字节数 | 写入值字节1 | ...... | CRC校验 |
1字节 | 10 | 1字节 | 1字节 | 1字节 | 1字节 | 1字节 | 1字节 | ...... | 2字节 |
从机应答主机命令的帧格式如下:
地址 | 功能码 | 写入寄存器起始地址高字节 | 写入寄存器起始地址低字节 | 已 写入寄存器个数高字节 | 已写入寄存器个数低字节 | CRC校验 |
1字节 | 10 | 1字节 | 1字节 | 1字节 | 1字节 | 2字节 |
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送:01 06 00 00 00 7D 49 EB
从机应答:01 06 00 00 00 7D 49 EB
命令解析:01为从机地址;06为功能码;00 00为写入寄存器起始地址;007D为写入值,即十进制125;49为CRC校验低字节,EB为CRC校验高字节。
主机发送:01 10 00 05 00 02 04 52 2B 44 9A E0 4B
从机应答:01 10 00 05 00 02 51 C9
命令解析:01为从机地址;10为功能码16;0005为写入寄存器起始地址:0002为写入寄存器个数;04为写入值字节数;522B、449A为写入值;E0为CRC校验低字节.4B为CRC校验高字节。从机应答中,0002为已写入寄存器个数。1
更多推荐
所有评论(0)