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