Simulink子系统、变体子系统及封装知识
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.最终效果
以上就是全部内容啦,觉得有用还请多多支持,您的支持是我创作最大的动力。