智慧型家居上位機是智慧型家居系統的一個重要組成部分,擔負著管理、控制、維護和用戶界面操作的重任,高效可靠的上位機設計是整個系統正常運作的重要保障。上位機與系統的通信實際上是與下端單片機的通信。單片機或單片機系統是智慧型家居控制的核心,當計算機作為單片系統的一個角色時,通常被稱為“工控機”或“上位機”,各獨立的單片機是系統中實現功能的一個模組,所以有時也稱單片機為模組。
作用,通信協定,mscomm控制項的屬性,通訊的方式,
作用
1.1 通信測試工具 傳統的單片機系統的通信測試通過示波器來監測,既不直觀又容易丟失信息。將計算機加入到系統中,可以實時監測到線路中的信息,並以數位化呈現,使各個單片機間的通信得到檢驗,及時解決系統存在的問題。所以計算機在加速系統的開發和保證系統的運行質量的作用就不言而喻了。 1.2 系統維護 一個單片機系統往往需要對系統中各個不同功能的模組(單片機)進行參數的設定,以適應不同的運行環境,雖然可以通過各模組的控制臺來調整,但操作通常比較麻煩,非專業人員不易掌握。同時對於一些需要定義其地理位置的參數難以實現,不夠直觀。計算機加入到系統中,不但可以解決操作上的問題,同時還可以讀取各模組的參數,以便於調整。 1.3 單片機 計算機可以作為單片機系統的一個模組,完成相應的功能。計算機應答系統的請求、處理系統中的信息,一方面將信息呈現給用戶,另一方面電腦程式通過自動計算或用戶的輸入,將信息反饋到系統中,參與系統的控制。 1.4 主控機 在單片機系統中,往往存在一個主控機或主控模組,負責對整個系統的統籌和設定。單片機系統通常是通過各功能模組的輸入和回響來實現其功能的,因此必須有一個負責收集輸入任務並指定回響模組的主控模組。計算機系統中既可以是一個普通的模組,又可以是負責總體協調的主控器。
通信協定
一個單片機系統是由硬體系統和軟體系統構成的。硬體是實現功能的前提,而系統功能則是通過軟體來實現的,為了保證各個模組通信,實現系統信息交流,必須制訂系統的通信協定。 從物理上來說,系統各模組是以半雙工的模式來通信的,下文提及的智慧型照明系統下端模組就是以半雙工的rs 485總路線為通信架構的。而計算機的rs 232串口是以全雙工的模式來實現通信的,因此,計算機要通過串口參與到單片機系統中必須增加一個rs 232和rs 485匯流排轉換的模組。 從邏輯上講,要實現各模組之間的通信,就必須在模組間約定一個共同遵守的通信協定。單片機以位(b)為基本單位,傳輸時以8位1位元組(b)來傳輸,單片機以毫秒間距傳送若干個位元組為一個數據包,也稱為一幀,幀之間又規定若干毫秒的間隙。通過電腦程式可以捕獲線路中每一幀信息。 下面以智慧型照明系統為例,講述單片機系統的通信協定。 本協定採用異步串列通信方式,位元組幀格式:1個起始位+8個數據位+1個停止位,無校驗位。 幀格式如下: l幀=幀頭(f4h f5h)+數據包+幀尾(f4hfbh)<255b 數據包=有效位元組數(1b)+傳輸層數據+校驗和(1b)<251b 幀數據的傳送、接收過程中前後兩位元組數據傳送延時不得超過o.5s。 各模組分配兩個位元組的地址碼,第一位元組代表模組類型,第二位元組代表模組在系統中分配的順序。各模組獲取匯流排上的幀後,對自己的地址幀回響,其他的幀拋掉。 以下是本協定中的關於“燈開停控制”的協定: 描述:該信息是輸出子模組的各路燈的開或關控制。 構成:該信息傳送時由信息頭和信息內容構成,返回時由信息頭構成。
mscomm控制項的屬性
mscomm控制項有很多重要的屬性,正確設定其屬性是程式進行正常通信的保證,下面介紹幾個必須熟悉的屬性。 commport:設定並返回通訊連線埠號。 settings:以字元串的形式設定並返回波特率、奇偶校驗、數據位、停止位。 portopen:設定並返回通訊連線埠的狀態,也可以打開和關閉連線埠。 input:從接收緩衝區返回和刪除字元。 inputmode:接收模式,取o值時,接收文本數據;取1時,接收二進制數據。 output:向傳輸緩衝區寫一個字元串。 rthrehold:回響模式,取整數。當接收字元後,若rthrehold屬性設定為o,則不產生oncomm事件;若設定為1,則接收緩衝區收到每一個字元都會使mscomm控制項產生oncomm事件。 sthreshold:傳送模式,設定o(預設值),數據傳輸事件不會產生oncomm事件;設定為1,當傳輸緩衝區完全空時,mscomm控制項產生oncomm事件。如果在傳輸緩衝區中的字元數小於value,commevent屬性設定為comevsend,並產生oncomm事件。 handshake:通信握手模式,取值為o時,無握手;取值為1時,表示xon/xoff握手;取值為2時,表示request-to\-send/clear-to-send握手;取值為3時,表示eqllest-to-send&clear-to-send握手皆可。
通訊的方式
(1)事件驅動方式 事件驅動通訊是處理串列端*互作用的一種非常有效的方法。在許多情況下,在事件發生時需要得到通知,例如,在串口接收緩衝區中有字元,或者carrierdetect(cd)或request to send(rts)線上一個字元到達或一個變化發生時。在這些情況下,可以利用mscomm控制項的oncomm事件捕獲並處理這些通訊事件。oncomm事件還可以檢查和處理通訊錯誤。所有通訊事件和通訊錯誤的列表,參閱commevent屬性。在編程過程中,就可以在oncomm事件處理函式中加入自己的處理代碼。這種方法的優點是程式回響及時,可靠性高。每個mscomm控制項對應著一個串列連線埠。如果應用程式需要訪問多個串列連線埠,必須使用多個mscomm控制項。 (2)查詢方式 查詢方式實質上還是事件驅動,但在有些情況下,這種方式顯得更為便捷。在程式的每個關鍵功能之後,可以通過檢查commevent屬性的值來查詢事件和錯誤。如果應用程式較小,並且是自保持的,這種方法可能是更可取的。例如,如果寫一個簡單的電話撥號程式,則沒有必要對每接收一個字元都產生事件,因為惟一等待接收的字元是數據機的“確定”回響。