亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? vb.txt

?? VB串口資料。 用VB開發串口不錯的資料
?? TXT
字號:
利用Visual Basic 實現無線通訊
 姜棣昭(中科院空間中心) 
 

 
一、 概述

Visual Basic 是Mcrosoft公司推出的強有力的系列開發軟件之一,而且以其實用、方便、快捷、開發周期短、廣泛而強大的功能越來越被廣大編程人員所親賴,廣為流傳,似乎有些專業的編程人員放棄了Visaul C++ 而改用了Visaul Basic之類的RAD編程工具,盡管Visaul C++在靈活性、代碼緊湊、運行速度快及底層開發等方面Visaul Basic無法比擬的,但編寫C++應用程序過長的調試和開發周期確實有點不適應當今的應用程序開發環境。

在Visaul Basic開發工具中提供了大量的控件(或稱控制、組件)供編程人員使用,可以方便的利用這些組件中的屬性、方法、語言等以事件驅動方式開發應用程序,還可以利用WINDOWS SDK中的API中的應用程序接口等工具開發應用程序。VB還自帶一個控件開發軟件包CDK,利用CDK可以開發自己需要的Controls 。在通訊問題中我們可以使用VB提供的通訊控件或調用WINDOWS API通訊函數。

二、 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等均在 \Windows\system 子目錄下的USER.EXE動態連接庫中,在VB調用之前應該先在全局變量定義處聲明API通訊函數、定義常量。

在我們的實踐中,用VB 控件實現通訊的方法比調用SDK的API動態連接庫的方法更加方便、快捷,而且用較少的代碼可以實現相同的功能,這就是用VB 控件實現通訊的優點所在,下面主要介紹一下利用VB 控件實現無線通訊的問題。

在VB的控件工具箱中,提供了一個使用非常方便的串行通訊控件MSComm,它全面的提供了使用RS-232串行通訊上層開發的所有細則,它既可以使用查詢方式又可以使用事件驅動方式來完成串行通訊。

在MSCOMM控件中提供了一系列的編程要素,這些編程要素有屬性、事件和函數,利用這些要素編程,可以實現幾乎全部的串行通訊功能。在VB中提供了30多個屬性、一個事件和兩個函數,其中主要的屬性為CommPort、Settings、PortOpen、InBufferSize、OutBufferSize、InBufferCount、OutBufferCount、Break、InputLen、SThreshold、Rthreshold、RTSEnable、CommEvent、ParityReplace、NullDiscard等。

控件MSComm提供了一個事件OnComm,該事件可以截取串口的任何消息,轉入事件處理程序。WINDOWS操作系統的運行機制為事件驅動,在VB編程中事件驅動方式同樣是軟件運行的主要方式之一,當沒有事件發生時程序可能處于某一循環、等待或任務狀態當事件發生時,程序轉入事件處理程序。每個控件下都有一些事件供程序員使用,MSCOMM控件中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滿了以后,最早放入的數據就會丟掉,由于我們的采樣速率不高,在慢采的情況下,兩天的時間才能存滿,這樣不論上位機或下位機出現斷電、死機等問題,數據不會丟失掉。

在發送過程中,由于干擾的原因數據傳輸出現錯誤,上位機不給下位機發送清楚命令,數據保存在NVRAM中,下次上位機發送傳輸命令之后,這些數據還會重新發送到上位機來,這樣可以避免了線路帶來的數據損失,
從下位機向上位機傳送的代碼有ASCII碼和BCD碼,測量數據部分用的是BCD碼主要是為了節省資源,由上位機向下位機發送的命令均為ASCII碼。

我們還對字段長度和包的長度作了規定,一個字段有多少個字節,一包有多少個字段組成,如果數據最后不夠一整包,也按照整字段的格式作為半包發送過來。

考慮到下位機的分散性,可能固定在偏遠、不宜接近的地帶,用上位機對下位機發送校時命令并校時的方法來統一網絡時間。

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

上位機向下位機發送的命令有校時命令并校時、請內存命令、發送數據命令、快采命令和慢采命令等。發送命令有兩種發送方式,即手動方式和自動方式,自動方式是由定時器來完成的。

在無線通訊過程中,除了規定合理的協議之外,為了保證通訊的正確性,在數據發送時適當的增加延時是必要的,當速度較慢的計算機向速度較快的計算機發送數據時應適當的增加延時。

四、 應用實例

由于該項目的軟件源代碼較長,我們只拿出和串口通訊有關的程序片段來供大家參考。在我們的工作中實踐了三種通訊方式,即查詢方式、事件驅動方式、事件驅動轉查詢方式,這三種方式各有利敝,查詢方式有方便可靠的特點,可利用協議或設定時鐘進入和退出查詢狀態,但不是資源的有效利用方式,事件觸發方式對于定長通訊非常有效,但定長通訊在有些場合不實用,事件驅動轉查詢方式既有事件驅動的特點又有轉查詢方式特點,可以說是集二者之長,有效利用資源。下面著重介紹事件驅動轉查詢方式。

首先在公共模塊中定義和ONCOMM有關的參數:

Global Const MSCOMM_EV_RECEIVE = 2‘收到 Rthreshold 個字符。該事件將持續產生直到用 Input 屬性從接收緩沖區中刪除數據。
Global Const MSCOMM_ER_RXOVER = 1008‘接受緩沖區溢出。接收緩沖區沒有空間。
Global Const MSCOMM_ER_TXFULL = 1010 ‘傳輸緩沖區已滿。傳輸字符時傳輸緩沖區已滿

在啟動過程中對串口和輸入輸出緩沖區初始化:
Sub Form_Load ()
comm1.Settings = "1200,n,8,1" 設定波特率1200bps,無校驗,8位數據位,1位停止位
comm1.CommPort = 1 串口1
comm1.InputLen = 1 一次從輸入緩沖區中讀取一個字符
comm1.InBufferSize = 512 定義輸入緩沖區為512字節(bytes)
comm1.InBufferCount = 0 清空輸入緩沖區
comm1.OutBufferCount = 0 清空輸出緩沖區
comm1.PortOpen = True 啟動串口
End Sub
下面是發送數傳命令的子過程,啟動該過程由一個定時器控制:
Sub sample_data ()
comm1.RTSEnable = True 將Modem的PTT置高,同時打開對講機
Call time_delay 適當延時
comm1.Output = "*TRNS" + Chr$(13) 發送命令
Do 該循環用來檢測命令是否全部發送完畢
Loop Until comm1.OutBufferCount = 0
Call time_delay 適當延時
comm1.RTSEnable = False 將Modem的PTT置低,將對講機改為接受狀態
comm1.InBufferCount = 0 清空接收緩沖區 
comm1.RThreshold = 1 設定RThreshold = 1,等待出發OnComm事件
End Sub
在OnComm編寫接收和處理代碼:
Sub Comm1_OnComm ()
Select Case comm1.CommEvent
Case MSCOMM_ER_RXOVER 接收緩沖區溢出。可插入相應的代碼
Case MSCOMM_ER_TXFULL 傳輸緩沖區已滿。可插入處理代碼
Case MSCOMM_ER_RECEIVE 收到1個字符,可進入以下處理過程
comm1.RThreshold = 0 不再響應OnComm事件,轉入查尋方式接收
ii = 0
iii = 0: sinn = Chr$(42): sinn1 = Chr$(42) 初始化變量
Do
duration = Timer + .2 設定超時退出的時間值
iii = iii + 1
sinn1 = sinn
Do 該循環判斷輸入緩沖區是否有數據或是否超時
'dummy% = DoEvents()
Loop Until comm1.InBufferCount >= 1 Or Timer >= duration
If Timer >= duration Then 
iii = iii - 1
overtime = True 確定超時退出,并非正常退出
Exit Do
End If
sinn = comm1.Input 正常退出,取值付給sinn
If header_er = 0 Then
GoTo test_header
End If
If Asc(sinn) > 175 Or Asc(sinn) < 160 Then 判斷包頭是否正確
iii = 0
GoTo station_number_er 包頭不正確,丟掉該數據
End If
test_header: header_er = 0 包頭正確,接受到包頭,header_er=0
ssin(iii) = sinn'----put date into string dimantion
station_number = Asc(ssin(1)) 
package_number = Asc(ssin(2))
sentence_number = Asc(ssin(3))
last_character = Asc(ssin(iii))
station_number_er: Loop Until sinn1 = Chr$(10) and sinn = Chr$(13) 當收到正確的包尾0A,0D后退出
If overtime = True Then 如果超時非正常退出
overtime = False
comm1.RThreshold = 1 重新啟動OnComm事件,等待接收下一包
timer6_wait.Enabled = True
GoTo endsub
End If
以下是接收數據正確以后的數據處理程序,包括解碼和計算這里從略。
If package_number = 1 Then 如果接收數據正確,而且是最后一包
timer2_sample.Enabled = True 啟動控制數傳命令定時器
comm1.RTSEnable = True 置PTT為高
comm1.OutBufferCount = 0 清空輸出緩沖區
Call time_delay 適當延時
comm1.Output = "*MACK" + Chr$(13) 發送清內存命令
Do 檢測是否發送完畢
Loop Until comm1.OutBufferCount = 0
Call time_delay 適當延時
comm1.RTSEnable = False 置PTT為低
End If
If package_number > 1 Then 如果不是最后一包
comm1.RThreshold = 1 啟動OnComm準備接收下一包
timer6_wait.Enabled = True 
End If
endsub: header_er = 1: comm1.InBufferCount = 0 '--empty inbuffer protect from bed data on the inbuffer
End Select
End Sub

五、 結論

根據我們實踐工作的經驗,在本項目中無線通訊和有線通訊的主要區別在于用MSCOMM控件的RTSEnable屬性對無線Modem的PTT操作以及適當的延時,延時的長短和使用的計算機有關。在開發的過程中,把握好上述兩條,設定一個合理的通信協議,選擇合適的硬件是至關重要的。




 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一区二区麻豆国产| 亚洲高清在线视频| 亚洲成人久久影院| 粉嫩一区二区三区性色av| 欧美亚日韩国产aⅴ精品中极品| 精品免费日韩av| 亚洲一区二区黄色| 成人精品国产一区二区4080| 日韩网站在线看片你懂的| 一区二区欧美视频| av午夜精品一区二区三区| 精品国产髙清在线看国产毛片| 亚洲一区二区欧美| 91麻豆精品一区二区三区| 欧美激情一区二区三区在线| 九九精品一区二区| 91精选在线观看| 午夜精品久久久久久久久| av在线不卡免费看| 欧美国产日韩精品免费观看| 美女一区二区三区| 69堂国产成人免费视频| 亚洲午夜视频在线| 欧洲另类一二三四区| 亚洲欧美日韩国产一区二区三区| 激情文学综合丁香| 久久综合久久综合久久综合| 九色综合狠狠综合久久| 精品捆绑美女sm三区| 男女男精品网站| 日韩一级片在线观看| 日韩成人伦理电影在线观看| 欧美丰满美乳xxx高潮www| 亚洲午夜久久久久中文字幕久| 91免费视频观看| 亚洲理论在线观看| 欧美日韩一区二区三区视频| 亚洲国产美国国产综合一区二区| 色视频一区二区| 午夜精品福利久久久| 欧美写真视频网站| 麻豆极品一区二区三区| 欧美成人艳星乳罩| 国产精品99久久久久久宅男| 国产精品色噜噜| 91视频www| 午夜精品久久久久久久99水蜜桃| 欧美一级日韩免费不卡| 国产综合色视频| 国产精品色婷婷| 精品视频在线免费| 黑人巨大精品欧美一区| 国产精品美女久久久久av爽李琼 | 色噜噜狠狠一区二区三区果冻| 国产农村妇女精品| 色香蕉久久蜜桃| 亚洲二区在线视频| 精品国产乱码久久久久久牛牛| 国产一区在线观看麻豆| ...中文天堂在线一区| 欧美图片一区二区三区| 久色婷婷小香蕉久久| 久久久国产精品麻豆| 色拍拍在线精品视频8848| 三级久久三级久久久| 国产亚洲欧美日韩日本| 91小视频在线| 精品在线亚洲视频| 综合亚洲深深色噜噜狠狠网站| 欧美丝袜第三区| 国产一区二区三区免费| 亚洲精品欧美专区| 久久综合中文字幕| 在线视频观看一区| 国产毛片精品视频| 成人深夜视频在线观看| 成人免费在线视频观看| 精品久久久久久久久久久久久久久| 懂色av一区二区夜夜嗨| 视频一区视频二区中文字幕| 国产精品拍天天在线| 91精品久久久久久久99蜜桃| 99国产欧美久久久精品| 九九精品一区二区| 日韩高清一区二区| 久久精品国产网站| 亚洲一区二区三区在线播放| 中文字幕不卡在线| 精品剧情在线观看| 欧美丰满少妇xxxxx高潮对白 | 欧美日韩和欧美的一区二区| 国产成人小视频| 麻豆91在线播放免费| 亚洲一级电影视频| 亚洲欧美日韩国产手机在线| 国产三级欧美三级| 日韩欧美国产wwwww| 91精品国产综合久久精品性色| 99国产精品99久久久久久| 国产经典欧美精品| 激情久久久久久久久久久久久久久久| 亚洲aaa精品| 香蕉乱码成人久久天堂爱免费| 亚洲日本中文字幕区| 国产精品国产自产拍在线| 国产午夜精品久久| 久久久久久一级片| 国产亚洲欧美日韩日本| 久久久久久久国产精品影院| 日韩欧美一二三四区| 欧美精品久久99久久在免费线| 色婷婷狠狠综合| 91成人在线精品| 欧美午夜电影网| 欧美亚男人的天堂| 欧美日本乱大交xxxxx| 欧美精品在线一区二区| 3d动漫精品啪啪一区二区竹菊 | 欧美精品一区男女天堂| 久久影视一区二区| 久久综合九色综合97婷婷女人 | 丁香啪啪综合成人亚洲小说| 国产成人av电影在线| 国产成人午夜高潮毛片| 国产激情视频一区二区在线观看 | 国产成人一区二区精品非洲| 国产一区二区伦理| 国产精品一卡二卡| av电影一区二区| 日本韩国欧美一区二区三区| 欧洲一区在线电影| 91精品国产一区二区三区蜜臀| 欧美一区二区三区免费大片| 日韩精品一区二区三区视频 | 日韩av中文在线观看| 麻豆精品一二三| 国产a视频精品免费观看| 91女人视频在线观看| 欧美亚男人的天堂| 337p日本欧洲亚洲大胆精品| 国产精品久久久久精k8| 亚洲成人免费视| 国产麻豆成人传媒免费观看| 91污片在线观看| 欧美一区二区三区四区在线观看| 日韩欧美黄色影院| 亚洲欧美影音先锋| 首页国产欧美日韩丝袜| 国产一区二区不卡在线| 日本道免费精品一区二区三区| 日韩一区二区三区观看| 中文字幕二三区不卡| 亚洲成av人片在www色猫咪| 国内久久精品视频| 色综合久久88色综合天天| 日韩精品专区在线影院观看| 国产精品精品国产色婷婷| 蜜桃一区二区三区在线| 成人av午夜影院| 日韩欧美国产成人一区二区| 亚洲欧美另类小说| 国产一区二区三区国产| 欧美日韩高清影院| 一区免费观看视频| 卡一卡二国产精品| 欧美综合色免费| 国产精品久久久久久久久免费丝袜| 日韩精品一卡二卡三卡四卡无卡| 国产精品影音先锋| 欧美精品 国产精品| 亚洲柠檬福利资源导航| 国产98色在线|日韩| 日韩女优制服丝袜电影| 亚洲成人精品影院| 日本黄色一区二区| 一区在线中文字幕| 国产精品538一区二区在线| 在线综合视频播放| 亚洲黄色小说网站| 不卡的电影网站| 久久精品无码一区二区三区| 日韩精品乱码免费| 欧美吻胸吃奶大尺度电影 | 色一区在线观看| 国产女主播一区| 久久se这里有精品| 日韩亚洲欧美综合| 三级一区在线视频先锋| 91丝袜国产在线播放| 国产精品久久久久久久久久免费看 | 亚洲视频免费在线| 大桥未久av一区二区三区中文| 久久婷婷综合激情| 韩国欧美国产1区| 精品理论电影在线| 国产综合成人久久大片91| 欧美成人国产一区二区| 肉色丝袜一区二区| 欧美日韩国产首页在线观看| 午夜欧美2019年伦理|