Simulin金宝appk上的家伙

金宝appSimulink与基于模型的设计

一个更好的If-Else结构

在以前的帖子中,我回答了一个关于如何为If-Else行为建模.在这里,我将重申我要创建的算法:

如果(sel==0)
out=2*in1;
elseif (sel = = 1)
out=3*in2;

我给出的第一个答案依赖于开关块和条件输入分支执行优化以获得模型中有效的If-Else构造。虽然这是可行的,但我不喜欢依赖优化来提供良好的行为。有时,对模型的微小更改会阻止Simulink应用优化。金宝app我认为最好是明确地实现需求。在这篇文章中,我想向您展示一种明确地建模If-Else条件执行行为的方法。

有条件执行的子系统和合并

If-Else构造需要决策逻辑来控制表达式中包含的算法的执行。一种方法是使用If块(来自端口和子系统库),与If操作子系统结合使用。If操作子系统基于If块中的条件表达式执行。如果您使用过函数调用子系统,则情况非常相似。

Simulink块中的If Else, Else If, Action构造。金宝app

If块提供了对If和ElseIf条件的控制,甚至还有一个提供Else信号的选项。

Simu金宝applink If块参数。

此模型将为您提供两个子系统的有条件执行,但是,子系统将其输出写入单独的信号。如何使两个子系统写入相同的信号?

合并的信号

Merge块为两个子系统提供了写入相同信号的方法。

合并块提供了一种方法来指定将多个信号写入同一内存位置。

在许多方面,合并块的行为不像具有传统输入/输出关系的块。我认为它更像是跨多条导线的跳线。合并块指定连接到它的所有信号具有相同的值,并且实际上共享相同的内存。这是一种编程实践,即指定多个写入程序到相同的变量。

使用合并生成的代码

从上述模型生成的代码与我们的原始算法非常相似。

34/* If: '/If'
35* ActionPort: '/Action Port'
36*ActionPort:“/Action Port”
37*尺寸:“< Root > / In3”
38*子系统:'/If Action子系统'
39*子系统:'/If Action Subsystem1'
40*/
41如果(选取= = 0.0)
42/*增益:“/Gain”包含:
43*尺寸:< Root > /三机一体的
44*/
45out=2.0*u1;
46其他的
47如果(选取= = 1.0)
48/*增益:'/增益'合并:
49*尺寸:“根> < / In2”
50*/
51Out = 3.0 * u2;
52
53

正确使用合并

因为合并块是一种内存规范而不是一种算法构造,所以有一些使用合并块的准则.文档显示了一些正确和不正确的使用模式。如果您在模型中使用merge块,我建议您运行检查是否正确使用合并块

现在轮到你了

您是否在模型中使用合并块?请留下这里的评论并分享你的经验。

|

评论

要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。