袁鳳培
(1.中煤科工集團(tuán)常州研究院有限公司, 江蘇 常州 213015;2.天地(常州)自動(dòng)化股份有限公司, 江蘇 常州 213015)
目前在用的煤礦安全監(jiān)測(cè)、人員定位等系統(tǒng)均采用多層網(wǎng)絡(luò)、多鏈路架構(gòu),如圖1所示。分站通過(guò)以太網(wǎng)與地面控制主機(jī)連接,傳感器或執(zhí)行器通過(guò)RS485或CAN等現(xiàn)場(chǎng)總線(xiàn)與分站連接[1]。隨著礦用產(chǎn)品數(shù)字化推進(jìn),特別是物聯(lián)網(wǎng)技術(shù)逐步應(yīng)用,產(chǎn)品的復(fù)雜度、智能化水平等不斷提高,產(chǎn)品持續(xù)維護(hù)需求進(jìn)一步加大[2-7]。
圖1 煤礦多層異構(gòu)網(wǎng)絡(luò)架構(gòu)Fig.1 Structure of multi-layer heterogeneous networks in coal mines
得益于以太網(wǎng)完整的鏈路協(xié)議,目前接入環(huán)網(wǎng)的分站或網(wǎng)關(guān)大多已實(shí)現(xiàn)遠(yuǎn)程固件更新功能[8-9]。地面控制主機(jī)通過(guò)環(huán)網(wǎng)與分站通信,固件數(shù)據(jù)可通過(guò)Web,F(xiàn)TP(File Transfer Protocol,文件傳輸協(xié)議),TFTP(Trivial File Transfer Protocol,簡(jiǎn)單文件傳輸協(xié)議)等方式推送到下位機(jī),下位機(jī)校驗(yàn)無(wú)誤跳轉(zhuǎn)至Bootloader,Bootloader使用IAP(In Application Programming,在應(yīng)用編程)接口將新固件編程至指定Flash地址,引導(dǎo)MCU跳轉(zhuǎn)運(yùn)行新固件。
隨著微電子技術(shù)的發(fā)展,一些小型MCU能夠支持IAP技術(shù)。主機(jī)通過(guò)RS485或CAN總線(xiàn)將固件數(shù)據(jù)下載至傳感器,Bootloader更新固件。該方式實(shí)現(xiàn)了設(shè)備免開(kāi)蓋維護(hù),但需要工程人員深入現(xiàn)場(chǎng),當(dāng)傳感器數(shù)量較多、分散分布時(shí),維護(hù)工作量依然很大。若能從地面控制主機(jī)直接更新各級(jí)設(shè)備固件,必將大大減輕工程維護(hù)工作量。鑒此,本文針對(duì)煤礦多層異構(gòu)網(wǎng)絡(luò)遠(yuǎn)程固件更新方法展開(kāi)研究。
與點(diǎn)到點(diǎn)的固件更新不同,在多層異構(gòu)網(wǎng)絡(luò)下,固件數(shù)據(jù)需要經(jīng)過(guò)多個(gè)設(shè)備中轉(zhuǎn)、穿越多種鏈路才能到達(dá)目標(biāo)設(shè)備。因此,固件數(shù)據(jù)在傳遞前必須要有詳細(xì)信息描述數(shù)據(jù)的目標(biāo)及需要穿越的鏈路,即數(shù)據(jù)需要路由描述??梢?jiàn),實(shí)現(xiàn)多層異構(gòu)網(wǎng)絡(luò)遠(yuǎn)程固件更新的核心在于實(shí)現(xiàn)路由描述。Bootloader實(shí)現(xiàn)、IAP技術(shù)的應(yīng)用已相當(dāng)成熟,本文不再贅述,重點(diǎn)討論如何利用JSON(Java Script Object Notation,JS對(duì)象簡(jiǎn)譜)描述路由及軟件編程。
路由描述的核心是鏈路層級(jí)關(guān)系描述。一些輕量的數(shù)據(jù)交換格式,如XML(eXtensible Markup Language,可擴(kuò)展標(biāo)記語(yǔ)言),JSON等,具有描述層級(jí)關(guān)系的優(yōu)勢(shì)。綜合考慮解析難度、傳輸效率、可讀性等,選擇JSON來(lái)描述路由信息[10]。
JSON是ECMAScript(歐洲計(jì)算機(jī)協(xié)會(huì)制定的JS規(guī)范)的子集,采用完全獨(dú)立于編程語(yǔ)言的文本格式來(lái)存儲(chǔ)和表示數(shù)據(jù)[11-12]。其具有便于閱讀、層次簡(jiǎn)潔、結(jié)構(gòu)清晰、易于擴(kuò)展等優(yōu)勢(shì),是理想的數(shù)據(jù)交換語(yǔ)言[13]。JSON按對(duì)象組織數(shù)據(jù),每個(gè)對(duì)象包含1個(gè)或多個(gè)鍵/值對(duì),數(shù)組可包含多個(gè)對(duì)象,該特性可用于描述網(wǎng)絡(luò)拓?fù)鋄14]。利用“鍵”描述鏈路,利用“值”描述該鏈路下游設(shè)備,利用“值中值”描述設(shè)備間層級(jí)關(guān)系,這就是JSON路由描述方法。以圖2為例,其展示了在Notepad++中利用JSON描述一段網(wǎng)絡(luò),從中可看出設(shè)備CH4相對(duì)于根設(shè)備KJF130的路由信息。
圖2 JSON路由描述示例Fig.2 Example of JSON route description
采用JSON描述固件路由包括設(shè)備屬性描述、網(wǎng)絡(luò)拓?fù)錁?gòu)建和固件路由描述3個(gè)部分。
(1) 設(shè)備屬性描述。以JSON方式描述設(shè)備的固有屬性,便于上游主機(jī)對(duì)網(wǎng)絡(luò)拓?fù)溥M(jìn)行解析和管理。在考慮帶寬的基礎(chǔ)上設(shè)置簡(jiǎn)潔明了的鍵/值對(duì),如設(shè)備ID、設(shè)備名稱(chēng)、軟件版本、硬件版本、鏈路端口等。設(shè)備屬性JSON描述示例如圖3所示。
圖3 設(shè)備屬性JSON描述示例Fig.3 Example of JSON description of device property
(2) 網(wǎng)絡(luò)拓?fù)錁?gòu)建。本機(jī)獲取下游從機(jī)的屬性描述信息并添加到對(duì)應(yīng)端口數(shù)組(如圖3中的ETH,RS485_1,CAN_1)的過(guò)程即構(gòu)建網(wǎng)絡(luò)拓?fù)洹i_(kāi)始時(shí)本機(jī)屬性JSON描述信息中的端口數(shù)組為空,經(jīng)過(guò)一定時(shí)間的鏈路巡檢后,本機(jī)屬性JSON描述信息將被擴(kuò)充,包含不同鏈路下所有從機(jī)的屬性信息,形成本機(jī)網(wǎng)絡(luò)拓?fù)湫畔ⅰ.?dāng)本機(jī)作為從機(jī)時(shí),
該信息被上游主機(jī)獲取,層層提交后,最終在根設(shè)備處形成所有從機(jī)屬性的JSON描述,即系統(tǒng)網(wǎng)絡(luò)拓?fù)?。圖2展示了經(jīng)過(guò)鏈路巡檢后,設(shè)備KJF130下的網(wǎng)絡(luò)拓?fù)鋽?shù)據(jù)。
構(gòu)建網(wǎng)絡(luò)拓?fù)涫菍?shí)現(xiàn)多層異構(gòu)網(wǎng)絡(luò)固件更新的關(guān)鍵。煤礦工業(yè)現(xiàn)場(chǎng)環(huán)境復(fù)雜,只有通過(guò)“自舉”而非“配置信息”建立實(shí)時(shí)拓?fù)?,才能真?shí)展現(xiàn)當(dāng)前網(wǎng)絡(luò)狀況,上位機(jī)才能根據(jù)用戶(hù)選擇及拓?fù)渖捎行У墓碳酚擅枋觥?/p>
(3) 固件路由描述。用戶(hù)通過(guò)網(wǎng)絡(luò)拓?fù)鋱D選取需要更新的設(shè)備,上位機(jī)軟件即可根據(jù)設(shè)備拓?fù)湮恢蒙陕酚蒍SON數(shù)據(jù)。該數(shù)據(jù)不僅描述了固件信息(長(zhǎng)度、校驗(yàn)、版本等),還描述了該固件需要經(jīng)過(guò)哪些設(shè)備的哪些端口才能到達(dá)目標(biāo)設(shè)備。以圖4為例,其展示了對(duì)CH4更新固件需要經(jīng)過(guò)2層設(shè)備的2個(gè)不同鏈路才能完成。
圖4 固件路由描述示例Fig.4 Example of firmware routing description
本機(jī)使用路由描述中的ID字段判斷路由是否包含本機(jī),該鍵值使用鏈路地址(如RS485從機(jī)地址)唯一標(biāo)明。本機(jī)還需通過(guò)路由中的鏈路字段判斷路由歸屬本機(jī)還是本機(jī)的下游從機(jī):路由中沒(méi)有鏈路字段時(shí),路由屬于本機(jī),完成固件接收后將升級(jí)本機(jī);路由中含有鏈路字段時(shí),本機(jī)啟動(dòng)相應(yīng)鏈路進(jìn)行路由轉(zhuǎn)發(fā),且轉(zhuǎn)發(fā)的路由信息將剝離本機(jī)ID及鏈路字段。固件路由傳輸過(guò)程如圖5所示。
圖5 固件路由傳輸過(guò)程Fig.5 Firmware routing transfer process
設(shè)計(jì)下位機(jī)固件更新功能代碼應(yīng)充分考慮靈活性、公用性,設(shè)計(jì)目標(biāo):① 該代碼應(yīng)能被任意設(shè)備使用。② 該代碼應(yīng)能適應(yīng)常用的鏈路協(xié)議。
為滿(mǎn)足上述目標(biāo),剖析代碼功能,將代碼分為3個(gè)部分:① 應(yīng)答上游主機(jī)的prb_server_msg_analyse功能函數(shù),該函數(shù)將應(yīng)答上游主機(jī)的所有數(shù)據(jù)訪(fǎng)問(wèn)。② 本機(jī)核心數(shù)據(jù)處理任務(wù)task_prb_msg_bridge,包含更新本機(jī)拓?fù)洹⑦M(jìn)度,存儲(chǔ)接收的路由、固件數(shù)據(jù),判斷業(yè)務(wù)流程等核心功能。③ 本機(jī)主口鏈路服務(wù)任務(wù)task_prb_client_x,包含獲取下游從機(jī)拓?fù)?、進(jìn)度,轉(zhuǎn)發(fā)路由、固件等功能。下位機(jī)軟件框架如圖6所示。
圖6 下位機(jī)軟件框架Fig.6 Framework of lower computer software
上游主機(jī)訪(fǎng)問(wèn)本機(jī)時(shí),經(jīng)過(guò)鏈路協(xié)議解析確認(rèn)請(qǐng)求為遠(yuǎn)程固件更新后,調(diào)用prb_server_msg_analyse函數(shù)解析數(shù)據(jù),應(yīng)答主機(jī)。上游主機(jī)請(qǐng)求獲取拓?fù)?,從機(jī)響應(yīng),上傳拓?fù)銳SON,一段時(shí)間后整個(gè)系統(tǒng)拓?fù)浞€(wěn)定,形成系統(tǒng)網(wǎng)絡(luò)拓?fù)鋱D。下載固件時(shí),上游主機(jī)先傳輸JSON路由數(shù)據(jù),本機(jī)完整接收后,判斷路由目標(biāo)是否包含本機(jī)或本機(jī)的下游從機(jī),進(jìn)而決定是否接收固件數(shù)據(jù)。如需要接收固件,本機(jī)完整接收固件數(shù)據(jù)后判斷是否更新本機(jī)或搜索相應(yīng)鏈路轉(zhuǎn)發(fā)。
本機(jī)作主機(jī)時(shí),鏈路服務(wù)任務(wù)task_prb_client_x將定時(shí)詢(xún)問(wèn)下游從機(jī)拓?fù)涫欠褡兓?,以“不變不傳”為原則,兼顧動(dòng)態(tài)性能及帶寬。當(dāng)鏈路服務(wù)任務(wù)接收到轉(zhuǎn)發(fā)信號(hào)時(shí),開(kāi)始轉(zhuǎn)發(fā)數(shù)據(jù),即向下游從機(jī)廣播JSON路由和固件數(shù)據(jù)。每條物理鏈路對(duì)應(yīng)一個(gè)鏈路服務(wù)任務(wù),使得分布在不同鏈路的相同設(shè)備可同時(shí)進(jìn)行固件更新。
固件更新功能代碼基于RTOS(Real-time Operating System, 實(shí)時(shí)操作系統(tǒng))設(shè)計(jì),固件數(shù)據(jù)以文件系統(tǒng)形式存儲(chǔ)于本機(jī)外置Flash存儲(chǔ)器。代碼本身無(wú)層級(jí)限制,本機(jī)支持的設(shè)備數(shù)量取決于本機(jī)RAM資源。
上位機(jī)采用B/S架構(gòu)設(shè)計(jì)。前端Web頁(yè)面可進(jìn)行拓?fù)鋱D展示、固件管理、設(shè)備選取等操作,如圖7所示。服務(wù)器采用以太網(wǎng)與硬件設(shè)備通信,使用MySQL數(shù)據(jù)庫(kù)存儲(chǔ)固件數(shù)據(jù)。采用B/S架構(gòu)符合遠(yuǎn)程運(yùn)維構(gòu)想,當(dāng)服務(wù)器IP公網(wǎng)可尋址時(shí),可以遠(yuǎn)程更新設(shè)備固件。
圖7 上位機(jī)Web頁(yè)面Fig.7 Web interface of upper computer
為驗(yàn)證煤礦多層異構(gòu)網(wǎng)絡(luò)遠(yuǎn)程固件更新方法的可行性及穩(wěn)定性,采用常用MCU模擬分站、網(wǎng)關(guān)、傳感器等設(shè)備搭建多層異構(gòu)網(wǎng)絡(luò)實(shí)驗(yàn)系統(tǒng)。各設(shè)備均使用FreeRTOS操作系統(tǒng)進(jìn)行任務(wù)調(diào)度,使用cJSON解析JSON數(shù)據(jù),外擴(kuò)4 MB SPI Flash存儲(chǔ)固件數(shù)據(jù),數(shù)據(jù)存儲(chǔ)采用EFS嵌入式文件系統(tǒng)。實(shí)驗(yàn)系統(tǒng)通信鏈路包含以太網(wǎng)、RS485、CAN,網(wǎng)絡(luò)深度達(dá)4層。搭建的網(wǎng)絡(luò)拓?fù)淙鐖D7所示。實(shí)驗(yàn)統(tǒng)計(jì)每層設(shè)備固件更新成功率和每100 kB數(shù)據(jù)傳輸時(shí)間,共進(jìn)行500次,統(tǒng)計(jì)數(shù)據(jù)見(jiàn)表1、表2,其中RS485總線(xiàn)1,2,3,4分別代表傳輸速率2.4,9.6,19.2,115.2 kbit/s,CAN總線(xiàn)1,2,3分別代表傳輸速率10,50,100 kbit/s。
表1 固件更新成功率統(tǒng)計(jì)
表2 固件更新時(shí)間統(tǒng)計(jì)Table 2 Statistics of firmware update time s
(1) 理論分析及實(shí)驗(yàn)表明,采用JSON描述路由可實(shí)現(xiàn)多層異構(gòu)網(wǎng)絡(luò)下嵌入式設(shè)備固件更新。該方法對(duì)鏈路依存度低,可廣泛應(yīng)用于煤礦安全監(jiān)控、人員定位等系統(tǒng),降低工程維護(hù)工作量,具有一定的工程應(yīng)用價(jià)值。
(2) 隨著物聯(lián)網(wǎng)技術(shù)在煤礦井下應(yīng)用的推進(jìn),網(wǎng)絡(luò)拓?fù)浍@取、設(shè)備路由解析、設(shè)備固件更新等功能需求迫切,可參考本文方法實(shí)現(xiàn)上述功能。