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