当前位置:首页 > 嵌入式 > 嵌入式硬件
[导读]1 引言现代工业自动控制系统朝智能化、网络化和开放式结构的方向发展。实现不同种自动化设备之间通信是系统集成的关键。现场控制设备具有通信功能,便于构成工厂底层控制网

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 Redundancy Check,循环冗余校验)码。发送方将信息帧中地址域、功能码、数据域的所有字节按规定的方式进行位移并进行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计算与验证、信息帧的编制和分解。[!--empirenews.page--]

 


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 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(低位)

(3):故障显示功能:

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

同理00 02 18是设备地址、功能码、DSP传给430的数据个数(18是十六进制,转为十进制是24,包括18算内,不包括00 02 20 34)。当430接收到

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

时,会将接收到的字节分别存到可用数组里,在利用可用数组进行显示。

DSP下传:

00(设备代码)02(功能码)18(个数) 00(启动中)。。。。。。。。。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。00(三相不平衡)CRCH(高位)CRCL(低位)

高压软起动装置液晶操控板

高压软起动装置液晶操控板

结语

由于MODBUS串行通讯技术有着实现简便、系统集成费用低以及通讯距离远(RS485/422)等特点,所以,在各个行业的应用也都很广泛。 MODBUS通讯在现场给调试人员及编程人员也带来很大方便。因此,伴随着多种通讯方式可以融合并存的发展趋势,MODBUS串行通讯技术仍会保持广泛的应用前景。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: 驱动电源

在工业自动化蓬勃发展的当下,工业电机作为核心动力设备,其驱动电源的性能直接关系到整个系统的稳定性和可靠性。其中,反电动势抑制与过流保护是驱动电源设计中至关重要的两个环节,集成化方案的设计成为提升电机驱动性能的关键。

关键字: 工业电机 驱动电源

LED 驱动电源作为 LED 照明系统的 “心脏”,其稳定性直接决定了整个照明设备的使用寿命。然而,在实际应用中,LED 驱动电源易损坏的问题却十分常见,不仅增加了维护成本,还影响了用户体验。要解决这一问题,需从设计、生...

关键字: 驱动电源 照明系统 散热

根据LED驱动电源的公式,电感内电流波动大小和电感值成反比,输出纹波和输出电容值成反比。所以加大电感值和输出电容值可以减小纹波。

关键字: LED 设计 驱动电源

电动汽车(EV)作为新能源汽车的重要代表,正逐渐成为全球汽车产业的重要发展方向。电动汽车的核心技术之一是电机驱动控制系统,而绝缘栅双极型晶体管(IGBT)作为电机驱动系统中的关键元件,其性能直接影响到电动汽车的动力性能和...

关键字: 电动汽车 新能源 驱动电源

在现代城市建设中,街道及停车场照明作为基础设施的重要组成部分,其质量和效率直接关系到城市的公共安全、居民生活质量和能源利用效率。随着科技的进步,高亮度白光发光二极管(LED)因其独特的优势逐渐取代传统光源,成为大功率区域...

关键字: 发光二极管 驱动电源 LED

LED通用照明设计工程师会遇到许多挑战,如功率密度、功率因数校正(PFC)、空间受限和可靠性等。

关键字: LED 驱动电源 功率因数校正

在LED照明技术日益普及的今天,LED驱动电源的电磁干扰(EMI)问题成为了一个不可忽视的挑战。电磁干扰不仅会影响LED灯具的正常工作,还可能对周围电子设备造成不利影响,甚至引发系统故障。因此,采取有效的硬件措施来解决L...

关键字: LED照明技术 电磁干扰 驱动电源

开关电源具有效率高的特性,而且开关电源的变压器体积比串联稳压型电源的要小得多,电源电路比较整洁,整机重量也有所下降,所以,现在的LED驱动电源

关键字: LED 驱动电源 开关电源

LED驱动电源是把电源供应转换为特定的电压电流以驱动LED发光的电压转换器,通常情况下:LED驱动电源的输入包括高压工频交流(即市电)、低压直流、高压直流、低压高频交流(如电子变压器的输出)等。

关键字: LED 隧道灯 驱动电源
关闭