劉東
摘要:串口通信廣泛應用于工業(yè)控制領域,是一種最常見的通信技術,開發(fā)串口通信軟件是必不可少的。由于編程語言VisualStudio的不斷升級,VisualStudio.Net中采用功能較強的SerialPort類替換低版本中的MSComm控件。該文以開發(fā)實例詳細介紹VB.net編程環(huán)境中采用SerialPort類如何開發(fā)串口通信軟件。
關鍵詞:串口通信;VB.net;SerialPort;巡檢系統(tǒng)
中圖分類號:TP273 文獻標識碼:A 文章編號:1009-3044(2012)34-8304-04
1概述
串口通信(SerialCommunications),是指外設和計算機間,通過數(shù)據(jù)信號線、地線、控制線等,按位進行傳輸數(shù)據(jù)的一種通訊方式。串口通信是計算機上一種常用的設備通信協(xié)議,串行接口按電氣標準及協(xié)議來分包括RS-232C、RS-422、RS485等,串口通信方便易行,廣泛應用于工業(yè)測控領域。
在.NET平臺下使用VB.NET語言實現(xiàn)串口通信主要有三種方法:一是采用VB6.0中的MSComm控件;二是采用微軟在.NET2.0及其以后版本提供的內(nèi)置的串口操作類SerialPort;三是采用第三方API函數(shù)。該文主要介紹NETFramework2.0類庫包含了SerialPort類。
2串口通信原理
串口通信是按位(bit)發(fā)送和接收字節(jié)。盡管比按字節(jié)(byte)的并行通信慢,但是串口可以在使用一根線發(fā)送數(shù)據(jù)的同時用另一根線接收數(shù)據(jù)。它很簡單并且能夠?qū)崿F(xiàn)遠距離通信。IEEE488定義串口通信長度可達1200米。串口用于ASCII碼字符的傳輸。通信使用3根線完成,分別是地線、發(fā)送、接收。由于串口通信是異步的,端口能夠在一根線上發(fā)送數(shù)據(jù)同時在另一根線上接收數(shù)據(jù)。其他線用于握手,但不是必須的。串口通信最重要的參數(shù)是波特率、數(shù)據(jù)位、停止位和奇偶校驗。對于兩個進行通信的端口,這些參數(shù)必須匹配。
3SerialPort類介紹
在VB6.0中編寫串口通訊程序,一般都使用MicrosoftCommunicationControl(簡稱MSComm)的通訊控件實現(xiàn)。隨著微軟VisualStudio不斷升級,VisualStudio.Net沒有將MSComm控件加入控件庫,而是在NETFramework2.0類庫包含了SerialPort類,實現(xiàn)串口通訊的多種功能。該文詳細介紹VB.net語言中的SerialPort類,實現(xiàn)上、下位機串口通信軟件的設計方法。SerialPort類具體介紹如下:
3.1命名空間
System.IO.Ports命名空間包含了控制串口重要的SerialPort類,該類提供了同步I/O和事件驅(qū)動的I/O、對管腳和中斷狀態(tài)的訪問以及對串行驅(qū)動程序?qū)傩缘脑L問,所以在程序代碼起始位置需加入UsingSystem.IO.Ports。
3.2串口的通訊參數(shù)
串口通訊最常用的參數(shù)就是通訊端口號及通訊格式(波特率、數(shù)據(jù)位、停止位和校驗位)
PortName屬性:獲取或設置通信端口,包括但不限于所有可用的COM端口,該屬性返回類型為String,PortName返回的值為COM1、COM2……。
BaudRate屬性:獲取或設置串行波特率。它表示每秒鐘傳送的bit的個數(shù),一般為9600、19200等。
Parity屬性:獲取或設置奇偶校驗檢錯方式。Parity類型中枚舉了Odd(奇)、Even(偶)、Mark、None、Space。
DataBits屬性:獲取或設置每個字節(jié)的標準數(shù)據(jù)位長度。這是衡量通信中實際數(shù)據(jù)位的屬性,取值一般為6、7、8。
StopBits屬性:獲取或設置每個字節(jié)的標準停止位數(shù)。取值為None、One、OnePointFive、Two。
Encoding屬性:獲取或設置傳輸前后文本轉(zhuǎn)換的字節(jié)編碼。SerialPort默認的Encoding是ASCII方式,這種方式傳輸漢字存在亂碼問題,所以在實際應用中,采用Unicode編碼方式。
3.3串口的打開和關閉方法
Open()方法:打開一個新的串行端口連接。
Close()方法:關閉端口連接,將IsOpen屬性設置為false,并釋放內(nèi)部Stream對象。
3.4數(shù)據(jù)的發(fā)送和讀取常用方法
Write()方法:將數(shù)據(jù)寫入串行端口輸出緩沖區(qū)。
WriteLine()方法:將指定的字符串和NewLine值寫入輸出緩沖區(qū),即為輸出并換行。
ReadLine()方法:一直讀取到輸入緩沖區(qū)中的NewLine值,即為讀入并換行。
ReadTo()方法:一直讀取到輸入緩沖區(qū)中的指定Value的字符串。
讀取串口緩沖區(qū)的方法有,其中除了ReadExisting和ReadTo,其余的方法都是同步調(diào)用,線程被阻塞直到緩沖區(qū)有相應的數(shù)據(jù)或大于ReadTimeOut屬性設定的時間值后,引發(fā)ReadExisting異常。
3.5常用事件
DataReceived事件:表示將處理SerialPort對象的數(shù)據(jù)接收事件的方法。在接收到了[ReceivedBytesThreshold]設置的字符個數(shù)或接收到了文件結(jié)束字符并將其放入了輸入緩沖區(qū)時被觸發(fā)。
ErrorReceived事件:表示處理SerialPort對象的錯誤事件的方法。
3.6SerialPort的使用
串口通訊的流程:先設置串口號及波特率、數(shù)據(jù)位、停止位和校驗位,再打開端口連接,發(fā)送數(shù)據(jù),接收數(shù)據(jù),最后關閉端口連接這樣幾個步驟。實時采集或巡檢系統(tǒng)只需要配置一次串口通信參數(shù),就循環(huán)發(fā)送指令和讀取串口數(shù)據(jù)。
數(shù)據(jù)接收的設計方法比較重要,采用輪詢的方法比較高效,但是得精確計算輪詢延時時間,在VB中的延時方法中一般調(diào)用API中DOEvents方法處理。也可采用DataReceived事件觸發(fā)的方法,合理的設置ReceivedBytesThreshold的值,若接收的是定長的數(shù)據(jù),則將ReceivedBytesThreshold設為接收數(shù)據(jù)的長度,若接收數(shù)據(jù)的結(jié)尾是固定的字符或字符串則可采用ReadTo的方法或在DataReceived事件中判斷接收的字符是否滿足條件。
4設計開發(fā)實例
4.1串口通信參數(shù)設置界面設計
下面以“十六路采集元巡檢系統(tǒng)為例”介紹串口通信的開發(fā)過程。首先設計串口通信設置界面,如圖1所示:
實例中通信延時為對多路信息采集的時間間隔,100即為0.1秒。并設置了巡檢的起始通道與終止通道,將通信配置信息寫入set.ini文件中,方便后期通信重復調(diào)用。
4.2串口通信實現(xiàn)
4.2.1串口配置
利用函數(shù)讀取set.ini中的配置信息,并初始化SerialPort控件。
4.2.2串口巡檢采集
利用串口循環(huán)采集16路通道中的數(shù)據(jù)采集儀表的實時采集數(shù)據(jù),并實時顯示,程序及界面如圖2所示。
函數(shù)realtime()函數(shù),完成了對串口十六通道采集儀表數(shù)據(jù)的循環(huán)采集,TimeDelay()函數(shù)完成對通道巡檢采集的延時程序,具體延時時間可根據(jù)具體儀表通信響應時間在通信設置界面可修改。現(xiàn)在的筆記本等電腦都無穿行接口,需要外接usb轉(zhuǎn)串口的轉(zhuǎn)接頭或無線通信模塊,無線通信因通信距離、環(huán)境的影響會出現(xiàn)通信錯誤,因此在通信程序中加入了數(shù)據(jù)合法性檢驗,對通信錯誤數(shù)據(jù)實行丟棄處理。
5結(jié)束語
從十六路串口巡檢系統(tǒng)可以看出,利用VB.net語言中的SerialPort類可開發(fā)串口通信程序,比調(diào)用外部第三方串口控件或API函數(shù)更方便、快捷,而且用較少代碼實現(xiàn)相同功能,比VB6.0環(huán)境中的MSComm控件功能更強大,且VB.net開發(fā)軟件界面更美觀。
參考文獻:
[1]曾立武,黃曉鋒,蘭紫娟,何凌燕,欒勝基.基于VB6.0串口通信的環(huán)境空氣質(zhì)量自動監(jiān)測系統(tǒng)[J].現(xiàn)代電子技術,2012(20):155-158.
[2]許俊鋒,馬春草,劉暢.基于VB6.0的串口通信數(shù)據(jù)采集系統(tǒng)設計[J].儀表技術,2012(4):7-11,15.
[3]陳學軍.Windows平臺下串口通信數(shù)據(jù)實時獲取與監(jiān)測[J].自動化儀表,2012(3):66-69.
[4]田添.利用控件MSComm實現(xiàn)計算機的串口通信[J].數(shù)字通信,2012(2):95-97.
[5]鄭武,肖寶森.串口通信新模型的研究與C#實現(xiàn)[J].電腦編程技巧與維護,2012(11):29-30,35.
[6]潘方.RS232串口通信在PC機與單片機通信中的應用[J].現(xiàn)代電子技術,2012(13):69-71.
[7]王雪,王紅印,田正凱,周春枚,曾軍.基于CAN總線的實時數(shù)據(jù)采集串口通信的實現(xiàn)[J].電子質(zhì)量,2012(6):16-17,25.
[8]王毅,萬英,胡福成.基于串口通信的溫度測量系統(tǒng)的設計[J].電力與電工,2012(2):33-37.
[9]劉金梅,王東穎,劉立超,嚴稱靈.基于LabVIEW串口通信的多路數(shù)據(jù)采集系統(tǒng)設計[J].北華航天工業(yè)學院學報,2012(4):16-18.