中央空調(diào)末端控制器是中央空調(diào)系統(tǒng)中最重要的裝置之一,對(duì)于中央空調(diào)的節(jié)能有著重要意義?,F(xiàn)有的中央空調(diào)末端風(fēng)閥啟/??刂朴惺謩?dòng)開(kāi)閉控制和固定時(shí)間調(diào)度的風(fēng)量控制兩種。啟動(dòng)后的控制策略常采用PID或模糊控制方法對(duì)室內(nèi)溫度進(jìn)行控制。這種由中央空調(diào)控制系統(tǒng)集中的固定調(diào)度算法,雖然控制系統(tǒng)容易實(shí)現(xiàn),但它只適用于負(fù)荷和作息時(shí)間固定的用戶,如何根據(jù)用戶的實(shí)際需求來(lái)調(diào)整末端送風(fēng)裝置調(diào)度時(shí)間,是節(jié)能和保持舒適度的關(guān)鍵。現(xiàn)有按照需求實(shí)現(xiàn)遠(yuǎn)程末端控制的方式有藍(lán)牙技術(shù)和以太網(wǎng)。而藍(lán)牙的有效傳輸距離短,以太網(wǎng)又布線復(fù)雜,受地域、環(huán)境、經(jīng)濟(jì)條件等影響的限制。
為了解決以上問(wèn)題,本文設(shè)計(jì)實(shí)現(xiàn)了一種基于手機(jī)SIM卡GSM網(wǎng)絡(luò)的中央空調(diào)末端風(fēng)閥異地控制模塊。GSM除語(yǔ)音業(yè)務(wù)外,另有短消息數(shù)據(jù)傳輸業(yè)務(wù)。該模塊不但可以完成室內(nèi)溫度信息通過(guò)GSM網(wǎng)絡(luò)以短信息的形式報(bào)告用戶,同時(shí)也可以由用戶通過(guò)該模塊發(fā)送期望設(shè)定室內(nèi)溫度給末端控制器,完成遠(yuǎn)程控制。
本文以Samsung公司的S3C2410芯片作為處理器,以Linux2.6為嵌入式操作系統(tǒng),基于PID控制策略,通過(guò)手機(jī)短信的方式對(duì)中央空調(diào)末端裝置進(jìn)行遠(yuǎn)程控制,實(shí)現(xiàn)了對(duì)室內(nèi)溫度的設(shè)置和監(jiān)控,取得了很好的實(shí)際效果。
1 末端控制器系統(tǒng)設(shè)計(jì)
1.1 控制器系統(tǒng)硬件設(shè)計(jì)
本文基于ARM9平臺(tái),采用Linux嵌入式操作系統(tǒng),以S3C2410處理器為核心。系統(tǒng)硬件主要由以下模塊組成:
(1)GSM/GPRS射頻模塊。用來(lái)與GPRS網(wǎng)絡(luò)進(jìn)行通信的射頻模塊,本文選用Simcom公司推出的工業(yè)級(jí)GSM/GPRS雙頻Modem模塊SIM300,具有完整的Modem信號(hào),在網(wǎng)絡(luò)通信時(shí)可以作為一個(gè)Modem而存在。模塊采用串行接口通信,主要為語(yǔ)音傳輸、短信息和數(shù)據(jù)業(yè)務(wù)提供無(wú)線接口,帶GPRS功能。SIM300芯片的外圍電路采用了芯片的典型連接,利用阻容充電和施密特觸發(fā)器整形獲得上電后大約1.5 s低電平延時(shí)來(lái)啟動(dòng)。
(2)16C550串行接口。16C550是一種用于將并口數(shù)據(jù)轉(zhuǎn)換成串口數(shù)據(jù)的高速UART芯片,并自帶16位FIFO緩存通道,而且波特率可選。一方面可獲得完整的Modem控制,另一方面也是為了獲得精準(zhǔn)的UART波特率,本文在SIM300射頻模塊與處理器組成的控制單元進(jìn)行串行通信時(shí)使用16C550芯片。16C550芯片的虛擬地址為0xdb000000,工作在帶中斷的FIFO方式;其波特率設(shè)置為115200,傳輸無(wú)校驗(yàn),8位數(shù)據(jù)位,1位停止位,忽略輸入BREAK、幀錯(cuò)誤和奇偶校驗(yàn)錯(cuò),使用標(biāo)準(zhǔn)模式傳輸。
(3)CPU中央處理單元。采用Samsung公司生產(chǎn)的32/16位高性能基于ARM920T內(nèi)核的RISC微處理器S3C2410,具有低功耗、自帶8通道10位ADC和DAC、并支持NAND Flash和SDRAM存儲(chǔ)器等特點(diǎn)。該單元包括S3C2410微控制器的最小系統(tǒng)、時(shí)鐘電路、復(fù)位電路等部分。
(4)輸入輸出單元:模擬房間內(nèi)的溫度傳感器信號(hào)輸入到處理器的A/D轉(zhuǎn)換器;處理器通過(guò)PID算法得到的輸出量由D/A轉(zhuǎn)換器輸出以控制送風(fēng)執(zhí)行閥的開(kāi)度,調(diào)整房間內(nèi)的送風(fēng)量從而達(dá)到調(diào)節(jié)室內(nèi)溫度的目的。
圖1為系統(tǒng)硬件框圖。
1.2 控制器系統(tǒng)軟件設(shè)計(jì)
操作系統(tǒng)采用實(shí)時(shí)性強(qiáng)的Linux2.6內(nèi)核,編譯器使用gcc 4.0.2版本,完成了各個(gè)功能模塊的接口函數(shù)。由于在進(jìn)行嵌入式系統(tǒng)內(nèi)核開(kāi)發(fā)時(shí),若交叉編譯工具(特別是gcc)版本較低則無(wú)法編譯高版本內(nèi)核,版本過(guò)高也不行。因此本文為配合要采用的Linux2.6.18內(nèi)核開(kāi)發(fā)末端控制器,進(jìn)行定制開(kāi)發(fā)交叉編譯環(huán)境。具體如下:crosstool-0.43,binutils-2.16.1.tar.bz2,gcc-4.0.2,glibc-2.3.5,glibc-linuxthreads-2.3.5,linux-libc-headers-2.6.12.0,gdb-6.5,生成交叉編譯工具為arm-9tdmi-linux-gcc。其中短消息通信線程的初始化和主循環(huán)共分為以下4個(gè)步驟:
(1)完成串口初始化。系統(tǒng)啟動(dòng)并完成初始化后,開(kāi)始反復(fù)讀取16C550芯片發(fā)來(lái)的串口數(shù)據(jù)。當(dāng)GSM模塊收到新短信后,通過(guò)串口向處理器發(fā)送1個(gè)字符串。該字符串格式、長(zhǎng)度及內(nèi)容都是固定的,以+CMTI開(kāi)頭,以此為依據(jù)判斷是否新短信到來(lái)。
(2)向SIM300模塊發(fā)送讀取短消息的AT指令,判斷短消息內(nèi)容。首先通過(guò)手機(jī)號(hào)來(lái)判斷短消息是否由用戶發(fā)來(lái)。如果短消息由用戶發(fā)來(lái),則判斷用戶發(fā)送的指令,否則直接刪除。
(3)如果用戶發(fā)送的內(nèi)容是“設(shè)定溫度XX”(XX代表二位溫度值),則將“XX”通過(guò)解碼函數(shù)解碼成ASCII字符,再通過(guò)換算得到用戶期望設(shè)置的溫度發(fā)送給溫度控制模塊,最后刪除該信息。如果用戶發(fā)送的內(nèi)容是“查詢狀態(tài)”,則將當(dāng)前溫度值和室內(nèi)狀態(tài)以短消息的形式發(fā)送給用戶手機(jī),最后同樣刪除該信息。
(4)處理器繼續(xù)讀取串口數(shù)據(jù)。
短消息通信程序流程如圖2所示。
處理器通過(guò)串口與GSM模塊通信,串行通信的基本參數(shù)有:波特率、數(shù)據(jù)位、停止位及校驗(yàn)方式等。串口驅(qū)動(dòng)程序?qū)崿F(xiàn)了對(duì)串口的讀寫(xiě)操作,給應(yīng)用程序提供發(fā)送接收數(shù)據(jù)的接口。串口正常工作之前,需要進(jìn)行初始化設(shè)置,選擇串口工作方式,設(shè)置波特率、數(shù)據(jù)格式及中斷,建立數(shù)據(jù)隊(duì)列和信號(hào)量。應(yīng)用程序只要調(diào)用相應(yīng)的函數(shù),就可以實(shí)現(xiàn)相應(yīng)的功能。
以串口發(fā)送一個(gè)字符串為例介紹發(fā)送程序,其中buf表示要發(fā)送的字符串,nbytes表示字符的個(gè)數(shù):
int tty_write(char*buf,int nbytes)
{
int i;
for(i=0;i《nbytes;i++) {
write(tty_fd,&buf[i],1);
usleep(100);
}
return tcdrain(tty_fd);
}
短消息的接收與發(fā)送由處理器和SIM300模塊通過(guò)16C550芯片串行通信完成,處理器向SIM300模塊發(fā)送AT指令讀取或發(fā)送短消息。發(fā)送中文短信息時(shí),發(fā)送的是漢字的UCS2編碼,所以在初始化SIM300模塊時(shí)須發(fā)送指令“AT+CMGF=0”,把模塊的短消息工作模式設(shè)置為PDU模式,以UCS2編碼方式發(fā)送短消息。同樣,SIM300模塊收到的短消息也是PDU編碼方式,要讀取出用戶發(fā)送的中文指令就必須將消息內(nèi)容解碼成ASCII字符。根據(jù)實(shí)際應(yīng)用情況(發(fā)送漢字信息較少且固定),從節(jié)約系統(tǒng)資源的角度考慮,直接查找漢字的UCS2編碼表,查出要發(fā)送漢字的UCS2碼并發(fā)送。
發(fā)送短消息首先要向SIM300模塊發(fā)送整個(gè)短消息代碼位數(shù)的16進(jìn)制數(shù),之后是短信頭代碼“001100D”、中國(guó)區(qū)號(hào)“+86”的編碼“9168”和發(fā)送的目的手機(jī)號(hào)碼。此處的目的手機(jī)號(hào)碼必須是每?jī)晌换Q得來(lái),由于手機(jī)號(hào)碼是11位,最后一位用“N”補(bǔ)齊,而短消息內(nèi)容是用UCS2碼編寫(xiě),所以繼續(xù)發(fā)送編碼方式代碼“0008A7”,最后才是短消息正文的UCS2碼。
當(dāng)有新消息到達(dá)時(shí),收到的數(shù)據(jù)包內(nèi)封裝了消息發(fā)送時(shí)間、來(lái)自的手機(jī)號(hào)碼和消息正文。如果來(lái)自的手機(jī)號(hào)碼與預(yù)先設(shè)置的用戶號(hào)碼不一致則直接將短消息刪除;一致則繼續(xù)判斷短消息正文。由于接收到的短消息也是由UCS2編碼處理過(guò)的中文,所以把消息正文內(nèi)容與預(yù)先約定好的“設(shè)定溫度”和“當(dāng)前狀態(tài)”兩種UCS2編碼相比較后分別轉(zhuǎn)到相應(yīng)的處理函數(shù),若與約定的兩種編碼都不一致,則視為錯(cuò)誤消息刪除。
本文全部程序代碼由C語(yǔ)言編寫(xiě),短消息發(fā)送部分代碼如下:
void gprs_msg(char*number,char*msgr)//短信發(fā)送函數(shù)
{
char ctl[]={26,0};
char head[]=″0011000D9168″;//短信頭代碼及中國(guó)區(qū)號(hào)
char headmsg[]=″0008A7″;//短信編碼方式代碼
unsigned int count;
char sum[2];
tty_writecmd(″at″,strlen(″at″));
tty_writecmd(″at″,strlen(″at″));
tty_write(″at+cmgs=″,strlen(″at+cmgs=″));
count=strlen(msgr)/2+14;//計(jì)算短信長(zhǎng)度
sum[0]=(char)(count/10+48);
sum[1]=(char)(count%10+48);//將短信長(zhǎng)度
//解碼為16進(jìn)制
tty_writecmd(sum,2);
tty_write(head,strlen(head));
tty_write(number,strlen(number));
tty_write(headmsg,strlen(headmsg));//發(fā)送短信頭
tty_write(msgr,strlen(msgr));//發(fā)送短信正文
tty_write(ctl,1);
tty_write(″r″,strlen(″r″));//發(fā)送短信結(jié)束代碼
usleep(300000);//進(jìn)程休眠
printf(″Message sent.n″);
}
上述函數(shù)封裝了PDU模式發(fā)送短消息的頭信息和正文字符長(zhǎng)度等,參數(shù)僅為目的手機(jī)號(hào)碼的PDU編碼和短消息正文的UCS2編碼。這樣做避免了大量的重復(fù)代碼,也提高了程序的運(yùn)行效率。
1.3 增量式PID控制策略
PID是一種線性控制器,它根據(jù)給定值r(t)與實(shí)際輸出y(t)構(gòu)成控制偏差:
式中:KP為比例系數(shù);TI為積分時(shí)間常數(shù);TD為微分時(shí)間常數(shù)。
由于計(jì)算機(jī)處理的是數(shù)字量,控制器的驅(qū)動(dòng)對(duì)象是風(fēng)閥執(zhí)行器,所以控制系統(tǒng)中使用的控制策略是數(shù)字增量式PID。
u(k)=Ae(k)-Be(k-1)+Ce(k-2)
以下是增量式PID控制策略的實(shí)現(xiàn)函數(shù):
double PID(double feedback)
{
double Err,pErr,dErr,dU;
Err=Command-feedback;//當(dāng)前誤差
pErr=Err-ppreErr;//比例項(xiàng)增量式誤差
dErr=Err-2*preErr+pre2Err;//微分項(xiàng)增量式誤差
dU=Proportion*pErr+pDerivative*dErr+ Integral*Err;
//控制量增量
pre2Err=preErr;
preErr=Err;
return dU;
}
2 實(shí)驗(yàn)
本實(shí)驗(yàn)對(duì)象以1.3噸的中央空調(diào)系統(tǒng)的實(shí)物模型為例,該系統(tǒng)可以模擬中央空調(diào)多種運(yùn)行模式,并可以通過(guò)對(duì)執(zhí)行風(fēng)閥輸入模擬信號(hào)來(lái)調(diào)節(jié)風(fēng)閥的具體開(kāi)度,以此來(lái)調(diào)整送入房間的送風(fēng)量,達(dá)到控制模擬房間制冷量的目的。本實(shí)驗(yàn)對(duì)象有2個(gè)模擬房間,其中末端裝置的驅(qū)動(dòng)閥為T(mén)ANG TECH TM04~24,溫濕度傳感器為VECTOR ADS-H1T1。嵌入式控制器的D/A輸出的0~4.096 V信號(hào)經(jīng)放大至0~10 V后,直接驅(qū)動(dòng)風(fēng)閥驅(qū)動(dòng)器。模擬房間的的溫濕度傳感器輸出范圍為1~5 V,直接輸入處理器內(nèi)部A/D的AIN[0]腳。
系統(tǒng)提供了兩種用戶短消息內(nèi)容的識(shí)別,分別是“設(shè)定溫度XX”和“查詢狀態(tài)”。如用戶發(fā)送“查詢狀態(tài)”,而當(dāng)前室內(nèi)狀態(tài)為23℃,則系統(tǒng)自動(dòng)向用戶返回短消息“溫度:23;狀態(tài):正?!?。如果室內(nèi)是異常溫度,則系統(tǒng)發(fā)送短消息自動(dòng)報(bào)警“溫度60;狀態(tài)警告”。如果用戶發(fā)送“設(shè)定溫度23”,則系統(tǒng)將當(dāng)前室內(nèi)設(shè)定溫度改為23℃,并回復(fù)“已設(shè)定溫度23”。此時(shí)本地的控制器以PID進(jìn)行溫度控制。
為了使用戶可以方便關(guān)閉室內(nèi)控制器,而又不需要增加其他的短消息內(nèi)容,本文設(shè)置了最高溫度限制50℃。當(dāng)用戶發(fā)送“設(shè)定溫度”大于49℃時(shí),系統(tǒng)認(rèn)為用戶要求關(guān)閉控制器,繼而把溫度設(shè)定點(diǎn)改為OFF,風(fēng)閥完全關(guān)閉,同時(shí)返回短消息“已關(guān)閉”。采用這種方法,既保證了系統(tǒng)有關(guān)閉風(fēng)閥的功能,又不需要添加新的短消息命令。控制器關(guān)閉后,如果用戶再次發(fā)送短消息設(shè)置室內(nèi)溫度為正常范圍內(nèi)的溫度,則控制器重新開(kāi)啟。
短消息命令詳情見(jiàn)表1。
為了測(cè)試系統(tǒng)節(jié)能實(shí)際效果,在室外溫度9℃的條件下開(kāi)啟2個(gè)模擬房間的末端控制器,并設(shè)置預(yù)期室內(nèi)溫度23℃。假定2個(gè)房間中,模擬房間一8:00有人,模擬房間二9:00開(kāi)始有人;通過(guò)計(jì)算表明,9:00開(kāi)啟模擬房間二的室內(nèi)控制器要比8:00同時(shí)開(kāi)啟2個(gè)模擬房間的室內(nèi)控制器節(jié)約全天所耗能量的7%左右。
本文實(shí)現(xiàn)了GSM遠(yuǎn)程控制方法,通過(guò)手機(jī)短信方式,對(duì)中央空調(diào)系統(tǒng)末端裝置進(jìn)行控制及對(duì)室內(nèi)溫度進(jìn)行實(shí)時(shí)監(jiān)控和管理。實(shí)驗(yàn)結(jié)果表明,系統(tǒng)可以方便、靈活、快捷、按需調(diào)節(jié)房間的溫度,實(shí)現(xiàn)節(jié)能。并且,系統(tǒng)可擴(kuò)充性強(qiáng),在軟件升級(jí)后還可實(shí)現(xiàn)如末端能量計(jì)量等更多功能。
責(zé)任編輯:gt
評(píng)論
查看更多