999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

三種串口通訊方法的實現與比較

2017-06-15 15:07:01劉平賈林林
河南科技 2017年7期
關鍵詞:方法系統

劉平 賈林林

(中國空空導彈研究院,河南洛陽 471009)

三種串口通訊方法的實現與比較

劉平 賈林林

(中國空空導彈研究院,河南洛陽 471009)

一般測控設備在工作過程中,需要上位機與下位機之間不斷通訊,完成系統內部指令的下發和數據信息上傳功能,通常的做法是通過串口進行通訊。本文介紹3種常用的串口通訊方法,對每種方法的具體操作步驟進行詳細的分析,并對各自的優缺點進行比較。實踐表明,使用多線程串口通訊技術在整個測試過程中既能夠滿足產品測試任務的需要,又能夠及時響應串口事件,完美地解決了系統的邏輯并發和物理并發問題,滿足系統研制的需求。

串口通訊;單線程;多線程

在一般的測控設備工作過程中,當對產品進行測試時,需要設備的上位機和下位機之間保持通信,完成系統內部的下發指令和上傳數據信息功能。為了滿足產品測試任務的并行性,并能夠及時響應串口事件,通常的做法是采用多線程監聽串口事件的設計方式。本文通過設計實例比較3種串口通訊方法的優劣,為類似的設備研發提供一些有用的參考。

1 使用MicrosoftVisualC++提供的MSComm通信控件

MSComm是屬于Microsoft公司Visual C++提供的Active X控件,用于在簡化Windows下進行串口通信編程。其提供了一系列的標準通信命令的接口,使得通過串口收發數據變得極為簡便[1]。MSComm控件提供了2種處理通信問題的方法。

1.1 串口活動法

由事件驅動通信,在處理串口活動方面具有很強大的功能。當有事件發生時,利用OnComm事件捕獲和處理各種通信事件,以獲取該事件的發生時間,同樣該過程也可以通過捕獲和處理通信中錯誤的完成。

1.2 程序檢測法

常用于小型的自含程序,每當用戶的應用程序執行完某一對串行通信接口的操作后,通過查詢CommEvent的屬性以便對該程序執行結果或者某事件是否發生進行確認。圖1給出了Visual C++的MSComm控件具體操作步驟。

首先,通過添加控件的方式加入MSComm控件,并定義該控件類的對象。其次,初始化該控件的屬性,通過設置相應的屬性,可以省去打開串口與關閉串口等操作,并且可以設置相應的串口號、波特率、奇偶校驗位、數據停止位等參數。再者,捕捉串口事件既可以通過查詢的方法從端口獲取數據,也可以采用通過事件驅動的方法。當有諸如接收數據之類的事件發生時通知程序,并由程序響應捕獲的消息完成對前面發生的通信事件的處理,也就是通過串口事件消息處理函數OnComm()中完成操作,這種事件驅動方法應用最為廣泛。最后,串口的讀寫分別通過GetInput()函數讀取接收緩沖區的字符,SetOutput()函數向發送緩沖區寫入數據流的方式實現,極為簡單,這兩個函數的原型分別是使用VARIANT數據結構的VARIANTGetput()及void SetOutput(const Variant& newValue)。

圖1 MSComm控件實現串口通訊流程圖

2 使用單線程實現串口通信類

Visual Studio中將串口虛擬成文件,所有的操作都模擬成對文件的讀寫,這樣程序有一個統一的編程界面,簡化了編程接口,同時文件的處理屏蔽掉了硬件的端口和地址等特征。使用虛擬的緩沖區代替了實際的硬件緩沖區,使得程序開發只需要單一地關注邏輯上的輸入與輸出關系。圖2給出了采用單線程方式完成串口通訊的步驟[2]。

2.1 打開串口并獲取串口資源句柄

在使用單線程方式進行串口通信的整個過程中,始終存在一種動作,即程序在通過CreatFile()函數指定串口設備及相關的操作屬性后返回一個用于后續通信操作的句柄。同時,可在進行函數參數設置時設計異步I/O通訊方式,保證半雙工通訊。

2.2 串口設置

單線程打開某一串口后,該端口屬性將被設置成默認值,才是可以調用GetCommState(&dcb)函數讀取當前串口設備控制塊DCB(Device Control Block),然后根據具體的需求,修改完DCB后再使用SetCommState(&dcb)函數將其寫入。

圖2 單線程串口通訊方式流程圖

在進行同步讀寫時,應注意操作超時,并對其進行特殊控制,以防在通信過程中由于未知原因導致不可預測事件發生。這類事件包括端口正在接收數據突然被中斷或者發送數據突然停止等,這類情況有可能會造成I/O線程掛起或者線程被無限阻塞。因此,必須在程序中通過超時設置來判斷通信是否異常并決定是否作相應處理,可以采用COMMTIMEOUTS結構完成設置后調用SetCommTimeouts(hComm,&timeouts)將結果寫入。此外,在設置緩沖時,緩沖區容量應與通信速率相匹配地進行設置,較大的容量滿足更高的速率需求,但是應在設備驅動程序所能處理的容量范圍限制以下。

2.3 串口讀寫

單線程串口通信方式主要通過運用包括ReadFile() 與WriteFile()等在內的API函數完成串口讀寫。當采用異步通信方式時,這兩個函數的最后一個參數為一非空指針并指向OVERLAPPED結構,當讀寫函數的返回值為FALSE時,程序調用GetLastError()函數;當返回值為ERROR_IO_PENDONG時,則表明I/O操作被掛起,表明該操作將轉入后臺并等待執行。在操作中可以使用WaitForS-ingleObject()函數等待結束信號,同時可以設置最長的等待時間。

3 多線程下實現串口通信

在某成像導引產品測控系統正常測試過程中,要求在圖像采集測試的同時保持串口通訊。比如隨時接收串口數據,處理相應數據并發出控制命令;或者設備不斷地采集產品數據,并同時或者在設定的某一故障發生時向某個相關的監控窗口及時發送通知消息,這些都需要在測控程序中創建用于監控線程的端口。

Win32能夠區分2種不同類型的線程,分別稱之為用戶界面線程UI(User Interface Thread)和工作者線程(Worker Thread)[3]。2種線程的區別在于,用戶界面線程可在其他線程執行之外響應用戶或者系統所產生的事件和信息,其包含信息泵或者信息循環;而工作者線程則沒有消息機制與用戶界面,是在后臺執行包括監視串口事件在內的各種計算和維護任務的。

程序開始某一個線程是通過調用AfxBeginThread()函數自動創建一個CWinThread對象的方式進行的。圖3給出了多線程實現串口通訊流程圖[4]。

以下任意某一事件均可以終止線程:①線程函數返回;②線程函數的正常退出;③在異常情況下,使用線程的句柄調用TerminateThread()函數退出;④線程所屬的進程被終止。

在本測控系統設計中,如果串口通訊線程出現錯誤,將調用TerminateThread()來強行結束線程。如果通訊正常,函數將正常返回。

在以后系統擴展中,可能會有多個串口同時工作,可以分別對各個端口建立監控線程來實現對所有端口的同時監控,也可以將此設計方式應用于分布式網絡的構建中,在此不再詳細介紹。

4 3種串口通信方法的優缺點比較

Visual C++提供的MSComm控件在完成基于對話框應用程序的串口通信任務方面,由于具有更為簡單的編程原理和方法,所以不需要了解具體的細節就可以容易實現。這樣帶來的負面作用是因為只能在對話框中使用,MSComm控件編程缺乏靈活性,限制了串口通信的傳輸速率。

單線程串口通信因為可以建立自定義的通信類,所以具有最高的靈活性,但是其編程復雜,對程序員的專業化程度要求很高,同時還只適用于監控系統,而且由于不能同時發送和接收數據,實時性不高,功能受到限制。

多線程串口通信方法具有較強的實時性,更為容易實現在多端口間獨立、準確的通信,這樣使得該方法得到了更廣泛的應用。同時,多線程能夠使程序員方便地榨取到更多的CPU硬件資源,提高整個系統的通訊效率。

圖3 多線程串口通訊流程圖

另外,當系統中存在各種邏輯并發和物理并發問題時,多線程技術在解決掉這一類問題時更具有優勢,這樣使得軟件的諸如吞吐量、計算速度和響應時間等各項技術指標均可以得到改善。多線程串口通信技術可以提高軟件的執行效率和運行穩定性,更合理地利用系統資源,并提高軟件代碼的可讀性。

某成像導引產品測控系統作為綜合性的復雜系統,數據需要通過多個串口在不同的子系統端口之間進行獨立傳輸,而且對測試實時性有很高的要求。經過驗證采用多線程編碼實現串口通訊功能能夠取得很好的效果。整個測控系統工作情況良好,在實際應用中要注意每次讀完數據要及時清空緩沖區,否則會導致緩沖區堵塞,造成新數據無法接收的情況。

[1]Mark E.Russinovisn.Windows2000內部揭秘[M].北京:機械工業出版社,2001.

[2]冀榮華,祁力鈞,傅澤田.基于Visual C++的精確定時技術與應用[J].農機化研究,2007(5):191-193.

[3]張旭東,付強,何松華,等.基于PCI接口的多通道高速數據采集系統[J].數據采集與處理,2000(2):240-244.

[4]王洪訊,趙天云,畢篤彥,等.高速偵察圖像數據的獲取和緩沖[J].微電子學和計算機,2004(10):82-85.

Implementation and Comparison of Three Serial Communication Methods

Liu PingJia Linlin
(China Airborne Missile Academy,Luoyang Henan 471009)

In the process of general measurement and control equipment,the communication between the host computer and the lower computer is needed to complete internal command down function and the data upload function, the usual practice is to communicate through the serial port.This paper introduced three kinds of commonly used serial communication method,the specific operation steps of each method were analyzed in detail,and their advantages and disadvantages were compared.Practice shows that the use of multi thread serial communication technology in the entire test process can not only meet the needs of product testing tasks,but also in response to serial port events, which solve the problem of logical concurrency and physical concurrency,and meet the requirements of system development.

serial communication;single thread;multithread

TP311.1

A

1003-5168(2017)04-0037-03

2017-03-06

劉平(1981-),男,工程師,研究方向:紅外導引總體技術。

猜你喜歡
方法系統
Smartflower POP 一體式光伏系統
工業設計(2022年8期)2022-09-09 07:43:20
WJ-700無人機系統
ZC系列無人機遙感系統
北京測繪(2020年12期)2020-12-29 01:33:58
基于PowerPC+FPGA顯示系統
學習方法
半沸制皂系統(下)
連通與提升系統的最后一塊拼圖 Audiolab 傲立 M-DAC mini
用對方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
賺錢方法
主站蜘蛛池模板: 日韩高清成人| 亚洲黄色激情网站| 91精品国产91欠久久久久| 真人高潮娇喘嗯啊在线观看 | 高清久久精品亚洲日韩Av| 色老二精品视频在线观看| 久久永久免费人妻精品| 国产精品久久久久久久久久98| 成人福利在线观看| 国产在线麻豆波多野结衣| 在线免费无码视频| 日本AⅤ精品一区二区三区日| 91青草视频| 日韩精品一区二区三区免费| 色男人的天堂久久综合| 女同国产精品一区二区| 丰满的熟女一区二区三区l| 国产精品极品美女自在线| 精品久久国产综合精麻豆| 国产a v无码专区亚洲av| 狠狠综合久久| 国产一区免费在线观看| 青青青视频91在线 | 日本人妻一区二区三区不卡影院| 久久国产精品77777| 国产乱子伦视频三区| 日本高清免费不卡视频| 欧美国产在线看| 伊人久久大香线蕉成人综合网| 亚洲男女天堂| 久久国产精品波多野结衣| 亚洲高清中文字幕| 亚洲日本在线免费观看| 欧美日本在线观看| 亚洲欧美在线看片AI| 国产精品黄色片| 亚洲欧美日韩另类在线一| 色婷婷综合激情视频免费看 | 91美女视频在线| 波多野结衣一区二区三视频 | AV不卡国产在线观看| 重口调教一区二区视频| 久久久久久国产精品mv| 国产婬乱a一级毛片多女| 亚洲国产日韩视频观看| 国产成人艳妇AA视频在线| AV不卡无码免费一区二区三区| 色爽网免费视频| 日本欧美中文字幕精品亚洲| 免费毛片a| 无码人中文字幕| 亚洲一区二区在线无码| 嫩草在线视频| 影音先锋亚洲无码| 成人看片欧美一区二区| 国产成人免费观看在线视频| 国产高潮视频在线观看| 久久久亚洲色| 99精品在线看| 亚洲福利片无码最新在线播放| a在线亚洲男人的天堂试看| 狠狠色婷婷丁香综合久久韩国 | 伊人成人在线视频| 88国产经典欧美一区二区三区| 亚洲AⅤ永久无码精品毛片| 国产白浆在线| 国产午夜人做人免费视频中文| 久久国产精品77777| 91九色最新地址| 尤物成AV人片在线观看| 国产香蕉在线视频| 免费观看三级毛片| 日日碰狠狠添天天爽| 四虎影视8848永久精品| 免费高清毛片| 中文无码伦av中文字幕| 天天综合天天综合| 国产精品真实对白精彩久久| 亚洲一区免费看| 东京热高清无码精品| 精品三级在线| 制服丝袜一区二区三区在线|