MATLAB-Simulink 整合與程式化模擬速查表

MATLAB-Simulink 整合與程式化模擬速查表


1. 載入、開啟與關閉模型

在用程式控制之前,通常需要先將模型載入到電腦記憶體中。

model_name = 'my_model';  % 你的 Simulink 檔名 (不要加 .slx)

% 1. 載入模型 (只放在記憶體,畫面不會跳出來,跑迴圈時最快!)
load_system(model_name);

% 2. 開啟模型 (如果需要讓畫面跳出來給你看)
open_system(model_name);

% ... 中間執行修改參數與模擬 ...

% 3. 關閉模型
close_system(model_name, 0); % 第二個參數 0 代表「不儲存變更直接關閉」,1 代表「儲存變更」

2. 讀取與修改模型內的模塊參數 (超重要 ⚠️)

這是大家最常卡關的地方!要修改 Simulink 裡的模塊,你必須知道它的**「路徑」**。 路徑格式為:模型名稱/模塊名稱 (例如:my_model/Controller/Kp_Gain)。

語法:get_param (獲取參數) 與 set_param (設定參數)

block_path = 'my_model/Gain_Block'; % 假設模型裡有一個 Gain 模塊叫做 Gain_Block

% 【讀取】目前的 Gain 數值
current_gain = get_param(block_path, 'Gain');
disp(['目前的 Gain 是:', current_gain]); 

% 【修改】將 Gain 的數值改成 10.5
% 注意!不能寫 10.5,必須用 num2str(10.5) 或直接寫 '10.5' 轉成字串!
set_param(block_path, 'Gain', '10.5'); 

% 【修改求解器步長】(這就是為什麼前面教的 MaxStep 可以這樣設)
set_param(model_name, 'MaxStep', '0.01');

過去大家都在迴圈裡狂用 set_param,但這有個致命缺點:它會真的改動你的模型檔案,如果你忘記改回來,下次打開模型參數就全亂了。

現代 MATLAB 提供了一個超強物件 SimulationInput,它可以**「只在這次模擬中暫時替換參數,模擬結束後模型毫髮無傷」**。強烈推薦用這個寫法!

% 1. 建立一個針對該模型的 SimulationInput 物件
simIn = Simulink.SimulationInput('my_model');

% 2. 暫時修改模塊參數 (不會存入 .slx 檔案)
simIn = simIn.setBlockParameter('my_model/Gain_Block', 'Gain', '15.2');
simIn = simIn.setBlockParameter('my_model/Step_Input', 'Time', '2');

% 3. 暫時修改模型整體設定 (例如 StopTime 或步長)
simIn = simIn.setModelParameter('StopTime', '20');
simIn = simIn.setModelParameter('MaxStep', '0.01');

% 4. 執行模擬 (把剛剛包裝好的 simIn 丟進 sim 函數)
out = sim(simIn);

% 5. 抓取資料來畫圖
plot(out.tout, out.sim_result);

4. 實戰終極範例:將自訂變數傳入 Simulink (Base Workspace 連結)

有時候你要改的參數太多,用 setBlockParameter 一個一個設太慢了。 最專業的做法是:在 Simulink 的模塊裡,不要填數字,直接填入變數名稱(例如在 Gain 模塊裡面填 my_Kp)。

接著,透過 MATLAB 腳本設定 my_Kp 的值,並使用 setVariable 把它塞給 Simulink 模擬:

這招在配合 for 迴圈做參數掃描(Parameter Sweep)或是做 PID 參數自動調校時,是最乾淨、最不容易出錯的做法!


Revision #1
Created 2026-04-01 02:06:36 UTC by TaipeiTechRacing
Updated 2026-04-06 16:39:15 UTC by TaipeiTechRacing