MATLAB System ブロックの出力特性の指定
この例では、MATLAB System ブロックの出力サイズ、データ型および実数/複素数を指定する方法を示します。
System object
System object を使用すると、MATLAB® でのアルゴリズムの実装が可能になります。System object は入力が時間経過とともに変化する動的システムを実装およびシミュレーションするために特別に設計された、特殊な種類の MATLAB オブジェクトです。
System object™ を定義すれば、MATLAB System ブロックを使用してそれを Simulink® モデルに含めることができます。
モデルの説明
この例には、入力の秒数を現在の時間に追加し、結果の時、分、秒を出力として生成する MATLAB System ブロックがあります。各出力端子からの出力値が Display ブロックに表示されます。

この例では、System object の出力サイズ、データ型、および実数/複素数を指定する方法を示します。MATLAB System ブロックによってそれらを自動的に推定できないときは、出力プロパティを指定します。MATLAB System ブロックは、入力データ型、サイズ、および実数/複素数を伝播するメソッドを実装する System object PropagateOutputSpecs を使用します。
System object クラスの定義
ブロック ダイアログで "Source code" ハイパーリンクをクリックすることで、MATLAB System ブロックによって使用される MATLAB ソース コードにアクセスできます。System object PropagateOutputSpecs は、入力値を現在の時間に秒単位で追加して、結果の時、分、秒を出力する stepImpl メソッドを実装します。stepImpl メソッドでは、関数 datetime を使用してその出力を計算します。関数 datetime はコード生成でサポートされていないため、MATLAB System ブロックは出力仕様を自動的に推定できません。System object は次のメソッドを実装して出力プロパティを指定します。
getOutputSizeImpl- 出力サイズを指定getOutputDataTypeImpl- 出力のデータ型を指定isOutputComplexImpl- 出力の実数/複素数を指定isOutputFixedSizeImpl- 出力を可変サイズにできるかどうかを指定
classdef PropagateOutputSpecs < matlab.System
% PropagateOutputSpecs Propagation in Simulink
methods(Access = protected)
function [h, m, s] = stepImpl(~, secs)
% Add input hours, minutes and seconds to current time
d = datetime;
d = d + seconds(secs);
h = hour(d);
m = minute(d);
s = second(d);
end
function [o1, o2, o3] = getOutputSizeImpl(obj)
% Return size for output port to be same as input port
inSize = propagatedInputSize(obj, 1);
o1 = inSize;
o2 = inSize;
o3 = inSize;
end
function [o1, o2, o3] = getOutputDataTypeImpl(obj)
% Return data type for output port to be same as input port
inType = propagatedInputDataType(obj, 1);
o1 = inType;
o2 = inType;
o3 = inType;
end
function [o1, o2, o3] = isOutputComplexImpl(~)
% Return output port complexity to be real
o1 = false;
o2 = false;
o3 = false;
end
function [o1, o2, o3] = isOutputFixedSizeImpl(~)
% Return true for each output port with fixed size
o1 = true;
o2 = true;
o3 = true;
end
end
end
参考
getOutputSizeImpl | isOutputComplexImpl | isOutputFixedSizeImpl | getOutputSizeImpl | getOutputDataTypeImpl