主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

カスタムのモデルアドバイザーチェック用のコンパイルオプションの定義

モデルの実装と,カスタムチェックで何を実現するかに応じて,適切なコンパイルオプションを指定することが重要です。次のようにCallbackContextプロパティを設定することで,ModelAdvisor。检查オブジェクトのチェック定義関数のコンパイルオプションを指定します。

  • 没有一个は,カスタムチェックによる解析の前にモデルアドバイザーによるモデルのコンパイルが必要がないことを指定します。没有一个CallbackContextプロパティの既定の設定です。

  • PostCompileは,モデルアドバイザーがモデルをコンパイルしてモデルのブロック線図を更新してから,モデルをシミュレートしてカスタムチェックを実行しなければならないことを指定します。モデルアドバイザーは,コード生成中に失敗したモデル化の問題にはフラグを付けません。これらの問題はシミュレートされたモデルには影響しないからです。

  • PostCompileForCodegenは,モデルアドバイザーはコード生成専用にモデルのブロック線図をコンパイルして更新しなければならないが,モデルをシミュレートする必要はないことを指定します。モデルのコード生成の準備状態を解析するモデルアドバイザーチェックには,このオプションを使用します。

モデルのコード生成の準備状態を評価するチェック

モデル内のコード生成の設定に関する問題を早い段階で特定し,コード生成時の予期せぬエラーを回避するために,モデルアドバイザーエンジンを有効化するカスタムモデルアドバイザーチェックを作成できます。たとえば,このモデルでは,BasicColorsおよびOtherColors内の红色的の列挙値は,シミュレートされたモデルで使用できます。ただし,生成されたコードでは,これらの红色的の列挙値は列挙値の衝突を引き起こします。“PostCompileForCodegen”オプションを使用することにより,モデルアドバイザーのカスタムチェックは,コード生成の設定に関するこのタイプの問題を特定できます。

“PostCompileForCodegen”オプションは,すべてのバリアント選択のためにモデルをコンパイルします。このコンパイルによって,モデル内のアクティブ,非アクティブなバリアントパス用に生成されたコード内に存在する可能性のある問題を解析できます。例がモデルのアクティブおよび非アクティブなバリアントパスを評価するカスタムチェックの作成で提供されています。

モデルのアクティブおよび非アクティブなバリアントパスを評価するカスタムチェックの作成

この例では,バリアントシステムモデルのアクティブおよび非アクティブなバリアントパスを評価する,モデルアドバイザーのカスタムチェックの作成について説明します。この例で示すモデルアドバイザーの結果は,モデルからコードを生成することが最終的な目的である場合に,ModelAdvisor.Check.CallbackContextプロパティの値としてPostCompileではなくPostCompileForCodegenを使用する理由を示します。

モデルを更新してバリアントのすべての選択肢を解析

モデルアドバイザーでバリアントシステムのアクティブなパスおよび非アクティブなパスを評価するには,バリアントブロック(变体水槽变异来源,およびバリアントサブシステム,バリアントモデル)の[バリアントのアクティベーションのタイミング]パラメーターを代码编译に設定しなければなりません。また,[システムターゲットファイル]コンフィギュレーションパラメーターをert.tlcに設定しなければなりません。

メモ:このオプションを選択すると,実行時間に影響し,モデルアドバイザーがモデルを評価する所要時間が長くなる場合があります。

  1. モデル例ex_check_compile_code_genを開きます。

  2. 各变异源ブロックについて,ブロックパラメーターを開いて[バリアントのアクティベーションのタイミング]パラメーターを代码编译に設定します。

  3. モデルをローカルの作業フォルダーに保存します。

関数sl_customizationの作成

作業フォルダーで,以下の関数sl_customizationを作成し,保存します。

函数sl_customization(cm) %注册自定义检查cm. addmodeladvisorcheckfcn (@defineModelAdvisorCheck);% ----------------------------- % 定义模型顾问检查  % ----------------------------- 函数defineModelAdvisorCheck CheckSingleToBoolConversion;

関数sl_customizationは,カスタマイズマネージャーオブジェクトを受け入れます。カスタマイズマネージャーオブジェクトは,カスタムチェックを登録するためのaddModelAdvisorCheckFcnメソッドを含みます。このメソッドへの入力は,関数(defineModelAdvisorCheck)へのハンドルです。この関数には,カスタムチェックに対応するチェック定義関数の呼び出しが含まれています。

チェック定義関数CheckSingleToBoolConversion.mを開いて検証します。

函数CheckSingleToBoolConversion mdladvRoot = ModelAdvisor.Root;rec = ModelAdvisor。检查(“exampleCheck1”);rec.Title ='检查以确定单到Bool转换';rec.TitleID =“custom.dtcCheck.CompileForCodegen1”;rec.TitleTips ='自定义检查以识别单到Bool转换';rec.setCallbackFcn (@DetailStyleCallback“没有”“DetailStyle”);rec.CallbackContext =“PostCompileForCodegen”%编译以生成代码mdladvRoot.publish (rec,“演示”);结束函数mdladvObj = Simulink.ModelAdvisor.getModelAdvisor(金宝appsystem);violationBlks = find_system(系统,“BlockType”“DataTypeConversion”);ii = numel(violationBlks):-1:1 dtcBlk = violationBlks{ii}; / / /compDataTypes = get_param (dtcBlk,“CompiledPortDataTypes”);如果isempty(compDataTypes) violationBlks(ii) = [];继续结束如果~(比较字符串(compDataTypes。轮廓尺寸,“单一”) & & strcmp (compDataTypes。输出港,“布尔”)) violationBlks(ii) = [];继续结束结束如果isempty(violationBlks) ElementResults = ModelAdvisor.ResultDetail;ElementResults(元素个数(violationBlks)) = ModelAdvisor.ResultDetail;ElementResults。IsInformer = true;ElementResults。描述='此检查寻找数据类型转换块,将单一数据转换为布尔数据';ElementResults。状态=检查通过了。没有找到将单个数据转换为布尔值的数据类型转换块。;mdladvObj.setCheckResultStatus(真正的);其他的ElementResults(元素个数(violationBlks)) = ModelAdvisor.ResultDetail;i = 1:元素个数(ElementResults) ElementResults (i) .setData (violationBlks{我});ElementResults(我)。描述='此检查寻找数据类型转换块,将单一数据转换为布尔数据';ElementResults(我)。状态=“检查失败了。下面的数据类型转换块将单个数据转换为布尔值:;ElementResults(我)。RecAction =修改模型以避免将数据类型从单值转换为布尔值结束mdladvObj.setCheckResultStatus(假);mdladvObj.setActionEnable(真正的);结束CheckObj.setResultDetails (ElementResults);结束

カスタムチェックの作成方法の詳細については,独自のカスタムモデルアドバイザーチェックの定義を参照してください。

モデルアドバイザーを開いてカスタムチェックを実行

モデルアドバイザーを開いてカスタムチェックを実行する前に,モデルアドバイザーチェックの情報キャッシュを更新しなければなりません。MATLABコマンドウィンドウで次を入力します。

Advisor.Manager.refresh_customizations

モデルアドバイザーを開いてカスタムチェックを実行するには,次を行います。

  1. 保存したモデルを開きます。

  2. [モデル化)タブで,[モデルアドバイザー]を選択します。[システムセレクター——モデルアドバイザー]ダイアログボックスが開きます。(好的)をクリックします。モデルアドバイザーが開きます。

  3. 左側のペインで,[製品別]、[演示),(检查识别单一BOOL转换)を選択します。モデルアドバイザーウィンドウに[製品別]フォルダーが表示されない場合は,[設定]、[基本設定],[製品別フォルダーを表示)を選択します。

  4. チェックを右クリックして(このチェックを実行)を選択します。モデルアドバイザーがモデルをコンパイルしてチェックを実行します。モデルアドバイザーがモデルのブロック線図を更新します。非アクティブなバリアントパスはグレー表示されます。

モデルアドバイザーの結果の確認

モデルアドバイザーでチェックの解析結果を確認します。ハイパーリンクをクリックして,違反するブロックをモデルエディターで開きます。

この例では,sl_customization.mファイルでコンパイルオプションを次のように定義しています。

rec.CallbackContext =“PostCompileForCodegen”;

そのため,モデルアドバイザーは,バリアントシステムのアクティブパスおよび非アクティブパスにある数据类型转换ブロックに対して警告を生成します。

sl_customization.mファイルでコンパイルオプションを次のように定義している場合,

rec.CallbackContext =“PostCompile”;

結果には,アクティブパスの数据类型转换ブロックのみが含まれます。

参考

|

関連するトピック