メインコンテンツ

MATLAB System ブロック ダイアログ ボックスのカスタマイズ

この例では、MATLAB System ブロック ダイアログ ボックスをカスタマイズする方法を示します。モデルには、System object™ CustomDialog を実装する MATLAB System ブロックが含まれています。MATLAB System ブロック ダイアログのチェック ボックス、リスト、グループ、タブ、ボタンを作成するために、ブロック ダイアログ ボックスを使用して System object のプロパティを変更します。

System object

System object を使用すると、MATLAB® でのアルゴリズムの実装が可能になります。System object は入力が時間経過とともに変化する動的システムを実装およびシミュレーションするために特別に設計された、特殊な種類の MATLAB オブジェクトです。

System object を定義すれば、MATLAB System ブロックを使用してそれを Simulink® モデルに含めることができます。

System object クラスの定義

ブロック ダイアログ ボックスで [ソース コード] ハイパーリンクをクリックすることで、MATLAB System ブロックによって使用される MATLAB ソース コードにアクセスできます。System object CustomDialog は、ブロック ダイアログ ボックスの外観をカスタマイズし、System object のプロパティを整理するために使用される getPropertyGroupsImpl メソッドと getHeaderImpl メソッドを実装します。

  1. PropertyDefault - カスタマイズが行われないプロパティ

  2. PropertyCustomPrompt - カスタム プロンプトを伴うプロパティ

  3. PropertyEnum - オプションの有限リストをもつ列挙プロパティ

  4. PropertyLogical - チェック ボックスを作成する logical によるプロパティ検証

  5. PropertyInDifferentTab - ダイアログ ボックスの異なるタブに表示されるプロパティ

getPropertyGroupsImpl メソッドでは、matlab.system.display.Section クラスと matlab.system.display.SectionGroup クラスを使用して、ダイアログ ボックスのプロパティ セクションとタブが作成されます。getPropertyGroupsImpl では、System object の visualize メソッドを呼び出すボタンも "グループ 2" セクションに作成されます。

classdef CustomDialog < matlab.System
% CustomDialog Customize System block dialog

    properties
        PropertyDefault = 10
        % For PropertyDefault, with no comment above, property name is used
        % as prompt

        % PropertyCustomPrompt Use comment above property for custom prompt
        PropertyCustomPrompt = 20
        
        % PropertyEnum Use enumeration to limit values to finite list
        PropertyEnum (1,1) ColorValues = ColorValues.blue

        % PropertyInDifferentTab Use getPropertyGroupsImpl to create tabs
        PropertyInDifferentTab = 30
    end
    
    properties(Nontunable)
        % PropertyLogical Use logical property validation to create a checkbox
        PropertyLogical (1,1) logical = true
    end
    
    methods(Access = protected)
        function y = stepImpl(~, u)
            y = u;
        end
    end
    
    methods (Static, Access = protected)
        function groups = getPropertyGroupsImpl
        % Use getPropertyGroupsImpl to create property sections in the
        % dialog. Create two sections with titles "Group1" and
        % "Group2". "Group1" contains PropertyDefault and
        % PropertyCustomPrompt. "Group2" contains PropertyEnum, 
        % PropertyLogical, and a Visualize button.
            group1 = matlab.system.display.Section(...
                'Title','Group 1',...
                'PropertyList',{'PropertyDefault','PropertyCustomPrompt'});
 
            group2 = matlab.system.display.Section(...
                'Title','Group 2',...
                'PropertyList',{'PropertyEnum','PropertyLogical'});

            % Add a button that calls back into the visualize method
            group2.Actions = matlab.system.display.Action(@(actionData,obj)...
                    visualize(obj,actionData),'Label','Visualize');

            tab1 = matlab.system.display.SectionGroup(...
                    'Title', 'Tab 1', ...
                    'Sections',  [group1, group2]);
           
            tab2 = matlab.system.display.SectionGroup(...
                    'Title', 'Tab 2', ...
                    'PropertyList',  {'PropertyInDifferentTab'});

            groups = [tab1, tab2];
        end
        
        function header = getHeaderImpl
           header = matlab.system.display.Header(mfilename('class'), ...
                   'Title','AlternativeTitle',...
                   'Text','Customize dialog header using getHeaderImpl method.');
         end
    end

    methods
        function visualize(obj, actionData)
            % Use actionData to store custom data
            f = actionData.UserData;
            if isempty(f) || ~ishandle(f)
                f = figure;
                actionData.UserData = f;
            else
                figure(f); % Make figure current
            end
        
            d = 1:obj.PropertyCustomPrompt;
            plot(d);
        end
    end
end

参考

トピック