首页 理论教育 MODBUS通信格式及CRC校验详解

MODBUS通信格式及CRC校验详解

时间:2023-06-15 理论教育 版权反馈
【摘要】:在整个网络通信过程中,主站轮流发送请求报文到每个从站,随之每个从站必须产生响应报文返回到主站。MODBUS通信格式MODBUS协议定义了两种传输模式,即RTU和ASCII。一般来说,数据量少而且主要是文本时采用ASCII,通信数据量大而且是二进制数值时,多采用RTU模式。CRC校验实现在MODBUS通信的RTU模式中,规定信息帧的最后两个字节用于传递CRC码。对应的命令寄存器为40001,对每一台变频器进行控制时,通过计算机给定起停信息。

MODBUS通信格式及CRC校验详解

因在S7-200系列PLC发送的指令中,发送缓冲器的第一个字节指定的是数据传输的字节数,从第二个字节以后的数据为需要发送的数据。在整个网络通信过程中,主站轮流发送请求报文到每个从站,随之每个从站必须产生响应报文返回到主站。当主站向从站发送请求报文和接收从站返回的响应报文时,在主站储存区开辟了发送缓冲区和接收缓冲区。主站向从站发送请求报文时,首先对相应从站输出缓冲区的数据进行CRC运算并生成校验码,将校验码叠加在输出缓冲区的数据之后再传送到发送缓冲区,然后再由发送指令发出。建立一个远程循环结束标志位,当响应报文全部接受完成,置该位为ON。主站在接收从站的响应报文时,先把响应报文输入到接收缓冲区,再把接收缓冲区中的数据传送到输入缓冲区。为此,在主站中要留有两个数据存储区,一个作为报文请求(输出缓冲区),另一个作为报文响应(输入缓冲区)。

在MODBUS通信协议中都必须要求有CRC校验,CRC校验为两个字节,附加在报文后的CRC值由发送设备计算,当CRC值放置于报文时,高低字节必须交换。首先发送低位字节,然后再发送高位字节。故在发送缓冲区中的数据要比输出缓冲区的数据多两个CRC校验字节。接收设备在接收报文时重新计算CRC的值,并将计算结果与实际接收到的CRC值相比较。如果两个值不相等,则传送的数据为错误

(1)MODBUS通信格式

MODBUS协议定义了两种传输模式,即RTU和ASCII。发送同样的数据时,RTU模式的效率大约为ASCII模式的两倍。一般来说,数据量少而且主要是文本时采用ASCII,通信数据量大而且是二进制数值时,多采用RTU模式。

主站一次可向一个或所有从站发送通信请求(或指令),主设备通过消息帧的地址域来选通从设备。主站发送消息帧的内容和顺序为从站地址、功能码、数据域(数据起始地址、数据量、数据内容)、CRC校验码;从站应答的信息内容和顺序与主站信息帧基本相同。MODBUS除了定义通信功能码之外,同时还定义了出错码,标志出错信息。主站接收到错误码后,根据错误的原因采取相应的措施。从站应答的数据内容依据功能码进行响应,例如功能代码03要求读取从站设备中保持寄存器的内容。

(2)CRC校验实现

在MODBUS通信的RTU模式中,规定信息帧的最后两个字节用于传递CRC码。发送方将信息帧中地址域、功能码、数据域的所有字节按规定的方式进行移位并进行XOR(异或)计算,即可得到2B的CRC码,并把包含CRC码的信息帧作为一个连续的流进行传输。接收方在收到该信息帧时按同样的方式进行计算,并将结果同收到的CRC码的双字节比较,如果一致就认为通信正确,否则认为通信有误,从站将发送CRC错误应答。

(3)ABB变频器参数的设置

ABB变频器的寄存器40001为控制字,寄存器40002为给定值1,寄存器40004为状态字,寄存器40005为实际值。其相关参数设置与说明如下:

9802=STD——MODBUS通信

9807=ABB Drives

5201=1(2,3)——变频器站号

5202=5——波特率为9600bit/s

5203=0——无校验(www.xing528.com)

5003=1.0——通信超时时间

100l=Comm 4.CW——外部命令1为通信控制

1003=REQUST——电动机正反转控制

1104=0.1——频率给定最小单位0.1Hz

1105=50——最大给定频率为50Hz

1601=Comm 4.CW(位3)——为通信允许运行

1604=Comm.CW(位7)——为故障通信复位

ABB变频器的菜单参数被一一映射为MODBUS协议的寄存器,MODBUS通信控制器对各寄存器进行操作,即实现了对ACS800中与寄存器对应的菜单参数的操作。对应的命令寄存器为40001,对每一台变频器进行控制时,通过计算机给定起停信息。同时,通过对存储寄存器40004读取,可获得变频器的运行状态等信息,然后通过计算机显示界面,操作人员可以直观地了解变频器运行信息。

ACS550变频器参数的设置步骤如下:

1)将变频器参数9802(Comm,PROTSEL)改为1(STD MODBUS)。

2)设置RS-485链路的站点地址,即参数5302(EFBSTATIONID);将多台变频器地址设置为对应站号。

3)根据主站系统的要求,设置波特率、数据长度和校验方式,即参数5303和参数5304(本系统的参数5303=9.6kbit/s,参数5304=2(8E1),8位,偶检验,一个停止位)。变频器其他参数组,如10组、11组、16组根据要求设置。如需现场总线通过外部1命令运行启动或停止,则设置参数1001=10;如需总线设置给定值1,参数1102=0,则选择外部1;1103=8,则给定值来自串行通信。

4)ABB变频器的传递参数0101~9999被映射为总线的寄存器40101~49999,寄存器40001~40099被映射到传动控制和实际值。例如,主机向通信给定值1(MODBUS寄存器40002)中写入设定的频率数值,范围为0~20000(换算到0~参数1105给定1最大),或-20000~0(换算到1105给定1最大~0)。即设定变频器参数1105=50Hz,若赋值寄存器40002=10000,则变频器频率为25Hz。同时,通过读取对应存储寄存器,可以得到变频器运行状态等信息,然后通过人机界面,操作人员可以直观地了解变频器运行信息。

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

我要反馈