<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
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

    文章

    7570

    瀏覽量

    143628
  • 控制器
    +關注

    關注

    112

    文章

    15392

    瀏覽量

    172688
  • 自動控制系統

    關注

    1

    文章

    177

    瀏覽量

    19212
  • python
    +關注

    關注

    52

    文章

    4698

    瀏覽量

    83610
  • simulink仿真
    +關注

    關注

    0

    文章

    75

    瀏覽量

    8484
收藏 人收藏

    評論

    相關推薦

    條件語句 啟動不同的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.9w次閱讀

    條件判斷語句(if語句

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

    什么是python break語句-終止循環

    循環的過程中如果要退出循環,我們可以用break語句和continue語句。
    的頭像 發表于 02-23 11:17 ?2057次閱讀

    C語言for語句介紹

    除了可以用while語句和do...while語句實現循環外,C語言還提供for語句實現
    的頭像 發表于 03-09 11:14 ?885次閱讀

    Python的循環語句介紹

    哈嘍大家好,我是知道。今天帶大家了解下Python的循環語句 定義循環語句允許我們執行一個語句語句
    的頭像 發表于 05-11 17:39 ?681次閱讀

    Verilog常用的循環語句及用途

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

    MATLAB中條件語句循環結構的使用方式

    MATLAB提供了多種條件語句循環結構。
    的頭像 發表于 07-05 09:41 ?2854次閱讀

    條件語句/循環語句simulink實現方法(二)

    for 循環是 Python 中用于遍歷序列(如列表、元組、字符串等)的迭代結構。for 循環的本質是按照序列中的元素順序執行代碼塊,并在每次迭代中獲取序列的下一個元素。
    的頭像 發表于 07-21 16:51 ?4838次閱讀
    <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 ?686次閱讀

    Python條件條件語句

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

    單片機中for語句的運用

    語句,它的基本結構如下: for (初始化語句; 條件表達式; 更新語句) {循環體;} for語句
    的頭像 發表于 01-05 14:02 ?821次閱讀
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>