ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ブロック パラメーター値の調整と試行

モデルの作成時に、Transfer Fcn ブロックの係数などのブロック パラメーターを試して、使用するブロックを決定することができます。さまざまなパラメーター値でモデルをシミュレートし、シミュレーション出力を取得して確認することができます。

シミュレーション中にほとんどの数値ブロック パラメーターの値を変更することができます。影響を確認するために、シミュレーション出力をリアルタイムで可視化できます。この手法を使うと、アルゴリズムを開発する際にパラメーター値をすばやくテストできます。以下を視覚的に行うことができます。

  • 制御パラメーターの調整と最適化。

  • モデル パラメーターのキャリブレーション。

  • さまざまな条件下での制御のロバスト性のテスト。

シミュレーションを開始すると、最初に Simulink® によってモデル ブロック線図が更新されます。大規模モデルの場合、この操作には時間がかかることがあります。モデル ブロック線図を繰り返し更新せずにパラメーター値をテストするには、1 回のシミュレーションの実行中にパラメーター値を調整します。

あるいは、モデル ブロック線図の更新を回避するには、高速リスタートを使用します。高速リスタートの詳細については、高速リスタートのご利用の前にを参照してください。

シミュレーション出力をリアルタイムで視覚的に解析できない場合や、多くのシミュレーションを実行しなければならない場合は、パラメーター値をプログラムでスイープする方法の使用を検討してください。シミュレーション出力データを取得して解析を後で実行できます。詳細については、ブロック パラメーター値の最適化、推定およびスイープを参照してください。

ブロック パラメーター値へのアクセスと設定の基本的な情報については、ブロック パラメーター値の設定を参照してください。

シミュレーション実行間のブロック パラメーター値の反復調整

この例では、シミュレーションの実行ごとにブロック パラメーター値を変更してモデルのプロトタイプを作成する方法を説明します。パラメーター値を試してシミュレーション結果を確認することで、使用するブロックとモデルの作成方法を決定できます。

モデル例 sldemo_fuelsys は、ガソリン エンジンの燃料供給システムを表しています。モデル内のサブシステム feedforward_fuel_rate は、エンジンで消費される燃料と空気の理想的 (化学量論的) な混合比を表す定数 14.6 を使用して、エンジンの燃料需要を計算します。サブシステム内の 2 つのブロックは、この数値を使用してパラメーターの値を設定します。

たとえば、理想空燃比の設計値を 14.6 から 17.5 に変更して、燃料需要への影響を確認するとします。設計値をモデルに格納するには、ブロック ダイアログ ボックスで値を変更します。あるいは、わかりやすい名前を付けた変数に値を格納することもできます。これにより、値を 2 つのブロックで再利用できます。

ブロック ダイアログ ボックスで値を変更してシミュレーション出力の変化を確認するには、次の手順に従います。

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

    sldemo_fuelsys

  2. シミュレーションを高速化するために、モデルのシミュレーション時間を 2000 から 50 に変更します。

  3. モデルで Scope ブロックのダイアログ ボックスを開きます。

  4. モデルのシミュレーションを実行します。Scope ダイアログ ボックスでウィンドウのサイズを変更して、すべてのシミュレーション結果を表示します。

    スコープ表示に、シミュレーション全体を通して fuel 信号がおよそ 0.91.6 の間で振動していることが示されます。air_fuel_ratio 信号は、オーバーシュートなしですぐに 15 まで上昇します。

  5. モデルで、[ツール表示][モデル データ エディター] を選択することでモデル データ エディターを開きます。モデル データ エディターで、[パラメーター] タブを検査します。

  6. モデルまたはコマンド プロンプトで、ターゲット サブシステムに移動します。

    open_system(...
        'sldemo_fuelsys/fuel_rate_control/fuel_calc/feedforward_fuel_rate')

  7. モデル データ エディターで [Value] 列を使用して、rich というラベルの付いた Constant ブロックの [Constant value] (Value) パラメーターを 1/(14.6*0.8) から 1/(17.5*0.8) に変更します。

  8. 同様に、normal というラベルの付いたブロックの [定数値] パラメーターを 1/14.6 から 1/17.5 に変更します。

  9. モデルのシミュレーションを実行します。

    スコープ表示に、信号の応答が変化したことが示されます。

ブロック ダイアログ ボックスのリテラル値を数値変数に置き換えるには、次の手順に従います。

  1. モデル データ エディターを使用して、normal Constant ブロックの値を 1/mixture に設定します。

  2. rich ブロックの値を 1/(mixture*0.8) に設定します。

  3. rich の値の編集中は、1/(mixture*0.8) の隣にあるアクション ボタン をクリックし、[作成] を選択します。

  4. [新規データの作成] ダイアログ ボックスで、[値]17.5 に設定して [作成] をクリックします。

    17.5 をもつ数値変数 mixture がベース ワークスペースに表示されます。シミュレーションの実行ごとに、ブロック ダイアログ ボックスでパラメーター値を変更する代わりに、ベース ワークスペースで mixture の値を変更することができます。

シミュレーション中のブロック パラメーター値の調整

この例では、シミュレーション中にブロック パラメーター値を変更し、その影響を確認する方法を説明します。この手法を使うと、シミュレーションの実行ごとにモデル ブロック線図を更新せずに、モデルを対話形式でテストしてデバッグすることができます。

モデル例 sldemo_fuelsys には、スロットル コマンドを表す Constant ブロック Throttle Command が含まれています。シミュレーション中にコマンドを大きくし、その影響を確認するには、次の手順に従います。

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

    sldemo_fuelsys

  2. モデルで Scope ブロックのダイアログ ボックスを開きます。

  3. シミュレーションを開始します。

    このモデルは 2000 秒をシミュレートするように構成されています。シミュレーション中に、fuel 信号と air_fuel_ratio 信号の値がスコープ グラフにリアルタイムで表示されます。

  4. モデルで、ステータス バーがおよそ 1000 (1000 秒) を示したら、[一時停止] ボタン をクリックしてシミュレーションを一時停止します。

  5. スコープ表示の [fuel] グラフに、一時停止する前のシミュレーション出力がプロットされます。

  6. モデルで、[ツール表示][モデル データ エディター] を選択します。

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

  8. モデルで、Throttle Command ブロックを選択します。

  9. モデル データ エディターで、rep_seq_y 行を選択します。rep_seq_t 行を一緒に選択していないことを確認してください。

  10. rep_seq_y 行で、[Value] 列の値を [10 20 10] から [10 30 10] に変更します。

  11. [ステップを進める] ボタン をクリックしてシミュレーションをステップ単位で進めます。このボタンを約 15 回、つまりスコープ表示の [fuel] グラフに変化が現れるまでクリックします。

    信号 fuel のプロットは、スロットル コマンドの増加に対応した燃料需要の急激な増加を示します。

  12. モデルで、[続行] ボタン をクリックしてシミュレーションを再開します。

    スコープ表示に、残りのシミュレーション全体における燃料需要の周期的な大幅な増加と、空燃比の周期的な減少が示されます。

シミュレーション中にワークスペース変数の値を変更した後は、モデル ブロック線図を更新しなければなりません。モデル ブロック線図の更新の詳細については、ブロック線図の更新とシミュレーションの実行を参照してください。

パラメーターの調整と試行の準備

  • ワークスペース変数を使用してブロック パラメーター値を設定します。

    Constant ブロックの [定数値] パラメーターなどのブロック パラメーターの値にアクセスするには、モデル内のブロックに移動してブロック ダイアログ ボックスを開くか、モデル エクスプローラーを使用してブロックを検索するか、コマンド プロンプトで関数 set_param を使用しなければなりません。

    代わりに、ワークスペース変数を作成してブロック パラメーター値を設定すると、コマンド プロンプト、MATLAB® ワークスペース ブラウザーまたはモデル エクスプローラーを使用して変数の値を変更できます。また、変数を作成すると、複数のブロック パラメーターに同じ値を設定できます。変数の値を変更すると、すべてのターゲット ブロック パラメーターで新しい値が使用されるようになります。ブロック パラメーター値へのアクセスと設定の詳細については、ブロック パラメーター値の設定を参照してください。

  • シミュレーション出力を可視化します。

    ブロック パラメーター値を調整しながらシミュレーション出力をリアルタイムで確認するには、Scope ブロックなどのモデル内のブロックを使用します。また、シミュレーション実行の終了時にシミュレーション出力を取得して、シミュレーション データ インスペクターにデータを表示することもできます。詳細については、シミュレーション データの可視化方法の決定を参照してください。

  • シミュレーション中に調整するブロック パラメーターの値の範囲を指定してください。

    別のユーザーがモデルを使用してパラメーターを調整することを想定している場合は、使用可能な調整値を範囲の指定によって制御できます。また、調整するすべての固定小数点ブロック パラメーターの値の範囲を指定することもお勧めします。ブロック パラメーター値の範囲を指定するには、ブロック パラメーターの最小値と最大値の指定を参照してください。

  • シミュレーションの実行時間とペースを制御します。

    シミュレーションがあまりにも高速に実行されて、ブロック パラメーター値を調整できない場合があります。また、特定のシミュレーション時間でパラメーター値を変更する場合は、シミュレーションのペースを制御する方法を習得しなければなりません。シミュレーションを特定の期間実行するか永続的に実行するように構成し、必要に応じてシミュレーションを一時停止したり進めたりすることができます。詳細については、対話によるモデルのシミュレーションおよびプログラムによるシミュレーションの実行を参照してください。

Dashboard ブロックを使用した対話形式の調整

Dashboard ライブラリのブロックをモデルに追加して、ブロック パラメーター値を調整することができます。Dashboard ブロックを使用すると、産業用制御装置の外観を再現したノブ、スイッチおよび表示情報を操作して、他のブロックのパラメーター値を調整し、シミュレーション出力をリアルタイムで確認することができます。Dashboard ブロックは、モデル内でターゲット ブロック パラメーターを特定せずに操作できます。詳細については、Dashboard のブロックを使用したモデルの調整と可視化を参照してください。

シミュレーション中に調整可能なブロック パラメーター

"調整不可能なブロック パラメーター" とは、シミュレーション中に値を変更できないパラメーターです。たとえば、[サンプル時間] ブロック パラメーターは調整できません。パラメーターが調整不可能な場合は、ブロック ダイアログ ボックスで値を変更したりワークスペース変数の値を変更したりして、シミュレーション中にその値を変更することはできません。

調整不可能なブロック パラメーターには次のようなものがあります。

  • サンプル時間。

  • Sum ブロックの入力数など、ブロックの外観や構造を制御するパラメーター。

  • ブロックの実行順序を制御できる優先順位。

  • Discrete-Time Integrator ブロックの [積分手法] パラメーターなど、ブロック アルゴリズムを制御するパラメーター。

ブロック パラメーターがシミュレーション中に調整可能かどうかを判断するには、次のいずれかの方法を使用します。

  • シミュレーションを開始してブロック ダイアログ ボックスを開きます。シミュレーション中にターゲット ブロック パラメーターの値がグレーになっている場合は、パラメーターを調整できません。

  • コマンド プロンプトで、パラメーターがフラグ read-write および read-only-if-compiled で表現されているかどうかを確認します。

    1. モデル内のブロックを選択します。

    2. コマンド プロンプトで、関数 get_param を使用してブロック ダイアログ ボックスのパラメーターに関する情報を返します。この関数は、ブロック ダイアログ ボックスのパラメーターごとにフィールドをもつ構造体を返します。

      paramInfo = get_param(gcb,'DialogParameters');

      あるいは、モデル内のブロックを特定して選択するのではなく、gcb'myModel/mySubsystem/myBlock' などのブロック パスに置き換えることもできます。

    3. ターゲット ブロック パラメーターに関する情報を表示します。たとえば、ブロックの [サンプル時間] パラメーターに関する情報を表示するには、構造体でもあるフィールド SampleTime の値を表示します。

      paramInfo.SampleTime
      ans = 
      
              Prompt: 'Sample time:'
                Type: 'string'
                Enum: {}
          Attributes: {'read-write'  'read-only-if-compiled'  'dont-eval'}

    4. 文字ベクトルの cell 配列を値にもつ構造体の Attributes フィールドを検査します。cell 配列にフラグ read-write が表示されている場合は、パラメーター値を変更できます。ただし、cell 配列にフラグ read-only-if-compiled も表示されている場合は、シミュレーション中にパラメーター値を変更することはできません。

マスクを使用してブロックおよびサブシステムのカスタム インターフェイスを作成する場合は、個々のマスク パラメーターの調整可能性を制御できます。モデル引数を使用して参照モデルをパラメーター化する場合は、各 Model ブロックで各モデル引数の値を調整できます。

シミュレーション出力に変化がない理由

パラメーター値を変更してもシミュレーションの出力に変化がない場合は、次のトラブルシューティング方法を使用します。

  • ワークスペース変数の定義の場所を特定します。

    ワークスペース変数を使用してブロック パラメーター値を設定している場合は、変数の定義がある場所を特定します。たとえば、モデル ワークスペースで定義した変数 myVar を使用してモデルでブロック パラメーター値を設定している場合は、ベース ワークスペースにある myVar という名前の変数の値を変更してパラメーター値を変更することはできません。モデル ワークスペースにある変数の定義にアクセスしなければなりません。

    変数の定義を特定するには、変数を使用するブロック パラメーターの値の編集中に、近くのアクション ボタン をクリックし、[エクスプローラー] を選択します。モデル エクスプローラーなどのダイアログ ボックスが開き、該当するワークスペースにある変数の定義が表示されます。変数をモデルで使用する方法の詳細については、記号の解釈を参照してください。

  • シミュレーション中に調整する固定小数点パラメーターの値の範囲を指定します。

    調整するブロック パラメーターで、最高精度のスケーリングをもつ固定小数点データ型が使用される場合は、パラメーターの最小値と最大値を指定して、Simulink で適切なスケーリングを計算して適用できるようにします。値の範囲を指定しない場合は、使用する調整値を含まないスケーリングが Simulink によって適用される可能性があります。値の範囲を指定するには、ブロック パラメーターの最小値と最大値の指定を参照してください。

  • シミュレーションの実行中にモデル ブロック線図を更新します。ワークスペース変数を使用して 1 つ以上のブロック パラメーターの値を設定している場合は、シミュレーション中に変数の値を変更した後、モデル ブロック線図を更新しなければなりません。

    モデル ブロック線図を更新する方法の詳細については、ブロック線図の更新とシミュレーションの実行を参照してください。

その他のモデル化の目的に関する調整可能性の考慮事項と制限

参照モデル

Model ブロックを使用する場合、次のパラメーター調整可能性の制限が適用されます。

  • Model ブロックのシミュレーション モードをアクセラレータ モードに設定する場合、あるいはアクセラレータ モードで親モデルをシミュレートする場合、シミュレーション中に参照モデルのブロック パラメーターを調整することはできません。ただし、参照モデルがベース ワークスペースまたはデータ ディクショナリ内の変数を使用してパラメーター値を設定する場合、変数の値を調整することができます。

  • モデル ワークスペースの MATLAB 変数または Simulink.Parameter オブジェクトを使用して、モデル内のブロック パラメーターの値を設定するとします。Model ブロックを使用してこのモデルを参照する場合、次のようになります。

    • Model ブロックのシミュレーション モードをアクセラレータ モードに設定するか、あるいはアクセラレータ モードで親モデルをシミュレートすると、シミュレーション中に変数またはオブジェクトの値を変更できません。

    • 親モデルをアクセラレータ モードでシミュレートする場合、シミュレーションの実行間で変数またはオブジェクトの値を変更すると、Simulink によってコードが再生成されます。

    • また、追加の Model ブロックを使用して親モデル内でモデルを複数回参照する場合、各 Model ブロックで異なるシミュレーション モードを選択できます。少なくとも 1 つのブロックが通常のシミュレーション モードを使用し、他のすべてのブロックが異なるシミュレーション モードを使用する場合、シミュレーション中に変数またはオブジェクトの値を変更できません。また、高速リスタートをオンにした親モデルをシミュレートするときは、高速リスタート シミュレーションの実行間で変数やオブジェクトの値を変更することはできません。

    回避策として、変数またはオブジェクトをベース ワークスペースまたはデータ ディクショナリに移動します。

アクセラレータと SIL/PIL シミュレーション

こうした調整可能性の制限はアクセラレータ、ラピッド アクセラレータ、SIL、および PIL シミュレーションに適用されます。

  • モデル ワークスペースの MATLAB 変数または Simulink.Parameter オブジェクトを使用して、モデル内のブロック パラメーターの値を設定するとします。関数 sim を使用してモデルをラピッド アクセラレータ モードでシミュレートし、RapidAcceleratorUpToDateCheck ペア引数を 'off' に設定する場合、RapidAcceleratorParameterSets ペア引数を使用して変数またはオブジェクトに異なる値を指定することはできません。Simulink.BlockDiagram.buildRapidAcceleratorTarget によって返された構造体には、変数またはオブジェクトに関する情報は含まれません。

  • ブロック パラメーターの値がワークスペース変数を参照している場合、ラピッド アクセラレータ シミュレーション中に関数 set_param を使用するなどしてブロック パラメーター値を変更することはできません。代わりに、参照されている変数の値を調整できます。

    または、パラメーター セットを使用してラピッド アクセラレータ シミュレーション間で実行時パラメーターを調整します。詳細については、実行時パラメーターの調整を参照してください。

アクセラレータ シミュレーション中のパラメーターの調整可能性の詳細については、実行時パラメーターの調整ラピッド アクセラレータ モードでの parfor の simを参照してください。SIL および PIL シミュレーション中のパラメーターの調整可能性の詳細については、Tunable Parameters and SIL/PIL (Embedded Coder)を参照してください。

高速リスタート

高速リスタートを使用する際のパラメーターの調整可能性の詳細については、高速リスタートのご利用の前にを参照してください。

外部プログラムのコード生成とシミュレーション

シミュレーション中は調整可能なパラメーターが、生成されたコードに調整不可能なインライン パラメーターとして現れる可能性があります。SIL、PIL またはエクスターナル モードのシミュレーションを使用して外部プログラムをシミュレートする場合、シミュレーション中およびシミュレーション実行間のパラメーターの調整可能性はコード生成の設定によって決まります。

生成されたコードでパラメーターの調整可能性を制御するには、コンフィギュレーション パラメーター [既定のパラメーター動作] を使用して、モデルに対してコード生成の設定を調整します。個々の MATLAB 変数、Simulink.Parameter オブジェクト、およびその他のパラメーター オブジェクトの設定も調整できます。詳細については、ラピッド プロトタイピングのデータ アクセスを設定する (Simulink Coder)を参照してください。

Stateflow チャート

シミュレーション中にデータを変更して Stateflow チャートをデバッグするには、シミュレーション中のデータ値の変更 (Stateflow)を参照してください。

参考

関連するトピック