0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

条件语句/循环语句simulink的实现方法(一)

冬至子 来源:林南橘 作者:林南橘 2023-07-21 16:48 次阅读

条件语句和循环语句是计算机编程中常用的两种控制结构

条件语句是一种根据某个条件来执行不同操作的程序结构。当满足特定条件时,程序会执行一个或多个指定的操作;否则,程序将跳过这些操作并继续执行下一条语句。在大多数编程语言中,条件语句通常使用if-else语句实现,也可以使用switch-case语句等其他形式。

循环语句是一种重复执行相同或类似操作的程序结构。它允许程序按照预定义的次数或者直到某个条件被满足为止重复执行一组语句。在大多数编程语言中,循环语句通常使用for、while、do-while等关键字实现。

通过使用条件语句和循环语句,程序员可以更加灵活地控制程序的流程和行为,从而实现各种复杂的功能和应用

文本通过python,Stateflow,Simulink 以及 MATLAB Function四种方法实现If-else、Switch -case、For循环、While循环、Do-while循环

If-Else

if else循环的本质是根据给定条件判断程序执行哪个分支。具体来说,if语句会先判断括号中的条件是否为真,如果为真,则执行花括号内的代码块;否则,跳过该代码块,继续执行下一个语句。

x = 10

if x > 5:
    print("x大于5")
else:
    print("x小于等于5")

在这个示例中,我们定义了变量x,并使用if else语句对其进行判断。首先,if语句会判断x是否大于5,由于x的值为10,因此条件成立,程序将输出“x大于5”。如果x的值为3,则条件不成立,程序将跳过if语句块,执行else语句块,输出“x小于等于5”。

总之,if else循环可以帮助我们根据不同的情况采取不同的行动,从而实现更加灵活和智能的编程。

举例说明1

对于自动空调控制系统,以夏季空调制冷为例,当主副驾设定不同需要求温度时(temp_set_driver,temp_set_passenger),整车TD负荷值按空调设定温度最低的一侧取值进行计算

Python实现

temp_set_driver = int(input("请输入主驾温度:"))
temp_set_passenger = int(input("请输入副驾温度:"))

if temp_set_driver <= temp_set_passenger:
    output = temp_set_driver
else:
    output = temp_set_passenger

print("自动空调设定温度为:", output)
"""
我们使用了input()函数来获取用户输入,并将其转换成整数类型。然后,我们使用if else语句来判断两个变量的大小关系,并将最小值赋给output变量。

最后输出自动空调设定温度即可。例如,在上述示例中,当用户输入主驾温度为20,副驾温度为22时,程序会输出“自动空调设定温度为:20”,因为此时主驾温度小于等于副驾温度。而当用户输入主驾温度为28,副驾温度为24时,程序会输出“自动空调设定温度为:24”,因为此时主驾温度大于副驾温度。
"""

matlab function实现

function output = auto_temp_control(temp_set_driver, temp_set_passenger)
% 自动空调设定温度取主驾和副驾温度的最小值

if temp_set_driver <= temp_set_passenger
    output = temp_set_driver;
else
    output = temp_set_passenger;
end

fprintf("自动空调设定温度为:%dn", output);
%{
我们定义了一个名为auto_temp_control的MATLAB函数,并接受两个输入参数:temp_set_driver和temp_set_passenger。然后,我们使用if else语句来判断两个变量的大小关系,并将最小值赋给output变量。

最后,我们使用fprintf()函数输出自动空调设定温度即可。例如,在上述示例中,当用户输入主驾温度为20,副驾温度为22时,程序会输出“自动空调设定温度为:20”,因为此时主驾温度小于等于副驾温度。而当用户输入主驾温度为28,副驾温度为24时,程序会输出“自动空调设定温度为:24”,因为此时主驾温度大于副驾温度。
%}

simulink实现

图片

图片

当然,simulink实现方法是为了体现If-Else条件语句的逻辑,采用了Switch模块,单看此部分的实例,选用min模块会更加方便

图片

Stateflow实现

图片

If-Else If-Else

If-Else If-Else通常用于处理多种情况的判断,例如根据不同的条件执行不同的操作。以下是一个简单的示例代码(Python):

score = 85

if score >= 90:
    grade = 'A'
elif score >= 80:
    grade = 'B'
elif score >= 70:
    grade = 'C'
elif score >= 60:
    grade = 'D'
else:
    grade = 'F'

print("成绩为:", grade)

举例说明2

**当车内环境温度(temp_incar)低于10℃时,空调开启加热模式(AC_state==heater),当车内环境温度处于10℃到30℃时开启空调自然风模式(AC_state==natural_wind),当车内环境温度大于30℃时开启制冷模式(AC_state==cooling)**

Python实现

temp_incar = float(input("请输入车内环境温度:"))

if temp_incar < 10:
    AC_state = 'heater'
elif temp_incar >= 10 and temp_incar <= 30:
    AC_state = 'natural_wind'
else:
    AC_state = 'cooling'

print("空调状态为:", AC_state)

matlab function实现

function AC_state = calculate_AC_state()
% 计算空调状态

temp_incar = input("请输入车内环境温度:");

if temp_incar < 10
    AC_state = 'heater';
elseif temp_incar >= 10 && temp_incar <= 30
    AC_state = 'natural_wind';
else
    AC_state = 'cooling';
end

fprintf('空调状态为:%sn', AC_state);

end
%{
在这个示例中,我们首先定义了一个名为calculate_AC_state()的MATLAB函数,并使用input()函数提示用户输入车内环境温度。然后,我们使用If-Else If-Else深层次逻辑来根据车内环境温度计算出对应的空调状态,与之前的Python代码相同。最后,我们使用fprintf()函数输出计算出的空调状态。
当你调用该函数时,程序会等待用户输入车内环境温度,并根据输入的值计算出对应的空调状态。
%}

simulink实现

图片

如果执行语句只是简单的赋值,使用 switch 模块即可,如果涉及到更复杂的计算,应避免频繁使用开关块进行条件分岔,可考虑使用 If 以及 If Action Subsystem 模块,但是这个"复杂"也很难定义。对于 Switch来说,通常会约束一个层叠的上限,比如三层,如果 switch 模块层层叠叠层级非常多也可以考虑用子系统分别“包裹”起来,如果没有状态量的话,最好就不要用 If Action Subsystem模块,理论上 Stateflow,Simulink 以及 MATLAB Function 几乎都可以完成相同的模型,只是要根据应用场合和使用习惯加以取舍。

使用 If 以及 If Action Subsystem 模块对上面的switch模块进行改造,如下:

在Simulink中,If模块和If Action Subsystem模块组合可以用于实现多个条件分支逻辑。

  • If Action Subsystem 模块是经过预先配置的 Subsystem模块,可以作为一个起点,用来创建由 If模块控制执行的子系统。If 模块计算逻辑表达式,然后根据计算结果输出动作信号。子系统的执行由放置在子系统内部的 Action Port模块控制;
  • If 模块以及包含 Action Port 模块的 If Action Subsystem 模块实现 if-else 逻辑来控制子系统的执行。有关使用 If 模块的示例,请参阅 If 执行子系统;
  • If 模块从一组子系统中选择 If Action Subsystem 模块的执行。无论 If 模块选择哪个子系统,您都可以使用 Merge模块创建单个信号;
  • If Action Subsystem 模块中的所有模块必须以与驱动 If 模块相同的速率执行。您可以通过将每个模块的采样时间参数设置为继承 -1或与 If 模块采样时间相同的值来满足此要求;
    图片

Stateflow实现

图片

Switch - Case

在Python中,switch-case结构并不是一种原生的语言结构。但我们可以使用其他方式来实现类似的功能。

一种常见的方法是使用字典(dictionary)和函数映射来模拟switch-case结构。具体步骤如下:

    1. 创建一个字典,将每个条件对应的操作函数作为值存储在其中。
    1. 根据输入信号选择相应的操作函数,并执行它。

以下是一个使用字典和函数映射实现switch-case结构的示例代码:

def case_1():
    print("Case 1")

def case_2():
    print("Case 2")

def case_3():
    print("Case 3")

# 创建字典
cases = {
    1: case_1,
    2: case_2,
    3: case_3
}

# 输入信号
u = 2

# 根据输入信号选择相应的操作函数,并执行它
if u in cases:
    cases[u]()
else:
    print("Invalid input")

在上述代码中,我们首先定义了三个操作函数case_1()case_2()case_3(),分别对应三种情况。然后,我们创建了一个字典cases,将每个条件对应的操作函数作为值存储在其中。最后,根据输入信号选择相应的操作函数,并执行它。

既然python尚不支持Switch-Case,那我们先用一个C代码示例展示Switch-Case语法结构吧

#include < stdio.h >

int main() {
    int choice;
    
    printf("Please select an option:n");
    printf("1. Option 1n");
    printf("2. Option 2n");
    printf("3. Option 3n");
    scanf("%d", &choice);
    
    switch (choice) {
        case 1:
            printf("You selected Option 1.n");
            break;
        case 2:
            printf("You selected Option 2.n");
            break;
        case 3:
            printf("You selected Option 3.n");
            break;
        default:
            printf("Invalid input.n");
            break;
    }
    
    return 0;
}
/*
在上述代码中,我们首先输出一个菜单,让用户选择一个选项。然后,我们使用switch-case结构来根据用户的选择执行相应的操作。如果用户输入了无效的选项,则会输出“Invalid input.”。

这个示例代码可以用于各种需要用户交互的场景,例如命令行工具、控制台程序等。
*/

闲话休提,我们接着举例说明Switch-Case语句如何用simulink实现

举例说明3

**空调吹风模式具有多种状态,AC控制器需要把不同吹风模式反馈给大屏控制器用于状态显示,AC_flow_state=0x0时,AC_state=’face’;AC_flow_state=0x1时,AC_state=’foot’;AC_flow_state=0x2时,AC_state=’defrost’**

C代码实现

#include < stdio.h >

int main() {
    int AC_flow_state = 1;
    char AC_state[10];
    
    switch (AC_flow_state) {
        case 0:
            sprintf(AC_state, "face");
            break;
        case 1:
            sprintf(AC_state, "foot");
            break;
        case 2:
            sprintf(AC_state, "defrost");
            break;
        default:
            printf("Invalid input.n");
            return -1;
    }
    
    printf("The AC state is %s.n", AC_state);
    
    return 0;
}
/*
在上述代码中,我们首先定义了一个整型变量AC_flow_state表示空调吹风模式状态。然后,我们使用switch-case结构根据不同的状态值来设置字符串类型的变量AC_state。最后,我们输出AC_state的值。
需要注意的是,在default分支中,我们输出了“Invalid input.”并返回-1,这是为了防止程序出现未知错误。
char AC_state[10]是一个字符数组,用于存储空调吹风模式的状态。在这个例子中,我们将其定义为长度为10的数组,因为最长的状态字符串"defrost"有7个字符,再加上结尾符�,所以需要分配至少8个字节的空间。
*/

matlab function代码实现

function AC_state = get_AC_state(AC_flow_state)
% This function returns the corresponding AC state based on the input flow state.

switch AC_flow_state
    case 0
        AC_state = 'face';
    case 1
        AC_state = 'foot';
    case 2
        AC_state = 'defrost';
    otherwise
        error('Invalid input.');
end

fprintf('The AC state is %s.n', AC_state);

end
%{
在上述代码中,我们首先定义了一个MATLAB函数get_AC_state(),它接受一个整型参数AC_flow_state表示空调吹风模式状态。然后,我们使用switch-case结构根据不同的状态值来设置字符串类型的变量AC_state
}%

simulink实现

图片

Stateflow实现

图片

而对于 Stateflow 来说,不管是if-else还是switch-case,其实都是流程图。所以就算你按照switch-case的逻辑画了出来,生成的代码依旧是if-else形式的。

所以需要我们稍微配置一下:模型设置→代码生成→代码风格→勾选convert if-elseif-else patterns to switch case

图片

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 驱动器
    +关注

    关注

    51

    文章

    7310

    浏览量

    142972
  • 控制器
    +关注

    关注

    112

    文章

    15235

    浏览量

    171207
  • 自动控制系统

    关注

    1

    文章

    174

    浏览量

    19168
  • python
    +关注

    关注

    51

    文章

    4677

    浏览量

    83468
  • simulink仿真
    +关注

    关注

    0

    文章

    75

    浏览量

    8457
收藏 人收藏

    评论

    相关推荐

    条件语句 启动不同的while循环

    采用列表框选择 1 2 3 然后 条件语句相应会有反应。问题: 打算点击每个while的stop然后退出此while,然后选择列表框另选项,相应的另while
    发表于 02-16 12:30

    开关语句循环语句

    switch/case开关语句是一种多分支选择语句,是用来实现多方向条件分支的语句。虽然从理论上讲采用
    发表于 07-15 14:26 18次下载

    Java的循环语句的详细资料说明

    本文档的主要内容详细介绍的是Java的循环语句的详细资料说明包括了:1、while循环语句,2、do…while循环
    发表于 03-22 08:00 0次下载
    Java的<b class='flag-5'>循环</b><b class='flag-5'>语句</b>的详细资料说明

    C语言的for循环语句的程序和电路图免费下载

    1、在许多实际问题中,需要程序进行有规律的重复执行,这时可以用循环语句实现。在c语言中。用来实现循环
    发表于 08-20 17:31 1次下载
    C语言的for<b class='flag-5'>循环</b><b class='flag-5'>语句</b>的程序和电路图免费下载

    Verilog可综合的循环语句

    Verilog中提供了四种循环语句,可用于控制语句的执行次数,分别为:for,while,repeat,forever。其中,for,while,repeat是可综合的,但循环的次数需
    发表于 10-13 12:23 1.8w次阅读

    条件判断语句(if语句

    条件判断语句,作为任何编程语言都不可缺少的内容,在C语言中也不例外。条件判断语句可以让程序的功能更加复杂,从而实现各种各样的功能。
    的头像 发表于 02-21 15:24 2534次阅读
    <b class='flag-5'>条件</b>判断<b class='flag-5'>语句</b>(if<b class='flag-5'>语句</b>)

    什么是python break语句-终止循环

    循环的过程中如果要退出循环,我们可以用break语句和continue语句
    的头像 发表于 02-23 11:17 1968次阅读

    C语言for语句介绍

    除了可以用while语句和do...while语句实现循环外,C语言还提供for语句实现
    的头像 发表于 03-09 11:14 833次阅读

    Python的循环语句介绍

    哈喽大家好,我是知道。今天带大家了解下Python的循环语句 定义循环语句允许我们执行一个语句语句
    的头像 发表于 05-11 17:39 645次阅读

    Verilog常用的循环语句及用途

    本文主要介绍verilog常用的循环语句循环语句的用途,主要是可以多次执行相同的代码或逻辑。
    的头像 发表于 05-12 18:26 1246次阅读

    MATLAB中条件语句循环结构的使用方式

    MATLAB提供了多种条件语句循环结构。
    的头像 发表于 07-05 09:41 2512次阅读

    条件语句/循环语句simulink实现方法(二)

    for 循环是 Python 中用于遍历序列(如列表、元组、字符串等)的迭代结构。for 循环的本质是按照序列中的元素顺序执行代码块,并在每次迭代中获取序列的下一个元素。
    的头像 发表于 07-21 16:51 4257次阅读
    <b class='flag-5'>条件</b><b class='flag-5'>语句</b>/<b class='flag-5'>循环</b><b class='flag-5'>语句</b><b class='flag-5'>simulink</b>的<b class='flag-5'>实现</b><b class='flag-5'>方法</b>(二)

    Python中什么是语句

    条件判断 语句块 什么是语句块呢? 语句块是在条件为真(条件
    的头像 发表于 09-12 16:41 631次阅读

    Python条件条件语句

    if语句 对于if语句,若条件判定为真,那么后面的语句块就会被执行。若条件判定为假,语句块就会被
    的头像 发表于 09-12 16:45 360次阅读

    单片机中for语句的运用

    语句,它的基本结构如下: for (初始化语句; 条件表达式; 更新语句) {循环体;} for语句
    的头像 发表于 01-05 14:02 615次阅读