功能码用于标明一个Modbus信息帧的用途,如功能码01为读取
线圈状态,02为读取输入状态等。当主设备向从设备发送信息时,功能码将告诉从设备需要执行哪些行为。例如,去读取输入的开关状态、读一组寄存器的数据内容等。当从设备响应时,使用功能码用于指示是正常响应(无误)还是有某种错误发生(称作异议回应)。正常应答时,主机发送的功能码等于从机应答的功能码。
简介
功能码用于标明一个Modbus信息帧的用途,如功能码01为读取
线圈状态,02为读取输入状态等。当主设备向从设备发送信息时,功能码将告诉从设备需要执行哪些行为。例如,去读取输入的开关状态、读一组寄存器的数据内容等。当从设备响应时,使用功能码用于指示是正常响应(无误)还是有某种错误发生(称作异议回应)。正常应答时,主机发送的功能码等于从机应答的功能码。
常用功能码
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命令的帧格式如下:
从机应答主机命令的帧格式如下:
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送: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命令的帧格式如下:
从机应答主机命令的帧格式如下:
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送: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主机发送和从机接收的信息帧格式相同:
写入值为FF00时为ON,写入值为0000时为OFF。
功能码15的作用是强置多个线圈。
RTU模式下,主机发送功能码15命令的帧格式如下:
从机应答主机命令的帧格式如下:
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送: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校验高字节。
06和16
功能码06的作用是预置单寄存器,也就是向一个保持寄存器写入数值。寄存器为16位,数值范围是0000~FFFF。
功能码06主机发送和从机接收的信息帧格式相同:
功能码16的作用是预置多寄存器。
RTU模式下,主机发送功能码16命令的帧格式如下:
从机应答主机命令的帧格式如下:
下面对主机发送命令信息和从机应答信息进行实例解析。
主机发送: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为已写入寄存器个数。
使用
此协议定义了一个控制器能认识使用的消息结构,而不管它们是经过何种
网络进行通信的。它描述了一控制器请求访问其它设备的过程,如果回应来自其它设备的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公
共格式。当在一Modbus网络上通信时,此协议决定了每个控制器须要知道它们的设备地址,识别按地址发来的消息,决定要产生何种行动。如果需要回应,控制器将生成反馈信息并用Modbus协议发出。在其它网络上,包含了Modbus协议的消息转换为在此网络上使用的帧或包结构。这种转换也扩展了根据具体的网络解决节地址、路由路径及错误检测的方法。
1、在Modbus网络上转输
标准的Modbus口是使用一RS-232C兼容串行接口,它定义了连接口的针脚、电缆、信号位、传输波特率、奇偶校验。
控制器能直接或经由Modem组网。控制器通信使用主—从技术,即仅一设备(主设备)能初始化传输(查询)。其它设备(从设备)根据主设备查询提供的数据作出相应反应。典型的主设备:主机和可编程仪表。典型的从设备:可编程控制器。主设备可单独和从设备通信,也能以广播方式和所有从设备通信。如果单独通信,从设备返回一消息作为回应,如果是以广播方式查询的,则不作任何回应。Modbus协议建立了主设备查询的格式:设备(或广播)地址、功能代码、所有要发送的数据、一错误检测域。从设备回应消息也由Modbus协议构成,包括确认要行动的域、任何要返回的数据、和一错误检测域。如果在消息接收过程中发生一错误,或从设备不能执行其命令,从设备将建立一错误消息并把它作为回应发送出去。
2、在其它类型网络上转输
在其它网络上,控制器使用对等技术通信,故任何控制都能初始和其它控制器的通信。这样在单独的通信过程中,控制器既可作为主设备也可作为从设备。提供的多个内部通道可允许同时发生的传输进程。在消息位,Modbus协议仍提供了主—从原则,尽管网络通信方法是“对等”。如果一控制器发送一消息,它只是作为主设备,并期望从从设备得到回应。同样,当控制器接收到一消息,它将建立一从设备回应格式并返回给发送的控制器。
3、查询—回应周期
(1)查询
查询消息中的功能代码告之被选中的从设备要执行何种功能。
数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持
寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。
(2)回应
如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:
象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。