利用VB實(shí)現(xiàn)PC機(jī)與多單片機(jī)遠(yuǎn)程無(wú)線通訊
圖3 單片機(jī)中斷子程序流程圖
3.3 上位機(jī)PC串行通訊程序設(shè)計(jì)方法及實(shí)現(xiàn)
上位機(jī)利用VB6.0編程,用VB6.0開(kāi)發(fā)串行通信程序普遍采用以下兩種方法:一種是利用Windows的API函數(shù);另一種是采用VB6.0的通訊控件MSComm。利用API函數(shù)編寫(xiě)串行通信程序較為復(fù)雜,需要調(diào)用許多繁瑣的API函數(shù),而VB6.0的MSComm通訊控件提供了標(biāo)準(zhǔn)的事件處理函數(shù)、事件和方法,用戶不必了解通信過(guò)程中的底層操作和API函數(shù),從而比較容易、高效地實(shí)現(xiàn)了串口通信。
MSComm控件提供了兩種功能完善的串口數(shù)據(jù)發(fā)送和接收功能:一種是查詢法,通過(guò)檢查CommEvent屬性的值來(lái)輪詢(Polling)事件和通信狀態(tài),可以使用定時(shí)器或DO…Loop程序?qū)崿F(xiàn);另一種是事件驅(qū)動(dòng)法(Event-driven),利用MSComm控件的OnComm事件捕獲串口通信錯(cuò)誤或事件,并在OnComm事件中編寫(xiě)程序進(jìn)行相應(yīng)處理,這種方法響應(yīng)及時(shí),可靠性高,本軟件系統(tǒng)采用了此方法來(lái)接收遠(yuǎn)端單片機(jī)的回執(zhí)信息,以使PC機(jī)作出更快的反應(yīng)。
數(shù)傳電臺(tái)基于透明傳輸,不改變系統(tǒng)原來(lái)的通訊程序及傳輸格式,編程時(shí)只需適當(dāng)考慮無(wú)線傳輸引起的信號(hào)時(shí)延。
軟件采用定時(shí)器Timer1控件來(lái)實(shí)現(xiàn)在數(shù)據(jù)信息送出30秒后(Timer1.Interval = 30000),PC機(jī)仍未收到任何回執(zhí)信息時(shí),程序自動(dòng)跳出系統(tǒng)。
實(shí)現(xiàn)同樣的功能,程序代碼會(huì)因不同人的編寫(xiě)而略有不同,并且篇幅所限,在此僅給出在VB中對(duì)MSComm控件初始化和數(shù)據(jù)發(fā)送與接收的部分源程序,代碼如下:
……
初始化MSComm控件程序:
With Comm1 ‘控件名為Comm1
.CommPort=1 ‘使用串行端口1
.Settings=“9600,n,8,1” ‘設(shè)置初始化參數(shù)
.InputLen=0 ‘讀取緩沖區(qū)的全部數(shù)據(jù)
.InputMode=comInputModeBinary ‘以二進(jìn)制方式接收數(shù)據(jù)
.RThreshold=3 ‘接收緩沖區(qū)達(dá)到3個(gè)字節(jié)時(shí)產(chǎn)生OnComm事件
End with ‘其它屬性值為默認(rèn)即可
……
發(fā)送數(shù)據(jù)程序:
……
Dim Send As Variant ‘定義變量
Dim OutByteD(5) As Byte ‘定義發(fā)送數(shù)據(jù)數(shù)組
…… ‘獲取發(fā)送數(shù)據(jù)
Send=OutByteD ‘將發(fā)送的數(shù)據(jù)賦給發(fā)送變量
Comml.Ouput=Send ‘發(fā)送數(shù)據(jù)
……
數(shù)據(jù)接收程序:
Private Sub Comm1_OnComm()
Select Case Comm1.CommEvent
Case comEvReceive
Dim Jshuju() As Byte , i%, count%
Dim Rec As Variant
Rec=Comm1.Input
count=UBound(Rec)
ReDim Jshuju(count-1) As Byte
For i=0 to count-1
Jshuju(i)=Rec(i)
Next i
…… ‘判斷回執(zhí)信息并進(jìn)行相應(yīng)處理,如處理指定遠(yuǎn)端單元數(shù)據(jù)接收完畢、數(shù)據(jù)接收有誤請(qǐng)求重發(fā)信息、顯示、打印自檢信息等
End Select
End Sub
4 結(jié)論
通過(guò)采用上述通訊方法實(shí)現(xiàn)了基于數(shù)傳電臺(tái)的控制中心上位機(jī)對(duì)各遠(yuǎn)端單片機(jī)系統(tǒng)的遠(yuǎn)程實(shí)時(shí)控制,實(shí)現(xiàn)了高速、實(shí)時(shí)數(shù)據(jù)的發(fā)送和接收。經(jīng)過(guò)實(shí)際應(yīng)用,系統(tǒng)工作穩(wěn)定可靠,滿足了預(yù)期的控制要求??梢灶A(yù)見(jiàn),數(shù)傳電臺(tái)以其使用靈活簡(jiǎn)便、全數(shù)字化無(wú)線通訊及環(huán)境適應(yīng)能力強(qiáng)等優(yōu)點(diǎn)必將在信息采集、遠(yuǎn)程監(jiān)控等領(lǐng)域得到更加廣泛的應(yīng)用。
參考文獻(xiàn):
[1]范逸之,陳立元.Visual Basic與RS-232串行通信控制最新版.北京:中國(guó)青年出版社,2002
數(shù)字通信相關(guān)文章:數(shù)字通信原理
通信相關(guān)文章:通信原理
晶振相關(guān)文章:晶振原理
評(píng)論