0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

條件語句/循環(huán)語句simulink的實(shí)現(xiàn)方法(一)

冬至子 ? 來源:林南橘 ? 作者:林南橘 ? 2023-07-21 16:48 ? 次閱讀

條件語句和循環(huán)語句是計(jì)算機(jī)編程中常用的兩種控制結(jié)構(gòu)

條件語句是一種根據(jù)某個(gè)條件來執(zhí)行不同操作的程序結(jié)構(gòu)。當(dāng)滿足特定條件時(shí),程序會執(zhí)行一個(gè)或多個(gè)指定的操作;否則,程序?qū)⑻^這些操作并繼續(xù)執(zhí)行下一條語句。在大多數(shù)編程語言中,條件語句通常使用if-else語句實(shí)現(xiàn),也可以使用switch-case語句等其他形式。

循環(huán)語句是一種重復(fù)執(zhí)行相同或類似操作的程序結(jié)構(gòu)。它允許程序按照預(yù)定義的次數(shù)或者直到某個(gè)條件被滿足為止重復(fù)執(zhí)行一組語句。在大多數(shù)編程語言中,循環(huán)語句通常使用for、while、do-while等關(guān)鍵字實(shí)現(xiàn)。

通過使用條件語句和循環(huán)語句,程序員可以更加靈活地控制程序的流程和行為,從而實(shí)現(xiàn)各種復(fù)雜的功能和應(yīng)用

文本通過python,Stateflow,Simulink 以及 MATLAB Function四種方法實(shí)現(xiàn)If-else、Switch -case、For循環(huán)、While循環(huán)、Do-while循環(huán)

If-Else

if else循環(huán)的本質(zhì)是根據(jù)給定條件判斷程序執(zhí)行哪個(gè)分支。具體來說,if語句會先判斷括號中的條件是否為真,如果為真,則執(zhí)行花括號內(nèi)的代碼塊;否則,跳過該代碼塊,繼續(xù)執(zhí)行下一個(gè)語句。

x = 10

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

在這個(gè)示例中,我們定義了變量x,并使用if else語句對其進(jìn)行判斷。首先,if語句會判斷x是否大于5,由于x的值為10,因此條件成立,程序?qū)⑤敵觥皒大于5”。如果x的值為3,則條件不成立,程序?qū)⑻^if語句塊,執(zhí)行else語句塊,輸出“x小于等于5”。

總之,if else循環(huán)可以幫助我們根據(jù)不同的情況采取不同的行動,從而實(shí)現(xiàn)更加靈活和智能的編程。

舉例說明1

對于自動空調(diào)控制系統(tǒng),以夏季空調(diào)制冷為例,當(dāng)主副駕設(shè)定不同需要求溫度時(shí)(temp_set_driver,temp_set_passenger),整車TD負(fù)荷值按空調(diào)設(shè)定溫度最低的一側(cè)取值進(jìn)行計(jì)算

Python實(shí)現(xiàn)

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("自動空調(diào)設(shè)定溫度為:", output)
"""
我們使用了input()函數(shù)來獲取用戶輸入,并將其轉(zhuǎn)換成整數(shù)類型。然后,我們使用if else語句來判斷兩個(gè)變量的大小關(guān)系,并將最小值賦給output變量。

最后輸出自動空調(diào)設(shè)定溫度即可。例如,在上述示例中,當(dāng)用戶輸入主駕溫度為20,副駕溫度為22時(shí),程序會輸出“自動空調(diào)設(shè)定溫度為:20”,因?yàn)榇藭r(shí)主駕溫度小于等于副駕溫度。而當(dāng)用戶輸入主駕溫度為28,副駕溫度為24時(shí),程序會輸出“自動空調(diào)設(shè)定溫度為:24”,因?yàn)榇藭r(shí)主駕溫度大于副駕溫度。
"""

matlab function實(shí)現(xiàn)

function output = auto_temp_control(temp_set_driver, temp_set_passenger)
% 自動空調(diào)設(shè)定溫度取主駕和副駕溫度的最小值

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

fprintf("自動空調(diào)設(shè)定溫度為:%dn", output);
%{
我們定義了一個(gè)名為auto_temp_control的MATLAB函數(shù),并接受兩個(gè)輸入參數(shù):temp_set_driver和temp_set_passenger。然后,我們使用if else語句來判斷兩個(gè)變量的大小關(guān)系,并將最小值賦給output變量。

最后,我們使用fprintf()函數(shù)輸出自動空調(diào)設(shè)定溫度即可。例如,在上述示例中,當(dāng)用戶輸入主駕溫度為20,副駕溫度為22時(shí),程序會輸出“自動空調(diào)設(shè)定溫度為:20”,因?yàn)榇藭r(shí)主駕溫度小于等于副駕溫度。而當(dāng)用戶輸入主駕溫度為28,副駕溫度為24時(shí),程序會輸出“自動空調(diào)設(shè)定溫度為:24”,因?yàn)榇藭r(shí)主駕溫度大于副駕溫度。
%}

simulink實(shí)現(xiàn)

圖片

圖片

當(dāng)然,simulink實(shí)現(xiàn)方法是為了體現(xiàn)If-Else條件語句的邏輯,采用了Switch模塊,單看此部分的實(shí)例,選用min模塊會更加方便

圖片

Stateflow實(shí)現(xiàn)

圖片

If-Else If-Else

If-Else If-Else通常用于處理多種情況的判斷,例如根據(jù)不同的條件執(zhí)行不同的操作。以下是一個(gè)簡單的示例代碼(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("成績?yōu)椋?, grade)

舉例說明2

**當(dāng)車內(nèi)環(huán)境溫度(temp_incar)低于10℃時(shí),空調(diào)開啟加熱模式(AC_state==heater),當(dāng)車內(nèi)環(huán)境溫度處于10℃到30℃時(shí)開啟空調(diào)自然風(fēng)模式(AC_state==natural_wind),當(dāng)車內(nèi)環(huán)境溫度大于30℃時(shí)開啟制冷模式(AC_state==cooling)**

Python實(shí)現(xiàn)

temp_incar = float(input("請輸入車內(nèi)環(huán)境溫度:"))

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

print("空調(diào)狀態(tài)為:", AC_state)

matlab function實(shí)現(xiàn)

function AC_state = calculate_AC_state()
% 計(jì)算空調(diào)狀態(tài)

temp_incar = input("請輸入車內(nèi)環(huán)境溫度:");

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

fprintf('空調(diào)狀態(tài)為:%sn', AC_state);

end
%{
在這個(gè)示例中,我們首先定義了一個(gè)名為calculate_AC_state()的MATLAB函數(shù),并使用input()函數(shù)提示用戶輸入車內(nèi)環(huán)境溫度。然后,我們使用If-Else If-Else深層次邏輯來根據(jù)車內(nèi)環(huán)境溫度計(jì)算出對應(yīng)的空調(diào)狀態(tài),與之前的Python代碼相同。最后,我們使用fprintf()函數(shù)輸出計(jì)算出的空調(diào)狀態(tài)。
當(dāng)你調(diào)用該函數(shù)時(shí),程序會等待用戶輸入車內(nèi)環(huán)境溫度,并根據(jù)輸入的值計(jì)算出對應(yīng)的空調(diào)狀態(tài)。
%}

simulink實(shí)現(xiàn)

圖片

如果執(zhí)行語句只是簡單的賦值,使用 switch 模塊即可,如果涉及到更復(fù)雜的計(jì)算,應(yīng)避免頻繁使用開關(guān)塊進(jìn)行條件分岔,可考慮使用 If 以及 If Action Subsystem 模塊,但是這個(gè)"復(fù)雜"也很難定義。對于 Switch來說,通常會約束一個(gè)層疊的上限,比如三層,如果 switch 模塊層層疊疊層級非常多也可以考慮用子系統(tǒng)分別“包裹”起來,如果沒有狀態(tài)量的話,最好就不要用 If Action Subsystem模塊,理論上 Stateflow,Simulink 以及 MATLAB Function 幾乎都可以完成相同的模型,只是要根據(jù)應(yīng)用場合和使用習(xí)慣加以取舍。

使用 If 以及 If Action Subsystem 模塊對上面的switch模塊進(jìn)行改造,如下:

在Simulink中,If模塊和If Action Subsystem模塊組合可以用于實(shí)現(xiàn)多個(gè)條件分支邏輯。

  • If Action Subsystem 模塊是經(jīng)過預(yù)先配置的 Subsystem模塊,可以作為一個(gè)起點(diǎn),用來創(chuàng)建由 If模塊控制執(zhí)行的子系統(tǒng)。If 模塊計(jì)算邏輯表達(dá)式,然后根據(jù)計(jì)算結(jié)果輸出動作信號。子系統(tǒng)的執(zhí)行由放置在子系統(tǒng)內(nèi)部的 Action Port模塊控制;
  • If 模塊以及包含 Action Port 模塊的 If Action Subsystem 模塊實(shí)現(xiàn) if-else 邏輯來控制子系統(tǒng)的執(zhí)行。有關(guān)使用 If 模塊的示例,請參閱 If 執(zhí)行子系統(tǒng);
  • If 模塊從一組子系統(tǒng)中選擇 If Action Subsystem 模塊的執(zhí)行。無論 If 模塊選擇哪個(gè)子系統(tǒng),您都可以使用 Merge模塊創(chuàng)建單個(gè)信號;
  • If Action Subsystem 模塊中的所有模塊必須以與驅(qū)動 If 模塊相同的速率執(zhí)行。您可以通過將每個(gè)模塊的采樣時(shí)間參數(shù)設(shè)置為繼承 -1或與 If 模塊采樣時(shí)間相同的值來滿足此要求;
    圖片

Stateflow實(shí)現(xiàn)

圖片

Switch - Case

在Python中,switch-case結(jié)構(gòu)并不是一種原生的語言結(jié)構(gòu)。但我們可以使用其他方式來實(shí)現(xiàn)類似的功能。

一種常見的方法是使用字典(dictionary)和函數(shù)映射來模擬switch-case結(jié)構(gòu)。具體步驟如下:

    1. 創(chuàng)建一個(gè)字典,將每個(gè)條件對應(yīng)的操作函數(shù)作為值存儲在其中。
    1. 根據(jù)輸入信號選擇相應(yīng)的操作函數(shù),并執(zhí)行它。

以下是一個(gè)使用字典和函數(shù)映射實(shí)現(xiàn)switch-case結(jié)構(gòu)的示例代碼:

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

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

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

# 創(chuàng)建字典
cases = {
    1: case_1,
    2: case_2,
    3: case_3
}

# 輸入信號
u = 2

# 根據(jù)輸入信號選擇相應(yīng)的操作函數(shù),并執(zhí)行它
if u in cases:
    cases[u]()
else:
    print("Invalid input")

在上述代碼中,我們首先定義了三個(gè)操作函數(shù)case_1()、case_2()case_3(),分別對應(yīng)三種情況。然后,我們創(chuàng)建了一個(gè)字典cases,將每個(gè)條件對應(yīng)的操作函數(shù)作為值存儲在其中。最后,根據(jù)輸入信號選擇相應(yīng)的操作函數(shù),并執(zhí)行它。

既然python尚不支持Switch-Case,那我們先用一個(gè)C代碼示例展示Switch-Case語法結(jié)構(gòu)吧

#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;
}
/*
在上述代碼中,我們首先輸出一個(gè)菜單,讓用戶選擇一個(gè)選項(xiàng)。然后,我們使用switch-case結(jié)構(gòu)來根據(jù)用戶的選擇執(zhí)行相應(yīng)的操作。如果用戶輸入了無效的選項(xiàng),則會輸出“Invalid input.”。

這個(gè)示例代碼可以用于各種需要用戶交互的場景,例如命令行工具、控制臺程序等。
*/

閑話休提,我們接著舉例說明Switch-Case語句如何用simulink實(shí)現(xiàn)

舉例說明3

**空調(diào)吹風(fēng)模式具有多種狀態(tài),AC控制器需要把不同吹風(fēng)模式反饋給大屏控制器用于狀態(tài)顯示,AC_flow_state=0x0時(shí),AC_state=’face’;AC_flow_state=0x1時(shí),AC_state=’foot’;AC_flow_state=0x2時(shí),AC_state=’defrost’**

C代碼實(shí)現(xiàn)

#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;
}
/*
在上述代碼中,我們首先定義了一個(gè)整型變量AC_flow_state表示空調(diào)吹風(fēng)模式狀態(tài)。然后,我們使用switch-case結(jié)構(gòu)根據(jù)不同的狀態(tài)值來設(shè)置字符串類型的變量AC_state。最后,我們輸出AC_state的值。
需要注意的是,在default分支中,我們輸出了“Invalid input.”并返回-1,這是為了防止程序出現(xiàn)未知錯(cuò)誤。
char AC_state[10]是一個(gè)字符數(shù)組,用于存儲空調(diào)吹風(fēng)模式的狀態(tài)。在這個(gè)例子中,我們將其定義為長度為10的數(shù)組,因?yàn)樽铋L的狀態(tài)字符串"defrost"有7個(gè)字符,再加上結(jié)尾符?,所以需要分配至少8個(gè)字節(jié)的空間。
*/

matlab function代碼實(shí)現(xiàn)

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
%{
在上述代碼中,我們首先定義了一個(gè)MATLAB函數(shù)get_AC_state(),它接受一個(gè)整型參數(shù)AC_flow_state表示空調(diào)吹風(fēng)模式狀態(tài)。然后,我們使用switch-case結(jié)構(gòu)根據(jù)不同的狀態(tài)值來設(shè)置字符串類型的變量AC_state
}%

simulink實(shí)現(xiàn)

圖片

Stateflow實(shí)現(xiàn)

圖片

而對于 Stateflow 來說,不管是if-else還是switch-case,其實(shí)都是流程圖。所以就算你按照switch-case的邏輯畫了出來,生成的代碼依舊是if-else形式的。

所以需要我們稍微配置一下:模型設(shè)置→代碼生成→代碼風(fēng)格→勾選convert if-elseif-else patterns to switch case

圖片

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 驅(qū)動器
    +關(guān)注

    關(guān)注

    52

    文章

    8237

    瀏覽量

    146381
  • 控制器
    +關(guān)注

    關(guān)注

    112

    文章

    16367

    瀏覽量

    178108
  • 自動控制系統(tǒng)
    +關(guān)注

    關(guān)注

    1

    文章

    191

    瀏覽量

    19401
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84694
  • simulink仿真
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    8578
收藏 人收藏

    評論

    相關(guān)推薦

    開關(guān)語句循環(huán)語句

    switch/case開關(guān)語句種多分支選擇語句,是用來實(shí)現(xiàn)多方向條件分支的語句。雖然從理論上
    發(fā)表于 07-15 14:26 ?18次下載

    C語言入門教程-if語句和while循環(huán)

    if語句和while循環(huán) C語言中,if語句和while循環(huán)都會用到布爾表達(dá)式。下面是個(gè)使用if語句
    發(fā)表于 07-29 10:48 ?8554次閱讀

    Java的循環(huán)語句的詳細(xì)資料說明

    本文檔的主要內(nèi)容詳細(xì)介紹的是Java的循環(huán)語句的詳細(xì)資料說明包括了:1、while循環(huán)語句,2、do…while循環(huán)
    發(fā)表于 03-22 08:00 ?0次下載
    Java的<b class='flag-5'>循環(huán)</b><b class='flag-5'>語句</b>的詳細(xì)資料說明

    C語言的for循環(huán)語句的程序和電路圖免費(fèi)下載

    1、在許多實(shí)際問題中,需要程序進(jìn)行有規(guī)律的重復(fù)執(zhí)行,這時(shí)可以用循環(huán)語句實(shí)現(xiàn)。在c語言中。用來實(shí)現(xiàn)循環(huán)
    發(fā)表于 08-20 17:31 ?1次下載
    C語言的for<b class='flag-5'>循環(huán)</b><b class='flag-5'>語句</b>的程序和電路圖免費(fèi)下載

    Verilog可綜合的循環(huán)語句

    Verilog中提供了四種循環(huán)語句,可用于控制語句的執(zhí)行次數(shù),分別為:for,while,repeat,forever。其中,for,while,repeat是可綜合的,但循環(huán)的次數(shù)需
    發(fā)表于 10-13 12:23 ?2w次閱讀

    條件判斷語句(if語句

    條件判斷語句,作為任何編程語言都不可缺少的內(nèi)容,在C語言中也不例外。條件判斷語句可以讓程序的功能更加復(fù)雜,從而實(shí)現(xiàn)各種各樣的功能。
    的頭像 發(fā)表于 02-21 15:24 ?3525次閱讀
    <b class='flag-5'>條件</b>判斷<b class='flag-5'>語句</b>(if<b class='flag-5'>語句</b>)

    什么是python break語句-終止循環(huán)

    循環(huán)的過程中如果要退出循環(huán),我們可以用break語句和continue語句
    的頭像 發(fā)表于 02-23 11:17 ?2522次閱讀

    C語言for語句介紹

    除了可以用while語句和do...while語句實(shí)現(xiàn)循環(huán)外,C語言還提供for語句實(shí)現(xiàn)
    的頭像 發(fā)表于 03-09 11:14 ?1374次閱讀

    詳解Python條件語句

    在 Python 中,if...else 是條件語句,可以根據(jù)給定的條件執(zhí)行不同的操作。這個(gè)語句通常用于控制程序的流程。
    的頭像 發(fā)表于 04-19 15:39 ?824次閱讀

    Python的循環(huán)語句介紹

    哈嘍大家好,我是知道。今天帶大家了解下Python的循環(huán)語句 定義循環(huán)語句允許我們執(zhí)行個(gè)語句
    的頭像 發(fā)表于 05-11 17:39 ?908次閱讀

    Verilog常用的循環(huán)語句及用途

    本文主要介紹verilog常用的循環(huán)語句循環(huán)語句的用途,主要是可以多次執(zhí)行相同的代碼或邏輯。
    的頭像 發(fā)表于 05-12 18:26 ?2492次閱讀

    MATLAB中條件語句循環(huán)結(jié)構(gòu)的使用方式

    MATLAB提供了多種條件語句循環(huán)結(jié)構(gòu)。
    的頭像 發(fā)表于 07-05 09:41 ?4237次閱讀

    條件語句/循環(huán)語句simulink實(shí)現(xiàn)方法(二)

    for 循環(huán)是 Python 中用于遍歷序列(如列表、元組、字符串等)的迭代結(jié)構(gòu)。for 循環(huán)的本質(zhì)是按照序列中的元素順序執(zhí)行代碼塊,并在每次迭代中獲取序列的下個(gè)元素。
    的頭像 發(fā)表于 07-21 16:51 ?6919次閱讀
    <b class='flag-5'>條件</b><b class='flag-5'>語句</b>/<b class='flag-5'>循環(huán)</b><b class='flag-5'>語句</b><b class='flag-5'>simulink</b>的<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>方法</b>(二)

    Python中什么是語句

    條件判斷 語句塊 什么是語句塊呢? 語句塊是在條件為真(條件
    的頭像 發(fā)表于 09-12 16:41 ?1017次閱讀

    Python條件條件語句

    if語句 對于if語句,若條件判定為真,那么后面的語句塊就會被執(zhí)行。若條件判定為假,語句塊就會被
    的頭像 發(fā)表于 09-12 16:45 ?608次閱讀