このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
fix
クラス: ModelAdvisor.EdittimeCheck
名前空間: ModelAdvisor
構文
success = fix(obj,violation)
説明
入力引数
ブロック違反の修正を提供する対象の編集時チェック オブジェクト。ModelAdvisor.EdittimeCheck クラスから派生されるクラスのオブジェクトとして指定します。
編集時チェックに違反しているブロック。ModelAdvisor.ResultDetail オブジェクトまたは ModelAdvisor.ResultDetail オブジェクトの配列として指定します。
出力引数
アルゴリズムの最初に、修正がまだ適用されていないことを示すために、値 false を指定します。最後に、修正が正常に適用されたことを示すために、値 true を指定します。
例
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 Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)