查詢 Simulink 結構體變數中未使用的欄位


簡介

Simulink 是一種流行的用於建模和模擬動態系統的工具。在 Simulink 中,結構體變數用於儲存和組織資料,以便於訪問和操作。但是,結構體變數包含未使用的欄位的情況並不少見,這可能使程式碼變得不必要地複雜且難以維護。在本文中,我們將討論如何在 Simulink 結構體變數中查詢未使用的欄位,並提供示例來演示此過程。

什麼是 Simulink 結構體變數?

在 Simulink 中,結構體變數是一個容器,用於在欄位中儲存資料。欄位是結構體的單個元素,用於儲存單個值,例如標量、向量或矩陣。結構體變數通常用於組織 Simulink 模型中的資料,包括引數、訊號和狀態。

例如,考慮一個簡單的 Simulink 模型,該模型模擬彈簧-質量-阻尼器系統的動力學。模型包含三個引數、兩個訊號和一個狀態,如下所示。

在此模型中,引數、訊號和狀態可以儲存在結構體變數中,如下所示。

% Define a structure variable to store model data
model_data = struct('mass', 1, ...
                    'spring_constant', 10, ...
                    'damping_coefficient', 0.5, ...
                    'input_signal', [], ...
                    'output_signal', [], ...
                    'state', 0);

結構體變數的欄位使用 struct 函式定義,資料儲存在相應的欄位中。input_signal 和 output_signal 欄位目前為空,因為我們將在模型的後面生成這些訊號。

如何在 Simulink 結構體變數中查詢未使用的欄位

在建立 Simulink 模型時,通常會定義一個包含許多欄位的結構體變數,其中一些欄位可能未被使用。未使用的欄位可能使程式碼變得不必要地複雜且難以維護。因此,識別並刪除這些欄位非常重要。

要查詢 Simulink 結構體變數中未使用的欄位,我們可以使用 MATLAB 的 mlint 函式。mlint 函式是一個程式碼分析器,用於檢查程式碼中潛在的問題並提供改進建議。特別是,mlint 函式可以檢測程式碼中未使用的變數和欄位。

要使用 mlint 函式,我們需要將 Simulink 模型儲存為 M 檔案。M 檔案包含生成 Simulink 模型的 MATLAB 程式碼。要將模型儲存為 M 檔案,請轉到“檔案”->“生成程式碼”->“到檔案”。然後,選擇 M 檔案格式並指定檔名和位置。

生成 M 檔案後,我們可以使用以下命令在該檔案上執行 mlint 函式。

mlint('filename.m')

其中 filename.m 是 M 檔案的名稱。

mlint 函式會生成一份報告,突出顯示程式碼中潛在的問題,包括結構體變數中未使用的欄位。該報告提供了刪除未使用的欄位的建議,以及可以對程式碼進行的其他改進。

示例:在 Simulink 結構體變數中查詢未使用的欄位

為了演示如何在 Simulink 結構體變數中查詢未使用的欄位,讓我們考慮以下 Simulink 模型,該模型模擬一個簡單的反饋控制系統。

該模型包含一個被控物件子系統、一個控制器子系統和一個用於顯示輸出的示波器模組。被控物件子系統模擬一階系統的動力學,而控制器子系統實現比例積分 (PI) 控制器。

要儲存模型資料,我們可以定義一個包含以下欄位的結構體變數。

% Define a structure variable to store model data
model_data = struct('k', 1, ...
                    'tau', 0.1, ...
                    'setpoint', 1, ...
                    'kp', 1, ...
                    'ki', 0.1, ...
                    'output', [], ...
                    'input', []);

k 和 tau 欄位是被控物件引數,而 setpoint、kp 和 ki 欄位是控制器引數。output 和 input 欄位分別儲存系統的輸出和輸入訊號。

現在讓我們將模型儲存為 M 檔案,並在該檔案上執行 mlint 函式。

% Save model as an M-file
model_file = 'feedback_control_system.m';
open_system('feedback_control_system');
rtwbuild('feedback_control_system', 'GenerateMakefile', 'off', 'MakefileName', 'makefile', 'BuildConfiguration', 'Faster Runs', 'CodeType', 'Real-Time Workshop');
movefile('feedback_control_system_ert_rtw/feedback_control_system.c', model_file, 'f');
rmdir('feedback_control_system_ert_rtw', 's');

% Run mlint function on M-file
mlint(model_file);

mlint 函式會生成以下報告。

Feedback control system.m 
      Unused variable or function 'model_data.input'.
      Unused variable or function 'model_data.output'.

該報告指出 model_data 結構體變數中的 input 和 output 欄位未被使用。可以刪除這些欄位以簡化程式碼。

要刪除未使用的欄位,我們可以修改 model_data 結構體變數,如下所示。

% Define a structure variable to store model data
model_data = struct('k', 1, ...
                    'tau', 0.1, ...
                    'setpoint', 1, ...
                    'kp', 1, ...
                    'ki', 0.1);

input 和 output 欄位已從 model_data 結構體變數中刪除。

除了 mlint 函式之外,Simulink 還提供了一個名為模型顧問的內建診斷工具,該工具可用於識別和解決 Simulink 模型中的問題,包括結構體變數中未使用的欄位。模型顧問檢查模型設計錯誤,並提供改進模型質量和效能的建議。

要使用模型顧問,我們可以開啟 Simulink 模型,然後從“分析”選項卡中選擇“模型顧問”選項。模型顧問視窗將開啟,我們可以從檢查列表中選擇“未使用的訊號、引數和狀態”複選框。然後,模型顧問將掃描模型中未使用的訊號、引數和狀態,並提供刪除它們的建議。

需要注意的是,雖然模型顧問可以幫助識別結構體變數中未使用的欄位,但它可能無法檢測模型中的所有問題。因此,建議同時使用模型顧問和 mlint 函式,以確保模型沒有錯誤和未使用的欄位。

結論

總之,Simulink 結構體變數對於組織 Simulink 模型中的資料很有用。但是,識別並刪除結構體變數中未使用的欄位以避免不必要的複雜性並提高可維護性非常重要。要查詢 Simulink 結構體變數中未使用的欄位,我們可以使用 MATLAB 的 mlint 函式,該函式會生成一份報告,突出顯示程式碼中潛在的問題。透過刪除未使用的欄位,我們可以簡化程式碼並使其更易於維護。

更新於: 2023-03-03

245 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.