智能家居上位�(jī)是智能家居系�(tǒng)的一�(gè)重要組成部分,擔(dān)�(fù)著管理、控�、維�(hù)和用戶界面操作的重任,高效可靠的上位�(jī)�(shè)�(jì)是整�(gè)系統(tǒng)正常�(yùn)作的重要保障。上位機(jī)與系�(tǒng)的通信�(shí)際上是與下端單片�(jī)的通信。單片機(jī)或單片機(jī)系統(tǒng)是智能家居控制的核心,當(dāng)�(jì)算機(jī)作為單片系統(tǒng)的一�(gè)角色�(shí),通常被稱為�工控�(jī)”或“上位機(jī)�,各�(dú)立的單片�(jī)是系�(tǒng)中實(shí)�(xiàn)功能的一�(gè)模塊,所以有�(shí)也稱單片�(jī)為模��
1�1 通信測試工具
傳統(tǒng)的單片機(jī)系統(tǒng)的通信測試通過示波器來�(jiān)�,既不直觀又容易丟失信�。將�(jì)算機(jī)加入到系�(tǒng)�,可以實(shí)�(shí)�(jiān)測到線路中的信息,并以數(shù)字化呈現(xiàn),使各�(gè)單片�(jī)間的通信得到檢驗(yàn),及�(shí)解決系統(tǒng)存在的問�。所以計(jì)算機(jī)在加速系�(tǒng)的開�(fā)和保證系�(tǒng)的運(yùn)行質(zhì)量的作用就不言而喻��
1�2 系統(tǒng)維護(hù)
一�(gè)單片�(jī)系統(tǒng)往往需要對(duì)系統(tǒng)中各�(gè)不同功能的模�(單片�(jī))�(jìn)行參�(shù)的設(shè)�,以適應(yīng)不同的運(yùn)行環(huán)�,雖然可以通過各模塊的控制面板來調(diào)�,但操作通常比較麻煩,非人員不易掌握。同�(shí)�(duì)于一些需要定義其地理位置的參�(shù)難以�(shí)�(xiàn),不夠直觀。計(jì)算機(jī)加入到系�(tǒng)�,不但可以解決操作上的問題,同時(shí)還可以讀取各模塊的參�(shù),以便于�(diào)��
1�3 單片�(jī)
�(jì)算機(jī)可以作為單片�(jī)系統(tǒng)的一�(gè)模塊,完成相�(yīng)的功�。計(jì)算機(jī)�(yīng)答系�(tǒng)的請(qǐng)�、處理系�(tǒng)中的信息,一方面將信息呈�(xiàn)給用�,另一方面�(jì)算機(jī)程序通過自動(dòng)�(jì)算或用戶的輸入,將信息反饋到系統(tǒng)�,參與系�(tǒng)的控��
1�4 主控�(jī)
在單片機(jī)系統(tǒng)�,往往存在一�(gè)主控�(jī)或主控模�,負(fù)�(zé)�(duì)整�(gè)系統(tǒng)的統(tǒng)籌和�(shè)置。單片機(jī)系統(tǒng)通常是通過各功能模塊的輸入和響�(yīng)來實(shí)�(xiàn)其功能的,因此必須有一�(gè)�(fù)�(zé)收集輸入任務(wù)并指定響�(yīng)模塊的主控模�。計(jì)算機(jī)系統(tǒng)中既可以是一�(gè)普通的模塊,又可以是負(fù)�(zé)總體�(xié)�(diào)的主控器�
一�(gè)單片�(jī)系統(tǒng)是由硬件系統(tǒng)和軟件系�(tǒng)�(gòu)成的。硬件是�(shí)�(xiàn)功能的前提,而系�(tǒng)功能則是通過軟件來實(shí)�(xiàn)�,為了保證各�(gè)模塊通信,實(shí)�(xiàn)系統(tǒng)信息交流,必須制訂系�(tǒng)的通信�(xié)��
從物理上來說,系�(tǒng)各模塊是以半雙工的模式來通信�,下文提及的智能照明系統(tǒng)下端模塊就是以半雙工的RS 485總路線為通信架構(gòu)�。而計(jì)算機(jī)的RS 232串口是以全雙工的模式來實(shí)�(xiàn)通信�,因�,計(jì)算機(jī)要通過串口參與到單片機(jī)系統(tǒng)中必須增加一�(gè)RS 232和RS 485總線�(zhuǎn)換的模塊�
從邏輯上�,要�(shí)�(xiàn)各模塊之間的通信,就必須在模塊間約定一�(gè)共同遵守的通信�(xié)�。單片機(jī)以位(b)為基本單位,傳輸�(shí)�8�1字節(jié)(B)來傳�,單片機(jī)以毫秒間距發(fā)送若干�(gè)字節(jié)為一�(gè)�(shù)�(jù)包,也稱為一幀,幀之間又規(guī)定若干毫秒的間隙。通過�(jì)算機(jī)程序可以捕獲線路中每一幀信息�
下面以智能照明系�(tǒng)為例,講述單片機(jī)系統(tǒng)的通信�(xié)議�
本協(xié)議采用異步串行通信方式,字節(jié)幀格式�1�(gè)起始�+8�(gè)�(shù)�(jù)�+1�(gè)停止�,無校驗(yàn)位�
幀格式如下�
l幀=幀�(F4H F5H)+�(shù)�(jù)�+幀�(F4HFBH)<255B
�(shù)�(jù)�=有效字節(jié)�(shù)(1B)+傳輸層數(shù)�(jù)+校驗(yàn)�(1B)<251B
幀�(shù)�(jù)的發(fā)�、接收過程中前后兩字節(jié)�(shù)�(jù)傳送延�(shí)不得超過O.5s�
各模塊分配兩�(gè)字節(jié)的地址碼,字節(jié)代表模塊類型,第二字節(jié)代表模塊在系�(tǒng)中分配的順序。各模塊獲取總線上的幀�,對(duì)自己的地址幀響應(yīng),其他的幀拋掉�
以下是本�(xié)議中的關(guān)于“燈�??刂啤钡膮f(xié)議:
描述:該信息是輸出子模塊的各路燈的開或關(guān)控制�
�(gòu)成:該信息發(fā)送時(shí)由信息頭和信息內(nèi)容構(gòu)�,返回時(shí)由信息頭�(gòu)��
MSComm控件有很多重要的屬性,正確�(shè)置其屬性是程序�(jìn)行正常通信的保證,下面介紹幾�(gè)必須熟悉的屬��
CommPort:設(shè)置并返回通訊端口�(hào)�
Settings:以字符串的形式�(shè)置并返回波特�、奇偶校�(yàn)、數(shù)�(jù)�、停止位�
PortOpen:設(shè)置并返回通訊端口的狀�(tài),也可以打開和關(guān)閉端口�
Input:從接收緩沖區(qū)返回和刪除字��
InputMode:接收模�,取O值時(shí),接收文本數(shù)�(jù);取1�(shí),接收二�(jìn)制數(shù)�(jù)�
Output:向傳輸緩沖區(qū)寫一�(gè)字符��
Rthrehold:響�(yīng)模式,取整數(shù)。當(dāng)接收字符�,若Rthrehold屬性設(shè)置為O,則不產(chǎn)生ONComm事件;若�(shè)置為1,則接收緩沖區(qū)收到每一�(gè)字符都會(huì)使MSComm控件�(chǎn)生OnComm事件�
SThreshold:發(fā)送模式,�(shè)置O(缺省�),數(shù)�(jù)傳輸事件不會(huì)�(chǎn)生OnComm事件;設(shè)置為1,當(dāng)傳輸緩沖區(qū)完全空時(shí),MSComm控件�(chǎn)生OnComm事件。如果在傳輸緩沖區(qū)中的字符�(shù)小于value,CommEvent屬性設(shè)置為comEvSend,并�(chǎn)生OnComm事件�
Handshake:通信握手模式,取值為O�(shí),無握手;取值為1�(shí),表示XOn/Xoff握手;取值為2�(shí),表示Request-to�-send/clear-to-send握手;取值為3�(shí),表示eqLlest-to-send&clear-to-send握手皆可�
(1)事件�(qū)�(dòng)方式
事件�(qū)�(dòng)通訊是處理串行端*互作用的一種非常有效的方法。在許多情況�,在事件�(fā)生時(shí)需要得到通知,例�,在串口接收緩沖區(qū)中有字符,或者CarrierDetect(CD)或Request To Send(RTS)線上一�(gè)字符到達(dá)或一�(gè)變化�(fā)生時(shí)。在這些情況�,可以利用MSComm控件的OnComm事件捕獲并處理這些通訊事件。OnComm事件還可以檢查和處理通訊�(cuò)誤。所有通訊事件和通訊�(cuò)誤的列表,參閱CommEvent屬�。在編程過程�,就可以在OnComm事件處理函數(shù)中加入自己的處理代碼。這種方法的優(yōu)�(diǎn)是程序響�(yīng)及時(shí),可靠性高。每�(gè)MSComm控件�(duì)�(yīng)著一�(gè)串行端口。如果應(yīng)用程序需要訪問多�(gè)串行端口,必須使用多�(gè)MSComm控件�
(2)查詢方式
查詢方式�(shí)�(zhì)上還是事件驅(qū)�(dòng),但在有些情況下,這種方式顯得更為便捷。在程序的每�(gè)�(guān)鍵功能之�,可以通過檢查CommEvent屬性的值來查詢事件和錯(cuò)�。如果應(yīng)用程序較�,并且是自保持的,這種方法可能是更可取�。例�,如果寫一�(gè)簡單的電話撥�(hào)程序,則沒有必要�(duì)每接收一�(gè)字符都產(chǎn)生事�,因?yàn)槲┮坏却邮盏淖址钦{(diào)制解�(diào)器的“確定”響�(yīng)�