微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于MODBUS总线高压软起动装置液晶显示界面的设计

基于MODBUS总线高压软起动装置液晶显示界面的设计

时间:08-05 来源:互联网 点击:

并进行XOR(异或)计算,即可得到2字节的CRC码,并把包含CRC校验码的信息帧作为一连续的流进行传输。接收方在收到该信息帧时按同样的方式进行计算,并将结果同收到的CRC码的双字节比较,如果一致就认为通信正确,否则认为通信有误,从站将发送CRC错误应答。 RTU模式一般采用CRC-16冗余校验方法,CRC-16的校验码为16位(2字节),其中低字节在前,高字节在后。实现CRC校验有两种方法:根据CRC校验的定义公式进行计算,或者在程序中建立CRC校验值表。在程序中使用前者更容易实现,这里需要使用CRC生成多项式X16+X15+X2+1。该多项式对应的码组系数为18005H(16进制),去除最高位,对应的16位余数为8005H,即为CRC-16常数。CRC-16校验过程如下:将CRC寄存器的每一位预置为1;把该寄存器值与8bit的信息帧数据进行异或,结果存于该寄存器;对CRC寄存器从高到低进行移位,在最高位(MSB)的位置补零,而最低位(LSB,移位后已经被移出CRC寄存器)如果为1,则把寄存器与CRC-16常数进行异或,否则如果LSB为零,则无需进行异或。重复上述的由高至低的移位8次,第一个8bit数据处理完毕,用此时寄存器的值与下一个8bit数据异或并进行如前一样的8次移位。所有的字符处理完成后CRC寄存器内的值即为最终的CRC值。CRC添加到消息中时,先加入低字节,然后高字节。RTU模式的传输格式是1个数据位,2个停止位,没有奇偶校验位。通信数据安全由控制参数CRC-16码保证。RTU接收设备依靠接收字符间经过的时间判断一帧的开始,如果经过3个半的字符时间后仍然没有新的字符或者没有完成帧,接收设备就会放弃该帧,并设下一个字符为新一帧的开始,应用程序中,MODBUS协议通信由通讯子模块实现,包含CRC-16计算与验证、信息帧的编制和分解。

3 MODBUS通讯应用

下面是基于单片机MSP430F149为主芯片的高压软起动装置液晶操控板,以此为例来说明MODBUS通讯的应用。MODBUS通讯主设备是DSP控制器,从设备是高压软起动装置液晶操控板。

3.1 液晶操控板MODBUS通讯测试码

/*****************************MODBUS通讯测试码*****************************

召唤发送:

00 06

00 00 00 0C 1E 88

电压、电流监测功能:

00 03

1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 8D

故障显示功能:

00 02

18 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 20 34

*****************************MODBUS通讯测试码*****************************/

2:对以上测试码分别进行说明:

(1):召唤发送,参数设置功能:即控制器(DSP)与液晶屏(430)之间的通讯,是双向的。

00 06

00 00 00 0C 1E 88

以上这段代码是DSP传给430的召唤代码,含义(代码从左到右)是:00:设备代码。本系统中从设备只有高压软起动装置液晶操控板一个设备,故设备代码设置为00。06:功能码,实现何种功能(本例中,06是双向召唤发送功能,实现参数设置;03功能码实现电压、电流监测功能;02功能码实现故障显示功能)。00 00:是起始地址的高八位、低八位。00 0C:是DSP要求430回传字节的个数(不包括设备代码、功能码、数据个数代码、和校验代码),00是个数的高八位、0C是个数的低八位,0C是十六进制(转换成十进制是12,12是从“起动时间、额定电流——备用 3”的个数),1E 88:是CRC校验码。当DSP给430传

00 06

00 00 00 0C 1E 88

代码时,430先将这8个字节保存到一个临时数组RX[]中,然后分别对这8个字节进行判断(1E 88是校验查表得出来的代码),如果检验正确,就会把要回传给DSP的字节放到can_s[]数组中发出去,发送到DSP。以下代码就是430接到

00 06

00 00 00 0C 1E 88

判断正确后,回传给DSP的代码。00 06:是设备代码、功能码。18:回传的字节个数(十六进制18就是十进制24)。B6 8F是回传的校验代码。中间的24个字节(00),每两个字节(00)分别对应“起动时间、额定电流——备用 3”,之所以全是00 ,是因为没有设置参数,在液晶屏上设置参数,相应的高低位也跟着变化。

00 06

18 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 B6 8F

(2):电压、电流监测功能:

00 03

1C 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 0D 8D

同理00 03 1C是设备地址、功能码、DSP传给430的数据个数(1C是十六进制,转为十进制是28,包括1C在内,不包括00 03 0D 8D)。当430接收到

00 03

1C 00 00 00 00 00 00 00 00 00 00 00 0

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top