このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
モデルの実装と,カスタムチェックで何を実現するかに応じて,適切なコンパイルオプションを指定することが重要です。次のようにCallbackContext
プロパティを設定することで,ModelAdvisor。检查
オブジェクトのチェック定義関数のコンパイルオプションを指定します。
没有一个
は,カスタムチェックによる解析の前にモデルアドバイザーによるモデルのコンパイルが必要がないことを指定します。没有一个
はCallbackContext
プロパティの既定の設定です。
PostCompile
は,モデルアドバイザーがモデルをコンパイルしてモデルのブロック線図を更新してから,モデルをシミュレートしてカスタムチェックを実行しなければならないことを指定します。モデルアドバイザーは,コード生成中に失敗したモデル化の問題にはフラグを付けません。これらの問題はシミュレートされたモデルには影響しないからです。
PostCompileForCodegen
は,モデルアドバイザーはコード生成専用にモデルのブロック線図をコンパイルして更新しなければならないが,モデルをシミュレートする必要はないことを指定します。モデルのコード生成の準備状態を解析するモデルアドバイザーチェックには,このオプションを使用します。
モデル内のコード生成の設定に関する問題を早い段階で特定し,コード生成時の予期せぬエラーを回避するために,モデルアドバイザーエンジンを有効化するカスタムモデルアドバイザーチェックを作成できます。たとえば,このモデルでは,BasicColors
およびOtherColors
内の红色的
の列挙値は,シミュレートされたモデルで使用できます。ただし,生成されたコードでは,これらの红色的
の列挙値は列挙値の衝突を引き起こします。“PostCompileForCodegen”
オプションを使用することにより,モデルアドバイザーのカスタムチェックは,コード生成の設定に関するこのタイプの問題を特定できます。
“PostCompileForCodegen”
オプションは,すべてのバリアント選択のためにモデルをコンパイルします。このコンパイルによって,モデル内のアクティブ,非アクティブなバリアントパス用に生成されたコード内に存在する可能性のある問題を解析できます。例がモデルのアクティブおよび非アクティブなバリアントパスを評価するカスタムチェックの作成で提供されています。
この例では,バリアントシステムモデルのアクティブおよび非アクティブなバリアントパスを評価する,モデルアドバイザーのカスタムチェックの作成について説明します。この例で示すモデルアドバイザーの結果は,モデルからコードを生成することが最終的な目的である場合に,ModelAdvisor.Check.CallbackContext
プロパティの値としてPostCompile
ではなくPostCompileForCodegen
を使用する理由を示します。
モデルを更新してバリアントのすべての選択肢を解析
モデルアドバイザーでバリアントシステムのアクティブなパスおよび非アクティブなパスを評価するには,バリアントブロック(变体水槽、变异来源,およびバリアントサブシステム,バリアントモデル)の[バリアントのアクティベーションのタイミング]パラメーターを代码编译
に設定しなければなりません。また,[システムターゲットファイル]コンフィギュレーションパラメーターをert.tlc
に設定しなければなりません。
メモ:このオプションを選択すると,実行時間に影響し,モデルアドバイザーがモデルを評価する所要時間が長くなる場合があります。
モデル例ex_check_compile_code_gen
を開きます。
各变异源ブロックについて,ブロックパラメーターを開いて[バリアントのアクティベーションのタイミング]パラメーターを代码编译
に設定します。
モデルをローカルの作業フォルダーに保存します。
関数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
モデルアドバイザーを開いてカスタムチェックを実行するには,次を行います。
保存したモデルを開きます。
[モデル化)タブで,[モデルアドバイザー]を選択します。[システムセレクター——モデルアドバイザー]ダイアログボックスが開きます。(好的)をクリックします。モデルアドバイザーが開きます。
左側のペインで,[製品別]、[演示),(检查识别单一BOOL转换)を選択します。モデルアドバイザーウィンドウに[製品別]フォルダーが表示されない場合は,[設定]、[基本設定],[製品別フォルダーを表示)を選択します。
チェックを右クリックして(このチェックを実行)を選択します。モデルアドバイザーがモデルをコンパイルしてチェックを実行します。モデルアドバイザーがモデルのブロック線図を更新します。非アクティブなバリアントパスはグレー表示されます。
モデルアドバイザーの結果の確認
モデルアドバイザーでチェックの解析結果を確認します。ハイパーリンクをクリックして,違反するブロックをモデルエディターで開きます。
この例では,sl_customization.m
ファイルでコンパイルオプションを次のように定義しています。
rec.CallbackContext =“PostCompileForCodegen”;
そのため,モデルアドバイザーは,バリアントシステムのアクティブパスおよび非アクティブパスにある数据类型转换ブロックに対して警告を生成します。
sl_customization.m
ファイルでコンパイルオプションを次のように定義している場合,
rec.CallbackContext =“PostCompile”;
結果には,アクティブパスの数据类型转换ブロックのみが含まれます。
ModelAdvisor。检查
|ModelAdvisor.Check.CallbackContext