メインコンテンツ

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 クラスの定義

ブロック ダイアログ ボックスで [ソース コード] ハイパーリンクをクリックすることで、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

参考

| | | |

トピック