【干貨】操作手冊 | 基于 Simulink 模型生成 RT-LAB 兼容的實時保護代碼庫
引言
隨著國家“3060”雙碳目標不斷推進,我國正穩(wěn)步快速建設新型電力系統(tǒng),高比例的新能源不斷接入電網(wǎng)。新能源,如風、光、儲能,均須通過逆變器連接到電力系統(tǒng)。作為新能源發(fā)電的核心,結網(wǎng)逆變器的控制和保護策略在電網(wǎng)安全穩(wěn)定運行中扮演著關鍵角色,因此對結網(wǎng)逆變器控制保護特性及其對電網(wǎng)影響的驗證和測試尤為重要。
目前,對新能源場站以及高比例新能源接入的電網(wǎng)仿真建模沒有標準化的國際化要求。傳統(tǒng)的建模方法為使用通用控制器來模擬新能源場站;但為了進一步提高仿真控制器的精度,大部分的制造商都開始使用控制器的真實代碼來開發(fā)EMT“實碼”模型,這類控制器模型更為精確,也更能體現(xiàn)各廠家獨有的參數(shù)調校能力。OPAL-RT的控制保護代碼解決方案是將各逆變器廠商的控制代碼通過打包加密放置于RT-LAB中運行,能夠更真實具體地反映不同廠家、不同型號逆變器的真實控制特性,并且有助于研究新能源場站內、場站之間、場站和傳統(tǒng)電力系統(tǒng)控制保護的相互作用及影響。
小編近期梳理了針對在RT-LAB實時仿真平臺上,特別是在新一代OPAL-RT Linux操作系統(tǒng)上實現(xiàn)逆變器控制代碼打包加密的方法。

▲?(下載方式在文末)
操作手冊目錄
1. 文檔介紹
2. 軟硬件需求
3. 與模型連續(xù)態(tài)模塊有關的約束設置
4. 生成S-FUNCTION庫
5. 代碼編譯(用于隱藏源代碼)
6.?將生成的保護代碼集成到對應的RT-LAB工程中
附錄
附錄1:生成適配包含調用子S-Function的S-Function文件
附錄2:MobaXterm的安裝和配置
01 文檔介紹
本文檔具體介紹了以下操作步驟:
01?基于 Simulink 模型生成和創(chuàng)建對 RT-LAB 兼容的 S-Function 庫 (xxx_rtlabsfcn.mdl);
02?編譯生成的 S-Function 庫為對應仿真機操作系統(tǒng)的保護代碼文件 (.a, .so);
03?將生成的保護代碼集成到對應的 RT-LAB 工程中。

02 軟硬件需求
01?基于Windows的上位機主機
02?OPAL-RT仿真機

03?MATLAB/Simulink
Simulink Coder toolbox是生成保護代碼的必備工具包,并且Simulink模型中使用的任何toolbox都必須與Simulink Coder 工具包兼容。
供應商和S-Function的集成商必須使用相同版本(例如R2016b)和架構(例如64位)的MATLAB/Simulink。
*關于如何配置virtual machine,請參照:?https://www.opal-rt.com/support-knowledge-?base/?article=AA-01281
03?與模型連續(xù)態(tài)模塊有關的約束設置
當從包含連續(xù)態(tài)模塊的Simulink模型生成C代碼時,其生成結果將包含在模型中配置的具體固定步長模塊(基本采樣時間)的運算結果。最常見的連續(xù)態(tài)模塊位于Simulink/Continuous和Simulink/Discontinuities庫中。

因此,為了確保成功生成并集成S-Function庫,供應商和集成商必須就S-Function的采樣率達成一致。如圖3所示舉例,Simulink模型的系統(tǒng)離散求解器仿真步長為30us。

04?生成S-FUNCTION庫
本手冊將以RT-LAB提供的ARTEMIS雙饋風機并網(wǎng)demo:?
ssn_DFIM_wind_turbine_with_crowbar.mdl 為例,將其對應的轉子控制部分生成為兼容RT-LAB的S-FUNCTION庫。


1)在MATLAB命令行窗口中,鍵入以下命令以設置默認編譯器。用戶可以在此選擇MATLAB檢測到的任意編譯器。mex –setup推薦使用Visual Studio編譯器,尤其是被轉換的模塊中還調用其他的子S-Function庫。否則MATLAB會需要其調用的子S-Function源代碼。這在某些知識產(chǎn)權保護的情況下并不可行。
*注意:mex 命令因MATLAB的不同版本而異。請參閱MathWorks的文檔,以便正確配置編譯器。
2)將MATLAB中的當前文件夾切換到目標Simulink模型的文件夾路徑下,然后打開模型。
3)將以下隨手冊提供的文件,復制到Simulink模型所在的MATLAB路徑文件夾中。
create_rtlabsfcn.m
rtlabsfcn.tmf
4)在Simulink中左鍵單擊選中將要生成S_Function的子系統(tǒng)。然后,在MATLAB命令行窗口中,輸入命令:create_rtlabsfcn
*注意:如需要生成的部分不是子系統(tǒng),需要在選擇所有需要生成的模塊后,右鍵在對應的菜單欄中選擇“Create Subsystem”來生成子系統(tǒng)。

5)確保所選子系統(tǒng)在命令行窗口的反饋正確顯示,輸入Y,然后按Enter鍵執(zhí)行。

6)在上步操作執(zhí)行完成后,一個新的Simulink窗口會自動彈出,對應的是生成的目標S-Function模塊。

7)確保在第5)步腳本執(zhí)行結束時在MATLAB命令窗口中看到以下消息。

8)上述步驟成功完成后,目標Simulink模型文件夾下會生成對應的 rtlabsfcn_package 和 sfcn_rtw 文件夾。如圖10所示:

9)將目標Simulink模型另存為不同名的Simulink模型以用于庫集成驗證。
然后將步驟6)中生成的S-Function庫模塊復制到新建的simulink模型中,隨即替換掉之前選中的子系統(tǒng),并確保新的集成模型能離線運行。

05?代碼編譯(用于隱藏源代碼)
在成功生成了S-Function庫模塊后,供應商需要對其進行編譯以保護知識產(chǎn)權。編譯的具體步驟會因仿真機操作系統(tǒng)的不同而略有區(qū)別。本手冊提供的相關生成文檔均是針對OPAL-RT Linux(x64-based)仿真機系統(tǒng)。
*注意:在本節(jié)中,Rotor_Control?是本手冊例子中對應S-Function庫的名稱。用戶需要替換自己的庫名稱以及相關文件夾路徑到后續(xù)代碼中。
為了使用OPAL-RT實時仿真機系統(tǒng)來編譯保護代碼,用戶必須能夠通過上位機主機訪問OPAL-RT仿真機的Linux操作系統(tǒng)?;蛘甙凑沾薑B介紹的步驟,在上位機主機配置虛擬機,來模擬OPAL-RT實時仿真機的Linux操作系統(tǒng):
https://www.opal-rt.com/support-knowledge-base/?article=AA-01281
1)?參考附錄2安裝和配置MobaXterm。如果用戶更熟悉其他SSH/SFTP客戶端,也可以使用其他客戶端來遠程訪問OPAL-RT實時仿真機的操作系統(tǒng)。
2)將文件夾 Rotor_Control_sfcn_rtw 通過MobaXterm拖到仿真機的系統(tǒng)路徑下。

3)?在MobaXterm終端中,輸入以下命令:
cd home/root/Rotor_Control_sfcn_rtw?
chmod 777 Rotor_Control.sh
./Rotor_Control.sh

*注意:用戶需將上述代碼適配為其對應的文件夾路徑與對應的.sh文件名。
4)?確保在MobaXterm腳本執(zhí)行結束時看到以下消息,這樣保護代碼文件就成功生成了。

5)?使用MobaXterm進入/home/root/Rotor_Control_sfcn_rtw?文件夾,找到對應的Rotor_Control_sf_linux_x86.a?的文件(如果在之前的步驟顯示成功生成,但是未看到.a文件,可以點擊窗口上方的刷新按鈕來刷新文件夾顯示的文件)。通過MobaXterm將其拖放到Windows上位機上的Rotor_Control_rtlabsfcn_package?文件夾中。

*注意:
“xxxx_sfcn_rtw”文件夾包含了目標子系統(tǒng)生成的所有源代碼文件。此文件夾僅供生成保護代碼使用。出于知識產(chǎn)權保護的目的,該文件夾的內容是禁止分享給第三方客戶的。
“xxxx_rtlabsfcn_package”文件夾包含了生成的S-Function庫模型(.mdl 或 .slx),必備的header .h文件與后續(xù)生成的保護代碼文件 (.a, .so)。該文件夾是需要搭配集成模型在RT-LAB中使用的,故可以安全分享給第三方客戶。
06?將生成的保護代碼集成到對應的RT-LAB工程中在Simulink Library Browser中,搜索OpConfiguration模塊。隨即將其添加到生成的S-Function庫模塊旁。

I.OpConfiguration 配置
雙擊OpConfiguration模塊,按以下步驟配置OpConfiguration模塊。
Model Callback
輸入addpath('.\Rotor_Control_rtlabsfcn_package');

Source
在下圖對應的欄目中輸入對應的S-Function庫模塊源文件名稱,以確保模型編譯中忽略該部分,從而使用生成的保護代碼。Rotor_Control_sf.c

Library
在下圖對應的欄目中,輸入對應的保護代碼文件名稱。
Rotor_Control_sf_linux_x86.a

File transfer
在下圖對應的欄目中,輸入保護代碼在對應package文件夾中的完整路徑與文件格式:Rotor_Control_rtlabsfcn_package\Rotor_Control_sf_linux_x86.a=Binary|

▲ 圖20
Compilation
留空即可。
Target platform
請勾選如下圖所示復選框。

*注意:在OpConfiguration模塊配置好后,需確保模型能夠正常的離線運行。
II.在RT-LAB中運行集成保護代碼的模型
1)?在RT-LAB中新建一個工程, 導入集成保護代碼的模型,確保對應的 Rotor_Control_rtlabsfcn_package 文件夾也在RT-LAB工程的路徑內。

2)?通過RT-LAB打開模型,確保模型能離線運行。
3)?如下圖所示,在RT-LAB 中選中Files選項卡。點擊Add,進入RT-LAB工程下的package文件夾并選擇添加Rotor_Control_sf_linux.x86.a?文件和所有.h header文件。

4)?添加完閉后,F(xiàn)iles面板應如下圖所示。

5)?在RT-LAB中編譯,下載并執(zhí)行模型。觀察集成保護代碼的模型是否有正確的輸出。

▲ 圖25
附錄
附錄1:生成適配包含調用子S-Function的S-Function文件
為了調用子S-Function庫,必須對現(xiàn)有rtlabsfcn.tmf文件以及Matlab工作區(qū)的文件進行一些修改。
1.1 編輯RTLABSFCN.TMF文件
1.1.1 打開文件:?rtlabsfcn.tmf:

1.1.2 在164行, 在'MY_INCLUDES='之后,使用以下格式添加調用的子S-Functions的文件路徑。

1.1.3 在第186行,在'My_Includes='之后,使用以下格式添加子?sfunction_sfcn_rtw?文件夾的名稱。

1.2 重新配置MATLAB工作空間
必須在工作區(qū)的頂層包含對應主和子sfunctions的.mexw32/.mexw64文件。

1.3 制作兼容的 .MK 文件
此手冊提供的文件中包括make文件:‘sub_sfunction_example.mk’。該文件用于舉例生成兼容子S-Fcuntion的.mk文件。
在此文件中,必須將所有帶有“yoursfunction”的文本替換為sfunction名稱。有6處需要編輯,它們分別位于以下幾行:
行: [1, 52, 54, 61, 69, 161, 165, 188].
或者,您也可以在文本編輯器中使用“查找并替換”功能。
*注意:將此文件的名稱更改為:sfunctioname.mk,并將其移動到sfcn_rtw文件夾中,替換舊的.mk文件。

1.4 構建 RTLABSFCN_PACKAGE文件夾
1.4.1 創(chuàng)建一個名為 ‘YourSfunctionName_rtlabsfcn_package’的新文件夾。
1.4.2 將以下文件從sfcn_rtw文件夾移到您的sfunction中。請注意,本例中的sfunction的名稱為ATM_US_1962x。

1.4.3 復制對應的sfunction的.mdl并添加擴展名rtlabsfcn。


1.4.4 創(chuàng)建一個名為yoursfunction_sfcn_rtw的文件夾,并在其中放置第1.3節(jié)中制作的make文件。

1.5?在完成附錄章節(jié)的操作之后,按照手冊正文第5節(jié)完成后續(xù)sfunction功能的創(chuàng)建。
附錄2:MobaXterm的安裝和配置
MobaXterm可以把S-Function的源文件傳輸?shù)椒抡鏅C上并執(zhí)行命令。該程序是免費的。我們將使用其SSH和SFTP客戶端功能。
2.1 安裝MOBAXTERM
下載MobaXterm: http://mobaxterm.mobatek.net/download.html.
啟動安裝程序并完成安裝向導。
?

2.2 配置 MOBAXTERM
2.2.1 打開 MobaXterm
?

2.2.2 點擊Session?以創(chuàng)建新會話。

2.2.3 配置新會話:

2.2.4 當會話配置完成時,會話自動啟動。

