在VB下實(shí)現(xiàn)無線通信的方法_第1頁
在VB下實(shí)現(xiàn)無線通信的方法_第2頁
在VB下實(shí)現(xiàn)無線通信的方法_第3頁
在VB下實(shí)現(xiàn)無線通信的方法_第4頁
在VB下實(shí)現(xiàn)無線通信的方法_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、在VB下實(shí)現(xiàn)無線通信的方法一、VB串行通信利用VB開發(fā)通信程序主要的方法有兩種:一是利用VB本身提供的控件 (CONTRALS);另一種方法是利用Windows API應(yīng)用程序接口。Windows API 主要提供了三個(gè)動態(tài)連接庫(KERNEL.EXE、USER.EXE、GDI.EXE)供開發(fā) 人員調(diào)用,其中KERNEL.EXE主要包括一些底層操作函數(shù),完成一些資源管 理、任務(wù)、內(nèi)存等操作;USER.EXE包含了一些與Windows管理有關(guān)的函數(shù), 如通信、菜單、消息、光標(biāo)、插入符、計(jì)時(shí)器以及絕大多數(shù)非顯示函數(shù);GDI.EXE 圖形設(shè)備接口庫,主要內(nèi)容為與設(shè)備輸出有關(guān)的函數(shù)。和串口通信有關(guān)系的

2、函 數(shù) BuilidCommDCB、ClearCommBreak、SetCommBreak、FlushComm、 GetCommError、 GetCommState、 WriteComm、 ReadComm、 SetCommState、CloseComm 等均在 Windowssystem 子目錄下的 USER.EXE動態(tài)連接庫中,在VB調(diào)用之前應(yīng)該先在全局變量定義處聲明API 通信函數(shù)、定義常量。在VB的控件工具箱中,提供了一個(gè)使用非常方便的串行通信控件 MSComm,它提供了一個(gè)事件OnComm,該事件可以截取串口的任何消息,轉(zhuǎn) 入事件處理程序。OnComm事件是唯一的,OnComm可以

3、捕獲通信時(shí)發(fā)生的 串口事件和錯誤信息,當(dāng)有串口事件或錯誤發(fā)生時(shí),VB會立刻觸發(fā)一個(gè) OnComm事件,程序就會自動轉(zhuǎn)入OnComm事件處理程序中。CommEvent 屬性是OnComm事件的指示器,該屬性在設(shè)計(jì)時(shí)不能使用,在程序運(yùn)行時(shí)為只 讀,CommEvent屬性存有最近的事件或錯誤的數(shù)值代碼,可以在程序中隨時(shí) 讀取CommEvent屬性值來了解通信的狀況,OnComm事件是和CommEvent屬性密切相關(guān)、一起使用,當(dāng)任何一個(gè)OnComm事件或錯誤發(fā)生時(shí),都會使得CommEvent屬性值改變,在OnComm事件處理過程中,可以通 過判斷CommEvent屬性值,對于不同的屬性值轉(zhuǎn)入不同的事

4、件處理過程,一 般采用的辦法是SELECT CASE.END SELECT。由于在無線通信中沒有 使用有線Modem,CommEvent屬性涉及到的有線Modem的屬性數(shù)值代碼 和本項(xiàng)目無關(guān)。二、無線傳輸接口和協(xié)議用Intel 586/120的PC機(jī)為上位機(jī),通信程序用VB開發(fā),用8031單片機(jī) 作CPU、AD574作數(shù)據(jù)采集的下位機(jī),上位機(jī)作數(shù)據(jù)接收和數(shù)據(jù)處理中心站, 下位機(jī)實(shí)時(shí)采集數(shù)據(jù)之后,進(jìn)行簡單的數(shù)據(jù)平均計(jì)算,當(dāng)收到上位機(jī)發(fā)來的發(fā) 送指令之后,開始向上位機(jī)發(fā)送數(shù)據(jù)。上位機(jī)無線通信接口使用的是一塊插在ISA擴(kuò)展槽中的無線Modem ZX-02,無線Modem與Kenwood公司的TK-3

5、78無線對講機(jī)相連,數(shù)字信號通 過無線Modem調(diào)制成為音頻信號之后,送到TK-378無線對講機(jī)上的MIC 口。 下位機(jī)有一臺外置無線Modem ZX-01,單片機(jī)的數(shù)字信號經(jīng)過串口送入無線 Modem,Modem對信號進(jìn)行調(diào)制后送入Kenwood TK-378無線對講機(jī)上,接 收數(shù)據(jù)的方式與上述相同,由TK-378收到信號后,經(jīng)無線Modem將音頻信號 解調(diào)為數(shù)字信號進(jìn)入計(jì)算機(jī)或單片機(jī)處理。由于在通信網(wǎng)絡(luò)中,并非點(diǎn)對點(diǎn)的通信,而是一點(diǎn)對多點(diǎn)的廣播式的通信 方式,因此,我們在通信協(xié)議中增加站點(diǎn)識別碼,給下位機(jī)編碼可以保證網(wǎng)絡(luò)通信的有序性。由于無線通信可能會有空間的燥聲干擾,因此,采取了多項(xiàng)抗干

6、擾措施,首 先是包頭識別碼,在發(fā)送了傳輸命令之后,下位機(jī)開始以打包的形式傳輸數(shù)據(jù), 每一包都有一個(gè)包頭和包尾識別碼,假如識別碼有誤,這一次的傳輸為不正常 數(shù)據(jù)處理。打包發(fā)送另外一個(gè)原因是TK-270對講機(jī)連續(xù)發(fā)送數(shù)據(jù)的時(shí)間不 能超過一分鐘,超過一分鐘就會自動中斷發(fā)送,因此,當(dāng)數(shù)據(jù)較多時(shí)不打包連續(xù) 發(fā)送的時(shí)間就會超過一分鐘,發(fā)送數(shù)據(jù)中斷。在下位機(jī)中有32KB的NVRAM,可以保存32KB的數(shù)據(jù)。該數(shù)據(jù)可以由 上位機(jī)發(fā)送清除命令的方法清除掉,當(dāng)32KB滿了以后,最早放入的數(shù)據(jù)就會 丟掉,由于采樣速率不高,在慢采的情況下,兩天的時(shí)間才能存滿,這樣不論上位 機(jī)或下位機(jī)出現(xiàn)斷電、死機(jī)等問題,數(shù)據(jù)不會丟失

7、掉。由于使用的無線Modem所限,傳輸速率只能達(dá)到2400bps,而在我們的使 用中 1200bps、N Parity、8 DATA、1 STOP 為較穩(wěn)定狀態(tài)。上位機(jī)向下位機(jī)發(fā)送的命令有校時(shí)命令、請求內(nèi)存命令、發(fā)送數(shù)據(jù)命令、 快采命令和慢采命令等。發(fā)送命令有兩種發(fā)送方式,即手動方式和自動方式, 自動方式是由定時(shí)器來完成的。三、應(yīng)用實(shí)例由于該項(xiàng)目的軟件源代碼較長,我們只拿出和串口通信有關(guān)的程序片段 來供大家參考。在我們的工作中實(shí)踐了三種通信方式,即查詢方式、事件驅(qū)動 方式、事件驅(qū)動轉(zhuǎn)查詢方式。這三種方式各有利弊,查詢方式方便可靠,可利用 協(xié)議或設(shè)定時(shí)鐘進(jìn)入和退出查詢狀態(tài),但不是資源的有效利用方

8、式;事件觸發(fā) 方式對于定長通信非常有效,但定長通信在有些場合不實(shí)用;事件驅(qū)動轉(zhuǎn)查詢 方式既有事件驅(qū)動的特點(diǎn)又有轉(zhuǎn)查詢方式特點(diǎn),可以說是集二者之長,有效利 用資源。下面著重介紹事件驅(qū)動轉(zhuǎn)查詢方式。首先在公共模塊中定義和ONCOMM有關(guān)的參數(shù):Global Const MSCOMM_EV_RECEIVE = 2 收到 Rthreshold 個(gè)字符。該事件將持續(xù)產(chǎn)生直到用Input屬性從接收緩沖區(qū)中刪除數(shù)據(jù)。Global Const MSCOMM_ER_RXOVER = 1008 接受緩沖區(qū)溢出,接收 緩沖區(qū)沒有空間。Global Const MSCOMM_ER_TXFULL = 1010 傳輸緩沖

9、區(qū)已滿。傳 輸字符時(shí)傳輸緩沖區(qū)已滿。在啟動過程中對串口和輸入輸出緩沖區(qū)初始化:Sub Form_Load ()comm1.Settings = 1200,n,8,1設(shè)定波特率 1200bps,無校驗(yàn),8 位數(shù)據(jù)位,1位停止位comm1.CommPort = 1 串口 1comm1.InputLen = 1 一次從輸入緩沖區(qū)中讀取一個(gè)字符comm1.InBufferSize = 512 定義輸入緩沖區(qū)為 512 字節(jié)(bytes)comm1.InBufferCount = 0清空輸入緩沖區(qū)comml.OutBufferCount = 0 清空輸出緩沖區(qū)comml.PortOpen = True

10、啟動串口End Sub下面是發(fā)送數(shù)傳命令的子過程,啟動該過程由一個(gè)定時(shí)器控制:Sub sample_data ()comml.RTSEnable = True將Modem的PTT置高,同時(shí)打開對講機(jī)Call time_delay 適當(dāng)延時(shí)comm1.Output = *TRNS + Chr$(13)發(fā)送命令Do該循環(huán)用來檢測命令是否全部發(fā)送完畢Loop Until comm1.OutBufferCount = 0Call time_delay適當(dāng)延時(shí)comm1.RTSEnable = False將Modem的PTT置低,將對講機(jī)改為接受狀態(tài)comm1.InBufferCount = 0清空接收

11、緩沖區(qū)comm1.RThreshold = 1 設(shè)定 RThreshold = 1,等待出發(fā) OnComm 事件 End Sub在OnComm編寫接收和處理代碼:Sub Comm1_OnComm ()Select Case comm1.CommEventCase MSCOMM_ER_RXOVER接收緩沖區(qū)溢出,可插入相應(yīng)的代碼Case MSCOMM_ER_TXFULL傳輸緩沖區(qū)已滿,可插入處理代碼Case MSCOMM_ER_RECEIVE收到1個(gè)字符,可進(jìn)入以下處理過程comm1.RThreshold = 0不再響應(yīng)OnComm事件,轉(zhuǎn)入查尋方式接收ii = 0iii = 0: sinn =

12、 Chr$(42): sinnl = Chr$(42)初始化變量Doduration = Timer + .2設(shè)定超時(shí)退出的時(shí)間值iii = iii + 1 sinn1 = sinnDo該循環(huán)判斷輸入緩沖區(qū)是否有數(shù)據(jù)或是否超時(shí)dummy% = DoEvents()Loop Until comm1.InBufferCount = 1 Or Timer = durationIf Timer = duration Then iii = iii - 1overtime = True確定超時(shí)退出,并非正常退出Exit DoEnd Ifsinn = comm1.Input正常退出,取值付給sinnIf header_er = 0 ThenGoTo test_headerEnd IfIf Asc(sinn) 175 Or Asc(sinn) 1 T

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論