郭肖旺,陳 海,趙德政
(中國(guó)電子信息產(chǎn)業(yè)集團(tuán)有限公司第六研究所,北京 100083)
在工業(yè)自動(dòng)化領(lǐng)域,使用通用編程軟件分為兩類情況:一是為各廠商提供編程軟件工具,如德國(guó)3S公司的CodeSys、德國(guó)菲尼克斯公司的Phoenix Contact Software(原為KW-Software)、一方梯隊(duì)(Infoteam)的OpenPCS[1];二是自身為自動(dòng)化產(chǎn)品廠商,編程軟件只針對(duì)自身的PLC產(chǎn)品開發(fā),如德國(guó)西門子的博途(TIA)和Step7[2]、法國(guó)施耐德的Unity Pro、美國(guó)羅克韋爾的RSLogix5000、日本三菱的GX-Developer[3]、日本歐姆龍的CX-Programmer等。目前國(guó)內(nèi)有很多廠商已經(jīng)在進(jìn)行工控行業(yè)編程編譯工具的研究,國(guó)內(nèi) PLC 編程軟件一般可以分為三類:一類是仿制兼容類,即仿照國(guó)外著名PLC廠商產(chǎn)品制作的編程軟件,能夠兼容所仿制的國(guó)外的編程軟件,但缺乏核心技術(shù)的自主性,在市場(chǎng)上很難有較好的競(jìng)爭(zhēng)力;二類是貼牌生產(chǎn)(Original Equipment/Entrusted Manufacture,OEM),這類編程軟件采用國(guó)外公司的IEC61131-3 標(biāo)準(zhǔn),雖然符合 PLC 軟件的國(guó)際標(biāo)準(zhǔn),但是其核心技術(shù)仍然掌握在別人手里,市場(chǎng)競(jìng)爭(zhēng)力難以與國(guó)外編程工具相匹敵;第三類是自主開發(fā)的編程軟件,在編譯器等核心關(guān)鍵技術(shù)方面需要投入大量的人力物力,目前國(guó)內(nèi)自主開發(fā)軟件的廠商較少,僅有屈指可數(shù)的幾家企業(yè)進(jìn)行了這方面的研究。
另外,在工控安全方面,國(guó)外編程軟件的大量使用令行業(yè)在根基上受制于人,對(duì)軟件內(nèi)部邏輯、軟件代碼缺乏控制,軟件存在邏輯炸彈、軟件后門等安全問(wèn)題成為我國(guó)工控安全的重大潛在威脅。綜上所述,盡快開發(fā)出擁有自主知識(shí)產(chǎn)權(quán)、有核心技術(shù)競(jìng)爭(zhēng)力的工控行業(yè)編程軟件勢(shì)在必行。
本文在分析編譯器、架構(gòu)設(shè)計(jì)、領(lǐng)域驅(qū)動(dòng)等技術(shù)的基礎(chǔ)上,研究工控行業(yè)中所使用的編程編譯工具在國(guó)產(chǎn)化自主可控方面的關(guān)鍵應(yīng)用,從架構(gòu)設(shè)計(jì)、核心技術(shù)、安全護(hù)航和國(guó)產(chǎn)適配四個(gè)角度出發(fā)(如圖1所示),提出了基于領(lǐng)域驅(qū)動(dòng)的工控行業(yè)編程編譯軟件架構(gòu)、工業(yè)語(yǔ)言編程編譯工具鏈、異構(gòu)平臺(tái)調(diào)試技術(shù)、國(guó)產(chǎn)化基礎(chǔ)軟硬件平臺(tái)適配、可信編譯五個(gè)關(guān)鍵技術(shù)研究方向,為工控行業(yè)編程編譯工具的自主可控研究奠定基礎(chǔ)。
圖1 自主可控工控行業(yè)編程編譯工具關(guān)鍵技術(shù)
IEC61131國(guó)際標(biāo)準(zhǔn)是第一個(gè)為工業(yè)自動(dòng)化控制系統(tǒng)軟件設(shè)計(jì)提供標(biāo)準(zhǔn)化的國(guó)際標(biāo)準(zhǔn)[4],其中IEC 61131-3規(guī)定用于可編程控制器編程語(yǔ)言的語(yǔ)法和語(yǔ)義,規(guī)定編程語(yǔ)言有文本語(yǔ)言和圖形語(yǔ)言,已獲得國(guó)際工控界的廣泛承認(rèn)和支持。GB/T 15969.3是對(duì)應(yīng)IEC61131-3標(biāo)準(zhǔn)的中國(guó)國(guó)家標(biāo)準(zhǔn)。IEC 61131-3正在加速推廣應(yīng)用,不但成為PLC的編程標(biāo)準(zhǔn),而且成為DCS、PC控制、SCADA、運(yùn)動(dòng)控制等事實(shí)上的編程標(biāo)準(zhǔn)。為適應(yīng)現(xiàn)場(chǎng)總線和工業(yè)以太網(wǎng)的高速發(fā)展,IEC 61131-3和IEC 61499相結(jié)合,真正為PLC的分布式發(fā)展提供了實(shí)現(xiàn)的路徑。
本文通過(guò)對(duì)GB/T 15969.3標(biāo)準(zhǔn)進(jìn)行深入分析和研究,結(jié)合領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)的概念,提出了基于領(lǐng)域驅(qū)動(dòng)的工控行業(yè)編程編譯軟件架構(gòu)。
(1)領(lǐng)域驅(qū)動(dòng)建?!鞔_組織架構(gòu)
領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)(DDD)的概念是由著名建模專家EVANS E[5]提出的。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì)重視軟件系統(tǒng)并側(cè)重業(yè)務(wù)模型,實(shí)際是針對(duì)面向?qū)ο蟮囊粋€(gè)擴(kuò)展和延伸。領(lǐng)域驅(qū)動(dòng)設(shè)計(jì),在處理復(fù)雜業(yè)務(wù)邏輯方面有著先天的優(yōu)勢(shì),它保證了系統(tǒng)的可維護(hù)性、擴(kuò)展性和復(fù)用性[6]。
GB/T 15969.3定義了程序組織單元、配置、資源、任務(wù)、全局變量等組態(tài)元素,并規(guī)定了軟件模型和編程模型,從理論上描述了一個(gè)復(fù)雜程序分解成若干個(gè)小模塊的過(guò)程,并在各分解部分之間有清晰和規(guī)范的接口方法,可以實(shí)現(xiàn)對(duì)程序執(zhí)行的完全控制。在標(biāo)準(zhǔn)定義的模型的基礎(chǔ)上引入領(lǐng)域驅(qū)動(dòng)的思想,進(jìn)行領(lǐng)域建模,建立領(lǐng)域?qū)ο笈c實(shí)現(xiàn)業(yè)務(wù)的映射關(guān)系,可以提高開發(fā)過(guò)程的靈活性,提高自主可控編程編譯工具研發(fā)的核心競(jìng)爭(zhēng)力。
(2)限界上下文——明確系統(tǒng)邊界
GB/T 15969.3標(biāo)準(zhǔn)中規(guī)定了任務(wù)、變量、配置等多個(gè)部分,每個(gè)部分都有詳細(xì)的設(shè)計(jì)約束和嚴(yán)格的定義。標(biāo)準(zhǔn)中還定義了三種程序組織單元(Programming Organisation Unit, POU):Program、Function、Function Block。用戶編程時(shí)可以根據(jù)需要對(duì)程序功能進(jìn)行模塊化拆分及封裝。因此,從用戶角度來(lái)說(shuō),可以采用不同的領(lǐng)域模型進(jìn)行控制系統(tǒng)編程;從開發(fā)者角度來(lái)說(shuō),需要提供建立不同領(lǐng)域模型的軟件功能。限界上下文定義了每個(gè)模型的應(yīng)用范圍,在每個(gè)限界上下文中確保領(lǐng)域模型的一致性,引入限界上下文的概念和思想,在進(jìn)行自主可控編程編譯工具研發(fā)的過(guò)程中,采用表示各個(gè)領(lǐng)域模型之間關(guān)系的總體視圖,通過(guò)持續(xù)集成確保多個(gè)限界上下文的模型統(tǒng)一,明確系統(tǒng)邊界,提高軟件的可伸縮性和可擴(kuò)展性。
目前國(guó)內(nèi)的自主研發(fā)編程編譯軟件的公司大都經(jīng)歷過(guò)第三方軟件平臺(tái)期。新成立的企業(yè)采用成熟的第三方軟件平臺(tái),可以快速地推出產(chǎn)品占領(lǐng)市場(chǎng)積累資本,積攢使用經(jīng)驗(yàn),發(fā)掘新需求,然后在研發(fā)投入可支撐的情況下開展自主研發(fā)的工作。
研究自主可控工控行業(yè)編程編譯工具需重點(diǎn)在攻克編譯工具鏈,本文提出了適用于國(guó)產(chǎn)軟硬件平臺(tái)的編譯工具鏈的關(guān)鍵技術(shù)研究方向。
(1)多種編程語(yǔ)言深度融合編程機(jī)制
GB/T 15969.3定義了五種 PLC 標(biāo)準(zhǔn)編程語(yǔ)言,包括三種圖形化語(yǔ)言和兩種文本化語(yǔ)言。在同一個(gè)控制應(yīng)用中,用戶可以根據(jù)需求自由選擇不同的語(yǔ)言進(jìn)行不同部分的邏輯編寫。要求編程環(huán)境必須提供靈活的開發(fā)方式,并且同一種功能需求可以用不同的語(yǔ)言實(shí)現(xiàn)。
(2)高可擴(kuò)展的中間代碼架構(gòu)
國(guó)產(chǎn)CPU芯片如龍芯[7]、飛騰[8]等架構(gòu)不同,指令平臺(tái)不同,編程編譯軟件需考慮支持龍芯MIPS架構(gòu)X86平臺(tái)、飛騰1500A芯片、國(guó)產(chǎn)SPARC V8處理器、等,因此在編譯時(shí)要考慮各個(gè)平臺(tái)的編譯,設(shè)計(jì)一種與平臺(tái)無(wú)關(guān)的中間代碼架構(gòu),該結(jié)構(gòu)可支持PLC各種編程語(yǔ)言的前端編譯,使得后端編譯只需支持該中間代碼結(jié)構(gòu)即可,提高了編譯效率,減少了編譯帶來(lái)錯(cuò)誤的可能性,為以后增加其他平臺(tái)的支持提供了良好接口,大大縮短增加新平臺(tái)支持所需的開發(fā)周期。
(3)抽象異構(gòu)寄存器分配模型
由于不用的目標(biāo)平臺(tái)寄存器分配方式不同,針對(duì)每種平臺(tái)進(jìn)行設(shè)計(jì)開發(fā)需要投入大量的時(shí)間和人力,因此可根據(jù)編譯目標(biāo)平臺(tái)的不同特征,設(shè)計(jì)一種針對(duì)異構(gòu)平臺(tái)的抽象寄存器分配模型,對(duì)不同的目標(biāo)平臺(tái)采用統(tǒng)一的寄存器配置機(jī)制,進(jìn)行內(nèi)存和寄存器的分配,在引入新平臺(tái)支持時(shí),可以方便地按照模型擴(kuò)展,大大縮短開發(fā)周期。
(4)高兼容性的工業(yè)語(yǔ)言編譯器、鏈接器
對(duì)不同的工業(yè)語(yǔ)言,應(yīng)提供高兼容性的前端編譯接口和統(tǒng)一的使用方法;對(duì)不同的目標(biāo)平臺(tái),應(yīng)提供高兼容性的編譯后端接口,采用統(tǒng)一的編譯接口生成不同的目標(biāo)平臺(tái)二進(jìn)制指令。在進(jìn)行語(yǔ)言擴(kuò)展時(shí)不需要考慮目標(biāo)平臺(tái)兼容性,在進(jìn)行目標(biāo)平臺(tái)擴(kuò)展時(shí)也不需要考慮編程語(yǔ)言的不同。降低了工業(yè)語(yǔ)言和目標(biāo)程序的耦合性,提高開發(fā)效率和擴(kuò)展能力。
除了支持編譯器編譯后目標(biāo)文件的鏈接,鏈接器應(yīng)可支持符合標(biāo)準(zhǔn)的C語(yǔ)言代碼鏈接,解決現(xiàn)有積累的算法庫(kù)的重用,也照顧了部分原有熟悉通用計(jì)算機(jī)編程技術(shù)的開發(fā)人員。
(5)工業(yè)語(yǔ)言正確性自動(dòng)化驗(yàn)證插件
利用編程編譯工具提供的接口,自動(dòng)化驗(yàn)證插件可以提供腳本自動(dòng)打開、編譯、執(zhí)行測(cè)試用例的功能,并實(shí)時(shí)記錄和跟蹤每一步的運(yùn)行結(jié)果,統(tǒng)計(jì)并生成測(cè)試報(bào)表,方便用戶測(cè)試自己的程序,為用戶調(diào)試和編程提供了更加高效的接口和更加準(zhǔn)確的依據(jù)。
開發(fā)過(guò)程不可能一蹴而就,需要借助調(diào)試工具進(jìn)行不斷的測(cè)試、檢查和修改才能寫出高可靠性的程序,所以調(diào)試器是軟件開發(fā)過(guò)程中的必備工具[9-10]。因此,自主可控編程編譯工具對(duì)于調(diào)試技術(shù)的研究必不可少。工業(yè)語(yǔ)言的調(diào)試涉及圖形語(yǔ)言和文本語(yǔ)言,同時(shí)在自主可控方面還要兼顧不同的目標(biāo)平臺(tái)。通過(guò)充分研究現(xiàn)有成熟的計(jì)算機(jī)語(yǔ)言的開發(fā)環(huán)境和調(diào)試手段,深入分析現(xiàn)有計(jì)算機(jī)語(yǔ)言調(diào)試策略的優(yōu)點(diǎn),結(jié)合工業(yè)語(yǔ)言的特點(diǎn),提出用于工業(yè)語(yǔ)言的調(diào)試策略研究,調(diào)試器應(yīng)可提供不同目標(biāo)平臺(tái)的調(diào)試,簡(jiǎn)化用戶邏輯程序調(diào)試過(guò)程。
(1)異構(gòu)多目標(biāo)平臺(tái)調(diào)試策略
考慮適用于不同平臺(tái)的調(diào)試方法需要提供一套用于異構(gòu)多目標(biāo)平臺(tái)調(diào)試的策略和模型,程序的可執(zhí)行文件的結(jié)構(gòu),全局變量、局部變量以及各種信息的存儲(chǔ)方式,可執(zhí)行文件中包含的調(diào)試信息結(jié)構(gòu),調(diào)試信息的整體組織結(jié)構(gòu)和存儲(chǔ)方式等[11],都將是異構(gòu)多目標(biāo)平臺(tái)調(diào)試研究的重點(diǎn)。
(2)多種調(diào)試命令結(jié)合
對(duì)于圖形化語(yǔ)言和文本語(yǔ)言有不同的調(diào)試手段和調(diào)試命令。對(duì)文本語(yǔ)言應(yīng)能支持設(shè)置斷點(diǎn)、檢查寄存器的值、支持逐行單步調(diào)試[11]、步入和步過(guò)、查看/改變變量、查看內(nèi)存等調(diào)試手段。對(duì)于圖形化語(yǔ)言,需根據(jù)圖形語(yǔ)言的特點(diǎn),提供實(shí)用的調(diào)試方法,如對(duì)LD語(yǔ)言,可支持對(duì)網(wǎng)絡(luò)設(shè)置斷點(diǎn)、執(zhí)行單個(gè)網(wǎng)絡(luò)等命令。
(3)多任務(wù)/多線程調(diào)試技術(shù)
工業(yè)控制系統(tǒng)在調(diào)試時(shí)應(yīng)該支持多任務(wù)/多線程調(diào)試[12],在進(jìn)行非嵌入式平臺(tái)調(diào)試時(shí),如仿真器上可以仿真多任務(wù)、多線程,在各個(gè)線程之間進(jìn)行切換,向指定線程發(fā)送命令等。
編程工具作為大型軟件,要想兼容X86系列、飛騰系列、龍芯系列等平臺(tái),需研究可跨Windows、國(guó)產(chǎn)操作系統(tǒng)、國(guó)產(chǎn)硬件平臺(tái)的工業(yè)編程軟件實(shí)現(xiàn)技術(shù),從可移植性、可兼容性等方面進(jìn)行分析,應(yīng)該著重研究如下兩個(gè)關(guān)鍵技術(shù)。
(1)異構(gòu)多目標(biāo)平臺(tái)自適應(yīng)編譯架構(gòu)
第一,采用源到源編譯[13],實(shí)現(xiàn)編程編譯工具在不同處理器架構(gòu)平臺(tái)的移植。
第二,編程工具作為IDE提供給用戶使用時(shí),應(yīng)提供異構(gòu)多目標(biāo)平臺(tái)自適應(yīng)編譯功能,用戶不需關(guān)心工程文件運(yùn)行的目標(biāo)平臺(tái),編程工具在進(jìn)行編譯、下載、調(diào)試、仿真時(shí)根據(jù)目標(biāo)平臺(tái)自適應(yīng)處理和加載。
(2)工業(yè)語(yǔ)言異構(gòu)平臺(tái)可移植
在不同平臺(tái)上使用編程工具保存的用戶工程,不需做額外處理,應(yīng)能支持在不同平臺(tái)間無(wú)縫拷貝使用。因此應(yīng)設(shè)計(jì)一種與平臺(tái)無(wú)關(guān)的用戶工程文件,實(shí)現(xiàn)圖形化語(yǔ)言、文本語(yǔ)言、網(wǎng)絡(luò)組態(tài)、硬件組態(tài)等內(nèi)容的統(tǒng)一化保存,該項(xiàng)設(shè)計(jì)能夠大大簡(jiǎn)化用戶工程的移植工作,提高目標(biāo)工程一致性。
編程編譯工具的可信性對(duì)于整個(gè)工控系統(tǒng)而言具有非常關(guān)鍵的意義,如果編譯器不可信,則很難保證系統(tǒng)所運(yùn)行邏輯的可信性。可信編譯是指編譯器在保證編譯正確的同時(shí),提供相應(yīng)的機(jī)制保證編譯對(duì)象的可信性[14],因此可信編譯理論和技術(shù)的研究也將是工控行業(yè)自主可控編程編譯工具研究的關(guān)鍵技術(shù)之一。
編程編譯工具作用于控制工程的設(shè)計(jì)、調(diào)試、運(yùn)行、維護(hù)等全生命周期,對(duì)于控制對(duì)象的安全穩(wěn)定運(yùn)行具有重要的意義。本文對(duì)自主可控工控行業(yè)編程編譯工具的幾項(xiàng)關(guān)鍵技術(shù)進(jìn)行了分析,提出了一些設(shè)計(jì)原則和策略,希望能給在工控行業(yè)中進(jìn)行自主可控編程編譯工具研究的相關(guān)人員提供有益的幫助。