主要内容

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

生成されたコドにおける調整可能なキャリブレションパラメタの作成

キャリブレションパラメタはグロバルメモリに保存される値です。アルゴリズムは計算で使用するためにこの値を読み取りますが,書き込みは行いません。キャリブレションパラメタはアルゴリズムの実行中に保存された値を変更できるため,"調整可能"です。キャリブレションパラメタを作成することで以下が可能です。

  • 実行中にパラメタを調整して信号値をモニタし,最適なパラメ値を特定する。

  • メモリに保存されたパラメタ値を上書きし,アルゴリズムを異なる実行条件に効率的に適応させる。たとえば,各車両のエンジン制御ユニットに異なるパラメーター値を保存して,質量の異なる複数の車両に同じ制御アルゴリズムを使用できます。

金宝app®で,キャリブレションパラメタを表す金宝app仿真软件。参数オブジェクトを作成します。パラメタオブジェクトを使用して,获得ブロックの[ゲン]パラメタなど,ブロックパラメタ値を設定します。生成されたコードでパラメーター オブジェクトの表現を制御するには、ストレージ クラスをオブジェクトに適用します。

たとえばラピッドプロトタイピングなど,生成されたコードでブロックパラメーターに既定でアクセスできるようにするには,[既定のパラメタ動作]既定のパラメタ動作を参照)を[調整可能]に設定します。詳細にいては,生成コド内の変数の保持を参照してください。

調整可能なグロバル変数としてのブロックパラメタの表現

以下の例では,生成されたコードでブロックパラメーターをグローバル変数として表すことで,調整可能なパラメーターデータを作成する方法を示します。

パラメタオブジェクトを使用したブロックパラメタの構成

モデル例rtwdemo_paraminlineを開き,生成されたブロック名を表示するよう設定します。

load_system (“rtwdemo_paraminline”) set_param (“rtwdemo_paraminline”“HideAutomaticNames”“关闭”) open_system (“rtwdemo_paraminline”

[モデル化]タブで[モデルデタエディタ]をクリックします。

モデルデタエディタで,[パラメタ]タブを検査します。

モデルでG1获得ブロックをクリックします。モデルデタエディタで,ブロックの(获得)パラメタに対応する行が強調表示されます。

モデルデタエディタの[値]列で、ゲ以及ン値を2からmyGainParamに変更します。

myGainParamの横にあるアクションボタン(3の縦向きのドット)をクリックし,[作成]を選択します。

创建新数据ブロックのダ和アログボックスで,[値]金宝appSimulink.Parameter (2)に設定します。[作成]をクリックします。金宝app仿真软件。参数オブジェクトmyGainParamは,パラメタ値2をモデルワクスペスに保存します。

myGainParamダアログボックスの[コド生成]タブで,[编码器アプリでの構成]をクリックします。

コドマッピングエディタで,myGainParam[ストレジクラス]ExportedGlobalに設定します。このストレージクラスにより,パラメーターオブジェクトは調整可能なグローバル変数として生成されたコードに表示されます。

あるいは,パラメーターオブジェクトを作成してモデルを構成するには,コマンドプロンプトで以下のコマンドを使用します。

set_param (“rtwdemo_paraminline / G1”“获得”“myGainParam”) MWS = get_param(“rtwdemo_paraminline”“modelworkspace”);mws.assignin (“myGainParam”S金宝appimulink.Parameter (2));Cm = code .mapping.utils.create(“rtwdemo_paraminline”);setModelParameter(厘米,“myGainParam”“StorageClass”“ExportedGlobal”);

モデルデタエディタを使用して,G2获取ブロック用のパラメタオブジェクトmyOtherGainを作成します。ストレジクラスExportedGlobalを適用します。

あるいは,以下のコマンドをコマンドプロンプトで使用します。

set_param (“rtwdemo_paraminline / G2”“获得”“myOtherGain”) mws.assignin (“myOtherGain”S金宝appimulink.Parameter (2));setModelParameter(厘米,“myOtherGain”“StorageClass”“ExportedGlobal”);

コドの生成と検査

モデルからコドを生成します。

slbuild (“rtwdemo_paraminline”
成功完成:rtwdemo_paraminline的构建过程构建总结已构建的顶级模型目标:模型操作重建原因==================================================================================================== rtwdemo_paraminline生成和编译的代码生成信息文件不存在。构建1个模型(0个模型已经更新)构建时间:0h 0m 9.502s

生成されたrtwdemo_paraminline.hファルには,グロバル変数myGainParammyOtherGain走读生宣言が含まれます。このヘッダ# include)することで,実行時にコドによる変数の値の読み取りと書き込みを可能にします。

文件= fullfile(“rtwdemo_paraminline_grt_rtw”“rtwdemo_paraminline.h”);rtwdemodbtype(文件,...'extern real_T myGainParam;'引用:" <根>/G2 " ", 1, 1)
myGainParam;/*变量:myGainParam *引用:'/G1' */ extern real_T myOtherGain;/*变量myOtherGain *引用:'/G2'

rtwdemo_paraminline.cファルは,myGainParamおよびmyOtherGainにメモリを割り当て初期化します。

文件= fullfile(“rtwdemo_paraminline_grt_rtw”“rtwdemo_paraminline.c”);rtwdemodbtype(文件,...'/*导出块参数*/'引用:" <根>/G2 " ", 1, 1)
/*导出块参数*/ real_T myGainParam = 2.0;/*变量:myGainParam *引用:'/G1' */ real_T myOtherGain = -2.0;/*变量myOtherGain *引用:'/G2'

モデルの関数一步で生成されたコドのアルゴリズムは計算にmyGainParammyOtherGainを使用します。

rtwdemodbtype(文件,...'/*模型阶跃函数*/''/*模型初始化函数, 1,0)
/*模型步长函数*/ void rtwdemo_paraminline_step(void) {/* Outport: '<根>/Out1'合并:*增益:'<根>/G1' *增益:'<根>/G2' *导入:'<根>/In1' * Sum: '<根>/Sum' */ rtwdemo_paraminline_Y。Out1 = myGainParam * rtwdemo_paraminline_U. Out1 = myGainParam * rtwdemo_paraminline_U. Out1In1 + myOtherGain * -75.0;}

ブロックパラメタがMATLABの数値変数を参照するときのストレジクラスの適用

ブロックパラメーターの値の設定に数値変数を使用する場合,ストレージクラスを変数に適用することはできません。回避策として,変数をパラメーターオブジェクトに変換し,ストレージクラスをそのオブジェクトに適用することができます。変数をパラメタオブジェクトに変換するには,以下の手法のいずれかを選択します。

  • モデルデタエディタの[パラメタ]タブで,[ビュの変更][コド]に設定された状態で,変数に対応する行を見けます。(存储类)列で,ドロップダウンリストから[转换为参数对象]を選択します。モデルデタエディタが変数をパラメタオブジェクトに変換します。その後(存储类)列を使用して,ストレジクラスをオブジェクトに適用します。

    この手法はモデルエクスプロラでも使用できます。

  • デタオブジェクトウィザドを使用します(デタオブジェクトウィザドを使用したモデルのデタオブジェクトの作成を参照)。ウィザドで[パラメタ]チェックボックスをオンにします。ウィザドが変数をオブジェクトに変換します。次に,そのオブジェクトにストレージクラスを,たとえばモデルデータエディターまたはモデルエクスプローラーを使用して適用します。

キャリブレションパラメタを表すストレジクラスの作成(嵌入式编码器

この例では,生成されたコードでキャリブレーションパラメーターを出力するストレージクラスを作成する方法を示します。ストレジクラスは,各パラメオブジェクト(金宝app仿真软件。参数)が,キ。

生成されたコドで,キャリブレ,calPrms.cという名前のファルで定義され,calPrms.hで宣言されたグロバル変数として表示されなければなりません。変数の定義は,次の定義のようにしなければなりません。

#pragma SEC(CALPRM) const volatile float param1 = 3.0F;const volatile float param2 = 5.0F;const volatile float param3 = 7.0F;# pragma交会()

変数にはキワド常量およびキワド挥发性を使用します。プラグマ# pragma交会(CALPRM)は,メモリ内での変数の配置を制御します。プラグマを実装するには、変数定義が連続したコードのブロックに表示されなければなりません。

また,生成されたコドには,各パラメ(a2l記述が含まれていなければなりません。

ストレジクラスとメモリセクションの定義を保存するパッケジの作成

ここで,サンプルパッケジ+金宝app SimulinkDemosをコピして現在のフォルダにパッケジを作成します。このパッケジには,後でモデルのデジクラスを適用するのに使用する参数クラスおよび信号クラスの定義が保存されます。後で,このパッケジにはストレジクラスと関連するメモリセクションの定義も保存されます。

  1. 現在のmatlab®フォルダを書き込み可能な場所に設定します。

  2. +金宝app SimulinkDemosパッケジフォルダを現在のフォルダにコピします。コピに+ myPackageという名前を付けます。

    拷贝文件(fullfile (matlabroot,...“工具箱”“金宝app模型”“simdemos”“dataclasses”' 金宝app+ SimulinkDemos '),...' + myPackage '“f”

  3. + myPackageフォルダ内でファSignal.mに移動し,信号クラスの定義を編集します。

  4. メソッドsetupCoderInfoを定義する方法セクションのコメントを解除します。関数useLocalCustomStorageClassesへの呼び出しで,“packageName”“myPackage”に置き換えます。完了すると,セクションは以下のようになります。

    方法函数setupCoderInfo (h)%使用此包中的自定义存储类useLocalCustomStorageClasses (h,“myPackage”);结束结束%的方法

  5. ファ邮箱ルを保存して閉じます。

  6. + myPackageフォルダ内でファParameter.mに移動し,参数クラスの定義を編集します。メソッドsetupCoderInfoを定義する方法セクションのコメントを解除し,“packageName”“myPackage”で置き換えます。

  7. ファ邮箱ルを保存して閉じます。

ストレジクラスとメモリセクションの作成

  1. 現在のフォルダを,パッケ+ myPackageを含むフォルダに設定します。

  2. カスタムストレジクラスデザを開きます。

    cscdesigner (“myPackage”
  3. カスタムストレジクラスデザの[メモリセクション]タブで[新規]をクリックします。

  4. 新規のメモリセクションで,次の表に従ってプロパティを設定します。

    プロパティ
    的名字 CalMem
    ステトメントを囲む文字 変数のグルプ
    ステトメントの前 # pragma交会(CALPRM)
    ステトメントの後 # pragma交会()
    常量 選択
    挥发性 選択

  5. [適用]をクリックします。

  6. [カスタムストレジクラス]タブで[新規]をクリックします。

  7. 新規のストレジクラスで,次の表に従ってプロパティを設定します。

    プロパティ
    名前 CalParam
    信号 クリア
    デタスコプ 出口
    ヘッダファ calPrms.h
    定義ファ邮箱ル calPrms.c
    メモリセクション CalMem

  8. (好的)をクリックします。変更を保存する確認のメッセジに対して[はい]をクリックします。

既定のパラメタオブジェクトのmyPackage。参数への設定

ストレージクラスの適用を簡単にするために,モデルエクスプローラーを使用して既定のパラメーターオブジェクトを金宝app仿真软件。参数からmyPackage。参数に変更します。

  1. コマンドプロンプトでモデルエクスプロラを開きます。

    daexplr

  2. モデルエクスプロラの[モデルの階層構造]ペンで,(基础工作)を選択します。

  3. モデルエクスプロラので,[添加Si金宝appmulink参数]ボタンの横にある矢印をクリックします。ドロップダウンリストで[クラスリストのカスタマズ]を選択します。

  4. [クラスリストのカスタマズ]ダアログボックスで,(参数类)の下で[myPackage。参数)の横にあるチェックボックスをオンにします。(好的)をクリックします。

  5. モデルエクスプロラので,[添加Si金宝appmulink参数]ボタンの横にある矢印をクリックします。ドロップダウンリストで(myPackage参数)を選択します。

    myPackage。参数オブジェクトがベスワクスペスに表示されます。このオブジェクトは削除できます。

ここで,モデルデータエディターのようなツールを使用してパラメーターオブジェクトを作成すると,仿真软金宝app件は金宝app仿真软件。参数オブジェクトの代わりにmyPackage。参数オブジェクトを作成します。

ストレジクラスの適用

モデル例rtwdemo_rollで,BasicRollModeサブシステムはpidコントロラを表します。P, i,およびdパラメタをキャリブレションパラメタとして構成します。

  1. モデルを開きます。

    rtwdemo_roll

  2. モデルでBasicRollModeサブシステム内に移動します。

  3. アプリギャラリで(嵌入式编码)をクリックします。

  4. ブロック線図の下で,[モデルデタエディタ]タブを選択してモデルデタエディタを開きます。

  5. モデルデタエディタで,[パラメタ]タブを選択してブロック線図を更新します。

    これにより,获得ブロックによって使用されているワークスペース変数に対応する行がデータテーブルに表示されます(コントローラーのP,我およびDパラメーターを表します)。

  6. モデルデタエディタで,[コンテンのフィルタ]ボックスの横にある[選択を使用してフィルタ処理します]ボタンを有効にします。

  7. モデルで3の获得ブロックを選択します。

  8. [コンテンのフィルタ]ボックスに”模型的工作空间と入力します。

    获得ブロックが使用する変数はモデルワクスペス内にあります。

  9. デタテブルで3行を選択し,行の(存储类)列で[转换为参数对象]を選択します。

    モデルデタエディタにより,ワクスペス変数がmyPackage。参数オブジェクトに変換されます。これで,ストレジクラスをオブジェクトに適用できます。

  10. 行の[ストレジクラス]列で,(CalParam)を選択します。

Asap2 econンタeconフェeconスの生成の設定

a2lファ邮箱ルが生成されるようモデルを設定します。[コンフィギュレションパラメタ][コド生成][管理员ンタ管理员フェ管理员ス][asap2 econンタeconフェeconス]を選択します。

コドの生成と検査

  1. モデルからコドを生成します。

  2. コド生成レポトで,calPrms.cファ邮箱ルを検査します。このファ,キャリブレ。

    /*导出数据定义*/ #pragma SEC(CALPRM) /*自定义存储类的定义:CalParam */ const volatile real32_T depgain = 0.75F;const volatile real32_T intGain = 0.5F;const volatile real32_T rateGain = 2.0F;# pragma交会()

    ファ邮箱ルcalPrms.hはパラメタを宣言します。

  3. ereplicationンタereplicationフェereplicationスファereplicationルrtwdemo_roll.a2lを検査します。ファ邮箱ルには、たとえばdispGainなど,各パラメタに関する情報が含まれます。

    /begin特性/*名称*/ disgain /*长标识*/ "" /*类型*/值/* ECU地址*/ 0x0000 /* @ECU_Address@dispGain@ */ /*记录布局*/ Scalar_FLOAT32_IEEE /*最大差值*/ 0 /*转换方法*/ rtwdemo_roll_CM_single /*下限*/ -3.4E+38 /*上限*/ 3.4E+38 /end特性

システム定数または他のマクロからのパラメタ値の初期化(嵌入式编码器

いくつかのシステム定数(マクロ)から計算された値を使用して,調整可能なパラメーターを初期化するコードを生成できます。たとえば,マクロnumVesselsvesInitVolから計算された値を使用して,調整可能なパラメタtotalVolを初期化するこのコドを生成できます。

#define numvessel * vesInitVol;

この初期化の手法によって調整可能なパラメーターとシステム定数との間の数学的関係が保持され,生成されたコードの読みやすさが向上し,より簡単に維持できるようになります。このコドを生成するには,次のようにします。

  1. システム定数を表現するパラメタオブジェクトを作成します。

    numvessel = S金宝appimulink.Parameter(16);vesInitVol = 金宝appSimulink.Parameter(18.2);

  2. ストレジクラス定义を使用し,生成されたコドにマクロを出力するオブジェクトを構成します。

    numVessels.CoderInfo.StorageClass =“自定义”;numVessels.CoderInfo.CustomStorageClass =“定义”;vesInitVol.CoderInfo.StorageClass =“自定义”;vesInitVol.CoderInfo.CustomStorageClass =“定义”

  3. 調整可能なパラメタを表す別のパラメタオブジェクトを作成します。ストレジクラスExportedGlobalを使用し,生成されたコドにグロバル変数を出力するオブジェクトを構成します。

    totalVol = 金宝appSimulink.Parameter;totalVol.CoderInfo.StorageClass =“ExportedGlobal”

  4. numcontainers * vesInitVol . xmlを使用してtotalVolの値を設定します。生成されたコードで式を保持するように指定するには、関数slexprを使用します。

    totalVol。值= slexpr(' numvessel * vesInitVol');

  5. totalVolを使用してモデルのブロックパラメタ値を設定します。モデルから生成するコードは,システム定数に基づいた値を使用して調整可能なパラメーターを初期化します。

金宝app仿真软件。参数オブジェクトの値を設定する式の使用の詳細と制限にいては,数式を使用した変数値の設定を参照してください。

パラメタオブジェクトの保存場所のコド生成への影響

パラメーターオブジェクトは,ベースワークスペース,モデルワークスペースまたはデータディクショナリで作成できます。ただし,matlabセッションを終了すると,ベ。パラメタオブジェクトおよびモデルが使用するその他の変数の保存場所を決定するには,金宝appSimulinkモデルの変数とオブジェクトの保存場所の決定を参照してください。

パラメーターオブジェクトの場所は,生成されたコードの対応するデータ定義のファイルの配置に影響する可能性があります。

  • パラメーターオブジェクトをベースワークスペースまたはデータディクショナリに配置する場合,コードジェネレーターでは,対応するパラメーターデータ(たとえばグローバル変数など)がシステム内の特定のコンポーネントではなく,コードを生成するシステムに属していると仮定されます。たとえば,モデル参照階層内のモデルで汽车以外のストレージクラスをもつパラメーターオブジェクトが使用されている場合,データ定義は階層の最上位モデル用に生成されたコードに表示され,オブジェクトを使用するモデル用に生成されたコードには表示されません。

    ただし,嵌入式编码器®をお持ちの場合は,一部のストレージクラスを使用してデータを所有するモデルの名前を指定することができます。所有者モデルを指定すると,そのモデル用に生成されたコドによってデタが定義されます。デタの所有権の詳細にいては,在生成的文件中控制全局数据定义和声明的位置(嵌入式编码)を参照してください。

  • パラメーターオブジェクトをモデルワークスペースに配置する場合,コードジェネレーターは,モデルがデータを所有していると仮定します。保存モデルを含む参照階層からコードを生成する場合,データ定義はその保存モデル用に生成されたコードに表示されます。

    デタの所有権の詳細にいては,在生成的文件中控制全局数据定义和声明的位置(嵌入式编码)を参照してください。

  • 汽车以外のストレージクラスをパラメーターオブジェクトに適用する場合,オブジェクトは生成されたコード内でグローバルシンボルとして表示されます。そのため,モデル参照階層では,異なるモデルワークスペースまたはディクショナリに含まれる2つのオブジェクトが同じ名前を持つことはできません。各オブジェクトの名前はモデルの階層構造全体で一意でなければなりません。

    ただし,嵌入式Coderがある場合,ストレジクラスFileScopeを使用し,異なるモデルワークスペースにおけるパラメーターオブジェクト間で名前の衝突を防ぐことができます。结构为ストレジクラスを使用してパラメタデタを構造体に整理する(嵌入式编码)を参照してください。

モデルワクスペス内にAUTOSAR。参数オブジェクトを保存した場合,コードジェネレーターはオブジェクトに対して指定したストレージクラスを無視します。

信号デタへのアクセスの設定

アルゴリズムの実行中にパラメーターの値を調整する場合,出力信号値をモニターまたは取得して,調整の結果を解析します。生成されたコードでアクセス可能なデータとして信号を表すには、テスト ポイントやストレージ クラスなどの手法を使用できます。生成コド内の変数の保持を参照してください。

パラメタを調整するためのプログラム

生成されたコドを設定して,以下を含めることができます。

  • エクスターナルモードから独立しているパラメーターを調整するためのCアプリケーションプログラムインターフェイス(API)。生成されたコードには,パラメーター値にアクセスするための独自のコードを書き込めるように,追加のコードが含まれています。C APIを使用した生成コドと外部コドの間のデタ交換を参照してください。

  • エクスターナルモードから独立しているパラメーターを調整するための目标语言编译器API。参数的函数を参照してください。

調整可能なパラメタの最小値と最大値の設定

調整可能なパラメタの最小値と最大値を指定することをお勧めします。

以下の方法で最小値と最大値を指定できます。

  • パラメタオブジェクトを使用するブロックダアログボックス内。この手法を使用して,最小値と最大値の情報をモデル内に保存します。

  • パラメタ値を設定するのに使用する金宝app仿真软件。参数オブジェクトのプロパティを使用。この手法を使用して,最小値と最大値の情報をモデル外部に保存します。

詳細にいては,ブロックパラメタの最小値と最大値の指定を参照してください。

その他のモデル化の目的に関する考慮事項

目的 考慮事項および詳細情報
ストレジ型修飾子常量および挥发性を適用する

嵌入式编码器があり,ストレ,ジ型修飾子を生成する場合は,型修飾子constとvolatileを使用したグロタの保護(嵌入式编码)を参照してください。

キワド静态を適用して異なるコンポネントにおけるパラメタ間で名前の衝突を防ぐ

嵌入式Coderがある場合,ストレジクラスFileScopeまたは作成する同様のストレジクラスを使用します。生成されたコドでのデタ表示を制御するストレジクラスの選択(嵌入式编码)を参照してください。

ASAP2 (a2lの記述を生成する

Asap2規格を使用してキャリブレションパラメタを記述する,a2lファ邮箱ルを生成できます。詳細にいては,パラメタと信号のasap2情報の定義を参照してください。

Autosar XML (arxml)記述を生成する

嵌入式编码器がある場合,AUTOSAR規格向けに構成するモデルで使われるキャリブレーションパラメーターを記述するARXMLファイルを生成できます。Autosarキャリブレションパラメタとルックアップテブルのモデル化(AUTOSAR Blockset)を参照してください。

キャリブレションのためのルックアップテブルデタを保存する

ASAP2規格またはAUTOSAR規格(STD_AXIS COM_AXIS,曲线など)に従ってキャリブレーション用にルックアップテーブルデータを保存するには,金宝app仿真软件。LookupTableオブジェクトおよび金宝app仿真软件。断点オブジェクトを查找表ブロックで使用できます。

ただし,いくかの制限が適用されます。金宝app仿真软件。LookupTableを参照してください。金宝app仿真软件。LookupTableオブジェクトおよび金宝app仿真软件。断点オブジェクトの制限事項を回避するには,代わりに金宝app仿真软件。参数オブジェクトを使用します。

詳細にいては,パラメタと信号のasap2情報の定義およびAutosar測定およびキャリブレション用のルックアップテブルの設定(AUTOSAR Blockset)を参照してください。

プラグマを使用して特定のメモリ位置にパラメタデタを保存する

嵌入式编码器ライセンスがある場合,カスタムプラグマが含まれるコードを生成するには,ストレージクラスとメモリセクションを使用します。通过插入语法在内存中放置控制数据和函数(嵌入式编码)を参照してください。

参考

||

関連するトピック