今天我想谈谈Simulink模型所需要的变量,它们是其他变量的函数。金宝app
让我们以直角三角形为例:
对于大多数Simu金宝applink用户,如果你有一个模型需要斜边的长度或这个三角形的面积,你可能最终会写一个像下面这样的脚本:
然后,在块参数中,您将使用变量
c
而且
区域
:
与上面的截图无关的旁注:
- 我喜欢用偏见Block为这类简单的例子;它从import块接收一个0,并将参数值添加到它。这仅用于实验/调试,不要在“普通”模型中使用此模式来代替Constant块。
- 显示偏差块输出值的黄色矩形为端口值显示.这对于调试仿真结果而不向模型添加块非常有用。
虽然上面的脚本可以完成工作,但它可能会导致明显的问题。例如,如果我改变变量
一个
,重新计算斜边,但忘记重新计算面积?
虽然这对于普通模式模拟来说是相对容易避免的,但在进行更高级的操作时,例如在使用快速重启或Simulink编译器时,这可能更容易出错。金宝app
使用表达式作为参数对象的值
要在原始变量之间创建更紧密的链接(
一个
而且
b)
变量是它们的函数(
c
而且
区域
),您需要做的第一件事是将这些变量转换为
金宝app仿真软件。参数
对象。
a = 金宝appSimulink.Parameter(3);
b = 金宝appSimulink.Parameter(4);
一次
一个
而且
b
已被创建为参数对象,您可以使用它们与
slexpr
将表达式指定为其他Simulink的值。金宝app参数对象:
c = 金宝appSimulink。参数(slexpr(“sqrt (b ^ ^ 2 + 2)”));
area = 金宝appSimulink。参数(slexpr(“(a *) * 0.5”));
然后可以使用变量
c
而且
区域
在Simu金宝applink模型中,就像他们在这篇文章开头的例子中使用双数据类型变量一样:
为了将这个原始用例的结果与本文下面几节中的示例进行比较,让我们以编程方式模拟模型,并查看第一个Outport块的结果:
out.yout {1} .Values.Data
有趣的是,一旦设置好了,你可以简单地改变原始变量的值,
一个
或
b
,在表达式中使用它的变量将自动看到更改。
out.yout {1} .Values.Data
利用快速重启中的表达式
in(1:5) = 金宝appSimulink。SimulationInput (“testMdl”);
in(i) = in(i).setVariable(“一个”,我);
Out = sim(in,“UseFastRestart”,“上”,“ShowProgress”,“关闭”);
[out.yout {1} .Values.Data]
4.1231 4.4721 5.0000 5.6569 6.4031
快速加速器和Simulink编译器金宝app
表达式作为参数值很有用的另一个上下文是
快速的加速器
.对于与前面示例相同的5个模拟,我可以在Rapid Accelerator中模拟而不触发以下代码的重建:
in(1:5) = 金宝appSimulink。SimulationInput (“testMdl”);
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]
4.1231 4.4721 5.0000 5.6569 6.4031
没有
slexpr
,所有的模拟都将看到相同的参数值
c
.
由于Simu金宝applink Compiler依赖于Rapid Accelerator技术,因此该技术也适用于该上下文中。
模型资源管理器和数据字典
方法定义数据
模型浏览器
或者在
数据字典
,你可以使用“=”运算符来做同样的事情
slexpr
允许在MATLAB脚本。
现在轮到你了
您是否利用了将表达式用作参数对象值的可能性?请在下面的评论中告诉我们。
评论
如欲留言,请点击在这里登录您的MathWorks帐户或创建一个新帐户。