李 響,姜周曙,黃國(guó)輝
(杭州電子科技大學(xué)自動(dòng)化學(xué)院,杭州 310018)
太陽(yáng)能作為可再生能源,具有儲(chǔ)量巨大、清潔環(huán)保的特點(diǎn)。目前,對(duì)于太陽(yáng)能的利用主要是在太陽(yáng)能發(fā)電和太陽(yáng)能熱利用方面,太陽(yáng)能熱水因轉(zhuǎn)換率高成為太陽(yáng)能熱利用的普遍形式之一。由于太陽(yáng)能具有不穩(wěn)定性,相對(duì)于常規(guī)能源熱水系統(tǒng),太陽(yáng)能熱水系統(tǒng)的自動(dòng)控制顯得更為重要[1]。傳統(tǒng)太陽(yáng)能熱水控制器多采用單片機(jī)實(shí)現(xiàn),功能單一,交互性差,其控制程序與硬件高度耦合,導(dǎo)致其拓展性差,開(kāi)發(fā)難度高。這類控制器的本地硬件資源較少,大量運(yùn)行數(shù)據(jù)未被保存,無(wú)法遠(yuǎn)程通信,也給開(kāi)發(fā)人員進(jìn)一步研究帶來(lái)了一定的阻礙[2-5]。
本文提出了一種新型太陽(yáng)能熱水控制器,硬件是基于Cortex-A9平臺(tái)開(kāi)發(fā),資源豐富,與設(shè)備間采用RS485總線方式連接,提升了控制器系統(tǒng)的靈活性和可拓展性;軟件上嵌入Android系統(tǒng),利用Android系統(tǒng)在UI和生態(tài)方面的優(yōu)勢(shì),在此基礎(chǔ)上開(kāi)發(fā)出一套功能豐富的監(jiān)控軟件,具有良好的人機(jī)交互界面,實(shí)現(xiàn)了遠(yuǎn)程數(shù)據(jù)傳輸。
太陽(yáng)能熱水工程隨著實(shí)際現(xiàn)場(chǎng)的變化,形式多樣,測(cè)量點(diǎn)與所控制的設(shè)備數(shù)量不好確定。為了控制器的通用性,對(duì)控制器的設(shè)計(jì)采用RS485總線結(jié)構(gòu),并可根據(jù)實(shí)際工程大小和需求進(jìn)行拓展??刂破飨到y(tǒng)硬件結(jié)構(gòu)及其他設(shè)備框圖如圖1所示,圖中,左側(cè)為控制器硬件部分;右側(cè)分別為高精度采集板和開(kāi)關(guān)量控制板,以及其他支持RS485通信的設(shè)備;控制器硬件與各設(shè)備間通過(guò)RS485總線連接。
高精度采集板對(duì)現(xiàn)場(chǎng)溫度、液位等模擬量進(jìn)行實(shí)時(shí)采集和濾波后,等待控制器讀??;開(kāi)關(guān)量控制板接收控制器通過(guò)RS485總線發(fā)來(lái)的信號(hào),改變繼電器狀態(tài),進(jìn)而控制水泵等設(shè)備。由于實(shí)際工程中測(cè)量點(diǎn)和控制點(diǎn)很多,因此可以把高精度采集板和開(kāi)關(guān)量控制板拓展為多個(gè),并為其設(shè)置不同的地址,總線上最多支持256個(gè)設(shè)備。
圖1 控制器系統(tǒng)硬件結(jié)構(gòu)及其他設(shè)備框圖Fig.1 Block diagram of hardware structure of controller system and other equipment
本新型太陽(yáng)能熱水控制器硬件部分由最小系統(tǒng)板、網(wǎng)絡(luò)通信模塊、人機(jī)接口模塊、調(diào)試模塊、報(bào)警模塊和RS485通信模塊6部分構(gòu)成。最小系統(tǒng)板搭載基于Cortex-A9架構(gòu)的三星Exynos4412四核處理器,保證了其對(duì)數(shù)據(jù)的高速并行處理能力;配備了2 GB雙通道DDR3內(nèi)存,16 GB EMMC存儲(chǔ)空間,使其能在實(shí)際運(yùn)行中保存更多的數(shù)據(jù);使用了三星S5M8767電源管理芯片,為處理器提供了比外圍設(shè)備更加穩(wěn)定的電壓。最小系統(tǒng)板上的USB總線集線器也可以將一個(gè)USB接口擴(kuò)展為多個(gè),大幅提升了控制器系統(tǒng)的靈活性及可拓展性。
控制器有GPRS和以太網(wǎng)2種網(wǎng)絡(luò)通信方式,可以應(yīng)用于不同場(chǎng)合。人機(jī)接口模塊采用7寸LCD觸摸一體屏,由SN75LVDS83BDGG芯片驅(qū)動(dòng),低壓差分信號(hào)傳輸,具有噪聲低、功耗低、兼容性好等特點(diǎn),提升了抗干擾性。RS485通信模塊采用SN65HVD3082收發(fā)器,由處理器的通用輸入輸出(GPIO)引腳和通用異步收發(fā)器(UART)共同控制;GPIO引腳控制RS485通信模塊的數(shù)據(jù)收發(fā),UART的信號(hào)經(jīng)過(guò)電平轉(zhuǎn)換,轉(zhuǎn)換成RS485通信模塊的差分電平。
整體硬件搭建好之后,需要對(duì)操作系統(tǒng)進(jìn)行適配。操作系統(tǒng)選用基于處理器 Exynos4412的Android 4.4.4系統(tǒng),內(nèi)核版本為L(zhǎng)inux 3.0.15。此系統(tǒng)內(nèi)部已經(jīng)集成很多常用的標(biāo)準(zhǔn)驅(qū)動(dòng)及接口程序,在此基礎(chǔ)上進(jìn)行系統(tǒng)裁剪和驅(qū)動(dòng)移植。
在Ubuntu12.04環(huán)境下對(duì)Android系統(tǒng)裁剪,使其占用更少的空間,運(yùn)行更流暢,裁剪可分為內(nèi)核的裁剪和Android上層的裁剪。
內(nèi)核方面的裁剪借助基于文本菜單的配置工具M(jìn)enuconfig,如圖2所示。僅選擇與本工程相關(guān)的驅(qū)動(dòng),最終生成“.config”文件。配置完成后,用交叉編譯工具arm-2009q3編譯,生成內(nèi)核鏡像。
圖2 Menuconfig配置界面Fig.2 Menuconfig configuration diagram
Android上層的裁剪主要是刪除不必要的系統(tǒng)服務(wù),以及修改系統(tǒng)啟動(dòng)時(shí)讀取的配置文件“init.rc”,去除與本工程無(wú)關(guān)的服務(wù)。詳細(xì)實(shí)現(xiàn)過(guò)程不再贅述。
Android系統(tǒng)是基于Linux內(nèi)核的,通過(guò)裁剪保留了工程必須的內(nèi)核驅(qū)動(dòng)。但是對(duì)于RS485通信模塊和報(bào)警模塊這種非標(biāo)準(zhǔn)設(shè)備,Android系統(tǒng)上層未對(duì)其支持,因此,不僅要在 Linux 內(nèi)核中添加驅(qū)動(dòng)模塊,還必須在Android系統(tǒng)上層添加對(duì)應(yīng)的支持[6]。由于RS485通信模塊與報(bào)警模塊的驅(qū)動(dòng)實(shí)現(xiàn)過(guò)程類似,這里只針對(duì)Android系統(tǒng)的RS485通信模塊驅(qū)動(dòng)程序進(jìn)行架構(gòu)分析[7],如圖3所示。
圖3 RS485通信模塊驅(qū)動(dòng)程序架構(gòu)Fig.3 RS485 communication module driver architecture
太陽(yáng)能熱水控制器軟件運(yùn)行在Android系統(tǒng)的Dalvik虛擬機(jī)上,采用Java語(yǔ)言編寫,可以看到,其實(shí)現(xiàn)與硬件無(wú)關(guān)。Linux內(nèi)核中的RS485驅(qū)動(dòng)僅提供少量的接口,具體是在Android系統(tǒng)提供的硬件抽象層實(shí)現(xiàn),是以 Linux共享庫(kù)(*.so)的形式存在,采用C/C++語(yǔ)言編寫。Dalvik虛擬機(jī)支持了Java語(yǔ)言的JNI(Java Native Interface)特性,使應(yīng)用層Java代碼通過(guò)虛擬機(jī)調(diào)用本地共享庫(kù),充當(dāng)Java與C/C++之間的橋梁[8]。
對(duì)RS485通信模塊在硬件抽象層的程序按照J(rèn)NI的聲明方法編寫,使用Android系統(tǒng)提供的NDK工具編譯,生成庫(kù)文件。應(yīng)用層的監(jiān)控軟件在使用該功能時(shí)加載該庫(kù)文件,即可使用對(duì)應(yīng)的Java接口,簡(jiǎn)化了應(yīng)用層軟件設(shè)計(jì)的流程。
控制器應(yīng)用程序軟件需要實(shí)現(xiàn)太陽(yáng)能熱水工程運(yùn)行狀態(tài)的實(shí)時(shí)監(jiān)控、運(yùn)行數(shù)據(jù)的保存查詢、相關(guān)參數(shù)的設(shè)置,以及與服務(wù)器間的遠(yuǎn)程通信等功能。需實(shí)現(xiàn)的這些功能較為復(fù)雜,涉及前臺(tái)的Activity組件、后臺(tái)的Service組件、數(shù)據(jù)庫(kù),以及多線程等知識(shí)。為降低程序開(kāi)發(fā)的難度,采用模塊化設(shè)計(jì),將軟件框架分為前臺(tái)的人機(jī)交互界面、后臺(tái)的監(jiān)控服務(wù)和后臺(tái)的網(wǎng)絡(luò)服務(wù)3個(gè)部分。
人性化的設(shè)計(jì)和友好的界面是控制器應(yīng)用程序軟件設(shè)計(jì)的前提。主界面以工程中常用的單水箱、作為輔助熱源的空氣源熱泵為例,動(dòng)態(tài)顯示了集熱器出口溫度T1、水箱溫度T2、回水溫度T3、環(huán)境溫度T4、液位,以及熱泵循環(huán)泵、供水增壓泵的開(kāi)啟情況。Android系統(tǒng)平臺(tái)其他線程不能刷新主界面的數(shù)據(jù),因此,主界面數(shù)據(jù)動(dòng)態(tài)顯示需通過(guò)Handler的消息傳遞機(jī)制來(lái)實(shí)現(xiàn)。軟件主界面如圖4所示。
圖4 應(yīng)用程序軟件主界面Fig.4 Main interface of application software
考慮到用戶切換至每個(gè)界面的便攜性,在上方導(dǎo)航欄加入了參數(shù)設(shè)置、網(wǎng)絡(luò)設(shè)置、歷史數(shù)據(jù)及報(bào)警查詢按鈕,點(diǎn)擊不同按鈕可進(jìn)入相應(yīng)的界面。參數(shù)設(shè)置中有強(qiáng)制開(kāi)關(guān)、定溫補(bǔ)水、溫差循環(huán)、熱泵輔助加熱、低水位補(bǔ)水、高溫防炸管循環(huán)、防凍循環(huán)等常用控制策略選項(xiàng)[9-10]。網(wǎng)絡(luò)設(shè)置保存有服務(wù)器IP地址及端口號(hào)。歷史數(shù)據(jù)和報(bào)警信息界面在打開(kāi)時(shí)讀取SQLite3數(shù)據(jù)庫(kù),并將讀取到的數(shù)據(jù)以表格和列表的形式顯示出來(lái),供用戶查看。為防止由于數(shù)據(jù)過(guò)多而出現(xiàn)卡頓現(xiàn)象,采用了分頁(yè)加載的方法。
監(jiān)控服務(wù)是控制器后臺(tái)運(yùn)行的核心部分,會(huì)啟動(dòng)采集線程和控制線程2個(gè)線程。采集線程主要負(fù)責(zé)定時(shí)對(duì)現(xiàn)場(chǎng)傳感器、儀表等的數(shù)據(jù)進(jìn)行采集,然后進(jìn)行相應(yīng)處理,把處理后的數(shù)據(jù)存入SQLite3數(shù)據(jù)庫(kù)中,并通知控制線程??刂凭€程會(huì)讀取參數(shù)設(shè)置里的配置信息,根據(jù)采集來(lái)的數(shù)據(jù),邏輯運(yùn)算后對(duì)現(xiàn)場(chǎng)設(shè)備進(jìn)行控制。為保證數(shù)據(jù)的實(shí)時(shí)性和穩(wěn)定性,數(shù)據(jù)采樣時(shí)間應(yīng)盡量小,經(jīng)測(cè)試,采樣時(shí)間設(shè)置為1 s較為合適。
在實(shí)際工程應(yīng)用中,由于存在環(huán)境干擾和儀表故障,會(huì)導(dǎo)致通信異常。為保證控制器與現(xiàn)場(chǎng)儀表設(shè)備之間通信穩(wěn)定、可靠,需要對(duì)每一次通信進(jìn)行校驗(yàn)[11],如CRC16校驗(yàn)和求和校驗(yàn),如果發(fā)現(xiàn)通信異常,則需要做出相應(yīng)的處理(記錄或者報(bào)警)。
控制器網(wǎng)絡(luò)服務(wù)主要包括建立連接、本地?cái)?shù)據(jù)傳輸、心跳包?;?個(gè)部分。為保證數(shù)據(jù)安全,控制器與服務(wù)器之間的通信均采用AES(Advanced Encryption Standard)加密算法進(jìn)行加密[12]。
控制器與服務(wù)器建立TCP連接后,發(fā)送身份認(rèn)證請(qǐng)求,服務(wù)器會(huì)返回一串隨機(jī)數(shù)列,再根據(jù)收到的隨機(jī)數(shù)列和本地密鑰計(jì)算出MD5值后再發(fā)送給服務(wù)器,若服務(wù)器驗(yàn)證此MD5值成功,則連接成功;反之,控制器重新發(fā)起建立連接請(qǐng)求。當(dāng)監(jiān)測(cè)到當(dāng)前處于連接狀態(tài),則進(jìn)入下一步,根據(jù)發(fā)送狀態(tài)標(biāo)志位讀取SQLite3數(shù)據(jù)庫(kù)中未發(fā)送的數(shù)據(jù),結(jié)合參數(shù)設(shè)置中設(shè)置的發(fā)送周期,向服務(wù)器發(fā)送本地采集信息;發(fā)送成功后,把數(shù)據(jù)庫(kù)中發(fā)送狀態(tài)標(biāo)志位置1;發(fā)送周期設(shè)置在1~10 min之內(nèi)。
控制器和服務(wù)器之間如果發(fā)送周期過(guò)長(zhǎng),運(yùn)營(yíng)商網(wǎng)絡(luò)監(jiān)測(cè)到長(zhǎng)時(shí)間無(wú)數(shù)據(jù)傳輸會(huì)切斷此連接節(jié)點(diǎn);或者網(wǎng)絡(luò)狀況不好,控制器掉線,服務(wù)器無(wú)法區(qū)別,不會(huì)釋放該連接所占用的資源。為保證連接的有效性,引入心跳包機(jī)制,建立連接完成后啟動(dòng)心跳包?;罹€程,以固定的時(shí)間間隔向服務(wù)器發(fā)送心跳包。
新型太陽(yáng)能熱水控制器系統(tǒng)完成設(shè)計(jì)后,以實(shí)際工程環(huán)境作為本系統(tǒng)的測(cè)試環(huán)境,對(duì)控制器的性能進(jìn)行測(cè)試,驗(yàn)證系統(tǒng)是否滿足設(shè)計(jì)要求[13]。
系統(tǒng)整體測(cè)試內(nèi)容主要包括:
1)人機(jī)交互界面的反應(yīng)是否及時(shí)。
2)控制邏輯是否正確,各項(xiàng)功能是否正常,如溫差、低水位補(bǔ)水等測(cè)試。
3)通過(guò)服務(wù)器查詢實(shí)時(shí)數(shù)據(jù),分析數(shù)據(jù)是否正確。
4)觀察控制器在一段時(shí)間內(nèi)持續(xù)運(yùn)行是否會(huì)出現(xiàn)異?,F(xiàn)象。
經(jīng)過(guò)測(cè)試,控制器系統(tǒng)界面運(yùn)行正常,控制邏輯正確,監(jiān)測(cè)值與采集值一致,如表1所示??刂破髋c服務(wù)器之間保持穩(wěn)定的網(wǎng)絡(luò)連接,并且在測(cè)試過(guò)程中系統(tǒng)未出現(xiàn)異常現(xiàn)象。
表1 監(jiān)測(cè)與采集的信息Table 1 Monitored and collected information
對(duì)控制器RS485通信功能的穩(wěn)定性測(cè)試主要體現(xiàn)在數(shù)據(jù)收發(fā)的成功率??刂破饔幸惶兹蒎e(cuò)機(jī)制,可以保證采集到的數(shù)據(jù)的準(zhǔn)確性,對(duì)接收的每一幀數(shù)據(jù)進(jìn)行校驗(yàn),成功則計(jì)數(shù)加1。在控制器的RS485總線上接入上位機(jī),對(duì)控制器發(fā)送的每一幀數(shù)據(jù)進(jìn)行校驗(yàn),成功則計(jì)數(shù)加1。
在確?,F(xiàn)場(chǎng)儀表傳感器正常工作的情況下,分別對(duì)上述2項(xiàng)性能進(jìn)行測(cè)試,結(jié)果如表2所示。
表2 RS485通信數(shù)據(jù)收發(fā)成功率Table 2 Success rate of RS485 communication data sending and receiving
測(cè)試結(jié)果表明,控制器RS485通信功能穩(wěn)定,滿足設(shè)計(jì)需求。
對(duì)控制器網(wǎng)絡(luò)通信功能的穩(wěn)定性測(cè)試主要體現(xiàn)在數(shù)據(jù)傳輸成功率和系統(tǒng)狀態(tài)發(fā)生變化時(shí)掉線重連的能力。在服務(wù)器正常工作且網(wǎng)絡(luò)正常的情況下,分別對(duì)上述2項(xiàng)性能進(jìn)行測(cè)試,結(jié)果如表3、表4所示。
表3 網(wǎng)絡(luò)通信成功率Table 3 Success rate of network communication
表4 網(wǎng)絡(luò)通信連接測(cè)試Table 4 Network communication connection test
測(cè)試結(jié)果表明,控制器在以太網(wǎng)與GPRS兩種通信方式下數(shù)據(jù)傳輸成功率較高;當(dāng)系統(tǒng)狀態(tài)發(fā)生變化時(shí),控制器仍能和服務(wù)器保持穩(wěn)定的連接。
本文針對(duì)傳統(tǒng)太陽(yáng)能熱水控制器交互差、拓展性差等問(wèn)題,基于Cortex-A9平臺(tái),開(kāi)發(fā)出一種新型太陽(yáng)能熱水控制器。該控制器能夠保存更多的數(shù)據(jù),支持遠(yuǎn)程通信;采用RS485總線結(jié)構(gòu),可以根據(jù)實(shí)際工程需求拓展更多的設(shè)備;引入Android系統(tǒng),控制程序與硬件之間能夠完全解耦,降低了開(kāi)發(fā)難度;監(jiān)控軟件按照模塊化設(shè)計(jì),集成了參數(shù)設(shè)置、數(shù)據(jù)查詢等多種功能,具有良好的交互界面。測(cè)試結(jié)果表明,新型太陽(yáng)能熱水控制器能夠穩(wěn)定運(yùn)行,滿足設(shè)計(jì)需求。