茅正沖,葉臻,黃芳
(江南大學(xué) 物聯(lián)網(wǎng)學(xué)院,無錫214122)
茅正沖(副教授)、葉臻(碩士研究生),主要從事嵌入式軟件構(gòu)件技術(shù)方向的研究;黃芳(講師),主要從事工業(yè)控制方向的研究。
引 言
為了確保氣象數(shù)據(jù)的準(zhǔn)確可靠,需要每隔一定距離架設(shè)一個(gè)自動(dòng)氣象站,與中心站形成一個(gè)自動(dòng)氣象站網(wǎng)。因此,自動(dòng)氣象站數(shù)量多、分布廣,而且很多是架設(shè)在無人值守地區(qū)。由于業(yè)務(wù)上的需求,采集器時(shí)常需要進(jìn)行應(yīng)用程序更新。目前的程序更新方式比較傳統(tǒng):首先由開發(fā)人員修改源代碼,編譯生成單塊式的應(yīng)用程序,然后由維護(hù)人員帶至現(xiàn)場進(jìn)行更新。這樣的更新方式需要耗費(fèi)大量的人力物力,而且在一些環(huán)境、氣候惡劣的情況下還難以進(jìn)行。
本文提出的基于構(gòu)件的遠(yuǎn)程更新方案如圖1所示。
遠(yuǎn)程更新系統(tǒng)的硬件結(jié)構(gòu)如圖2所示。遠(yuǎn)程更新系統(tǒng)由客戶端和服務(wù)器端兩部分組成??蛻舳擞刹杉骱虶PRS模塊兩部分組成,安裝在自動(dòng)氣象站采集箱內(nèi);上位機(jī)作為遠(yuǎn)程更新服務(wù)器,軟件維護(hù)人員可通過上位機(jī)上的遠(yuǎn)程更新控制軟件與采集器連接,進(jìn)行程序更新。
圖1 基于構(gòu)件的遠(yuǎn)程更新方案
采 集 器 采 用ARM 處理器和嵌入式 Linux 操 作 系統(tǒng)。/mnt/data1/和/mnt/data2/目 錄 采用的是yaffs文件系統(tǒng),用于保存用戶數(shù)據(jù);其他目錄采用的是ramdisk文件系統(tǒng),用于保存系統(tǒng)文件,系統(tǒng)重啟后,保存的內(nèi)容消失,數(shù)據(jù)重新加載,可以防止系統(tǒng)文件被篡改。GPRS模塊使用的是宏電公司的H7118GPRS DTU,用串行通信數(shù)據(jù)線將其與采集器的串行接口連接,即可使采集器通過其與上位機(jī)通信。上位機(jī)上的遠(yuǎn)程更新控制軟件是基于宏電公司提供的數(shù)據(jù)中心開發(fā)包和微軟的MFC類庫開發(fā)的。
圖2 遠(yuǎn)程更新系統(tǒng)硬件結(jié)構(gòu)
在自動(dòng)氣象站嵌入式程序遠(yuǎn)程更新系統(tǒng)中,需要傳輸?shù)氖怯蒐inux共享庫文件、ARM 可執(zhí)行文件、xml文件以及更新配置文件經(jīng)壓縮形成的壓縮包文件,若傳輸?shù)臄?shù)據(jù)發(fā)生任何錯(cuò)誤、丟包等現(xiàn)象,都有可能導(dǎo)致更新包失效,程序更新無法進(jìn)行。由此可見,本應(yīng)用對(duì)數(shù)據(jù)傳輸?shù)目煽啃砸蠛芨?,?duì)傳輸速率的要求相對(duì)較低,因此應(yīng)該選用TCP協(xié)議進(jìn)行傳輸。
對(duì)TCP包的封包和解包都由DTU 和配套的數(shù)據(jù)中心開發(fā)包中的函數(shù)實(shí)現(xiàn),所以只需設(shè)計(jì)基于串行接口的文件傳輸數(shù)據(jù)包格式,采集器和上位機(jī)根據(jù)約定的數(shù)據(jù)包格式進(jìn)行文件的傳輸。
為了保證文件傳輸與數(shù)據(jù)采集可以同時(shí)進(jìn)行,在此設(shè)計(jì)了一種與自動(dòng)氣象站通信協(xié)議兼容的文件傳輸數(shù)據(jù)包格式。
服務(wù)器端發(fā)送的數(shù)據(jù)包的基本格式為:
PU[……]↙
那么,什么是“創(chuàng)造力”?德國學(xué)者海納特在《創(chuàng)造力》一書中指出:“創(chuàng)造力”一詞來源于拉丁語,大意是創(chuàng)造、創(chuàng)建、生產(chǎn)、造成。它與“成長”詞義相近。從詞源上看,“創(chuàng)造力”指在原先一無所有的情況下,創(chuàng)造出新東西。青年時(shí)代是質(zhì)疑、求索和發(fā)現(xiàn)的時(shí)代,是一個(gè)發(fā)展創(chuàng)造力和實(shí)現(xiàn)創(chuàng)造的階段?!皠?chuàng)造”本來就包含著“成長”的意思。每個(gè)青年在求學(xué)期間,既是在求知,也是在增強(qiáng)創(chuàng)造力,是知識(shí)和能力成長的時(shí)期。
“PU”為包頭,“↙”表示換行符,“[……]”為數(shù)據(jù)包的具體內(nèi)容。下面對(duì)不同類型數(shù)據(jù)包的格式做詳細(xì)介紹。
文件名包:
PU[Nn……n[cc]]↙
“N”為文件名包的標(biāo)識(shí);“n……n”為文件名,長度不定,不超過64字節(jié);“cc”為校驗(yàn)和,占兩字節(jié),計(jì)算方法是求出文件名中每個(gè)字符ASCII碼之和,保留最低字節(jié),再轉(zhuǎn)換為十六進(jìn)制數(shù)對(duì)應(yīng)的兩字節(jié)ASCII碼。
校驗(yàn)包:
PU[Cm……mcc]↙
“C”為校驗(yàn)包的標(biāo)識(shí),“m……m”為md5信息摘要的字符串形式,占32字節(jié);“cc”為校驗(yàn)和,占兩字節(jié),計(jì)算方法是求出32字節(jié)信息摘要之和,保留最低字節(jié),再轉(zhuǎn)換為十六進(jìn)制數(shù)對(duì)應(yīng)的兩字節(jié)ASCII碼。校驗(yàn)包的作用是保證文件內(nèi)容的準(zhǔn)確無誤,這對(duì)提高遠(yuǎn)程更新的可靠性至關(guān)重要,會(huì)在后面的內(nèi)容中詳細(xì)闡述。
PU[Dnnd……dcc]↙
“D”為文件內(nèi)容包的標(biāo)識(shí);“nn”為包號(hào),占兩字節(jié),為一字節(jié)包號(hào)對(duì)應(yīng)十六進(jìn)制數(shù)的ASCII碼?!癲……d”為文件內(nèi)容,占512字節(jié),為256字節(jié)二進(jìn)制數(shù)據(jù)對(duì)應(yīng)十六進(jìn)制數(shù)的ASCII碼;“cc”為校驗(yàn)和,占兩字節(jié),計(jì)算方法是求出512字節(jié)數(shù)據(jù)之和,保留最低字節(jié),再轉(zhuǎn)換為十六進(jìn)制數(shù)對(duì)應(yīng)的兩字節(jié)ASCII碼。更新包中的內(nèi)容就是通過此類數(shù)據(jù)包發(fā)送的。其他內(nèi)容包消息略——編者注。
客戶端在收到服務(wù)器端發(fā)送的其他消息后,會(huì)根據(jù)情況給服務(wù)器端回復(fù)ASCII碼表中定義的ACK、NAK 或者CAN 信號(hào)。
文件傳輸流程如圖3所示。上位機(jī)依次發(fā)送文件名包、校驗(yàn)包、文件內(nèi)容包、文件內(nèi)容包結(jié)束消息、傳輸結(jié)束消息,根據(jù)采集器回復(fù)的信號(hào)決定重發(fā)、發(fā)送下一個(gè)包或者終止發(fā)送。若收到NAK 信號(hào)或者超過設(shè)置的超時(shí)時(shí)間后還未收到信號(hào),則會(huì)進(jìn)行重發(fā)。重發(fā)超過設(shè)置的次數(shù)之后,將會(huì)終止發(fā)送。這樣可以防止因?yàn)橐恍┨厥馇闆r導(dǎo)致不斷重發(fā)、浪費(fèi)流量的情況。
更新包為壓縮文件,壓縮文件中至少應(yīng)包含ARM 可執(zhí)行文件、Linux共享庫文件、xml文件中的一種,更新配置文件必不可少。更新配置文件記錄更新包中的文件名稱以及對(duì)應(yīng)的類型,采集器接收到更新包后,解壓更新包,然后根據(jù)更新配置文件中的配置信息進(jìn)行相應(yīng)的操作。
構(gòu)件式的數(shù)據(jù)采集程序由框架構(gòu)件、功能構(gòu)件、解析器和配置構(gòu)件4個(gè)部分組成,對(duì)應(yīng)更新包中的ARM 可執(zhí)行文件、Linux共享庫文件和xml文件。
為了防止GPRS信號(hào)不穩(wěn)定造成通信鏈路中斷、更新包傳輸失敗,從而導(dǎo)致整個(gè)更新包重新傳輸、浪費(fèi)通信流量、增加傳輸時(shí)間,設(shè)計(jì)了一種斷點(diǎn)續(xù)傳機(jī)制,下面詳細(xì)介紹其實(shí)現(xiàn)方法。
在采集器中創(chuàng)建一個(gè)更新包信息記錄文件來記錄未接收完畢的更新包信息,如文件名、信息摘要、接收時(shí)間、斷點(diǎn)位置等。在發(fā)送更新包之前,上位機(jī)會(huì)首先發(fā)送獲取待續(xù)傳文件信息消息給采集器,若采集器中有未接收完成的臨時(shí)文件,則會(huì)返回待續(xù)傳文件信息給上位機(jī)。上位機(jī)從接收到的斷點(diǎn)位置開始發(fā)送文件,采集器在接收過程中,每收到一個(gè)正確的數(shù)據(jù)包,就會(huì)把新的斷點(diǎn)位置同步到更新包信息記錄文件中。若更新包接收成功,則會(huì)從更新包信息記錄文件中刪除對(duì)應(yīng)的信息。這樣,無論是什么原因?qū)е碌膫鬏斨袛?,在下一次傳輸時(shí),都能保證采集器從斷點(diǎn)處開始接收更新包。
圖3 文件傳輸流程
為了確保更新包的內(nèi)容在傳輸過程中沒有發(fā)生改變,使用了md5算法來驗(yàn)證服務(wù)器端發(fā)送的更新包與客戶端接收到的更新包的一致性。
md5算法是一種不可逆的字符串變換算法,經(jīng)過它計(jì)算得到的md5信息摘要是唯一的,不管字符串發(fā)生了什么變化,計(jì)算得出的md5信息摘要都是不一樣的。通過這種機(jī)制,既保證了更新包內(nèi)容的正確性,又大大提高了更新成功的幾率。
應(yīng)用程序目錄結(jié)構(gòu)如圖4 所 示。在/mnt/data1/目 錄 下 有data、info、program_a、program_b、program_download 幾 個(gè)子目錄以及采集程序、更新控制程序和啟動(dòng)腳本。data目錄用于存放采集進(jìn)程生成的氣象數(shù)據(jù)文件;info目錄用于存放應(yīng)用程序的配置文件;program_a與program_b目錄用于存放兩個(gè)版本的應(yīng)用采集程序,以確保更新的可靠性;program_download用于保存接收到的更新包;更新程序、采集程序和啟動(dòng)腳本的作用將在下一節(jié)詳細(xì)介紹。
圖4 應(yīng)用程序目錄結(jié)構(gòu)
采集器啟動(dòng)后首先會(huì)運(yùn)行啟動(dòng)腳本,啟動(dòng)腳本根據(jù)加載位置配置文件,從program_a或program_b目錄加載采集程序,然后加載更新控制程序。啟動(dòng)腳本執(zhí)行完畢后,采集控制程序和更新進(jìn)程就同時(shí)存在于內(nèi)存之中了。
上位機(jī)發(fā)送更新包時(shí),采集進(jìn)程會(huì)根據(jù)2.2節(jié)規(guī)定的數(shù)據(jù)包格式解析數(shù)據(jù)包,進(jìn)行數(shù)據(jù)包的校驗(yàn)、文件信息的存儲(chǔ)、文件內(nèi)容的存儲(chǔ)以及應(yīng)答信號(hào)的發(fā)送。更新包接收完畢并確保正確后,若用戶發(fā)送“更新程序消息”,采集進(jìn)程則會(huì)通過消息隊(duì)列發(fā)送消息給更新進(jìn)程,通知更新控制進(jìn)程進(jìn)行采集程序的更新。
更新控制程序流程圖如圖5所示。采集進(jìn)程啟動(dòng)后,會(huì)進(jìn)入阻塞狀態(tài),直至被消息隊(duì)列傳來更新控制程序請(qǐng)求喚醒。接著更新進(jìn)程會(huì)終止當(dāng)前正在運(yùn)行的采集進(jìn)程,解壓更新包,根據(jù)更新配置文件中的配置信息將可執(zhí)行程序、共享庫文件或xml文件移動(dòng)到相應(yīng)的目錄,覆蓋舊版的文件。
然后更新控制進(jìn)程清空消息隊(duì)列,啟動(dòng)新版采集程序。若新版采集程序運(yùn)行成功,則會(huì)向消息隊(duì)列發(fā)送新版采集進(jìn)程信息,在一定時(shí)間內(nèi),若更新進(jìn)程從消息隊(duì)列中接收到新版采集進(jìn)程信息,則更新成功,否則更新失敗。若更新成功,則修改加載位置配置文件,使加載位置指向新版采集程序的目錄;若更新失敗,則啟動(dòng)舊版采集程序。
通過此種機(jī)制,提高了更新的可靠性,即使更新包存在問題、導(dǎo)致新版采集程序運(yùn)行失敗,也可以運(yùn)行舊版采集程序,保證數(shù)據(jù)采集的連續(xù)性。由于自動(dòng)氣象站需要不間斷地進(jìn)行數(shù)據(jù)采集,因此這種保證是至關(guān)重要的。
圖5 更新控制程序流程圖
圖6為根據(jù)此套方案開發(fā)的自動(dòng)氣象站嵌入式程序遠(yuǎn)程更新系統(tǒng)服務(wù)器,使用此程序與配套的客戶端程序進(jìn)行了多次遠(yuǎn)程更新測試。測試結(jié)果表明,此套方案可以成功地實(shí)現(xiàn)采集程序的遠(yuǎn)程更新。采集程序維護(hù)人員首先通過服務(wù)器設(shè)置配置IP地址和端口號(hào),DTU 模塊會(huì)自動(dòng)進(jìn)行連接。連接成功后即可選擇更新包發(fā)送,發(fā)送成功后單擊“更新程序”按鈕即可控制采集器自動(dòng)進(jìn)行程序更新。
圖6 自動(dòng)氣象站嵌入式程序遠(yuǎn)程更新服務(wù)器
本方案最大的優(yōu)點(diǎn)是基于構(gòu)件,更新時(shí),只需發(fā)送由若干構(gòu)件組成的更新包,與傳統(tǒng)的單塊式嵌入式應(yīng)用程序相比,大大節(jié)省了傳輸?shù)牧髁?,提高了更新的效率。?gòu)件化前后的文件大小表略——編者注。
構(gòu)件化之后,雖然文件的總大小191.4KB略大于構(gòu)件化之前的大小175.6KB,但是最大構(gòu)件只有31.8KB,遠(yuǎn)小于單塊式采集程序的大小171.1KB。而在更新時(shí),更新包中往往只有一個(gè)或幾個(gè)構(gòu)件,因此絕大多數(shù)情況下,構(gòu)件化采集程序更新時(shí)需要耗費(fèi)的流量遠(yuǎn)小于單塊式采集程序,更新成本更低,效率更高。
結(jié) 語
本文基于嵌入式Linux操作系統(tǒng)以及嵌入式文件系統(tǒng),設(shè)計(jì)了自動(dòng)氣象站采集程序遠(yuǎn)程更新方案,創(chuàng)新點(diǎn)是以構(gòu)件的形式進(jìn)行更新,更加節(jié)省流量。實(shí)驗(yàn)表明,該方案取得了良好的效果。下一步的工作目標(biāo)是優(yōu)化文件傳輸協(xié)議和壓縮算法,進(jìn)一步提高更新包傳輸?shù)男省p少流量的消耗。
編者注:本文為期刊縮略版,全文見本刊網(wǎng)站www.mesnet.com.cn。
[1]朱偉斌,張濤,顧海濤,等.基于網(wǎng)絡(luò)的嵌入式設(shè)備遠(yuǎn)程升級(jí)系統(tǒng)[J].電子技術(shù)與應(yīng)用,2014(2):135-138.
[2]李鐵男.基于嵌入式Linux的無線文件傳輸系統(tǒng)的實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2011,32(6):1979-1986.
[3]劉明,方嬌莉,尹業(yè)華,等.嵌入式監(jiān)控系統(tǒng)中斷點(diǎn)續(xù)傳的設(shè)計(jì)與實(shí)現(xiàn),[J].計(jì)算機(jī)技術(shù)與發(fā)展,2012,22(2):192-197.
[4]朱孟江,聶云杰.嵌入式終端IAP 斷點(diǎn)續(xù)傳的研究與實(shí)現(xiàn),[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2014,14(1):7-9.
[5]趙炯,賈培源,李中山,林旺城.嵌入式設(shè)備遠(yuǎn)程在線升級(jí)技術(shù)[J].計(jì)算機(jī)工程,2012,36(12):262-264.
[6]李俊,王金海.基于TFTP 協(xié)議的ARM 軟件遠(yuǎn)程更新系統(tǒng)[J].工礦自動(dòng)化,2010,36(7):22-25.
[7]王江波,楊仁剛.基于GPRS的配變監(jiān)控終端遠(yuǎn)程更新和管理維護(hù)的研究[J].電測與儀表,2009,46(11):9-12.
[8]李桂新,蔣敏玉,黃軍.基于現(xiàn)場總線實(shí)現(xiàn)遠(yuǎn)程在線更新程序的技術(shù)[J].信息化研究,2009,35(6):11-14.
[9]徐立松,郭曉金.嵌入式Linux中安全文件傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].數(shù)字通信,2009,36(6):78-81.
[10]劉生華,何鵬舉,鄢化彪.基于TCP/IP 的單片機(jī)軟件遠(yuǎn)程升級(jí)[J].單片機(jī)與嵌入式系統(tǒng)應(yīng)用,2007(12):21-23.
[11]王恒,王颋,王泉,等.基于Bootloader的可靠嵌入式軟件遠(yuǎn)程更新機(jī)制[J].微計(jì)算機(jī)信息,2007(20):57-59.
[12]王恒,王颋,李敏,等.一種高可靠的嵌入式軟件遠(yuǎn)程自更新機(jī)制的研究與實(shí)現(xiàn)[J].工業(yè)控制計(jì)算機(jī),2007,20(9):39-40.
單片機(jī)與嵌入式系統(tǒng)應(yīng)用2015年11期