Simulin金宝appk上的Guy

金宝appSimulink &基于模型的设计

使用数学表达式指定变量值

今天我想谈谈Simulink模型所需要的变量,它们是其他变量的函数。金宝app
让我们以直角三角形为例:
对于大多数Simu金宝applink用户,如果你有一个模型需要斜边的长度或这个三角形的面积,你可能最终会写一个像下面这样的脚本:
A = 3;
B = 4;
C =√(a^2+b^2);
面积= (a*b)/2;
然后,在块参数中,您将使用变量 c 而且 区域
与上面的截图无关的旁注:
  • 我喜欢用偏见Block为这类简单的例子;它从import块接收一个0,并将参数值添加到它。这仅用于实验/调试,不要在“普通”模型中使用此模式来代替Constant块。
  • 显示偏差块输出值的黄色矩形为端口值显示.这对于调试仿真结果而不向模型添加块非常有用。
虽然上面的脚本可以完成工作,但它可能会导致明显的问题。例如,如果我改变变量 一个 ,重新计算斜边,但忘记重新计算面积?
虽然这对于普通模式模拟来说是相对容易避免的,但在进行更高级的操作时,例如在使用快速重启或Simulink编译器时,这可能更容易出错。金宝app
好在有一个函数可以帮助解决这个问题: slexpr

使用表达式作为参数对象的值

要在原始变量之间创建更紧密的链接( 一个 而且 b) 变量是它们的函数( c 而且 区域 ),您需要做的第一件事是将这些变量转换为 金宝app仿真软件。参数 对象。
a = 金宝appSimulink.Parameter(3);
b = 金宝appSimulink.Parameter(4);
如果您不熟悉参数对象,可以阅读有关该主题的更多内容 在这里 .这些对象所实现的功能比我在这篇文章中描述的要多得多,特别是关于如何生成C/ c++代码 金宝app仿真软件编码器 而且 嵌入式编码器
一次 一个 而且 b 已被创建为参数对象,您可以使用它们与 slexpr 将表达式指定为其他Simulink的值。金宝app参数对象:
c = 金宝appSimulink。参数(slexpr(“sqrt (b ^ ^ 2 + 2)”));
area = 金宝appSimulink。参数(slexpr(“(a *) * 0.5”));
然后可以使用变量 c 而且 区域 在Simu金宝applink模型中,就像他们在这篇文章开头的例子中使用双数据类型变量一样:
为了将这个原始用例的结果与本文下面几节中的示例进行比较,让我们以编程方式模拟模型,并查看第一个Outport块的结果:
Out = sim(“testMdl”);
out.yout {1} .Values.Data
Ans = 5
有趣的是,一旦设置好了,你可以简单地改变原始变量的值, 一个 b ,在表达式中使用它的变量将自动看到更改。
a.Value = 8;
Out = sim(“testMdl”);
out.yout {1} .Values.Data
Ans = 8.9443

利用快速重启中的表达式

此特性对于以下用例特别有用 快速启动 而且 金宝app仿真软件的编译器 ,其中模型只编译一次,需要显式地将新的变量值传递给sim命令。下面是一个使用快速重启的例子:
a.Value = 3;从初始示例恢复值或a
in(1:5) = 金宝appSimulink。SimulationInput (“testMdl”);
I = 1:长度(in)
in(i) = in(i).setVariable(“一个”,我);
结束
Out = sim(in,“UseFastRestart”“上”“ShowProgress”“关闭”);
[out.yout {1} .Values.Data]
ans = 1×5
4.1231 4.4721 5.0000 5.6569 6.4031

快速加速器和Simulink编译器金宝app

表达式作为参数值很有用的另一个上下文是 快速的加速器 .对于与前面示例相同的5个模拟,我可以在Rapid Accelerator中模拟而不触发以下代码的重建:
in(1:5) = 金宝appSimulink。SimulationInput (“testMdl”);
I = 1:长度(in)
in(i) = in(i).setModelParameter(“simulationmode”“快速”);
in(i) = in(i).setModelParameter(“rapidacceleratoruptodatecheck”“关闭”);
in(i) = in(i).setVariable(“一个”,我);
结束
金宝appSimulink.BlockDiagram.buildRapidAcceleratorTarget (“testMdl”);
成功地为模型构建快速加速器目标:testMdl构建摘要顶层模型快速加速器目标构建:模型动作重建原因======================================================================================== testMdl生成和编译的代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 10.199s
Out = sim(in,“ShowProgress”“关闭”);
[out.yout {1} .Values.Data]
ans = 1×5
4.1231 4.4721 5.0000 5.6569 6.4031
没有 slexpr ,所有的模拟都将看到相同的参数值 c
由于Simu金宝applink Compiler依赖于Rapid Accelerator技术,因此该技术也适用于该上下文中。

模型资源管理器和数据字典

方法定义数据 模型浏览器 或者在 数据字典 ,你可以使用“=”运算符来做同样的事情 slexpr 允许在MATLAB脚本。

现在轮到你了

您是否利用了将表达式用作参数对象值的可能性?请在下面的评论中告诉我们。
|

评论

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