如何在 simulink 中创建 if-then 逻辑?
How to create if-then logic in simulink?
我在 matlab 中有一个书面代码和一个程序,但我想在 simulink 中进行同样的思考。我被困在程序的 if-then 部分,我无法理解。
我尝试使用 "If" 块,但后来我不知道如何说 "then alfa=0"。在尝试研究它之后,我看到了很多不同的方法来做条件语句,现在我很困惑。
if(vb-y(2))*y(3)<0
alfa=0
end
if y(3)<zba && (vb-y(2))*y(3)>=0
alfa=0
end
if zba<y(3) && y(3)<zmax && (vb-y(2))*y(3)>=0
alfa=0.5*(sin(pi*(y(3)-(zmax+zba)/2)/(zmax-zba))+1)
end
if zmax<y(3) && (vb-y(2))*y(3)>=0
alfa=1
end
我基本上需要用simulink制作的这个。如果有人可以为我开始或解释正确的方法,我将非常感激。
我相信这可以通过以下方式完成:选择 if-block
来实现您的条件,对于 then
和 else
块,您选择 if-action-block
。 if 块决定将在每个时间步评估这两个 if-action 块中的哪一个,下面的 merge-block
将两个单独的输出再次集成到一个组合信号中(在您的情况下为 alfa
)。该图像显示了代码的第一个 if-then
(假设 else alfa=1
。如果没有其他情况,可以在块属性中禁用 else 输出)。
由于 if-block
支持 elseif 表达式作为逗号分隔列表,我建议您将它用于第二个、第三个和第四个 if,这意味着您很可能需要额外的 if-action 块,以及 merge-block
。同样对于 elseif 表达式,您需要将 &&
更改为 &
这应该没问题。 a && b
仅在 a 为真时计算 b,a & b
始终计算两者。
我在 matlab 中有一个书面代码和一个程序,但我想在 simulink 中进行同样的思考。我被困在程序的 if-then 部分,我无法理解。
我尝试使用 "If" 块,但后来我不知道如何说 "then alfa=0"。在尝试研究它之后,我看到了很多不同的方法来做条件语句,现在我很困惑。
if(vb-y(2))*y(3)<0
alfa=0
end
if y(3)<zba && (vb-y(2))*y(3)>=0
alfa=0
end
if zba<y(3) && y(3)<zmax && (vb-y(2))*y(3)>=0
alfa=0.5*(sin(pi*(y(3)-(zmax+zba)/2)/(zmax-zba))+1)
end
if zmax<y(3) && (vb-y(2))*y(3)>=0
alfa=1
end
我基本上需要用simulink制作的这个。如果有人可以为我开始或解释正确的方法,我将非常感激。
我相信这可以通过以下方式完成:选择 if-block
来实现您的条件,对于 then
和 else
块,您选择 if-action-block
。 if 块决定将在每个时间步评估这两个 if-action 块中的哪一个,下面的 merge-block
将两个单独的输出再次集成到一个组合信号中(在您的情况下为 alfa
)。该图像显示了代码的第一个 if-then
(假设 else alfa=1
。如果没有其他情况,可以在块属性中禁用 else 输出)。
if-block
支持 elseif 表达式作为逗号分隔列表,我建议您将它用于第二个、第三个和第四个 if,这意味着您很可能需要额外的 if-action 块,以及 merge-block
。同样对于 elseif 表达式,您需要将 &&
更改为 &
这应该没问题。 a && b
仅在 a 为真时计算 b,a & b
始终计算两者。