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