??? 摘 要: 介紹了xPL協(xié)議的基本內(nèi)容、工作過(guò)程和使用方法;并以電話(huà)遠(yuǎn)程遙控" title="遠(yuǎn)程遙控">遠(yuǎn)程遙控系統(tǒng)運(yùn)用xPL與上位機(jī)" title="上位機(jī)">上位機(jī)、下位機(jī)" title="下位機(jī)">下位機(jī)完成數(shù)據(jù)通信,最終實(shí)現(xiàn)對(duì)家居設(shè)施的遠(yuǎn)程控制" title="遠(yuǎn)程控制">遠(yuǎn)程控制。
??? 關(guān)鍵詞: xPL協(xié)議? 遠(yuǎn)程控制? 智能家居
?
??? 智能家居控制系統(tǒng)的出現(xiàn)使得人們可以通過(guò)電話(huà)、手機(jī)或者互聯(lián)網(wǎng)在任何時(shí)候、任意地點(diǎn)對(duì)家中的任意電器,如燈光、電源和家庭環(huán)境等進(jìn)行遠(yuǎn)程控制。然而,為了協(xié)調(diào)家居各子系統(tǒng)能順利工作,控制系統(tǒng)必須使用具有強(qiáng)大兼容性的協(xié)議對(duì)各個(gè)子系統(tǒng)進(jìn)行控制。xPL協(xié)議[1](eXtremely simPle protocoL)就是這樣一個(gè)具有強(qiáng)大兼容性的協(xié)議,是一種新穎的智能家居控制系統(tǒng)中的通信協(xié)議,2003年1月由英國(guó)的兩名工程師 Ian Lowe和Tony Tofts發(fā)起,并于2003年上半年得到完善。運(yùn)用xPL協(xié)議,可以根據(jù)用戶(hù)自身的需要,編寫(xiě)出相應(yīng)的個(gè)性化程序,將使智能家居系統(tǒng)的開(kāi)發(fā)變得簡(jiǎn)單,并能完成對(duì)多種家電的控制。開(kāi)發(fā)的系統(tǒng)將具有可靠性、兼容性和安全性。
1 xPL協(xié)議的指令信息格式
??? xPL信息有三種類(lèi)型,分別為xpl-cmnd、xpl-stat 和xpl-trig,它們使得xPL網(wǎng)絡(luò)中各設(shè)備之間的相互通信過(guò)程變得簡(jiǎn)單。
??? xPL程序以行為單位,每行以一個(gè)換行符作為結(jié)束。一個(gè)完整的xPL信息應(yīng)該由以下四部分組成:
??? (1) 信息類(lèi)型(xpl-cmnd、xpl-stat 或者xpl-trig);
??? (2) 一個(gè)大小可以變(但須在限定范圍內(nèi))的頭文件;
??? (3) schema.version 格式的信息樣式表;
??? (4) 一個(gè)單一信息“體”,包含 name=value。
??? 信息格式(Schema)標(biāo)識(shí)符是為了使來(lái)自不同廠商的設(shè)備和程序能夠在開(kāi)放的環(huán)境下通信,schema定義了傳輸信息的格式內(nèi)容。這樣,每條信息將屬于一個(gè)特定的類(lèi)。
??? 命令、狀態(tài)和其他信息是以一系列名稱(chēng)/值對(duì)組成的xPL信息表達(dá)的。一個(gè)xPL信息可能包含很多這樣的對(duì)。信息包含的特定內(nèi)容以及這些內(nèi)容的順序由所用信息的schema規(guī)定。開(kāi)發(fā)者可以在其中加入更多的信息,但由信息schema規(guī)定的基本要素必須總是以正確的順序羅列出。
1.1 xpl-cmnd指令
??? xpl-cmnd指令是用來(lái)使一個(gè)裝置執(zhí)行一個(gè)動(dòng)作的,分為兩種:定向命令信息和廣播命令信息。
1.1.1? 定向命令信息
??? 如果想對(duì)家居環(huán)境中的一個(gè)特定的裝置進(jìn)行控制,如休息室里的窗簾控制器,或者中央供暖系統(tǒng)的加熱器,信息可以通過(guò)目標(biāo)定向傳達(dá)到受控裝置或程序。只有信息中指定的目標(biāo)定向裝置或程序才會(huì)對(duì)收到的定向命令信息進(jìn)行響應(yīng)。
1.1.2? 廣播命令信息
??? 廣播命令信息向xPL網(wǎng)絡(luò)中所有裝置和應(yīng)用程序" title="應(yīng)用程序">應(yīng)用程序發(fā)送一個(gè)xPL命令,一旦此信息發(fā)出,xPL網(wǎng)絡(luò)中所有裝置和應(yīng)用程序都會(huì)對(duì)此信息進(jìn)行響應(yīng)。
1.2 xpl-stat指令
??? xpl-stat指令是用來(lái)獲取xPL網(wǎng)絡(luò)中的裝置或程序的實(shí)際狀態(tài)信息的。所有的裝置和應(yīng)用程序都應(yīng)該定時(shí)發(fā)送一個(gè)“heartbeat”(心跳)狀態(tài)信息,并且可以隨意地對(duì)詢(xún)問(wèn)當(dāng)前狀態(tài)的請(qǐng)求作出回應(yīng)。
1.2.1 Heartbeat心跳信息
??? 一個(gè)xPL網(wǎng)絡(luò)中的所有裝置都應(yīng)該發(fā)送heartbeat信息(Hub除外)。Heartbeat中囊括了配置信息、正常監(jiān)視、故障診斷和事件日志。Heartbeat的時(shí)間間隔由開(kāi)發(fā)者定義,可以是5~30分鐘內(nèi)的任何時(shí)間長(zhǎng)度。請(qǐng)求所有設(shè)備識(shí)別它們自身,程序可發(fā)送一個(gè)廣播命令。格式是一個(gè)schema類(lèi)hbeat.request類(lèi)型和command=request單一體元素。當(dāng)一個(gè)xPL設(shè)備接收到這樣的信息時(shí),它應(yīng)當(dāng)發(fā)送一個(gè)標(biāo)準(zhǔn)的heartbeat信息作為回復(fù)。
1.2.2 狀態(tài)請(qǐng)求
??? 與采用通常的heartbeat一樣,在xPL網(wǎng)絡(luò)中的設(shè)備要想知道另一個(gè)設(shè)備的當(dāng)前狀態(tài),可以啟用狀態(tài)請(qǐng)求機(jī)制。
1.3? xpl-trig指令
??? 在xPL網(wǎng)絡(luò)中,無(wú)論何時(shí),當(dāng)出現(xiàn)一個(gè)裝置的狀態(tài)改變、響應(yīng)一個(gè)xPL命令、一個(gè)人的直接的行為(如按下一個(gè)開(kāi)關(guān))等情況時(shí),不論這種變化是否由一個(gè)外部事件(按下一個(gè)按鈕,IR探測(cè),達(dá)到溫度,或者一個(gè)設(shè)備啟動(dòng))引起,觸發(fā)信息都會(huì)被發(fā)送。
2 xPL設(shè)備配置
2.1 Group(組)
??? 當(dāng)智能家居環(huán)境中的同類(lèi)設(shè)備不止一個(gè)、用戶(hù)想同時(shí)控制它們的打開(kāi)或者關(guān)閉時(shí),可將此類(lèi)設(shè)備設(shè)置為同一個(gè)組。xPL為此提供了一個(gè)強(qiáng)大的機(jī)制,它的形式為:“group=”的配置標(biāo)簽。配置信息中的 “group=”標(biāo)簽將清空已經(jīng)存在的組。因此,當(dāng)一個(gè)設(shè)備的組將要發(fā)生改變時(shí),所有想要包含此設(shè)備的組必須在配置信息中全部被設(shè)定。
2.2 Filter(過(guò)濾器)
??? 在xPL網(wǎng)絡(luò)中,有大量的xPL信息,但其中的設(shè)備并不是每條信息都需要接收,這樣,就需要一個(gè)過(guò)濾器filter將與其無(wú)關(guān)的信息過(guò)濾掉,而只接收與自身匹配的信息。信息過(guò)濾器可以通過(guò)一個(gè)配置信息指定使用。過(guò)濾器是在一個(gè)配置信息中用“filter=tag”來(lái)定義。一個(gè)配置信息中的“filter=tag”將會(huì)清空已有的過(guò)濾器,因此,當(dāng)要改變一個(gè)過(guò)濾器時(shí),所有期望的過(guò)濾器必須在配置信息中設(shè)定。過(guò)濾器只應(yīng)用于廣播信息,為的是減少設(shè)備所使用信息的數(shù)量。如果多個(gè)過(guò)濾器同時(shí)存在,只要其中的一個(gè)與將要處理的信息匹配就可以了。
3 xPL服務(wù)器配置
3.1 xPL Hub
??? 因?yàn)門(mén)CP/IP協(xié)議一次只允許一個(gè)應(yīng)用程序占用一個(gè)特定的端口,因此,用一個(gè)“Hub”機(jī)制來(lái)實(shí)現(xiàn)多個(gè)xPL應(yīng)用程序在同一個(gè)主機(jī)上運(yùn)行。一個(gè)應(yīng)用程序如果要偵聽(tīng)xPL通信,應(yīng)該與一個(gè)動(dòng)態(tài)UDP端口進(jìn)行綁定,并且在心跳信息或者設(shè)置信息中將程序偵聽(tīng)的端口發(fā)送出去。Hub接收到這些心跳信息后將應(yīng)用程序添加到它的客戶(hù)機(jī)名單中。當(dāng)進(jìn)來(lái)的xPL信息在一個(gè)xPL端口被接收到時(shí),Hub會(huì)把它們轉(zhuǎn)發(fā)給所有注冊(cè)的客戶(hù)機(jī)。在以太網(wǎng)上傳輸?shù)膞PL信息支持最大為1 500字節(jié)的信息長(zhǎng)度。
3.2 xPLHal
3.2.1 xPLHal的概念
??? xPLHal是一個(gè)沒(méi)有圖形用戶(hù)界面的服務(wù)程序。在沒(méi)有xPL設(shè)備接入網(wǎng)絡(luò)的情況下,它也會(huì)一直在后臺(tái)運(yùn)行。xPLHal Manager是一個(gè)xPLHal的控制臺(tái)程序,它使用XHCP(而不是xPL)對(duì)底層服務(wù)進(jìn)行配置,它可以在網(wǎng)絡(luò)中的任何PC機(jī)上運(yùn)行,而不一定是在xPL的服務(wù)器上。xPLHal完全可以在沒(méi)有Manager的情況下運(yùn)行。
3.2.2? xPLHal 中的參數(shù)設(shè)置
??? (1) Modes(狀態(tài))
Modes被用來(lái)反映一個(gè)房間可以處于的不同狀態(tài)。例如,“繁忙”、“空閑”和“休息”。它可以通過(guò)xPLHal屬性對(duì)話(huà)框的相關(guān)標(biāo)簽進(jìn)行設(shè)定。
??? 房間處于不同狀態(tài)時(shí),其Modes也不相同。因此,用戶(hù)可以利用Modes編程來(lái)制定智能家居系統(tǒng)的行為。例如,可以使一個(gè)xPL指令信息在房間“空閑”模式下觸發(fā),而在房間“繁忙”時(shí),這個(gè)行為卻不發(fā)生。
??? (2) Periods(時(shí)段)
??? Periods用來(lái)代表一天中不同的時(shí)段。默認(rèn)情況下可以有兩個(gè)備選值:Day(白天)和Night(黑夜)。同樣可以利用Periods編程來(lái)制定家居系統(tǒng)的行為。
??? 究竟Periods是“白天”還是“黑夜”可以通過(guò)許多方法判斷,下面給出其中的一些方法:
??? ①通過(guò)安裝xPL的DawnDusk服務(wù)程序。它可以在“黎明”和“黃昏”時(shí)分別發(fā)出xPL信息,原理是它可以根據(jù)所在地計(jì)算出日出和日落的時(shí)間。
??? ②在PC機(jī)上直接接入光傳感器,例如通過(guò)串行口接入。
??? 在家居系統(tǒng)中,程序可以將Modes與Period聯(lián)合使用,從而實(shí)現(xiàn)一個(gè)比較復(fù)雜的邏輯環(huán)境。
??? (3) Global variables全局變量
??? 全局變量由xPLHal支持并由用戶(hù)自己定義的變量。如果用戶(hù)需要保存程序中的狀態(tài)信息,則可以將它保存在全局變量集合中。全局變量是不可變的,它將被寫(xiě)入磁盤(pán),確保即使系統(tǒng)重啟時(shí)它的值仍然存在。全局變量也將被復(fù)制給其他xPLHal從服務(wù)器。
??? Mode和Periods值將以全局變量的形式存儲(chǔ)在xPLHal中,而VB程序員可以通過(guò)xPL開(kāi)發(fā)者提供的ActiveX控件在VB程序中方便地找到這些全局變量,同時(shí)也可以得到各個(gè)設(shè)備的當(dāng)前狀態(tài)和當(dāng)前時(shí)段。
4 電話(huà)遠(yuǎn)程遙控系統(tǒng)設(shè)計(jì)
4.1電話(huà)遠(yuǎn)程遙控系統(tǒng)設(shè)計(jì)方案[2]
??? 在xPL協(xié)議的幫助下,只要將家中固定電話(huà)、PC機(jī)和單片機(jī)相連接,就可以利用手機(jī)完成對(duì)家中家居設(shè)施的遠(yuǎn)程控制。當(dāng)電話(huà)打入時(shí),xPL協(xié)議從調(diào)制解調(diào)器上收到用戶(hù)的控制命令,并將信息傳遞給上位PC機(jī),由上位機(jī)對(duì)信息處理后,將指令傳達(dá)給單片機(jī),單片機(jī)將直接控制家中所有的被控設(shè)備。本實(shí)驗(yàn)系統(tǒng)中,單片機(jī)的控制對(duì)象分為開(kāi)關(guān)量對(duì)象和紅外遙控對(duì)象。由單片機(jī)控制的紅外發(fā)射器可以對(duì)一切具有紅外接收功能的家電諸如空調(diào)、電視機(jī)、DVD播放機(jī)等進(jìn)行控制。系統(tǒng)設(shè)計(jì)方案如圖1所示。
?????????????????????????????
??? 雖然xPL軟件本身提供了強(qiáng)大的功能,但要實(shí)現(xiàn)用戶(hù)要求的復(fù)雜控制功能,還需要編寫(xiě)控制程序。xPL軟件是基于Visual Basic語(yǔ)言開(kāi)發(fā)的,同時(shí)xPL開(kāi)發(fā)者提供了ActiveX控件,使得Visual Basic編程者很容易將xPL功能加入到程序中。加之Visual Basic用于制作界面強(qiáng)大又易于操作的優(yōu)勢(shì),因此,本實(shí)驗(yàn)系統(tǒng)的上位機(jī)程序采用VB編寫(xiě)控制程序??刂瞥绦?qū)⒇?fù)責(zé)接收xPL指令信息,做出判斷和處理后,向單片機(jī)下達(dá)指令完成控制動(dòng)作。
4.2 程序介紹
4.2.1 xPLPhone
??? 若要實(shí)現(xiàn)電話(huà)對(duì)家中家居設(shè)施的控制,則需要安裝xPLPhone軟件。xPLPhone是一款xPL官方網(wǎng)站提供的免費(fèi)軟件。它能使調(diào)制解調(diào)器成為一個(gè)完全支持xPL的設(shè)備,使得PC機(jī)能夠接聽(tīng)電話(huà),可以通過(guò)對(duì)xPLPhone編寫(xiě)基于xPL指令信息與協(xié)議規(guī)則的腳本語(yǔ)言實(shí)現(xiàn)既定的功能。
??? 電話(huà)遠(yuǎn)程遙控系統(tǒng)包括兩大功能:一是主人不在家時(shí)的訪客留言錄音功能;二是主人對(duì)智能控制系統(tǒng)中的設(shè)備的電話(huà)遠(yuǎn)程遙控功能。圖2是電話(huà)遠(yuǎn)程遙控流程示意圖。
???????????????????????????????
4.2.2 控制界面設(shè)計(jì)
??? 系統(tǒng)的控制界面如圖3所示。xPL指令信息和當(dāng)前狀態(tài)經(jīng)由ActiveX控件從xPLHal傳遞到控制軟件??刂栖浖鶕?jù)指令信息,經(jīng)過(guò)判斷和處理,由串口向下位機(jī)發(fā)送命令。控制軟件的用戶(hù)界面也實(shí)時(shí)反映各個(gè)設(shè)備的當(dāng)前狀態(tài)。
???????????????????????????????
??? 控制軟件的工作方式與特點(diǎn):
??? (1)xPL提供的ActiveX控件使得Visual Basic程序可以方便地接收到xPL指令信息和設(shè)備的當(dāng)前狀態(tài)信息。軟件由xPLHal接收到xPL信息,經(jīng)過(guò)解析和判斷后,便可以向下位機(jī)發(fā)送命令了。
??? (2)在xPL網(wǎng)絡(luò)中,有大量的xPL信息,但其中的設(shè)備并不是每條信息都需要接收。這樣,就需要一個(gè)過(guò)濾器Filter, 將與其無(wú)關(guān)的信息過(guò)濾掉,而只接收與自身匹配的信息。本實(shí)驗(yàn)系統(tǒng)定義了一個(gè)Schema:iHouse.Basic。Filter將自動(dòng)過(guò)濾掉與iHouse.Basic無(wú)關(guān)的信息。
??? (3)遙控系統(tǒng)可以經(jīng)過(guò)ActiveX控件由 xPLHal 得到當(dāng)前時(shí)段和xPL設(shè)備的當(dāng)前狀態(tài)。在接收到xPL指令信息后,通過(guò)對(duì)這些狀態(tài)和時(shí)段的判斷,決定單片機(jī)應(yīng)該產(chǎn)生哪些控制動(dòng)作。
4.2.3 下位機(jī)程序設(shè)計(jì)
??? 本系統(tǒng)采用LPC932單片機(jī)對(duì)各個(gè)被控設(shè)備進(jìn)行控制。單片機(jī)通過(guò)RS232與上位機(jī)相連接,從上位機(jī)接收控制數(shù)據(jù),然后通過(guò)特定電路與被控設(shè)備相連接,實(shí)現(xiàn)開(kāi)關(guān)量控制或紅外信號(hào)控制[4]。
??? xPL作為一個(gè)專(zhuān)門(mén)為智能家居控制設(shè)計(jì)的協(xié)議,它是一個(gè)統(tǒng)一的、具有極其簡(jiǎn)單和容易使用的特點(diǎn)的開(kāi)放協(xié)議。它具有以下特點(diǎn):
??? (1)提供了一個(gè)豐富的特征和功能集,同時(shí),有一個(gè)較完善的、但并不復(fù)雜的信息結(jié)構(gòu)。
??? (2)具有強(qiáng)大的自動(dòng)發(fā)現(xiàn)和配置的能力,完全支持“即插即用”體系結(jié)構(gòu)。
??? (3)特定信息結(jié)構(gòu)確保了來(lái)自不同生產(chǎn)商的支持xPL的設(shè)備能夠相互通信,而沒(méi)有不兼容的危險(xiǎn)。
??? 本文通過(guò)電話(huà)遠(yuǎn)程遙控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn),說(shuō)明了用xPL協(xié)議實(shí)現(xiàn)智能家居將大大降低設(shè)計(jì)難度,同時(shí)保證了網(wǎng)絡(luò)設(shè)備的兼容性、可靠性。xPL協(xié)議在智能家居領(lǐng)域?qū)⒕哂袕V闊的市場(chǎng)前景。
參考文獻(xiàn)
[1] JACOBSON J. Understanding home automatic. Electronic?House, 2001: 48-50.
[2] ?SCHONGA B.VBScript揭秘.高長(zhǎng)劍,譯.北京:電子工業(yè)出版社,1998:70-147.
[3]?徐安.微型計(jì)算機(jī)控制技術(shù).北京:科技出版社,2004.
[4]?LEWISD W L. Fundamentals of embedded software:where?C and assembly meet. 北京: 高等教育出版社,2005.