張 旭,鄧志光,彭 韜,彭 浩
(中國核動力研究設(shè)計院 核反應(yīng)堆系統(tǒng)設(shè)計技術(shù)重點(diǎn)實驗室,成都 610213)
DCS的仿真主要包括3種技術(shù)路線,即純模擬(Simulation)、虛擬實物(Emulation)和實物模擬(Stimulation)。除了對實物DCS人機(jī)界面和使用的特性要求高的場合(培訓(xùn)操縱人員),采用純模擬的路線,將被仿真對象的算法邏輯翻譯到另一套仿真平臺,能夠高效地實現(xiàn)仿真效果,且開發(fā)周期短、通用性強(qiáng)于虛擬實物路線。這種方法被稱為翻譯模擬(Translation)[1,2]。
基于Simulink的翻譯模擬式虛擬DCS,其周期運(yùn)算調(diào)度有兩種實現(xiàn)形式:一種形式是僅利用Simulink作為代碼生成器,將被翻譯平臺DCS組態(tài)翻譯到Simulink上,并利用Simulink生成代碼。經(jīng)過編譯生成*.dll、*.lib或其他格式的算法文件,再周期性調(diào)用該算法文件;另一種形式是虛擬DCS周期性向Simulink發(fā)送仿真運(yùn)算指令(sim()),實現(xiàn)運(yùn)算功能。兩種形式的虛擬DCS的仿真功能均可在每周期算法運(yùn)算之后進(jìn)行處理。本文詳細(xì)描述后一種形式的虛擬DCS。
圖1 基于Simulink的翻譯式虛擬DCS系統(tǒng)架構(gòu)Fig.1 Simulink-based translational virtual DCS system architecture
采用翻譯模擬方法的虛擬DCS應(yīng)按照國家能源標(biāo)準(zhǔn)NB/T 20015—2010[3]實現(xiàn)仿真功能,具體包括仿真狀態(tài)控制、變量值管理、工況相關(guān)功能3個方面。本文開發(fā)了一種基于Simulink平臺的翻譯模擬式虛擬DCS,實現(xiàn)了上述仿真功能。
基于Simulink的翻譯模擬式虛擬DCS主要由兩部分組成:一部分是組態(tài)翻譯軟件,另一部分是管理調(diào)度軟件。前者實現(xiàn)從源平臺DCS組態(tài)邏輯到Simulink組態(tài)邏輯的翻譯,后者實現(xiàn)虛擬DCS的周期運(yùn)算與仿真功能,包括每周期同步Level 0(工藝系統(tǒng)過程模型)發(fā)來的輸入數(shù)據(jù),進(jìn)行本周期的運(yùn)算,并執(zhí)行仿真功能。
圖1、圖2分別為基于Simulink的翻譯式虛擬DCS的系統(tǒng)架構(gòu)圖與軟件流程圖。
組態(tài)翻譯完成后,算法調(diào)度階段的各步流程如圖3所示。先進(jìn)行初始化階段,讀取點(diǎn)表、設(shè)置Simulink的配置信息與路徑。然后,啟動用戶指令線程、計時線程與周期循環(huán)線程。用戶指令線程循環(huán)等待用戶輸入指令,通過設(shè)置指令標(biāo)志位與參數(shù)等形式將用戶指令傳遞給周期循環(huán)線程。周期循環(huán)線程每周期調(diào)用Simulink進(jìn)行本周期的運(yùn)算,同時按照指令標(biāo)志位和參數(shù)執(zhí)行仿真功能。計時線程對仿真時間計時,與設(shè)置快慢速折算后的周期時間比較,發(fā)送下一周期開始的指令。
圖2 基于Simulink的翻譯模擬式虛擬DCS軟件流程圖Fig.2 Simulink-based translation analog virtual DCS software flowchart
圖3 算法調(diào)度階段流程圖Fig.3 Algorithm scheduling stage flowchart
部分算法邏輯與時間相關(guān),即本次運(yùn)算結(jié)果與上一次或幾次的計算結(jié)果相關(guān)(如RS觸發(fā)器、PID算法塊、回環(huán)反饋等)。按照Simulink平臺自身的機(jī)制,當(dāng)設(shè)置的仿真時間結(jié)束時,會清空上述中間變量,因而不能簡單地通過每周期調(diào)用一次Simulink模型進(jìn)行運(yùn)算達(dá)到預(yù)期效果。在初始化階段,通過設(shè)置Simulink配置參數(shù),實現(xiàn)系統(tǒng)仿真的連續(xù)性。
以C#語言為例,通過命令行的方式,設(shè)置Simulink模型的配置參數(shù)。設(shè)置初始狀態(tài)與結(jié)束狀態(tài)為同一向量,實現(xiàn)上一次仿真的輸出的狀態(tài)值能作為下一次仿真的起始狀態(tài),實現(xiàn)多次調(diào)度的連續(xù)仿真。設(shè)置狀態(tài)名為xFinal,命令行如下:
command = "set_param(modelName" + ",'InitialState'," +"'xFinal'" + ")";
command = "set_param(modelName" + ",'FinalStateName',"+ "'xFinal'" + ")";
修改計算方式為定步長,ode45算法,其命令行如下:
command = "set_param(modelName" + ",'Solver'," +"'ode45'" + ")";
圖4 系統(tǒng)狀態(tài)切換關(guān)系圖Fig.4 System state switching graph
圖5 基于Simulink的翻譯模擬式虛擬DCS數(shù)據(jù)流圖Fig.5 Simulink-based translation analog virtual DCS data flow diagram
仿真狀態(tài)包括運(yùn)行、凍結(jié)、定時長運(yùn)行,各系統(tǒng)狀態(tài)及切換關(guān)系如圖4所示。仿真狀態(tài)由管理調(diào)度軟件控制,程序啟動時,管理調(diào)度軟件未向Simulink發(fā)出運(yùn)算指令時,Simulink處于凍結(jié)狀態(tài),可通過指令進(jìn)入運(yùn)行和定時長運(yùn)行狀態(tài)。同時,還可設(shè)置快慢速變速運(yùn)行。
可通過手動控制在運(yùn)行和凍結(jié)兩種模式之間切換,同時,可由凍結(jié)模式進(jìn)入定時長運(yùn)行模式。當(dāng)管理調(diào)度軟件發(fā)出指定時長的仿真運(yùn)算時,進(jìn)入定時長運(yùn)行模式,并在該時長結(jié)束后自動進(jìn)入凍結(jié)狀態(tài)。
變速運(yùn)行指加快仿真運(yùn)行速度或減慢仿真運(yùn)行速度。如前文所述,基于Simulink的翻譯式虛擬DCS有兩種形式,即僅使用Simulink作為代碼生成器或使用Simulink作為核心運(yùn)算單元。前者的算法提前編譯為算法文件,調(diào)用時間很短,幾乎可忽略不計,其每周期末的延時時間約等于周期時間;后者需使用Simulink運(yùn)算,調(diào)用時間較慢,而且每周期的運(yùn)算時間不能做到十分精確,因而需單獨(dú)采用計時線程計時。在上一個周期結(jié)束后,周期循環(huán)線程將被鎖住,等待計時線程發(fā)出允許下一周期開始信號。在算法復(fù)雜度正常的情況下,Simulink的運(yùn)算時間一般小于1s,具體時長應(yīng)考慮實際算法量測試而知。快慢速功能通過改變計時線程的周期計時時長實現(xiàn)。折算后的實際周期時長應(yīng)大于Simulink的實際運(yùn)算時間,否則會出現(xiàn)偏差。
管理調(diào)度軟件維護(hù)仿真系統(tǒng)對外的數(shù)據(jù)點(diǎn)表,外部系統(tǒng)對變量賦值和取值通過管理調(diào)度軟件實現(xiàn)。變量值分為原始值和超控值,原始值可被實時計算值沖刷代替,超控值不會被實時計算值覆蓋。變量值的數(shù)據(jù)結(jié)構(gòu)體包括原始值、超控標(biāo)志位、超控值。實時計算值改變原始值,不改變超控值。當(dāng)超控標(biāo)志位為True時,認(rèn)為超控值為該變量的實際使用數(shù)值。
對于賦原始值,管理調(diào)度軟件為點(diǎn)表中的該變量結(jié)構(gòu)體中的原始值位置賦值,對于賦超控值,管理調(diào)度軟件將該結(jié)構(gòu)體的超控標(biāo)志位置為True,并為結(jié)構(gòu)體中的超控值賦值。取值時,如果超控標(biāo)志位為True,則取超控值,反之取原始值。每個周期運(yùn)算開始時,管理調(diào)度軟件按照上述規(guī)則向Simulink的輸入變量存儲區(qū)寫入輸入數(shù)據(jù)。
設(shè)置變量值是通過管理調(diào)度軟件對變量賦值的過程,為了能通過Simulink以外的軟件實現(xiàn)賦值功能,此類型的變量在Simulink中用常量Const算法塊實現(xiàn)。以C#語言為例,通過如下命令行實現(xiàn)設(shè)置變量值功能:
command = "set_param('Model_name/" + VariableName +"','Value','" + VariableValue + "')";
故障模擬實現(xiàn)模擬Level 1平臺某個板卡或某個信號通路故障,導(dǎo)致其對應(yīng)的輸入輸出信號質(zhì)量位為壞的情況。
故障模擬由管理調(diào)度軟件實現(xiàn),在管理調(diào)度軟件讀取設(shè)備組態(tài)文件與變量點(diǎn)表,獲取每個變量所在板卡和通道。故障模擬時,改變該通道在管理調(diào)度軟件中的狀態(tài)記錄,同時向Simulink模型置該變量的質(zhì)量位為壞。對輸出變量而言,其質(zhì)量位會被實時計算值沖刷掉,向Simulink模型置變量質(zhì)量位信息并沒有實際意義。第三方軟件可通過管理調(diào)度軟件得到該故障信息。板卡故障可理解為批量設(shè)置的通道故障,即某張板卡的故障等效于該板卡上所有通道的變量的故障。
根據(jù)參考文獻(xiàn)[3]的定義,工況指某時刻的數(shù)據(jù)狀態(tài),又稱初始條件(Initial Condition),表示可從該狀態(tài)開始新一次的實時模擬,由用戶手動保存;回溯條件(Backtrack Condition)表示可重新設(shè)置模擬機(jī)回到的當(dāng)前過程前的某一狀態(tài),由系統(tǒng)自動保存。工況文件除非用戶主動刪除,否則永久保存;回溯條件文件在每次仿真關(guān)閉系統(tǒng)后失效。
圖5為基于Simulink的翻譯模擬式虛擬DCS的數(shù)據(jù)流圖。
虛擬DCS以Simulink為計算內(nèi)核,每個周期計算前,Simulink獲取外部程序輸入值以及Matlab的workspace的輸出變量、時間信息、時間相關(guān)變量等存儲區(qū)的信息,然后調(diào)用Simulink計算內(nèi)核執(zhí)行1個周期的仿真計算。如有保存或裝入工況指令,則將workspace的信息寫入或從物理文件讀取。周而復(fù)始實現(xiàn)周期的計算以及仿真功能。
圖6 Simulink平臺控制算法圖Fig.6 Simulink platform control algorithm diagram
保存與裝入工況功能是指系統(tǒng)當(dāng)前的狀態(tài)能夠保存在物理文件中,不因軟件停止或關(guān)機(jī)而丟失,并且能夠按照指令重新裝入系統(tǒng)。正常運(yùn)行中,Simulink計算內(nèi)核每周期更新MATLAB的workspace,并在下一周期以此為初始狀態(tài)。收到保存工況指令后,管理調(diào)度軟件令MATLAB將此時的workspace保存為*.mat格式的物理文件永久保存。裝入工況是將*.mat的系統(tǒng)狀態(tài)文件裝回workspace,并在下一周期被系統(tǒng)作為初始狀態(tài)使用,實現(xiàn)回到保存時的狀態(tài)。
在與Level 0對接成全范圍模擬機(jī)(FSS)時,部分寫入Simulink輸入變量存儲區(qū)的數(shù)值取自Level 0,并由Level 0在每周期末讀取Simulink寫入物理文件的輸出變量值。周期計算指令(定時長運(yùn)行)由Level 0提供,Level 0每周期向虛擬DCS發(fā)送1次Level 0周期時長的定時長指令運(yùn)行[4]。當(dāng)Level 0與翻譯模擬機(jī)構(gòu)成的Level 1周期不一致時,周期短的一方將多進(jìn)行1次或多次的重復(fù)計算,但這并不影響最終的仿真結(jié)果。
以簡化的百萬千瓦級壓水堆核電廠蒸汽發(fā)生器水位調(diào)節(jié)系統(tǒng)為例,驗證系統(tǒng)仿真效果??紤]到在FSS中虛擬DCS與過程模型對接的情況,蒸汽發(fā)生器水位調(diào)節(jié)系統(tǒng)拆分為Level 0 與Level 1兩部分,其中Level 1部分采用PI控制器,由源DCS平臺組態(tài)翻譯到Simulink平臺后如圖6所示,具體的翻譯過程不在本文中贅述。
與Level 0過程模型對接后形成小型FSS系統(tǒng),通過兩側(cè)的輸入輸出數(shù)據(jù)交互,形成控制回路。在水位調(diào)節(jié)過程中,進(jìn)行仿真功能的操作,包括修改變量值、凍結(jié)、保存與裝入工況、設(shè)置快慢速等。
圖7 仿真實驗結(jié)果Fig.7 Simulation results
如前文所述,僅使用Simulink作為代碼生成器的翻譯模擬式虛擬DCS可在代碼生成后獨(dú)立于Simulink使用,而本文采用的以Simulink作為核心運(yùn)算單元的技術(shù)路線需要啟動Simulink軟件,并實時向其發(fā)送指令。實驗過程中,可觀察到Simulink按周期接收指令被調(diào)用運(yùn)算。
實驗結(jié)果如圖7所示。
由實驗結(jié)果可知:仿真結(jié)果符合預(yù)期,各種仿真功能得到驗證。說明基于Simulink作為運(yùn)算內(nèi)核的翻譯模擬式虛擬DCS能夠正確地實現(xiàn)仿真功能,且具備在FSS中與過程模型對接的能力。
基于Simulink平臺的翻譯模擬式虛擬DCS借助通用的高可靠性的Simulink仿真平臺作為運(yùn)算內(nèi)核,減少了開發(fā)內(nèi)容,降低了開發(fā)成本,提高了通用性和結(jié)果認(rèn)可度。通過對Simulink運(yùn)算數(shù)據(jù)區(qū)的管理和對Simulink平臺的仿真調(diào)度,實現(xiàn)了仿真功能。