基于嵌入式STM32的Modbus RTU协议实现

更新时间:2023-08-13 03:01:01 阅读量: 小学教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

2014年第11期仪表技术·33·

基于嵌入式STM32的ModbusRTU协议实现

磊,彭道刚,赵斌斌,黄丽

(上海电力学院自动化工程学院,上海200090)

Modbus协议以其高效性、摘要::随着工业现场总线技术的快速发展,可靠性,广泛应用于电力行业。为了提高电厂对数据采提出了将Modbus通信协议与32位STM32F103ZE微处理器相结合的设计方案,介绍了系统的总体设计方案集的可靠性和实时性,

和Modbus通信协议的内容。在嵌入式实时操作系统μC/OS-II上实现了基于ModbusRTU通信协议的主站和从站的通信,并详细讨论了Modbus通信协议中CRC校验码的生成。实验结果表明,该方案有效地实现了Modbus协议,可以广泛地应用于电厂和其他工业现场。

关键词:嵌入式系统;Modbus协议;数据采集;STM32处理器;μC/OS-II中图分类号:TP39

文献标志码:A

文章编号:1006-2394(2014)11-0033-04

ImplementationofModbusRTUCommunicationProtocolBasedonSTM32

SONGLei,PENGDao-gang,ZHAOBin-bin,HUANGLi

(SchoolofAutomationEngineering,ShanghaiUniversityofElectricPower,Shanghai200090,China)

Abstract:Withtherapiddevelopmentofindustrialfieldbustechnology,theModbusprotocoliswidelyusedine-lectricpowerindustrybecauseofitshighefficiencyandreliability.Inordertoimprovethereliabilityandreal-timeper-formanceofdataacquisitionofthepowerplant,thispaperputsforwardadesignofModbuscommunicationprotocolwitha32-bitSTM32F103ZEmicroprocessor.TheoveralldesignschemeofthesystemandthecontentofModbusCommunica-tionProtocolareintroduced.Thecommunicationbetweenmasterstationandslavestationisimplementedbasedonthe

ModbusRTUcommunicationprotocolintheembeddedreal-timeoperatingsystemμC/OS-II.ThegenerationofCyclicRedundancyCheckintheModbusCommunicationProtocolisdiscussed.TheexperimentalresultsshowthattheschemehasrealizedtheModbusprotocoleffectively,whichcanbewidelyusedinpowerplantsandotherindustrialfield.

Keywords:embeddedsystem;Modbusprotocol;dataacquisition;STM32processor;μC/OS-II

0引言

目前,各种工业现场总线被应用于电厂生产过程

1系统设计

嵌入式数据采集系统采用了STM32F103ZE微处

控制中,提高了电厂的数据采集系统的实时性和可靠性。Modbus协议以其简单高效、开放性、免费、可靠性、与时俱进等优点,在工厂自动化领域,被各厂家广泛使用,显示出其强大的生命力和活力。同时,为了实现工作站对各个数据采集模块实时监控和统一管理,因此需要将不同厂商生产的数据采集设备互联形成网络,实现对数据监控的网络化。为了提高数据的传输本文以ModbusRTU为通信协议,将实时操作系效率,

统μC/OS-II成功移植到STM32F103ZE微处理器上,在μC/OS-II环境下实现了ModbusRTU的主站和从站的通信。

TM

理器。STM32F103ZE系列是内嵌ARMCortexM3内核的32位MCU,支持μC/OS-II实时操作系统,内核

最高工作频率可达72MHz。它拥有的资源包括:64KBSRAM、512KBFLASH、2个基本定时器、4个通用2个高级定时器、2个DMA控制器(共12个定时器、

3个SPI、2个IIC、5个串口、3个12位ADC(超通道)、

1个12位DAC、1个SDIO接口、1个过16个通道)、

FSMC接口以及112个通用IO口,LQFP144封装。

数据采集系统硬件设计如图1所示。外围电路中的AD接口电路和嵌入式系统电路分别采用独立模块,利于系统的维护和升级。通过DA

收稿日期:2014-08

基金项目:上海市“科技创新行动计划”高新技术领域项目(14511101200);上海市部分地方院校能力建设专项项目(13160500700);上海市电站自动化技术重点实验室开放课题(13DZ2273800)

作者简介:宋磊(1990—),男,硕士研究生,研究方向为嵌入式与网络化测控技术。

·34·仪表技术2014年第11期

式的主要优点是在相同波特率下其传输的字符的密度

每个信息必须连续传输。它的消息高于ASCII模式,帧格式如表1所示。

表1

起始位T1-T2-T3-T4

RTU消息帧格式

数据n个8Bit

CRC校验16Bit

结束符T1-T2-T3-T4

设备地址功能代码8Bit

8Bit

地址域:本设计中用到的Modbus功能码如表2所

示,信息地址包括8位(RTU),有效的从机设备地址范围0~247(10进制),各从机设备的寻址范围为1~247。主机把从机地址放入信息帧的地址区,并向从机

图1

系统硬件设计

接口能实现将数字量的控制信号转换成模拟量输出,

达到控制设备的目的。采集的数据可以在LCD液晶便于现场参数的调试和修改,同时也可以将屏上显示,

485、测量的数据通过RS-以太网传输至监控中心工作

站。JTAG接口用于在线仿真和软件调试。22.1

Modbus协议Modbus协议概述

把自己的地址放入响应信息的地寻址。从机响应时,

让主机识别已作出响应的从机地址。址区,

功能码:当主机向从机发送信息时,功能代码向从机说明应执行的动作。如读一组离散式线圈或输入信读一组寄存器的数据,读从机的号的ON/OFF状态,

诊断状态,写线圈(或寄存器)等。部分功能代码代表的操作如表2所示。

表2

功能码010203040506

名称读线圈读离散量输入读保持寄存器读输入寄存器写单个线圈写单个寄存器

Modbus功能代码

功能

读线圈的当前状态读取离散量输入的当前状态读取保持寄存器的内容读输入寄存器的内容将线圈的输出写为ON或OFF将二进制数写到一个保持寄存器

1979年Modbus协议由Modicon公司(现在是施

具有划时代、里程碑式的耐德电气的一个品牌)发明,

意义,从此掀起了工业控制网络技术的序幕。Modbus

是全球第一个真正用于工业现场的总线协议,近年来在控制器和测量仪表上也得到了大量地使用,目前已成为我国工业自动化领域的一种国际标准。Modbus

232、RS-422、RS-485通信接口和协议支持传统的RS-以太网接口。

Modbus通信协议采用主-从(Master-Slave)模型,

是一种应用层报文协议,可以在不同类型的总线或网而不管它们是经过何种网络进行通信的,在同络链接,

一通信网络上每个设备都有唯一的设备地址,并且只可以有多个从设备。主设备可单独能有一个主设备,

和从设备通信,也能以广播方式和所有从设备通信。如果是单独通信,从设备返回一应答消息作为回应,如则不作任何回应。果是以广播方式进行查询的,2.2

Modbus协议的数据帧

Modbus协议有两种传输模式:RTU模式和ASCII模式。ASCII模式中数据用ASCII码表示,通过冒号(ASCII码3AH)、0AH)字符回车换行(ASCII码0DH,采用LRC数据校验;RTU表示数据帧的开始和结束,

模式中数据用非压缩BCD码表示,通过时间标记来实

采用CRC数据校验。控现数据帧开始和结束的判定,

制器以RTU模式在Modbus总线上进行通信时,信息

该模中的每8位字节分成2个4位16进制的字符,

数据域:数据域和功能码密切相关,根据功能码的

不同而不同。

CRC校验:ModbusRTU采用循环冗余检验CRC方法计算错误校验码,按照CRC算法,使用标准的16位生成多项式对任意长度的信息字段校验出一个16位的校验码。2.3

ModbusRTU通信结构模型

本文用底层数据采集系统为依托建立检测平台采

利用ModbusRTU协议实现集标准的电压电流信号,

数据采集系统与计算机之间的通信。系统组网结构如数据采集系统为从站,主图2所示。以PC机为主站,

从站根据各自的编号向主站向从站发出取数据命令,

站返回各项采集的数据,主站将接收的数据处理后存入数据库。3

ModbusRTU协议的实现

ModbusRTU协议采用Master/Slave通信模型。在μC/OS-II操作系统环境下,实现ModbusRTU中PC端主站和MiniARM端从站之间的通信。

2014年第11期仪表技术

Bit字,而PNum是操作的数据。

·35·

如图3所示为ModbusRTU主站程序流程图。为实现ModbusRTU主站协议的功能处理模块,首先需然后根据服要完成串口的初始化和服务函数的构造,

务构造函数构造Modbus请求帧并且调用串口发送命令将请求帧发送出去,如果程序在设定的时间内接收到应答帧,程序将调用对应的应答帧解析函数进行处

图2

系统网络结构

3.1ModbusRTU主站的实现

Modbus主站服务程序的核心模块是功能处理模

理,否则返回应答超时码。同时,解析函数对串口缓冲区内接收到的数据进行分析,若应答帧解析正确,函数将数据装入目标缓冲区,否则返回校验失败码

块,包括串口初始化、数据帧的构造和解析以及发送数

据帧等功能。发送数据帧时必须将其封装成标准的Modbus数据帧才能进行发送。在协议帧的组成上,Modbus协议定义了一个与基础通信层无关的简单协议数据单元(PDU),通过在PDU上增加地址域和CRC校验域等附加域定义了应用数据单元(ADU)。CRC码为2个字节,16位的二进制值。由发送设备计算CRC值,并把它附到信息中去。接收设备在接收信息过程中再次计算CRC值并与CRC的实际值进行比较,若两者不一致,即产生一个错误。校验开始,时,把16位寄存器的各位都置为“1”然后把信息中

只的相邻2个8位字节数据放到当前寄存器中处理,

有每个字符的8位数据用于CRC处理,起始位、停止位和校验位不参与CRC计算。

CRC校验时,每个8位数据与该寄存器的内容进行异或运算,然后向最低有效位(LSB)方向移位,用零填入最高有效位(MSB)后,再对LSB检查,若LSB=1,则

不作异或运算。寄存器与预置的固定值异或;若LSB=0,

重复上述处理过程,直至移位8次,最后一次(第

8次)移位后,下一个8位字节数据与寄存器的当前值异或,再重复上述过程。全部处理完信息中的数据字节后,最终得到的寄存器值为CRC值。

CRC值附加到信息时,低位在先,高位在后。为了方便功能参数的获取,定义了一个如下结构体:

typedefstruct{

unsignedcharSlaveID;unsignedcharFunc;intStartAddr;intPNum;}Parameter

图3ModbusRTU主站程序流程图

3.2ModbusRTU从站的实现

ModbusRTU协议是一个一主多从的通信协议,所

以需要对每个从站分配不同的地址。ModbusRTU从

站主要实现数据帧的接收和存储,并且根据接收到的数据帧中的功能代码给出一应答消息作为对主站的回应。ModbusRTU从站的程序设计流程图如图4所示。首先需要对串口初始化,如设置波特率、数据位和奇偶校验位等,然后调用串口接收命令读取主站发送来的数据帧,并判断接收到的数据帧中的地址与本机是否相符,如果不符,直接结束,否则对数据帧进行CRC校验。当校验正确的时候就可以根据相应的功否则向主站能代码调用对应的函数去执行功能操作,

返回一个错误信息的应答帧。下面是功能代码为03时,读保持寄存器的功能函数。

voidreadholdingregister(unsignedchar*Rx){

StartAddr=(*Rx++)<<8;StartAddr+=*Rx++;//起始地址

其中SlaveID是从站地址,一个Modbus网络最多

允许有255个从站。Func是服务功能号的选择。StartAddr是需要操作的设备在从站中的地址,它是16

·36·仪表技术2014年第11期

从站能否解析请求帧及时响出请求帧完成相应功能,

应主站请求,发出应答帧。与PC机相连之后,分别对两种功能服务进行若干测试,并根据ModbusRTU协议的内容验证所得到的结果是否正确。在主站PC机上的截图如5所示。

图4ModbusRTU从站程序流程图

outputnum=(*Rx++)<<8;

outputnum+=(*Rx++);//输出数量

if(outputnum<=0x07d0&&outputnum>=0x0001){

if(StartAddr<=0xffff&&startaddr>=0x0000)//起始地址{

send[0]=SlaveID;send[1]=0x03;send[2]=2*outputnum;for(n=1;n<=2*outputnum;n++){

send[n+2]=ox[startaddr+n-1];

re_crc=GetCRC16(send,2*outputnum+3);send[2*outputnum+4]=re_crc&0xff;send[2*outputnum+3]=re_crc>>8&0xff;}

图5主站PC机通信测试

由图5可以看出ModbusRTU主站对地址为1的

ModbusRTU从站的操作,读寄存器地址01和写寄存这里以03读寄存器功能为例来分析。器地址01,

主站PC机通过串口发送一个Modbus帧包含8个字节,工控板判断出是ModbusRTU帧,执行RTU服01代表所请求的从站地址,03代表所要执行的读务,

0001为寄存器的寄存器号(1号寄存寄存器功能,

0001为寄存器的数量(1个字节),D5CA为器),

CRC校验码。从站接到主站的请求帧后,解析帧,返01代回一个响应,反应帧如图5的接收所示,同样的,

03代表该帧执行的功能是读寄存表了该从站的地址,

02代表了字节计数,即为后面读出来数据的总字器,

7984为CRC校验码。其中0001即为数据采集节数,

系统所读取到的放在1号寄存器里的数字量。4

结论

3.3

系统通信参数

ModbusRTU是基于串口的数据传输模式,为了实

现主站和从站之间的通信,在同一网络上所有设备都必须设置相同的传输模式和串口参数。本设计中的通信参数设置如表3所示。

表3

通信参数串口波特率奇偶校验数据长度停止位

PC端COM19600bit/s

无8位1位

串口通信参数

数据采集系统端ModbusRTU9600bit/s

无8位1

本系统采用了STM32F103ZE嵌入式微控制器,可以使系统小型化,提高了系统性能,并且便于各种外设的扩展,可以实现多功能采集。本系统将基于STM32F103ZE微处理器为核心的数据采集系统作为485总线上,PC机作为主站成功地获从站配置在RS-取了设备参数,并利用上位机界面显示采集信号,达到了系统设计的基本要求。

通过实验测试,本文所介绍的ModbusRTU协议的主从通信模式,可以良好地应用于工业现场的设备参数的通信传输。由于系统通信可靠、传输速率快,在电力及其他工业现场具有广阔的应用前景。

(下转第54页)

3.4

系统通信调试

采用Modbus调试精灵作为RTU主站软件,用户

可以通过该人机界面选择从站地址来依次查看对各客户端的操作(读寄存器操作和写寄存器操作)。Modb-usRTU的测试目标是:RTU主站能否对RTU从站发

·54·仪表技术

η=

PM

×100%PIM

2014年第11期

太阳能电池的特性测试时要注意:电池表面保持清洁干燥,测试电路连接正常,光照强度合适。3

结论

便携式光伏特性测试仪实现了对每个光伏电池特性的便捷测试,通过特性匹配构作高效的光伏电池组,由此加强电池组的使用效率,延长其使用寿命。参考文献:

[1]J].信息记录材料,成志秀,王晓丽.太阳能光伏电池综述[

2007,8(2):41-47.

[2].太阳能,谢富昌.不同类型光伏电池的发电性能研究[J]

2003(6):21-22.[3]J].变频吴玉蓉,康勇.光伏系统中最大功率点跟踪的研究[

2010(2):46-49.器世界,

[4].南京:南肖华锋.光伏发电高效利用的关键技术研究[D]

2010.京航空航天大学,

[5]D].杭屠佳佳.太阳能电池性能参数测试系统的试验研究[

2013.州:中国计量学院,

(许雪军编发)

櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚(上接第32页)

[2]杜家熙,陈艳锋,李国厚.基于单片机的步进电机控制器设

图2

光伏电池特性测试仪组成

J].煤矿机械,2007(2):88-91.计[

[3]雷红淼,程耀瑜.基于L298N的直流电机驱动电路优化设

J].数字技术与应用,2012(2):118-120.计[[4].电子世何登,华秀洁.直流电机驱动与控制系统设计[J]2012(21):52-53.界,[5]J].中国科王瑾.基于单片机的直流电动机控制系统研究[

2011(2):144-145.技信息,

图2(a)所示的测量形式对于4片串联的光伏电池

特性效果明显,对光照尽量保证均匀,一般可定在35cm之后的位置。通过不断地改变电位器的阻值来确定每点的电流和电压数值。如果测量条件好,可以将数据输入计算机进行图形绘制和分析。如果现场条件一般,则应该在保证光照相同的情况下,着重于寻找每点电流与即功率的大小,找到最大功率。电压数值的乘积,

获得最大功率后,再由程序计算该光伏电池的填充因子和光电转化率,由此确定该光伏电池的真正特性。填充因子是太阳能电池的一个重要特性参数,数值越大则光伏电池的输出功率越高。这个特性参数取

数值不固定,决于光伏电池自身的参数和环境的参数,需要根据实际分析。填充因子用FF表示:

PMU·I

=MMFF=

UOC·ISCUOC·ISC

填充因子取决于太阳高度角、入射光照强度、光伏电池自身材料、理想系数和PV模型中的串联电阻与分流电阻的阻值,因此这个量的实时数据对光伏电池的现场分析十分重要。

光电转化率η,是光伏电池的最大输出功率和照射的太阳能光伏电池板上的太阳总辐射能之比:

(由游编发)

櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚櫚(上接第36页)参考文献:

[1]彭道刚,张浩,李辉,等.基于Modbus协议的ARM嵌入式检

J].电力自动化设备,2009,29(1):115测平台设计与实现[

-123.

[2]黄育和,程韬波.基于ModbusRTU协议在数字智能模块的

J].机电工程技术,2007,36(5):1-2.设计[

[3]潘长清,蒋大明,欧阳劲松,等.基于S3C44B0X处理器

MODBUS通信协议的实现[J].仪器仪表标准化与计量,

2007(2):26-28.

[4]周睛,陈晓光,常智.基于ARM与实时OS的数据采集与处

J].计算机测量与控制,2007,15(11):1599-理系统设计[

1601.

(由游编发)

本文来源:https://www.bwwdw.com/article/b0ij.html

Top