主要内容

モデル参照によるデータ管理の詳細ワークフロー

この例モデル参照による管理フローに使用いくつかののツールとと手法についてについて说明。

このトピック基本概念について,,モデル参照によるデータ管理の紹介を参照しください。

例の要件

simulink金宝app®Coder™simulink®Coder™はははディレクトリ内にに作成さされコードコード生成生成フォルダーフォルダーににコードコードをを生成生成ししますますます。。このこのこのディレクトリにファイルファイルファイルファイルファイル,作业変更てください。スタンドアロンに配布するモデル参照バイナリバイナリをを生成生成するするにははは,,,,,金宝app

モデル例するがある场合はの手顺に従い。。

1.以下の,を変更変更ずににインストールインストールインストールから他のディレクトリににコピーコピーするで,,このこの例例例をを元

toolbox/金宝appsimulink/simdemos/simfeatures/modelreference/sldemo_mdlref_datamngt.slx toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_datamngt_wsdata.m toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt.slx toolbox/simulink/simdemos/simfeatures/modelreference/sldemo_mdlref_counter_datamngt_types.M工具箱/simul金宝appink/simdemos/simfeatures/modelReference/sldemo_mdlref_counter_datamngt_wsdata.m

2.现在のをファイルをコピーたに変更し。。

3. 例を続けます。

モデル例を开く

open_system('sldemo_mdlref_datamngt')

例の内容

この例は次ののののつつののブロックブロックをだ最モデル(sldemo_mdlref_datamngt)を使用ます。は,counter1 counter2 counter2 counter3ブロックです。のブロックはは,同じ(sldemo_mdlref_counter_datamngt) を参照します。

参照モデルは、次のような制限カウンター アルゴリズムを実装します。

  • 最初のトリガー入力が変化したら、カウンターをリセットする

  • 2番目がしたら指定し量だけカウンターをするする

  • 指定し上限下限のでカウンターを饱和する

参照モデル,値を含むバスを出力します。

  • Count:カウンターの値 (8 ビット整数)

  • OverflowState:カウンターが上限、下限、または範囲内かを示す列挙値

simulink机能のの机能机能机能机能金宝app机能机能するように设定さされてて。。

  • 調整可能なパラメーターの構造体:matlab构造构造构造构造に変数ますこのこの例ではは,参照モデルのモデル引数をををパラメーターパラメーター构造构造

  • モデル引数:モデル参照各に异なる値を渡し。。

  • バス::モデル参照インターフェイスで使用する信号およびパラメーターの構造体の "形状" を定義します。生成コードの構造体パラメーターと信号の型名を定義します。

  • 金宝appsimulink.bus.creatematlabstruct:バスオブジェクト形状一致するするする构造构造をする静的。。。

  • バスの化:パラメーター构造体使用バス信号および状态初期化します。

  • マスクした Model ブロック:Model Reference ブロックのカスタム インターフェイスを作成します。

  • トリガー モデル参照:コンポーネントのを的に制御し。。

この例では、Simulink でのデータ管理に役立つその他の機能も使用します。

  • 金宝appsimulink.savevars:matlabスクリプトワーク変数を化。インクリメント,データの操作操作およびおよびバージョン管理管理サポートサポートしてて

  • 金宝appsimulink.findvars:モデルによって変数がように使用れいるかを确认します。

例の概要

例の手順は、次のとおりです。

1.外部インターフェイスとパラメーター构造体を使用参照(sldemo_mdlref_counter_datamngt)を准备し。

2. 参照モデルを呼び出す最上位モデル (sldemo_mdlref_datamngt)を准备し。

3.最上位シミュレートし结果を调べ。。

4.コードを,上位モデルのアロン実行を作成します。

参照モデル: パラメーターの設定

参照モデルには、モデルのブロックをパラメーター化する 2 つのモデル引数 (CounterParams、CounterICs) があります。モデル引数は、参照モデルの各インスタンスに異なるパラメーター値を指定します。このモデルでは、参照モデルに渡される引数の数を低減するために、引数がパラメーター構造体として定義されています。

モデル引数定义プロセスは次のとおりです。

1.参照モデル(sldemo_mdlref_counter_datamngt) を開きます。

2. matlab构造体定义て参照を化し。。

ounterparams.increment = int8(1);CounterParams.lowerLimit = int8(-10);CounterParams.upperlimit = int8(10);
Counterics.Count = int8(0);Counterics.OverFlowState = sldemorangecheck.inrange;

メモ:この例では、カウンターに 8 ビット整数を使用するため、数値フィールドにも 8 ビット整数を使用します。

3. matlab构造体モデルとして使用。。。

モデル引数モデルのモデルワークスペース変数として定义ささいいいます。。。モデルモデルモデルモデルワークワークスペースはは,いくついくついくつかかののの异异なるデータデータソースからsldemo_mdlref_counter_datamngt_wsdata) を使用して、モデル引数のパラメーター構造体を作成します。MATLAB スクリプトを使用すると、モデルの外部で簡単にパラメーター構造体を作成、および変更することができます。さらに、インクリメント変更、バージョン管理、およびデータの差分操作も容易になります。

モデルワークのでデータを设定し。。

Matlabコマンドコマンドラインデータソース设定するもできます。。

hWS = get_param(“sldemo_mdlref_counter_datamngt”,,,,“模型工程空间”);hws.datasource =“ matlab文件”;hws.filename ='sldemo_mdlref_counter_datamngt_wsdata.m';hws.reload;

モデル エクスプローラーを使用,ワークスペースの内容して编集でき。。

[引数]チェックをオンして,モデル引数设定しし。

Matlabコマンドコマンドからモデルのの设定することできでき。。

set_param(“sldemo_mdlref_counter_datamngt”,,,,。。。“参数ArgumentNames”,,,,“反参数,反理”);

4.参照モデルようモデル引数をするを调べ调べ。

参照モデルののブロックがモデルを使用します。

  • 常数ブロックは量量(counterparams.increment)ををます。。

  • “范围检查”サブシステムのさまざまなブロック,および(CounterParams.LowerLimitおよびCounterParams.upermlimit)ののをを使用。

  • さまざまなブロックがカウンターの初期条件 (CounterICs.Count) を使用します。

  • ルートののブロック,构造体构造体(反对)をを使用て,実行前にシステム出力ををますます。ますます

Simulink.findVarsを使用,モデルを使用するをするするますます。

paraminfo = 金宝appsimulink.findvars(“sldemo_mdlref_counter_datamngt”,,,,。。。'姓名',,,,“反参数”);icinfo = 金宝appsimulink.findvars(“sldemo_mdlref_counter_datamngt”,,,,。。。“搜索方法”,,,,“缓存”,,,,。。。'姓名',,,,“对抗”);paramBlks = paramInfo.UsedByBlocks icBlks = icInfo.UsedByBlocks
paramBlks = 3x1 cell array {'sldemo_mdlref_counter_datamngt/Increment' } {'sldemo_mdlref_counter_datamngt/Range Check/Detect Overflow'} {'sldemo_mdlref_counter_datamngt/Range Check/Saturate Count' } icBlks = 3x1 cell array {'sldemo_mdlref_counter_datamngt/Initial Count' } {'sldemo_mdlref_counter_datamngt/上一个count'} {'sldemo_mdlref_counter_datamngt/outputs'}

メモ:モデルをコンパイルすると、Simulink.findVars を使用して“缓存”変数の情报を取得。。

参照モデル: 出力バス信号の形状の定義

参照モデルは、2 つの結果を生成し、バス信号にパッケージ化します。

  • Count:カウンターの値 (8 ビット整数)

  • OverflowState:カウンターが上限、下限、または範囲内かを示す列挙値

参照モデルのルート出力のバス型を定義するには

1.バス エディターを使用してバス オブジェクト (OutputType) を定義します。

または、MATLAB コマンド ラインでバス オブジェクトを作成することもできます。

outputType = 金宝appsimulink.bus;outputType.elements = 金宝appsimulink.buselement;outputType.element(1).name ='数数';outputType.element(1).datatype ='int8';outputType.element(2)= si金宝appmulink.buselement;outputType.element(2).name =“溢流状态”;outputType.element(2).datatype =``枚举:sldemorangecheck'';

2.参照モデルの出力を设定,この(outputType)にに基づい非バーチャルバーチャルのバス信号信号信号をを出力出力

Matlabコマンドコマンドラインブロックパラメーター设定するもできます。。

set_param('sldemo_mdlref_counter_datamngt/outputs',,,,。。。“ usebusobject',,,,'上',,,,。。。'BusObject',,,,'outputType',,,,。。。“ BUSOUTPUTASSUSTRUCT”,,,,'上');

3. matlabスクリプトをしてこのオブジェクトを作成し。。

Matlabスクリプト(MATLAB)(sldemo_mdlref_counter_datamngt_types) を使用して、参照モデルが使用するバス オブジェクトを再作成します。

このmatlabスクリプトスクリプト,手动作成する,,,金宝appsimulink.savevarsを使用できます。

金宝appsimulink.savevars('sldemo_mdlref_counter_datamngt_types.m',,,,'outputType');

4.参照モデルし,参​​照モデル使用グローバルを作成します。

モデルで的,モデル使用すべてグローバルおよび型型を再作成しします。。この例でではは"PreLoadFcn"を使用,参照モデルのバスオブジェクトをするするスクリプトスクリプトスクリプトをします。。参照はは,他他ののグローバルグローバル変数変数

预载体モデル コールバックを設定するには、[モデル]ボタンのをクリックし,,[最上位]の下で[モデル プロパティ]を選択し、[モデル]タブから [モデル プロパティ] ダイアログ ボックスを開きます。[モデル プロパティ] ダイアログ ボックスの[コールバック]タブにある、[モデル プリロード関数]ボックスでsldemo_mdlref_counter_datamngt_typesスクリプトを呼び出しから,[適用]をクリックし。

または、MATLAB コマンド ラインからコールバックを設定します。

set_param(“sldemo_mdlref_counter_datamngt”,,,,。。。'预罗德菲'',,,,'sldemo_mdlref_counter_datamngt_types');

5.モデル阶层バスがどのにされてかを调べます。

このバス,モデルののをし最上位上位モデルと参照モデルモデルの両方両方のブロックによりにより参照参照find_mdlrefsおよびSimulink.findVarsを使用して、このバス オブジェクトが使用されているモデル参照階層内のすべての場所を確認します。

模型= find_mdlrefs('sldemo_mdlref_datamngt');Open_System(模型);varinfo = 金宝appsimulink.findvars(模型,'姓名',,,,'outputType');blks = vars.UsedByBlocks
models = 2x1 cell array {'sldemo_mdlref_counter_datamngt'} {'sldemo_mdlref_datamngt' } blks = 7x1 cell array {'sldemo_mdlref_counter_datamngt/Initial Count' } {'sldemo_mdlref_counter_datamngt/Previous Count' } {'sldemo_mdlref_counter_datamngt/Range Check/Bus Creator'} {'sldemo_mdlref_counter_datamngt/outputs' } {'sldemo_mdlref_datamngt/Counter1' } {'sldemo_mdlref_datamngt/Counter2' } {'sldemo_mdlref_datamngt/Counter3' }

参照モデル: バス出力の初期値の設定

0'0'と,,,とと,,,,指定することができます。。このこのこのこの场合场合,,,,,バスののすべてすべてすべて()および状态以外の开始値指定指定ことが望ましい望ましいありますます。。このこのこの例例で,,カウンターカウンターのの初期初期状态をを调整できるできるため,出力信号信号开始

参照モデル出力开始値指定するには

1.初期化と互换性があるあるを作成作成しモデルモデル引数引数引数ののの引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数引数に定义れてい。。

Counterics.Count = int8(0);Counterics.OverFlowState = sldemorangecheck.inrange;

または,静メソッド金宝appsimulink.bus.creatematlabstructを使用して、OutputType のグラウンド値を使用する構造体を作成できます。

Counterics = 金宝appsimulink.bus.creatematlabstruct('outputType');

2. ルートの Outport のダイアログ ボックスを開き、[初期出力]フィールドに体名前(反对)ををします。。。

Matlabコマンドコマンドラインブロックパラメーター设定するもできます。。

set_param('sldemo_mdlref_counter_datamngt/outputs',,,,。。。“初始输出”,,,,“对抗”);

メモ:的に信号または状态を化化场合,パラメーターパラメーターがバスバス型型ととと正确正确にするする必要必要ははありありませんんが,,そのフィールドがバスバスのがバス要素としなければませ。。。

参照モデル: 参照モデルのマスク

通常、参照モデルをマスクしてユーザー インターフェイスをカスタマイズすると便利です。モデルにマスクを作成し、それを Model ブロックから参照できます。モデルをマスクするには、モデルのモデル エクスプローラーの [モデル ワークスペース] セクションで[モデル マスクの作成]をクリックし。

マスクしたモデルを Model ブロックから参照すると、Model ブロックにマスクが自動的に生成されます。詳細については、「マスクたモデル作成と参照」のトピックを参照してください。

最上位:型号ブロックブロックパラメーター化化

参照モデルその引数の构造体受け入れるに设定れれていいますますます。。。この例ではは,パラメーターパラメーターパラメーターパラメーター値値値

1. 最上位モデル (sldemo_mdlref_datamngt) を開きます。

2.参照モデルされモデルと同じ同じ同じ同じ同じののの构造体を作成ます。。

参数1。Increment = int8(1); Param1.LowerLimit = int8(-20); Param1.UpperLimit = int8(20);
Param2 = Param1; Param2.Increment = int8(2);
ic1.count = int8(0);IC1.OverFlowState = sldemorangecheck.inrange;
IC2 = IC1; IC2.Count = int8(-10);

3.これらをするように,したたブロックブロックブロックマスクパラメーター设定设定ます。。。

たとえば、最初の Model ブロック ('sldemo_mdlref_datamngt/counter1')のパラメーターのよう设定さてい。。

  • カウンターパラメーター参数1

  • 初期条件IC1

Matlabコマンドコマンドラインブロックパラメーター设定するもできます。。

set_param('sldemo_mdlref_datamngt/counter1',,,,。。。“反参数”,,,,'参数1',,,,。。。“对抗”,,,,'ic1');

3. matlabスクリプトをしてこれらワーク変数を作成し。。

Matlabスクリプト(MATLAB)(sldemo_mdlref_datamngt_wsdata) を使用して、これらのワークスペース変数を再作成します。

このmatlabスクリプトスクリプト,手动作成する,,,金宝appsimulink.savevarsを使用できます。

金宝appsimulink.savevars('sldemo_mdlref_datamngt_wsdata.m',,,,'param*');

4.最上位设定て,すべてグローバルを作成し。。

最上位モデルで、モデル参照階層を通して使用されるすべてのグローバル データと型を再作成することをお勧めします。この設定により、最上位モデルをシミュレートするとき、参照モデルを読み込む必要がなくなります。

この例は,最のの"PreLoadFcn"を使用,最上位ののワークデータと参照モデルの型ををを作成作成するするするするするするするするするするするするするするスクリプトスクリプトスクリプトスクリプトスクリプト実行します

set_param('sldemo_mdlref_datamngt',,,,。。。'预罗德菲'',,,,['sldemo_mdlref_datamngt_wsdata;',,,,。。。'sldemo_mdlref_counter_datamngt_types']);

最上位モデル: 参照モデルの呼び出しのスケジューリング

前述のように、参照モデルは、2 つのトリガー入力の制限カウンター アルゴリズムを実装します。このアルゴリズムは、トリガー入力の "立ち上がりエッジ" を検出して、次のように動作します。

  • 最初のトリガー入力が変化したら、カウンターをリセットする。

  • 2番目がしたら指定し量だけカウンターをするする。

刺激性刺激サブサブにより生成同じ同じトリガー入力カウンターカウンターカウンターアルゴリズムアルゴリズムアルゴリズムアルゴリズムアルゴリズムのののののののつのつのつのつのつのすべてををを駆动駆动駆动しししますます。。。トリガートリガートリガー入力入力入力のののはははははは,,,,,,,,,定义され。

  • カウンターを 4 秒ごとにリセットする。

  • カウンターを毎秒回回インクリメント(周期= 0.2秒)。

  • サンプル時間は 0.1 秒である。

メモ:リセット周期とインクリメント周期は、サンプル時間の 2 倍以上でなければなりません。

最上位モデルシミュレーション

1. 参照モデルを保存するか、閉じます。

上位モデルモデル使用するにに参照モデルを必要ががありありますます。。または,参照参照モデルをを闭じ,この例にににに

2.[シミュレーション][実行]を选択て最モデルのシミュレーション実行します。

sim('sldemo_mdlref_datamngt')

メモ:最上位モデルをシミュレートすると、参照モデルのシミュレーション ターゲットが自動的に生成されます。

3. Scope ブロックに表示されたシミュレーション結果を確認します。

最上位モデルのコードの生成 (Simulink Coder が必要)

コードを最上位モデルスタンドの実行ファイル作成するにには,,最上位上位モデルてCtrl+Bキーを押し。

または、MATLAB コマンド ラインでrtwbuildを使用し。

rtwbuild('sldemo_mdlref_datamngt')

メモ:simulink编码器simuli金宝appnk编码器ははをを生成とは,に参照モデルモデルモデルモデルのののコードコードコードコードをををを生成生成しします。。。。。。。。。。を

モデル引数のの制御

simulink金宝app编码器はのでははは,の型名をを自动的的にに生成生成生成ししします。この名前名前はは,,,,,一意一意一意确定确定确定确定的的的的ですですですですがががが认识认识认识がががががが难しく难しく难しく难しく难しくsimulink.busオブジェ金宝appクトオブジェクトオブジェクトを定义ことで,この型名をすることができ。。。

1.バス エディターmatlabコマンドコマンドコマンドコマンドにのを入力てモデルモデル引数のバス型型を。。ます。

CounterParamType = Simulink.Bus; CounterParamType.Elements = Simulink.BusElement; CounterParamType.Elements(1).Name ='增量';counterparamtype.elements(1).datatype ='int8';CounterParamType.Elements(2) = Simulink.BusElement; CounterParamType.Elements(2).Name ='LowerLimit';counterparamtype.elements(2).datatype ='int8';counterParamType.elements(3)= s金宝appimulink.buselement;ounterparamtype.elements(3).name =“上限”;counterparamtype.elements(3).datatype ='int8';

2. 既存の MATLAB スクリプトを変更してこのバス オブジェクトを再作成します。

この型参照の出力の型型型型ににに,ベースにに定义さささされれてていいいなけれなけれなければばばばなりなりなりませませません。金宝appsimulink.savevarsを使用してこの変数を既存の MATLAB スクリプトに付加できます。

金宝appsimulink.savevars('sldemo_mdlref_counter_datamngt_types.m',,,,'CounterParamType',,,,'-附加');

3. Simulink.Parameters を作成して、モデル引数を定義します。

バス型引数と付ける付けるにはは参照モデルのモデルワークスペーススペースでででで,,,,,,,,,,,,,,金宝app,,,,,构造构造构造构造构造构造构造构造构造构造构造构造构造构造ににににに

反参数= simulink.pa金宝apprameter;counterparams.value.increment = 1;CounterParams.Value.LowerLimit = -10;counterparams.value.upperlimit = 10;CounterParams.Datatype ='Bus: CounterParamType';
Counterics = 金宝appsimulink.parameter;counterics.value.count = 0;counterics.value.overflowstate = sldemorangecheck.inrange;Counterics.datatype =“总线:outputtype”;

メモ:パラメーター オブジェクトのデータ型をバス タイプに設定した場合、パラメーター構造体の数値フィールドに倍精度値を使用できます。Simulink は、モデルのコンパイル中に、これらの倍精度値を適切な数値データ型に変換します。

Matlabスクリプトスクリプトスクリプトを手动で変更する,,,金宝appsimulink.savevarsを使用てのののスクリプトスクリプトをできます。。

金宝appsimulink.savevars('sldemo_mdlref_counter_datamngt_wsdata.m',,,,'-更新');

メモ:-updateオプションを使用と,金宝appsimulink.savevarsmatlabスクリプトスクリプト既に定义れての値が书き出されるれるため,书き出す変数をを指定するする必要必要が。

5.モデルワーク内容を再読み込みし。。

これ,のワークスペースで使用さデータソース変更れれましたた。。。このこのモデルがが开い开いているいる场合は,,ワークワークスペーススペース

モデルワークダイアログボックスを使用するか,,,コマンドコマンドライン再読み込みすることができます。

hWS = get_param(“sldemo_mdlref_counter_datamngt”,,,,“模型工程空间”);hws.reload;

最上位におけるパラメーター表现制御制御

simulink.para金宝appmeterオブジェクトオブジェクトオブジェクトオブジェクトオブジェクトオブジェクト使用上位モデルモデルのパラメーターパラメーター构造体ををすることができますます。この设定でははは,加え加え,,制御できるになります。

1. ExportedGlobal ストレージ クラスを使用して Simulink.Parameter オブジェクトを作成し、エクスポートされた調整可能な生成コード内の変数として、最上位モデルのパラメーター構造体を定義します。

param1 = 金宝appsimulink.parameter;param1.value.increment = 1;param1.value.lowerlimit = -10;param1.value.upperlimit = 10;param1.datatype ='Bus: CounterParamType';param1.coderinfo.storageclass =“导出global”;
Param2 = Param1.copy; Param2.Value.Increment = 2;
ic1 = 金宝appsimulink.parameter;ic1.value.count = 0;ic1.value.overflowstate = sldemorangecheck.inrange;ic1.datatype =“总线:outputtype”;IC1.CoderInfo.StorageClass =“导出global”;
ic2 = ic1.copy;IC2.Value.count = -10;

2. 既存の MATLAB スクリプトを変更して、これらのワークスペース変数を再作成します。

最上位のを定义するするするスクリプトスクリプトで変更するか,,金宝appsimulink.savevarsを使用てのののスクリプトスクリプトをできます。。

金宝appsimulink.savevars('sldemo_mdlref_datamngt_wsdata.m',,,,'-更新');

メモ:-updateオプションを使用と,金宝appsimulink.savevarsmatlabスクリプトスクリプト既に定义れての値が书き出されるれるため,书き出す変数をを指定するする必要必要が。

最上位のコード再生成(Simul金宝appink编码器)

コードを最上位モデルスタンドの実行ファイル作成するにには,,最上位上位モデルてCtrl+Bキーを押し。

または、MATLAB コマンド ラインでrtwbuildを使用し。

rtwbuild('sldemo_mdlref_datamngt')