1.引言
文章三相新能源并網系統序阻抗模型——序阻抗分析器IMAnalyzer介紹了一種用于分析和掃描序阻抗的軟件。其中,在序阻抗掃頻操作過程中,用到了一個擾動注入、測量和運算工具【IMtool】,它外表長這樣:
內部長這樣:
交互起來是這樣的:
它具備以下一些特點:
1.外表是一個交互界面,包括文本顯示、參數輸入、下拉選擇等功能;
2.內部有三個子系統,但每次只激活其中一個子系統;
3.交互界面可選擇內部系統,設置系統參數、顯示不同封面等等。
那么類似于上述的功能是如何實現的呢?
2.子系統
【子系統】是把一堆散件進行打包的過程,同時可以留有輸入和輸出接口同外界交互,比如:
【IMtool】的 電流擾動注入、測量和運算功能大致實現如下:
就可以打包成這樣:
需要注意的是:輸入輸出接口分為【物理接口】→
和信號接口
→
。
同樣地,【電壓擾動注入、測量和運算】和【直連】功能也能分別進行打包:
注意:【直連】打包時保留了信號端口是為了與【電流xxx】和【電壓xxx】外觀保持一致,如下:
這樣我們就得到了三個外觀一樣,內部功能不同的三個子系統。
3.變體子系統
上面三個子系統的功能是并列的,實際運行時,只需要執行其中一個系統的功能。當然,這可以通過只連接一個子系統來實現。但如果這樣,切換功能 就需要反復重連其它系統,十分不便。
有沒有什么方法可以便捷地切換系統?這就是【變體子系統】,它可以包含多個【子系統】,并將它們作為變體選擇項。
首先將其中一個子系統轉化為變體子系統:
然后將其它子系統復制到該變體子系統的內部:
可以擺得整齊一點:
設置子系統激活條件:
變體子系統具體執行其中哪個子系統的功能,是根據【變體控制表達式】為真來確定的,當條件表達式的計算結果為 true 時,對應的變體選擇項將被激活。
例如,在下圖中,變量disType的值如果為"擾動電壓注入法",則表達式disType=="擾動電壓注入法"為真,將激活【擾動電壓注入法】子系統;為"擾動電流注入法",則激活【擾動電流注入法】子系統;……。
而變量disType可以通過【命令行窗口】、Simulink中的【模型屬性】等方式賦值,如:
4.封裝
【封裝】其實就是做交互界面的過程,把需要交互的功能做成易操作的界面,而隱去底層模型的聯系。
【封裝】操作如下:
然后會彈出【封裝編輯器】:
目標交互界面包括【功能描述】、【擾動注入方法】選擇和【參數】輸入三個部分。
4.1【功能描述】設計
添加【組框】控件實現內容分區。
注:在編輯過程中可以隨時點擊【預覽對話框】來查看對應的封裝界面,也是探索各個控件功能的好辦法。
添加【文本】控件,在【提示】欄輸入需要展示的文字。
如果想對文字進行分段,可以添加多個【文本】控件:
4.2【擾動注入方法】設計
添加【彈出框】控件,編輯【提示】、【名稱】和【類選選項】。
注:【名稱】為該控件的 輸出變量名,可以存儲操作后返回的值;【類型選項】用于設置彈出框的可選項,選擇的值將存儲在【名稱】對應的變量中。
特別注意:一定要取消勾選【計算】,否則關聯的變量會保存為所選項的索引,而不是實際值。
封裝中的變量能夠被包含其中的所有模塊識別,因此變體子系統會因為變量disType值的改變而切換激活的子系統,如下:
4.3【參數】輸入設計
添加【組框】控件進行分區;
添加【編輯】控件,編輯【提示】、【名稱】和【值】等。
類似地,根據需求添加其它【編輯】控件,不再贅述。
假如現在需要通過外界(例如appdesigner軟件)來指定封裝中的參數值,而不是直接通過封面指定,該如何實現?
此時,可以將參數輸入欄的值指定為變量名,比如:
這樣就可以在matlab、simulink等工作區對這些變量進行賦值,從而間接指定參數。
4.4【模型圖標】設計
封裝編輯器的【圖標】區允許用戶使用一些繪圖命令來設計模型圖標。這樣就可以通過條件判斷,讓封裝模塊在激活不同子系統時顯示不同的圖標,如下:
另外,將【圖標透明度】設置為 不透明帶端口,既展示圖標,又顯示端口號;將【圖片旋轉】設置為 旋轉,實現圖標跟隨模型旋轉。
5.最終效果
以上就是全部內容啦,覺得有用還請多多支持,您的支持是我創作最大的動力。