Simulink编程快速上手之:C语句的两种实现方式(If_Else)

Simulink程序设计的一大优势是可以自动生成C语言代码。在引入Simulink之前,设计人员往往需要先设计和编码的两个步骤才能实现所需功能逻辑。在引入Simulink之后,设计人员可以把更多的精力放在设计上,从设计到代码的步骤,由Simulik自动完成从而大大提高了开发效率。同时Simulik生成代码时可以指定编码的格式及规范,也提高了编码的质量。

Simulink的逻辑设计,有两种方式可以实现。一种是,利用Simulink组件通过S-Function的方式实现。另一种,是利用Stateflow组件来实现。下面,我们对常用的编程语句的两种实现方式分别进行举例说明。

一、新建Subsystem和一个Chart

将Subsystem模块命名为S-Function,将Chart命名为Stateflow

二、逻辑实现

1. If Else语句

用S-Function,有两组模块可以实现,Switch、 if 与 if Action Subsystem组合。

用Stateflow实现时,可以使用Stateflow提供的标准模板。

我们来实现一个简单的功能:

当输入A 大于1时,B输出 1,当A小于等于1时,B输出2

用Switch模块实现:

设定Switch参数为 u2 > 1

用if 与 if Action Subsystem组合实现:

设定If条件为u1>1

加入merge模块,合并两种条件的输出

If Action Subsystem模块内部: If Action Subsystem1模块内部:

用Stateflow实现:

选择if else 标准模板后,在向导窗口中设定相关条件和赋值,点击确定后,自动生成Stateflow的图形函数如下

按下 Ctrl+D,进行编译后,系统会自动提示定义A和B两个变量。

我们将A设定为Input,将B设定为Output

点击OK后,A和B会显示在Stateflow的两侧,作为输入和输出端口。

确认执行效果

我们加入两个常量(Const)1和2和一个 Maual Switch模块,用来手动选择输入A的值,加入一个Display模块,用来显示输出B的值

点击Debug/Run运行模型

查看输出结果:

当A>1 时,B输出 1

A<1 时时,B输出 2