林 晨, 周曉梅, 王 敏
(中遠(yuǎn)海運(yùn)科技股份有限公司,上海 200133)
智能船舶概念最早起源于E-Navigation[1-2],E-Navigation對(duì)智能船舶概念的正式定義為:通過信息化的手段,對(duì)船上和岸上的海事信息進(jìn)行協(xié)調(diào)一致的收集、整合、顯示及分析,以達(dá)到船舶安全、經(jīng)濟(jì)航行和環(huán)境保護(hù)的目標(biāo)。中國船級(jí)社以E-Navigation對(duì)智能船舶概念的定義為依據(jù)制定了《智能船舶規(guī)范》,它的構(gòu)建基于E-Navigation對(duì)智能船舶概念的定義的核心,即船-船、船-岸和岸-岸間的信息流和數(shù)據(jù)流[3],而具備模塊化和集成化的智能集成平臺(tái)搭起了船-船、船-岸的通信鏈路,是實(shí)現(xiàn)信息流和數(shù)據(jù)流的有效方法[4]。
要實(shí)現(xiàn)智能集成平臺(tái),對(duì)各子系統(tǒng)的數(shù)據(jù)進(jìn)行采集是第一步。各子系統(tǒng)所生成數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)、存儲(chǔ)方式及生成頻率等方面不盡相同,需尋找一種靈活有效的方式對(duì)這些系統(tǒng)進(jìn)行集成,集成方式是既不影響子系統(tǒng)本身的運(yùn)行,又能提升平臺(tái)開發(fā)的效率。對(duì)現(xiàn)有的集成方式進(jìn)行分析和比選,提出采用企業(yè)級(jí)服務(wù)總線技術(shù)實(shí)現(xiàn)對(duì)異構(gòu)子系統(tǒng)的數(shù)據(jù)采集。
在船端,現(xiàn)有最典型的對(duì)數(shù)據(jù)進(jìn)行采集的系統(tǒng)是綜合船橋系統(tǒng)(Integrated Bridge System,IBS),該系統(tǒng)集中獲取傳感器信息,將有關(guān)導(dǎo)航、駕控、避碰和監(jiān)視等分散設(shè)備的功能從信息融合及人機(jī)工程的角度進(jìn)行集成。以Kongsberg公司開發(fā)的最新一代的船橋系統(tǒng)K-Bridge Integrated Navigation為例,它利用局域網(wǎng)將所有系統(tǒng)連接起來,將導(dǎo)航傳感器數(shù)據(jù)、船載航行數(shù)據(jù)等通過網(wǎng)絡(luò)分享給IBS中的所有單元(雷達(dá)系統(tǒng)、電子海圖與信息系統(tǒng)及中央駕控系統(tǒng))。在這種傳統(tǒng)的數(shù)據(jù)采集方式中,平臺(tái)/船載和設(shè)備/子系統(tǒng)之間采用點(diǎn)對(duì)點(diǎn)的方式進(jìn)行通訊,耦合大,且為后期的更新帶來不便,而且作為數(shù)據(jù)源的各系統(tǒng)之間缺乏聯(lián)動(dòng)性,數(shù)據(jù)封閉[5]形成了數(shù)據(jù)孤島,不利于對(duì)船端數(shù)據(jù)的綜合利用。中國船級(jí)社提出的《智能船舶規(guī)范》中,智能集成平臺(tái)作為規(guī)范中規(guī)定的智能船舶7個(gè)重要組成部分之一,可實(shí)現(xiàn)數(shù)據(jù)的采集和統(tǒng)一存儲(chǔ),被整合的數(shù)據(jù)可有效解決數(shù)據(jù)孤島的問題,為數(shù)據(jù)分析及智能應(yīng)用等功能提供基礎(chǔ)數(shù)據(jù)。
圖1 智能集成平臺(tái)系統(tǒng)總體結(jié)構(gòu)
智能集成平臺(tái)是船上數(shù)據(jù)與應(yīng)用統(tǒng)一集成的平臺(tái),能整合船上現(xiàn)有的信息管理系統(tǒng)及后續(xù)新增系統(tǒng),實(shí)現(xiàn)對(duì)船舶的全面監(jiān)控和智能化管理,并與岸基實(shí)現(xiàn)數(shù)據(jù)交互[6]。其系統(tǒng)總體結(jié)構(gòu)見圖1,智能集成平臺(tái)軟件由7部分組成,以下針對(duì)數(shù)據(jù)采集部分展開研究和實(shí)踐。
由于船端集成平臺(tái)需接入多個(gè)異構(gòu)的子系統(tǒng)或平臺(tái),針對(duì)不同子系統(tǒng)的數(shù)據(jù)接口類型,需采取不同的傳輸協(xié)議。比如,硬件設(shè)備直接通訊時(shí),需采用Modbus等協(xié)議來進(jìn)行數(shù)據(jù)采集;與需長連接的應(yīng)用系統(tǒng)通訊時(shí),采用傳輸控制協(xié)議(Transmission Control Protocol, TCP);某些應(yīng)用以web service技術(shù)開放數(shù)據(jù)接口,則需要采用超文本傳輸?shù)膮f(xié)議(Hyper Text Transfer Protocol, HTTP)來獲取數(shù)據(jù);以文件形式存儲(chǔ)的數(shù)據(jù)需通過文件傳輸協(xié)議(File Transfer Protocol, FTP)傳遞;對(duì)數(shù)據(jù)庫的訪問,需通過數(shù)據(jù)庫連接(Java Data Base Connectivity, JDBC)協(xié)議。如何有效地整合多協(xié)議異構(gòu)系統(tǒng)是實(shí)現(xiàn)數(shù)據(jù)采集功能所面對(duì)的主要問題。
針對(duì)多協(xié)議異構(gòu)系統(tǒng)整合的問題,主流的指導(dǎo)思想有企業(yè)應(yīng)用整合(Enterprise Application Integration,EAI)和面向服務(wù)的軟件架構(gòu)(Service Oriented Architecture,SOA)。
EAI的中心思想是制定統(tǒng)一的數(shù)據(jù)規(guī)范和接口定義,使開發(fā)者在整合異構(gòu)系統(tǒng)或是開發(fā)新的功能系統(tǒng)時(shí),只需開放遵循接口定義的數(shù)據(jù)接口,由平臺(tái)來完成不同系統(tǒng)之間數(shù)據(jù)的轉(zhuǎn)換和傳遞。EAI傳統(tǒng)的集線器/Spoke集線器結(jié)構(gòu)見圖2。Hub/Spoke架構(gòu)是星型拓?fù)浣Y(jié)構(gòu),由處于系統(tǒng)中央的Hub和連接在Hub及應(yīng)用系統(tǒng)的多個(gè)適配器組成。適配器在Hub和應(yīng)用系統(tǒng)之間,進(jìn)行數(shù)據(jù)格式的轉(zhuǎn)換與傳輸。適配器將應(yīng)用系統(tǒng)的數(shù)據(jù)信息轉(zhuǎn)化為Hub可識(shí)別的格式并傳遞給Hub, Hub通過消息代理管理消息路由,并將這些來自不同應(yīng)用系統(tǒng)的數(shù)據(jù)消息按其要求的路由規(guī)則傳遞給目標(biāo)應(yīng)用系統(tǒng)的適配器。
SOA將被整合的系統(tǒng)視作提供一定功能的服務(wù),可根據(jù)需求編排這些服務(wù)。當(dāng)出現(xiàn)新的服務(wù)需求時(shí),不需要從零開始實(shí)現(xiàn),只需將已有的服務(wù)進(jìn)行編排裝配來實(shí)現(xiàn)新業(yè)務(wù)。SOA需解決異構(gòu)服務(wù)接口之間的互聯(lián)互通問題,兼容各種已有的數(shù)據(jù)和接口標(biāo)準(zhǔn),連接已有軟件和系統(tǒng)。為實(shí)現(xiàn)上述功能,開發(fā)了企業(yè)服務(wù)總線(Enterprise Service Bus,ESB),ESB是一個(gè)中間件技術(shù)與可擴(kuò)展標(biāo)記語言、Web Service等技術(shù)結(jié)合的產(chǎn)物,是連接服務(wù)的中樞,各項(xiàng)服務(wù)之間不直接進(jìn)行交互,而是通過ESB交互。服務(wù)與總線之間的數(shù)據(jù)接口是通用和中立的,獨(dú)立于實(shí)現(xiàn)服務(wù)的硬件平臺(tái)、操作系統(tǒng)和編程語言。ESB的結(jié)構(gòu)見圖3。
EAI和SOA都建立了統(tǒng)一的數(shù)據(jù)和接口定義,方便連接各異構(gòu)系統(tǒng)。他們主要的區(qū)別在于,SOA架構(gòu)中任何一種接口、通訊及協(xié)議都是遵循相應(yīng)的國際標(biāo)準(zhǔn),如標(biāo)準(zhǔn)描述語言、發(fā)現(xiàn)協(xié)議和消息協(xié)議等;EAI則大多使用基于需求定制的私有標(biāo)準(zhǔn),其優(yōu)點(diǎn)是可在一定程度上減輕EAI中間層對(duì)應(yīng)用系統(tǒng)消息翻譯轉(zhuǎn)換的壓力,在應(yīng)用系統(tǒng)較少的情況下可提高EAI的整體性能,但其同時(shí)也為系統(tǒng)整合的靈活可擴(kuò)展性帶來損失,當(dāng)平臺(tái)引入新的應(yīng)用系統(tǒng)或當(dāng)某個(gè)應(yīng)用系統(tǒng)需做比較大的改動(dòng)時(shí),整個(gè)EAI的適應(yīng)性將變得十分脆弱。
圖2 EAI集線器結(jié)構(gòu)
圖3 ESB結(jié)構(gòu)
在系統(tǒng)較少的情況下或是系統(tǒng)集成的早期階段,采用私有標(biāo)準(zhǔn)的EAI會(huì)體現(xiàn)出性能高及實(shí)現(xiàn)難度低等優(yōu)點(diǎn)。但在需求不斷更新,新引入的系統(tǒng)不斷增多,系統(tǒng)的整合難度將因?yàn)闃?biāo)準(zhǔn)的不統(tǒng)一而呈指數(shù)級(jí)上升。
綜上所述,EAI雖然在某些方面存在一些優(yōu)點(diǎn),但是從長遠(yuǎn)角度來看,遵循SOA的設(shè)計(jì)思想,采用ESB技術(shù)是大勢(shì)所趨,船端數(shù)據(jù)集成平臺(tái)雖然不會(huì)涉及所有ESB技術(shù)所帶來的優(yōu)勢(shì),但是ESB技術(shù)的引入更適合現(xiàn)階段集成平臺(tái)的開發(fā)和長遠(yuǎn)發(fā)展。
2.3.1總體設(shè)計(jì)
智能集成平臺(tái)選用Mule ESB作為ESB的實(shí)現(xiàn),該軟件是基于Java的輕量級(jí)消息框架,相比于其他的ESB產(chǎn)品,Mule的服務(wù)組件可以是任意類型的,簡單的Java對(duì)象(Plain Ordinary Java Objoct, POJO)或其他框架實(shí)現(xiàn)的組件都可集成進(jìn)來,而且其提供了非常豐富的組件,開發(fā)者只需集中精力在業(yè)務(wù)邏輯上,消息邏輯可通過現(xiàn)成的組件來實(shí)現(xiàn)。
采用ESB的智能集成平臺(tái)船端的軟件結(jié)構(gòu)見圖4。由圖4可知,船端的所有子系統(tǒng),都可通過不同協(xié)議連接到總線。根據(jù)各子系統(tǒng)數(shù)據(jù)生成的速率和容量,數(shù)據(jù)采集所采用的通訊協(xié)議見表1。
圖4 采用ESB的智能集成平臺(tái)船端的軟件結(jié)構(gòu)
表1 子系統(tǒng)協(xié)議類型及數(shù)據(jù)周期
機(jī)艙監(jiān)測(cè)報(bào)警系統(tǒng)和船舶性能監(jiān)測(cè)系統(tǒng)具有2 000多個(gè)直接接入以太網(wǎng)的傳感器(測(cè)點(diǎn)),為了與這些硬件進(jìn)行通信,智能集成平臺(tái)選用在工業(yè)領(lǐng)域被廣為應(yīng)用的網(wǎng)絡(luò)通訊協(xié)議Modbus,它是自動(dòng)化工業(yè)領(lǐng)域的標(biāo)準(zhǔn),這種協(xié)議采用問答式通信,具有簡單及通用性強(qiáng)等特點(diǎn)。平臺(tái)選用Modbus在以太網(wǎng)上進(jìn)行傳輸?shù)陌姹緸镸odbus TCP,傳輸速率可以達(dá)到1 GB/s。
Modbus 協(xié)議采用主/從式結(jié)構(gòu),數(shù)據(jù)采集端為主節(jié)點(diǎn),數(shù)據(jù)源為子節(jié)點(diǎn)。以機(jī)艙檢測(cè)報(bào)警系統(tǒng)為例,數(shù)據(jù)集成平臺(tái)作為通訊的主節(jié)點(diǎn),機(jī)艙監(jiān)測(cè)報(bào)警系統(tǒng)作為數(shù)據(jù)源,具有3個(gè)子節(jié)點(diǎn),每個(gè)子節(jié)點(diǎn)有1個(gè)IP地址,子節(jié)點(diǎn)中的每個(gè)監(jiān)測(cè)點(diǎn)硬件都有1個(gè)Address ID。通訊由主節(jié)點(diǎn)發(fā)起,請(qǐng)求信息中包含傳感器的定位信息IP和Address ID,子節(jié)點(diǎn)獲取定位信息后將對(duì)應(yīng)傳感器的數(shù)據(jù)響應(yīng)給主節(jié)點(diǎn)完成通信。
軸系振動(dòng)在線監(jiān)測(cè)系統(tǒng)采集周期為7 d,每次上傳30 000條數(shù)據(jù),每條數(shù)據(jù)約200個(gè)字段,智能集成平臺(tái)采用FTP的方式收取文件,在本地解析文件采集數(shù)據(jù),避免與子系統(tǒng)長時(shí)間的連接導(dǎo)致網(wǎng)絡(luò)負(fù)載的降低。軸系油液在線系統(tǒng)及配載儀同理。智能航行系統(tǒng)傳輸?shù)拇蠖嗍菆D像文件,因此采用FTP這種比較常規(guī)的做法。
2.3.2軟件實(shí)現(xiàn)
圖5 Mule ESB消息流概念圖
智能集成平臺(tái)的數(shù)據(jù)采集功能基于消息流的機(jī)制實(shí)現(xiàn),Mule ESB 3.0開始引入了該機(jī)制,“流”就是消息處理事件的序列,進(jìn)入“流”的每一條消息會(huì)經(jīng)過各種服務(wù)組件,完成業(yè)務(wù)邏輯(見圖5)。
利用Mule強(qiáng)大的消息流功能,開發(fā)者可投入更多的精力在業(yè)務(wù)邏輯的實(shí)現(xiàn)上,常規(guī)功能例如數(shù)據(jù)格式的轉(zhuǎn)換及消息的路由等都交由Mule自帶的組件完成,可更簡單有效地對(duì)數(shù)據(jù)和服務(wù)進(jìn)行集成。針對(duì)各子系統(tǒng)采集功能的實(shí)現(xiàn)可分為服務(wù)協(xié)調(diào)和服務(wù)組開發(fā)兩部分:
(1) 服務(wù)協(xié)調(diào)。依據(jù)各個(gè)子系統(tǒng)數(shù)據(jù)匯集的功能流程,配置各種組件,編排消息流。消息流的編排可在Anypoint Studio中以圖形拖拽的方式完成,一些配置的細(xì)節(jié)則需在對(duì)應(yīng)的XML文件中實(shí)現(xiàn)。相比傳統(tǒng)的代碼形式,圖形化的配置式更加方便。
(2) 服務(wù)組件開發(fā)。服務(wù)組件是消息流中執(zhí)行數(shù)據(jù)處理的實(shí)體,根據(jù)各子系統(tǒng)實(shí)際需求開發(fā)包含業(yè)務(wù)邏輯的Spring bean或者POJO。Mule ESB自帶豐富的組件,例如各類消息轉(zhuǎn)換器等,也會(huì)在功能實(shí)踐中使用。
以機(jī)艙監(jiān)測(cè)報(bào)警系統(tǒng)的數(shù)據(jù)采集為例,其需要實(shí)現(xiàn)2個(gè)功能模塊:
(1) 監(jiān)測(cè)點(diǎn)信息獲取。監(jiān)測(cè)點(diǎn)信息獲取功能的消息流配置見圖6。該功能配置了2條異步消息流,第1條消息流的輸入端是1個(gè)FTP連接器,它以輪詢的方式監(jiān)聽指定的目錄,如果有文件上傳到指定目錄,則將文件下載到輸出節(jié)點(diǎn),即本地文件夾中。第2條消息流的輸入端是本地文件夾,F(xiàn)ile連接器也采用輪詢的方式監(jiān)聽該文件夾,發(fā)現(xiàn)文件則將其交由自定義的Java組件進(jìn)行分析,根據(jù)分析結(jié)果再將其備份至指定的FTP目錄。自定義的Java組件采用POI程序包(Apache開源的Microsoft Office文檔處理程序包)提供的程序?qū)y(cè)點(diǎn)信息表進(jìn)行數(shù)據(jù)拆分。及數(shù)據(jù)校驗(yàn),最終持久化。流程見圖7。
圖6 消息流配置圖
圖7 監(jiān)測(cè)點(diǎn)信息表導(dǎo)入流程
(2) 與監(jiān)測(cè)點(diǎn)通訊采集數(shù)據(jù)。監(jiān)測(cè)點(diǎn)通訊的消息流配置見圖8。該消息流引入了定時(shí)器,定時(shí)器調(diào)用自定義的Java組件10 s/次,Java組件包含初始化內(nèi)存隊(duì)列,同步監(jiān)測(cè)點(diǎn)設(shè)備信息,初始化Modbus Master,建立與監(jiān)測(cè)點(diǎn)設(shè)備的通訊等功能見圖9。
2.2.3功能驗(yàn)證
為了驗(yàn)證監(jiān)測(cè)點(diǎn)信息表的導(dǎo)入功能,將測(cè)點(diǎn)信息表(見表2)上傳到指定的FTP服務(wù)器目錄下,用時(shí)約為0.5 min將數(shù)據(jù)全部同步到MySQL數(shù)據(jù)庫中(見圖10)。
圖8 監(jiān)測(cè)點(diǎn)通訊消息流配置圖
圖9 監(jiān)測(cè)點(diǎn)通訊流程圖
IPSlaveIDAddressTag_codeTypeTag_Name_ENTag_Name_CN10.17.2.1091100004000FINISH WITH ENGINE主機(jī)完車10.17.2.1091200005000ENGINE NOT READY主機(jī)未完車10.17.2.1091300006000ALARM BLOCK(ME STOPPED)報(bào)警閉鎖(主機(jī)停車)10.17.2.1091400007000ME START BLOCKED主機(jī)啟動(dòng)閉鎖10.17.2.1091500008000ME WRONG WAY主機(jī)錯(cuò)向10.17.2.1091600015000LOAD PROG CANCEL FROM ACP從ACP取消負(fù)荷程序控制10.17.2.1091700016000MAIN ENGINE TRIPPED主機(jī)停車10.17.2.1091800017000ME SLOW DOWN ACTIVE主機(jī)減速10.17.2.1091900019000ME SHUT DOWN CANCELLED主機(jī)停車越控10.17.2.10911000020000ME SLOW DOWN OVERRIDE主機(jī)降速越控
圖10 MySQL數(shù)據(jù)庫中測(cè)點(diǎn)表數(shù)據(jù)
由于監(jiān)測(cè)點(diǎn)數(shù)據(jù)表的導(dǎo)入并不經(jīng)常執(zhí)行,且同步的時(shí)間大都消耗在服務(wù)組件處理文件的過程中,因此采用ESB進(jìn)行測(cè)點(diǎn)數(shù)據(jù)導(dǎo)入是可行的。
由于實(shí)驗(yàn)室環(huán)境下沒有真實(shí)的物理設(shè)備,與監(jiān)測(cè)點(diǎn)信息通訊功能的驗(yàn)證采用Modbus Slave仿真器,該仿真器可模仿監(jiān)測(cè)點(diǎn)設(shè)備與數(shù)據(jù)集成平臺(tái)通信。仿真器發(fā)送的數(shù)據(jù)見圖11。
圖11 Modbus Slave仿真器數(shù)據(jù)
數(shù)據(jù)集成平臺(tái)在于Modbus 仿真器通訊之后將采集到的數(shù)據(jù)存儲(chǔ)到關(guān)系型數(shù)據(jù)庫中(見圖12)。實(shí)驗(yàn)證實(shí)采用ESB技術(shù)的集成平臺(tái),可順利采集到數(shù)據(jù)并保證數(shù)據(jù)不會(huì)遺失,具備可靠性。
圖12 數(shù)據(jù)集成平臺(tái)獲取到的數(shù)據(jù)
智能集成平臺(tái)通過對(duì)子系統(tǒng)的數(shù)據(jù)采集,可克服信息孤島,提高數(shù)據(jù)的綜合利用率。針對(duì)船端子系統(tǒng)通信協(xié)議多樣及數(shù)據(jù)形式相同的問題,提出了采用企業(yè)服務(wù)總線的技術(shù)進(jìn)行數(shù)據(jù)采集的方案,利用其通信協(xié)議適配及消息處理能力強(qiáng)大的特點(diǎn),實(shí)現(xiàn)船端異構(gòu)數(shù)據(jù)的采集。以機(jī)艙監(jiān)測(cè)報(bào)警系統(tǒng)為例,設(shè)計(jì)了數(shù)據(jù)采集的邏輯流程,并依此對(duì)Mule ESB的消息源及消息處理器進(jìn)行了編配,最終應(yīng)用系統(tǒng)可成功獲取所需數(shù)據(jù)。