Modbus通讯协议在阀门电动装置测试系统中的应用

更新时间:2023-07-26 11:29:01 阅读量: 实用文档 文档下载

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

EDI技术在现代物流管理中的应用

 2007年 第4期

仪表技术与传感器

Instrument Technique and Sensor2007 

No14 

Modbus通讯协议在阀门电动装置测试系统中的应用

邵志学1,刁修睦2,王金全1,单黎黎1

(1.解放军理工大学工程兵工程学院,江苏南京 210007;2.山东省潍坊学院,山东潍坊 261061)

摘要:文中给出了基于Modbus协议的阀门电动装置测试系统,说明了测试系统的硬件构成、测试软件的相关设计和开发以及Modbus协议的实现。主要介绍了Modbus通讯协议的技术要点、。关键词:Modbus协议;电动装置测试系统;CRC校验

中图分类号:TN915.04   文献标识码:A   文章编号:1002-(04-ApplicationofModbusProtocolUsedMeasurementSystem

SHAODIAOX,W2quan1,SHANLi2li1

(1.EngineeringInstituteofE,&Tech.,Nanjing210007,China;2.WeifangCollege,Weifang261061,China)

Abstract:ValvesystembasedonModbusprotocolwasbroughtforward,includinghardwarestructure,designanddevelopmentsandapplicationofmodusprotocol.Hearttechnology,programdesignanderrorverifyofmodbusproto2

colweremainlyintroduced.

Keywords:Modbusprotocol;deviceelectricmeasurementsystem;CRCverify0 引言

quipment),负责实现对远端电动装置性能检测系统的检测数据

在许多实时监测系统中,经常需要接收距离较远的测控点数据,如何快速可靠地实现数据的远程传输是这些监测系统必须解决的问题。在监测现场,为了降低系统的成本,往往采用单片机系统作为数据采集和记录单元;在中央控制中心,常常利用PC机来完成人机会话及与监测现场的通信。通讯协议的选择与运用是实现现场可靠通信的关键。

采用Modbus协议实现了阀门电动装置测试系统的远程实时通讯。测试系统的下位机是以32位的ARM单片机

(LPC2214)为CPU,CPLD(XC95216)扩展I/O口对外围器件如加

进行判别、存储等。PC机通过485通讯电缆与远端电动装置性能检测系统相连,其传输速率为9600bit/s,端口数据传输速率可根据系统需要设为1200~19200bit/s[1].

载电机、卸载电机、光电编码器和A/D转换器进行控制的单片机系统,并有键盘进行数据输入和液晶屏显示各功能界面,以及打印机打印测试合格产品的性能参数记录。上位机的管理平台则基于VisualBasic6.0。此系统通过对产品的性能参数进行检测,严格避免不合格产品出厂,提高产品质量,增强了产品的市场竞争力。

通讯系统以生产现场的屏蔽双绞线为通讯媒介,上位机与下位机基于Modbus通讯协议实现远程实时通讯,取得了满意效果。

1 测试系统的硬件组成及工作原理1.1 测试系统的结构组成

图1 阀门电动装置测试系统下位机结构图

各远端电动装置性能检测系统通过光电编码器和A/D转换器对现场设备的性能参数进行数据采集,采用MAX1480芯片与PC机进行数据传输,并通过CPLD实现数据输入和输出开关量,从而实现对现场设备的控制和参数测量。电动装置性能检测系统还有复位、故障报警,芯片正常工作检测等系统。

通讯系统是以控制中心PC机和远端单片机控制系统通过

485通讯电缆以同频异步半双工方式进行数据信息传输,PC机

系统由控制中心和多个远程单元RTU(RemoteTerminalU2

nite)组成。控制中心由上位机和RS-232/485转换器组成,下

通过串口发送令牌到远端单元,远端单元收到自己的令牌后发送数据到PC机,PC机收到数据后回送正确信息。从而实现控制中心对远端设备的控制和数据采集。

2 通讯程序的设计与实现2.1 通讯协议

位机是以ARM单片机为核心的电动装置性能检测系统,下位机结构组成如图1所示。

1.2 工作原理

控制中心作为系统的数据终端设备DTE(DataTerminalE2

收稿日期:2006-05-12 收修改稿日期:2006-12-21

系统采用了Modbus协议,Modbus通讯方式采用主从方式

EDI技术在现代物流管理中的应用

 38 

InstrumentTechniqueandSensor

Apr12007 

的查询-响应机制,只有主站发出查询时,从站才能给出响应,从站不能主动发送数据。主站可以向某个从站发出查询,也可以向所有从站广播信息。从站只响应单独发给它的查询,而不响应广播消息[2]。

2.1.1 Modbus协议传送方式

Modbus通讯协议有2种传送方式:RTU方式和ASCII方式。RTU模式:当控制器设为在Modbus网络上以RTU(远程终端单

收到令牌后,对照令牌的地址号与该单元地址进行判断,得知令牌是该单元的

,此时总线处于接收数据状态。此单元开始发送信息,发送的信息共158个字节。第1个字节和第2个字节分别表示起始标志符和命令符,第3个字节表示数据个数,第4个到第157个字节表示采集的测试数据和CRC校验值,最后一个字节表示结束标志符。如果地址不符,则将令牌转发到下一单元。

2.2 元)模式通信,在消息中的每个8bit字节包含2个4bit的十六进制字符。这种方式的主要优点是:在同样的波特率下,可比

ASCII方式传送更多的数据。ASCII模式:当控制器设为在Mod2bus网络上以ASCII(美国标准信息交换代码)模式通信,,基于软件

,上位机通讯子程序流程图以及

2、图3所示。

中的每个8bit字节都作为2个ASCII[3]2.1.2 ModbusModbus,而

。它描述了一站点请求访问其他站点的过程,如何回应来自其他站点的请求,以及怎样侦测错误并记录。它制定了消息域格局和内容的公共格式,在一个Modbus网络上各站点的所有设备都必须选择相同的传输模式和串口参数。使用ASCII模式时,消息以冒号字符

(ASCII码3AH)开始,以回车换行符结束(ASCII码0DH,0AH)。

其他域可以使用的传输字符是十六进制的0~9,A~F.网络上的设备不断侦测“:”字符,当有一个冒号接收到时,每个设备都解码下个域(地址域)来判断是否发给自己的。消息中字符间发送的时间间隔最长不能超过1s,否则接收的设备将认为传输错误。一个典型消息帧如下所示:

:地址功能代码数据数量数据1…数据NLRC高字节LRC低字节回车

控制中心上位PC机始终在循环发送令牌,当远端单元接

换行

收到与本机地址相同的令牌时,置接收数据标志,接收到自己的令牌后,远端单元开始上传数据到上位PC机,与此同时PC机停止发送令牌并处于接收数据状态,等到接收数据完毕并检验数据合格后发送确认命令到此远端单元,如果没收到数据或数据不合格,发送错误标志到此远端单元。如果收到的令牌与本机地址不同时,程序返回中断入口处,继续执行其他操作。这样可保证远端单元把数据准确地发送到上位PC机。

2.2.1 上位PC机通讯程序设计

使用RTU模式时,消息发送至少要以315个字符时间的停顿间隔开始。传输的第1个域是设备地址。可以使用的传输字符是十六进制的0~9,A~F.网络设备不断侦测网络总线,当第一个域(地址域)接收到,每个设备都进行解码以判断是否发给自己的。在最后一个传输字符之后,一个至少315个字符时间的停顿标定了消息的结束。一个新的消息可在此停顿后开始。整个消息帧必须作为一连续的流传输。如果在帧完成之前有超过115个字符时间的停顿时间,接收设备将刷新不完整的消息并假定下一字节是一个新消息的地址域。同样地,如果一个新消息在小于315个字符时间内接着前个消息开始,接收的设备将认为它是前一消息的延续。这将导致一个错误,因为在最后的CRC域的值不可能是正确的[4]。一典型的消息帧如下所示:

地址功能代码数据数量数据1…数据NCRC高字节

上位机利用VB6.0进行编程,用VB6.0开发串行通讯程序普遍采用2种方法:一种是利用Windows的API函数;另一种是采用VB的通讯控件MSComm.利用API函数编写串行通讯程序较为复杂,需要调用许多繁琐的API函数,而VB6.0的MSComm通讯控件提供了标准的事件处理函数、事件和方法,用户不必了解通信过程中的底层操作和API函数[4],从而比较容易高效地实现串口通信。

采用Modbus通讯协议进行数据传输时,采用了循环冗余码校验(

CRC),编写CRC校验程序有2种办法:一种为计算法;一种为查表法。管理主机一端通常使用计算法,它具有模块代码少、修改灵活、可移植性好的优点。其缺点是计算量大[5]。而现场仪表通常使用查表法,可以大大降低CPU的运算时间。计算方法是依据CRC校验码的产生原理来设计程序。程序如下:

系统的上位机通过令牌传递总线(token2passingbus)方式与远端单元进行通讯。PC机发送的信息为固定4个字节。第1个字节和第2个字节分别表示起始标志符和远端单元的具体地址号,第3个字节表示发送的是令牌还是命令,第4个字节表示结束标志符。下位机采用RTU模式上传数据,具体流程为接

EDI技术在现代物流管理中的应用

 第4期

邵志学等:Modbus通讯协议在阀门电动装置测试系统中的应用

EndIfEndFunction

2.2.2 下位机ARM2200系列单片机通讯程序设计

39  

下位机利用软件ADS1.2进行编程,此软件是专为ARM单片机开发的,类似于C语言,有很好的应用性。此软件中设计的对ARM单片机进行串口初始化、中断允许、发送数据和接收数据程序代码如下:i=发送开始字符(0x20)==0);

U0THR=cmdid;  //发送命令字符

while((U0LSR&0x20)==0);

 U0THR=datanum;  //发送的字节数目

while((U0LSR&0x20)==0);

 for(i=0;i<datanum;i++)  {U0THR=dataptr[i];

PublicFunctionfunCRC16Verify(mArrModBus()AsByte)AsBoolean

DimCRC16LoAsByte,CRC16HiAsByte ′CRC寄存器DimCLAsByte,CHAsByte,SaveHiAsByte,SaveLoAsByteDimI,JAsInteger

CRC16Lo=&HFF:CRC16Hi=&HFFCL=&H1:CH=&HA0

ForI=0ToUBound(mArrModBus)

CRC16Lo=CRC16LoXormArrModBus(I) ′每个数据与CRC寄存器进行异或ForJ=0To7

SaveHi=CRC16Hi:SaveLo=CRC16LoCRC16Hi=CRC16Hi\2 ′高位右移一位CRC16Lo=CRC16Lo\2 ′低位右移一位

If((SaveHiAnd&H1)=&H1)Then ′如果高位字节最后

}  //发送数据

while((U0LSR&0x20)==0);

 U0THR=0x2a; /33结束3/

while((U0LSR&0x20)==0);  //等待数据发送

数据接收程序:

if(0x04==(U0IIR&0x0F))rcvnew=1;  //设置接收

到新的数据标志 for(i=0;i<5;i++)

 {rcvbuf[i]=U0RBR;  //读取FIFO的数据,并清除中断标志 }

VICVectAddr=0x00;  //中断处理结束

3 结束语

一位为1

CRC16Lo=CRC16LoOr&H80 ′则低位字节右移后前面补1

EndIf ′否则自动补0

If((SaveLoAnd&H1)=&H1)Then ′如果LSB为1,则与

该系统应用在对阀门电动装置进行质量检测的生产过程,应用表明:该通讯网络部分运行平稳,数据传输误码率低,传输速度符合要求,效率高,操作简单,组网方便,满足生产现场的数据检测和控制要求。该系统可广泛应用于高精度的工业测控、数据采集等领域中。参考文献:

[1] 陈柏金.通过串行口访问Modbus现场控制网络.微计算机信息,

2003,19(1):52-54.

[2] 阳宪惠.现场总线技术及其应用.北京:清华大学出版社,1999.[3] 潘洪跃.基于Modbus协议通讯的设计与实现.计量技术,2002,

(4):35-36.

[4] 卢文俊.基于Modbus协议的控制器远程监控系统.电力自动化设

多项式码进行异或

CRC16Hi=CRC16HiXorCHCRC16Lo=CRC16LoXorCLEndIfNextJNextI

If0=CRC16LoAnd0=CRC16HiThen

funCRC16Verify=False ′校验正确时候函数返回假值Else

funCRC16Verify=True ′校验不正确时候函数返回真值

备,2003(6):54-56.

[5] 赵作鹏.Delphi环境中Modbus通讯协议的开发和应用.煤矿机电,

2003(4):35-36;53.

),硕士研究生,从事电力系统及其自动化的研究。作者简介:邵志学(1983—

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

Top