Modbus协议在智能信号变送器中的应用

更新时间:2023-04-24 06:08:02 阅读量: 实用文档 文档下载

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

 2011年 第6期

仪表技术与传感器

Instrument Technique and Sensor2011 

No.6 

Modbus协议在智能信号变送器中的应用

付 青,丁金华,王 辉,王朋亮,王炜富

(大连工业大学机械工程与自动化学院,辽宁大连 116034)

摘要:针对工业上的需求,文中基于Modbus协议设计了一种嵌入式智能传输数据的仪表,CPU采用C8051F系列的微处理器,上下位机通过RS-485总线进行通讯。下位机采用C语言来编程,通过ADC和脉宽调制功能实现数据的采集和变换;上位机采用C#来开发Modbus协议通信软件,采用主线程和辅线程机制来实现Modbus协议通信,将数据显示在界面上,同时绘制数据的动态曲线图,方便观察数据,系统整体实用性较高。关键词:Modbus协议;RS-485总线;C#

中图分类号:TN915;TP212   文献标识码:A   文章编号:1002-1841(2011)06-0026-03

ApplicationofModbusTCPProtocolinIntelligentSignalTransducer

FUQing,DINGJin-hua,WANGHui,WANGPeng-liang,WANGWei-fu

(SchoolofMechanicalEngineering&Automation,DalianPolytechnicUniversity,Dalian116034,China)Abstract:Accordingtoindustrialneeds,thispaperdesignedanembeddedintelligentdatatransmissioninstrumentbasedonModbusprotocol.TheCPUadoptedC8051Fseriesmicroprocessor,theupperandlowercomputerrealizedcommunicationthroughtheRS-485bus.ThelowercomputeradoptedCprogramminglanguage,throughtheADCandpulsewidthmodulationfunctiontorealizedatacollectionandconversion,PCusedC#todevelopModbusprotocolcommunicationsoftware,usedthemainmechanismofurban-ruralbenefitreadjustmentandprocesstorealizedatacommunicationbasedonModbusprotocol.Itdisplaysdatainthehostcomputerinterface,whiledrawsdataonthedynamicgraph,itisaconvenientandpracticalsystemasawhole.Keywords:Modbusprotocol;RS-485bus;C#0 引言

ModBus通讯协议是一种开放式现场总线通信协议,其功能完善、使用简单、协议开放,正在成为仪表及智能终端的工业标准[1]。

工业上通常需要把温度、压力、速度、角度等物理量的变化转换成模拟量电信号才能传输到几百米外的控制室或显示设备上,这种将物理量转换成电信号的设备称为变送器。工业上最广泛采用的是用4~20mA电流来传输模拟量[2]。

文中介绍了基于modbus协议的智能隔离变送器,设计合理,稳定性、可靠性较好,在工业控制领域会有广泛的应用前景。1 系统整体设计

系统通过RS-485—RS-232转换器,进行主从机数据通信,PC机作为主机,24个隔离器作为从机,最多可扩展到255台从机。整体结构图如图1所示。

3 软件设计

3.1 下位机程序编写

下位机程序主要用到串口中断UART0,当接收到数据时,首先判断首字节和自己的地址是否吻合,如果正确则依次接收,在最后一个传输字节之后,必须要有至少3.5个字符的停顿时间来标定一帧消息的结束。结束之后从机对接收到的消息进行CRC校验。如果校验结果与帧消息包含的CRC校验码吻合,则表示通信正常,否则该帧通信有错误,通知主机重发命

图1 系统结构图

图2 系统硬件框图

信号源4~20mA,经过调理电路,将电流信号转换为电压,经低温漂运算放大器OP07将电压放大后加到V/F变换器LM331的输入端,LM331将输出的频率信号转换成TTL电平,进过6N137光电耦合器送给C8051F340单片机的I/O口进行脉宽调制,串口通讯则通过MAX485进行转换。硬件原理框图如图2所示。

令帧。接收数据流程图如图3所示。3.2 上位机程序编写

上位机软件主要实现上下位机串口通信和Modbus协议实隔离器的输出显面上。

2 硬件设计

基金项目:辽宁省教育厅2009—2010科学技术研究项目(2009A083)

 :201118

 第6期

付青等:Modbus协议在智能信号变送器中的应用

 27 

图4 上位机工作界面

图3 下位机数据接收流程图

Modbus串口通信程序采用多线程方式,主线程完成对串口的初始化、设置,发送控件则启动定时器,定时向串行口发送请求数据帧,发送完毕后需要放开发送总线,以便下位机占总线。接收线程监视串行口,当串行口收到从机数据时,接收线程向主线程发送消息,通知主线程从串行口取得从机的数据并进行相应的处理。如果经过校验接受数据正确,则设备地址加1,采集下个隔离器的数据。反之,重新发送数据帧。如果多次从机无应答,则提示通讯错误,停止通讯,此时可在上位机手动将该从机跳过以便其他从机继续运行。

(1)计算机发送查询电流信号消息给隔离器,如表1所示。

并可以通过选择一个隔离器将实时曲线显示出来,界面如图4所示。

上位机串口通信是采用VisualStudio2005开发工具中Se-rialPort类的设计方法,采用多线程,完成对通信数据的打包、数据解析以及通信的连接。实现了串口的初始化、串口参数设置、串口事件监视等。串口数据的读取用了事件触发方式,在SerialPort类中有DataReceived事件,当串口的读缓存有数据到达时则触发DateReceived事件。SerialPort.DataReceived事件运行比较特殊,其运行在辅线程,不能与主线程直接进行数据传输,所以用到了同步委托的方法Invoke

表1 查询数据消息

地址01

功能码03

存储地址高8位

00

存储地址低8位

00

数量高8位

00

数量低8位

02 {

if(ctlisTextBox)  {

 if(=="textBox"+snumber)   {

  ((TextBox)ctl).BackColor=Color.Red;     }   }

 MessageBox.Show("站号:"+snumber+"出现问题,请处理");

 timer1.Enabled=false;   port1.Close();  } }

privatestringcrc16(byte[]buffer,Int16length)//CRC校验 {

stringresult="";

byteuchCRCHi=0xFF;//highbyteofCRCinitialized  byteuchCRCLo=0xFF;//lowbyteofCRCinitialized  intuIndex;//willindexintoCRClookuptableo0;gt++校验码高8位

ai

校验码低8位

ao

主要代码实现:

privatevoidsenddata(){

port1.RtsEnable=true;//占总线

port1.DiscardInBuffer();//删除缓冲区的数据if(number>=24)number=1;//循环24个从机buffsend[0]=number;//从机地址snumber=Convert.ToString(number,10);

buffsend[1]=HexStringToBinary(TBfucnum.Text);//功能码buffsend[2]=(byte)(HexStringToUInt16(TBadress.Text)/256);buffsend[3]=(byte)(HexStringToUInt16(TBadress.Text)%256);buffsend[4]=(byte)(HexStringToUInt16(TBshul.Text)/256);buffsend[5]=(byte)(HexStringToUInt16(TBshul.Text)%256);buffsend[6] =ai;//校验码高8位buffsend[7]=ao;//校验码低8位

port1.Write(buffsend,0,buffsend.Length);port1.RtsEnable=false;count++;

if(count==5)//重发5次没有反应报错{

ctl.nt

28

{

 uIndex=uchCRCHi buffer[i];

InstrumentTechniqueandSensor

result=converHex(uchCRCHi);  result+=converHex(uchCRCLo);  returnresult; }

Jun.2011 

 uchCRCHi=(byte)(uchCRCLo auchCRCHi[uIndex]);   uchCRCLo=(byte)(auchCRCLo[uIndex]);   ai=uchCRCHi;   ao=uchCRCLo;  }

(2)隔离器返回电流信号数据,如表2所示。

表2 返回数据消息

地址01

功能03

码数据长度高8位

00

数据长度低8位

02

数据8位rsdataH

数据8位rsdataL

校验码高8位

ai

校验码低8位

ao

代码实现:

privatevoidport1 DataReceived(objectsender,SerialDataReceivedE-ventArgse)

 {

byte[]bufferok=newbyte[8];  byte[]buffcrc=newbyte[6];  intbytes=port1.BytesToRead;

byte[]buffrec=newbyte[bytes];//接收数据  port1.Read(buffrec,0,bytes);//将数据读到缓冲区  booldata ok=false;//数据是否正确

buffer.AddRange(buffrec);//定义一个缓冲区  while(buffer.Count>=8)  {

 if(buffer[0]==buffsend[0])   {

  buffer.CopyTo(0,buffcrc,0,6);

  if((buffer[6]!=ai) (buffer[7]!=ao))    {

  buffer.RemoveAt(0);    continue;    }

  buffer.CopyTo(0,bufferok,0,8);    data ok=true;

  buffer.RemoveRange(0,8);   }   else   {

  buffer.RemoveAt(0);   }  }

if(data ok)   {

  rsdata=bufferok[4]*256+bufferok[5];

  input=Convert.ToString(rsdata,10);//数据显示在界面上    SetTextCallbackd=newSetTextCallback(Updatatextbox);    this.Invoke(d,newstring[]{input});//同步委托方法    number++;

  if(number>=24){number=1;}//站号    count=0;   }}

4 结束语

Modbus作为国际智能化仪表普遍采用的主流通信协议之一,应用广泛。该系统采用Modbus通讯协议可靠地实现了上下位机的通讯。经实验测试,系统符合工业控制的要求,而且系统稳定,误差较小,实用性较强,而且从机可以扩展到255台,基于Modbus通讯技术应用于智能变送器设计,提高了其稳定性、可靠性和通用性,且结构简单,成本较低,会得到普遍的推广和应用。参考文献:

[1] 叶露林,洪雪峰.基于ModBus通讯协议智能模块实现及应用.电

子科技,2009,22(2):11-13

[2] 王正德,赵菲菲.工业用4/20mA两线制变送器的设计.仪表技

术,2009(11):75-77.

[3] 郭庆,李成贵,田宏杰.智能测试仪器和系统中Modbus协议的实

现.计量与测试技术,2009,36(1):47-49.

[4] 张波,丁金华,孙秋花,等.基于微控制器的隔离变送器的设计.大

连工业大学学报,2010,29(3):223-226.

[5] 崔鹏.基于MODBUS协议智能控制系统设计.山西电子科技,2010

(3):24-25.

[6] 陆瑶,景鑫.基于C#环境的单片机(89C51)与PC的串行通信.信

息技术,2009(7):225-229.

作者简介:付青(1984—),硕士研究生。E-mail:11955589@

(上接第25页)

[7] DONG,Qing.OceanwavespectrumfromSARimageusing2D-ARMA

model.IEEEInternationalGeosciencesandRemoteSensingSymposi-um,2005,991-994.

[8] LimitedARMDevelopmentGuide2000-2001.ARMDOI,2000,06.[9] POPPaul.Embeddedsystemsdesign:Optimizationchallenges.Lecture

NotesinComputerScience,2005,35(24):16-20.

[10] 胡松,温志渝,陈伟民.一种新型微小光谱仪的设计.压电与声

光,2006,22(6):363-366.

作者简介:苏小会(1970—),博士研究生,副教授,主要从事计算机应用

技术方向的研究。

E-mail:xusp686@,suxh666@

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

Top