基于ModbusRTU协议的数字智能模块的设计

20073605机电工程技术!""#年第$%卷第"&期

基于ModbusRTU协议的数字智能模块的设计

黄育和,程韬波

(广东省科学院自动化工程研制中心,广东广州510070)

收稿日期:2007—01—10

摘要:首先简要介绍了Modbus协议,并阐述了基于高性能单片机P89V51RD2的数字智能模块硬件结构和软件设计。最后,详细地描述了ModbusRTU协议从站的单片机程序实现。数字智能模块成功地应用于工业测控系统,其功能得到工程验证,说明设计合理。

关键词:单片机(MCU);ModbusRTU协议;循环冗余校验

中图分类号:TP23文献标识码:A文章编号:1009-9492(2007)05-0038-03

1引言

现代工业自动控制系统朝智能化、网络化和开放式结

构的方向发展,业界利用智能技术、总线技术、电子技术

开发出各类智能设备。同时,将符合同一标准的各种智能

设备连接到总线上,实现整个测控系统的分散控制。数字

智能设备在工业现场的广泛应用,使测控系统升级扩展更

方便、功能更齐全、可靠性更高,从而提高了系统的集成

度和通信效率。

笔者设计的数字智能模块是一种支持ModbusRTU协

议的现场装置,主要用于现场设备级的组态:多个同类模

块或者与其它支持ModbusRTU协议的设备一起灵活地组

成监控系统所需的底层设备。该数字智能模块主要由8路

温度采集、8路开关量输入、4路开关量输出、1路特殊功

能通信接口和液晶显示模块组成。2Modbus协议

(1)Modbus通信协议概述Modbus协议是美国Modicon公司开发的串行现场总线

通信协议,定义了一种独立于物理介质的消息帧结构。

Modbus作为工业控制领域流行的网络应用协议,在仪器仪

表和测控系统设计中得到了广泛应用。Modbus协议采用Master-Slave技术,是一种主/从应

答方式的通信协议。一个Master(主站)可以对应一个或

多个Slave(从站),Modbus协议若应用于点对点通信,物

理层采用RS-232/RS-422串行通信标准;若应用于点对

多点通信则采用RS-485串行通信标准。Modbus协议规定了两种传输方式:ASCII码或RTU(RemoteTerminalUnit)模式。ASCII码模式规定了在消息中的每个字节(8bits)作为两个ASCII码字符传送,数据校验方式采用LRC(逻辑冗余校验)。这种方式的优点是

字符发送的时间间隔可以达到1秒而不发生错误,缺点是通信速率较RTU模式慢。而RTU模式则规定在消息中的每个字节(8bits)包含两个4bits的16进制字符,数据校验采用CRC(循环冗余校验),这样可以最大限度地利用每个数据位的空间,提高通信效率。RTU模式的主要优点是:在波特率相同的条件下,可比ASCII码方式传送更多的数据[1]。(2)ModbusRTU消息帧在数字智能模块中,采用了RTU传输方式,其消息帧格式如表1所示。在RTU传输方式下,消息帧的地址域为1字节,可能的从站地址为0~247(十进制)。单个设备的地址范围是

1~247。协议规定:地址0用于广播功能,以使所有的从站都能识别。RTU消息帧的功能代码域为1字节,取值范围1~255(十进制)。每个功能码代表不同的指令,编程时须严格按照协议的要求设置。同时,Modbus协议预留了一些功能代

码供用户自由使用。使用过程中,只要主站和从站保证功

能代码的一致性,用户可以按照实际的需要增加必要的功

能代码。

当消息帧由主站发至从站时,功能代码域将告诉从站表1RTU通信消息帧START初始结构

延时(T1-T2-T3-T4):相当于4个

字节的传输时间ADD地址码1字节8位CS功能码1字节8位DATA数据区N字节N×8位CRC错误校验2字节(16位)(低字节在前)END结束结构延时(T1-T2-T3-T4)工业控制

20073605机电工程技术!""#年第$%卷第"&期图1数字智能模块硬件结构需要执行的操作。例如:读一组寄存器的内容、读从站的

状态等。当从站响应主站的消息时,它使用功能代码域来

指示通信是正常应答还是有某种错误发生。ModbusRTU通信过程中,必须把整个消息帧作为一

个连续的数据流传输。如果消息帧完成之前存在超过1.5

个字符时间的停顿时间,接收设备将刷新不完整的消息帧

并假定下一个字节是新消息帧的地址域。同样地,若一个

新消息帧在小于3.5个字符时间内接着前一个消息帧开始,

接收的设备将认为它是前一消息帧的连续,这将导致一个

错误,表现为CRC校验域的值不正确[1,2]。3数字智能模块的结构

(1)数字智能模块的硬件组成

根据设计开发任务书,数字智能模块必须包括如下几

个功能:①八路温度采集,用于检测现场环境温度,范围-10℃~+80℃,精度要求达到±0.5℃;②八路开关量输入,用于检测现场按钮、故障信号等的输入;③四路开关量输出,用于控制现场指示灯、报警蜂鸣

器等;④一路特殊功能低速率半双工串行通信接口,用于与

现场特定设备的通信连接,使该设备可以与监控系统的上

位机进行非实时数据交换;⑤现场数据显示,用于现场显示温度值、开关量输入/输出的状态和相关的工作参数。因此,数字智能模块以Philips公司的P89V51RD2单片机为核心,其硬件结构如图1所示。微控制器的看门

狗、复位电路选用X5045芯片,X5045包含512字节的E2PROM用于系统工作参数的存贮。设计中增加了按键输入电路,一方面用于设备现场操作,另一方面方便单片机软件调试。

P89V51RD2是一款基于80C51内核、低功耗微控制

器,包含64kB的程序存储器和1024字节的数据RAM,

可以工作于X2方式(每个机器周期包含6个时钟),支持并行和串行在系统编程(ISP)。P89V51RD2具有如下结构特性:增强型UART(异步串行收发器)、3个16位定时/计数器、工作频率达40MHz、可编程计数器阵列(PCA)、

8个中断源(4个中断优先级)[3]。这些功能特点为数字智能模块的设计提供了必需的资源。数字智能模块的温度传感器选用Dallas半导体公司生产的1-Wire数字温度芯片DS18B20。它属于新一代适配于微处理器的智能温度传感器,广泛用于工业、民用、军事等领域的温度测量及控制仪器、测控系统中。DS18B20测温范围-55℃~+125℃,温度在-10℃~+85℃范围时精度

达±0.5℃;芯片温度转换时间为750ms[4]。DS18B20传感器采用不锈钢外壳封装,壳体壁厚仅有0.2mm,具有蓄热量小的特点,并采用金属垫膜工艺使DS18B20与不锈钢内壁充分接触,同时使用导热性高的密封胶灌封,保证了温

度传感器的高灵敏性,极小的温度延迟,并达到防水防潮

的现场应用要求。关于DS18B20的应用和设计国内均有不

少文献资料报道,文献[5]~[8]详细阐述了DS18B20

的工作原理、接口时序以及相关的嵌入式软件编程等。

数字智能模块与上位机的串行通信物理层采用RS-485标准。RS-485与单片机硬件接口的设计与文献[9]基

本相同:采用高速光电耦合器6N137进行信号隔离,同时使用隔离型DC-DC转换器为RS485驱动芯片SN75176及相关电路供电。数字智能模块的现场数据显示选用广州铜

铧公司的字符型LCM(液晶)模块TC2002A-01。该LCM

模块每屏可以显示2行共40个字符,并带背光功能。

(2)数字智能模块的软件组成

数字智能模块的单片机软件使用汇编语言,在KeilμVision2集成环境下进行编译、调试。使用汇编语言主要

是考虑到DS18B20单总线通信对时序波形的要求比较苛

刻,同时,该汇编程序模块已经在以往项目中开发完成,

并在产品中得到验证。整个程序设计采用模块化设计思

想,数字智能模块的软件由七个基本模块组成,具体如图

2所示。在这些程序模块中,编程的关键在于8路

DS18B20端口的过程控制、ModbusRTU从站协议解析以

及各程序模块的调度与协调。

在MCU资源分配方面,定时器0用于产生与

DS18B20温度传感器通信所需的时序波形;定时器1用于

软件通用定时功能;定时器2作为Modbus串行通信波特

率发生器,并将单片机的通用串行收发器(UART)用于

数字智能模块和上位机的通信;而运用P89V51RD2的16

位PCA定时器和1个外部中断输入相结合,完成模块与特

定设备的半双工低速率串行通信功能。

在以往的文献中往往比较完整地介绍了Modbus协议

通信部分的底层硬件结构,并侧重于介绍Modbus协议上

位机软件实现。本文将就ModbusRTU协议(从站)在P89V51RD2程序设计进行较为详细的描述。4数字智能模块ModbusRTU协议的实现(

1)数字智能模块实现ModbusRTU协议的总体配置

工业控制

数字智能模块中Modbus通信以字节(数据帧)为单位,每个数据帧包括11位的串行比特流,具体格式为:1位起始位、8位数据位(低位在前)、可配置的奇偶校验位和停止位;当无奇偶校验位时停止位为2位,否则停止位为1位。智能模块的通讯地址、奇偶校验方式和通讯波特率均可通过串行通信或模块自身的人机接口进行配置。数字智能模块所使用到的Modbus功能码如表2所示。

关于ModbusRTU协议CRC校验字的生成方法文献[1]第112~115页给出了实现的算法和C语言例程,实现方式有二种:第一种方式是根据算法编写程序;第二种方式是依据文献[1]提供的CRC字节值表,使用查表法设计相应汇编语言程序模块。在数字智能模块单片机程序设计中,采用了后者,使用查表法以程序存贮空间换取程序执行时间,有利于提高程序执行速度。经软件仿真,在同样计算6字节数据长度CRC校验码的条件下,查表法汇编程序执行长度为262个指令周期;而算法程序则需要1032个指令周期。计算20字节数据长度的CRC校验码,查表法执行822个指令周期,而算法程序则需要3381个指令周期。可见使用查表法可以大缩短单片机的运行时间,提高程序执行效率。

P89VRD2定时器1完成通用定时功能,其定时时基单位由ModbusRTU通信最高波特率决定,数字智能模块设计允许最大传输速率为9600Baud,其对应1字节持续时间T1如公式(1)计算。因此,定时器1的定时长度为572.8μs(即T1/2)。同时使用软件方法实现4ms、20ms和1s的定时节拍,供其它非实时程序模块使用。

T1=11×1000000

9600

=1145.833(μs)(1)(2)单片机ModbusRTU协议的程序设计

数字智能模块作为Modbus协议的从站,其单片机程序模块包括:UART中断服务程序、Modbus接收消息帧处理、Modbus回送消息帧启动程序和通信超时处理程序,如图2所示。

单片机初始化后处于接收准备好状态,UART处于接收等待状态,一旦监测到RS-485总线上有数据在传送,则进入UART接收过程。Modbus协议通信超时处理程序完成如下功能:①UART接收过程中,如果字节间隔超过1.5T1则置当前接收RAM缓冲区数据满标志(即当前缓冲区接收到1帧ModbusRTU消息帧),并通知Modbus接收消息帧处理程序;②UART发送过程的启动,进入消息回送过程状态前,监测总线空闲时间达到4T1间隔才启动对主站的应答;③监测RS-485总线上的消息帧是否符合ModbusRTU关于相邻消息帧间隔时间的约定,并在LCM屏上显示监测结果,以方便测控系统的集成和调试。

UART中断处理程序包含两个部分。

①接收数据

完成总线上的数据接收功能,并对每字节数据进行奇偶校验判断,将有效数据填充到当前UART接收缓冲区。

②发送数据

把指定长度的UART发送缓冲区数据与相应的奇偶校验位赋给单片机的特殊功能寄存器,由硬件结构将相应的比特位串发送到总线上,同时保证字节间的间隔小于ModbusRTU协议允许的最大间隙时间(1.5字节时间长度),发送完毕将UART恢复至接收准备好状态。

Modbus接收消息帧处理程序主要完成Modbus协议解析与处理功能,具体负责将接收缓冲区内的Modbus消息帧进行地址比较、校验消息帧、解析Modbus数据包,并根据接收到的功能代码启动回送消息帧处理程序;具体流程如图3所示。Modbus协议解析与处理程序主要完成:①回送主站响应消息帧数据的准备,通知Modbus回送消息帧启动程序进入UART发送过程;②将主站的命令数据传递给其它功能模块,如将开关量输出值赋给相应的标记位,把主站要求传送给特定设备的数据以约定的方式发送到指定设备。5结语

以单片机为核心基于ModbusRTU协议的数字智能模块,与雅达电子有限公司的YD2010电量变送器等智能设备配置于同一RS-485总线上,并由OmronPLC作为通信的主站。在工程应用中,数字智能模块的功能和ModbusRTU协议的实现方法得到了验证,并取得良好的效果。

表2数字智能模块使用的Modbus功能码

功能码010203

04

0506

1516

名称

读线圈状态

读输入状态

读保持寄存器

读输入寄存器

强置单线圈

预置单寄存器

强置多线圈

预置多寄存器

数据类型

位(bit)

位(bit)

整型、字符型、

状态字、浮点型

整型、字符型、

浮点型

位(bit)

整型、字符型、

状态字、浮点型

位(bit)

整型、字符型、

状态、浮点型

作用

读开关量输出状态(ON/OFF)

读开关输入的状态(

ON/OFF)

在一个或多个保持寄存器中取

得当前的二进制值

在一个或多个输入寄存器中取

得当前的二进制值

强置一个逻辑线圈的通断状态

把具体二进制值装入一个保持

寄存器

强置多个连续逻辑线圈的通断

把具体的二进制值装入多个连

续的保持寄存器

图2数字智能模块的软件结构

(下转第58页)

尽管Modbus协议存在传输速度、有效距离、一条总线上只能有一个主站(Master)等局限性,但在当前测控系统空前繁荣的信息时代下,Modbus协议以其低成本、易于实现、用户范围广、可靠性高等优点在现场设备得到了广泛的应用,并成为目前国际智能化仪表普遍采用的主流通讯协议之一。本文所介绍的ModbusRTU协议单片机实现方法,无疑对于进行该类模块嵌入式系统开发的同行具有借鉴意义。

参考文献:

[1]ModiconInc.ModiconModbusProtocolReferenceGuidePI-

MBUS-300Rev.J[EB/OL].June1996.www.modbustools.

com/PI_MBUS_300.pdf.

[2]祁建安,吕震中.基于MODBUS协议的DSP从站串口通信模

块设计[J].测控技术,2004,23(09):38-40.

[3]PhilipsSemiconductors.P89V51RB2/RC2/RD28-bit80C51

5Vlowpower16/32/64kBFlashmicrocontrollerwith1kB

RAMRev.03-02December2004.[EB/OL].http://www.

nxp.com/acrobat/datasheets/P89V51RB2_RC2_RD2-03.pdf.

[4]DallasSemiconductor.DS18B20ProgrammableResolution1-

WireDigitalThermometer.[EB/OL].http://datasheets.max-

im-ic.com/en/ds/DS18B20.pdf.

[5]龚志勇,程远,勾勇华,等.采用DS18B20作温度补偿的超

声波液位计[J].测控技术,2004,23(11):6-7.

[6]王经卓.单总线温度监测网络的设计与实现[J].微计算机

信息,2006,(3-1):156-158.

[7]江太辉,邓展威.DS18B20数字式温度传感器的特性与应用

[J].电子技术,2003,30(12):46-49.

[8]沙占友.智能化集成温度传感器原理与应用[M].北京:机

械工业出版社,2002.

[9]梁伟,童少为,艾学忠.一种智能数据采集和控制模块的设

计[J].测控技术,2004,23(04):76-78.

第一作者简介:黄育和,男,1973年生,广东大埔人,硕士,

助理研究员。研究领域:机电一体化相关的电控产品设计与开

发、嵌入式系统设计。(编辑:梁玉)

图3ModbusRTU协议从站接收数据解析流程高频开关电源的参数为:Ts=0.1ms,ks=110/3。仿真框图如图6所示。假定系统处于速度调整中,并以偏置500r/min的幅度为10r/min正弦规律变化运行,图7为转矩调节,从仿真结果可以看出,在运行速度改变过程中,系统仍能在高精度的范围内稳定运行,满足国标规定的要求。5结论

通过在试验台的驱动和加载系统的准确建模的基础上,电动机的稳速驱动控制在PID和负载转矩前馈补偿构

成的复合控制策略的作用下,实现了系统在力矩波动的情

况下,仍能保持在精度要求的范围内;电涡流测功器在解

析描述控制规则及变量化引子和比例引子法构成的模糊控

制和常规PI控制组合成的控制策略下,当速度改变时,转

矩精度不变。

参考文献:

[1]陈伯时.电力拖动自动控制系统(第三版)

[M].北京:机械工业出版社,2006.

[2]魏荣年,杨光升.内燃机测试[M].北京:国防工业出版

社,1994.

[3]马文星.液力传动理论与设计[M].北京:化学工业出版

社,2004.

[4]王占林.近代电气液压伺服控制[D].北京:北京航空航天

大学,2005.

[5]诸静.模糊控制理论与系统原理[M].北京:机械工业出版

社,2005.

[6]张俊智,卢青春.发动机动态试验台混合模拟方法的仿真研

究[J].内燃机学报,2000,

(1):1-5.第一作者简介:高升,男,1978年生,山东泰安人,硕士研究生。研究领域:机电控制、结构设计。(编辑:向飞)图7

加载系统仿真结果(上接第40页)

相关文档
最新文档