張智慧,楊 利,劉大鵬
(北京廣利核系統(tǒng)工程有限公司,北京 100094)
數(shù)字化控制系統(tǒng)DCS是核電廠的“中樞神經(jīng)”系統(tǒng),它對確保核電廠的安全、經(jīng)濟(jì)運(yùn)行起著至關(guān)重要的作用,是構(gòu)成大型核電站的關(guān)鍵技術(shù)和裝備之一。
在國內(nèi)首個實現(xiàn)商用的核電站安全級DCS平臺“和睦系統(tǒng)”中,安全控制顯示系統(tǒng)是重要的組成部分之一,主要用于對安全級設(shè)備的監(jiān)控以及對安全設(shè)備進(jìn)行開關(guān)控制。儀控工程師使用圖形組態(tài)軟件提供的圖形化建模工具進(jìn)行圖形組態(tài),工具將圖形組態(tài)自動生成圖形代碼,代碼最終被下裝到安全控制顯示裝置中,實現(xiàn)用戶組態(tài)畫面的顯示。
如何實現(xiàn)圖形組態(tài)軟件運(yùn)行于國產(chǎn)操作系統(tǒng),并且其生成的圖形代碼滿足核安全級設(shè)備顯示要求,無疑是圖形組態(tài)軟件所面臨的巨大挑戰(zhàn)。本文提出了一種基于WEB技術(shù)的圖形組態(tài)軟件實現(xiàn)方案,不僅可以實現(xiàn)圖形組態(tài)運(yùn)行于國產(chǎn)操作系統(tǒng)的目標(biāo),同時還可以將圖形組態(tài)畫面通過中間轉(zhuǎn)換過程轉(zhuǎn)換成可以在核安全級設(shè)備運(yùn)行的C代碼。由于該代碼是明文的,可以通過對該代碼進(jìn)行安全級V&V來確保生成的圖形代碼的安全性,滿足核安全級DCS要求。
核安全級圖形組態(tài)軟件主要功能是為核安全級控制顯示裝置提供組態(tài)畫面以及畫面運(yùn)行邏輯,并將組態(tài)畫面編譯成可在核安全級控制顯示裝置上運(yùn)行的可執(zhí)行程序,完成用戶圖形組態(tài)顯示的功能。圖形組態(tài)軟件主要包括兩部分:圖形組態(tài)界面部分(簡稱:圖形組態(tài)IDE)和圖形組態(tài)轉(zhuǎn)換部分(簡稱:圖形代碼生成器GCG)。
圖形組態(tài)IDE主要提供集成化的圖形組態(tài)開發(fā)環(huán)境,用戶根據(jù)需要可以通過拖拽方式在該環(huán)境中組態(tài)需要的頁面。
圖形代碼生成器GCG通過形式化的方法將經(jīng)IDE組態(tài)生成的圖形組態(tài)源文件,轉(zhuǎn)化成繪制圖形的C代碼并調(diào)用編譯器編譯成可在目標(biāo)機(jī)器上運(yùn)行的圖形組態(tài)目標(biāo)文件。代碼轉(zhuǎn)換過程采取形式化方法開發(fā),可以最大程度保證生成代碼的安全性。
圖形組態(tài)軟件整體上要滿足跨平臺運(yùn)行的要求,就需要圖形組態(tài)IDE和圖形代碼生成器GCG都要既能運(yùn)行在Windows操作系統(tǒng)中,又要可以運(yùn)行于國產(chǎn)操作系統(tǒng)中。并且圖形代碼生成器作為直接生成可運(yùn)行于安全控制顯示裝置中的軟件,必須滿足安全性的要求。后面將詳細(xì)描述組態(tài)軟件是如何實現(xiàn)跨平臺和滿足核安全級要求的。
隨著Web技術(shù)的發(fā)展,瀏覽器界面已經(jīng)成為計算機(jī)桌面的基本平臺,將瀏覽器技術(shù)運(yùn)用于組態(tài)軟件及將瀏覽器界面作為組態(tài)軟件的人機(jī)界面,可以解決圖形軟件跨平臺運(yùn)行的難題。該基于Web技術(shù)的圖形組態(tài)界面既可以運(yùn)行于Windows操作系統(tǒng),也可以運(yùn)行于國產(chǎn)中標(biāo)麒麟操作系統(tǒng),滿足跨平臺和國產(chǎn)化的要求。
基于Web技術(shù)的組態(tài)軟件架構(gòu)設(shè)計如圖2所示。
在B/S模式下采用傳統(tǒng)的三層體系結(jié)構(gòu)來設(shè)計組態(tài)軟件,并不能直接實現(xiàn)與被控對象進(jìn)行數(shù)據(jù)通信,因此基于Web技術(shù)的組態(tài)軟件采用五層體系結(jié)構(gòu)進(jìn)行設(shè)計,如圖2所示。它是在一般的三層體系結(jié)構(gòu)的基礎(chǔ)上進(jìn)行了細(xì)化,用來實現(xiàn)組態(tài)軟件的目的。各層功能如下:
圖2 圖形組態(tài)軟件架構(gòu)設(shè)計Fig.2 Graphic configuration software architecture design
1)展現(xiàn)層
它是組態(tài)軟件的用戶接口部分,是用戶與組態(tài)軟件交互信息的窗口,即人機(jī)交互界面。用戶通過該界面可以進(jìn)行工程畫面組態(tài)以及圖元對象進(jìn)行修改,編譯。
圖1 圖形組態(tài)軟件整體流程Fig.1 Graphic configuration software overall process
2)業(yè)務(wù)層
主要處理組態(tài)軟件的事務(wù)邏輯,包括圖形對象、圖層渲染、坐標(biāo)轉(zhuǎn)換、腳本編輯器、圖符管理,以及基本的IDE框架以及UI組件庫。
3)應(yīng)用支持層
主要包括異常處理、通信接口以及框架。主要是通過功能層的數(shù)據(jù)處理請求,調(diào)用相關(guān)處理程序以實現(xiàn)對數(shù)據(jù)庫的查詢、增加和刪除等功能。
4)工具鏈層
主要包括該圖形組態(tài)軟件用到的常用工具鏈。
5)語言層
主要包括圖形組態(tài)軟件用到的開發(fā)語言TypeScript。
組態(tài)軟件集成開發(fā)環(huán)境是基于Web的多窗口集成開發(fā)環(huán)境。集成環(huán)境在實現(xiàn)復(fù)雜的多文檔、多窗口、??俊⒏咏缑娴然A(chǔ)功能外,還為集成其他功能的插件的開發(fā)預(yù)留足夠的二次開發(fā)接口,以實現(xiàn)插件式集成開發(fā)環(huán)境。
圖形組態(tài)邏輯和集成開發(fā)IDE分離的實現(xiàn)方案,如圖3所示。
圖3 組態(tài)邏輯和IDE框架分離實現(xiàn)方案Fig.3 Configuration logic and IDE framework separation implementation scheme
如圖3所示,集成開發(fā)環(huán)境本身作為一套通用容器來管理頁面中各類面板和子窗口并提供對應(yīng)的API和事件,而組態(tài)編輯相關(guān)邏輯只作為集成開發(fā)環(huán)境的一個插件而存在。該架構(gòu)中集成開發(fā)環(huán)境的代碼支持以插件的形式擴(kuò)展其他功能。
該設(shè)計可以實現(xiàn)同一套軟件可以運(yùn)行于Windows操作系統(tǒng)中,也可以運(yùn)行于國產(chǎn)操作系統(tǒng)中,可以實現(xiàn)軟件的跨平臺運(yùn)行,完全實現(xiàn)軟件的國產(chǎn)化要求。
圖形代碼生成器GCG總體目標(biāo)是設(shè)計實現(xiàn)一個面向圖形組態(tài)軟件的安全代碼生成工具,將圖形組態(tài)源語言翻譯成符合安全級標(biāo)準(zhǔn)的目標(biāo)語言,通過編譯器編譯成可在目標(biāo)機(jī)器上運(yùn)行的可執(zhí)行程序。圖形代碼生成器全部采用C語言開發(fā),不依賴Windows系統(tǒng)任何庫函數(shù)和API,可以運(yùn)行于國產(chǎn)操作系統(tǒng)中,可以實現(xiàn)軟件的跨平臺運(yùn)行,完全實現(xiàn)軟件的國產(chǎn)化要求。
圖形代碼生成器GCG實現(xiàn)從源語言SAML(safety graphic markup language) 到 目 標(biāo) 語 言(FirmC)的自動代碼生成過程。其中,圖形組態(tài)源語言SAML(safety graphic markup language) 為 本 公 司 自 定義的一種圖形描述語言。以下是SAML的語法定義如下所示:Program的定義:
生成的目標(biāo)語言為FirmC,是參考國際標(biāo)準(zhǔn)(IEC60880-2006)以 及MISRA-C:2004選 取 的 一 種兼容于關(guān)鍵嵌入式軟件推薦使用的較大的C語言子集[1]。FirmC中包括C語言中大部分的類型和操作,包括基本類型、指示字運(yùn)算、函數(shù)指針、數(shù)組類型、指針類型、函數(shù)類型、結(jié)構(gòu)體類型,以及C中除非結(jié)構(gòu)化的goto、dowhile、while和switch之外的控制結(jié)構(gòu)[2]。
代碼生成器整體實現(xiàn)方案如圖4所示,由于圖形組態(tài)源語言SAML是與C程序差異太大,直接將其翻譯到C,驗證起來會非常困難。為此引入一系列中間語言,即圖4中依次經(jīng)過了I層,S層和Q層等幾種中間語言的程序形式。這樣步步簡化,降低語義描述和證明的難度。
圖4 GCG轉(zhuǎn)換過程圖Fig.4 GCG Conversion process diagram
1)從組態(tài)圖形源語言到I層語言的轉(zhuǎn)換過程
這一層的轉(zhuǎn)換負(fù)責(zé)圖形源語言,經(jīng)過讀取用戶圖形組態(tài)文件,對圖形組態(tài)文件進(jìn)行詞法分析、語法分析和一些基本的靜態(tài)檢查(拼寫錯誤、遺漏數(shù)據(jù)等)轉(zhuǎn)換到I層。
2)從I層到S層的預(yù)處理過程
這一層的轉(zhuǎn)換負(fù)責(zé)精簡輸入語法,將圖元根據(jù)用戶組態(tài)的順序進(jìn)行排序,同時消去語法不需要的,例如實例號、外部交互變量等用戶組態(tài)信息。
3)從S層到Q層的轉(zhuǎn)換過程
這一層的轉(zhuǎn)換負(fù)責(zé)將圖形組態(tài)語言中編輯框圖元轉(zhuǎn)換為圖形組態(tài)語言基本圖形元素線段或者矩形,并將對應(yīng)基本圖形元素存儲在抽象語法樹節(jié)點(diǎn)中。這一層單獨(dú)處理編輯框圖元,目的是為了能簡化后續(xù)證明。轉(zhuǎn)換過程分成兩部分,首先分拆編輯框?qū)傩?,然后將屬性轉(zhuǎn)換到抽象語法樹的基本元素節(jié)點(diǎn)。
4)從Q層到R層的轉(zhuǎn)換過程
這一層的轉(zhuǎn)換負(fù)責(zé)將圖形組態(tài)語言中高級圖元類型趨勢曲線轉(zhuǎn)換為圖形組態(tài)語言基本圖形點(diǎn)類型或者線段類型表示,并將對應(yīng)基本圖形元素存儲在抽象語法樹節(jié)點(diǎn)中。這一層單獨(dú)處理趨勢曲線,目的是為了簡化證明。轉(zhuǎn)換過程分成兩部分,首先根據(jù)時間間隔為顆粒度,將曲線邏輯分解為線段類型或者點(diǎn)類型,然后將分解出的類型存儲到抽象語法樹曲線類型所屬的節(jié)點(diǎn)。
5)從R層到T層的轉(zhuǎn)換過程
這一層的轉(zhuǎn)換將圖形組態(tài)語言中高級圖元窗口類型轉(zhuǎn)換為圖形組態(tài)語言基本圖形線段類型和矩形,并將對應(yīng)基本圖形元素存儲在抽象語法樹節(jié)點(diǎn)中。這一層單獨(dú)處理窗口類型,目的是為了簡化后續(xù)證明。具體轉(zhuǎn)換過程步驟:將窗口類型分解為矩形類型和線段類型,同時將窗口的各項屬性轉(zhuǎn)換為結(jié)構(gòu)類型存儲到抽象語法樹。
6)從T層到輕量級C語言過程
本層是轉(zhuǎn)換的最后一步,將程序由T層轉(zhuǎn)換為FirmC,將其中圖元部分轉(zhuǎn)換為輕量級C語言的函數(shù)調(diào)用方式,將涉及變量的部分按照賦值運(yùn)算的分類轉(zhuǎn)換。
形式化開發(fā)主要由下面幾部分構(gòu)成:詞法分析、語法分析、語義分析、翻譯過程[3],如圖5所示。
圖5 形式化開發(fā)框架Fig.5 Formal development framework
1)詞法分析
使用正則表達(dá)式(Regular expression)來定義構(gòu)詞規(guī)范,正則表達(dá)式是一種形式化的字符串描述方法,用很少的代碼就可以描述需要用到的字符串格式,示例如下:
可以利用開源工具Flex生成SAML語言的詞法分析程序,以識別符合上述詞法規(guī)則的SAML程序。
2)語法分析
語法分析是對SAML圖形原文件的第二次重組,SAML圖形原文件是有序的字符串,詞法分析是第一次重組,即將有序的字符串轉(zhuǎn)換成單詞序列;而語法分析則是在第一次重組的基礎(chǔ)上將單詞序列轉(zhuǎn)換為對應(yīng)的語句,并生成抽象語法樹AST,它使用的是上下文無關(guān)文法的“巴科斯范式”形式規(guī)則。巴科斯范式是一種用形式化符號精確描述程序設(shè)計語言的語法的一種形式系統(tǒng)[4]。
語法分析的示例如下:
可以利用開源工具Bison生成SAML語言的語法分析器,以識別符合上述語法規(guī)則的SAML程序。
3)語義分析
語義分析的輸入是由語法分析器生成的抽象語法樹AST,通過語法樹構(gòu)建符號表,然后結(jié)合符號表對語法樹進(jìn)行具體的語義分析,語義分析的過程包括下面幾大方面:
◇域名分析
◇類型分析
◇因果分析
◇初始化分析
整個語法樹采用前序遍歷方式,在使用前序遍歷過程中遍歷到樹中的某些關(guān)鍵節(jié)點(diǎn)時,對這些關(guān)鍵節(jié)點(diǎn)的子節(jié)點(diǎn)采用后續(xù)遍歷方式。語義檢查按照一定的優(yōu)先級順序,從域名分析到因果分析,再到類型分析,最后是初始化分析。某個節(jié)點(diǎn)檢查出錯誤并不影響其兄弟節(jié)點(diǎn)和其他節(jié)點(diǎn)的檢查。
4)翻譯過程
經(jīng)過詞法分析、語法分析和語義分析,如果沒有發(fā)現(xiàn)相應(yīng)的錯誤,即可以進(jìn)行翻譯處理。翻譯處理過程主要包括預(yù)處理、拓?fù)渑判?、高階消去等步驟,最后生成FirmC形式的程序。
針對圖形組態(tài)軟件既要滿足國產(chǎn)化問題,又要滿足生成代碼的可靠性和安全性問題。本文通過對DCS圖形組態(tài)軟件進(jìn)行研究和分析,提出了一種采用Web技術(shù)的能生成滿足核安全級設(shè)備應(yīng)用的圖形代碼的組態(tài)軟件實現(xiàn)方法,通過該方法既能解決運(yùn)行于國產(chǎn)操作系統(tǒng)又具備傳統(tǒng)DCS桌面軟件安全性要求,同時可生成滿足核安全級設(shè)備應(yīng)用的圖形顯示代碼,該技術(shù)還可應(yīng)用于航空、航天、高鐵等高安全領(lǐng)域,應(yīng)用前景非常廣闊。