技术频道

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

1 引言

  现代工业自动控制系统朝智能化、网络化和开放式结构的方向发展。实现不同种自动化设备之间通信是系统集成的关键。现场控制设备具有通信功能,便于构成工厂底层控制网络。通信标准的公开、一致,使系统具备开放性,设备间具有互可操作性。功能块与结构的规范化使相同功能的设备间具有互换性。控制功能下放到现场,使控制系统结构具备高度的分散性。利用现场总线技术,将符合同一标准的各种智能设备统一起来,彻底实现整个监测系统的分散控制,将提高系统集成度和数据传输效率、延长有效控制距离,并有利于提高系统抗干扰性能和扩展系统功能。基于modbus协议的串口通信是较常用的方式之一。

2 modbus协议简介

  modbus协议具有侦错能力强、数据传输量大、实时性好等特点,因而成为目前自控领域使用非常广泛的通讯语言。本文通过一个应用实例介绍如何利用单片机编程实现在线通讯modbus消息的工作过程,在可视化语言环境下完成地址域、功能代码域、数据域的分配及crc校验。modbus协议是应用于电子控制器的一种通讯语言。利用这个协议,控制器相互之间(例如485、232c等),控制器通过网络(例如以太网)和其他设备之间进行通讯。它定义了一种控制器能认识使用的消息结构,而不管它们是通过何种网络实现;描述的是控制器请求访问其它设备的过程,如何回应来自其它设备的请求,以及怎样侦错并记录;制定了消息域格局和内容的公共格式。modbus通讯规约按照主从设备来规定,如:主站一次可向一个或所有从站发送通信请求(或指令),主设备通过消息帧的地址域来选通从设备。主站发送的消息帧的内容和顺序为:从站地址(设备地址)、功能码、数据域(数据起始地址、数据量、数据内容)、crc校验码;从站应答的信息内容和顺序与主站信息帧基本相同。modbus除了定义通信功能码之外,同时还定义了出错码,标志出错信息。主站接收到错误码后,根据错误的原因采取相应的措施。从站应答的数据内容依据功能码进行响应。例如功能代码03要求读取从站设备中保持寄存器的内容。

  2.1 modbus通讯传输模式

  modbus通讯实现有两种传输模式(ascii或rtu),abb公司的50系列plc产品采用的是rtu(远程终端单元)模式,在消息中的每个8bit字节包含两个4bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比ascii方式传送更多的数据。

  代码系统:

  8位二进制,十六进制数0.。.9,a.。.f。

  消息中的每个8位域都是一个两个十六进制字符组成每个字节的位。

  1个起始位。

  8个数据位,最小的有效位先发送。

  1个奇偶校验位,无校验则无。

  1个停止位(有校验时),2个bit(无校验时)。

  错误检测域,crc(循环冗长检测)。

  基于rs485的rtu模式modbus通讯格式为:

  它定义了在这些网络上连续传输的消息段的每一位,以及决定怎样将信息打包成消息域和如何解码。

  2.2 modbus通讯查询回应功能

  (1) 查询

  查询消息中的功能代码告之被选中的从设备要执行何种功能。数据段包含了从设备要执行功能的任何附加信息。例如功能代码03是要求从设备读保持寄存器并返回它们的内容。数据段必须包含要告之从设备的信息:从何寄存器开始读及要读的寄存器数量。错误检测域为从设备提供了一种验证消息内容是否正确的方法。

  (2) 回应

  如果从设备产生一正常的回应,在回应消息中的功能代码是在查询消息中的功能代码的回应。数据段包括了从设备收集的数据:象寄存器值或状态。如果有错误发生,功能代码将被修改以用于指出回应消息是错误的,同时数据段包含了描述此错误信息的代码。错误检测域允许主设备确认消息内容是否可用。

  2.3 modbus消息帧

  传输设备将modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个变量被选中,判知何时信息已完成。部分消息也能侦测到错误并且能设置为返回结果。使用rtu模式,消息发送至少要以3.5个字符时间的停顿间隔开始。传输的第一个域是变量地址。可以使用的传输字符是十六进制的0.。.9,a.。.f。网络设备不断侦测网络总线,包括停顿间隔时间内。当第一个域(地址域)接收到,每个设备都进行解码以判断是否发往自己的。在最后一个传输字符之后,一个至少3.5个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。

  整个消息帧必须作为一连续的流转输。如果在帧完成之前有超过1.5个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于3.5个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的crc域的值不可能是正确的。所以在通讯端口初始化时,timer1定时间隔设置为500ms。

  2.4 modbus的crc校验原理

  crc校验实现 modbus通信的rtu模式中,规定信息帧的最后两个字节用于传递crc(cyclic redundancycheck,循环冗余校验)码。发送方将信息帧中地址域、功能码、数据域的所有字节按规定的方式进行位移并进行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通讯测试码**********************

  3.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个字节进行判断(1e88是校验查表得出来的代码),如果检验正确,就会把要回传给dsp的字节放到can_s[]数组中发出去,发送到dsp。以下代码就是430接到

  00 06

  00 00 00 0c 1e 88

  判断正确后,回传给dsp的代码。00 06:是设备代码、功能码。18:回传的字节个数(十六进制18就是十进制24)。b68f是回传的校验代码。中间的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 030d 8d)。当430接收到

  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时,会将接收到的字节分别存到可用数组里,在利用可用数组进行显示。

  dsp下传:

  00(设备代码)03(功能码)1c(个数14*2) 00h(电压高位)00l(电压低位)

  。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  00h(备用12高位)00l(备用12低位)crch(高位)crcl(低位)


文章版权归西部工控xbgk所有,未经许可不得转载。