Simulin万博1manbetxk上的GuygydF4y2Ba

万博1manbetxSimulink &基于模型的设计gydF4y2Ba

掩码初始化和自修改块gydF4y2Ba

在之前的文章中,我介绍过gydF4y2Ba高级屏蔽概念gydF4y2Ba并讨论了如何使用实例构建掩码库块gydF4y2Ba动态掩码对话框gydF4y2Ba。在这篇文章中,我将展示饱和块示例如何根据其配置添加/删除端口并重新连接自己。gydF4y2Ba

饱和块的例子gydF4y2Ba

饱和块蒙版的动画。gydF4y2Ba

在配置块对话框之后,单击Apply或OK执行掩码初始化回调。掩码初始化回调是掩码的大部分工作发生的地方。掩码初始化命令应该接受掩码对话框中设置的参数值,并配置块,以便它可以运行。在饱和块示例中,块在两种基本配置之间切换,动态饱和和固定饱和。gydF4y2Ba

使用常量和端口的饱和块gydF4y2Ba

这两种配置之间的区别在于向上和向下使用的块类型不同。它们是提供动态限制的端口,以及提供固定限制的常量。gydF4y2Ba

关键点:gydF4y2Ba做最少的工作,你可以在掩码初始化。gydF4y2Ba

掩码初始化代码应该做尽可能少的工作,因为掩码初始化在模型的生命周期中会运行很多次。除了在单击OK或Apply时运行外,掩码初始化还在每个模拟和更新图的开始时运行,在调用set_param以修改块时运行,以及在将块放入系统时构建模型时运行。gydF4y2Ba

掩码参数是在掩码编辑器的参数页上设置的变量名。(见下文)gydF4y2Ba

饱和块掩模编辑器参数gydF4y2Ba

掩码下的系统块可以访问掩码工作区中的这些变量。初始化命令也在掩码工作空间中运行,因此这些变量是掩码初始化回调的一部分。(见下文)如果一个块将重新布线自己,或添加端口,你必须检查gydF4y2Ba允许库块修改其内容gydF4y2Ba。gydF4y2Ba

掩码编辑器初始化页面gydF4y2Ba

对于饱和块,我选择调用m函数来完成初始化命令的工作。我发现它更方便调试和MATLAB编辑器是一个更舒适的开发掩码初始化命令,超过几行。gydF4y2Ba

使用掩码GUI的状态来控制代码gydF4y2Ba

我的函数是saturation_init_cb。我将掩码工作区中所有需要的变量传递给函数。这比在块上调用get_param更有效。我总是在及格的结果gydF4y2Ba华东桐柏gydF4y2Ba(gydF4y2BaggydF4y2BaEt路径名gydF4y2BacgydF4y2BaurrentgydF4y2BabgydF4y2Ba锁)。当我需要引用饱和块子系统中的块时,我将使用这个路径。gydF4y2Ba

为了做最少的工作,我的掩码初始化检查系统,看看是否需要更改。上限源的检查通过switch语句来处理两个可能的值,内部的或外部的。对象的BlockTypegydF4y2Ba饱和gydF4y2Ba/块。如果它不是正确的类型,我们调用本地replace函数来替换块。如果我们添加了一个常量,我们将该常量的Value设置为使用掩码中的uplim变量。对下限重复类似的操作。gydF4y2Ba

% saturation_init_cb掩码初始化gydF4y2Ba
函数gydF4y2Basaturation_init_cb(黑色,uplimsrc uplim,gydF4y2Ba...gydF4y2Ba
lowlimsrc lowlim)gydF4y2Ba

检查上限来源gydF4y2Ba
开关gydF4y2BauplimsrcgydF4y2Ba
情况下gydF4y2Ba“外部”gydF4y2Ba
%检查常量gydF4y2Ba
如果gydF4y2Ba比较字符串(get_param(黑色gydF4y2Ba“/”gydF4y2Ba),gydF4y2Ba“BlockType”gydF4y2Ba),gydF4y2Ba...gydF4y2Ba
“不变”gydF4y2Ba)gydF4y2Ba
替换([黑色gydF4y2Ba“/”gydF4y2Ba),gydF4y2Ba“内置/尺寸。”gydF4y2Ba);gydF4y2Ba
结束gydF4y2Ba
情况下gydF4y2Ba“内部”gydF4y2Ba
%检查导入gydF4y2Ba
如果gydF4y2Ba比较字符串(get_param(黑色gydF4y2Ba“/”gydF4y2Ba),gydF4y2Ba“BlockType”gydF4y2Ba),gydF4y2Ba...gydF4y2Ba
“尺寸”gydF4y2Ba)gydF4y2Ba
替换([黑色gydF4y2Ba“/”gydF4y2Ba),gydF4y2Ba“内置/常数”gydF4y2Ba)gydF4y2Ba
set_param([黑色gydF4y2Ba“/”gydF4y2Ba),gydF4y2Ba“价值”gydF4y2Ba,gydF4y2Ba“uplim”gydF4y2Ba)gydF4y2Ba
结束gydF4y2Ba
结束gydF4y2Ba

检查下限源gydF4y2Ba
开关gydF4y2BalowlimsrcgydF4y2Ba
情况下gydF4y2Ba“外部”gydF4y2Ba
%检查常量gydF4y2Ba
如果gydF4y2Ba比较字符串(get_param(黑色gydF4y2Ba“/罗”gydF4y2Ba),gydF4y2Ba“BlockType”gydF4y2Ba),gydF4y2Ba...gydF4y2Ba
“不变”gydF4y2Ba)gydF4y2Ba
替换([黑色gydF4y2Ba“/罗”gydF4y2Ba),gydF4y2Ba“内置/尺寸。”gydF4y2Ba)gydF4y2Ba
结束gydF4y2Ba
情况下gydF4y2Ba“内部”gydF4y2Ba
%检查导入gydF4y2Ba
如果gydF4y2Ba比较字符串(get_param(黑色gydF4y2Ba“/罗”gydF4y2Ba),gydF4y2Ba“BlockType”gydF4y2Ba),gydF4y2Ba...gydF4y2Ba
“尺寸”gydF4y2Ba)gydF4y2Ba
替换([黑色,gydF4y2Ba“/罗”gydF4y2Ba),gydF4y2Ba“内置/常数”gydF4y2Ba)gydF4y2Ba
set_param([黑色gydF4y2Ba“/罗”gydF4y2Ba),gydF4y2Ba“价值”gydF4y2Ba,gydF4y2Ba“lowlim”gydF4y2Ba)gydF4y2Ba
结束gydF4y2Ba
结束gydF4y2Ba

replace函数从旧块中获取位置和方向,删除它,然后在原来的位置添加新块。gydF4y2Ba

%本地替换函数gydF4y2Ba
函数gydF4y2Ba替换(oldblock newblock)gydF4y2Ba
Pos = get_param(oldblock,gydF4y2Ba“位置”gydF4y2Ba);gydF4y2Ba
东方= get_param(oldblock,gydF4y2Ba“定位”gydF4y2Ba);gydF4y2Ba
delete_block (oldblock);gydF4y2Ba
add_block (newblock oldblock,gydF4y2Ba“位置”gydF4y2Ba、pos、gydF4y2Ba...gydF4y2Ba
“定位”gydF4y2Ba,东方);gydF4y2Ba

注意,这里不能使用Simulink中的replace_block函数,因万博1manbetx为它是用于模型范围内的更改。虽然可以将replace_block的影响限制在特定的系统中,但replace block对库块不起作用。可自修改的掩码块是库块,因此这是用于这种掩码的常用辅助函数。gydF4y2Ba

重新编号端口以控制顺序gydF4y2Ba

端口号影响端口在块外部显示的顺序。导线穿过块的边界,并通过它们最初连接的导入保持连接。通过改变所有端口的编号,可以将端口插入到块上现有端口的前面或后面。下面的代码通过检查uplimsrc和lowlimsrc的值设置端口号。当上限源是外部时,这将是第一个端口。如果不是,第一个端口是u输入。我可以通过每次设置端口号时增加编号变量来跟踪端口的顺序和数量。gydF4y2Ba

重新编号端口gydF4y2Ba
%时使用外部上限,gydF4y2Ba
%设置blk/up端口为1gydF4y2Ba

N = 1;gydF4y2Ba
如果gydF4y2Ba比较字符串(uplimsrcgydF4y2Ba“外部”gydF4y2Ba)gydF4y2Ba
set_param([黑色gydF4y2Ba“/”gydF4y2Ba),gydF4y2Ba“端口”gydF4y2Banum2str (n))gydF4y2Ba
N = 2;gydF4y2Ba%增加ngydF4y2Ba
结束gydF4y2Ba

%设置u端口为ngydF4y2Ba
set_param([黑色gydF4y2Ba' / u 'gydF4y2Ba),gydF4y2Ba“端口”gydF4y2Banum2str (n))gydF4y2Ba

%时使用外部下限,gydF4y2Ba
%设置blk/lo端口为n+1gydF4y2Ba

如果gydF4y2Ba比较字符串(lowlimsrcgydF4y2Ba“外部”gydF4y2Ba)gydF4y2Ba
set_param([黑色gydF4y2Ba“/罗”gydF4y2Ba),gydF4y2Ba“端口”gydF4y2Banum2str (n + 1))gydF4y2Ba
结束gydF4y2Ba

现在轮到你了gydF4y2Ba

我已经分享了一些编写自修改块的最佳实践。你用什么技术来编程掩码?分享你的gydF4y2Ba这里的评论gydF4y2Ba。gydF4y2Ba

|gydF4y2Ba
  • 打印gydF4y2Ba
  • 发送电子邮件gydF4y2Ba

评论gydF4y2Ba

如欲留言,请点击gydF4y2Ba在这里gydF4y2Ba登录您的MathWorks帐户或创建一个新帐户。gydF4y2Ba