top
Loading...
在VB下實現無線通信的方法
一、 VB串行通信

利用VB開發通信程序主要的方法有兩種:一是利用VB本身提供的控件(CONTRALS);另一種方法是利用Windows API應用程序接口。Windows API 主要提供了三個動態連接庫(KERNEL.EXE、USER.EXE、GDI.EXE)供開發人員調用,其中KERNEL.EXE 主要包括一些底層操作函數,完成一些資源管理、任務、內存等操作;USER.EXE包含了一些與Windows管理有關的函數,如通信、菜單、消息、光標、插入符、計時器以及絕大多數非顯示函數;GDI.EXE圖形設備接口庫,主要內容為與設備輸出有關的函數。和串口通信有關系的函數BuilidCommDCB、ClearCommBreak、SetCommBreak、FlushComm、GetCommError、GetCommState、WriteComm、ReadComm、SetCommState、CloseComm等均在 Windowssystem 子目錄下的USER.EXE動態連接庫中,在VB調用之前應該先在全局變量定義處聲明API通信函數、定義常量。

在VB的控件工具箱中,提供了一個使用非常方便的串行通信控件MSComm,它提供了一個事件OnComm,該事件可以截取串口的任何消息,轉入事件處理程序。OnComm事件是唯一的,OnComm可以捕獲通信時發生的串口事件和錯誤信息,當有串口事件或錯誤發生時,VB會立刻觸發一個OnComm事件,程序就會自動轉入OnComm事件處理程序中。CommEvent屬性是OnComm事件的指示器,該屬性在設計時不能使用,在程序運行時為只讀,CommEvent 屬性存有最近的事件或錯誤的數值代碼,可以在程序中隨時讀取CommEvent 屬性值來了解通信的狀況,OnComm事件是和CommEvent屬性密切相關、一起使用,當任何一個OnComm 事件或錯誤發生時,都會使得CommEvent屬性值改變,在OnComm事件處理過程中,可以通過判斷CommEvent屬性值,對于不同的屬性值轉入不同的事件處理過程,一般采用的辦法是SELECT CASE.......END SELECT。由于在無線通信中沒有使用有線Modem,CommEvent 屬性涉及到的有線Modem的屬性數值代碼和本項目無關。

二、無線傳輸接口和協議

用Intel 586/120的PC機為上位機,通信程序用VB開發,用8031單片機作CPU、 AD574作數據采集的下位機,上位機作數據接收和數據處理中心站,下位機實時采集數據之后,進行簡單的數據平均計算,當收到上位機發來的發送指令之后,開始向上位機發送數據。

上位機無線通信接口使用的是一塊插在ISA擴展槽中的無線Modem ZX-02,無線Modem與Kenwood公司的TK-378無線對講機相連,數字信號通過無線Modem調制成為音頻信號之后,送到TK-378無線對講機上的MIC口。
下位機有一臺外置無線Modem ZX-01,單片機的數字信號經過串口送入無線Modem,Modem對信號進行調制后送入Kenwood TK-378無線對講機上,接收數據的方式與上述相同,由TK-378收到信號后,經無線Modem將音頻信號解調為數字信號進入計算機或單片機處理。

由于在通信網絡中,并非點對點的通信,而是一點對多點的廣播式的通信方式,因此,我們在通信協議中增加站點識別碼,給下位機編碼可以保證網絡通信的有序性。

由于無線通信可能會有空間的燥聲干擾,因此,采取了多項抗干擾措施,首先是包頭識別碼,在發送了傳輸命令之后,下位機開始以打包的形式傳輸數據,每一包都有一個包頭和包尾識別碼,假如識別碼有誤,這一次的傳輸為不正常數據處理。打包發送另外一個原因是TK-270對講機連續發送數據的時間不能超過一分鐘,超過一分鐘就會自動中斷發送,因此,當數據較多時不打包連續發送的時間就會超過一分鐘,發送數據中斷。

在下位機中有32KB的NVRAM,可以保存32KB的數據。該數據可以由上位機發送清除命令的方法清除掉,當32KB滿了以后,最早放入的數據就會丟掉,由于采樣速率不高,在慢采的情況下,兩天的時間才能存滿,這樣不論上位機或下位機出現斷電、死機等問題,數據不會丟失掉。

由于使用的無線Modem所限,傳輸速率只能達到2400bps,而在我們的使用中1200bps、N Parity、8 DATA、1 STOP為較穩定狀態。

上位機向下位機發送的命令有校時命令、請求內存命令、發送數據命令、快采命令和慢采命令等。發送命令有兩種發送方式,即手動方式和自動方式,自動方式是由定時器來完成的。
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗