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
賺錢方法
主站蜘蛛池模板: 久久免费精品琪琪| www.日韩三级| 欧美激情伊人| 特级毛片免费视频| 一本一本大道香蕉久在线播放| 免费毛片网站在线观看| 国产成人h在线观看网站站| 国产幂在线无码精品| 欧美中文字幕无线码视频| 亚洲综合激情另类专区| 国产91高清视频| 亚洲中文字幕无码mv| 最近最新中文字幕在线第一页| 亚洲视频无码| 99热国产这里只有精品无卡顿"| 国产麻豆永久视频| 婷婷伊人久久| 国产在线拍偷自揄拍精品| 韩国v欧美v亚洲v日本v| 亚洲黄色片免费看| 久久国产高清视频| a级毛片免费网站| 狠狠做深爱婷婷综合一区| 中文成人无码国产亚洲| 一级毛片在线免费视频| 国产日本一区二区三区| 国产成人亚洲精品色欲AV | 欧美国产日韩在线观看| 成人午夜在线播放| 视频一本大道香蕉久在线播放 | 国内99精品激情视频精品| 手机在线免费不卡一区二| 欧美中文字幕第一页线路一| 欧美黄网站免费观看| 国产香蕉一区二区在线网站| 白浆免费视频国产精品视频 | 男女精品视频| 人妻丰满熟妇av五码区| 欧美一级高清片欧美国产欧美| 亚洲天堂视频在线播放| 99视频全部免费| 国产日韩欧美精品区性色| 中文字幕久久亚洲一区| 精品国产免费观看| 在线亚洲精品自拍| 91精品国产情侣高潮露脸| 国产主播在线观看| 伊人查蕉在线观看国产精品| 全部毛片免费看| a天堂视频| 亚洲欧美成人在线视频| 18禁高潮出水呻吟娇喘蜜芽| 好吊色妇女免费视频免费| 成AV人片一区二区三区久久| 99在线视频网站| 四虎精品国产AV二区| 国产免费人成视频网| 美女裸体18禁网站| 免费在线视频a| 黄色在线网| 免费一级无码在线网站| 免费人成网站在线高清| 最新国产高清在线| 亚洲美女一区二区三区| 免费一级毛片| 2021天堂在线亚洲精品专区| 中文字幕第4页| 2021国产精品自拍| 精品综合久久久久久97| 亚洲高清中文字幕| 8090午夜无码专区| 久久久久人妻一区精品色奶水 | 99久久这里只精品麻豆| 国产色婷婷| 伊人无码视屏| 男女性午夜福利网站| 欧美午夜在线视频| 国产精品福利在线观看无码卡| 久久综合九色综合97婷婷| 狠狠色狠狠色综合久久第一次| 搞黄网站免费观看| 动漫精品中文字幕无码|