MATLAB Unit Test Framework を利用した単体テスト​時の入力データ設定「​setExterna​lInput」のエラ​ーに関して

14 views (last 30 days)
作成したモデルに対して、「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)になります。

Accepted Answer

交感神経優位なあかべぇ
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);
  1 Comment
T.K
T.K on 20 Nov 2025
ご指摘の対応でエラーなく動作致しました。
※型の理解が不十分でした。
大変ありがとうございました。

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!