趙 沖
(湖北縱橫科技有限責任公司,宜昌443003)
PC機串口通信幾種編程方法探究與實現
趙 沖
(湖北縱橫科技有限責任公司,宜昌443003)
串口通信技術簡單成熟,性能可靠,價格低廉,所要求的軟硬件開發(fā)環(huán)境都很低,廣泛應用于計算機、自動控制及相關領域。PC機開發(fā)圖形界面軟件現階段主要使用VC6.0、C++Builder(C++)或者Vistual studio(C#)等開發(fā)軟件,其中,VC6.0歷史悠久,早期使用人數比較多,資料也相對豐富,但只適合比較有經驗的開發(fā)者。使用C#開發(fā)界面,軟件上手更快,相比VC來說也更簡單,更適合于初學者。針對實際開發(fā)過程中使用的兩種開發(fā)環(huán)境,對相應的串口通信所采用的不同的處理方法做了整理歸納,此類方法都經過驗證和長期測試,具有很強的實踐借鑒意義。
串口通信;編程;軟件
串口通訊(Serial Communication),是指外設和計算機間,通過數據信號線、地線等,按位進行傳輸數據的一種通訊方式。
串口是一種接口標準,它規(guī)定了接口的電氣標準,沒有規(guī)定接口插件電纜以及使用的協(xié)議。串口通信是一個字符一個字符地進行傳輸,每個字符一位一位地傳輸,并且傳輸一個字符時,總是以“起始位”開始,以“停止位”結束,字符之間沒有固定的時間間隔要求。
每一個字符的前面都有一位起始位(低電平),字符本身由7位數據位組成,接著字符后面是一位校驗位(檢驗位可以是奇校驗、偶校驗或無校驗位),最后是一位或一位半或二位停止位,停止位后面是不定長的空閑位,停止位和空閑位都規(guī)定為高電平。實際傳輸時每一位的信號寬度與波特率有關,波特率越高,寬度越小,在進行傳輸之前,雙方一定要使用同一個波特率設置。
在工作中使用PC機和其他設備進行串口通信,開發(fā)串口通信軟件較常使用的編程工具和語言主要有 VC6.0(使用 C 語言或者 C++)、VS2008(C#、VB、C語言、C++)等。在幾年的工作實踐中,根據這些編程工具和語言,開發(fā)了相應的圖形界面軟件,運行比較穩(wěn)定,有一定的參考價值,現在將具體的實現細節(jié)分享給大家,希望對大家在串口編程方面有所啟發(fā)。
使用SerialPort類實現串口通信的方法很簡單,SerialPort類提供了具體的函數來進行串口操作。具體的細節(jié)可以參考VS2008 MSDN。這里主要闡述如何進行串口接收。當串口緩沖區(qū)有數據來臨時,就調用DataReceived事件。而在這里它不會像單片機或者ARM進行串口通信時,串口接收緩沖區(qū)有一個字節(jié)就可以觸發(fā)一次中斷,有可能數個字節(jié)才會調用DataReceived事件。
1.首先定義了List對象buffer222來存放接收的數據。Private List
2.在接收過程中,考慮到不知道什么時候觸發(fā)DataReceived事件,每次讀取時都先獲取串口緩沖區(qū)可讀取的字節(jié)數,然后將這些數據全部讀取出來并添加到buffer222中。
3.查找一幀數據的幀頭和幀尾并進行處理。具體的實現細節(jié)如下:
此種方法還適用于VB.NET、VC++.NET編寫Windows窗體應用程序。
多線程串口編程工具CserialPort類是由Remon Spekreijse提供的免費串口類,它也封裝了一些函數來對串口進行操作。具體的函數網上都可以搜到,不再一一羅列。
用CserialPort類進行串口接收首先要進行WM_COMM_RXCHAR消息映射以及添加消息處理函數OnComm()。使用CserialPort類進行串口通信可以做到逐個字節(jié)進行接收,當串口接收緩沖區(qū)內有一個字符時,就會產生一個WM_COMM_RXCHAR消息,觸發(fā)OnComm()函數。
此方法具體操作步驟是:
1.找到連續(xù)的幀頭(可以是數個字節(jié));
2.接收剩余數據并將數據存儲在數組或者結構體中;
3.接收完成后對一幀數據進行校驗和幀頭幀尾判斷,如果校驗正確以及幀頭幀尾正確說明接收數據正確,此時再做后續(xù)處理。
具體代碼如下所示:
在很多485通信場合中,一般應用的是“一問一答”式的通信方式,即:主機呼叫從機,主機等待從機應答,主機下達指令。在這里使用C#中線程來實現這一過程。
1.利用SerialPort類初始化相應串口并打開串口;
2.創(chuàng)建AutoResetEvent對象等待串口數據就緒:
3.創(chuàng)建線程并啟動線程,使用線程需要添加System.Threading命名空間;
4.借助DataReceived事件獲取串口數據來臨:
5.編寫線程循環(huán)執(zhí)行:
以上闡述的各種方法是經過長期工作實踐測試的,具有穩(wěn)定可靠的優(yōu)點,分享給讀者希望給從事這方面工作的人提供一條思路。
[1]龔建偉,熊光明.Visual C++/Turbo C串口通信編程實踐[M].北京:電子工業(yè)出版社,2004.Gong Jianwei,Xiong Guangming.Visual C++/Turbo C serial communication programming practice[M].Beijing:Publishing House of electronics industry,2004.
[2]明日科技.C#從入門到精通[M].北京:清華大學出版社,2012.tomorrow technology.C#from entry to mastery[M].Beijing:Tsinghua University press,2012.
[3]Christian Nagel.C#高級編程[M].北京:清華大學出版社,2006.Christian Nagel.C#advanced programming[M].Beijing:Tsinghua University press,2006.
[4]譚浩強.C++程序設計[M].北京:清華大學出版社,2015.Tan Haoqiang.C++programming[M].Beijing:Tsinghua U-niversity press,2015.
[5]Stephen Prata.C++Primer Plus(第6版中文版)[M].北京:人民郵電出版社,2012.Stephen Prata.C++Primer Plus(sixth edition Chinese version)[M].Beijing:Posts&Telecom Press,2012.
[6]明日科技.Visual C++從入門到精通[M].北京:清華大學出版社,2012.tomorrow technology.Visual C++from entry to mastery[M].Beijing:Tsinghua University press,2012.
[7]孫鑫,余安萍.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.Sun Xin,Yu Anping.VC++in-depth explanation[M].Beijing:Publishing House of electronics industry,2006.
[8]馬克·米凱利斯(Mark Michaelis),埃里克·利珀特(Eric Lippert).C#6.0 本質論[M].北京:人民郵電出版社,2017.Mark Michaelis,Eric Lippert.ESSENTIAL C#6.0[M].Beijing:People's Posts and Telecom Press,2017.
Research and Implementation of Several Programming Methods for Serial Communication of PC
Zhao Chong
(Hubei 710 Cross Tech Co.Ltd.,Yichang 443003,China)
Serial communication technology is simple,mature,reliable and low cost,and the hardware and software development environment required is very low.It is widely used in computers,automatic control and related fields.At this stage,graphical interfaces software such as VC6.0,c++Builder(c++)or Vistual studio(c#)are mainly used in the PC development,among them,the VC6.0 has a long history,early users are more,and the data are relatively abundant,but is only suitable for experienced developers.Using c#development interface,the software can be mastered quickly and is easier than VC,so it is better for beginners.In view of the two kinds of development environment in the actualdevelopmentprocess,differentprocessing methods adopted by the corresponding serial communication are arranged and summarized.Such methods are validated and long-term tested,and has strong practical significance.
Serial communication; Programming; Software
事件編程的步驟如下:
10.3969/j.issn.1002-2279.2017.05.012
A
1002-2279-(2017)05-0044-03
趙沖(1985—),男,湖北宜昌人,工程師,主研方向:自動化和軟件開發(fā)。