主要内容

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

ブロックパラメ,タ,のデ,タ型を指定した効率的なコ,ドの生成

さらに効率的なコ,ドを生成するには,ブロックパラメ,タ,のデ,タ型(获得ブロックの[ゲ电子邮箱ン]パラメ,タ,など)を信号のデ,タ型と一致させます。あるいは,パラメタをさらにサズが小さいデタ型で保存します。

デ,タ型の一致による不要な型変換およびシフトの除去

以下の例では,ブロックが操作を行う信号と同じデータ型を使用するようにブロックパラメーターを設定することで,効率的なコードを生成する方法を説明します。

モデルへのデ,タ型情報の保存

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

open_system (“rtwdemo_configrpinterface”) set_param (“rtwdemo_configrpinterface”“HideAutomaticNames”“关闭”

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

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

モデルで增益ブロックを選択します。モデルデ,タエディタ,で,[デ,タ型]列に,ブロックの[ゲ电子邮箱ン]パラメ,タ,のデ,タ型が[Inherit:与input相同]に設定されていることが示されます。この設定では,このブロックの[ゲ电子邮箱ン]パラメ,タ,は,入力信号と同じデ,タ型を使用します。

コ,ドマッピングエディタ,の[パラメ,タ,]で,k1のストレ,ジクラスをExportedGlobalに設定します。

モデルデ,タエディタ,で,[ビュ,の変更]を[设计]に設定します。

デ,タテ,ブルでK1を表す行の[デ,タ型]列で,[自动]を選択します。この設定を使用して,パラメーターオブジェクトはオブジェクトを使用するブロックパラメーターからそのデータ型を取得します(この場合,“增益”ブロックパラメ,タ,)。

または,オブジェクトを作成して構成するには,コマンドプロンプトで以下のコマンドを使用します。

Cm = code .mapping.api.get(“rtwdemo_configrpinterface”);setModelParameter(厘米,“K1”“StorageClass”“ExportedGlobal”);HWS = get_param(broot,“modelworkspace”);hws.setVariablePart (“K1。数据类型的“汽车”);

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

slbuild (“rtwdemo_configrpinterface”
开始构建过程:rtwdemo_configrpinterface成功完成代码生成:rtwdemo_configrpinterface构建摘要顶层模型目标构建:模型动作重建原因============================================================================================= rtwdemo_configrpinterface代码生成的代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 17.021s

生成されたファaapl . exeルrtwdemo_configrpinterface . exe. cは,デ,タ型real_T。を使用してグロ,バル変数K1を定義します。

文件= fullfile(“rtwdemo_configrpinterface_grt_rtw”“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,'/*导出块参数*/''real_T K1 = 2.0;', 1, 1)
/*导出块参数*/ real_T K1 = 2.0;/*变量:K1

モデルの関数一步の生成されたコ,ドのアルゴリズムは,型変換を行わずにK1を直接使用します。

rtwdemodbtype(文件,“输出= '...“10 u ', 1, 1)
output = K1 * look1_binlc((*input2), rtCP_Table1_bp01Data, rtCP_Table1_tableData, 10U);

コ,ドマッピングエディタ,の[パラメ,タ,]で,k1のストレ,ジクラスをオプションで继承:通过内部规则继承(既定の設定)に設定できます。

この場合,ブロックパラメ,タ,は入力信号双と同じデ,タ型を選択します。ただし,その他の状況で[继承:通过内部规则继承]を使用する場合(たとえば,固定小数点データ型を使用する場合),ブロックパラメーターは異なるデータ型を選択することがあります。

パラメ,タ,オブジェクトへのデ,タ型情報の格納

金宝app仿真软件。参数オブジェクトを使用して,生成されたコードからパラメーターデータを外部のコードにエクスポートまたはインポートする場合,たとえばストレージクラスImportedExternを適用することで,パラメ,タ,オブジェクトにデ,タ型の情報を指定できます。パラメ,タ,オブジェクトのデ,タ型と信号のデ,タ型を一致させるには,金宝app仿真软件。NumericTypeオブジェクトまたは金宝app仿真软件。AliasTypeオブジェクトを作成します。パラメーターオブジェクトが生成されたコードで使用するデータ型を厳密に制御して,モデルを変更する場合に仿真金宝app软件が異なるデータ型を選択するリスクを削減できます。

コマンドプロンプトで,デ,タ型双を表す金宝app仿真软件。NumericTypeオブジェクトを作成します。

myType = 金宝appSimulink.NumericType;myType。DataTypeMode =“双”

モデルデ,タエディタ,の[デ,タ型]列を使用して,以下のデ,タ型を[myType]に設定します。

  • パラメ,タ,オブジェクト。[パラメ,タ,]タブを使用します。

  • In2という名前の导入ブロック。[入力端子/出力端子]タブを使用します。デ,タ型の伝播のために,增益ブロックの入力信号もmyTypeを使用します。

モデルデ,タエディタ,の[パラメ,タ,]タブを使用して,获得ブロックパラメ,タ,のデ,タ型を继承:从“增益”继承に設定します。

このデ,タ型オブジェクトをパラメ,タ,オブジェクトのデ,タ型として使用します。

または,オブジェクトとブロックを構成するために,次のコマンドをコマンドプロンプトで使用します。

K1。数据类型=“myType”;set_param (“rtwdemo_configrpinterface / In2”“OutDataTypeStr”“myType”) set_param (“rtwdemo_configrpinterface /增益”“ParamDataTypeStr”“继承:从“增益”继承”

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

slbuild (“rtwdemo_configrpinterface”
开始构建过程:rtwdemo_configrpinterface成功完成代码生成:rtwdemo_configrpinterface构建摘要顶层模型目标构建:模型动作重建原因============================================================================ rtwdemo_configrpinterface生成的代码已过时。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 14.765s

グロ,バル変数K1は引き続き,デ,タ型real_Tを使用します。

文件= fullfile(“rtwdemo_configrpinterface_grt_rtw”“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,'/*导出块参数*/''real_T K1 = 2.0;', 1, 1)
/*导出块参数*/ real_T K1 = 2.0;/*变量:K1

コ,ド生成レポ,トを閉じます。

rtwdemoclean;

パラメタ値のサズが小さいデタ型での格納によるメモリ消費の削減

パラメ,タ,オブジェクト(たとえば,金宝app仿真软件。参数)を使用して,ブロックパラメーター値を設定する場合,オブジェクトを,生成されたコードに調整可能なグローバル変数として表示されるように設定できます。既定では,パラメーターオブジェクトおよび対応するグローバル変数は通常,信号またはブロックが操作する信号と同じデータ型を使用します。たとえば,增益ブロックの入力信号がデ,タ型int16を使用する場合,パラメ,タ,オブジェクトは通常同じデ,タ型を使用します。この変数が消費するメモリ量を削減するには,int8などのサ▪▪ズが小さい整数デ▪▪タ型を変数が使用するように指定します。

整数デ,タ型でのパラメ,タ,値の格納

モデルrtwdemo_configrpinterfaceを開き,そのモデルのプロパティを設定します。

open_system (“rtwdemo_configrpinterface”) set_param (“rtwdemo_configrpinterface”“HideAutomaticNames”“关闭”) set_param (“rtwdemo_configrpinterface”“ShowPortDataTypes”“上”) set_param (“rtwdemo_configrpinterface”“SimulationCommand”“更新”

モデル内の多くの信号が,デ,タ型を使用します。

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

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

[追加情報の表示/更新]ボタンをクリックします。

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

モデルで,增益ブロックをクリックします。モデルデ,タエディタ,では,ブロックの[ゲ电子邮箱ン]パラメ,タ,に対応する行が1 .,パラメ,タ,値を2に設定するmatlab変数K1に対応する行が1表示されます。K1はモデルワ,クスペ,ス内に存在します。

[cコ,ド]タブで,[コドンタフェス],[既定のコドマッピング]を選択します。コ,ドマッピングエディタ,の[パラメ,タ,]で,k1のストレ,ジクラスをExportedGlobalに設定します。

Cm = code .mapping.api.get(“rtwdemo_configrpinterface”);setModelParameter(厘米,“K1”“StorageClass”“ExportedGlobal”);

[Cコード]タブで,[コードインターフェイス],[既定のコードマッピング]を選択します。モデルデ,タエディタ,で,[ビュ,の変更]设计に設定し,K1列の[デ,タ型]int8であることを確認します。

HWS = get_param(broot,“modelworkspace”);hws.setVariablePart (“K1。数据类型的“int8”);

获得ブロックパラメ,タ,を表す行の[デ,タ型]列で,ドロップダウンリストを[继承:从“增益”继承]に設定します。この設定により,ブロックの[ゲ电子邮箱ン]パラメ,タ,はパラメ,タ,オブジェクトからint8デ,タ型を継承します。

set_param (“rtwdemo_configrpinterface /增益”“ParamDataTypeStr”...“继承:从“增益”继承”

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

rtwbuild (“rtwdemo_configrpinterface”
开始构建过程:rtwdemo_configrpinterface成功完成代码生成:rtwdemo_configrpinterface构建摘要顶层模型目标构建:模型动作重建原因============================================================================================= rtwdemo_configrpinterface代码生成的代码生成信息文件不存在。构建1 / 1模型(0个模型已经更新)构建持续时间:0h 0m 12.651s

生成されたファ@ @ルrtwdemo_configrpinterface.cは,デ,タ型int8_T(これは,金宝appSimulinkでのデ.タ型int8に対応)を使用してグロ,バル変数K1を定義します。

文件= fullfile(“rtwdemo_configrpinterface_grt_rtw”“rtwdemo_configrpinterface.c”);rtwdemodbtype(文件,'/*导出块参数*/''int8_T K1 = 2;', 1, 1)
/*导出块参数*/ int8_T K1 = 2;/*变量:K1

モデルの関数一步のコ,ドアルゴリズムは,K1を使用して,增益ブロックの出力を計算します。計算に使用される信号がデ,タ型real_Tを使用するため,アルゴリズムでは,K1をデ,タ型real_T)にキャストします。

rtwdemodbtype(文件,“输出= '...“10 u ', 1, 1)
output = (real_T)K1 * look1_binlc((*input2), rtCP_Table1_bp01Data, rtCP_Table1_tableData, 10U);

サズが小さい整数デタ型での固定小数点パラメタ値の格納

モデルの信号を固定小数点デ,タ型を使用して設定するとします。ゲンパラメタが生成されたコドに調整可能なグロバル変数として表示されるようにします。パラメ,タ,にとって想定される実際値(たとえば,0 ~ 4の間)の範囲がわかります。精度を低下させてもアプリケーション要件を満たす場合,パラメーターをブロックの入出力信号と異なるデータ型を使用するように設定することで,メモリ消費を削減します。

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

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

ブロック線図を更新します。モデルの信号は、語長が 16 で 2 進小数点のみのスケーリングを行う符号付き固定小数点データ型を使用します。

[Gain5ブロック]ダ电子邮件アログボックスを開きます。[ゲ电子邮箱ン]パラメ,タ,が1.85に設定されています。このパラメ,タ,を設定するとします。

[ゲ电子邮箱ン]myGainParamに設定して[適用]をクリックします。

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

[新規デ,タの作成]ダ,[値]金宝appSimulink.Parameter (1.85)に設定して[作成]をクリックします。金宝app仿真软件。参数オブジェクトmyGainParamがベ,スワ,クスペ,スに表示されます。

金宝app仿真软件编码器アプリを開きます。[cコ,ド]タブで,[コドンタフェス],[既定のコドマッピング]を選択します。コ,ドマッピングエディタ,の[パラメ,タ,]で,myGainParamのストレ,ジクラスをExportedGlobalに設定します。この設定により,myGainParamはグロ,バル変数として生成されたコ,ドに表示されます。

ブロックダ@ @アログボックスの[パラメ,タ,属性]タブでは,[パラメ,タ,の最小値]0に,[パラメ,タ,の最大値]4に設定します。

[パラメ,タ,のデ,タ型]fixdt (0, 8)に設定して[適用]をクリックします。

[デ,タ型アシスタントを表示]ボタンをクリックします。デ,タ型アシスタントには,式fixdt (0, 8)が,語長が8で最高精度のスケーリングを行う符号なしの固定小数点データ型を指定していることが示されます。コードのシミュレーションまたは生成時には,ブロックパラメーターの選択する小数部の長さ(スケーリング)によって,データ型はパラメーターの最小値と最大値(0および4)の間で可能な限り最高の精度の値を表すことができます。

デ,タ型アシスタントで,[スケ,リング]二点に設定します。[最高精度のスケ,リングを計算][固定小数点の詳細]および[詳細の更新]をクリックします。[固定小数点の詳細]の情報は,小数部の長さ5が,精度0.03125のパラメ,タ,値を表すことを示します。

[スケ,リング]最好的精度に戻して(好的)をクリックします。この例では,コードのシミュレーションおよび生成を行う際に,ブロックパラメーターが小数部の長さ5を選択します。

または,コマンドプロンプトでこれらのコマンドを使用して,次のようにオブジェクトを作成してブロックを設定できます。

myGainParam = 金宝appSimulink.Parameter(1.85);myGainParam.CoderInfo.StorageClass =“ExportedGlobal”;set_param (“fxpdemo_direct_form2 / Gain5”“获得”“myGainParam”) set_param (“fxpdemo_direct_form2 / Gain5”“ParamMin”' 0 '“ParamMax”“4”) set_param (“fxpdemo_direct_form2 / Gain5”“ParamDataTypeStr”“fixdt(0, 8)”

コ,ド生成レポ,トを作成するようにモデルを設定します。コマンドウィンドウを見やすくするために,コンフィギュレ,ションパラメ,タ,[詳細なビルド]をクリアします。

set_param (“fxpdemo_direct_form2”“GenerateReport”“上”...“LaunchReport”“上”“RTWVerbose”“关闭”

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

evalc (“rtwbuild(“fxpdemo_direct_form2”)”);

生成されたファ@ @ルfxpdemo_direct_form2.cは,デ,タ型uint8_T(指定された語長8に対応する)を使用することで,グロ,バル変数myGainParamを定義します。このコードは,小数部の長さが5と指定され,実際のパラメーター値1.85を表す整数値を使用して変数を初期化します。

文件= fullfile(“fxpdemo_direct_form2_grt_rtw”“fxpdemo_direct_form2.c”);rtwdemodbtype(文件,'/*导出块参数*/''uint8_T myGainParam = 59U;', 1, 1)
/*输出块参数*/ uint8_T myGainParam = 59U;/*变量:myGainParam

コ,ドアルゴリズムはmyGainParamを使用して,Gain5ブロックの出力を計算します。アルゴリズムはcシフトを使用して計算の結果をスケ,リングします。

rtwdemodbtype(文件,'/*增益:" <根>/Gain5 "包含:'...'/*增益:" <根>/增益"包含:', 1,0)
/*增益:'<根>/Gain5'合并:* UnitDelay: '<根>/单元Delay1' */ fxpdemo_direct_form2_B。Gain5 = (int16_T)((myGainParam * fxpdemo_direct_form2_B.UnitDelay1) >> 5);
rtwdemoclean;

関連するトピック