(上海海洋大學(xué)信息學(xué)院 農(nóng)業(yè)部漁業(yè)信息重點(diǎn)實(shí)驗(yàn)室,上海 201306)
我國海域遼闊,海況復(fù)雜,船只運(yùn)行實(shí)時(shí)監(jiān)控、通信導(dǎo)航尚存在諸多亟待解決的問題。一方面,負(fù)責(zé)感知和廣播船舶航行信息的船載儀器往往受工作頻段與天線高度等因素的限制[2],通信距離受限,使得監(jiān)控存在盲區(qū),不能很好滿足岸基調(diào)度中心對(duì)遠(yuǎn)洋船舶進(jìn)行實(shí)時(shí)監(jiān)控的需求;另一方面,船載傳感器與智能設(shè)備種類增加迅速,但設(shè)備之間缺乏有效互聯(lián)與融合;另外,諸如AIS等智能設(shè)備的信息采集率較高,給網(wǎng)關(guān)帶來處理壓力[1]。
北斗衛(wèi)星導(dǎo)航系統(tǒng)[3](BeiDou Navigation Satellite System,BDS)作為我國自主研制的全球衛(wèi)星定位與通信系統(tǒng),通常是近海無公網(wǎng)覆蓋海域?qū)崿F(xiàn)作業(yè)時(shí)船-船、船-岸之間通信的唯一方式,但由于缺少便利的互聯(lián)互通設(shè)備,船載傳感器與智能設(shè)備難以有效使用北斗通信帶寬。
在船聯(lián)網(wǎng)中實(shí)現(xiàn)人、船、岸信息互通、互聯(lián)成為物理信息融合及保障船舶安全的一種必然趨勢(shì),亟需能夠?qū)Χ囝悓?shí)時(shí)數(shù)據(jù)進(jìn)行匯聚、融合與轉(zhuǎn)發(fā)的高速智能設(shè)備,方便作業(yè)人員對(duì)各類數(shù)據(jù)進(jìn)行監(jiān)控。
傳統(tǒng)技術(shù)多使用單片機(jī)完成船載設(shè)備的信息處理,如文獻(xiàn)[4,5]中提出采用單片機(jī)實(shí)現(xiàn)北斗衛(wèi)星轉(zhuǎn)發(fā)船載AIS等信息,然而單個(gè)單片機(jī)的串行通信接口數(shù)量有限,且面對(duì)高頻率大數(shù)量的信息傳輸時(shí)往往處理能力表現(xiàn)不佳,隨著船載傳感器逐漸增加、通信數(shù)據(jù)量不斷增大,單片機(jī)難以實(shí)現(xiàn)高效的數(shù)據(jù)處理,不能很好保證系統(tǒng)運(yùn)行的可靠性與穩(wěn)定性。
鑒于此,本文充分利用FPGA的靈活性與可擴(kuò)展性,提出基于MCU軟核的船聯(lián)網(wǎng)多通道北斗通信網(wǎng)關(guān)。論文通過即時(shí)中斷可擴(kuò)展技術(shù)擴(kuò)展原MC8051的多串口機(jī)制,實(shí)時(shí)聯(lián)接北斗、上位機(jī)、船載數(shù)據(jù)設(shè)備及傳感器,完成通信數(shù)據(jù)采集;基于FPGA MCU軟核完成數(shù)據(jù)融合轉(zhuǎn)發(fā)處理,使用數(shù)據(jù)融合控制子模塊對(duì)人、船、岸之間的傳輸數(shù)據(jù)進(jìn)行解析和分發(fā)。
基于MCU軟核的船聯(lián)網(wǎng)多通道北斗網(wǎng)關(guān)系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)架構(gòu)
論文提出一種即時(shí)中斷多串口機(jī)制擴(kuò)展來擴(kuò)展Oregano Systems公司的MC8051 MCU軟核,并基于此建立人船岸之間的信息通道,主要包括:1)數(shù)據(jù)匯集層和2)數(shù)據(jù)融合與轉(zhuǎn)發(fā)層兩個(gè)層次:
1)數(shù)據(jù)匯集層在傳統(tǒng)IO基礎(chǔ)上,充分利用FPGA的硬件可擴(kuò)展性,采用本文提出的即時(shí)中斷多串口機(jī)制,通過支持即時(shí)中斷的多串行通信接口完成繁雜智能數(shù)據(jù)設(shè)備的連接。數(shù)據(jù)匯集部分包含(1)船載設(shè)備接口;(2)人機(jī)接口;(3)遠(yuǎn)程通信接口三部分。
(1)船載設(shè)備接口除通過擴(kuò)展后的MCU軟核I/O口連接傳統(tǒng)船載傳感器外,還連接AIS收發(fā)模塊、柴油機(jī)監(jiān)控儀等船載儀器。
(2)人機(jī)接口負(fù)責(zé)與上位機(jī)通信,作業(yè)人員通過上位機(jī)對(duì)船載傳感器、AIS及柴油機(jī)監(jiān)控儀等船舶航行數(shù)據(jù)進(jìn)行集中監(jiān)控、并通過遠(yuǎn)程通信接口及北斗通信終端與岸基調(diào)度中心交互。
(3)遠(yuǎn)程通信接口通過北斗衛(wèi)星通信終端完成必要的船舶航行數(shù)據(jù)、上位機(jī)作業(yè)信息的遠(yuǎn)程傳輸,同時(shí)下發(fā)岸基調(diào)度中心相關(guān)作業(yè)命令和船舶航行信息查詢命令,完成船-船、船-岸遠(yuǎn)程信息交互。
2)數(shù)據(jù)處理與轉(zhuǎn)發(fā)層基于MCU軟核,通過在軟核上運(yùn)行用戶邏輯完成數(shù)據(jù)的處理與分發(fā)控制,相較與傳統(tǒng)網(wǎng)關(guān),可充分利用軟核的靈活性。
數(shù)據(jù)處理與轉(zhuǎn)發(fā)層主要包括:(1)數(shù)據(jù)采集前端;(2)數(shù)據(jù)處理子模塊;(3)數(shù)據(jù)融合控制子模塊三個(gè)單元。
(1)數(shù)據(jù)采集前端通過船載設(shè)備接口對(duì)船載儀器和船載傳感器進(jìn)行數(shù)據(jù)的實(shí)時(shí)采集,并發(fā)送至數(shù)據(jù)處理子模塊進(jìn)行數(shù)據(jù)預(yù)處理,同時(shí)接收、轉(zhuǎn)發(fā)來自上位機(jī)和北斗終端的信息查詢命令。
(2)數(shù)據(jù)處理子模塊對(duì)采集前端數(shù)據(jù)進(jìn)行預(yù)處理,去除冗余數(shù)據(jù)。
(3)數(shù)據(jù)融合控制子模塊主要對(duì)數(shù)據(jù)采集前端、人機(jī)接口和遠(yuǎn)程通信接口的通信數(shù)據(jù)進(jìn)行解析、數(shù)據(jù)融合,完成數(shù)據(jù)融合與分發(fā)控制。
所提網(wǎng)關(guān)模型數(shù)據(jù)匯集部分主要完成與人船岸的直接交互,為保證交互的實(shí)時(shí)性,本文在MC8051 IP核基礎(chǔ)上提出即時(shí)中斷多串口機(jī)制。雖然MC8051 IP核支持同時(shí)擴(kuò)展256個(gè)串口設(shè)備[6],但如圖2所示,MC8051MCU軟核設(shè)計(jì)添加地址為0x8E的SFR--定時(shí)器/計(jì)數(shù)器選擇寄存器TSEL對(duì)TCON進(jìn)行參數(shù)選擇控制,同時(shí)添加了地址為0x9A的SFR--串口單元選擇寄存器SSEL對(duì)擴(kuò)展的串口單元進(jìn)行控制。SSEL寄存器中每個(gè)值對(duì)應(yīng)一個(gè)已擴(kuò)展串口,中斷信號(hào)RI和TI根據(jù)當(dāng)前SSEL的值連接到相應(yīng)串口的中斷信號(hào)上,且每次只能與一個(gè)串口的中斷信號(hào)相連,即只有當(dāng)前SSEL選擇的串口才能觸發(fā)中斷。
因此,MC8051同時(shí)只能有一個(gè)串口可以觸發(fā)串口中斷,當(dāng)使用多個(gè)串口時(shí),需要通過遍歷SSEL特殊功能寄存器的值來選擇不同的串口,才能檢測(cè)到是否有串口發(fā)生中斷,從而進(jìn)入中斷處理程序。使用這種輪詢方式監(jiān)測(cè)多個(gè)串口的數(shù)據(jù)傳輸,往往不能及時(shí)獲取發(fā)生中斷的串口信息,容易造成數(shù)據(jù)包丟失,通信效率低。
船聯(lián)網(wǎng)中通信設(shè)備較多,當(dāng)擴(kuò)展多個(gè)串口進(jìn)行通信時(shí),需要不斷變換SSEL寄存器中的值以選擇不同串口,才能監(jiān)測(cè)到該串口是否觸發(fā)中斷,這種輪詢查找中斷的方式不但增加了MCU軟核的負(fù)擔(dān),還容易使船聯(lián)網(wǎng)多個(gè)設(shè)備之間通信數(shù)據(jù)的產(chǎn)生丟包問題。
為解決上述問題,本文提出即時(shí)中斷多串口機(jī)制,如圖3所示。
圖2 MC8051 MCU軟核串口擴(kuò)展與控制結(jié)構(gòu)圖
圖3 即時(shí)中斷多串口機(jī)制
如圖3所示,為使所有已擴(kuò)展串口都能即時(shí)觸發(fā)中斷,改變中斷信號(hào)RI和TI與已擴(kuò)展串口中斷信號(hào)的連接方式,擺脫SSEL寄存器對(duì)多串口觸發(fā)中斷的限制,采用邏輯或的方式分別將已擴(kuò)展串口的中斷信號(hào)連接到中斷信號(hào)RI和TI上,采用這種方法,當(dāng)已擴(kuò)展串口中有任意一個(gè)或多個(gè)串口接收到數(shù)據(jù),都會(huì)即時(shí)觸發(fā)串口中斷。同時(shí),為能獲取發(fā)生串口中斷的串口號(hào),本文提出擴(kuò)展設(shè)計(jì)用于保存串口單元接收中斷標(biāo)志位的SFR組—RI_flag(0…31),將每8個(gè)串口單元的接收中斷標(biāo)志位存放至一個(gè)RI_flag特殊功能寄存器中,如圖3所示,當(dāng)檢測(cè)到有串口中斷發(fā)生時(shí),系統(tǒng)可在中斷程序中通過帶符號(hào)位的循環(huán)移位操作查詢相應(yīng)RI_flag特殊功能寄存器中的值,確定觸發(fā)中斷的相應(yīng)串口。
以擴(kuò)展8個(gè)串口為例,當(dāng)某個(gè)串口中斷觸發(fā)時(shí),在中斷程序中若檢測(cè)到特殊功能寄存器Ri_flag(0)的值為0x04則表示第三個(gè)串口(從第0個(gè)串口開始計(jì)數(shù))發(fā)生了中斷,然后系統(tǒng)就可以進(jìn)入到相應(yīng)子程序中對(duì)不同串口數(shù)據(jù)分別進(jìn)行處理。RI_flag特殊功能寄存器可根據(jù)擴(kuò)展串口單元的情況進(jìn)行選擇用戶可用的SFR,如地址為0x9B、0xC0等。
即時(shí)中斷多串口機(jī)制使MCU軟核擴(kuò)展多個(gè)串口時(shí)可以即時(shí)觸發(fā)中斷,解決了輪詢方式監(jiān)測(cè)中斷產(chǎn)生數(shù)據(jù)丟失、效率低的問題,并可通過查詢特殊功能寄存器Ri_flag值確定觸發(fā)中斷的串口號(hào),保證了船聯(lián)網(wǎng)中多設(shè)備的接入和數(shù)據(jù)的及時(shí)獲取。
數(shù)據(jù)處理與轉(zhuǎn)發(fā)部分由基于MC8051用戶邏輯來實(shí)現(xiàn),對(duì)用戶而言有很大的靈活性。另外,MCU軟核時(shí)鐘頻率可以根據(jù)應(yīng)用需求靈活性改變,船聯(lián)網(wǎng)中數(shù)據(jù)采集傳輸頻繁,提高時(shí)鐘頻率有利于數(shù)據(jù)傳輸吞吐率的提高。
傳統(tǒng)單片機(jī)在進(jìn)行數(shù)據(jù)傳輸時(shí),時(shí)鐘頻率多采用11.0592MHz,為了提高數(shù)據(jù)吞吐率,將MCU軟核的時(shí)鐘頻率根據(jù)單片機(jī)晶振頻率按比例提高,以精準(zhǔn)填充TH1和TL1初始值,避免造成數(shù)據(jù)傳輸誤差。以串口通信方式1(10位異步收發(fā))、定時(shí)器1工作方式2產(chǎn)生波特率為例,其波特率計(jì)算公式為:
由波特率計(jì)算公式可以得出按比例提高時(shí)鐘頻率后TH1和TL1初始值填充公式:
其中,n為時(shí)鐘頻率提高的倍數(shù)。
按比例提高時(shí)鐘頻率,保證了數(shù)據(jù)的穩(wěn)定傳輸,在擴(kuò)展多個(gè)串口傳輸時(shí),能夠有效增強(qiáng)網(wǎng)關(guān)對(duì)信息的處理速率,提高數(shù)據(jù)傳輸?shù)耐掏侣省?/p>
數(shù)據(jù)處理與轉(zhuǎn)發(fā)部分主要包括數(shù)據(jù)采集前端、數(shù)據(jù)處理子模塊和數(shù)據(jù)融合控制子模塊,其結(jié)構(gòu)如圖4所示。
圖4 數(shù)據(jù)處理與轉(zhuǎn)發(fā)結(jié)構(gòu)圖
數(shù)據(jù)采集前端完成對(duì)船載儀器和船載傳感器的數(shù)據(jù)采集,包括定時(shí)周期采集,及根據(jù)上位機(jī)和岸基調(diào)度中心的信息查詢命令采集。
數(shù)據(jù)處理子模塊負(fù)責(zé)對(duì)數(shù)據(jù)采集前端數(shù)據(jù)進(jìn)行預(yù)處理,對(duì)上位機(jī)和岸基調(diào)度中心的信息查詢命令的解析處理,并發(fā)送至數(shù)據(jù)采集前端進(jìn)行信息的查詢。
數(shù)據(jù)融合控制子模塊對(duì)數(shù)據(jù)采集前端、人機(jī)接口和遠(yuǎn)程通信接口的數(shù)據(jù)進(jìn)行解析控制,使基于MCU軟核的多通道北斗通信網(wǎng)關(guān)能夠有序地傳輸數(shù)據(jù)。
由于北斗通信終端通常是船聯(lián)網(wǎng)與外部的唯一通信接口[7],通過數(shù)據(jù)處理子模塊融合傳輸數(shù)據(jù),去除其中的冗余部分,可以提高北斗通信終端數(shù)據(jù)傳輸效率;同時(shí)由于數(shù)據(jù)采集前端采集到船舶感知數(shù)據(jù)是保障船舶安全航行的重要依據(jù),數(shù)據(jù)融合控制子模塊僅對(duì)該端口發(fā)出的數(shù)據(jù)依據(jù)相應(yīng)報(bào)文格式進(jìn)行封裝,同時(shí)按需發(fā)送至人機(jī)接口和遠(yuǎn)程通信接口。數(shù)據(jù)融合控制子模塊對(duì)人機(jī)接口和遠(yuǎn)程通信接口數(shù)據(jù)解析分發(fā)的狀態(tài)轉(zhuǎn)移過程如圖5所示。
如圖5所示,數(shù)據(jù)融合控制子模塊起始狀態(tài)為監(jiān)聽狀態(tài),收到人機(jī)接口或遠(yuǎn)程通信接口發(fā)送來的數(shù)據(jù)后,進(jìn)入到數(shù)據(jù)解析狀態(tài),對(duì)接收到的數(shù)據(jù)進(jìn)行解析,根據(jù)解析結(jié)果對(duì)數(shù)據(jù)進(jìn)行匯總與分發(fā)。以收到人機(jī)接口數(shù)據(jù)為例,若解析得出是船舶作業(yè)人員的相關(guān)作業(yè)信息,則將數(shù)據(jù)發(fā)送至遠(yuǎn)程通信接口,利用北斗通信終端把數(shù)據(jù)傳回岸基調(diào)度中心;若解析結(jié)果是感知信息查詢命令,則將數(shù)據(jù)發(fā)送至數(shù)據(jù)采集前端完成相應(yīng)數(shù)據(jù)的采集。同時(shí)數(shù)據(jù)融合控制子模塊會(huì)對(duì)傳輸數(shù)據(jù)的各個(gè)位進(jìn)行檢測(cè),待檢測(cè)到傳輸數(shù)據(jù)的結(jié)束符,數(shù)據(jù)融合控制子模塊將完成該條數(shù)據(jù)的發(fā)送,再次進(jìn)入到數(shù)據(jù)的監(jiān)聽狀態(tài),等待下條數(shù)據(jù)的傳輸。
圖5 數(shù)據(jù)融合控制狀態(tài)轉(zhuǎn)移圖
為對(duì)所提設(shè)計(jì)方案進(jìn)行驗(yàn)證及實(shí)現(xiàn),以現(xiàn)場(chǎng)可編程門陣列(Field Programmable Gate Array,F(xiàn)PGA)作為設(shè)計(jì)載體[8],F(xiàn)PGA選用Altera公司的Cyclone ⅣEP4CE6E22C8N,板載時(shí)鐘50MHz,為所提多通道北斗通信網(wǎng)關(guān)的實(shí)現(xiàn)提供了充足的可用資源,也為提高系統(tǒng)的集成度、保證系統(tǒng)可靠性、降低系統(tǒng)功耗提供了有效載體。
設(shè)計(jì)實(shí)驗(yàn)比對(duì)中斷機(jī)制優(yōu)化前后數(shù)據(jù)傳輸效率。MCU軟核擴(kuò)展4個(gè)串口,時(shí)鐘頻率設(shè)定為11.0592MHz,使用串口工作方式1,波特率采用9600bps,模擬船載AIS定時(shí)給一個(gè)串口發(fā)送本船AIS報(bào)文數(shù)據(jù)包,該包由56個(gè)字符組成,MCU軟核收到數(shù)據(jù)包后將該包轉(zhuǎn)發(fā)給上位機(jī),數(shù)據(jù)發(fā)送時(shí)間間隔分別取100ms、500ms和1000ms,計(jì)1分鐘數(shù)據(jù)包的傳輸結(jié)果如表1所示。
表1 不同中斷機(jī)制數(shù)據(jù)傳輸結(jié)果
由實(shí)驗(yàn)結(jié)果可知,由于需要不斷遍歷SSEL寄存器的值來查詢串口中斷,原輪詢方式傳輸數(shù)據(jù)易產(chǎn)生丟包現(xiàn)象,丟包率隨著傳輸頻率提高而增大,且隨著串口數(shù)量的增多,數(shù)據(jù)丟包情況會(huì)更加明顯,嚴(yán)重影響船舶航行數(shù)據(jù)的實(shí)時(shí)傳輸。本文提出的即時(shí)中斷多串口機(jī)制有效解決了MC8051 IP核輪詢方式監(jiān)測(cè)多串口中斷效率低、丟包率高的問題?;诩磿r(shí)中斷機(jī)制的多串口網(wǎng)關(guān)設(shè)備在接入多個(gè)通信終端時(shí),可以實(shí)時(shí)監(jiān)測(cè)串口是否有數(shù)據(jù)傳輸,提高了數(shù)據(jù)傳輸?shù)臏?zhǔn)確性。
由于所采用的FPGA 開發(fā)板最高時(shí)鐘頻率為50 MHz,按比例提高時(shí)鐘頻率最大可取到44.2368MHz。MCU軟核擴(kuò)展4個(gè)串口,根據(jù)式(2)分別取n=1~4,選擇串口工作方式1,波特率為9600bps,模擬船載AIS每1000ms同時(shí)向4個(gè)串口發(fā)送本船AIS報(bào)文數(shù)據(jù)包,該數(shù)據(jù)包共56個(gè)字符,MCU軟核收到數(shù)據(jù)包后轉(zhuǎn)發(fā)給上位機(jī),計(jì)1分鐘數(shù)據(jù)包傳輸結(jié)果進(jìn)行對(duì)比試驗(yàn),實(shí)驗(yàn)結(jié)果如表2所示。
表2 網(wǎng)關(guān)轉(zhuǎn)發(fā)吞吐率實(shí)驗(yàn)結(jié)果
由實(shí)驗(yàn)結(jié)果可知,擴(kuò)展多個(gè)串口時(shí),當(dāng)有較多數(shù)據(jù)同時(shí)傳輸,時(shí)鐘頻率會(huì)影響數(shù)據(jù)的丟包情況,時(shí)鐘頻率越高,丟包率越低,網(wǎng)關(guān)吞吐率越高。
經(jīng)現(xiàn)場(chǎng)測(cè)試表明所提多通道網(wǎng)關(guān)能有效采集船舶航行相關(guān)數(shù)據(jù),實(shí)現(xiàn)人船岸數(shù)據(jù)的實(shí)時(shí)處理,完成多數(shù)據(jù)端通信數(shù)據(jù)的分發(fā)控制,多通道北斗通信網(wǎng)關(guān)在船聯(lián)網(wǎng)中的實(shí)際應(yīng)用如圖6所示。
本文利用FPGA的靈活性和可擴(kuò)展性,提出基于MCU軟核的船聯(lián)網(wǎng)多通道北斗通信網(wǎng)關(guān),實(shí)現(xiàn)了人船岸之間的實(shí)時(shí)數(shù)據(jù)傳輸;通過擴(kuò)展多個(gè)串行通信接口,實(shí)現(xiàn)人船岸中多個(gè)設(shè)備的接入;提出即時(shí)中斷多串口機(jī)制,采用并發(fā)中斷的方式解決多串口數(shù)據(jù)傳輸負(fù)載大時(shí)的丟包問題;按比例增大系統(tǒng)時(shí)鐘頻率,提高了數(shù)據(jù)傳輸?shù)耐掏侣?;設(shè)計(jì)數(shù)據(jù)采集前端和數(shù)據(jù)處理子模塊負(fù)責(zé)多個(gè)船載設(shè)備數(shù)據(jù)的采集、融合處理,去除冗余數(shù)據(jù),降低了船聯(lián)網(wǎng)通信負(fù)載;數(shù)據(jù)融合控制子模塊實(shí)現(xiàn)了人船岸數(shù)據(jù)的融合、解析與分發(fā);利用北斗通信終端轉(zhuǎn)發(fā)數(shù)據(jù)解決船載儀器通信距離受限等問題。所提設(shè)計(jì)方案具有良好的擴(kuò)展性、靈活性,為多種船載設(shè)備借助北斗通信融入船聯(lián)網(wǎng)提供了解決方案。