◎ 張義欣 吳昊 黃加順 天津海事局
李棟 天津天元海科技開發有限公司
港域環境監測系統是一個建于港口,用于監測港域海洋環境素(如水溫、潮流、流向、水位、風力、風向等),并為船舶進出港、離靠泊提供安全保障的監測服務網絡。其核心是及時將海洋環境要素觀測值予以傳輸和顯示。系統的使用更好地輔助海事管理人員進行通航環境的監測、日常船舶通行的管理以及水上交通安全事故的應急處置工作,進一步提升天津海事局船舶交通管理能力,并進一步促進提升天津海事局其海事業務信息化水平。
多功能航標作為觀測設備載體,航標數據采集系統更是多功能航標的核心。其通信手段可以采用移動網絡(移動、電信、聯通三大運營商)、北斗衛星導航系統(短報文功能)、海事衛星、甚高頻VHF(Very high frequency)等。本文介紹一種基于移動網絡通信的多功能航標采集系統遠程更新的實現。

圖1 STM32 flash分配布局圖
近年來隨著移動網絡的大力建設,擴大了近海移動網絡覆蓋區域,也為多功能航標的大規模布放提供了通信支撐,加速推進了多功能航標的發展。移動網絡作為多功能航標數據交換的媒介已廣泛使用。依托移動網絡對多功能航標采集系統功能更新升級也成為一種手段,使用無線方式升級可以節省大量的人力、物力和財力。
由于移動網絡信號作用距離有限,并且受天氣、風向等環境因素影響嚴重,大多數海上多功能航標信號不夠穩定,通信丟包情況嚴重,所以需要借助應用內編程、分包傳輸與中斷續傳等方式保證多功能航標采集系統遠程更新的可靠性和成功率。
應用內編程(IAP In Application Programming)即應用內編程,是用戶自己的程序在運行過程中對User Flash的部分區域進行燒寫,目的是為了在產品發布后可以方便地通過預留的通信口對產品中的固件程序進行更新升級。通常在實現IAP功能時,即用戶程序在運行過程中進行自身程序的更新操作,需要在設計程序時編寫兩個部分的代碼,第一個部分的程序不執行正常的功能操作,只是通過某種通信管道(如USB、USART)接收程序或數據,用來執行對第二部分代碼的更新操作,第二個部分的代碼才是真正的功能代碼。這兩部分代碼都同時燒錄在User Flash中,當芯片上電后,第一部分代碼開始運行,檢查是否需要對第二部分代碼進行更新,如果需要更新就直接運行第二部分代碼,如果需要更新,先執行更新操作,等更新完成后執行第二部分代碼。

圖2 更新流程圖
本文的IAP功能的實現,使用基于Arm Coretex-M3架構的STM32F10x系列芯片。STM32復位后,從0x08000004地址取出復位中斷向量的地址,并跳轉到復位中斷服務程序,在運行完復位中斷服務程序之后跳轉到IAP的main函數。在執行完IAP以后跳轉至新寫入程序的復位向量表,取出新程序的復位中斷向量的地址,并跳轉執行新程序的復位中斷服務程序,隨后跳轉至新程序的main函數。
盡管在陸地上移動網絡覆蓋范圍很廣,但在近海很多區域移動網絡信號強度有限,尤其是部分區域信號非常弱并且不穩定,網絡連接時斷時續,這對遠程更新的實現提出了不小的挑戰。本文提出分包傳輸和記錄中斷續傳的方式,用來提高傳輸的穩定性和可靠性。

表1 數據幀格式

表2 請求更新的消息結構

表3 更新時的消息結構

表4 消息頭格式
整個數據傳輸過程為應答-響應模式,啟動更新升級模式后,根據本地保存的已更新的數據包,請求遠程服務器未更新的數據包,然后進行校驗,如果校驗成功就保存數據包,直到所有數據包更新完畢。其中,每次應答都需要有超時控制,流程見下圖。
所有傳輸的有效數據均是數據幀中的載荷數據,數據幀包括數據長度、CRC16校驗碼、payload數據和幀分隔符四部分,具體內容和所占字節見表1。
請求更新的消息結構和更新時的數據消息結構兩類不同的數據類型根據消息類型來區分。見表2 和表3。
更新的數據包采用CRC64校驗,保證數據的可靠性。請求更新的消息結構和更新時的數據消息結構的消息頭格式見表4。
本文的提出的一種基于移動網絡多功能航標采集系統遠程更新的實現方案,在實際使用中的一次更新成功率很高,還未出現過多次更新不成功的情況。但有一種情形需考慮,因更新時,每成功接收一包數據,更新一次flash中的數據,這個過程必須持續結束才可以。如果網絡信號長時間不穩定,就會導致正常業務功能長時間無法工作。為解決此問題,可以考慮將flash中的用戶數據區域分為兩部分,一部分為更新下載的數據區域,另一部分為原來的用戶數據在區域,只有在全部下載完畢后,才跳轉到更新后的區域,保證如果網絡長時間不穩定,可以切換回原先的業務流程,擇機再繼續更新,這樣不會長時間中斷正常的業務功能。雖然實際使用中還未遇見過此類極端的情況,但可以作為今后優化完善的方向。