Simulink代码生成: If-Action子系统及其代码
本文研究Simulink中的If-Action子系统及其生成的代码。文章目录1 概述2 示例模型搭建2.1 If模块2.2 If-Action子系统2.3 merge模块2.4 完整模型3 代码生成4 拓展1 概述If-Action子系统是一种特殊的子系统。参考Matlab帮助文件中的示例图片,可以对该系统有一个直观的认识。它是由动作信号触发,来决定子系统是否执行。动作信号通过If模块对输入的判断
本文研究Simulink中的If-Action子系统及其生成的代码。
1 概述
If-Action子系统是一种特殊的子系统。参考Matlab帮助文件中的示例图片,可以对该系统有一个直观的认识。
它是由动作信号触发,来决定子系统是否执行。动作信号通过If模块对输入的判断产生。最后用一个merge模块把各个子系统的输出结果合成。这种条件判断执行某些模块的方式,类似C代码中的if-else语句。
2 示例模型搭建
参照帮助文件里的例子,搭建一个If-Action子系统。
2.1 If模块
默认的If模块是一个输入信号和两条判断分支,如下图。
双击If模块可以对其进行配置。可配置内容包括输入信号数量,条件表达式和显示else分支。注意如果有多个else if的表达式,要一起写在Elseif expressions中。
2.2 If-Action子系统
If-Action子系统相比普通的子系统,在上方多了一个动作触发输入端。该输入端与If模块的输出相连,表明在If某款的某个判断条件下才执行这个子系统。
与使能子系统相似,If-Action子系统中的输出模块也可以选择held或者reset。
2.3 merge模块
如果整体的输出值在不同的条件下对应着不同的子系统的输出,就需要用merge模块把这些子系统的输出合并成一个。实际上也只有其中一个子系统的输出值是有效的。
2.4 完整模型
依照帮助文档里的示例建立的完整模型如下:
其中,输入和输出信号线关联了Simulink.Signal,为了使得生成的代码更直观。
两个If-Action子系统中没有加入任何运算策略,只是将输入的Input1或Input2输出到merge模块。
可以注意到,If模块的输出信号类型是action,而不是常见的single,uint,int等。而且信号线变成了虚线。这表明这根信号线是action信号线,用于触发If-Action子系统。
3 代码生成
Ctrl + B生成代码,如图所示:
可以看出,step函数中是一段简单的if-else判断语句。其中判断条件Input3 > 0.0F对应了If模块的配置,花括号内的执行语句Output1 = Input1;和Output1 = Input2;对应If-Action子系统里的控制策略。
4 拓展
除了If模块,用Switch Case模块搭配If-Action子系统也可以实现条件判断的控制策略。建模方式相似,文章内就不做演示。
更多推荐
所有评论(0)