MATLAB Answers

0

モデルに事前に意図し​ていないデータ型が含​まれていないかを確認​する方法はありますか​?

シミュレーションを実行するとデータ型の不一致でエラーが発生してしまいます。
事前に意図していないデータ型がモデルに含まれていないかを確認する方法を教えてください。

1 Answer

Answer by MathWorks Support Team on 24 Sep 2019 at 4:00
Edited by MathWorks Support Team on 24 Sep 2019 at 17:24
 Accepted Answer

find_systemとget_paramコマンドによって実現できます。
find_systemコマンドによってモデルに含まれる全ブロックを見つけ、そのハンドルを取得します。
その後、取得したハンドルを元に各ブロックの出力ポートのデータ型をget_paramコマンドによって取得し、事前に取り決めたデータタイプと比較をすることでチェックします。
以下にスクリプト例を示します。
% strModel:モデル名
% cellDataType:事前に取り決めたデータタイプを有するセル配列 例. {'boolean', 'int8', 'uint16'}
% モデルのコンパイル
feval(strModel, [], [], [], 'compile');
% ブロックを見つける
hBlocks = find_system(strModel, 'FindAll', 'on', 'type', 'block');
% ブロックごとに出力ポートに設定されているデータ型を確認
count = 0;
for n = 1: numel(hBlocks)
h = hBlocks(n);
% 出力ポートの情報を取得
PH = get_param(h, 'PortHandles');
for k = 1: numel(PH.Outport)
hOut = PH.Outport(k);
% 指定したデータ型と一致するかを比較
strDataType = get_param(hOut, 'CompiledPortDataType');
if ~any(strcmp(cellDataType, strDataType))
count = count+1;
% コマンドウィンド上でクリックするとブロックへ移動できるようなハイパーリンクを使用
fprintf('%04d: <a href="matlab:hilite_system(''%s'')">%s</a>: %s\n', count, getfullname(h), getfullname(h), strDataType);
end
end
end
% コンパイルの解除
feval(strModel, [], [], [], 'term');
回答上部に添付されたファイルは、上記の内容を関数化したものです。

  0 Comments

Sign in to comment.