郭肖旺,陳 海,趙德政
(中國電子信息產業集團有限公司第六研究所,北京 100083)
在工業自動化領域,使用通用編程軟件分為兩類情況:一是為各廠商提供編程軟件工具,如德國3S公司的CodeSys、德國菲尼克斯公司的Phoenix Contact Software(原為KW-Software)、一方梯隊(Infoteam)的OpenPCS[1];二是自身為自動化產品廠商,編程軟件只針對自身的PLC產品開發,如德國西門子的博途(TIA)和Step7[2]、法國施耐德的Unity Pro、美國羅克韋爾的RSLogix5000、日本三菱的GX-Developer[3]、日本歐姆龍的CX-Programmer等。目前國內有很多廠商已經在進行工控行業編程編譯工具的研究,國內 PLC 編程軟件一般可以分為三類:一類是仿制兼容類,即仿照國外著名PLC廠商產品制作的編程軟件,能夠兼容所仿制的國外的編程軟件,但缺乏核心技術的自主性,在市場上很難有較好的競爭力;二類是貼牌生產(Original Equipment/Entrusted Manufacture,OEM),這類編程軟件采用國外公司的IEC61131-3 標準,雖然符合 PLC 軟件的國際標準,但是其核心技術仍然掌握在別人手里,市場競爭力難以與國外編程工具相匹敵;第三類是自主開發的編程軟件,在編譯器等核心關鍵技術方面需要投入大量的人力物力,目前國內自主開發軟件的廠商較少,僅有屈指可數的幾家企業進行了這方面的研究。
另外,在工控安全方面,國外編程軟件的大量使用令行業在根基上受制于人,對軟件內部邏輯、軟件代碼缺乏控制,軟件存在邏輯炸彈、軟件后門等安全問題成為我國工控安全的重大潛在威脅。綜上所述,盡快開發出擁有自主知識產權、有核心技術競爭力的工控行業編程軟件勢在必行。
本文在分析編譯器、架構設計、領域驅動等技術的基礎上,研究工控行業中所使用的編程編譯工具在國產化自主可控方面的關鍵應用,從架構設計、核心技術、安全護航和國產適配四個角度出發(如圖1所示),提出了基于領域驅動的工控行業編程編譯軟件架構、工業語言編程編譯工具鏈、異構平臺調試技術、國產化基礎軟硬件平臺適配、可信編譯五個關鍵技術研究方向,為工控行業編程編譯工具的自主可控研究奠定基礎。

圖1 自主可控工控行業編程編譯工具關鍵技術
IEC61131國際標準是第一個為工業自動化控制系統軟件設計提供標準化的國際標準[4],其中IEC 61131-3規定用于可編程控制器編程語言的語法和語義,規定編程語言有文本語言和圖形語言,已獲得國際工控界的廣泛承認和支持。GB/T 15969.3是對應IEC61131-3標準的中國國家標準。IEC 61131-3正在加速推廣應用,不但成為PLC的編程標準,而且成為DCS、PC控制、SCADA、運動控制等事實上的編程標準。為適應現場總線和工業以太網的高速發展,IEC 61131-3和IEC 61499相結合,真正為PLC的分布式發展提供了實現的路徑。
本文通過對GB/T 15969.3標準進行深入分析和研究,結合領域驅動設計的概念,提出了基于領域驅動的工控行業編程編譯軟件架構。
(1)領域驅動建模——明確組織架構
領域驅動設計(DDD)的概念是由著名建模專家EVANS E[5]提出的。領域驅動設計重視軟件系統并側重業務模型,實際是針對面向對象的一個擴展和延伸。領域驅動設計,在處理復雜業務邏輯方面有著先天的優勢,它保證了系統的可維護性、擴展性和復用性[6]。
GB/T 15969.3定義了程序組織單元、配置、資源、任務、全局變量等組態元素,并規定了軟件模型和編程模型,從理論上描述了一個復雜程序分解成若干個小模塊的過程,并在各分解部分之間有清晰和規范的接口方法,可以實現對程序執行的完全控制。在標準定義的模型的基礎上引入領域驅動的思想,進行領域建模,建立領域對象與實現業務的映射關系,可以提高開發過程的靈活性,提高自主可控編程編譯工具研發的核心競爭力。
(2)限界上下文——明確系統邊界
GB/T 15969.3標準中規定了任務、變量、配置等多個部分,每個部分都有詳細的設計約束和嚴格的定義。標準中還定義了三種程序組織單元(Programming Organisation Unit, POU):Program、Function、Function Block。用戶編程時可以根據需要對程序功能進行模塊化拆分及封裝。因此,從用戶角度來說,可以采用不同的領域模型進行控制系統編程;從開發者角度來說,需要提供建立不同領域模型的軟件功能。限界上下文定義了每個模型的應用范圍,在每個限界上下文中確保領域模型的一致性,引入限界上下文的概念和思想,在進行自主可控編程編譯工具研發的過程中,采用表示各個領域模型之間關系的總體視圖,通過持續集成確保多個限界上下文的模型統一,明確系統邊界,提高軟件的可伸縮性和可擴展性。
目前國內的自主研發編程編譯軟件的公司大都經歷過第三方軟件平臺期。新成立的企業采用成熟的第三方軟件平臺,可以快速地推出產品占領市場積累資本,積攢使用經驗,發掘新需求,然后在研發投入可支撐的情況下開展自主研發的工作。
研究自主可控工控行業編程編譯工具需重點在攻克編譯工具鏈,本文提出了適用于國產軟硬件平臺的編譯工具鏈的關鍵技術研究方向。
(1)多種編程語言深度融合編程機制
GB/T 15969.3定義了五種 PLC 標準編程語言,包括三種圖形化語言和兩種文本化語言。在同一個控制應用中,用戶可以根據需求自由選擇不同的語言進行不同部分的邏輯編寫。要求編程環境必須提供靈活的開發方式,并且同一種功能需求可以用不同的語言實現。
(2)高可擴展的中間代碼架構
國產CPU芯片如龍芯[7]、飛騰[8]等架構不同,指令平臺不同,編程編譯軟件需考慮支持龍芯MIPS架構X86平臺、飛騰1500A芯片、國產SPARC V8處理器、等,因此在編譯時要考慮各個平臺的編譯,設計一種與平臺無關的中間代碼架構,該結構可支持PLC各種編程語言的前端編譯,使得后端編譯只需支持該中間代碼結構即可,提高了編譯效率,減少了編譯帶來錯誤的可能性,為以后增加其他平臺的支持提供了良好接口,大大縮短增加新平臺支持所需的開發周期。
(3)抽象異構寄存器分配模型
由于不用的目標平臺寄存器分配方式不同,針對每種平臺進行設計開發需要投入大量的時間和人力,因此可根據編譯目標平臺的不同特征,設計一種針對異構平臺的抽象寄存器分配模型,對不同的目標平臺采用統一的寄存器配置機制,進行內存和寄存器的分配,在引入新平臺支持時,可以方便地按照模型擴展,大大縮短開發周期。
(4)高兼容性的工業語言編譯器、鏈接器
對不同的工業語言,應提供高兼容性的前端編譯接口和統一的使用方法;對不同的目標平臺,應提供高兼容性的編譯后端接口,采用統一的編譯接口生成不同的目標平臺二進制指令。在進行語言擴展時不需要考慮目標平臺兼容性,在進行目標平臺擴展時也不需要考慮編程語言的不同。降低了工業語言和目標程序的耦合性,提高開發效率和擴展能力。
除了支持編譯器編譯后目標文件的鏈接,鏈接器應可支持符合標準的C語言代碼鏈接,解決現有積累的算法庫的重用,也照顧了部分原有熟悉通用計算機編程技術的開發人員。
(5)工業語言正確性自動化驗證插件
利用編程編譯工具提供的接口,自動化驗證插件可以提供腳本自動打開、編譯、執行測試用例的功能,并實時記錄和跟蹤每一步的運行結果,統計并生成測試報表,方便用戶測試自己的程序,為用戶調試和編程提供了更加高效的接口和更加準確的依據。
開發過程不可能一蹴而就,需要借助調試工具進行不斷的測試、檢查和修改才能寫出高可靠性的程序,所以調試器是軟件開發過程中的必備工具[9-10]。因此,自主可控編程編譯工具對于調試技術的研究必不可少。工業語言的調試涉及圖形語言和文本語言,同時在自主可控方面還要兼顧不同的目標平臺。通過充分研究現有成熟的計算機語言的開發環境和調試手段,深入分析現有計算機語言調試策略的優點,結合工業語言的特點,提出用于工業語言的調試策略研究,調試器應可提供不同目標平臺的調試,簡化用戶邏輯程序調試過程。
(1)異構多目標平臺調試策略
考慮適用于不同平臺的調試方法需要提供一套用于異構多目標平臺調試的策略和模型,程序的可執行文件的結構,全局變量、局部變量以及各種信息的存儲方式,可執行文件中包含的調試信息結構,調試信息的整體組織結構和存儲方式等[11],都將是異構多目標平臺調試研究的重點。
(2)多種調試命令結合
對于圖形化語言和文本語言有不同的調試手段和調試命令。對文本語言應能支持設置斷點、檢查寄存器的值、支持逐行單步調試[11]、步入和步過、查看/改變變量、查看內存等調試手段。對于圖形化語言,需根據圖形語言的特點,提供實用的調試方法,如對LD語言,可支持對網絡設置斷點、執行單個網絡等命令。
(3)多任務/多線程調試技術
工業控制系統在調試時應該支持多任務/多線程調試[12],在進行非嵌入式平臺調試時,如仿真器上可以仿真多任務、多線程,在各個線程之間進行切換,向指定線程發送命令等。
編程工具作為大型軟件,要想兼容X86系列、飛騰系列、龍芯系列等平臺,需研究可跨Windows、國產操作系統、國產硬件平臺的工業編程軟件實現技術,從可移植性、可兼容性等方面進行分析,應該著重研究如下兩個關鍵技術。
(1)異構多目標平臺自適應編譯架構
第一,采用源到源編譯[13],實現編程編譯工具在不同處理器架構平臺的移植。
第二,編程工具作為IDE提供給用戶使用時,應提供異構多目標平臺自適應編譯功能,用戶不需關心工程文件運行的目標平臺,編程工具在進行編譯、下載、調試、仿真時根據目標平臺自適應處理和加載。
(2)工業語言異構平臺可移植
在不同平臺上使用編程工具保存的用戶工程,不需做額外處理,應能支持在不同平臺間無縫拷貝使用。因此應設計一種與平臺無關的用戶工程文件,實現圖形化語言、文本語言、網絡組態、硬件組態等內容的統一化保存,該項設計能夠大大簡化用戶工程的移植工作,提高目標工程一致性。
編程編譯工具的可信性對于整個工控系統而言具有非常關鍵的意義,如果編譯器不可信,則很難保證系統所運行邏輯的可信性。可信編譯是指編譯器在保證編譯正確的同時,提供相應的機制保證編譯對象的可信性[14],因此可信編譯理論和技術的研究也將是工控行業自主可控編程編譯工具研究的關鍵技術之一。
編程編譯工具作用于控制工程的設計、調試、運行、維護等全生命周期,對于控制對象的安全穩定運行具有重要的意義。本文對自主可控工控行業編程編譯工具的幾項關鍵技術進行了分析,提出了一些設計原則和策略,希望能給在工控行業中進行自主可控編程編譯工具研究的相關人員提供有益的幫助。