理论教育 Modbus串口通信协议详解

Modbus串口通信协议详解

时间:2023-07-01 理论教育 版权反馈
【摘要】:Modbus协议是主从站间的通信协议,通信口使用RS-485或RS-232。使用RS-485口,一个主站最多可接32个从站。表6-35 Modbus功能码数据长度字段。校验字段 校验字段用于检查通信报文在通信线路中是否出错。这也是Modibus RTU模式的基本特点。但对M区的强制可通过程序更改。实施强制后的状态无法用程序改变,只能再用强制改变。

Modbus串口通信协议详解

Modbus协议是主从站间的通信协议,通信口使用RS-485或RS-232。使用RS-232口只能是一对一链接。使用RS-485口,一个主站最多可接32个从站。

1.通信方式

该协议定义的通信有两种方式:应答方式和广播方式。

应答方式是主站向某个从站(地址可以是1~247)发出命令,然后等待从站的应答;从站接到主站命令后执行命令,并将执行结果向主站应答,然后等待下一个命令。

广播方式是主站向所有从站发送命令(从站地址设为0),不需要等待从站应答;从站接到广播命令后,执行命令,也不向主站应答。

2.Modbus帧

帧分为命令帧(询问帧)和应答帧。命令帧格式如下:

978-7-111-39745-8-Chapter07-341.jpg

应答帧有显长度帧和隐长度帧之分。显长度帧格式如下:

978-7-111-39745-8-Chapter07-342.jpg

隐长度帧格式如下:

978-7-111-39745-8-Chapter07-343.jpg

帧中各字段含义如下:

(1)从站地址字段。从站地址字段表示接收主站报文的从站地址。用户必须设定每台从站的专用地址。只有被编址的设备才能对主机的命令(询问)作出应答。从站发送应答报文时,报文中地址的作用是向主站报告正在通信的是哪台从站。

(2)功能码字段。能码指出从站应执行何种功能。表6-35列出了功能码的意义和作用。

表6-35 Modbus功能码

978-7-111-39745-8-Chapter07-344.jpg

(3)数据长度字段。数据长度字段记录的是随后的数据字段的长度,按字符(字节)计算,计算其组成数据字符的总数。

(4)数据字段。数据字段内含有从站执行某项具体功能的信息,或者含有从站应答询问的信息。这些信息可以是数值、地址参数或范围,例如,从哪路开关量或寄存器开始,处理几个开关位或寄存器、开关量或寄存器的值等。

(5)校验字段 校验字段用于检查通信报文在通信线路中是否出错。RTU模式传送时,用CRC-16。其算法见后。

3.功能码说明

以下仅对最常用的8个功能作简要解释。要强调的是以下介绍的所有发送命令与回应数据全部都是十六进制数。这也是Modibus RTU模式的基本特点。

(1)读取输出开关量状态(功能码01)用以读取从站的输出开关量的状态。其命令帧格式为

978-7-111-39745-8-Chapter07-345.jpg

应答帧格式为

978-7-111-39745-8-Chapter07-346.jpg

这里的起始地址是指从哪一位(路)开关量开始读,数据线圈数是指读取几位(路)。应答帧的数据是按照上述要求读取的开关量数据(每路一位,每8位组成一个字节,最后一个字节的不足部分补0)。本功能不支持广播方式。

提示:对LM机输出开关量是指它的输出区(Q区)的各个位。它的各个位地址计算公式是:字节地址乘2+在字节中的位地址。如%QXm.n,它的地址将是m×8+n。如%QX0.4,它的地址将是04。

(2)读取输入开关量状态(功能码02)用以读取从站的输入开关量的状态。其命令格帧式为

978-7-111-39745-8-Chapter07-347.jpg

应答帧格式为

978-7-111-39745-8-Chapter07-348.jpg

这里的起始地址是指从哪一位(路)开关量开始读,数据线圈数是指读取几位(路)。应答帧的数据是按照上述要求读取的开关量数据(每路一位,每8位组成一个字节,最后一个字节的不足部分补0)。本功能不支持广播方式。

提示:对LM机输入开关量是指它的输入区(I区)的各个位。它的各个位地址计算公式是:字节地址乘2+在字节中的位地址。如%IXm.n,它的地址将是m×8+n。如%IX1.5,它的地址将是0D。

(3)读取输出模拟量状态(功能码03)用以读取从站的输入模拟量的状态。其命令帧格式为

978-7-111-39745-8-Chapter07-349.jpg

应答格式为

978-7-111-39745-8-Chapter07-350.jpg

这里的起始地址是指从哪一路(字)输出模拟量开始读,寄存器数是指读取几路(字)。应答帧的数据是按照上述要求读取的输出模拟量数据(每路模拟量2个字节,高位在前,低位在后)。本功能不支持广播方式。

提示:对LM机,输出模拟量的字地址是,实际通道地址除以2。如%QWm,它的地址将是m÷2。如%QW12,它的地址将是06。M区也可理解为输出模拟量。但是地址按上述计算后再加3000。

(4)读取输入模拟量状态(功能码04)用以读取从站的输入模拟量的状态。其命令帧格式为

978-7-111-39745-8-Chapter07-351.jpg

应答帧格式为

978-7-111-39745-8-Chapter07-352.jpg(www.daowen.com)

这里的起始地址是指从哪一路(字)输入模拟量开始读,寄存器数是指读取几路(字)。应答帧的数据是按照上述要求读取的输入模拟量数据(每路模拟量2个字节,高位在前,低位在后)。本功能不支持广播方式。

提示:对LM机,输入模拟量的字地址是,实际通道地址除以2。对%IWm而言,它的地址将是m÷2。如%IW4,它的地址将是02。M区也可理解为输入模拟量。但是地址按上述计算后再加3000。

制单路输出开关量(功能码05)用以强行设定从站的单路(位)输出开关量的状

(5)强

制单路输出开关量(功能码05)用以强行设定从站的单路(位)输出开关量的状态。其命令帧格式为

978-7-111-39745-8-Chapter07-353.jpg

应答帧格式为

978-7-111-39745-8-Chapter07-354.jpg

这里的地址含义与功能码01相同。数据是指用于设定该位的值。开关原状态是指该位未设定前的值。值指开或关:FF为开(ON),0为关(OFF),其他值为非法值。正常应答是将报文原文发回。从站地址为0时,为广播方式。

提示:地址计算同功能码1。实施强制后的状态无法用程序改变,只能再用强制改变。

(6)强制单路输出模拟量(功能码06)用以强行设定从站的单路(字)输出模拟量的值。其命令帧格式为

978-7-111-39745-8-Chapter07-355.jpg

应答帧的格式为

978-7-111-39745-8-Chapter07-356.jpg

这里的地址含义与功能码03相同。数据是指用于设定该字的值。正常应答是将报文原文发回。从站地址为0时,为广播方式。

提示:地址计算同功能码3。实施强制后的值也无法用程序改变,只能再用强制改变。M区也可以理解为输出模拟量。地址按照上述计算后再加3000。但对M区的强制可通过程序更改。

(7)强制多路输出开关量(功能码15)用以强行设定从站的多路(位)输出开关量的值。其命令帧格式为

978-7-111-39745-8-Chapter07-357.jpg

应答帧的格式为

978-7-111-39745-8-Chapter07-358.jpg

这里的地址含义与功能码01相同。寄存器数是指要设定多少字节。数据是指随后要设定的各字节的值(其中的位,如为1,则设为ON;0,则设为OFF)。最后一个字节的不足部分补0。正常应答内容是回送从站地址、功能码、起始地址和强制的开关量数。从站地址为0时,为广播模式。

提示:地址计算同功能码1。实施强制后的状态无法用程序改变,只能再用强制改变。

(8)强制多路模拟量输出(功能码16)用以强行设定从站的多路(字)输出模拟量的值。其命令帧格式为

978-7-111-39745-8-Chapter07-359.jpg

应答帧的格式为

978-7-111-39745-8-Chapter07-360.jpg

这里的地址含义与功能码03相同。寄存器数是指要设定字数。字节计数是指随后数据的字节数。数据是指要设定的模拟量输出值,每一路占两个字节(高字节在前,低字节在后)。正常应答内容是回送从站地址、功能码、起始地址和强制设定的模拟量字数。从站地址为0时,为广播模式。

提示:地址计算同功能码3。实施强制后的值也无法用程序改变,只能再用强制改变。M区也可以理解为输出模拟量。地址按上述计算后再加3000。但是对M区的强制可以通过程序更改。

5.循环冗余校验(CRC)码算法

为了确保通信可靠,Modibus协议通信需增加CRC-16校验。如作为从站,系统可以自动处理。若PLC为主站,则需要添加这个校验码。生成CRC-16校验码的算法是:

(1)启用一个16位寄存器,对其赋值为十六进制数FFFF。

(2)这16位寄存器的低位字节与报文的开始的字节进行“异或”运算。运算结果放入这个16位寄存器。

(3)把这个16位寄存器向右移1位。

(4)若向右(标记位)移出的数位是1,则用“CRC生成多项式”,即1010000000000001和这个寄存器进行异或运算。结果存入这个寄存器。若向右移出的数位是0,则返回(3)。

(5)重复(3)和(4),直到完成8个位的移位。

(6)报文中下一个字节与这16位寄存器进行“异或”运算。

(7)重复(3)~(6),直至该报文中所有字节均与这16位寄存器进行上述运算。

这个16位寄存器的内容即是CRC校验值。

以下为PLC的ST语言生成CRC-16码功能块的程序。但是在程序中直接调用此功能块也就可以了。

978-7-111-39745-8-Chapter07-361.jpg

978-7-111-39745-8-Chapter07-362.jpg

如果计算机为主站与从站PLC通信,计算机方也必须编写这个校验程序。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈