MATLAB Unit Test Framework を利用した単体テスト時の入力データ設定「setExternalInput」のエラーに関して
18 views (last 30 days)
Show older comments
作成したモデルに対して、「matlab.unittest.TestCase」でのテストスクリプト(.m)を作成しています。
モデルは2入力となっているため、以下のようにオブジェクト関数「setExternalInput」にて入力データのセットを行いました。
% 入力1 (Simulink Timeseries形式)
input1 = timeseries(ones(size(time_s)) * Current, time_s, 'Name', 'I1');
input1.DataInfo.Interpolation = tsdata.interpolation('zoh');
% 入力2 (Simulink Timeseries形式 - 最初のみ有効な信号として扱う)
initial_waveform = [Initial_V; zeros(numel(time_s)-1, 1)];
input2 = timeseries(initial_waveform, time_s, 'Name', 'I2');
input2.DataInfo.Interpolation = tsdata.interpolation('zoh');
simIn = Simulink.SimulationInput(testCase.ModelName);
simIn = simIn.setExternalInput({input1, input2});
結果、以下エラーとともに入力データが正しくモデルに入っていないようです。
'Simulink:Logging:InvInputLoadNameList'
[入力] パラメーターを使用して指定する外部入力の数 (1) は、ルートレベルの Inport ブロック、Enable ブロック、およびトリガータイプが関数呼び出し以外の Trigger ブロックの合計数 (2) と一致していなければなりません。
確認したこととしては以下2つになります。
1.モデルのinportブロック名(ブロックの下の名前)とテストケースの各入力信号名(Name)が合っている
※find_system コマンドにて以下を確認
--- Simulink Model Inport Block Details ---
Block Path: ****model/I1
Block Name: I1
Block Port Number: 1
--------------------------
Block Path: ****model/I2
Block Name: I2
Block Port Number: 2
--------------------------
2.テストケースのデバッグ出力では 「simIn.ExternalInput が {1×1 timeseries} {1×1 timeseries}」 と表示されていた
<質問>
上記エラーが発生する原因と処置方法がわかればご教示をお願いできますでしょうか。
※Matlab_ver= バージョン 24.2 (R2024b)になります。
0 Comments
Accepted Answer
交感神経優位なあかべぇ
on 18 Nov 2025 at 11:41
simIn.setExternalInput に入力する値がセル配列になっていることがエラーの原因かと思います。
Simulink.SimulationData.Datasetオブジェクトを入力すれば、解決すると思います。
simIn = Simulink.SimulationInput(testCase.ModelName);
ds = Simulink.SimulationData.Dataset();
ds = ds.addElement(input1, 'I1'); % input1, input2は作成したtimeseriesオブジェクト
ds = ds.addElement(input2, 'I2');
simIn = simIn.setExternalInput(ds);
More Answers (0)
See Also
Categories
Find more on Sources in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!