李志偉 姚江敏
摘 要:串口通信是計算機應用中最常用的通信方式之一。針對常用的系統(tǒng)控制和數(shù)據(jù)傳輸問題,研究了VB環(huán)境下通信連接和信號控制的基本原理,提出了利用單向信號傳輸,通過MSComm控件實現(xiàn)計算機系統(tǒng)控制的設(shè)計思想。實踐應用表明,軟件控制穩(wěn)定、可靠,具有很強的擴展應用價值。
關(guān)鍵詞:串口通信;計算機系統(tǒng)控制;MSComm控件;單向信號
中圖分類號:TP274.2 文獻標識碼:A DOI:10.15913/j.cnki.kjycx.2016.16.102
在數(shù)據(jù)通信中,計算機系統(tǒng)之間的相互控制是計算機應用的常見方式之一。雖然現(xiàn)代網(wǎng)絡(luò)技術(shù)、接口技術(shù)的飛速發(fā)展為數(shù)據(jù)通信提供了更加快捷、便利的途徑,但是,由于串口通信具有硬件成本低、協(xié)議透明、編程簡單等優(yōu)點,所以,在計算機通信,尤其是數(shù)據(jù)采集、監(jiān)視及控制等領(lǐng)域,仍然具有很大的應用潛力。
1 VB環(huán)境下的串口通信
1.1 串口通信
在VB環(huán)境中,利用串口可以實現(xiàn)計算機設(shè)備之間的相互通信。通常情況下,主要有2種通信方式:①利用Windows提供的API函數(shù);②利用VB提供的MSComm控件。雖然前者實現(xiàn)方法簡單,但設(shè)計過程相對復雜,工作量比較大,對程序員有較高的要求。盡管后者實現(xiàn)過程比較復雜,但由于微軟對其處理過程進行了封裝,并向用戶提供了方便的接口,因此,使用操作比較簡單,只需簡單地嵌入就能完成復雜的串口通信任務(wù),設(shè)計工作量比較小,效率較高,是程序設(shè)計比較理想的方法。
1.2 MSComm控件
MSComm是一種串行通信控件,它提供事件驅(qū)動和檢查CommEvent屬性兩種處理通信的方式。在VB 6.0系統(tǒng)中,通過部件設(shè)置可以將該控件添加到工具箱中,以便在設(shè)計界面中引用,通過屬性設(shè)置和操作實現(xiàn)串口數(shù)據(jù)的發(fā)送和接收。
在數(shù)據(jù)傳輸和控制應用中,MSComm控件常用的屬性有以下幾點:①CommPort,設(shè)置并返回通信端口號;②Settings, 以字符串的形式設(shè)置并返回波特率、奇偶校驗、數(shù)據(jù)位和停止位;③PortOpen,設(shè)置并返回通信端口的狀態(tài)——打開或關(guān)閉;④Input,從接收緩沖區(qū)返回并刪除字符;⑤Output,向傳輸緩沖區(qū)寫一個字符串。
2 串口通信的信號連接
在臺式計算機后部面板上,通常有一兩個串行通信接口,其外部形狀為梯形公插頭結(jié)構(gòu),根據(jù)插針的數(shù)量可以分為25針和9針2種。前者多見于早期的AT架構(gòu)計算機。目前,ATX架構(gòu)計算機的串口均采用9針接口,其結(jié)構(gòu)如圖1所示。
9針串口各引腳的功能分別為:載波檢測(DCD)、接收數(shù)據(jù)(RXD)、發(fā)送數(shù)據(jù)(TXD)、數(shù)據(jù)終端準備好(DTR)、信號地(GND)、數(shù)據(jù)準備好(DSR)、發(fā)送請求(RTS)、發(fā)送清除(CTS)、振鈴指示(RI)。
通常情況下,在計算機之間進行一般的數(shù)據(jù)傳輸時,如果沒有特別要求,只要正確連接2,3,5引腳便可。其連接方法是:2臺計算機對應串口的2,3引腳相互交叉,5引腳直接連通,具體如圖2所示。
3 控制系統(tǒng)設(shè)計
3.1 設(shè)計方法
在設(shè)計控制系統(tǒng)時,可以通過串口實現(xiàn)計算機之間的相互控制,其具體方法是:①從市場上購買一對如圖1所示的9針串口梯形母插頭,按照圖2所示的連接方法用信號線連接2個插頭;②選擇2臺需要互聯(lián)的計算機的空閑串口,用做好的串口連線連接;③選擇其中一臺計算機作為主控機,另一臺作為被控機;④在主控機上安裝并運行主控程序,選擇連接的串行端口,由對應的串口向被控機發(fā)送控制指令;⑤在被控機上安裝并運行被控程序,選擇連接的串行端口,經(jīng)由對應的串口等待并接收來自主控機的控制指令;⑥當被控機串口接收到主控機發(fā)來的控制指令后,根據(jù)預設(shè)的指令功能執(zhí)行控制操作,實現(xiàn)系統(tǒng)控制。
3.2 主控端程序設(shè)計
假設(shè)需要通過主控機對被控機完成下列3項控制功能:打開媒體播放器、打開記事本、關(guān)閉計算機,則主控機的控制指令可以通過2臺計算機的串口實現(xiàn)傳遞。因此,要先通過用戶界面選擇所使用的串行端口號,設(shè)計界面如圖3所示。
為了實現(xiàn)串行通信的數(shù)據(jù)傳輸和端口控制,程序設(shè)計時需要在界面中添加一個MSComm控件,通過界面選擇通信用“串口號”,通過“打開串口”按鈕,打開對應的串行端口。設(shè)MSComm控件的實例名為MSComm1,選擇的串口號為1,則相應的設(shè)置語句為:MSComm1.CommPort=1,MSComm1.PortOpen = True.
在圖3所示的樣例中,如果要“打開媒體播放器”,則點擊相應的按鈕,通過執(zhí)行下列語句便可實現(xiàn)控制指令由主控機向被控機的發(fā)送:MSComm1.Output = "MediaPlayer".
3.3 被控端程序設(shè)計
被控端程序與主控端程序一樣,運行時也要通過MSComm控件對端口進行初始化操作——選擇端口、打開端口,然后定時檢測對應串口的工作狀態(tài)。
為了實現(xiàn)對端口狀態(tài)的檢測,需要增加一個定時器控件,定時檢測相應串口是否有新的數(shù)據(jù)到達,以便及時處理。定時時間可根據(jù)用戶需要設(shè)置。
設(shè)程序中添加的定時器控件實例名為Timer1,則相應的被控程序部分代碼如下:
Private Sub Timer1_Timer()
Dim Input_Data As String
Input_Data = Trim(MSComm1.Input)
Select Case Input_Data
Case "MediaPlayer"
Shell " C:\Program Files\Windows Media Player\wmplayer. exe", vbNormalNoFocus
……
Case Else
Exit Sub
End Select
End Sub
在該程序運行的過程中,當接收到來自串口的一組數(shù)據(jù)時,系統(tǒng)便自動分析判斷。如果是一條預設(shè)的控制指令,則執(zhí)行對應的功能,否則不予處理。在本例中,如果接收到的是一個字符串“MediaPlayer”,則程序通過shell語句直接調(diào)用,并執(zhí)行本機中的wmplayer.exe程序,打開媒體播放器。
3.4 控制測試
按照上述方法,用串行線連接好主控計算機和被控計算機相應的串口1端口,打開2臺計算機,在主控計算機上運行測試程序,進入圖3所示的控制界面,點擊“打開串口”按鈕。此時,便建立了2臺計算機的通信連接。然后點擊“打開媒體播放器”按鈕,此時,在被控計算機上便可自動播放Windows系統(tǒng)自帶的媒體播放程序。同樣,在圖3界面中點擊“打開記事本”按鈕,也可以迅速控制被控計算機運行記事本程序,實現(xiàn)預期的控制效果。
多次試驗表明,該程序運行穩(wěn)定、可靠,在遠程控制系統(tǒng)設(shè)計中既簡單又實用,具有較高的應用價值。
3.5 說明
采用串口通信實現(xiàn)計算機控制的關(guān)鍵是正確設(shè)置串口通信控件MSComm。在具體工作中,需要重點注意以下幾個方面的問題:①根據(jù)控制信號的物理連接,正確選擇并打開相應的串行端口。②針對不同的終端設(shè)備,采用控件的Settings屬性正確設(shè)置數(shù)據(jù)傳輸?shù)牟ㄌ芈?、奇偶校驗、?shù)據(jù)位、停止位。在缺省的情況下,控件按默認參數(shù)自動設(shè)置。③當系統(tǒng)需要通過串口傳輸大量數(shù)據(jù)時,為了保證在緩沖區(qū)過載時數(shù)據(jù)不會丟失,需要通過控MSComm件的Handshaking屬性設(shè)置相應的通信協(xié)議(即握手協(xié)議),通過控件的OnComm事件捕獲并處理相關(guān)的通信事件,檢查設(shè)備連接和通信是否正確,確??刂葡到y(tǒng)的穩(wěn)定、可靠。此時,圖2所示連接的串行線已經(jīng)不能滿足需要,還需要正確連接RTS、CTS、DSR、DTR等信號線。
4 結(jié)束語
由此實例可知,利用串口通信的數(shù)據(jù)傳輸功能可以方便地實現(xiàn)計算機之間的系統(tǒng)控制。由于該方法硬件連接簡單,軟件設(shè)計靈活,可靠性高,因此,將其應用于工業(yè)、家用電器、辦公等自動化和嵌入式應用中,可以快速實現(xiàn)數(shù)據(jù)采集和設(shè)備控制,具有廣闊的應用前景。
參考文獻
[1]杜正杰,王衛(wèi)鋒.基于串口實現(xiàn)DCS數(shù)據(jù)的安全采集[J].測控技術(shù),2014,33(3):45-48.
[2]劉建河,趙玉丹,張玉強.基于LABVIEW串口通信的電機控制技術(shù)[J].制造業(yè)自動化,2013,35(11):135-137.
[3]李志偉,鐵躍煥,楊茂興.基于串行指令的紅外探測遠程控制系統(tǒng)設(shè)計[J].計算機工程與設(shè)計,2014,35(4):1486-1490.
[4]黃斌.基于串口通信的電腦遙控系統(tǒng)設(shè)計[J].測控技術(shù),2013,32(6):72-75.
作者簡介:李志偉(1964—),男,河南宜陽人,副教授,CCF高級會員,主要研究方向為計算機及其在航空武器裝備中的應用。
〔編輯:白潔〕