基于多线程的串口通信软件的设计与实现精Word格式文档下载.docx
《基于多线程的串口通信软件的设计与实现精Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于多线程的串口通信软件的设计与实现精Word格式文档下载.docx(12页珍藏版)》请在冰点文库上搜索。
关 键 词:
多线程;
串口通信;
Delphi;
消息机制中图分类号:
TP311 文献标识码:
A
1 引 言
串行通信是计算机与其他设备进行数据交换
时经常使用的方法之一,它具有实现简单、使用灵活方便、数据传输可靠等优点,因而在工业监控、数据采集和实时监控系统中得到广泛应用。
在Windows系统中,通过基于多线程和消息的多任务处理编程可以有效地解决通信的实时性,且能提高数据的吞吐量和应用程序的可靠性。
在单任务操作系统中,不能同时处理两件以上不同的任务。
Win32是基于线程的抢先式多任务操作系统,使得应用程序能同时执行多个任务,即在一个进程中可同时运行多个线程。
一个线程是指程序的一条执行路径,它在系统指定的时间片中完成特定的功能。
系统不停地在多个线程之间切换,由于时间很短,看上去多个线程在同时运行。
对于通讯这种需要花费大量的时间来测试I/O操作,同时又要保持响应用户其他操作的应用程序来说,创建多线程是最佳选择。
本文介绍的是某公司开发的加油站监控系统中使用的多线程的串行通信设计方法,可对从事类似开发任务的人员有所帮助。
2 系统结构
加油站监控系统一般采用MCS251单片机作
为前端加油机的主控CPU芯片,利用计算机作为后台监控机来实现实时监控、司机自助式加油、晚
间无人加油、数据库管理以及应用IC卡技术和油站网络实现加油一卡通等。
系统的组成结构如图1所示。
后台监控机是系统的心脏,要求后台监
控软件具有良好的兼容性和扩展性,所以独立设计了一套基于多线程的通讯软件,物理位置与后台监控软件在同一台计算机上,它与前端的加油机串口通信是典型的主从式,在硬件上通过moxa公司的多串口卡实现,与后台监控软件通过标准的Windows消息机制实现数据交换
。
图1 加油机监控系统结构
3 多线程程序设计
1Windows串行通信机理 Windows是与
设备无关的操作系统,在通常的情况下,严格禁止用户模式的应用程序直接对硬件进行访问,应用程序对硬件的访问是通过Win32子系统传递IRP给I/O管理器,再传递给合适的硬件驱动程
序,由硬件驱动程序对硬件进行访问,驱动程序提
供应用程序接口函数(API为应用程序调用。
具体结构如图2所示。
对PC机串口进行操作,至少要有以下几个步骤:
①打开进行通讯的串口;
②串口进行初始
化;
③根据通讯事件对数据进行发送和接收;
④通讯结束关闭通讯串口
图2 应用程序操作硬件机理
2设计思想①串口操作方式的选择 在加油站监控系统串口通信中,采取的是典型的主从式通信方式(即前端加油机完全处于被动应答状态,应用程序发送、接收数据时,对I/O口的读写操作有两种方式,即同步方式与异步方式(重叠。
同步方式执行时,必须等到事件和错误的发生才能返回,可能会导致线程的阻塞。
异步方式执行时,将等待的动作放到后台去执行,再由程序去判断是否已经完成,即使操作未完成函数也会立即完成,避免了同步的缺陷。
所以,系统设计采用了异步方式读取I/O口。
②线程间的同步 在有若干线程并行运行的环境里,为避免对共享资源的访问冲突,同步各不同线程活动的能力非常重要。
线程同步有以下几种基本的类型:
事件、互斥、临界区、信号量等。
本文采用Event事件对象,用于发出可以访问变量过程的信号。
③消息方式的多线程设计理念 在串口通讯中
很多开发人员经常采用端口巡回监控方式(使用一个和多个TIMER事件不停地对串口巡回监控,由于Windows定时器消息不是异步的,而且WM-TIMER消息是低优先级的,必须和其他消息一起排队,一旦其他应用程序的执行时间被推迟或缩短,势必造成定时时间的精确,使通信缓冲区发生溢出,在加油站监控系统的串口通讯中,通过一个串口同时控制十几台加油机(有时甚至更多,如果采用这种方式,势必会造成系统资源的极度浪费,同时通讯的实时性也不能得到保证。
鉴于此,笔者采用了消息方式的多线程设计方案,
使问题得到很好的解决。
3程序设计
①应用程序介绍 根据多线程程序的开发方
法,该串口通信软件由负责人机交互的多线程和对串口进行处理的后台辅助线程组成。
主线程是串口通信程序的管理者,用来初始化串口(通过调用Win32API函数,自定义通信事件消息,创建、删除辅助线程,进行人机交互的操作及协调好各线程运行。
应用程序流程如图3所示。
图3 串口通信程序框图
②后台辅助线程分析 后台辅助线程是串口
通信软件的核心,包括串口监视线程,读线程,写线程。
串口监视线程在后台对串口进行实时监视,当监测到预定义的事件时,立即调用相应的线程进行处理并向主线程发相应的消息,如接收到数据就调用读线程自动接收数据并进行处理,同时向主线程发送接收到数据的消息(WM-COMMRECV,串口监视线程发送完此消息后就执行后面的程序代码,继续对串口进行监视,做到了处理消息与监视串口两不误,既保证了通讯的实时性,又避免了资源的浪费,其处理过程如图4所示。
图4 串口监视线程的实现
・271・控 制 工 程 第11卷
4 程序实现
1程序初始化 首先利用Win32API函数创建串口事件对象,即读、写线程事件和关闭线程事件。
当设备驱动对硬件初始化后,打开串口就像读一个文件一样,打开失败,则程序返回。
否则,通过Setupcomm设置输入、输出缓冲区大小,Getcommstate获得目前通信端口状态,通过dcb(设备程序块和Setcommstate设置通信端口状态,以及利用Setcommmask设置通信掩码等。
下面是部分程序代码。
ReadEvent:
=CreateEvent(nil,true,true,nil;
//创建读事件
IfReadEvent=nullthenbegin
MessageBox(0,’ReadEvent
CreateError’,’Notice’,MB-OK;
Exit;
WriteEvent:
/建
写事件
CreateError’,’Notice’,MB-OK;
ShutEvent:
//创建关闭线程事件
MessageBox(0,’ReadEvent
CreateError!
’,’Notice’,MB-OK;
exit;
end;
hcomm:
=createfile(’com1’,generic-read
orgeneric-write,
0,nil,open-existing,file-flag-overlaped,0//异步(重叠方式
if(hcomm=invalid-handle-valuethenbegin
MessageBox(0,’打开通信端口错误!
’,’’,MB-
OK;
end;
EvWait:
=EV-RXCHAR+EV-TXEMPTY+EV-ERR;
IfnotSetCommMask(hcomm,EvWaitthen
Messagebox(0,’设置错误!
’,’’,MB-OK;
//设置事件掩码;
Comm.-Thread:
=createThread(nil,,0,@CommWatch,nil,0,ThreadID//创建辅助线程;
2后台辅助线程 后台辅助线程由读线程、写线程和串口监视线程组成。
fillchar(lpol,sizeof(Toverlapped,0;
//lpol:
Pover2lappe;
whiletruedobegin
wait:
=waitcommevent(hcomm,Evwait,lpol//等待串行口事件
ifnotwaitthenbegin
err:
=GetLastError(;
//错误处理
……;
end
else
ClearCommError(hcomm,errorflag,@comstat;
Evwait:
=WaitforMultipleObjects(3,eventarray,false,infi2nite;
caseEvwaitof
0:
……;
//结束辅助线程
1:
//读线程
2:
//写线程
end;
3读线程 当读事件ReadEvent变为发信号状态时,调用读线程从缓冲区里读取数据,写线程与其类似,下面给出读线程部分程序代码。
clear:
=ClearCommError(hcomm,errorflag,@comstat;
ifclearthenbegin
cbnum:
=ComStat.cbInQue;
read:
=ReadFile(hcomm,InputBuffer,
CommStat.cbInQue,
dwNumberOfBytesRead,@Read-os;
//读取串口数据
ifnotreadthenbegin
err:
ResetEvent(readevent;
//复位事件对象
PostMessage(htemp,WM-COMMRECV,hcomm,0;
//向主线程发消息
5 结 语
在PC机与单片机、PLC等下位机的串口通讯中,如何保证通讯的效率及实时性以及节约系统的资源是设计者关心的问题。
笔者利用上面介绍的方法,在Delphi的开发环境下,成功地开发了加油站监控系统中的基于多线程的串口通讯程序,运行结果良好,可供广大同行参考。
・
3
7
1
第2期 吴先亮等:
参考文献:
[1] ChrisCant.孙义,马莉波,国雪飞,等译.Windows
WDM设备驱动程序开发指南[M].北京:
机械工业出版社,2000.
[2] CharlesPetzold.北京博彦科技发展有限公司译.
Windows程序设计[M].北京:
北京大学出版社,
1999.[3] SteveTeiceira.龙劲松,等译.XavierPacheooDelphi
6开发人员指南[M].北京:
机械工业出版社,2002.
[4] 范逸之,陈立元.Delphi与RS2232串行通信控制
[M].北京:
清华大学出版社,2002.
ProgrammingofSerialCommunicationDesignand
ImplementBasedonMulti2thread
WUXian2liang,LIUChun2sheng
(CollegeofAutomationEngineering,NanjingUniversityofAstronauticsandAeronautics,Nanjing210016,China
Abstract:
Inlightofdisadvantagesofserialcommunicationinrealtimeandusingofsystemresource,theideaofasynchronousserialcommunicationdesignbasedonthemulti2threadtechnologyandself2definedmessageispresented.Theserialcommunica2tionmechanismandthreadsynchronizationareemployedintheachievementtotheidea.Thewayto322bitsoperationsystemmulti2threadasynchronousserialcommunicationprogrammingisanalyzed.TheserialcommunicationprogramminginDelphilanguagebetweenPCandsingle2chipisimplementedingasstationcomputercentralcontrollingsystem.Andtheideaandcom2monstepsofprogramminganditsimplementedsegmentcodearepresented.Theserialcommunicationprogrammingisdevel2opedsuccessfullyingasstationcomputercentralcontrollingsystem.Itpromotestheautomationofpetroleumindustryandhelpestodevelopautomationofotherscorrelationtopetroleumindustry.
Keywords:
multi2thread;
serialcommunication;
messagemechanism
(上接第131页
4 结 论
本文提出了使用最小方差自校正控制器来处理污水处理中的溶解氧浓度,并且通过仿真试验显示出了这种控制策略的可行性。
另外,通过上述的研究可以看出,空气流量和氧气吸收率是分析大型活性污泥系统的两个重要参数,考虑通风密度的纵向和时间变化,本文使用适当的模型完全有可能实现对表征活性污泥过程的氧气吸收率以及氧气传送系数的在线估计,从而实现对溶解氧浓度的有效控制。
[1] HolmbergA.Modelingoftheactivatedsludgepro2
cessformicroprocessor2basedstateestimationandcontrol[J].WaterResearch,1982,16(5:
123321246.[2
] AndrewsJF.Dynamicmodelsandcontrolstrategiesforwastewatertreatmentprocesses[J].WaterRe2search,1974,8(3:
2612289.[3
] DoldPL,MaraisGR.Evaluationofthegeneralacti2vatedsludgemodelproposedbyIAWPRCTaskGroup[J].WaterScienceandTechnology,1986,18(6:
63289.[4] 杜树新.污水生化处理过程建模与控制[J].控制理论与应用,2002,19(5:
6602666.
[5
] Marsili2libelliS.Adaptiveestimationofbioactivitiesintheactivatedsludgeprocess[J].IEEProc2D,
1990,137(6:
3492356.
[6] 谢新民,丁锋.自适应控制系统[M].北京:
清华大
学出版社,2002.
[7] 李清泉.自适应控制系统理论、设计与应用[M].
北京:
科学出版社,1990.
AdaptiveControlofWastewaterTreatmentProcess
FANShi2mei
(CollegeofInformationEngineering,ZhejiangUniversityofTechnology,Hangzhou310014,China
Anadaptivecontrolstrategyofthewastewatertreatmentprocessisproposed,espetiallythecontrolofthedissolvedoxygen(DOconcentration.AbilinearmodelisusedtosimplifytheDOdynamics.Andfortheestimationofkeyparametersoftheprocessmodelthatcannotbeobtainedfromdirectmeasurement,arecursiveleastsquaresmethodisused.Inordertoobtaintheminimumvarianceself2tuningcontrolstrategyoftheDOconcentration,asteppredictedoutputistakenasthedesiredout2put.Finally,bysimulations,itisexplainedtheinfluenceoftheairflowrateandtheoxygenuptakerate(OURfortheDOconcentration.
wastewatertreatmentprocess;
dissolvedoxygen(DOconcentration;
minimumvarianceself2tuningcontrol
・471・控 制 工 程 第11卷