仲偉波,陳鍵,馮友兵,盧道華
1 江蘇科技大學(xué) 電子信息學(xué)院,江蘇 鎮(zhèn)江 212003
2 江蘇科技大學(xué) 海洋裝備研究院,江蘇 鎮(zhèn)江 212003
隨著信息技術(shù)和人工智能技術(shù)的快速發(fā)展,船上電子設(shè)備越來(lái)越多,船舶運(yùn)行所需的數(shù)據(jù)也越來(lái)越多,這對(duì)船舶數(shù)據(jù)采集、處理與傳輸提出了更高的要求[1]。工業(yè)應(yīng)用及其要求的多樣性催生了種類(lèi)繁多的現(xiàn)場(chǎng)工業(yè)總線,例如工業(yè)以太網(wǎng)國(guó)際標(biāo)準(zhǔn)IEC 61158,ISO 11898 規(guī)范的控制器域網(wǎng)(CAN)總線以及各大自動(dòng)化公司開(kāi)發(fā)的可編程邏輯控制器(PLC)、分散控制系統(tǒng)(DCS)專(zhuān)用通信協(xié)議等[2]。目前,工業(yè)以太網(wǎng)協(xié)議和CAN 網(wǎng)絡(luò)在船舶及海工裝備上得到了廣泛應(yīng)用[3]。
NMEA2000 是美國(guó)國(guó)家海洋電子協(xié)會(huì)制定的標(biāo)準(zhǔn)化數(shù)據(jù)通信協(xié)議,在CAN 的架構(gòu)上采用ISO 11783-3 和11783-5 作為基礎(chǔ)[4],定義了國(guó)際標(biāo)準(zhǔn)組織開(kāi)放系統(tǒng)互連模型的相關(guān)層。NMEA2000作為一種廣泛應(yīng)用于連接船舶及其內(nèi)部傳感器和顯示單元的即插即用通信標(biāo)準(zhǔn)[5],經(jīng)過(guò)認(rèn)證的設(shè)備連接到一個(gè)主干網(wǎng)上,不同設(shè)備之間可以相互通信。NMEA2000 是一種基于CAN 總線的應(yīng)用層協(xié)議,以多主方式工作[6],網(wǎng)絡(luò)上的任意節(jié)點(diǎn)在任意時(shí)刻都能向其他節(jié)點(diǎn)發(fā)送數(shù)據(jù),網(wǎng)絡(luò)上每個(gè)節(jié)點(diǎn)都有不同的優(yōu)先級(jí),在發(fā)送沖突時(shí)能夠在總線上進(jìn)行仲裁,且有可靠的檢錯(cuò)機(jī)制[7]。
NMEA2000 是目前應(yīng)用較為廣泛的船載設(shè)備網(wǎng)絡(luò)協(xié)議,但國(guó)內(nèi)對(duì)其關(guān)注不多,研究得也較少,重要原因之一是僅有經(jīng)過(guò)認(rèn)證的設(shè)備才能使用NMEA2000 協(xié)議,因此極大地限制了其在船舶海工裝備中的應(yīng)用和推廣。蔡禮松等[8]針對(duì)數(shù)據(jù)采集的可靠性和安全性要求高等特點(diǎn),設(shè)計(jì)了一種基于CAN 的遠(yuǎn)程數(shù)據(jù)監(jiān)控系統(tǒng),但傳感器設(shè)備接口不一致,不便于數(shù)據(jù)采集。孟瑤等[9]將CAN 總線應(yīng)用到機(jī)器人通信系統(tǒng)中,針對(duì)傳統(tǒng)方法運(yùn)用UPPAAL 工具對(duì)CAN 總線進(jìn)行建模分析,部署動(dòng)態(tài)優(yōu)先級(jí)對(duì)節(jié)點(diǎn)實(shí)時(shí)性進(jìn)行改進(jìn);Davis等[10]對(duì)響應(yīng)時(shí)間和CAN 消息的最優(yōu)優(yōu)先級(jí)分配策略進(jìn)行了分析,采取了先入先出(FIFO)隊(duì)列和優(yōu)先隊(duì)列混合的調(diào)度方式,CAN 總線的傳輸效率有所改善,但會(huì)對(duì)CAN 的實(shí)時(shí)性造成一定的影響。
為了進(jìn)一步拓展NMEA2000 協(xié)議的應(yīng)用范圍,提升傳輸效率和實(shí)時(shí)性、可靠性,在自主可控平臺(tái)上完善優(yōu)化NMEA2000 協(xié)議,本文擬提出一個(gè)基于自主可控平臺(tái)的方案,將非認(rèn)證設(shè)備接入NMEA2000 網(wǎng)絡(luò),同時(shí)利用標(biāo)識(shí)符域提升多幀數(shù)據(jù)傳輸效率,改靜態(tài)優(yōu)先級(jí)為動(dòng)態(tài)優(yōu)先級(jí),使基于自主可控平臺(tái)完善優(yōu)化后的NMEA2000 網(wǎng)絡(luò)的傳輸效率、實(shí)時(shí)性和可靠性能夠滿(mǎn)足船載設(shè)備間數(shù)據(jù)傳輸?shù)男枰?/p>
NMEA2000 作為基于CAN 的應(yīng)用層協(xié)議,繼承了CAN 的擴(kuò)展幀結(jié)構(gòu)[11]。NMEA2000 協(xié)議中使用了29 bits 標(biāo)識(shí)符,對(duì)其中的21 bits 進(jìn)行了定義,以標(biāo)識(shí)不同的船舶通信設(shè)備及船體信息和事件,同時(shí)對(duì)這些報(bào)文信息的優(yōu)先級(jí)順序也進(jìn)行了定義。
NMEA2000 網(wǎng)絡(luò)中所有需要傳輸?shù)臄?shù)據(jù)內(nèi)容被定義為參數(shù)群的形式,并給出唯一標(biāo)識(shí)符,稱(chēng)之為參數(shù)群編號(hào)(PGN)。PGN 共有18 bits,由NMEA2000 委員會(huì)根據(jù)傳輸數(shù)據(jù)的性質(zhì)分配,遵照船舶設(shè)備屬性和事件定義了156 個(gè)參數(shù)組號(hào)。在每個(gè)NMEA2000 協(xié)議定義的設(shè)備中,分別定義優(yōu)先級(jí)、更新頻率、數(shù)據(jù)長(zhǎng)度等信息。在NMEA2000中保留位都為0,數(shù)據(jù)頁(yè)位都為1 bit。數(shù)據(jù)頁(yè)位為0 的PGN 由ISO 11783 定義,共有6 個(gè),主要用于數(shù)據(jù)傳輸控制和說(shuō)明[12]。
NMEA2000 通過(guò)使用PGN 來(lái)區(qū)分不同的數(shù)據(jù)內(nèi)容,針對(duì)連接到網(wǎng)絡(luò)中的各種設(shè)備,例如GPS 系統(tǒng)、慣性導(dǎo)航系統(tǒng)、雷達(dá)和其他傳感器設(shè)備,以及無(wú)人艇航向、舵角、航速等實(shí)時(shí)信息,都有相對(duì)應(yīng)的PGN 來(lái)表示。NMEA2000 繼承了CAN協(xié)議擴(kuò)展幀的仲裁域定義格式,在29 bits 的標(biāo)識(shí)符字段中,包括了每個(gè)參數(shù)組號(hào)的優(yōu)先級(jí)、保留位、數(shù)據(jù)頁(yè)位和PGN。NMEA2000 標(biāo)識(shí)符域和數(shù)據(jù)域與CAN 擴(kuò)展幀格式存在如圖1 所示的對(duì)應(yīng)關(guān)系。圖中包括以下參數(shù):CAN 擴(kuò)展幀格式包括幀起始位(SOF)、替代遠(yuǎn)程請(qǐng)求位(SRR)、識(shí)別符擴(kuò)展位(IDE)、擴(kuò)展標(biāo)識(shí)符、遠(yuǎn)程請(qǐng)求發(fā)送位(RTR)、2 位保留位(R1 和R0)、數(shù)據(jù)長(zhǎng)度(DLC)、數(shù)據(jù)域、循環(huán)冗余校驗(yàn)碼(CRC)域、應(yīng)答域(ACK field)和幀結(jié)束符(EOF)。
將非認(rèn)證設(shè)備接入NMEA2000 網(wǎng)絡(luò),自主研發(fā)的數(shù)據(jù)采集轉(zhuǎn)接板卡就是此設(shè)計(jì)中的橋梁。數(shù)據(jù)采集轉(zhuǎn)接板卡主要負(fù)責(zé)平臺(tái)控制系統(tǒng)數(shù)據(jù)的收集處理及平臺(tái)所載數(shù)據(jù)格式的統(tǒng)一。考慮到外圍設(shè)備的多樣性,數(shù)據(jù)采集轉(zhuǎn)接板卡有4 個(gè)RS232/RS485 串口,2 路CAN 接口和1 個(gè)網(wǎng)絡(luò)接口,并設(shè)計(jì)了SD 卡用于保存關(guān)鍵數(shù)據(jù),通信接口較為豐富。在國(guó)產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread上進(jìn)行軟件開(kāi)發(fā),完成NMEA2000 協(xié)議應(yīng)用擴(kuò)展和優(yōu)化。系統(tǒng)設(shè)計(jì)中可根據(jù)功能需求采用單塊或多塊板卡級(jí)聯(lián)的方式協(xié)同處理數(shù)據(jù)。為保證數(shù)據(jù)采集轉(zhuǎn)換板卡(圖2)電路的穩(wěn)定性和可靠性,多個(gè)對(duì)外接口均采用防浪涌電路設(shè)計(jì),以避免系統(tǒng)遭到過(guò)壓脈沖造成損壞。
圖1 NMEA2000 標(biāo)識(shí)符域與CAN 擴(kuò)展幀的對(duì)應(yīng)關(guān)系Fig. 1 Relationship between NMEA2000 identifier and CAN extension frame
圖2 數(shù)據(jù)采集轉(zhuǎn)接板卡Fig. 2 Adapter card for data acquisition
NMEA2000 設(shè)備分為認(rèn)證和未認(rèn)證2 大類(lèi)。所謂認(rèn)證設(shè)備是指其數(shù)據(jù)格式已在協(xié)議中定義,且設(shè)備已被官方認(rèn)證,可以直接接入NMEA2000網(wǎng)絡(luò)。未認(rèn)證設(shè)備有2 種情況:一種是其數(shù)據(jù)類(lèi)型在NMEA2000 中已定義,即有對(duì)應(yīng)的PGN,但設(shè)備未經(jīng)官方認(rèn)證;另一種是其數(shù)據(jù)在協(xié)議中未被定義,設(shè)備也就不可能被官方認(rèn)證。未認(rèn)證設(shè)備不能直接接入NMEA2000 網(wǎng)絡(luò),需要根據(jù)實(shí)際情況進(jìn)行轉(zhuǎn)接處理方可接入網(wǎng)絡(luò)。
NMEA2000 數(shù)據(jù)格式包含參數(shù)群、數(shù)據(jù)域、數(shù)據(jù)類(lèi)型、優(yōu)先級(jí)等重要參數(shù)。GPS 定位設(shè)備是最常用的裝備之一,NEMA2000 協(xié)議定義了GPS數(shù)據(jù)格式,如表1 所示,表中hex 為十六進(jìn)制。但是并不是所有的GPS 設(shè)備都已得到認(rèn)證,已認(rèn)證過(guò)的設(shè)備可以直接接入NMEA2000 網(wǎng)絡(luò),而大量未被認(rèn)證的設(shè)備就無(wú)法直接接入。
從表1 可見(jiàn),GPS 設(shè)備定義的PGN 為129 025(0x1F801)。NMEA2000 中幀類(lèi)型有遠(yuǎn)程幀和數(shù)據(jù)幀2 類(lèi),其他幀則由CAN 硬件設(shè)置。遠(yuǎn)程幀用于信息請(qǐng)求,數(shù)據(jù)幀用于傳輸數(shù)據(jù)。如圖1 所示,當(dāng)遠(yuǎn)程發(fā)送請(qǐng)求位(RTR)為1 時(shí),代表此幀為遠(yuǎn)程幀,當(dāng)其為0 時(shí),代表此幀為數(shù)據(jù)幀。幀格式分為標(biāo)準(zhǔn)幀和擴(kuò)展幀,NMEA2000 協(xié)議的幀格式均為擴(kuò)展幀。根據(jù)NMEA2000 協(xié)議定義的GPS 設(shè)備的優(yōu)先級(jí)、保留位、數(shù)據(jù)頁(yè)位和PGN 可得其ID為0x09F80100。
表1 NMEA2000 中GPS 數(shù)據(jù)格式Table 1 Data format of GPS in NMEA2000
針對(duì)已定義但未經(jīng)認(rèn)證的設(shè)備,例如GPS 設(shè)備,對(duì)其測(cè)量數(shù)據(jù)進(jìn)行處理得到經(jīng)、緯度等有效數(shù)據(jù)。根據(jù)NMEA2000 協(xié)議,CAN 數(shù)據(jù)域和PGN 有效數(shù)據(jù)呈倒序排列形式,所以將其倒序排列,最后得到符合NMEA2000 協(xié)議的數(shù)據(jù)。
若數(shù)據(jù)類(lèi)型沒(méi)有定義,則其采集設(shè)備也不可能被認(rèn)證,此時(shí)需要根據(jù)NMEA2000 的數(shù)據(jù)幀格式自定義數(shù)據(jù)類(lèi)型和結(jié)構(gòu)。以激光測(cè)距傳感器為例,由于激光測(cè)距傳感器傳輸?shù)臄?shù)據(jù)較少,所以使用單幀傳輸方式即可。
首先,通過(guò)讀取激光測(cè)距傳感器的數(shù)據(jù),識(shí)別傳感數(shù)據(jù)類(lèi)型。然后,根據(jù)自定義NMEA2000 協(xié)議接口配置進(jìn)行排序,同時(shí)對(duì)名稱(chēng)、測(cè)量距離、測(cè)量頻率等屬性予以賦值,按照規(guī)定的順序封裝傳感器數(shù)據(jù)。最后,按NMEA2000 協(xié)議字節(jié)交換表將所得的十六進(jìn)制有效數(shù)據(jù)倒序排列,并完成轉(zhuǎn)換。封裝數(shù)據(jù)分為2 類(lèi):元數(shù)據(jù)和傳感器數(shù)據(jù)。元數(shù)據(jù)即為PGN,代表傳感器的類(lèi)別,傳感器數(shù)據(jù)即為采集的有效數(shù)據(jù)。標(biāo)準(zhǔn)化的數(shù)據(jù)封裝共用統(tǒng)一的數(shù)據(jù)接口,數(shù)據(jù)采集板卡豐富的接口可以滿(mǎn)足各類(lèi)傳感器的需求。表2 為自定義NMEA2000激光測(cè)距設(shè)備協(xié)議。
表2 自定義NMEA2000 激光測(cè)距設(shè)備協(xié)議Table 2 Custom laser ranging protocol of NMEA2000
如表2 所示,自定義激光測(cè)距設(shè)備的PGN 為129 030(0x1F806)。幀類(lèi)型和幀格式分別為數(shù)據(jù)幀和擴(kuò)展幀,29 bit 的ID 標(biāo)識(shí)符為0x09F80600。定義激光測(cè)距設(shè)備每幀數(shù)據(jù)的第1 字節(jié)為序列ID,第2~3 字節(jié)為測(cè)量頻率,第4~5 字節(jié)為與障礙物的距離,第6~8 字節(jié)未用到,默認(rèn)為FF。
針對(duì)未定義且未認(rèn)證的設(shè)備,如激光測(cè)距傳感器,對(duì)其測(cè)量數(shù)據(jù)進(jìn)行處理得到測(cè)量頻率和與障礙物距離等有效數(shù)據(jù)。根據(jù)NMEA2000 協(xié)議,CAN 數(shù)據(jù)域和PGN 有效數(shù)據(jù)呈倒序排列形式,所以將其倒序排列,得到符合NMEA2000 協(xié)議的數(shù)據(jù)。
NMEA2000 在CAN 架構(gòu)上采用短幀結(jié)構(gòu),每幀數(shù)據(jù)域不大于8 字節(jié),因此,它有3 種數(shù)據(jù)傳輸方式:?jiǎn)螏瑐鬏?、ISO 多包傳輸以及快速數(shù)據(jù)包傳輸。當(dāng)數(shù)據(jù)幀不大于8 字節(jié)時(shí),采用單幀傳輸方式。快速數(shù)據(jù)包傳輸方式能夠最大傳輸223 字節(jié)的數(shù)據(jù)并且不需要ISO 11783 規(guī)范中指定的幀間空間,傳輸效率更高。如果設(shè)備需要接收任何超過(guò)223 字節(jié)的數(shù)據(jù),則應(yīng)采用ISO 多包傳輸方式,但數(shù)據(jù)傳輸上限不超過(guò)1 785 字節(jié)[4]。表3 為NMEA2000 的3 種傳輸方式的對(duì)比。
表3 NMEA2000 傳輸方式對(duì)比Table 3 Transmission mode comparison of NMEA2000
當(dāng)NMEA2000 報(bào)文采用ISO 多包傳輸或快速數(shù)據(jù)包傳輸方式時(shí),它將數(shù)據(jù)域的第1 字節(jié)作為報(bào)文的序號(hào),后7 字節(jié)存放所傳輸?shù)臄?shù)據(jù),由接收節(jié)點(diǎn)按照序號(hào)將原來(lái)的數(shù)據(jù)重新組合起來(lái)。盡管節(jié)點(diǎn)能夠根據(jù)序列ID 正確解析報(bào)文,但傳輸效率大大降低,原本8 字節(jié)的數(shù)據(jù)域?qū)嶋H只傳輸了7 字節(jié)的有效數(shù)據(jù)。
本文在NMEA2000 協(xié)議的基礎(chǔ)上,充分利用數(shù)據(jù)域進(jìn)行改進(jìn)。至于序列ID,則可利用NMEA2000未使用的標(biāo)志符域進(jìn)一步優(yōu)化NMEA2000 網(wǎng)絡(luò)。在NMEA2000 報(bào)文中,仲裁域是應(yīng)用層根據(jù)自己的需求定義的。仲裁域的作用有2 個(gè):一是在總線沖突時(shí)對(duì)報(bào)文的優(yōu)先級(jí)進(jìn)行仲裁,二是仲裁域本身也是傳輸數(shù)據(jù)的一種方式。在NMEA2000協(xié)議中,應(yīng)用層定義的PGN 僅占用21 bit,而CAN的擴(kuò)展幀有29 bit。在NMEA2000 所使用的PGN中,由于同一ID 發(fā)送的數(shù)據(jù)不大于1 785 字節(jié),即最多傳輸255 幀數(shù)據(jù)。鑒于此,取NMEA2000數(shù)據(jù)幀的低8 bit 作為多報(bào)文數(shù)據(jù)幀序號(hào),用來(lái)表示發(fā)送報(bào)文每幀數(shù)據(jù)的組合順序,便于NMEA2000 網(wǎng)絡(luò)按照序號(hào)將原來(lái)的數(shù)據(jù)組合成正確的報(bào)文。由此,在發(fā)送多幀的NMEA2000 報(bào)文時(shí),總線在收到節(jié)點(diǎn)數(shù)據(jù)后能根據(jù)每幀數(shù)據(jù)的ID 和序號(hào)進(jìn)行整合,形成一條新的NMEA2000報(bào)文,保證數(shù)據(jù)的完整性和正確性,提高了NMEA2000 網(wǎng)絡(luò)的傳輸效率。
在不改變基本CAN 幀前提下,采用NMEA2000的擴(kuò)展幀格式,充分利用NMEA2000 未定義的標(biāo)識(shí)符域,重新定義擴(kuò)展幀的ID 字段,保證了和傳統(tǒng)CAN 系統(tǒng)的良好兼容性。新NMEA2000 標(biāo)識(shí)符域如表4 所示。
對(duì)比圖1 和表4,將NMEA2000 標(biāo)識(shí)符低8 bit 用于多報(bào)文數(shù)據(jù)序號(hào)位,將原先傳輸序號(hào)的字節(jié)位置用來(lái)傳輸數(shù)據(jù),原本傳輸7 個(gè)有效字節(jié)的數(shù)據(jù)域現(xiàn)在傳輸了8 個(gè)有效字節(jié),提升了傳輸效率。當(dāng)傳輸總字節(jié)數(shù)不同時(shí),傳輸效率的提升程度也不同。當(dāng)傳輸?shù)淖止?jié)數(shù)小于8 字節(jié),采用單幀傳輸方式時(shí),傳輸效率不會(huì)得到提升。當(dāng)傳輸字節(jié)數(shù)不小于8 字節(jié),且采用改進(jìn)后的數(shù)據(jù)幀跨幀傳輸時(shí),傳輸效率會(huì)得到提升。部分傳輸效率的提升情況如表5 所示,傳輸效率提升了0%~50%不等,傳輸效率提升程度受協(xié)議包總字節(jié)數(shù)的影響。由于NMEA2000 協(xié)議規(guī)定,最大傳輸字節(jié)數(shù)不超過(guò)1 785 字節(jié),在傳輸字節(jié)數(shù)等概率情況下,經(jīng)計(jì)算,最終傳輸速率綜合提升約12.23%。而一般傳輸?shù)臄?shù)據(jù)域字節(jié)數(shù)不超過(guò)64 字節(jié),等概率情況下傳輸速率提升約9.18%。
表4 新NMEA2000 標(biāo)識(shí)符域Table 4 New identifier fields of NMEA2000
表5 部分傳輸效率提升程度對(duì)比Table 5 Partial comparison of transmission efficiency improvement
NMEA2000 協(xié)議優(yōu)先級(jí)占了標(biāo)識(shí)符域的前3 bit,緊接著第4 bit 則是保留位0。根據(jù)NMEA2000協(xié)議的規(guī)定,保留位都為0。由于保留位相同,在總線仲裁時(shí),會(huì)對(duì)保留位后的數(shù)據(jù)頁(yè)位進(jìn)行仲裁,保留位失去了意義。所以根據(jù)NMEA2000 協(xié)議的特殊性,將保留位用于優(yōu)先級(jí)位的延伸,優(yōu)先級(jí)從原來(lái)的3 bit 擴(kuò)展至4 bit。由于優(yōu)先級(jí)位擴(kuò)充使優(yōu)先級(jí)范圍增大了1 倍,所以可以在NMEA2000 協(xié)議的基礎(chǔ)上多定義8 個(gè)優(yōu)先級(jí),減少了當(dāng)優(yōu)先級(jí)相同時(shí)對(duì)總線的仲裁次數(shù)。改進(jìn)后的NMEA2000 標(biāo)識(shí)符域如表6 所示。
表6 改進(jìn)后的NMEA2000 標(biāo)識(shí)符域Table 6 Improved identifier fields of NMEA2000
針對(duì)不同優(yōu)先級(jí)的節(jié)點(diǎn),當(dāng)在同一時(shí)刻向總線上發(fā)送數(shù)據(jù)導(dǎo)致優(yōu)先級(jí)低的節(jié)點(diǎn)仲裁失敗時(shí),則將落選節(jié)點(diǎn)提升1 個(gè)優(yōu)先級(jí);若其優(yōu)先級(jí)提升后與原有優(yōu)先級(jí)沖突,則優(yōu)先發(fā)送落選節(jié)點(diǎn)數(shù)據(jù)。針對(duì)同一優(yōu)先級(jí)的節(jié)點(diǎn),由于前4 bit 的優(yōu)先級(jí)位都相同,根據(jù)CAN 總線規(guī)定,將對(duì)優(yōu)先級(jí)域后面的標(biāo)識(shí)符域繼續(xù)進(jìn)行仲裁。節(jié)點(diǎn)每仲裁失敗1 次便提升1 個(gè)優(yōu)先級(jí),直至其被發(fā)送到總線上。動(dòng)態(tài)優(yōu)先級(jí)調(diào)整流程如圖3 所示。
圖3 動(dòng)態(tài)優(yōu)先級(jí)調(diào)整流程圖Fig. 3 Flowchart of dynamic priority adjustment
同時(shí),針對(duì)多幀發(fā)送的NMEA2000 協(xié)議的報(bào)文,第1 幀數(shù)據(jù)發(fā)出后,后面同一參數(shù)的報(bào)文無(wú)論自身優(yōu)先級(jí)多少,都應(yīng)立即將優(yōu)先級(jí)調(diào)度至最高優(yōu)先級(jí),保證此節(jié)點(diǎn)報(bào)文的實(shí)時(shí)性與完整性。因?yàn)镹MEA2000 協(xié)議優(yōu)先級(jí)是固定的,所以每幀報(bào)文的ID 也是固定的。同樣,本文提出的動(dòng)態(tài)優(yōu)先級(jí)策略也將改變NMEA2000 協(xié)議報(bào)文的ID,所以在進(jìn)行動(dòng)態(tài)優(yōu)先級(jí)調(diào)整后需要將優(yōu)先級(jí)復(fù)原,以保證NMEA2000 協(xié)議報(bào)文ID 的一致性。多幀傳輸發(fā)送時(shí)優(yōu)先級(jí)調(diào)整流程如圖4 所示。
圖4 多幀發(fā)送優(yōu)先級(jí)調(diào)整流程圖Fig. 4 Flowchart of multi-frame transmission priority adjustment
由于NMEA2000 網(wǎng)絡(luò)中對(duì)數(shù)據(jù)傳輸?shù)膶?shí)時(shí)性和可靠性要求十分高,所以在NMEA2000 數(shù)據(jù)采集轉(zhuǎn)換板卡上采用RT-Thread 嵌入式實(shí)時(shí)操作系統(tǒng)。根據(jù)實(shí)現(xiàn)各設(shè)備N(xiāo)MEA2000 協(xié)議接口的統(tǒng)一性和提高傳輸效率及實(shí)時(shí)性等方面建立4 個(gè)線程,總體架構(gòu)如圖5 所示。主線程主要初始化各優(yōu)先級(jí)和各互斥量并創(chuàng)建所需線程,如圖5(a)所示。線程1 負(fù)責(zé)接收并提取不同設(shè)備的信息,如圖5(b)所示;線程2 根據(jù)接收到的有效信息在判斷是否為NMEA2000 認(rèn)證設(shè)備數(shù)據(jù),并對(duì)數(shù)據(jù)進(jìn)行分類(lèi),將其轉(zhuǎn)換成相應(yīng)的NMEA2000 數(shù)據(jù)格式并借助NMEA2000 未使用的標(biāo)識(shí)符域增加數(shù)據(jù)域傳輸?shù)挠行?shù)據(jù),提高傳輸效率,如圖5(c)所示;線程3 中節(jié)點(diǎn)向NMEA2000 網(wǎng)絡(luò)發(fā)送數(shù)據(jù),根據(jù)CAN 發(fā)送寄存器(CAN_TSTR)仲裁失敗標(biāo)志位是否置1,判斷節(jié)點(diǎn)是否仲裁失敗,如圖5(d)所示;線程4 提高仲裁失敗節(jié)點(diǎn)的優(yōu)先級(jí),進(jìn)一步優(yōu)化多幀發(fā)送的數(shù)據(jù),使其能夠快速將數(shù)據(jù)發(fā)送到總線上,提高實(shí)時(shí)性,如圖5(e)所示。
基于自主可控平臺(tái)研制的NMEA2000 數(shù)據(jù)采集處理傳輸板卡采用的主控芯片是基于Cortex-M3 內(nèi)核的國(guó)產(chǎn)芯片GD32F207,有4 個(gè)通用同步/異步串行接收/發(fā)送器(USART)和2 個(gè)通用異步收發(fā)傳輸器(UART),2 路CAN 控制器,1 個(gè)網(wǎng)絡(luò)接口,通信接口較為豐富。在國(guó)產(chǎn)嵌入式實(shí)時(shí)操作系統(tǒng)RT-Thread 上進(jìn)行軟件開(kāi)發(fā),完成了NMEA2000 應(yīng)用擴(kuò)展和優(yōu)化。
中海達(dá)全球?qū)Ш叫l(wèi)星系統(tǒng)(GNSS)接收機(jī)的數(shù)據(jù)已定義但設(shè)備未認(rèn)證,其原始數(shù)據(jù)為:$GPRMC,091 036.40,A,3 211.917 247 9,N,11 927.634 625 7,E,0.035,189.7,250 319,0.0,E,A*3C。上述數(shù)據(jù)需進(jìn)行處理后方能接入NMEA2000 網(wǎng)絡(luò)。以GPS緯度為例,首先將緯度數(shù)據(jù)32 119 172 479 N 提取出來(lái),得到緯度為32.198 620 7°。由于緯度數(shù)據(jù)是一個(gè)小數(shù),不滿(mǎn)足NMEA2000 協(xié)議要求,根據(jù)NMEA2000 協(xié) 議,將 緯 度×107,得 到 整 形 數(shù) 據(jù)321 986 207°,然后將其轉(zhuǎn)換為4 Bytes 的十六進(jìn)制數(shù)13311E9F。同理,按照協(xié)議規(guī)定的順序?qū)?jīng)度、時(shí)間、高度等數(shù)據(jù)進(jìn)行封裝,完成轉(zhuǎn)換。
圖6 和圖7 分別為GNSS 接收機(jī)采集的原始數(shù)據(jù)及改進(jìn)后的數(shù)據(jù)。由圖可見(jiàn),改進(jìn)后的多幀報(bào)文將優(yōu)先級(jí)位置于NMEA2000 ID 空閑位,每幀的傳輸數(shù)據(jù)量由7 字節(jié)擴(kuò)大至8 字節(jié)。此外,本次傳輸?shù)挠行ё止?jié)數(shù)為44 字節(jié),數(shù)據(jù)改進(jìn)前,由于NMEA2000協(xié)議的規(guī)定,每幀的第1 字節(jié)用于序號(hào)定義,所以共分為7 幀發(fā)送,傳輸?shù)目傋止?jié)數(shù)為56 字節(jié),傳輸效率約為78.57%。數(shù)據(jù)改進(jìn)后,傳輸?shù)挠行ё止?jié)數(shù)不變,由于序號(hào)位的轉(zhuǎn)移,原本需要7 幀發(fā)送的數(shù)據(jù)量?jī)H用了6 幀便可以完成發(fā)送,傳輸?shù)目傋止?jié)數(shù)為48 字節(jié),傳輸效率約為91.67%,提升約13.1%。而且將原有的GNSS 接收機(jī)的數(shù)據(jù)格式成功轉(zhuǎn)換為NMEA2000 數(shù)據(jù)格式,使其兼容NMEA2000網(wǎng)絡(luò)。
針對(duì)NMEA2000 未定義的數(shù)據(jù)類(lèi)型,也可以通過(guò)基于自主可控平臺(tái)研制的數(shù)據(jù)板卡接入NMEA2000 網(wǎng)絡(luò),圖8 為自定義激光測(cè)距設(shè)備協(xié)議采集到的數(shù)據(jù)。由圖可見(jiàn),改進(jìn)后的激光測(cè)距傳感器數(shù)據(jù)完全符合自定義的NMEA2000 協(xié)議,同樣兼容NMEA2000 網(wǎng)絡(luò)。
GD32F207 自帶CAN 控制器,可以通過(guò)讀取CAN 發(fā)送狀態(tài)寄存器(CAN_TSTR)中的仲裁失敗標(biāo)志位,來(lái)觀察發(fā)送的 NMEA2000 數(shù)據(jù)幀是否仲裁失??;當(dāng)發(fā)生仲裁失敗時(shí),該位會(huì)被置1。GD32F207 有2 路CAN,設(shè)置CAN 分別向總線發(fā)送優(yōu)先級(jí)不同的2 幀NMEA2000 數(shù)據(jù)幀。
為驗(yàn)證本文優(yōu)先級(jí)動(dòng)態(tài)調(diào)整方法的有效性和可靠性,在1 條總線上掛載了10 個(gè)節(jié)點(diǎn),共有10 幀優(yōu)先級(jí)不同的NMEA2000 數(shù)據(jù)幀同時(shí)往總線發(fā)送。由于CAN 總線傳輸速率和傳輸距離相關(guān)性較大,本文將傳輸距離設(shè)為1 m 并不再改變傳輸距離。NMEA2000 網(wǎng)絡(luò)是基于CAN 總線的架構(gòu),而CAN 總線是一種基于優(yōu)先級(jí)的串行通信網(wǎng)絡(luò),因此采用載波監(jiān)聽(tīng)多路訪問(wèn)機(jī)制。圖9 和圖10 分別為NMEA2000 網(wǎng)絡(luò)實(shí)驗(yàn)?zāi)P秃偷玫降木W(wǎng)絡(luò)數(shù)據(jù)。由圖10 可見(jiàn),基于NMEA2000 協(xié)議,在多節(jié)點(diǎn)情況下可同時(shí)向總線發(fā)送數(shù)據(jù),且未產(chǎn)生丟包現(xiàn)象,總線數(shù)據(jù)穩(wěn)定可靠。本方法可滿(mǎn)足NMEA2000 多節(jié)點(diǎn)沖突的仲裁情況。
圖5 RT-Thread 操作系統(tǒng)各線程流程圖Fig. 5 Flowcharts of each thread of RT-Thread operation system
圖6 GNSS 接收機(jī)的原始數(shù)據(jù)Fig. 6 Original data of GNSS receiver
圖7 GNSS 接收機(jī)改進(jìn)后的數(shù)據(jù)Fig. 7 Improved data of GNSS receiver
圖8 改進(jìn)后的激光測(cè)距傳感器數(shù)據(jù)Fig. 8 Improved laser ranging sensor data
圖9 NMEA2000 實(shí)驗(yàn)?zāi)P虵ig. 9 The experimental model of NMEA2000
圖10 NMEA2000 網(wǎng)絡(luò)信息Fig. 10 The network information of NMEA2000
基于NMEA2000 協(xié)議,將船上各種設(shè)備的數(shù)據(jù)接口標(biāo)準(zhǔn)化,統(tǒng)一了所有設(shè)備的數(shù)據(jù)格式,并針對(duì)NMEA2000 協(xié)議,采用擴(kuò)充N(xiāo)MEA2000 數(shù)據(jù)域的方法提升總線數(shù)據(jù)傳輸效率。同時(shí),采用動(dòng)態(tài)優(yōu)先級(jí)策略并對(duì)其進(jìn)行實(shí)驗(yàn)分析和驗(yàn)證,結(jié)果表明,采用動(dòng)態(tài)優(yōu)先級(jí)策略可以改善NMEA2000網(wǎng)絡(luò)的實(shí)時(shí)性,具有一定的應(yīng)用價(jià)值。