機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
多站遠(yuǎn)程無(wú)線(xiàn)控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā)
多站遠(yuǎn)程無(wú)線(xiàn)控制信號(hào)系統(tǒng)通信軟件的開(kāi)發(fā)
 更新時(shí)間:2008-8-18 11:08:18  點(diǎn)擊數(shù):42
【字體: 字體顏色
事件驅(qū)動(dòng)轉(zhuǎn)查詢(xún)方式。這三種方式各有利弊,其中查詢(xún)方式具有方便可靠的特點(diǎn),可利用協(xié)議或設(shè)定時(shí)鐘來(lái)進(jìn)入和退出查詢(xún)狀態(tài),但它不是資源的有效利用方式;事件觸發(fā)方式對(duì)于定長(zhǎng)通訊非常有效,但其定長(zhǎng)通訊在有些場(chǎng)合不適用;而事件驅(qū)動(dòng)轉(zhuǎn)查詢(xún)方式既有事件驅(qū)動(dòng)的特點(diǎn)又有轉(zhuǎn)查詢(xún)方式的特點(diǎn),可以說(shuō)是匯集了前二者之長(zhǎng),故可有效利用資源。下面著重介紹事件驅(qū)動(dòng)轉(zhuǎn)查詢(xún)方式。

由于在通訊中,RTS電平可置高或置低,如果用事件驅(qū)動(dòng),計(jì)算機(jī)就會(huì)進(jìn)入中斷,資源就沒(méi)有有效利用,所以在程序中添加了一個(gè)接收函數(shù)。為了保證程序的可靠性和靈活性,可以運(yùn)用設(shè)置身份碼等方法來(lái)保證各個(gè)子站互不干擾,具體實(shí)現(xiàn)過(guò)程的主程序流程圖如圖2所示。

除以上處理外,還可以使用以下方法來(lái)增加系統(tǒng)的可靠性、靈活性和效率。

(1)設(shè)置身份碼和目的地址

每個(gè)數(shù)傳模塊均有表示其唯一身份的身份碼,身份碼長(zhǎng)為兩個(gè)字節(jié)共十六位。第一字節(jié)表示組碼,第二字節(jié)表示組內(nèi)識(shí)別碼,身份碼可用D7HF5HXXHYYH設(shè)置,可設(shè)置于模塊內(nèi)的EEROM中,掉電后不丟失。在數(shù)據(jù)傳送前,應(yīng)設(shè)置目的地址,以便確定由哪個(gè)來(lái)接收數(shù)據(jù)。采用此方法可以有效地防止干擾。

(2)使用動(dòng)態(tài)數(shù)組

接收字節(jié)數(shù)據(jù)時(shí),必須使用動(dòng)態(tài)數(shù)組。一個(gè)動(dòng)態(tài)數(shù)組被聲明后,可以利用Input屬性將串行端口輸入緩沖區(qū)內(nèi)的數(shù)據(jù)指定到該動(dòng)態(tài)數(shù)組中。被接收到的數(shù)據(jù)的實(shí)際大小必須利用Lbound及Ubound才能取得最大及最小索引值,同時(shí)也只有這樣,才能利用程序?qū)?nèi)部的值一一顯示出來(lái)。另外,利用最大和最小索引值還可以判斷是否為一次成功接收。

(3)最優(yōu)化TimeDelay

在每次傳輸指令后,一定要等待一段時(shí)間才可能從串行端口的輸入緩沖區(qū)中取得信號(hào)源傳回的數(shù)據(jù),這個(gè)時(shí)間有多久是項(xiàng)目的關(guān)鍵,太長(zhǎng)了效率太低,太短了,數(shù)據(jù)有可能接收不全,所以有必要進(jìn)行最佳化測(cè)試。具體代碼如下:

Public Declare Function GetTickCount Lib ″ker-nel32″ ()As Long

Dim Buf$

Dim T1&T2&

Comm1.Output=Trim(Ucase(txtsend..Text)) & vbcr

T1=GetTickCount()

Do

Buf=Buf & Comm1.Input

Loop Unitl Instr(1,Buf,vbCr)>0

T2=GetTickCount()

LblTime.Caption=CStr(T2-T1) & “ms”

該程序中使用GetTickCount來(lái)取得系統(tǒng)自開(kāi)機(jī)后每千分之一秒更新的Tick值,在接收的前后加上。裕椋悖胫档臄⑹,自然就可以得到傳輸?shù)臅r(shí)間了。從測(cè)試的結(jié)果來(lái)看,傳輸單個(gè)數(shù)據(jù)的時(shí)間為100ms,10個(gè)群組的時(shí)間約為500ms。

(4) 增加程序的效率

利用下面的程序可在無(wú)線(xiàn)通訊受到干擾或?qū)Ψ皆O(shè)備電源沒(méi)有打開(kāi)等原因造成對(duì)方數(shù)據(jù)不能上傳時(shí),避免程序一直在等待。如果在規(guī)定時(shí)間內(nèi)還沒(méi)等到規(guī)定的字節(jié)數(shù)時(shí)就跳出循環(huán),并出現(xiàn)一個(gè)重新發(fā)送對(duì)話(huà)框。此時(shí)如果還是不對(duì),就彈出一個(gè)對(duì)話(huà)框“請(qǐng)檢查系統(tǒng)。。具體程序如下:

Public Sub ReceiveData()

′On Error Resume Next

Dim start, dend As Integer

Dim byin() As Byte

Dim byindata(11) As Byte

Dim I% buf$

′根據(jù)事件分發(fā)處理

Do While frmMSCommDemo.MSComm1.CommEvent = 2

Exit Do

Loop

Timedelay 850 ′適當(dāng)延時(shí)

byin = frmMSCommDemo.MSComm1.Input

′接收串行端口內(nèi)的數(shù)據(jù)至動(dòng)態(tài)數(shù)組中

dend = UBound(byin) ′得到最大值

start = LBound(byin) ′得到最小值

If dend < 5 Then

MsgBox RadarNoOut & “信號(hào)源出現(xiàn)系統(tǒng)

故障,請(qǐng)求檢修!” vbOKOnly

Exit Sub

End If

′接收串行端口內(nèi)的數(shù)據(jù)至動(dòng)態(tài)數(shù)組中

′ReDim Preserve byin(11) As Byte

If byindata(0) = &H55 And byindata(1) = &HAA

Then ′包頭正確,接收到包頭進(jìn)行數(shù)據(jù)處理

End sub

′延時(shí)程序

Sub Timedelay(TT As Long)

Dim t As Long ′聲明一個(gè)長(zhǎng)整數(shù),記錄計(jì)數(shù)值

t = GetTickCount() ′取得系統(tǒng)計(jì)數(shù)值

Do ′開(kāi)始循環(huán)

DoEvents

If GetTickCount - t < 0 Then t = GetTick-Count ′歸零

Loop Until GetTickCount - t >= TT ′計(jì)算延遲是否到達(dá)

End Sub

4 結(jié)論

根據(jù)本系統(tǒng)的研制經(jīng)驗(yàn),利用MSCOMM控件開(kāi)發(fā)無(wú)線(xiàn)通信要把握好以下三條:

(1) 收發(fā)之間應(yīng)延時(shí)適當(dāng),這需要在測(cè)試中不斷地調(diào)試,以達(dá)到最佳效果。

(2) 選用好的且必須具有糾錯(cuò)功能的無(wú)線(xiàn)數(shù)傳模塊,否則將達(dá)不到理想的效果。

(3) 設(shè)定一個(gè)合理的通信協(xié)議,使中心站與子站有良好的溝通。實(shí)際測(cè)驗(yàn)證明,本系統(tǒng)在WIN98中運(yùn)行穩(wěn)定,在實(shí)驗(yàn)過(guò)程中取得了良好的效果。


 

  • 上一篇: 一種超寬脈沖發(fā)生器的設(shè)計(jì)
  • 下一篇: WEP安全性能研究及其攻擊
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話(huà):0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1