国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Simulink代碼生成器的翻譯模擬式虛擬DCS實(shí)現(xiàn)方案

2020-03-25 07:22鄧志光
儀器儀表用戶 2020年3期
關(guān)鍵詞:線程組態(tài)運(yùn)算

張 旭,鄧志光,彭 韜

(中國核動(dòng)力研究設(shè)計(jì)院 核反應(yīng)堆系統(tǒng)設(shè)計(jì)技術(shù)重點(diǎn)實(shí)驗(yàn)室,成都 610213)

0 引言

DCS 的仿真方法主要有3 種,包括純模擬(Simulation)、虛擬實(shí)物(Emulation)和實(shí)物模擬(Stimulation)[1,2]。采用純模擬的方法,將被仿真DCS 系統(tǒng)的算法邏輯翻譯到另一套仿真平臺,這種方法被稱為翻譯模擬(Translation)[3-5]。翻譯模擬與虛擬實(shí)物和實(shí)物模擬相比具有技術(shù)簡單、成本低的優(yōu)勢;同時(shí),比根據(jù)頂層設(shè)計(jì),在仿真平臺人工繪制組態(tài)圖的方法,節(jié)約了大量的工作量。

圖1 基于Simulink代碼生成器的翻譯式虛擬DCS流程圖Fig.1 Flow chart of a translating virtual DCS based on Simulink code generator

以Simulink 作為仿真平臺的仿真方法有兩種:一種是以Simulink 作為運(yùn)算內(nèi)核,通過外部程序調(diào)用Simulink 進(jìn)行運(yùn)算;另一種是以Simulink 作為組態(tài)顯示工具及代碼生成器,通過組態(tài)翻譯軟件將DCS 系統(tǒng)的組態(tài)邏輯翻譯到Simulink 上,由Simulink 生成代碼,再將其編譯成*.dll 或*.lib 算法文件,并被周期性調(diào)用,構(gòu)成基于Simulink 代碼生成器的翻譯模擬式虛擬DCS,實(shí)現(xiàn)儀控系統(tǒng)的仿真功能。本文詳細(xì)介紹第二種方法構(gòu)建的翻譯模擬式虛擬DCS。

1 系統(tǒng)設(shè)計(jì)

1.1 總體設(shè)計(jì)

系統(tǒng)主要包括兩部分,即虛擬DCS 與Simulink。虛擬DCS 實(shí)現(xiàn)組態(tài)翻譯、代碼編譯、周期調(diào)用算法運(yùn)算等功能。Simulink 實(shí)現(xiàn)組態(tài)畫面顯示、代碼生成等功能。如圖1 所示,其中,虛擬DCS 主要由兩部分組成,即組態(tài)翻譯軟件與運(yùn)算調(diào)度軟件。

基于Simulink 代碼生成器的翻譯式虛擬DCS 系統(tǒng)架構(gòu),如圖2 所示。組態(tài)翻譯軟件讀取被翻譯DCS 平臺的組態(tài)文件,按照翻譯邏輯識別,通過向Matlab 發(fā)送命令行的方式,調(diào)用Simulink 繪制算法塊與連接線,構(gòu)成組態(tài)圖;再使用Simulink 作為代碼生成器,把圖形組態(tài)轉(zhuǎn)換為C++代碼,再編譯為*.lib 格式的算法文件。

運(yùn)算調(diào)度軟件既與第三方軟件接口,實(shí)現(xiàn)外部數(shù)據(jù)指令的交互,又周期性調(diào)用算法文件實(shí)現(xiàn)邏輯運(yùn)算,是翻譯模擬式虛擬DCS 的核心模塊。

1.2 Simulink代碼生成器

Simulink 代碼生成器將每個(gè)模型(*.mdl)文件對應(yīng)生成一個(gè)頭文件(*.h)、一個(gè)源文件(*.cpp)以及一個(gè)主函數(shù)ert_main.cpp 和類型定義頭文件rtwtypes.h。

圖2 基于Simulink代碼生成器的翻譯式虛擬DCS系統(tǒng)架構(gòu)Fig.2 Simulink code generator based translation virtual DCS system architecture

模型代碼的頭文件中內(nèi)容根據(jù)算法不同而異,主要包括模型類的定義以及結(jié)構(gòu)體定義。模型類包括初始化函數(shù)(initialize())、單步運(yùn)算函數(shù)(step())、結(jié)束函數(shù)(terminate())、獲取私有時(shí)間相關(guān)模型變量函數(shù)(getRTM())、構(gòu)造函數(shù)和析構(gòu)函數(shù)、輸入成員變量、輸出成員變量、狀態(tài)成員變量、實(shí)時(shí)模型成員變量。結(jié)構(gòu)體定義包括ExtU_ModelName_T、ExtY_ModelName_T、tag_RTM_ModelName_T、DW_ModelName_T,分別表示輸入變量、輸出變量、實(shí)時(shí)模型結(jié)構(gòu)體(Real-time Model Data Structure)、算法塊狀態(tài)結(jié)構(gòu)體(Block states)。

Simulink 模型分為Level 1 與Level 0 兩部分,因而代碼也分為Level 1 與Level 0 兩部分。代碼生成過程可由Simulink 自動(dòng)完成。

1.3 算法文件編譯與調(diào)用

生成代碼的編譯過程可借助Visual Studio 等集成開發(fā)環(huán)境實(shí)現(xiàn),也可使用GNU-gcc 套件,通過Makefile 來描述工程文件的編譯順序、編譯規(guī)則,并集成在運(yùn)算調(diào)度軟件中。Simulink 模型代碼編譯生成文件的配置類型選擇*.lib 靜態(tài)鏈接庫。編譯后的Level 1 與Level 0 為兩個(gè)靜態(tài)鏈接庫。

以C++語言編寫的運(yùn)算調(diào)度軟件為例,調(diào)度函數(shù)引用模型代碼的頭文件并加載靜態(tài)鏈接庫。根據(jù)模型代碼引用的頭文件另外再包含rtwtypes.h 等頭文件。根據(jù)使用到的算法不同,可能用到其它頭文件類型,如rtw_continuous.h、rtw_solver.h。以模型名為Model 為例,具體實(shí)現(xiàn)如下:

#include " Model.h"

#include " Model_types.h"

#pragma comment(lib,"Model.lib")

使用Level 1 或Level 0 模型時(shí)可采用靜態(tài)類的形式,如:

static level1ModelClass Level1_Obj;

然后,可通過對該類的成員變量賦值、調(diào)用初始化函數(shù)(initialize())與單步運(yùn)算函數(shù)(step())實(shí)現(xiàn)算法調(diào)用。

2 功能實(shí)現(xiàn)

2.1 周期調(diào)度

圖3 Simulink平臺算法庫Fig.3 Simulink platform algorithm library

圖4 組態(tài)邏輯翻譯示例圖Fig.4 Example of configuration logic translation

軟件的主要流程包括組態(tài)翻譯、算法生成與調(diào)度兩部分,這兩部分相對獨(dú)立。組態(tài)翻譯過程在本文中不詳細(xì)闡述,算法生成過程在上文中已有描述。以簡單的邏輯示例該過程,圖3 為Simulink 平臺建立的算法庫。圖4(a)、圖4(b)分別表示翻譯前的DCS 系統(tǒng)組態(tài)與翻譯到Simulink 平臺的邏輯圖。

算法周期調(diào)度部分流程圖,如圖5 所示。

圖5 算法周期調(diào)度流程圖Fig.5 Algorithm cycle scheduling flowchart

軟件先進(jìn)入初始化階段,讀取Level 1 與Level 0 的IO清單,然后讀取Level 1 與Level 0 變量的對點(diǎn)表。IO 清單包括了包含的變量、變量類型、所在機(jī)箱板卡通道號等信息。對點(diǎn)表分為Level 1 輸出至Level 0 的對點(diǎn)表與Level 0輸出至Level 1 的對點(diǎn)表,該表標(biāo)志了兩個(gè)系統(tǒng)間的變量對應(yīng)關(guān)系,在周期運(yùn)行的數(shù)據(jù)同步過程中分別從輸出端向輸入端進(jìn)行數(shù)據(jù)同步[6,7]。

用戶指令線程等待用戶輸入的仿真狀態(tài)改變或執(zhí)行仿真功能的指令。對于退出指令,設(shè)置退出標(biāo)志位,退出本循環(huán)以及其他線程,并結(jié)束程序;對于其他指令,改變記錄仿真狀態(tài)或工況等參數(shù)的靜態(tài)變量的內(nèi)容,實(shí)現(xiàn)將該信息傳遞至其他線程。

周期循環(huán)線程周期性循環(huán),每周期執(zhí)行用戶輸入的仿真功能并進(jìn)行本周期的算法運(yùn)算。在判斷到退出標(biāo)志位時(shí)退出。

Level 0 與Level 1 的數(shù)據(jù)交互通過運(yùn)算調(diào)度軟件實(shí)現(xiàn),閉環(huán)控制的原理與虛擬DCS 的閉環(huán)控制實(shí)現(xiàn)方式如圖6 所示。運(yùn)算調(diào)度軟件解析Level 0 與Level 1 的*.lib 格式的算法文件,生成Level 0 與Level 1 的對象,分別代表反應(yīng)堆與一二回路模型和DCS 控制算法。在非凍結(jié)模式下,運(yùn)算調(diào)度軟件在每周期之初根據(jù)對點(diǎn)表將其中Level 1 去往Level 0 的輸出賦值給Level 0 的輸入,將Level 0 去往Level 1 的輸出賦值給Level 1 的輸入。

2.2 仿真功能

圖6 閉環(huán)控制原理圖與翻譯式虛擬DCS閉環(huán)控制原理圖Fig.6 Schematic diagram of closed-loop control and schematic diagram of translated virtual DCS closed-loop control

可執(zhí)行的仿真功能包括:仿真模式控制類的運(yùn)行、凍結(jié)、加減速運(yùn)行功能,以及仿真指令類的設(shè)置變量值、獲取變量值、保存工況、裝入工況、保存回溯條件、裝入回溯條件、變量超控、通道故障設(shè)置等功能。

運(yùn)行和凍結(jié)狀態(tài)切換在用戶指令線程接收,通過靜態(tài)變量傳遞給周期循環(huán)線程,周期循環(huán)線程在判斷是凍結(jié)狀態(tài)時(shí),不執(zhí)行本周期的Level 1 與Level 0 的數(shù)據(jù)交互和算法運(yùn)算,直接進(jìn)行指令判斷執(zhí)行,并等待本周期時(shí)間結(jié)束。加減速功能通過用戶指令線程接收速度因子,傳遞給周期循環(huán)線程,以此計(jì)算本周期總時(shí)間。由于算法運(yùn)算的速度很快,因而實(shí)際上速度因子改變的是本周期算法及其它功能執(zhí)行之后的等待時(shí)間。

設(shè)置變量值、獲取變量值通過解析Level 1 與Level 0的頭文件,計(jì)算待設(shè)置值或獲取值變量在Level 1 與Level 0靜態(tài)類中的偏移地址,通過指針操作實(shí)現(xiàn)設(shè)置值或取值。

保存工況、保存回溯條件功能通過將當(dāng)前時(shí)刻的Level 1 與Level 0 的靜態(tài)類的內(nèi)容保存至物理文件,實(shí)現(xiàn)對該工況的保存。其內(nèi)容包括輸入數(shù)據(jù)、輸出數(shù)據(jù)、算法中間數(shù)據(jù)(如時(shí)間相關(guān)算法塊的中間數(shù)據(jù))等。裝入工況、裝入回溯條件的過程與上述過程相反,將數(shù)據(jù)從物理文件寫入Level 1 與Level 0 的靜態(tài)類。

變量超控功能是指中斷或修改Level 0 與Level 1 之間的輸入輸出數(shù)據(jù)。設(shè)置了超控狀態(tài)的變量,在Level 1 與Level 0 交互的過程中,使用超控的變量值代替對方發(fā)來或發(fā)送給對方的數(shù)據(jù)值,以實(shí)現(xiàn)超控功能。

通道故障設(shè)置根據(jù)Level 1 點(diǎn)表中配置的每個(gè)變量所在的機(jī)箱、板卡、通道將該變量與虛擬的硬件設(shè)備綁定,設(shè)置通道故障時(shí),其上變量的質(zhì)量位會置壞,實(shí)現(xiàn)故障的模擬。

3 實(shí)例分析

圖7 蒸汽發(fā)生器水位控制系統(tǒng)回路圖Fig.7 Circuit diagram of steam generator water level control system

圖8 工程師站組態(tài)邏輯圖Fig.8 Configuration logic diagram of the engineering station

圖9 Simulink平臺的Level 1控制邏輯圖Fig.9 Level 1 control logic diagram of Simulink platform

以簡化的百萬千瓦級壓水堆核電廠蒸汽發(fā)生器水位控制系統(tǒng)為例,驗(yàn)證系統(tǒng)仿真效果。圖7 為蒸汽發(fā)生器水位控制系統(tǒng)回路圖。

該控制回路可分為Level 1 與Level 0 兩部分。Level 1組態(tài)邏輯在工程師站實(shí)現(xiàn)。以中國核動(dòng)力研究設(shè)計(jì)院研制的龍鱗(NASPIC)系統(tǒng)為例,在其工程師站繪制Level 1組態(tài)邏輯圖,如圖8 所示。

通過組態(tài)翻譯軟件將其自動(dòng)地翻譯到Simulink 平臺,形成圖9 所示的Simulink 平臺的Level 1 控制邏輯圖。

Level 0 部分的Simulink 模型由人工在Simulink 平臺繪制,如圖10 所示。

圖10 Level 0部分Simulink模型Fig.10 Simulink model of Level 0

圖11 仿真實(shí)驗(yàn)結(jié)果Fig.11 Simulation experiment results

如前文所述,Level 1 與Level 0 分別由運(yùn)算調(diào)度軟件調(diào)度,構(gòu)成閉環(huán)仿真系統(tǒng)。仿真實(shí)驗(yàn)結(jié)果如圖11 所示。仿真時(shí)水位設(shè)定值0mm 代表額定功率下水位穩(wěn)定的相對值,而非實(shí)際水位。在蒸汽發(fā)生器水位調(diào)節(jié)過程中,驗(yàn)證凍結(jié)、運(yùn)行、設(shè)置變量值、保存與裝入工況等功能,并且能觀察到虛假水位現(xiàn)象。結(jié)果符合預(yù)期。

4 結(jié)論

基于Simulink 代碼生成器的翻譯模擬式虛擬DCS 通過映射翻譯的方法,將DCS 平臺的組態(tài)邏輯翻譯到Simulink,再借助Simulink 作為代碼生成器,將邏輯轉(zhuǎn)換為C++代碼,再由編譯器編譯為*.lib 格式的算法文件,被虛擬DCS 周期調(diào)用。這種借助Simulink 作為代碼生成器的方法降低了軟件開發(fā)工作量,提高了代碼安全可靠性。在周期循環(huán)中,執(zhí)行仿真指令,實(shí)現(xiàn)仿真功能,并且能夠周期性與Level 0進(jìn)行數(shù)據(jù)交互,滿足全范圍模擬機(jī)的要求。

猜你喜歡
線程組態(tài)運(yùn)算
重視運(yùn)算與推理,解決數(shù)列求和題
基于C#線程實(shí)驗(yàn)探究
基于PLC及組態(tài)技術(shù)的恒溫控制系統(tǒng)開發(fā)探討
有趣的運(yùn)算
基于國產(chǎn)化環(huán)境的線程池模型研究與實(shí)現(xiàn)
線程池調(diào)度對服務(wù)器性能影響的研究*
基于PLC和組態(tài)的智能電動(dòng)擰緊系統(tǒng)
“整式的乘法與因式分解”知識歸納
鑄造行業(yè)三維組態(tài)軟件的應(yīng)用
基于PLC和組態(tài)的新型回轉(zhuǎn)類測試設(shè)備的研制