黃飛龍, 譚晗凌, 陳冰懷
(廣東省氣象探測數(shù)據(jù)中心, 廣州 510080)
當(dāng)前地面氣象觀測業(yè)務(wù)中使用的自動氣象站可以觀測多種氣象要素,包括風(fēng)速、風(fēng)向、氣溫、相對濕度、雨量、大氣壓強、地表溫度、淺層地溫、深層地溫、蒸發(fā)量、大氣能見度等等。自動氣象站多在野外安裝并長期運行,每分鐘將觀測數(shù)據(jù)通過無線網(wǎng)絡(luò)傳輸至監(jiān)控中心服務(wù)器,實現(xiàn)區(qū)域、全省乃至全國的自動站觀測網(wǎng)氣象數(shù)據(jù)的實時觀測。隨著現(xiàn)代化技術(shù)迅速發(fā)展,對氣象觀測要素的數(shù)量提出更多的要求,同時對數(shù)據(jù)處理和數(shù)據(jù)質(zhì)量控制提出更高的要求。在設(shè)備的運行壽命期間內(nèi),已經(jīng)安裝運行的自動氣象站必須適應(yīng)業(yè)務(wù)和需求的變化,使本身的數(shù)據(jù)輸出格式、數(shù)據(jù)統(tǒng)計方法和質(zhì)控方法與不斷更新的觀測業(yè)務(wù)規(guī)范和標(biāo)準要求相一致,滿足現(xiàn)代化發(fā)展的需求。在大多數(shù)情況下,自動氣象站升級嵌入式固件代碼即可滿足新標(biāo)準和新算法提出的要求。
目前,國內(nèi)在用的自動氣象站有兩種類型,一種是以單片機為核心的舊型號自動氣象站,這種氣象站功能較弱,只能實現(xiàn)簡單的數(shù)據(jù)采集功能,從硬件資源上就不具備在線升級的能力,或者難以設(shè)計通用的方法[1],固件需要更新的時候?qū)嶋H上就是更換采集器,或者將采集器打開,使用專用的燒錄儀器寫入嵌入式代碼。另一種是以32位微系統(tǒng)為核心的新一代自動氣象站,功能較為強大,MCU支持在線編程技術(shù)(IAP),并具備所需的代碼存儲空間、寄存器等硬件資源。另一方面,嵌入式在線升級技術(shù)的研究以及不同領(lǐng)域的應(yīng)用也日益成熟。方兵兵以STM32F103芯片為對象設(shè)計了嵌入式軟件遠程升級系統(tǒng)并解決了服務(wù)器與客戶端之間的增量文件傳輸[2],唐鵬程、康燕萍等詳細介紹了帶有IAP技術(shù)的單片機固件在線升級方法[3-4],由于嵌入式設(shè)備在不同的工業(yè)網(wǎng)絡(luò)中使用,在線升級方案也各有優(yōu)點:例如通過GPRS連接的UV LED固件升級考慮了CRC校驗和流量壓縮問題[5],通過CAN總線連接的節(jié)點設(shè)備升級快速可靠[6],基于電力線載波傳輸?shù)妮d波路由升級方案成本低廉[7],而基于有線以太網(wǎng)連接的方案則較為可靠和高效[8]。近年物聯(lián)網(wǎng)的發(fā)展將聯(lián)網(wǎng)設(shè)備的在線升級變成一種必備的功能[9]。
新一代自動氣象站功能較為強大,也在在線升級方面作了一些探索,可以在設(shè)備重啟的時候接收并更新固件[10-11],但是需要使用筆記本電腦與設(shè)備連接,對于分布于城鄉(xiāng)、高山和海濱不同地形和不同氣候環(huán)境的無人值守區(qū)域自動氣象站來說,現(xiàn)場升級的代價高昂。基于無線網(wǎng)絡(luò),在不影響設(shè)備正常數(shù)據(jù)采集和傳輸?shù)那疤嵯聦崿F(xiàn)氣象站主采集器固件自動升級,具有較高的實用價值。
目前自動氣象站都是通過無線公眾網(wǎng)絡(luò)組網(wǎng),如圖1所示,自動氣象站采用RS232協(xié)議串口與內(nèi)含SIM卡的無線通信模塊連接,每分鐘把最新的氣象觀測數(shù)據(jù)發(fā)送到移動基站,再通過專線發(fā)送到自動氣象站全網(wǎng)監(jiān)控中心服務(wù)器上。監(jiān)控中心也可以通過相同的路徑以相反的方向?qū)?shù)據(jù)或者監(jiān)控命令發(fā)送到氣象站主機,現(xiàn)實整個自動氣象站觀測網(wǎng)的協(xié)調(diào)和遠程控制。
圖1 組網(wǎng)自動氣象站升級示意圖
新一代自動氣象站主采集器由硬件和嵌入式軟件組成[12]。主采集器嵌入式處理器使用ARM9系列的32位處理器STM32F207,具有強大的性能,能夠支持嵌入式實時操作系統(tǒng)的運行,其片內(nèi)FLASH支持在線編程技術(shù),所配置的4 G容量的FLASH外部存儲芯片K9LBG08U0D在存儲正常運行所需的設(shè)備參數(shù)和觀測數(shù)據(jù)之外有足夠的余量存儲接收到的新代碼,具備實現(xiàn)無線升級固件的條件。
當(dāng)自動氣象站增加新功能、執(zhí)行新標(biāo)準或嵌入式固件需要優(yōu)化的時候,設(shè)備開發(fā)程序員修改固件源代碼,通過編譯產(chǎn)生新的固件包。在自動氣象站監(jiān)控中心設(shè)計一個在線升級控制系統(tǒng),該系統(tǒng)周期性地發(fā)送命令查詢所有在線運行自動氣象站的版本號,自動對版本過舊的設(shè)備進行固件升級。由于網(wǎng)絡(luò)傳輸機制和通信模塊緩存等多種因素的制約,固件包不能一次性傳輸?shù)阶詣託庀笳?,需要分成多個數(shù)據(jù)包,按順序傳輸。其次,由于自動氣象站主要任務(wù)為數(shù)據(jù)采集、數(shù)據(jù)處理和傳輸,為了在固件包傳輸?shù)倪^程中不影響設(shè)備正常運行,在線升級控制系統(tǒng)需要避開自動氣象站最繁忙的時刻進行固件包傳輸。最后,野外無線網(wǎng)絡(luò)的信號強度可能較弱,工業(yè)區(qū)的電磁干擾可能較強,導(dǎo)致某一個數(shù)據(jù)包傳輸失敗,因此傳輸過程還必須有斷點續(xù)傳機制,確保采集器最終收到完整可用的新固件。當(dāng)自動氣象站接收到最后一份固件包,對外存FLASH中的固件代碼進行完整性檢測,確保無缺漏無變碼,即可按設(shè)計執(zhí)行固件升級流程。
STM32F207處理器有1 MByte的片內(nèi)FLASH代碼區(qū),為了實現(xiàn)在線升級,在嵌入式程序設(shè)計的時候?qū)⒋a區(qū)劃分為兩個功能區(qū):引導(dǎo)區(qū)(地址:0x0000000-0x8007FFF)與運行區(qū)(地址:0x8008000-0x800FFFFF)。設(shè)備啟動的時候先運行引導(dǎo)區(qū)程序,該程序首先初始化外存FLASH,并檢查該FLASH上的固定地址是否已經(jīng)存在完整的新固件升級代碼。如果有代碼,啟動固件代碼覆蓋流程:片內(nèi)FLASH解鎖,調(diào)用片內(nèi)FLASH塊操作函數(shù)擦除運行區(qū)原有代碼,按照順序?qū)⑿麓a寫入處理器的片內(nèi)FLASH運行區(qū),然后鎖定片內(nèi)FLASH,禁止正常運行期間改寫運行代碼。代碼寫入順序如下:第一個字節(jié)內(nèi)容燒錄至地址0x8008000,第二個字節(jié)內(nèi)容燒錄至地址0x8008001,以此類推。當(dāng)最后一個字節(jié)燒錄完畢,引導(dǎo)程序?qū)⑶宄獯鍲LASH中的升級代碼,然后重啟設(shè)備。如果引導(dǎo)程序沒有在外存FLASH中找到完整的升級代碼,執(zhí)行正常運行流程:則跳轉(zhuǎn)至運行區(qū)起始地址,初始化總線、時鐘,中斷使能,初始化數(shù)據(jù)結(jié)構(gòu),開始執(zhí)行數(shù)據(jù)采集、處理和傳輸?shù)热蝿?wù)。
基于無線網(wǎng)絡(luò)的固件升級具體流程如圖2所示。監(jiān)控中心在線升級控制系統(tǒng)通過無線網(wǎng)絡(luò)將新程序代碼文件分成很多個數(shù)據(jù)幀,從第0幀開始,陸續(xù)傳輸?shù)阶詣託庀笳局鞑杉?。自動站主采集器檢查所接收數(shù)據(jù)包的幀標(biāo)識,確認該數(shù)據(jù)包屬于升級代碼,即調(diào)用固件交互程序進行校驗。通過校驗的升級代碼被存儲在外存FLASH芯片,同時固件交互程序向監(jiān)控中心反饋接收到的升級包的幀編號。監(jiān)控中心根據(jù)接收到的反饋信息,按順序發(fā)送下一幀升級包,如此循環(huán)直到監(jiān)控中心發(fā)送完畢最后一幀升級包(即結(jié)束幀)。主采集器接收到最后一幀升級包并檢查無誤之后,在非繁忙時間自動重啟,通過引導(dǎo)區(qū)程序檢查外存FLASH是否存在完整的新固件程序,再調(diào)用固件更新程序嚴格按照代碼順序?qū)⑿鲁绦蚋采w至運行區(qū),覆蓋成功之后即運行新程序。
圖2 在線升級流程
通過移動公眾網(wǎng)絡(luò)的無線分包傳輸交互過程主要通過3個程序完成,分別是處于自動站監(jiān)控中心服務(wù)器上的升級控制程序、分包組幀程序和處于采集器中的固件交互程序,如圖3所示。
升級控制系統(tǒng)為自動站監(jiān)控中心的一個子系統(tǒng),對組網(wǎng)觀測的自動氣象站設(shè)備進行版本號查詢并發(fā)起自動升級。當(dāng)發(fā)現(xiàn)自動站觀測網(wǎng)上的某一個站需要升級固件,先通過監(jiān)控中心數(shù)據(jù)庫搜索和設(shè)置該站對應(yīng)的網(wǎng)絡(luò)參數(shù)和SIM卡IP地址,再打開最新的固件代碼文件。在啟動發(fā)送后,以二進制方式讀取新固件代碼文件,根據(jù)文件大小和每一幀允許發(fā)送的最大容量,計算需要分包傳輸?shù)目値瑪?shù),再調(diào)用組幀函數(shù)生成固件升級幀。
圖3 分包傳輸交互方法
從第0幀開始,組幀函數(shù)首先對當(dāng)前幀編號的合理性進行檢查,出現(xiàn)異常情況則退出升級,并記錄在日志文件中。正常情況則根據(jù)當(dāng)前幀編號計算從文件中讀取升級代碼的偏移地址,并進行校驗碼計算。最后將幀頭、幀編號、總編號、幀長度、升級代碼、校驗碼和結(jié)束符組合在一起形成完整的升級幀。升級幀通過互聯(lián)網(wǎng)、移動基站再到無線通信模塊,最終發(fā)送到采集器主機。
采集器串口監(jiān)聽程序接收到監(jiān)控中心發(fā)送過來的數(shù)據(jù)包之后,檢查其幀標(biāo)識,如果確認是固件升級幀,則進入固件交互程序處理。該程序首先讀取幀編號和總編號(升級包總幀數(shù))。如果收到的是第0幀,程序擦除外存Flash中的指定塊地址,以便將升級幀內(nèi)容寫入,如果擦除失敗,采集器返回失敗信息,通知升級控制系統(tǒng)該設(shè)備不具備在線升級能力;在幀編號大于0的時候,檢查當(dāng)前編號是否為上一次接收編號的延續(xù),對于編號連續(xù)的包,程序還要進行校驗計算再寫入外存Flash;對于不連續(xù)的包則會丟棄,同時向升級控制系統(tǒng)反饋上一次正確接收到的幀編號,以便監(jiān)控中心重新發(fā)送本次升級幀。當(dāng)固件交互程序正確接收到最后一幀升級包,將數(shù)據(jù)包和升級標(biāo)識寫入外存Flash。采集器主機在完成分鐘統(tǒng)計、正點數(shù)據(jù)上傳等重要任務(wù)之后,自動重啟,并在片內(nèi)Flash完成擦除舊固件、燒錄新固件的工作。
如圖4所示,自動站所在地點的無線信號強度變化并不穩(wěn)定,圖中為某站一日的信號強度曲線,實線表示平均強度值的變化,實線上下兩側(cè)的陰影表示信號強度的變化范圍。原因是多方面的:在海島和高山等地區(qū),自動氣象站野外運行環(huán)境中無線網(wǎng)絡(luò)信號可能較差;而在城市中心區(qū)、工業(yè)區(qū)或者是鐵路沿線,電磁干擾信號可能較強;無線通信模塊可能故障重啟;移動基站信道分配或者網(wǎng)絡(luò)堵塞原因可能導(dǎo)致無線通信模塊下線一段時間,又重新上線的情況下(這種情況會經(jīng)常發(fā)生)。斷點續(xù)傳保證在任意一幀升級包丟失或者變碼的情況下,升級系統(tǒng)還能夠在丟失的代碼段開始繼續(xù)傳輸,保證采集器主機最終收到的是完整且正確的代碼。
圖4 無線信號強度日變化
在線升級控制系統(tǒng)對升級過程進行監(jiān)控,每發(fā)送一幀之后等待接收反饋信息,如圖5所示。當(dāng)控制系統(tǒng)發(fā)送了第N幀升級包,收到的反饋信息有2種:采集器返回編號N或者返回編號N-1。返回編號N說明第N幀已經(jīng)被接收存儲,這時控制系統(tǒng)將繼續(xù)發(fā)送第N+1幀升級包;返回編號N-1說明采集器接收到第N幀但校驗不通過,這時控制系統(tǒng)將繼續(xù)發(fā)送第N幀升級包。沒有收到反饋信息的情況也有2種:第N幀沒到達采集器,或者采集器返回編號N但控制系統(tǒng)沒收到。這兩種情況下控制系統(tǒng)都沒有接收到正確的返回信息,監(jiān)聽一段時間之后,將嘗試再次發(fā)送第N幀升級包,如果嘗試5次都沒有收到返回信息,則暫停自動升級,顯示收發(fā)異常信息,等待人工干預(yù)。本設(shè)計所采用的斷點續(xù)傳機制升級控制系統(tǒng)為主動方,盡量減少自動站采集器的任務(wù)和算法復(fù)雜性。面對自動站復(fù)雜的無線信號環(huán)境仍然能夠保證采集器寫入外存Flash的升級包不會缺失或者重復(fù),增強了無線傳輸?shù)目煽啃浴?/p>
圖5 斷點續(xù)傳機制
野外運行的自動氣象站一般都具有連續(xù)觀測任務(wù),觀測數(shù)據(jù)的連續(xù)性和可用性都是被考核的指標(biāo)。自動站的數(shù)據(jù)采集分兩部分:基于中斷響應(yīng)的數(shù)字信號采集和基于循環(huán)任務(wù)的模擬信號采集,升級包接收過程會增加外部中斷響應(yīng)頻次,影響模擬信號采集周期。自動站數(shù)據(jù)處理和存儲功能主要是通過循環(huán)結(jié)構(gòu)任務(wù)完成,而顯示屏刷新和觀測數(shù)據(jù)無線傳輸任務(wù)是通過時鐘中斷響應(yīng)進行,需要較高的響應(yīng)優(yōu)先級。升級過程中,采用適當(dāng)?shù)牟呗?,盡量降低文件傳輸和設(shè)備重啟對觀測任務(wù)的影響,保障觀測數(shù)據(jù)不會出現(xiàn)異常的波動,讓終端用戶感覺不到設(shè)備正在升級,實現(xiàn)升級全過程的“無感”性能。
無感升級方法采用了3個策略。首先是時間同步策略??刂葡到y(tǒng)啟動升級后,在傳輸?shù)?幀升級包之前先對被升級自動氣象站采集器進行校時。由于自動站采集器運行的重要任務(wù)都在跨分鐘或者跨小時時刻,任務(wù)周期和時間長度是可預(yù)測的,時間同步之后控制系統(tǒng)可以避開采集器最繁忙時間發(fā)送升級數(shù)據(jù)包,降低升級包接收和反饋對觀測業(yè)務(wù)的影響。其次是低優(yōu)先級響應(yīng)策略。由于升級過程中,可靠性和無感性能比快速更加重要,采集器可以將處理升級包的優(yōu)先級降低:將中斷響應(yīng)程序放到嵌入式系統(tǒng)循環(huán)中運行,在完成數(shù)據(jù)采集、顯示、存儲和傳輸之后再檢查升級包的校驗碼、寫入外存Flash以及發(fā)送反饋信息。同時控制系統(tǒng)的監(jiān)聽程序要設(shè)置較長的超時時間以配合低優(yōu)先級的信息反饋速度。最后是自主升級策略。升級控制程序發(fā)送完升級包之后,采集器重啟時間不受控制系統(tǒng)指定或者命令觸發(fā)。采集器接收完最后一幀升級包之后,將完整性標(biāo)識寫入外存Flash指定地址,然后選擇嵌入式任務(wù)空閑時間自動重啟并在一分鐘內(nèi)實現(xiàn)程序升級。
在線升級控制系統(tǒng)軟件如圖6所示。根據(jù)升級方法流程設(shè)計,設(shè)置了4個功能區(qū)。在“無線連接”功能區(qū)域主要實現(xiàn)監(jiān)控中心地址參數(shù)設(shè)置、打開最新升級文件和手動升級(包括啟動升級、設(shè)置站號和斷點續(xù)傳)選項,自動搜索升級站點和啟動升級功能由后臺程序定時運行?!敖邮辗答佇畔ⅰ惫δ軈^(qū)用于顯示被升級自動站采集器反饋的原始信息,包括站點號、升級標(biāo)識和已經(jīng)成功接收到的幀編號。該軟件自身的狀態(tài)信息在圖中右部窗口顯示,包括網(wǎng)絡(luò)連接信息、初始化結(jié)果、最新固件信息以及可能的錯誤日志等等。
圖6 在線升級系統(tǒng)主界面
對站號為G9909的自動氣象站進行多次在線升級測試,結(jié)果如下:
1)由于網(wǎng)絡(luò)延時以及無感升級策略的影響,升級控制系統(tǒng)傳輸一幀升級包從發(fā)送到收到反饋的平均時間為6 s;
2)采集器接收升級包的過程中,風(fēng)向、風(fēng)速、氣溫、濕度、氣壓等氣象瞬時值并未發(fā)生明顯異常的波動,每分鐘保存采集數(shù)據(jù)正常,每5分鐘上傳一份觀測數(shù)據(jù)正常,設(shè)備正常觀測任務(wù)沒有受到影響;
3)發(fā)生2次需要人工干預(yù)的斷點續(xù)傳情況,說明自動續(xù)傳的次數(shù)可能需要調(diào)整增加;
4)采集器空閑時刻自動重啟并成功更新程序,全過程不足1分鐘,對該分鐘的數(shù)據(jù)采集有影響,但對于數(shù)據(jù)上傳間隔為5分鐘的自動氣象站而言不影響觀測任務(wù),基本實現(xiàn)無感升級。
本設(shè)計中,固件升級的可靠性和無感性能比升級速度更為重要,在移動公眾網(wǎng)絡(luò)復(fù)雜路由和采集器端低優(yōu)先級策略的影響下發(fā)送升級幀和接收反饋信息的平均時間比較長,但仍然可靠地完成升級;從斷點續(xù)傳的情況來看,傳輸網(wǎng)絡(luò)的復(fù)雜性不但會影響傳輸時間,同時也影響傳輸質(zhì)量,可能導(dǎo)致升級幀或者反饋信息傳輸超時或者部分變碼,因此升級控制系統(tǒng)的自動續(xù)傳嘗試的次數(shù)應(yīng)當(dāng)適當(dāng)增加,盡量降低人工干預(yù)的概率。
本文提出了一種基于無線分包傳輸方式的自動氣象站嵌入式固件無感升級方法,初步實現(xiàn)并進行了測試。該方法考慮到了無線傳輸網(wǎng)絡(luò)的延時特性、無線傳輸模塊的容量限制以及采集器工作任務(wù)的優(yōu)先權(quán),設(shè)計了具有良好容錯性能的分包傳輸交互方法和斷點續(xù)傳機制,軟件操作采用合理的策略避免對主任務(wù)的影響。測試結(jié)果顯示該方法實現(xiàn)了設(shè)計的目的,對于野外運行的自動氣象站的在線升級具有使用價值。該方法也可以為其他野外觀測設(shè)備的自動化在線升級提供參考。