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
賺錢方法
主站蜘蛛池模板: 亚洲人成网18禁| 伊大人香蕉久久网欧美| aa级毛片毛片免费观看久| 人妻丝袜无码视频| av性天堂网| 婷婷亚洲视频| 波多野结衣久久高清免费| 久一在线视频| 人人澡人人爽欧美一区| 在线播放精品一区二区啪视频| 91精品专区国产盗摄| a在线亚洲男人的天堂试看| 精品国产污污免费网站| 久久久黄色片| 久久福利片| 亚洲资源在线视频| 亚洲国产亚洲综合在线尤物| 欧美在线中文字幕| 国产精品毛片在线直播完整版 | 亚洲精品麻豆| 久久九九热视频| 国产小视频免费| 天天综合网色中文字幕| 22sihu国产精品视频影视资讯| 天天色综网| 国产在线自在拍91精品黑人| 国产麻豆va精品视频| 免费亚洲成人| 日本不卡在线| 色香蕉影院| 亚洲精品无码av中文字幕| 久久久久88色偷偷| 18禁影院亚洲专区| 久久婷婷国产综合尤物精品| 欧美激情二区三区| 国产精品九九视频| 国产福利拍拍拍| 国产国产人在线成免费视频狼人色| 一边摸一边做爽的视频17国产| 谁有在线观看日韩亚洲最新视频| 熟女成人国产精品视频| 91在线国内在线播放老师| 最新国产网站| 欧美日韩国产一级| 午夜啪啪网| 天天爽免费视频| 97se亚洲综合在线| 亚洲天堂视频网| 国产欧美视频在线| 亚洲av综合网| 亚洲国产91人成在线| 久久99热66这里只有精品一| 99热这里只有精品久久免费| 黄色在线网| 欧美精品v欧洲精品| 国产在线观看成人91| 久久人与动人物A级毛片| 在线日韩一区二区| 美女啪啪无遮挡| 国产91全国探花系列在线播放| 噜噜噜综合亚洲| 色婷婷狠狠干| 欧美激情伊人| 人妻无码中文字幕一区二区三区| 无码福利日韩神码福利片| 亚洲欧美成人综合| 亚洲不卡网| 久久人妻xunleige无码| 日本久久久久久免费网络| 尤物国产在线| 一区二区影院| 国产日韩欧美一区二区三区在线 | 五月天久久婷婷| 精品黑人一区二区三区| 激情网址在线观看| 青青青国产在线播放| 国产精品美女网站| 99在线观看精品视频| 小蝌蚪亚洲精品国产| 亚洲水蜜桃久久综合网站| 欧美怡红院视频一区二区三区| 国产毛片网站|