当前位置: 首页 > ds >正文

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.最终效果

以上就是全部内容啦,觉得有用还请多多支持,您的支持是我创作最大的动力。

http://www.xdnf.cn/news/20555.html

相关文章:

  • 山西移动九联UNT413HS-海思MV320-2+8G-原机全量备份包
  • 如何训练一个简单的Transformer模型(附源码)李宏毅2025大模型-作业4
  • 高精度地图
  • 【LeetCode - 每日1题】使数组元素都变为零的最少操作次数
  • [光学原理与应用-421]:非线性光学 - 数字信号处理中的线性与非线性运算
  • 【医学影像 AI】YoloCurvSeg:仅需标注一个带噪骨架即可实现血管状曲线结构分割
  • idf--esp32的看门狗menuconfig
  • JAVA快速学习(二)
  • xftp断网后提示错误如何继续下载?
  • Python自学12 - 常用数据结构之字典
  • 基于接口的事件机制
  • python入门常用知识
  • Phthon3 学习记录-0707
  • 积分球的使用——简易版
  • 强化学习入门:从零开始实现DDQN
  • Ai8051 2.4寸320*240 ILI9341 I8080接口驱动
  • 人工智能学习:基于seq2seq模型架构实现翻译
  • 项目初始化上传git
  • Qemu-NUC980(四):SDRAM Interface Controller
  • 什么是“二合一矫平机”?——一篇技术科普
  • 主流的开源协议(MIT,Apache,GPL v2/v3)
  • Qt编程之信号与槽
  • 吴恩达机器学习(八)
  • make时设置链接器选项的2种方法
  • 【操作系统-Day 25】死锁 (Deadlock):揭秘多线程编程的“终极杀手”
  • Zoom AI 技术架构研究:联合式方法与多模态集成
  • 【LeetCode热题100道笔记】翻转二叉树
  • python炒股
  • C++ 20 新增特性以及代码示例
  • 同态加密库(Google FHE)