ModelAdvisor.EdittimeCheck クラス
名前空間: ModelAdvisor
説明
ModelAdvisor.EdittimeCheck
抽象基底クラスからクラスを派生させ、カスタム編集時チェックを作成します。カスタム編集時チェックを作成するには、この抽象基底クラスから派生させた MATLAB® クラスを作成します。次に、クラスへのハンドルを含むチェック定義関数を作成し、関数 sl_customization
を使用してカスタム編集時チェックを登録します。
ModelAdvisor.EdittimeCheck
クラスは handle
クラスです。
プロパティ
checkID
— チェックの識別子
string
チェックの識別子。string として指定します。チェック定義関数の一部として作成した ModelAdvisor.Check
クラスを使用してこのプロパティを設定します。checkID
プロパティは、チェックの不変で一意の識別子を指定します。
例: "advisor.edittime.inoutnamelength"
属性:
GetAccess | protected |
SetAccess | protected |
TraversalType
— モデル アドバイザーで編集時チェックを実行する方法
edittimecheck.TraversalTypes.BLKITER
| edittimecheck.TraversalTypes.ACTIVEGRAPH
モデル アドバイザーで編集時チェックを実行する方法。次のいずれかの値として指定します。
edittimecheck.TraversalTypes.BLKITER
— チェックは、新しく追加されたブロックおよび編集されたブロックに対して実行されます。この編集には、ブロック名、タイプ、およびパラメーター値の変更が含まれます。edittimecheck.TraversalTypes.ACTIVEGRAPH
— チェックは、新しく追加されたブロック、編集されたブロック、"および" 編集されたブロックまたは新しく追加されたブロックと同じレベルの他のブロックに対して実行されます。ユーザーが編集しているサブシステムまたはモデルのレベル全体をチェックで確認する必要がある場合は、このトラバーサル タイプのプロパティを指定します。たとえば、このトラバーサル タイプを指定して、Trigger ブロックがサブシステム内の最上位のブロックであることをチェックします。これは、この判定を行うには、チェックでサブシステム内の他のブロックを確認する必要があるためです。
例: eddittimecheck.TraversalTypes.BLKITER
属性:
GetAccess | protected |
SetAccess | protected |
メソッド
保護されたメソッド
blockDiscovered | Specify algorithm for identifying blocks that violate edit-time check |
finishedTraversal | Specify edit-time check algorithm to run after blockDiscovered
method |
fix | 編集時チェック ブロック違反を修正するアルゴリズムを指定する |
例
Inport ブロックおよび Outport ブロックのカスタム編集時チェックの作成
Inport ブロックと Outport ブロックが出力データ型に応じた所定の色になっていることをチェックするカスタム編集時チェックを作成します。
モデルを取得してモデル アドバイザー チェックを試します。
openExample('AdvisorCustomizationExample')
モデルを作業フォルダーに保存します。モデルを閉じます。
カスタム編集時チェックを登録するには、関数 sl_customization
を作成します。関数 sl_customization
では、1 つの引数 (カスタマイズ マネージャー オブジェクト) を受け入れます。カスタム チェックを登録するには、addModelAdvisorCheckFcn
メソッドを使用します。このメソッドへの入力は、チェック定義関数へのハンドルです。この例では、defineCheck
がチェック定義関数です。関数 sl_customization
を作成し、作業フォルダーに保存します。
function sl_customization(cm)
cm.addModelAdvisorCheckFcn(@defineCheck);
チェック定義関数を作成します。関数内で、ModelAdvisor.Check
オブジェクトを作成し、入力引数としてチェック ID を指定します。次に、ModelAdvisor.Check
Title
プロパティおよび CallbackHandle
プロパティを指定します。CallbackHandle
プロパティは編集時チェックを定義するために作成するクラスの名前です。この例では、MyEditTimeChecks
がパッケージ名で PortColor
がクラス名です。次に、モデル アドバイザーの新しいフォルダーにチェックをパブリッシュします。この例では、フォルダー名は "DEMO: Edit-time Checks" です。この例では、関数 defineCheck
を作成し、その下のコードを含めます。関数 defineCheck
を作業フォルダーに保存します。
function defineCheck rec = ModelAdvisor.Check("advisor.edittimecheck.PortColor"); rec.Title = 'Check color of Inport and Outport blocks'; rec.CallbackHandle = 'MyEditTimeChecks.PortColor'; mdladvRoot = ModelAdvisor.Root; mdladvRoot.publish(rec,'DEMO: Edit-time Checks');
ModelAdvisor.EdittimeCheck
抽象基底クラスから派生するクラスを作成します。この例では、PortColor.m
という名前のクラス ファイルを作成します。下のコードを PortColor.m
ファイルにコピーします。次に、+MyEditTimeChecks
という名前のフォルダーを作成し、このフォルダーに PortColor.m
ファイルを保存します。クラスはパッケージ名と同じ名前のフォルダー内に存在する必要があります。
PortColor
クラスは、PortColor
、blockDiscovered
、fix
という 3 つのメソッドを定義します。PortColor
メソッドは CheckId
プロパティおよび TraversalType
プロパティを設定します。このチェックは新しく追加されたブロックと編集されたブロックを確認する必要がありますが、編集されたブロックまたは新しく追加されたブロックとして、同じサブシステムまたはモデル内の影響を受けたブロックを確認する必要はないため、チェックにはトラバーサル タイプの edittimecheck.TraversalTypes.BLKITER
が含まれます。blockDiscovered
メソッドには、Inport ブロックと Outport ブロックの色をチェックするアルゴリズムが含まれます。fix
メソッドは正しい色になっていないブロックを更新します。
classdef PortColor < ModelAdvisor.EdittimeCheck % Check that ports conform to software design standards for background color. % % Background Color Data Types % orange Boolean % green all floating-point % cyan all integers % Light Blue Enumerations and Bus Objects % white auto % methods % Set the Check ID and traversal type. function obj=PortColor(checkId) obj=obj@ModelAdvisor.EdittimeCheck(checkId); obj.traversalType = edittimecheck.TraversalTypes.BLKITER; end % Specify the edit-time check algorithm using the blockDiscovered method. function violation = blockDiscovered(obj, blk) violation = []; % To check when this check gets called, insert a breakpoint here. if strcmp(get_param(blk,'BlockType'),'Inport') || strcmp(get_param(blk,'BlockType'),'Outport') dataType = get_param(blk,'OutDataTypeStr'); currentBgColor = get_param(blk,'BackgroundColor'); if strcmp(dataType,'boolean') if ~strcmp(currentBgColor, 'orange') % Create a violation object using the ModelAdvisor.ResultDetail class. violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with Boolean outputs should be orange.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif any(strcmp({'single','double'},dataType)) if ~strcmp(currentBgColor, 'green') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with floating-point outputs should be green.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif any(strcmp({'uint8','uint16','uint32','int8','int16','int32'}, dataType)) if ~strcmp(currentBgColor, 'cyan') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with integer outputs should be cyan.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif contains(dataType,'Bus:') if ~strcmp(currentBgColor, 'lightBlue') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with bus outputs should be light blue.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif contains(dataType,'Enum:') if ~strcmp(currentBgColor, 'lightBlue') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with enumeration outputs should be light blue.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end elseif contains(dataType, 'auto') if ~strcmp(currentBgColor, 'white') violation = ModelAdvisor.ResultDetail; ModelAdvisor.ResultDetail.setData(violation,'SID',Simulink.ID.getSID(blk)); violation.CheckID = obj.checkId; violation.Description = 'Inport/Outport blocks with auto outputs should be white.'; violation.title = 'Port Block Color'; violation.ViolationType = 'Warning'; end end end end % Optionally, provide a fix for the violation object. function success = fix(obj, violation) success = false; dataType = get_param(violation.Data,'OutDataTypeStr'); if strcmp(dataType,'boolean') set_param(violation.Data,'BackgroundColor','orange'); elseif any(strcmp({'single','double'},dataType)) set_param(violation.Data,'BackgroundColor','green'); elseif any(strcmp({'uint8','uint16','uint32','int8','int16','int32'}, dataType)) set_param(violation.Data,'BackgroundColor','cyan'); elseif contains(dataType,'Bus:') || contains(dataType,'Enum:') set_param(violation.Data,'BackgroundColor','lightBlue'); elseif contains(dataType,'auto') set_param(violation.Data,'BackgroundColor','white'); end success = true; end end end
モデル アドバイザーをリフレッシュして、パス上の新しいチェックでキャッシュを更新します。
Advisor.Manager.refresh_customizations
AdvisorCustomizationExample
モデルを開きます。
[モデル化] タブをクリックし、[モデル アドバイザー]、[構成エディター] を選択するか、コマンド プロンプトで次のコマンドを入力してモデル アドバイザー構成エディターを開きます。
Simulink.ModelAdvisor.openConfigUI;
カスタム編集時チェックで構成されるカスタム構成を作成します。構成を my_config.json
として保存します。モデル アドバイザー構成エディターを閉じます。カスタム構成を my_config.json
ファイルに設定します。
ModelAdvisor.setModelConfiguration('AdvisorCustomizationExample', 'my_config.json');
[モデル化] タブをクリックし、[モデル アドバイザー]、[編集時チェック] を選択して、編集時のチェックをオンにします。[コンフィギュレーション パラメーター] ダイアログ ボックスが開きます。[編集時チェック] パラメーターを選択します。あるいは、コマンド プロンプトで次のコマンドを入力できます。
edittime.setAdvisorChecking('AdvisorCustomizationExample','on');
編集時の警告を表示するには、黄色で強調表示されたブロックをクリックします。
モデルの最上位レベルで、2 つの Inport ブロックの出力データ型が int32
になっています。これらはシアンでなければならないため、編集時の警告が生成されます。Outport ブロックについては、データ型が [自動]
で白になっているため、違反は生成されません。
編集時の警告を修正するには、編集時チェック警告のウィンドウで [修正] をクリックします。
バージョン履歴
R2022a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)