基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)_第1頁
基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)_第2頁
基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)_第3頁
基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)_第4頁
基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、收稿日期:2003207211;收修定稿日期:2003209225作者簡(jiǎn)介:吳先亮(19752,男,安徽樅陽人,碩士研究生,主要研究方向?yàn)楣I(yè)自動(dòng)化等。控制工程Control Engineering of China Mar .2004Vol.11,No.22004年3月第11卷第2期文章編號(hào):167127848(2004022*基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)吳先亮,劉春生(南京航空航天大學(xué)自動(dòng)化學(xué)院,江蘇南京210016 摘要:針對(duì)串口通信實(shí)時(shí)性和系統(tǒng)資源利用的不足,提出了基于多線程技術(shù)和自定義消息機(jī)制的異步串口通信的設(shè)計(jì)思想。結(jié)合串口通信的機(jī)理和多線程同步方式,分析了Win32系統(tǒng)下

2、多線程異步串口通信程序的開發(fā)方法。用Delphi 實(shí)現(xiàn)了加油站中央控制系統(tǒng)中PC 機(jī)與單片機(jī)間的串行通信軟件,給出了軟件的設(shè)計(jì)思路,一般步驟和部分程序代碼。目前該通信軟件已穩(wěn)定地運(yùn)行在各加油站中央控制系統(tǒng)中,促進(jìn)了石油行業(yè)自動(dòng)化的發(fā)展,也為相關(guān)行業(yè)實(shí)現(xiàn)自動(dòng)化提供了幫助。關(guān)鍵詞:多線程;串口通信;Delphi ;消息機(jī)制中圖分類號(hào):TP 311文獻(xiàn)標(biāo)識(shí)碼:A1引言串行通信是計(jì)算機(jī)與其他設(shè)備進(jìn)行數(shù)據(jù)交換時(shí)經(jīng)常使用的方法之一,它具有實(shí)現(xiàn)簡(jiǎn)單、使用靈活方便、數(shù)據(jù)傳輸可靠等優(yōu)點(diǎn),因而在工業(yè)監(jiān)控、數(shù)據(jù)采集和實(shí)時(shí)監(jiān)控系統(tǒng)中得到廣泛應(yīng)用。在Windows 系統(tǒng)中,通過基于多線程和消息的多任務(wù)處理編程可以有效地

3、解決通信的實(shí)時(shí)性,且能提高數(shù)據(jù)的吞吐量和應(yīng)用程序的可靠性。在單任務(wù)操作系統(tǒng)中,不能同時(shí)處理兩件以上不同的任務(wù)。Win32是基于線程的搶先式多任務(wù)操作系統(tǒng),使得應(yīng)用程序能同時(shí)執(zhí)行多個(gè)任務(wù),即在一個(gè)進(jìn)程中可同時(shí)運(yùn)行多個(gè)線程。一個(gè)線程是指程序的一條執(zhí)行路徑,它在系統(tǒng)指定的時(shí)間片中完成特定的功能。系統(tǒng)不停地在多個(gè)線程之間切換,由于時(shí)間很短,看上去多個(gè)線程在同時(shí)運(yùn)行。對(duì)于通訊這種需要花費(fèi)大量的時(shí)間來測(cè)試I/O 操作,同時(shí)又要保持響應(yīng)用戶其他操作的應(yīng)用程序來說,創(chuàng)建多線程是最佳選擇。本文介紹的是某公司開發(fā)的加油站監(jiān)控系統(tǒng)中使用的多線程的串行通信設(shè)計(jì)方法,可對(duì)從事類似開發(fā)任務(wù)的人員有所幫助。2系統(tǒng)結(jié)構(gòu)加油站

4、監(jiān)控系統(tǒng)一般采用MCS 251單片機(jī)作為前端加油機(jī)的主控CPU 芯片,利用計(jì)算機(jī)作為后臺(tái)監(jiān)控機(jī)來實(shí)現(xiàn)實(shí)時(shí)監(jiān)控、司機(jī)自助式加油、晚間無人加油、數(shù)據(jù)庫管理以及應(yīng)用IC 卡技術(shù)和油站網(wǎng)絡(luò)實(shí)現(xiàn)加油一卡通等。系統(tǒng)的組成結(jié)構(gòu)如圖1所示。后臺(tái)監(jiān)控機(jī)是系統(tǒng)的心臟,要求后臺(tái)監(jiān)控軟件具有良好的兼容性和擴(kuò)展性,所以獨(dú)立設(shè)計(jì)了一套基于多線程的通訊軟件,物理位置與后臺(tái)監(jiān)控軟件在同一臺(tái)計(jì)算機(jī)上,它與前端的加油機(jī)串口通信是典型的主從式,在硬件上通過moxa 公司的多串口卡實(shí)現(xiàn),與后臺(tái)監(jiān)控軟件通過標(biāo)準(zhǔn)的Windows 消息機(jī)制實(shí)現(xiàn)數(shù)據(jù)交換 。圖1加油機(jī)監(jiān)控系統(tǒng)結(jié)構(gòu)3多線程程序設(shè)計(jì)1Windows 串行通信機(jī)理Windows

5、是與設(shè)備無關(guān)的操作系統(tǒng),在通常的情況下,嚴(yán)格禁止用戶模式的應(yīng)用程序直接對(duì)硬件進(jìn)行訪問,應(yīng)用程序?qū)τ布脑L問是通過Win32子系統(tǒng)傳遞IRP 給I/O 管理器,再傳遞給合適的硬件驅(qū)動(dòng)程序,由硬件驅(qū)動(dòng)程序?qū)τ布M(jìn)行訪問,驅(qū)動(dòng)程序提供應(yīng)用程序接口函數(shù)(API 為應(yīng)用程序調(diào)用。具體結(jié)構(gòu)如圖2所示。對(duì)PC 機(jī)串口進(jìn)行操作,至少要有以下幾個(gè)步驟:打開進(jìn)行通訊的串口;串口進(jìn)行初始化;根據(jù)通訊事件對(duì)數(shù)據(jù)進(jìn)行發(fā)送和接收;通訊結(jié)束關(guān)閉通訊串口 。圖2應(yīng)用程序操作硬件機(jī)理2設(shè)計(jì)思想串口操作方式的選擇在加油站監(jiān)控系統(tǒng)串口通信中,采取的是典型的主從式通信方式(即前端加油機(jī)完全處于被動(dòng)應(yīng)答狀態(tài),應(yīng)用程序發(fā)送、接收數(shù)據(jù)時(shí),

6、對(duì)I/O 口的讀寫操作有兩種方式,即同步方式與異步方式(重疊。同步方式執(zhí)行時(shí),必須等到事件和錯(cuò)誤的發(fā)生才能返回,可能會(huì)導(dǎo)致線程的阻塞。異步方式執(zhí)行時(shí),將等待的動(dòng)作放到后臺(tái)去執(zhí)行,再由程序去判斷是否已經(jīng)完成,即使操作未完成函數(shù)也會(huì)立即完成,避免了同步的缺陷。所以,系統(tǒng)設(shè)計(jì)采用了異步方式讀取I/O 口。線程間的同步在有若干線程并行運(yùn)行的環(huán)境里,為避免對(duì)共享資源的訪問沖突,同步各不同線程活動(dòng)的能力非常重要。線程同步有以下幾種基本的類型:事件、互斥、臨界區(qū)、信號(hào)量等。本文采用Event 事件對(duì)象,用于發(fā)出可以訪問變量過程的信號(hào)。消息方式的多線程設(shè)計(jì)理念在串口通訊中 ,很多開發(fā)人員經(jīng)常采用端口巡回監(jiān)控方

7、式(使用一個(gè)和多個(gè)TIM ER 事件不停地對(duì)串口巡回監(jiān)控,由于Windows 定時(shí)器消息不是異步的,而且WM -TIM ER 消息是低優(yōu)先級(jí)的,必須和其他消息一起排隊(duì),一旦其他應(yīng)用程序的執(zhí)行時(shí)間被推遲或縮短,勢(shì)必造成定時(shí)時(shí)間的精確,使通信緩沖區(qū)發(fā)生溢出,在加油站監(jiān)控系統(tǒng)的串口通訊中,通過一個(gè)串口同時(shí)控制十幾臺(tái)加油機(jī)(有時(shí)甚至更多,如果采用這種方式,勢(shì)必會(huì)造成系統(tǒng)資源的極度浪費(fèi),同時(shí)通訊的實(shí)時(shí)性也不能得到保證。鑒于此,筆者采用了消息方式的多線程設(shè)計(jì)方案, 使問題得到很好的解決。3程序設(shè)計(jì)應(yīng)用程序介紹根據(jù)多線程程序的開發(fā)方法,該串口通信軟件由負(fù)責(zé)人機(jī)交互的多線程和對(duì)串口進(jìn)行處理的后臺(tái)輔助線程組成。

8、主線程是串口通信程序的管理者,用來初始化串口(通過調(diào)用Win32API 函數(shù),自定義通信事件消息,創(chuàng)建、刪除輔助線程,進(jìn)行人機(jī)交互的操作及協(xié)調(diào)好各線程運(yùn)行。應(yīng)用程序流程如圖3所示。圖3串口通信程序框圖后臺(tái)輔助線程分析后臺(tái)輔助線程是串口通信軟件的核心,包括串口監(jiān)視線程,讀線程,寫線程。串口監(jiān)視線程在后臺(tái)對(duì)串口進(jìn)行實(shí)時(shí)監(jiān)視,當(dāng)監(jiān)測(cè)到預(yù)定義的事件時(shí),立即調(diào)用相應(yīng)的線程進(jìn)行處理并向主線程發(fā)相應(yīng)的消息,如接收到數(shù)據(jù)就調(diào)用讀線程自動(dòng)接收數(shù)據(jù)并進(jìn)行處理,同時(shí)向主線程發(fā)送接收到數(shù)據(jù)的消息(WM -COMMRECV ,串口監(jiān)視線程發(fā)送完此消息后就執(zhí)行后面的程序代碼,繼續(xù)對(duì)串口進(jìn)行監(jiān)視,做到了處理消息與監(jiān)視串口兩

9、不誤,既保證了通訊的實(shí)時(shí)性,又避免了資源的浪費(fèi),其處理過程如圖4所示。圖4串口監(jiān)視線程的實(shí)現(xiàn)271控制工程第11卷4程序?qū)崿F(xiàn)1程序初始化首先利用Win32API函數(shù)創(chuàng)建串口事件對(duì)象,即讀、寫線程事件和關(guān)閉線程事件。當(dāng)設(shè)備驅(qū)動(dòng)對(duì)硬件初始化后,打開串口就像讀一個(gè)文件一樣,打開失敗,則程序返回。否則,通過Setupcomm設(shè)置輸入、輸出緩沖區(qū)大小, G etcommstate獲得目前通信端口狀態(tài),通過dcb (設(shè)備程序塊和Setcommstate設(shè)置通信端口狀態(tài),以及利用Setcommmask設(shè)置通信掩碼等。下面是部分程序代碼。ReadEvent:=CreateEvent(nil,true,true

10、,nil;/創(chuàng)建讀事件If ReadEvent=null then beginMessageBox(0,ReadEventCreate Error,Notice,MB-O K;Exit;WriteEvent:=CreateEvent(nil,true,true,nil;/建寫事件If ReadEvent=null then beginMessageBox(0,ReadEventCreate Error,Notice,MB-O K;Exit;Shut Event:=CreateEvent(nil,true,true,nil;/創(chuàng)建關(guān)閉線程事件If ReadEvent=null then begi

11、nMessageBox(0,ReadEventCreate Error!,Notice,MB-O K;exit;end;hcomm:=createfile(com1,generic-reador generic-write,0,nil,open-existing,file-flag-overlaped,0/異步(重疊方式if(hcomm=invalid-handle-valuethen beginMessageBox(0,打開通信端口錯(cuò)誤!,MB-O K;end;EvWait:=EV-RXCHAR+EV-TXEMPT Y+EV-ERR;If not SetCommMask(hcomm,EvWa

12、itthenMessagebox(0,設(shè)置錯(cuò)誤!,MB-O K;/設(shè)置事件掩碼; Comm.-Thread:=create Thread(nil,0,CommWatch, nil,0,ThreadID/創(chuàng)建輔助線程;2后臺(tái)輔助線程后臺(tái)輔助線程由讀線程、寫線程和串口監(jiān)視線程組成。下面是部分程序代碼。fillchar(lpol,sizeof(Toverlapped,0;/lpol:Pover2 lappe;while true do beginwait:=waitcommevent(hcomm,Evwait,lpol/等待串行口事件if not wait then beginerr:=G etLa

13、st Error(;/錯(cuò)誤處理;endelseClearCommError(hcomm,errorflag,comstat;Evwait:=WaitforMultipleObjects(3,eventarray,false,infi2 nite;case Evwait of0:;/結(jié)束輔助線程1:;/讀線程2:;/寫線程end;end;3讀線程當(dāng)讀事件ReadEvent變?yōu)榘l(fā)信號(hào)狀態(tài)時(shí),調(diào)用讀線程從緩沖區(qū)里讀取數(shù)據(jù),寫線程與其類似,下面給出讀線程部分程序代碼。clear:=ClearCommError(hcomm,errorflag,comstat;if clear then begincbn

14、um:=ComStat.cbInQue;read:=ReadFile(hcomm,InputBuffer,CommStat.cbInQue,dwNumberOfBytesRead,Read-os;/讀取串口數(shù)據(jù)if not read then beginerr:=G etLast Error(;end;Reset Event(readevent;/復(fù)位事件對(duì)象PostMessage(htemp,WM-COMMRECV,hcomm, 0;/向主線程發(fā)消息end;5結(jié)語在PC機(jī)與單片機(jī)、PLC等下位機(jī)的串口通訊中,如何保證通訊的效率及實(shí)時(shí)性以及節(jié)約系統(tǒng)的資源是設(shè)計(jì)者關(guān)心的問題。筆者利用上面介紹的方

15、法,在Delphi的開發(fā)環(huán)境下,成功地開發(fā)了加油站監(jiān)控系統(tǒng)中的基于多線程的串口通訊程序,運(yùn)行結(jié)果良好,可供廣大同行參考。371第2期吳先亮等:基于多線程的串口通信軟件的設(shè)計(jì)與實(shí)現(xiàn)參考文獻(xiàn):1Chris Cant.孫義,馬莉波,國雪飛,等譯.WindowsWDM 設(shè)備驅(qū)動(dòng)程序開發(fā)指南M .北京:機(jī)械工業(yè)出版社,2000.2Charles Petzold.北京博彥科技發(fā)展有限公司譯.Windows 程序設(shè)計(jì)M .北京:北京大學(xué)出版社,1999.3Steve Teiceira.龍勁松,等譯.Xavier Pacheoo Delphi6開發(fā)人員指南M .北京:機(jī)械工業(yè)出版社,2002.4范逸之,陳立元

16、.Delphi 與RS 2232串行通信控制M .北京:清華大學(xué)出版社,2002.Programming of Serial Communication Design andImplement Based on Multi 2threadW U Xian 2liang ,L IU Chun 2sheng(College of Automation Engineering ,Nanjing University of Astronautics and Aeronautics ,Nanjing 210016,China Abstract :In light of disadvantages of

17、serial communication in real time and using of system resource ,the idea of asynchronous serial communication design based on the multi 2thread technology and self 2defined message is presented.The serial communica 2tion mechanism and thread synchronization are employed in the achievement to the ide

18、a.The way to 322bits operation system multi 2thread asynchronous serial communication programming is analyzed.The serial communication programming in Delphi language between PC and single 2chip is implemented in gas station computer central controlling system.And the idea and com 2mon steps of progr

19、amming and its implemented segment code are presented.The serial communication programming is devel 2oped successfully in gas station computer central controlling system.It promotes the automation of petroleum industry and helpes to develop automation of others correlation to petroleum industry.K ey

20、 w ords :multi 2thread ;serial communication ;Delphi ;message mechanism(上接第131頁4結(jié)論本文提出了使用最小方差自校正控制器來處理污水處理中的溶解氧濃度,并且通過仿真試驗(yàn)顯示出了這種控制策略的可行性。另外,通過上述的研究可以看出,空氣流量和氧氣吸收率是分析大型活性污泥系統(tǒng)的兩個(gè)重要參數(shù),考慮通風(fēng)密度的縱向和時(shí)間變化,本文使用適當(dāng)?shù)哪P屯耆锌赡軐?shí)現(xiàn)對(duì)表征活性污泥過程的氧氣吸收率以及氧氣傳送系數(shù)的在線估計(jì),從而實(shí)現(xiàn)對(duì)溶解氧濃度的有效控制。參考文獻(xiàn):1Holmberg A.Modeling of the activated

21、sludge pro 2cess for microprocessor 2based state estimation and controlJ .Water Research ,1982,16(5:123321246.2Andrews J F.Dynamic models and control strategies for wastewater treatment processes J .Water Re 2search ,1974,8(3:2612289.3Dold P L ,Marais G R.Evaluation of the general acti 2vated sludge

22、 model proposed by IAWPRC Task GroupJ .Water Science and Technology ,1986,18(6:63289.4杜樹新.污水生化處理過程建模與控制J .控制理論與應(yīng)用,2002,19(5:6602666.5Marsili 2libelli S.Adaptive estimation of bioactivities in the activated sludge process J .IEE Proc 2D ,1990,137(6:3492356.6謝新民,丁鋒.自適應(yīng)控制系統(tǒng)M .北京:清華大學(xué)出版社,2002.7李清泉.自適應(yīng)控制系統(tǒng)理論、設(shè)計(jì)與應(yīng)用M .北京:科學(xué)出版社,1990.Adaptive Control of Wastewater Treatment ProcessFA N S hi 2mei(College of Information Engineering ,Zhejiang University of Technology ,Hangzhou 310014,China Abstract :An a

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論