張旭,黃鵬,彭韜,劉全東,張子鵬,李曉龍,李俊
(中國(guó)核動(dòng)力研究設(shè)計(jì)院核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,成都610213)
核電廠安全級(jí)DCS 實(shí)現(xiàn)事故工況下緊急停堆和啟動(dòng)專設(shè)安全設(shè)施的重要功能,正常運(yùn)行時(shí)是“不動(dòng)”的,因此無(wú)法直接判斷系統(tǒng)是否存在故障。通過(guò)系統(tǒng)的自診斷功能能夠覆蓋系統(tǒng)的絕大部分故障,部分未能覆蓋的可通過(guò)定期試驗(yàn)完成,即定期試驗(yàn)是為探測(cè)安全級(jí)DCS 的故障和檢查其可運(yùn)行性,按計(jì)劃的間隔時(shí)間所進(jìn)行的試驗(yàn)。其中T2 試驗(yàn)是驗(yàn)證邏輯功能的正確性,一般基于編寫(xiě)的腳本逐步進(jìn)行,通過(guò)給定輸入值的組合,觀察輸出值是否符合預(yù)期,以此來(lái)驗(yàn)證邏輯功能的正確性,T2 腳本示例如表1 所示。T2 腳本設(shè)計(jì)與執(zhí)行過(guò)程如圖1 所示。
純模擬(Simulation)仿真技術(shù)是指,采用不同于原系統(tǒng)的另一套開(kāi)發(fā)環(huán)境下的建模技術(shù)來(lái)復(fù)現(xiàn)參考機(jī)組的系統(tǒng)或子系統(tǒng)[1]。純模擬仿真技術(shù)中可采用翻譯模擬(Translation)的方式,利用翻譯軟件實(shí)現(xiàn)工程應(yīng)用文件在不同平臺(tái)中的映射轉(zhuǎn)移。利用翻譯軟件實(shí)現(xiàn)工程應(yīng)用文件的跨平臺(tái),可輔助進(jìn)行測(cè)試腳本輸出預(yù)期值的計(jì)算。

表1 T2 腳本示例
定期試驗(yàn)?zāi)_本由多列測(cè)試步驟組成的,每一步包含輸入值、輸出預(yù)期值與輸出實(shí)測(cè)值。輸出預(yù)期值在測(cè)試之前填寫(xiě),是輸入值經(jīng)過(guò)算法運(yùn)算的理論結(jié)果。輸出實(shí)測(cè)值由上位機(jī)帶動(dòng)下位機(jī)進(jìn)行計(jì)算,并與輸出預(yù)期值比較,生成定期試驗(yàn)結(jié)果。
工程師站(Maintenance Station,MTS)的算法組態(tài)信息包含儀控系統(tǒng)應(yīng)實(shí)現(xiàn)的算法,通常以算法塊連接的形式展現(xiàn)。定期試驗(yàn)?zāi)_本輔助設(shè)計(jì)軟件(Script Assisting Design Software,SAD)應(yīng)能夠通過(guò)讀取工程師站的算法組態(tài)信息,結(jié)合預(yù)設(shè)的定期試驗(yàn)設(shè)計(jì)原則,考查設(shè)計(jì)人員設(shè)定的輸出點(diǎn),列出影響該輸出點(diǎn)的輸入點(diǎn)集合。設(shè)計(jì)人員通過(guò)分析算法邏輯,設(shè)計(jì)上述輸入點(diǎn)的數(shù)值集合,形成測(cè)試步驟。由SAD 計(jì)算腳本輸出預(yù)期值,完成腳本設(shè)計(jì)。
針對(duì)2.1 小節(jié)所述軟件需求,設(shè)計(jì)基于SAD 的腳本輔助設(shè)計(jì)流程。設(shè)計(jì)人員在工程應(yīng)用軟件中選擇待考察的系統(tǒng)與待考察輸出點(diǎn)。SAD 軟件解析MTS 編輯的工程應(yīng)用軟件,分析算法塊連線關(guān)系,匯總與待考察輸出點(diǎn)相關(guān)的輸入點(diǎn)信息。
SAD 將影響輸出點(diǎn)的所有算法邏輯映射到Simulink 軟件平臺(tái),形成Simulink 算法文件。SAD 的核心計(jì)算模塊基于Simulink 軟件實(shí)現(xiàn)。Simulink 是Math-Works 公司MATLAB 軟件的子軟件,實(shí)現(xiàn)控制系統(tǒng)的仿真功能,廣泛應(yīng)用于科學(xué)研究、工程設(shè)計(jì)等工作中,可靠性與行業(yè)認(rèn)可度高。由設(shè)計(jì)人員根據(jù)SAD 提取出的輸入點(diǎn)集合與影響該輸出點(diǎn)的算法設(shè)計(jì)腳本的步驟與輸入值。再返回SAD 軟件,將設(shè)計(jì)人員設(shè)定的輸入值逐步代入Simulink 軟件,計(jì)算輸出預(yù)期值,寫(xiě)入腳本文件,完成腳本的設(shè)計(jì)過(guò)程。基于SAD 的腳本輔助設(shè)計(jì)流程圖如圖2 所示。
為實(shí)現(xiàn)2.2 小節(jié)所述的軟件功能設(shè)計(jì),SAD 的架構(gòu)分為4 個(gè)模塊,包括輸入讀取模塊、邏輯分析模塊、映射算法模塊、計(jì)算與結(jié)果導(dǎo)出模塊。
(1)輸入讀取模塊
不同平臺(tái)工程師站繪制的工程應(yīng)用軟件的格式不同。輸入讀取模塊實(shí)現(xiàn)工程應(yīng)用軟件組態(tài)文件格式向SAD 定義的數(shù)據(jù)格式的轉(zhuǎn)換。從各種工程師站繪制的不同格式的組態(tài)文件中,將信息抽離出來(lái),并存入SAD自定義格式的“圖(Graph)”結(jié)構(gòu)中。

圖2 基于SAD的腳本輔助設(shè)計(jì)流程
從工程應(yīng)用軟件組態(tài)文件中可以解析出控制站數(shù)量、每個(gè)控制站每種卡件的數(shù)量、變量在板卡中的分配信息,每頁(yè)組態(tài)圖的算法塊連接關(guān)系等。組態(tài)圖中的算法塊稱為節(jié)點(diǎn)。節(jié)點(diǎn)包括三種:接口圖符、算法塊、變量(中間變量、輸入輸出變量、參數(shù)變量)。
Graph 結(jié)構(gòu)是節(jié)點(diǎn)和連接關(guān)系兩種信息的集合。節(jié)點(diǎn)記錄了組態(tài)文件中每個(gè)節(jié)點(diǎn)的信息,連接關(guān)系記錄了節(jié)點(diǎn)之間的連接關(guān)系。這兩種數(shù)據(jù)信息實(shí)現(xiàn)了將組態(tài)文件信息的重構(gòu)。
以C#語(yǔ)言實(shí)現(xiàn)SAD 為例,定義結(jié)構(gòu)體Item、Line分別表示一個(gè)算法塊和一條連接線,于是與考察輸出點(diǎn)相關(guān)的一套算法邏輯的相關(guān)信息可用兩個(gè)鏈表記錄,即:
public static List
public static List
輸入讀取模塊是對(duì)items、Lines 的填充。對(duì)于二進(jìn)制格式存儲(chǔ)的源文件,可采用特定結(jié)構(gòu)體解析的方式讀取其內(nèi)容,對(duì)于不需要解析的源文件格式,可直接提取其內(nèi)容,并填充items、Lines。
在系統(tǒng)架構(gòu)設(shè)計(jì)層面,輸入讀取模塊實(shí)現(xiàn)了核心部分與被讀取文件的實(shí)質(zhì)性分離,即無(wú)論源文件是何種格式,都可通過(guò)只修改將輸入讀取模塊實(shí)現(xiàn)軟件的遷移,增強(qiáng)通用性。
(2)邏輯分析模塊
邏輯分析模塊對(duì)輸入讀取模塊得到的運(yùn)算結(jié)果進(jìn)行分析,對(duì)每個(gè)輸出變量進(jìn)行分析,從該輸出變量出發(fā),按照組態(tài)邏輯圖的連接關(guān)系,逐層遞歸尋找與輸出變量相關(guān)的算法塊。與輸出變量相關(guān)的算法塊形成樹(shù)狀(Tree)結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu),Tree 結(jié)構(gòu)從某個(gè)輸出點(diǎn)開(kāi)始追溯,記錄影響它的每個(gè)輸入點(diǎn)及其影響方式,即記錄每條邏輯鏈路經(jīng)過(guò)的算法塊。當(dāng)算法邏輯在組態(tài)文件中出現(xiàn)跨頁(yè)情況時(shí),由邏輯分析模塊將頁(yè)間邏輯連接起來(lái)。當(dāng)出現(xiàn)環(huán)形或兩條線路匯合的情況時(shí),交匯處的算法塊分別記錄在兩條支線上,并在映射算法模塊中予以合并。
該模塊具體功能由以下函數(shù)實(shí)現(xiàn):
publicvoidGetTree(string Start_Point);
publicList
publicvoidGet_Tree_After_Vertex(TreeNode_NewcurrNode,Vertex Start_Vertex);
publicList

圖3 邏輯分析模塊執(zhí)行過(guò)程
在查找相連圖符時(shí),應(yīng)注意只查詢由一個(gè)圖符的輸出端口連向另一圖符的輸入端口連線,避免出現(xiàn)死循環(huán)的情況。
(3)映射算法模塊
為了在Simulink 平臺(tái)上重構(gòu)組態(tài)邏輯算法,需在Simulink 平臺(tái)先預(yù)先建立合適的算法庫(kù)、建立映射規(guī)則、完成算法塊和連接關(guān)系的映射。映射算法模塊實(shí)質(zhì)上起到了仿真技術(shù)中翻譯軟件的作用。
Simulink 的算法庫(kù)應(yīng)包含工程應(yīng)用軟件中可能用到的所有算法塊,按照一一對(duì)應(yīng)的映射規(guī)則將算法塊映射到Simulink 平臺(tái)。算法塊可使用Simulink 平臺(tái)自帶的算法塊進(jìn)行封裝,也可用S 函數(shù)的形式實(shí)現(xiàn)每種可能出現(xiàn)的算法塊,并集成在Simulink 中新建的算法庫(kù)Library。
SAD 驅(qū)動(dòng)Simulink 進(jìn)行自動(dòng)畫(huà)圖,即自動(dòng)地在Simulink 中復(fù)現(xiàn)組態(tài)邏輯。映射過(guò)程包括兩步,首先是在邏輯分析模塊提取的樹(shù)狀結(jié)構(gòu)中按層級(jí)逐層將算法塊映射到Simulink 平臺(tái),然后按照工程應(yīng)用軟件的連接關(guān)系自動(dòng)地將算法塊在Simulink 平臺(tái)重新連接。
另外,Simulink 軟件的變量沒(méi)有“質(zhì)量位”的概念,所以對(duì)于工程應(yīng)用軟件中變量包含質(zhì)量位的情況(值與質(zhì)量位組合),SAD 需要用兩個(gè)變量來(lái)表示,算法庫(kù)中該算法塊的端口也應(yīng)增加。

圖4 基于Simulink平臺(tái)的算法映射過(guò)程

圖5 Simulink平臺(tái)算法庫(kù)
(4)計(jì)算與結(jié)果導(dǎo)出模塊
基于映射到Simulink 平臺(tái)的組態(tài)算法以及輸入值的組合,可進(jìn)行仿真,計(jì)算出對(duì)應(yīng)的輸出值。計(jì)算與結(jié)果導(dǎo)出模塊實(shí)現(xiàn)將計(jì)算結(jié)果導(dǎo)出的某種文件格式的功能。該模塊相對(duì)于內(nèi)核部分是獨(dú)立的,即對(duì)于不同的導(dǎo)出格式或樣式的腳本文件,只需要修改該模塊即可,保證了內(nèi)核部分的通用性。
基于Microsoft Excel 編寫(xiě)的測(cè)試腳本可通過(guò)引用Microsoft Excel 14.0 Object Library 庫(kù)文件進(jìn)行讀寫(xiě)操作。C#語(yǔ)言的實(shí)現(xiàn)形式為:
usingMicrosoft.Office.Interop.Excel;
SAD 與Simulink、Excel 三種之間的聯(lián)合交互關(guān)系如圖6 所示。

圖6 SAD與Simulink、Excel交互關(guān)系圖
以中國(guó)核動(dòng)力研究設(shè)計(jì)院研制的核安全級(jí)儀控系統(tǒng)NASPIC 平臺(tái)為例進(jìn)行實(shí)例分析。NASPIC 平臺(tái)的工程師站軟件為NASPES,腳本文件采用Excel 編寫(xiě)。
以某簡(jiǎn)單邏輯為例。4 個(gè)數(shù)字量輸入信號(hào)經(jīng)過(guò)4取2 表決判斷后,取反,形成輸出值,驅(qū)動(dòng)具體設(shè)備的開(kāi)關(guān)。

圖7 組態(tài)示例
SAD 運(yùn)行讀取NASPES 的工程應(yīng)用軟件,形成的Simulink 平臺(tái)模型如圖8。

圖8 Simulink平臺(tái)上自動(dòng)生成的模型
由于該模型僅用于做算法仿真計(jì)算,不作為用戶觀察分析使用,因而在圖符的坐標(biāo)大小與坐標(biāo)擺放中,僅使用最簡(jiǎn)單的不重疊原則即可。
整理后的該圖如圖9 所示。

圖9 整理后的Simulink平臺(tái)上的模型
對(duì)于非簡(jiǎn)單樹(shù)狀結(jié)構(gòu),本文所述的SAD 處理流程仍具有良好的仿真效果。
為便于觀察,本文這里使用不考慮質(zhì)量位模式,并將仿真結(jié)果使用Simulink 平臺(tái)的Display 模塊直接顯示仿真結(jié)果。

圖10 一種非簡(jiǎn)單樹(shù)狀結(jié)構(gòu)情況
當(dāng)四個(gè)DI 值分為給定1、1、0、1 時(shí),自動(dòng)生成下圖,計(jì)算結(jié)果為0,正確。

圖11 仿真結(jié)果驗(yàn)證1
當(dāng)四個(gè)DI 分別給0、1、0、0 時(shí),自動(dòng)生成下圖,計(jì)算結(jié)果為1,正確。

圖12 仿真結(jié)果驗(yàn)證2
按照完整的流程,以某設(shè)備驅(qū)動(dòng)的定期試驗(yàn)?zāi)_本為例。截取形成部分腳本如表2。
本文所述采用純模擬仿真的技術(shù)路線可在其他需要脫離實(shí)體下位機(jī)進(jìn)行組態(tài)邏輯運(yùn)算功能的情況下得到更廣泛的應(yīng)用。該方法根據(jù)定期試驗(yàn)具體需求進(jìn)行適當(dāng)仿真,相較于虛擬實(shí)物(Emulation)[1-3]等仿真技術(shù)路線,該方法具有簡(jiǎn)單快捷的優(yōu)勢(shì),對(duì)仿真運(yùn)行環(huán)境要求低,實(shí)現(xiàn)僅需MATLAB 軟件即可。
本文設(shè)計(jì)的腳本輔助設(shè)計(jì)方法中,仍有一個(gè)關(guān)鍵步驟需要人工參與,即腳本的中每一步的輸入值確定的過(guò)程。由于該步驟情況過(guò)多,同時(shí)過(guò)于依賴人的思考,以至于不同的設(shè)計(jì)人員設(shè)計(jì)的腳本也不盡相同,因而難以抽象出較為確定的邏輯語(yǔ)言。而由于以往的核安全級(jí)儀控系統(tǒng)工程項(xiàng)目數(shù)量過(guò)小,積累的經(jīng)過(guò)驗(yàn)證正確的腳本數(shù)量遠(yuǎn)遠(yuǎn)不足以采用大數(shù)據(jù)的思想智能化的解決該問(wèn)題。一個(gè)較為理想的解決方法是采用對(duì)開(kāi)關(guān)量枚舉、對(duì)模擬量讀取閾值的辦法。該方法具有可行性,但會(huì)導(dǎo)致腳本過(guò)長(zhǎng)。故本文采用半自動(dòng)方法設(shè)計(jì)整套體系,將影響考察系統(tǒng)的輸入點(diǎn)采集與仿真計(jì)算兩個(gè)步驟自動(dòng)化,節(jié)約工程設(shè)計(jì)人員的時(shí)間降低錯(cuò)誤率。

表2 腳本結(jié)果