• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 手機與無線通信 > 設計應用 > 基于串行通信的智能家居上位機設計

    基于串行通信的智能家居上位機設計

    作者: 時間:2010-09-22 來源:網絡 收藏

    3.2.2 MSComm控件兩種處理通訊的方式
    MSComm控件提供下列兩種處理通訊的方式:事件驅動方式和查詢方式。
    (1)事件驅動方式
    事件驅動通訊是處理端口交互作用的一種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在串口接收緩沖區中有字符,或者CarrierDetect(CD)或Request To Send(RTS)線上一個字符到達或一個變化發生時。在這些情況下,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱CommEvent屬性。在編程過程中,就可以在OnComm事件處理函數中加入自己的處理代碼。這種方法的優點是程序響應及時,可靠性高。每個MSComm控件對應著一個端口。如果應用程序需要訪問多個端口,必須使用多個MSComm控件。
    (2)查詢方式
    查詢方式實質上還是事件驅動,但在有些情況下,這種方式顯得更為便捷。在程序的每個關鍵功能之后,可以通過檢查CommEvent屬性的值來查詢事件和錯誤。如果應用程序較小,并且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程序,則沒有必要對每接收一個字符都產生事件,因為惟一等待接收的字符是調制解調器的“確定”響應。
    3.3 計算機信息發送和接收的實現
    下面以智能照明系統中PC機與主控器的,說明計算機與單片機的實現方法。以下是實現的主要子程序。
    頁面裝載程序:

    建立后,計算機就可以與下端單片機通過設定的協議進行通信,可以測試下端模塊的響應。

    4 MSComm控件的問題和解決辦法
    在實際應用中,MSComm控件對于一問一答式的通信,效果還是可以的,所以用于單模塊的通信測試問題不大。但是,如果計算機作為單片系統的一個角色,要實時捕獲總線上的信息并響應,存在失幀和誤幀的問題,如果系統要求不高,還可以對付,而象智能照明這樣要求信息持續、實時、準確的系統,利用MSComm控件處理串口通信就難以勝任了。
    在智能照明系統中,采用了自編制的動態庫Transdata,dll程序,作為處理串口通信的接口,誤幀率和失幀率較低,能滿足產品化的要求。
    Transdata.dll使用說明:
    (1)初始化串口并處于通訊狀態函數>
    Init_OpenCom(byval m_str as string,byval nbaud as Integer)as Boolean
    參數說明:m_str為串口名稱,如“coml”“com2”等;nbaud為波特率,可為1200,2400,4800,9600等;返回值為Boolean,若為true則成功,否則失敗false。
    (2)關閉串口結束通訊過程>
    CloseCom()
    (3)發送通訊數據過程>
    SendData(n_str as byte,byval ncount as Integer)
    參數說明:n_str為要發送byte的數組的第一個字節;如要發dim ndata(11)as byte這個數組,只需用ndata(0)作為n_str參數即可;nc-ount為要發送的字節數。
    (4)接收返回的數據函數>
    GetData(byval m_str as string)as string
    參數說明:m_str必須為已有能容納所要接收字串的長度空間返回接收到的字串,各個字節以“\t”隔開。

    5 結語
    利用MSComm控件雖然可以方便快捷編制出的機程序,但其通信效率偏低,誤幀和失幀率較高,只適用于單模塊測試。對于多模塊實時通信系統,宜采用其他控件或自編制更有效的收發程序。

    本文引用地址:http://www.czjhyjcfj.com/article/157065.htm

    上一頁 1 2 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 讷河市| 平邑县| 清涧县| 沂源县| 宣城市| 金寨县| 宁陕县| 常德市| 华安县| 夹江县| 嘉黎县| 繁昌县| 宜城市| 和林格尔县| 清苑县| 禄劝| 元朗区| 栾川县| 鄂温| 新巴尔虎右旗| 民和| 大庆市| 烟台市| 宾阳县| 满城县| 怀安县| 和静县| 定远县| 枞阳县| 凤山市| 彭山县| 阳新县| 通渭县| 长沙县| 苗栗市| 岑巩县| 洛宁县| 昭觉县| 隆林| 哈密市| 小金县|