陳志剛 陳蘇杭
(1.91336部隊(duì) 秦皇島 066326)(2.92840部隊(duì) 青島 266000)
艦載指控系統(tǒng)是一種具有高可靠性和實(shí)時(shí)性的復(fù)雜系統(tǒng),是整個(gè)艦艇作戰(zhàn)指揮過(guò)程的核心部分。在作戰(zhàn)仿真中,艦載指控系統(tǒng)仿真是整個(gè)艦載作戰(zhàn)仿真的“中樞神經(jīng)”[1],是作戰(zhàn)信息處理中心和指揮員實(shí)施指揮的直接部位,承擔(dān)著信息接收與存儲(chǔ)、信息融合、威脅目標(biāo)指示等功能[2]。目前,隨著我海軍艦艇裝備的不斷更新和發(fā)展,艦載指控設(shè)備仿真系統(tǒng)的開(kāi)發(fā)和研制面臨著需求不確定、應(yīng)用環(huán)境快速變化等諸多問(wèn)題[3],系統(tǒng)的可移植性、可擴(kuò)展性以及互操作性變得越來(lái)越重要[4~5]。
艦載指控系統(tǒng)在開(kāi)發(fā)過(guò)程中存在許多結(jié)構(gòu)性的重復(fù)代碼,這部分代碼可以由艦載指控系統(tǒng)數(shù)據(jù)模型轉(zhuǎn)換生成。通過(guò)在數(shù)據(jù)模型與結(jié)構(gòu)性重復(fù)代碼之間建立映射關(guān)系,應(yīng)用模型驅(qū)動(dòng)思想指導(dǎo)該部分代碼的自動(dòng)生成工作,可以很大程度地提高系統(tǒng)的開(kāi)發(fā)效率。
艦載指控系統(tǒng)作為一種典型的軍事信息應(yīng)用系統(tǒng),其仿真軟件的開(kāi)發(fā)和研制面臨著需求不確定、應(yīng)用環(huán)境快速變化等諸多問(wèn)題[6],需要探索新的軟件研發(fā)思路和方法。目前,靶場(chǎng)構(gòu)建多套艦載指控系統(tǒng)模型,分別應(yīng)用于不同的仿真實(shí)現(xiàn)平臺(tái),如RT-Space平臺(tái)、DWK平臺(tái)等,出現(xiàn)資源浪費(fèi)嚴(yán)重,增加許多重復(fù)性工作,導(dǎo)致這種現(xiàn)象的主要原因是由于系統(tǒng)不具備可移植性、可重用性。應(yīng)用數(shù)據(jù)模型驅(qū)動(dòng)開(kāi)發(fā)技術(shù),可以實(shí)現(xiàn)艦載指控系統(tǒng)的應(yīng)用邏輯和底層變化的分離,加大應(yīng)用邏輯甚至應(yīng)用子系統(tǒng)的大粒度重用,從而增強(qiáng)軟件系統(tǒng)的適應(yīng)能力和變化能力,實(shí)現(xiàn)一次建??梢詰?yīng)用到不同的技術(shù)環(huán)境中。
模型驅(qū)動(dòng)思想是一種仿真系統(tǒng)開(kāi)發(fā)的思想。模型驅(qū)動(dòng)架構(gòu)(MDA)則是一個(gè)實(shí)現(xiàn)了模型驅(qū)動(dòng)思想,并被廣泛應(yīng)用于仿真系統(tǒng)開(kāi)發(fā)的設(shè)計(jì)方法[8]。艦載指控系統(tǒng)的需求主要分為界面層和功能服務(wù)層,本文采用MDA技術(shù)可將系統(tǒng)的功能從平臺(tái)中脫離出來(lái),以領(lǐng)域知識(shí)為基礎(chǔ),元模型采用基于XSD的數(shù)據(jù)模型產(chǎn)生PIM模型,存入模型庫(kù)中。在模型庫(kù)中提出的模型,都可以映射到不同的平臺(tái)上,包括RT-Space平臺(tái)、DWK平臺(tái)、HLA等具體平臺(tái),并實(shí)現(xiàn)代碼自動(dòng)生成,并依托組件技術(shù),最終實(shí)現(xiàn)整個(gè)系統(tǒng)的開(kāi)發(fā),主要實(shí)現(xiàn)框架如圖1所示。
圖1 艦載指控系統(tǒng)仿真開(kāi)發(fā)框圖
文獻(xiàn)[7]中介紹了作戰(zhàn)系統(tǒng)接口協(xié)議輔助設(shè)計(jì)工具,提出了將存儲(chǔ)的相關(guān)作戰(zhàn)系統(tǒng)接口協(xié)議單元數(shù)據(jù)轉(zhuǎn)換為XML模式文件(XSD),從而實(shí)現(xiàn)模型驅(qū)動(dòng)方法。因此,實(shí)現(xiàn)在MDA環(huán)境下以數(shù)據(jù)模型為中心的仿真系統(tǒng)開(kāi)發(fā)方法,構(gòu)建艦載指控系統(tǒng)數(shù)據(jù)模型是一項(xiàng)十分重要的內(nèi)容。
艦載指控系統(tǒng)是一個(gè)十分復(fù)雜的系統(tǒng),而系統(tǒng)的數(shù)據(jù)模型在仿真開(kāi)發(fā)中又起著至關(guān)重要的作用。采用基于模型驅(qū)動(dòng)的方法開(kāi)發(fā)系統(tǒng)過(guò)程中,數(shù)據(jù)模型的修改能自動(dòng)反映到設(shè)計(jì)的各個(gè)階段,如更新系統(tǒng)對(duì)象屬性、更新系統(tǒng)接口協(xié)議、更新仿真模型、更新仿真系統(tǒng)的實(shí)現(xiàn)代碼等。
在艦載指控系統(tǒng)的開(kāi)發(fā)過(guò)程中,即使有較好的頂層設(shè)計(jì),但隨著用戶需求的不斷變化,系統(tǒng)的設(shè)計(jì)仍會(huì)調(diào)整,接口會(huì)不斷的發(fā)生變化,接口解析也需做出較大調(diào)整。采用XML模式定義(XML Sche?ma Definitions,XSD)建立數(shù)據(jù)模型,能夠解決在系統(tǒng)開(kāi)發(fā)過(guò)程中適應(yīng)這種接口的變化問(wèn)題,以提高系統(tǒng)開(kāi)發(fā)效率,降低開(kāi)發(fā)成本,使接口具備較強(qiáng)的適應(yīng)能力。
針對(duì)艦載指控系統(tǒng)接口協(xié)議中定義的信息單元和相關(guān)數(shù)據(jù)字段,采用XSD建立數(shù)據(jù)模型,主要對(duì)模型的基本信息、數(shù)據(jù)類型、模型的組件信息進(jìn)行描述,描述信息元素之間的結(jié)構(gòu)關(guān)系以及用來(lái)約束每個(gè)元素的詳細(xì)信息,例如,數(shù)據(jù)字段的名稱、類型、長(zhǎng)度、最大值、最小值等。艦載指控系統(tǒng)數(shù)據(jù)模型的信息結(jié)構(gòu)如圖2所示。
圖2 艦載指控系統(tǒng)數(shù)據(jù)模型的信息結(jié)構(gòu)
3.1.1 模型基本信息
模型基本信息描述艦載指控系統(tǒng)仿真程序模型中英文名稱、模型的開(kāi)發(fā)語(yǔ)言、模型開(kāi)發(fā)平臺(tái)等管理類信息,其信息結(jié)構(gòu)如圖3所示。
圖3 模型基本信息的信息結(jié)構(gòu)
3.1.2 自定義數(shù)據(jù)類型
自定義數(shù)據(jù)類型描述整個(gè)艦載指控系統(tǒng)所使用的枚舉數(shù)據(jù)類型、復(fù)合結(jié)構(gòu)數(shù)據(jù)類型、數(shù)組類型,以及可變長(zhǎng)的string類型等,其信息結(jié)構(gòu)如圖4所示。
圖4 數(shù)據(jù)類型信息結(jié)構(gòu)
3.1.3 模型組件信息
模型組件信息描述艦載指控系統(tǒng)的模型組件描述信息、想定初始化參數(shù)、屬性類輸入信息、屬性類輸出信息、事件類輸入信息、事件類輸出信息等模型信息。其信息結(jié)構(gòu)如圖5所示。
圖5 模型組件信息信息結(jié)構(gòu)
其中,想定初始化信息用于描述仿真對(duì)象的固有屬性,如艦載指控系統(tǒng)目標(biāo)航跡對(duì)象的航向、航速等。屬性類信息用于描述仿真對(duì)象之間交互的對(duì)象類信息,如雷達(dá)上報(bào)的目標(biāo)航跡信息。事件類信息用于描述仿真對(duì)象之間的交互類信息,如硬武器目標(biāo)指示消息、雷達(dá)狀態(tài)上報(bào)消息等。
結(jié)合SOA思想,引入了服務(wù)的概念。服務(wù)可以接受請(qǐng)求并發(fā)送響應(yīng)結(jié)果,接收到的請(qǐng)求消息和反饋的響應(yīng)消息的格式定義源自基于XSD的數(shù)據(jù)模型。實(shí)現(xiàn)具體的服務(wù)時(shí),通過(guò)網(wǎng)絡(luò)對(duì)該服務(wù)進(jìn)行發(fā)布的時(shí)候需要與一種特定的網(wǎng)絡(luò)通信協(xié)議相綁定。艦載指控系統(tǒng)數(shù)據(jù)模型主要描述了接口中消息的格式和內(nèi)容定義,需要增加對(duì)于服務(wù)接口信息的描述,即需要在數(shù)據(jù)模型中增加描述操作、端口以及協(xié)議綁定信息。
通常來(lái)說(shuō)軟件代碼可以分為通用代碼,個(gè)性代碼和結(jié)構(gòu)性重復(fù)代碼這三個(gè)部分。在艦載指控系統(tǒng)仿真軟件中,通用代碼是包含軟件基本框架在內(nèi)的,實(shí)現(xiàn)仿真系統(tǒng)的基礎(chǔ)代碼;個(gè)性代碼則是實(shí)現(xiàn)艦載指控系統(tǒng)特定功能的代碼;結(jié)構(gòu)性重復(fù)代碼則主要包含了有關(guān)描述艦載指控系統(tǒng)信息報(bào)文具體格式,以及報(bào)文解析程序的代碼,通過(guò)進(jìn)一步的研究發(fā)現(xiàn),該部分代碼是艦載指控系統(tǒng)開(kāi)發(fā)中的主要內(nèi)容。
在前面章節(jié)中,艦載指控系統(tǒng)數(shù)據(jù)模型描述的內(nèi)容主要就是報(bào)文的相關(guān)信息,在開(kāi)發(fā)過(guò)程中,艦載指控系統(tǒng)中將存在許多結(jié)構(gòu)性重復(fù)代碼,這部分可由該系統(tǒng)數(shù)據(jù)模型轉(zhuǎn)換生成。通過(guò)在數(shù)據(jù)模型與結(jié)構(gòu)性重復(fù)代碼之間建立映射關(guān)系,應(yīng)用模型驅(qū)動(dòng)思想指導(dǎo)該部分代碼的自動(dòng)生成工作,很大程度的提高艦載指控系統(tǒng)的開(kāi)發(fā)效率。
為了實(shí)現(xiàn)數(shù)據(jù)模型驅(qū)動(dòng)的艦載指控系統(tǒng)代碼開(kāi)發(fā),實(shí)際上就是實(shí)現(xiàn)了MDA思想中的PIM到實(shí)際代碼的轉(zhuǎn)換。
XML文件的定義方式采用了樹(shù)狀結(jié)構(gòu),這種定義方式的特點(diǎn)是結(jié)構(gòu)化好,利于程序分析,可通過(guò)樹(shù)的遍歷及生成算法對(duì)其進(jìn)行處理。為了提高接口代碼開(kāi)發(fā)效率,基于如圖6所示的思路。在讀取XSD文件之后,首先分析XSD文件結(jié)構(gòu),根據(jù)文件結(jié)構(gòu)生成解析代碼,代碼生成結(jié)束后,針對(duì)生成的代碼進(jìn)行編譯鏈接,生成XML的解析組件并發(fā)布。
圖6 代碼生成解析方法
在設(shè)計(jì)平臺(tái)無(wú)關(guān)模型(PIM)時(shí)不用考慮最終實(shí)現(xiàn)的中間件平臺(tái),也不用考慮最終代碼運(yùn)行的平臺(tái),它是描述系統(tǒng)功能和結(jié)構(gòu)的模型,不包括任何平臺(tái)的技術(shù)。平臺(tái)相關(guān)模型(PSM)的設(shè)計(jì)與具體的平臺(tái)密切相關(guān),它依賴于平臺(tái)所提供的功能和服務(wù),涉及到系統(tǒng)在平臺(tái)上的實(shí)現(xiàn)細(xì)節(jié)。
平臺(tái)的例子包括HLA、CORBA等,而艦載指控系統(tǒng)仿真采用的DWK也是一種平臺(tái)。將PIM轉(zhuǎn)換到PSM,也就是從概念性的分析模型到計(jì)算機(jī)仿真模型的實(shí)現(xiàn),通過(guò)PSM自動(dòng)轉(zhuǎn)換工具可以自動(dòng)化地進(jìn)行。
由艦載指控系統(tǒng)PIM轉(zhuǎn)換到滿足DWK平臺(tái)實(shí)現(xiàn)規(guī)約的PSM,要求PIM按照DWK規(guī)定的對(duì)象模型結(jié)構(gòu)、仿真驅(qū)動(dòng)方式、服務(wù)獲取方式,以及異常機(jī)制、參數(shù)類型等實(shí)現(xiàn)到PSM的轉(zhuǎn)換。
通過(guò)代碼自動(dòng)生成工具編輯模型解析模板來(lái)實(shí)現(xiàn)PSM代碼的自動(dòng)生成。用代碼自動(dòng)生成工具生成代碼不僅能夠提高系統(tǒng)的開(kāi)發(fā)效率,而且能夠保證系統(tǒng)的整體代碼風(fēng)格一致,大大提高代碼的可讀性和可維護(hù)性。
采用通用仿真模型設(shè)計(jì)語(yǔ)言Python[9]進(jìn)行PSM代碼的設(shè)計(jì),Python是一種面向?qū)ο蟮?、直譯式計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,語(yǔ)法簡(jiǎn)潔清晰,可以方便地轉(zhuǎn)換為各種高級(jí)編程語(yǔ)言,如:C++、C#、Java等??蓪⒂?jì)算機(jī)程序代碼直接編譯形成可執(zhí)行代碼組件.pyc文件,或者根據(jù)運(yùn)行環(huán)境的需要先將Python代碼轉(zhuǎn)換為其他高級(jí)編程語(yǔ)言格式,然后再編譯形成可執(zhí)行代碼組件,如.dll和.exe文件等。
本文針對(duì)系統(tǒng)通用性低、開(kāi)發(fā)過(guò)程中結(jié)構(gòu)性重復(fù)代碼多的問(wèn)題,采用數(shù)據(jù)模型驅(qū)動(dòng)的方法,建立基于XSD的艦載指控系統(tǒng)數(shù)據(jù)模型,借助模型驅(qū)動(dòng)思想,通過(guò)代碼生成工具,實(shí)現(xiàn)PIM到PSM的實(shí)際代碼轉(zhuǎn)換,提高系統(tǒng)的開(kāi)發(fā)效率,提高代碼的可讀性和可維護(hù)性。