このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
Discrete PID Controller
離散時間と連続時間の PID コントローラー

ライブラリ:
Simulink /
Discrete
HDL Coder /
Discrete
HDL Coder /
HDL Floating Point Operations
説明
Discrete PID Controller ブロックは、PID コントローラー (PID、PI、PD、P のみ、I のみ) を実装します。このブロックは、[時間領域] パラメーターを [離散時間]
に設定した PID Controller ブロックと同一です。
ブロックの出力は、入力信号、入力信号の積分、および入力信号の微分の重み付き総和です。重みは比例、積分、および微分のゲイン パラメーターです。1 次極によって微分動作がフィルター処理されます。
このブロックでは、複数のコントローラー タイプと構造がサポートされます。ブロックの設定可能なオプションは次のとおりです。
コントローラー タイプ (PID、PI、PD、P のみ、I のみ) — [コントローラー] パラメーターを参照してください。
コントローラー形式 (並列または理想) — [形式] パラメーターを参照してください。
時間領域 (連続または離散) — [時間領域] パラメーターを参照してください。
初期条件とリセット トリガー — [ソース] パラメーターおよび [外部リセット] パラメーターを参照してください。
出力飽和の制限および組み込みのアンチワインドアップ メカニズム — [出力を制限する] パラメーターを参照してください。
バンプレス制御転送とマルチループ制御の信号トラッキング — [トラッキングモードを有効にする] パラメーターを参照してください。
これらのオプションを変更すると、さまざまなバリアント サブシステムがアクティブになり、ブロックの内部構造が変わります (詳細については、Variant Subsystem を使用した個別の階層でのバリエーションの実装を参照してください)。ブロックの内部構造とバリアント サブシステムを調べるには、ブロックを右クリックし、[マスク] 、 [マスク内を表示] を選択します。
制御の構成
一般的な実装では、PID Controller ブロックはフィードバック ループのフィードフォワード パスで動作します。
ブロックの入力は通常、基準信号とシステム出力の差を示す誤差信号です。設定点の重みを許可する 2 入力ブロックについては、Discrete PID Controller (2DOF) を参照してください。
PID ゲインの調整
PID コントローラーのゲインは手動でも自動でも調整が可能です。自動調整には、Simulink® Control Design™ ソフトウェアが必要です。自動調整の詳細については、[調整法の選択] パラメーターを参照してください。
例
閉ループ制御を使ったエンジン タイミング モデル
この例では、Triggered Subsystem を使用したエンジン タイミングのモデル化で説明されている開ループ エンジン モデルの閉ループ制御アルゴリズムを開発して実装する方法を示します。この例のモデル sldemo_enginewc
には、負荷トルクの変化の影響が最小限に抑えられるように、高速スロットル アクチュエータを使用してエンジン速度を調節するコントローラーが含まれています。このコントローラーは離散 PI コントローラーを使って実装されます。
PID Controller ブロックを使用したアンチワインドアップ制御
この例では、アクチュエータが飽和した際にアンチワインドアップ方式を使用して PID コントローラーの積分動作によるワインドアップを防ぐ方法を示します。Simulink® の PID Controller ブロックには、2 つの組み込みアンチワインドアップ手法 (back-calculation
および clamping
) と、より複雑な産業上のシナリオを処理するためのトラッキング モードが備わっています。PID Controller ブロックがサポートしているいくつかの機能により、産業上の一般的なシナリオにおけるコントローラーのワインドアップという問題に対処できます。
手動と PID 制御の間のバンプレス制御移行
この例では、手動制御から比例-積分-微分 (PID) 制御へ切り替える際にバンプレス制御移行を行う方法を示します。このモデルでは Simulink® の PID Controller ブロックを使用してデッド タイムを含む 1 次プロセスを制御します。
端子
入力
基準信号と制御下のシステムの出力の差。次のようになります。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
R2024a 以降
プラント信号 y の導関数をブロックに入力として直接提供します。これは、モデル内に利用可能な微分信号があり、ブロック内での微分の計算をスキップする場合に便利です。
依存関係
この入力端子を有効にするには、微分動作をもつコントローラー タイプを選択し、[外部ソースの導関数を使用] を有効にします。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
比例ゲイン。外部のソースからブロックに提供されます。外部ゲイン入力は、ブロックの PID ゲインに対して異なる PID パラメーター化をマッピングするときなどに便利です。また、外部ゲイン入力を使用すると、ゲイン スケジュール PID 制御を実装することもできます。ゲイン スケジュール制御では、PID 係数をモデルのロジックまたはその他の計算によって特定し、それらをブロックに接続します。
依存関係
この端子を有効にするには、[コントローラーのパラメーター] の [ソース] を [外部]
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
積分ゲイン。外部のソースからブロックに提供されます。外部ゲイン入力は、ブロックの PID ゲインに対して異なる PID パラメーター化をマッピングするときなどに便利です。また、外部ゲイン入力を使用すると、ゲイン スケジュール PID 制御を実装することもできます。ゲイン スケジュール制御では、PID 係数をモデルのロジックまたはその他の計算によって特定し、それらをブロックに接続します。
ゲインを外部から提供する場合、積分ゲインの時間変化も積分されます。この結果は、PID ゲインがブロック内で実装される方法であるために発生します。詳細については、[コントローラーのパラメーター] の [ソース] パラメーターを参照してください。
依存関係
この端子を有効にするには、[コントローラーのパラメーター] の [ソース] を [外部]
に設定し、[コントローラー] を積分動作をもつコントローラー タイプに設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
離散時間コントローラーでは、コントローラーのサンプル時間を乗算した積分ゲイン。外部のソースからブロックに提供されます。外部ゲイン入力は、ブロックの PID ゲインに対して異なる PID パラメーター化をマッピングするときなどに便利です。また、外部ゲイン入力を使用すると、ゲイン スケジュール PID 制御を実装することもできます。ゲイン スケジュール制御では、PID 係数をモデルのロジックまたはその他の計算によって特定し、それらをブロックに接続します。
メモ
PID 調整器アプリや Closed-Loop PID Autotuner ブロックなどの PID 調整ツールでは、ゲイン I は調整されますが、I*Ts は調整されません。そのため、この端子に送る前に、調整ツールから取得した積分ゲインの値にサンプル時間を乗算します。
I の代わりに I*Ts を使用すると、ブロックで積分を実行するために必要な計算が少なくなります。これにより、生成コードの実行時間が改善されます。
連続時間コントローラーでは、[I*Ts を使用] を無効にし、代わりに [I] 端子を使用します。
依存関係
この端子を有効にするには、[コントローラーのパラメーター] の [ソース] を [外部]
に設定し、[コントローラー] を積分動作をもつコントローラー タイプに設定し、[I*Ts を使用] を有効にします。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
微分ゲイン。外部のソースからブロックに提供されます。外部ゲイン入力は、ブロックの PID ゲインに対して異なる PID パラメーター化をマッピングするときなどに便利です。また、外部ゲイン入力を使用すると、ゲイン スケジュール PID 制御を実装することもできます。ゲイン スケジュール制御では、PID 係数をモデルのロジックまたはその他の計算によって特定し、それらをブロックに接続します。
ゲインを外部から提供する場合、微分ゲインの時間変化も微分されます。この結果は、PID ゲインがブロック内で実装される方法であるために発生します。詳細については、[コントローラーのパラメーター] の [ソース] パラメーターを参照してください。
依存関係
この端子を有効にするには、[コントローラーのパラメーター] の [ソース] を [外部]
に設定し、[コントローラー] を微分動作をもつコントローラー タイプに設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
微分フィルター係数。外部のソースからブロックに提供されます。外部係数入力は、ブロックの PID ゲインに対して異なる PID パラメーター化をマッピングするときなどに便利です。また、外部入力を使用すると、ゲイン スケジュール PID 制御を実装することもできます。ゲイン スケジュール制御では、PID 係数をモデルのロジックまたはその他の計算によって特定し、それらをブロックに接続します。
依存関係
この端子を有効にするには、[コントローラーのパラメーター] の [ソース] を [外部]
に設定し、[コントローラー] を不完全微分をもつコントローラー タイプに設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
積分器とフィルターを初期条件にリセットするトリガー。リセットが立ち上がり信号、立ち下がり信号、レベル信号のいずれで発生するかは、[外部リセット] パラメーターの値で決まります。選択されたトリガー タイプは端子のアイコンで示されます。たとえば、次の図は、[外部リセット] が [立ち上がり]
に設定された連続時間 PID ブロックを示しています。
トリガーが発生すると、ブロックにより、積分器とフィルターが、[Integrator Initial condition] パラメーターと [Filter Initial condition] パラメーターまたは [I0] 端子と [D0] 端子で指定された初期条件にリセットされます。
メモ
Motor Industry Software Reliability Association (MISRA™) ソフトウェア標準規格に準拠するために、モデルで Boolean 信号を使って PID controller ブロックの外部リセット端子を駆動しなければなりません。
依存関係
この端子を有効にするには、[外部リセット] を [なし]
以外のいずれかの値に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
| Boolean
積分器の初期条件。外部のソースからブロックに提供されます。
依存関係
この端子を有効にするには、[初期条件] の [ソース] を [外部]
に設定し、[コントローラー] を積分動作をもつコントローラー タイプに設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
微分フィルターの初期条件。外部のソースからブロックに提供されます。
依存関係
この端子を有効にするには、[初期条件] の [ソース] を [外部]
に設定し、[コントローラー] を微分動作をもつコントローラー タイプに設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
ブロックの出力の上限。外部のソースからブロックに提供されます。比例、積分、微分動作の重み付き総和がこの端子で提供される値を上回ると、ブロック出力はこの値に保持されます。
依存関係
この端子を有効にするには、[出力を制限する] を選択して出力の飽和の [ソース] を [外部]
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
ブロックの出力の下限。外部のソースからブロックに提供されます。比例、積分、微分動作の重み付き総和がこの端子で提供される値を下回ると、ブロック出力はこの値に保持されます。
依存関係
この端子を有効にするには、[出力を制限する] を選択して出力の飽和の [ソース] を [外部]
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
追跡するコントローラー出力の信号。信号トラッキングがアクティブな場合、トラッキング信号とブロック出力の差が積分器入力に返されます。信号トラッキングは、システムで 2 つのコントローラーを切り替えるバンプレス制御転送を実装する場合に便利です。また、マルチループ制御システムでブロックのワインドアップを防ぐのにも役立ちます。詳細については、[トラッキング モードを有効にする] パラメーターを参照してください。
依存関係
この端子を有効にするには、[トラッキングモードを有効にする] パラメーターを選択します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
離散積分器時間。スカラーとしてブロックに提供されます。Simulink または外部ハードウェア上のいずれかでブロックが実行されるレートを定義する、離散積分器のサンプル時間の独自の値を使用できます。ブロックが条件付き実行サブシステム内で使用される場合、離散時間積分器時間の値は、外部割り込みの平均サンプリング レートに一致する必要があります。
言い換えると、Ts
を、外部割り込みの平均サンプリング レートに値が一致するように、以下の任意の積分手法について指定できます。離散時間におけるコントローラーの伝達関数の微分項は次のようになります。
α(z) は、このパラメーターで指定した積分手法に応じて異なります。
前進オイラー法
後退オイラー法
台形則
離散時間の積分の詳細については、Discrete-Time Integrator ブロックのリファレンス ページを参照してください。条件付きで実行されるサブシステムの詳細については、条件付き実行サブシステムの概要を参照してください。
依存関係
この端子を有効にするには、[時間領域] を [離散時間]
に設定し、[PID コントローラーが条件付き実行サブシステム内にある] オプションをオンにします。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
R2024b 以降
この端子でカスタム アンチワインドアップ アルゴリズムを指定します。ブロックには組み込みのアンチワインドアップ手法が 2 つ用意されていますが、積分器のワインドアップを解消するために、それらの手法は指定されたブロック出力の制限を超えるブロック コンポーネントの合計に依存します。アプリケーションに飽和がある場合や PID Controller ブロックの下流を制限する場合は、"extAW" 入力端子を使用してカスタム アンチワインドアップ ロジックを実装できます。カスタム アルゴリズムの実装に使用できるように、ブロックの preInt 出力端子で積分器の前の信号も提供されています。
依存関係
この端子を有効にするには、[飽和] タブで [出力を制限する] を選択し、[アンチワインドアップ手法] を [外部]
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
出力
コントローラーの出力。一般に、比例、積分、および微分のゲイン パラメーターで重み付けした入力信号、入力信号の積分、および入力信号の微分の総和に基づきます。1 次極によって微分動作がフィルター処理されます。コントローラーの信号に含まれる項は、[コントローラー] パラメーターの選択に応じて異なります。現在の設定に対応するコントローラーの基本の伝達関数は、ブロック パラメーターの [補償器の式] セクション内とマスク内に表示されます。飽和制限を指定する [上限] と [下限] の飽和パラメーターなど、ほかにもブロック出力を変更するパラメーターがあります。
コントローラーの出力は、いずれかの入力がベクトル信号であればベクトル信号になります。その場合、ブロックは N 個の独立した PID コントローラーとして機能します。N は入力ベクトルの信号数です。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
R2024b 以降
ブロックはこの端子で積分器の前の信号を出力します。extAW 端子で提供するカスタム アンチワインドアップ アルゴリズムで、この信号を入力として使用します。
依存関係
この端子を有効にするには、[飽和] タブで [出力を制限する] を選択し、[アンチワインドアップ手法] を [外部]
に設定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fixed point
パラメーター
コントローラーに比例項、積分項、微分項のいずれを含めるかを指定します。
PID
比例動作、積分動作、微分動作。
PI
比例動作と積分動作のみ。
PD
比例動作と微分動作のみ。
P
比例動作のみ。
[I]
積分動作のみ。
ヒント
現在の設定に対応するコントローラーの伝達関数は、ブロック パラメーターの [補償器の式] セクション内とマスク内に表示されます。
プログラムでの使用
ブロック パラメーター: Controller |
型: string、文字ベクトル |
値: "PID" 、"PI" 、"PD" 、"P" 、"I" |
既定の設定: "PID" |
コントローラーの構造を並列と理想のどちらにするかを指定します。
並列
コントローラーの出力は、P、I、D でそれぞれ独立して重み付けされた比例動作、積分動作、微分動作の総和になります。たとえば、連続時間の並列形式 PID コントローラーの伝達関数は次のようになります。
離散時間の並列形式コントローラーの伝達関数は次のようになります。
α(z) と β(z) は、それぞれ [積分手法] パラメーターと [フィルター手法] パラメーターで決まります。
理想
比例ゲイン P がすべての動作の総和に作用します。たとえば、連続時間の理想形式 PID コントローラーの伝達関数は次のようになります。
離散時間の理想形式コントローラーの伝達関数は次のようになります。
a(z) と b(z) は、それぞれ [積分手法] パラメーターと [フィルター手法] パラメーターで決まります。
ヒント
現在の設定に対応するコントローラーの伝達関数は、ブロック パラメーターの [補償器の式] セクション内とマスク内に表示されます。
プログラムでの使用
ブロック パラメーター: Controller |
型: string、文字ベクトル |
値: "Parallel" 、"Ideal" |
既定の設定: "Parallel" |
[離散時間]
を選択する場合は、ブロックに対して明示的なサンプル時間を指定することをお勧めします。[サンプル時間 (継承は -1)] パラメーターを参照してください。[離散時間]
を選択すると、[積分手法] パラメーターと [フィルター手法] パラメーターも有効になります。
PID Controller ブロックが同期状態制御 (State Control (HDL Coder) ブロックを参照) を使用するモデル内にある場合は、[連続時間]
を選択できません。
メモ
PID Controller ブロックと Discrete PID Controller ブロックは、このパラメーターの既定値以外は同一です。
プログラムでの使用
ブロック パラメーター: TimeDomain |
型: string、文字ベクトル |
値: "Continuous-time" 、"Discrete-time" |
既定の設定: "Discrete-time" |
離散時間 PID コントローラーに対しては、離散時間積分器端子を有効にして独自の離散時間積分器サンプル時間の値を使用します。適切に積分が行われるようにするには、TDTI
端子を使用して Δt のスカラー値を提供して、正確な離散時間積分が行われるようにします。
依存関係
このパラメーターを有効にするには、[時間領域] を [離散時間]
に設定します。
プログラムでの使用
ブロック パラメーター: UseExternalTs |
型: string、文字ベクトル |
値: "on" 、"off" |
既定の設定: "off" |
0.1 などの正のスカラー値を入力してサンプル時間を指定します。既定の離散サンプル時間は -1 で、この場合は上流のブロックからサンプル時間が継承されます。ただし、特に上流のブロックのサンプル時間が変わることが予想される場合などは、コントローラーのサンプル時間を明示的に設定することをお勧めします。コントローラー係数 P、I、D、N の作用はサンプル時間に依存します。そのため、一連の係数値が与えられている場合、サンプル時間を変更するとコントローラーの性能が変化します。
詳細については、サンプル時間の指定を参照してください。
連続時間コントローラーを実装するには、[時間領域] を [連続時間]
に設定します。
ヒント
外部指定または可変のサンプル時間でブロックを実行する場合は、このパラメーターを -1 に設定し、ブロックを Triggered Subsystem に配置します。その後、目的のサンプル時間でサブシステムをトリガーします。
依存関係
このパラメーターを有効にするには、[時間領域] を [離散時間]
に設定します。
プログラムでの使用
ブロック パラメーター: SampleTime |
タイプ: スカラー |
値: -1 、正のスカラー |
既定の設定: -1 |
離散時間におけるコントローラーの伝達関数の積分項は Iα(z) です。α(z) は、このパラメーターで指定した積分手法に応じて異なります。
前進オイラー法
前進矩形 (左側) 近似。
この手法はコントローラーの帯域幅と比較してナイキスト制限が大きくなる、小さいサンプル時間に最適です。大きいサンプリング時間で
前進オイラー法
手法を使用すると、連続時間で安定しているシステムを離散化しても不安定さが生じることがあります。後退オイラー法
後退矩形 (右側) 近似。
後退オイラー法
手法の利点は、この手法で安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。台形則
双一次変換。
台形則
手法の利点は、この手法で安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。使用可能なすべての積分手法の中で、離散システムと対応する連続時間システムの周波数領域プロパティが最も近くなるのは台形則
手法です。ヒント
現在の設定に対応するコントローラーの方程式は、ブロック パラメーターの [補償器の式] セクション内とマスク内に表示されます。
メモ
[後退オイラー法]
または [台形則]
の手法で、以下のいずれかに該当する場合、ブロックの HDL コードを生成することはできません。
[出力を制限する] が選択されており、[アンチワインドアップ手法] が
[なし]
以外に設定されている場合。[トラッキングモードを有効にする] が選択されている場合。
離散時間の積分の詳細については、Discrete-Time Integrator ブロックのリファレンス ページを参照してください。
依存関係
このパラメーターを有効にするには、[時間領域] を [離散時間]
に設定し、[コントローラー] を積分動作をもつコントローラー タイプに設定します。
プログラムでの使用
ブロック パラメーター: IntegratorMethod |
型: string、文字ベクトル |
値: "Forward Euler" 、"Backward Euler" 、"Trapezoidal" |
既定の設定: "Forward Euler" |
離散時間におけるコントローラーの伝達関数の微分項は次のようになります。
α(z) は、このパラメーターで指定したフィルター手法に応じて異なります。
前進オイラー法
前進矩形 (左側) 近似。
この手法はコントローラーの帯域幅と比較してナイキスト制限が大きくなる、小さいサンプル時間に最適です。大きいサンプリング時間で
前進オイラー法
手法を使用すると、連続時間で安定しているシステムを離散化しても不安定さが生じることがあります。後退オイラー法
後退矩形 (右側) 近似。
後退オイラー法
手法の利点は、この手法で安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。台形則
双一次変換。
台形則
手法の利点は、この手法で安定した連続時間システムを離散化すると、常に安定した離散時間結果が得られることです。使用可能なすべての積分手法の中で、離散システムと対応する連続時間システムの周波数領域プロパティが最も近くなるのは台形則
手法です。ヒント
現在の設定に対応するコントローラーの方程式は、ブロック パラメーターの [補償器の式] セクション内とマスク内に表示されます。
離散時間の積分の詳細については、Discrete-Time Integrator ブロックのリファレンス ページを参照してください。
依存関係
このパラメーターを有効にするには、[時間領域] を [離散時間]
に設定し、[不完全微分の使用] を有効にします。
プログラムでの使用
ブロック パラメーター: FilterMethod |
型: string、文字ベクトル |
値: "Forward Euler" 、"Backward Euler" 、"Trapezoidal" |
既定の設定: "Forward Euler" |
メイン
パラメーターの外部入力を有効にすると、PID ゲインとフィルター係数をブロックの外部で計算し、これらを信号入力としてブロックに提供することができます。
内部
コントローラー ゲインとフィルター係数をブロック パラメーター [P]、[I]、[D]、[N] を使用して指定します。
外部
PID ゲインとフィルター係数をブロック入力を使用して外部で指定します。ブロックに現在のコントローラー タイプに必要な各パラメーターの追加の入力端子が表示されます。
外部ゲイン入力は、ブロックの PID ゲインに対して異なる PID パラメーター化をマッピングするときなどに便利です。また、外部ゲイン入力を使用すると、ゲイン スケジュール PID 制御を実装することもできます。ゲイン スケジュール制御では、PID ゲインをモデルのロジックまたはその他の計算によって特定し、それらをブロックに接続します。
注意
外部ゲイン入力を有効にした場合は、ゲインがブロック出力 [y] に依存することがないようにしてください。そのような依存関係が存在する場合、ブロック出力値を計算するためにブロック出力値がわかっている必要があるため、結果の PID 伝達関数で代数ループが生じます。この代数ループは、不安定性や発散につながる傾向があります。出力の代わりに、時間およびブロック入力の観点からゲインを表してください。代数ループの詳細については、代数ループの概念を参照してください。
ゲインを外部から提供する場合、積分ゲイン値と微分ゲイン値の時間変化はそれぞれ積分および微分されます。この結果は、連続時間と離散時間のどちらにおいても、積分や微分の前に信号にゲインが適用されるために発生します。たとえば、外部入力のある連続時間 PID コントローラーの場合、積分項は次の図に示されているように実装されます。
ブロック内では、入力信号 u は外部から提供される積分ゲイン I によって積分の前に乗算されます。この実装の結果、次のようになります。
したがって、積分ゲインは積分の中に含められます。同様に、ブロックの微分項では微分ゲインによる乗算が微分より先に行われるため、微分ゲイン D は微分されることになります。
プログラムでの使用
ブロック パラメーター: ControllerParametersSource |
型: string、文字ベクトル |
値: "internal" 、"external" |
既定の設定: "internal" |
比例ゲインの有限で実数のゲイン値を指定します。[Controller form] に応じて次のようになります。
並列
— 比例動作が積分動作および微分動作に作用しません。たとえば、連続時間の並列 PID コントローラーの伝達関数は次のようになります。離散時間の並列形式コントローラーの伝達関数は次のようになります。
α(z) と β(z) は、それぞれ [積分手法] パラメーターと [フィルター手法] パラメーターで決まります。
理想
— 比例ゲインで積分項および微分項が乗算されます。たとえば、連続時間の理想 PID コントローラーの伝達関数は次のようになります。離散時間の理想形式コントローラーの伝達関数は次のようになります。
α(z) と β(z) は、それぞれ [積分手法] パラメーターと [フィルター手法] パラメーターで決まります。
依存関係
このパラメーターを有効にするには、[メイン] タブで、コントローラー パラメーターの [ソース] を [内部]
に設定し、[コントローラー] を [PID]
、[PD]
、[PI]
、または [P]
に設定します。
プログラムでの使用
ブロック パラメーター: P |
型: スカラー、ベクトル |
既定の設定: 1 |
調整可能: Yes
積分ゲインの有限で実数のゲイン値を指定します。
調整可能: Yes
依存関係
このパラメーターを有効にするには、[メイン] タブで、コントローラー パラメーターの [ソース] を [内部]
に設定し、[コントローラー] を積分動作をもつタイプに設定します。
プログラムでの使用
ブロック パラメーター: I |
型: スカラー、ベクトル |
既定の設定: 1 |
離散時間コントローラーでは、サンプル時間を乗算した積分ゲインの有限で実数のゲイン値を指定します。
メモ
PID 調整器アプリや Closed-Loop PID Autotuner ブロックなどの PID 調整ツールでは、ゲイン I は調整されますが、I*Ts は調整されません。そのため、このパラメーターに書き込む前に、調整ツールから取得した積分ゲインの値にサンプル時間を乗算します。
I の代わりに I*Ts を使用すると、ブロックで積分を実行するために必要な計算が少なくなります。これにより、生成コードの実行時間が改善されます。
連続時間コントローラーでは、[I*Ts を使用] を無効にし、代わりに [I] パラメーターを使用します。
調整可能: No
依存関係
このパラメーターを有効にするには、[メイン] タブで、コントローラー パラメーターの [ソース] を [内部]
に設定し、[コントローラー] を積分動作をもつタイプに設定し、[I*Ts を使用] パラメーターを有効にします。
プログラムでの使用
ブロック パラメーター: I |
型: スカラー、ベクトル |
既定の設定: 1 |
積分動作をもつ離散時間コントローラーでは、ブロックは積分ゲインを入力として受け取り、それに積分の実行の一環として内部的にサンプル時間を乗算します。このパラメーターを有効にした場合は、積分ゲイン (I) の代わりに、サンプル時間を乗算した積分ゲイン (I*Ts) を入力として明示的に指定します。これにより、内部計算の数が少なくなり、生成コードの実行時間を改善する場合に役立ちます。
信号のトラッキングまたはアンチワインドアップ モードの逆解析を有効にしていて、[I*Ts] を有効にした場合は、トラッキング ゲイン パラメーター [Kt] を Kt*Ts
に設定し、逆算係数 [Kb] を Kb*Ts
に設定する必要もあります。
連続時間コントローラーでは、このパラメーターを有効にしても、積分ゲインには影響はありません。
依存関係
このパラメーターを有効にするには、[コントローラー] を積分動作をもつコントローラー タイプに設定します。
プログラムでの使用
ブロック パラメーター: UseKiTs |
型: string、文字ベクトル |
値: "on" 、"off" |
既定の設定: "on" |
微分ゲインの有限で実数のゲイン値を指定します。
調整可能: Yes
依存関係
このパラメーターを有効にするには、[メイン] タブで、コントローラー パラメーターの [ソース] を [内部]
に設定し、[コントローラー] を [PID]
または [PD]
に設定します。
プログラムでの使用
ブロック パラメーター: D |
型: スカラー、ベクトル |
既定の設定: 0 |
R2024a 以降
このオプションは、プラント信号 y の導関数をブロックへの入力 ydot として直接指定する場合に選択します。これは、モデル内に利用可能な微分信号があり、ブロック内での微分の計算をスキップする場合に便利です。
依存関係
このオプションを有効にするには、微分動作をもつコントローラー タイプを選択します。
離散時間の PID コントローラーの場合に限り、このオプションをオフにすると不完全微分が完全離散時間微分器に置き換わります。この場合、コントローラーの伝達関数の微分項は次のようになります。
連続時間の PID コントローラーについては、常に完全微分項になります。
依存関係
このパラメーターを有効にするには、[時間領域] を [離散時間]
に設定し、[コントローラー] を微分動作をもつタイプに設定します。
プログラムでの使用
ブロック パラメーター: UseFilter |
型: string、文字ベクトル |
値: "on" 、"off" |
既定の設定: "on" |
フィルター係数の有限で実数のゲイン値を指定します。フィルター係数により、ブロックの微分動作のフィルターの極配置が決まります。フィルター極の配置は [時間領域] パラメーターに依存します。
[時間領域] が
[連続時間]
の場合、極配置はs = -N
になります。[時間領域] が
[離散時間]
の場合、極配置は [フィルター手法] パラメーターに応じて異なります。フィルター手法 フィルター極の配置 前進オイラー法
後退オイラー法
台形則
このブロックでは N = Inf
(理想的な完全微分) をサポートしていません。[時間領域] が [離散時間]
の場合、[不完全微分の使用] をオフにして微分フィルターを削除できます。
依存関係
このパラメーターを有効にするには、[メイン] タブで、コントローラー パラメーターの [ソース] を [内部]
に設定し、[コントローラー] を [PID]
または [PD]
に設定します。
プログラムでの使用
ブロック パラメーター: N |
型: スカラー、ベクトル |
既定の設定: 100 |
調整可能: Yes
Simulink Control Design ソフトウェアがある場合は、PID 係数を自動で調整できます。これを行うには、このパラメーターを使用して調整ツールを選択し、[調整] をクリックします。
伝達関数ベース (PID 調整器アプリ)
PID 調整器を使用します。関連するシステム応答を調べ、性能を検証して、PID 係数を対話形式で調整できます。既定の設定では、PID 調整器は線形化されたプラント モデルで動作します。線形化できないモデルについては、シミュレーションまたは測定による応答データから推測されたプラント モデルに対して、PID 係数を調整することができます。詳細については、Simulink でのモデルベースの PID 調整の紹介 (Simulink Control Design)を参照してください。
周波数応答ベース
周波数応答ベースの PID 調整器を使用します。シミュレーションから得られた周波数応答の推定データをベースにして、PID コントローラーの係数を調整できます。この調整法は、線形化できないプラントやゼロに線形化されるプラントで特に役立ちます。詳細については、プラント周波数応答データからの PID コントローラーの設計 (Simulink Control Design)を参照してください。
これらの調整法は、どちらも単一ループ制御構成を前提としたものです。Simulink Control Design ソフトウェアには、より複雑な構成に適した他の調整法も用意されています。PID Controller ブロックを調整するための他の方法の詳細については、制御設計法の選択 (Simulink Control Design)を参照してください。
ゼロクロッシング検出を使用すると、長時間のシミュレーションにつながる過度に小さいタイム ステップ サイズを取ることなく、正確に信号の不連続点を特定できます。PID Controller ブロックで [出力を制限する] を選択したり [外部リセット] をアクティブ化したりする場合、ゼロクロッシング検出をアクティブにすることでシミュレーションの計算時間を短縮できます。このパラメーターを選択するとゼロクロッシング検出がアクティブになります。
初期状態へのリセット時
飽和の上限または下限の状態の入力時
飽和の上限または下限の状態の消去時
ゼロクロッシング検出の詳細については、ゼロクロッシング検出を参照してください。
プログラムでの使用
ブロック パラメーター: ZeroCross |
型: string、文字ベクトル |
値: "on" 、"off" |
既定の設定: "on" |
初期化
Simulink では、シミュレーションの開始時や指定のトリガー イベントの発生時に、初期条件を使用して積分器および微分フィルター (または完全微分) の出力を初期化します ([外部リセット] パラメーターを参照)。それらの初期条件によって初期ブロック出力が決まります。このパラメーターを使用して、初期条件の値をブロックに提供する方法を選択します。
内部
[Integrator Initial condition] パラメーターと [Filter Initial condition] パラメーターを使用して初期条件を指定します。[不完全微分の使用] を選択していない場合は、[微分器] パラメーターを使用してフィルターの初期条件の代わりに完全微分器の初期条件を指定します。
外部
初期条件をブロック入力を使用して外部で指定します。追加の入力端子の [Io] と [Do] がブロックに表示されます。[不完全微分の使用] を選択していない場合は、[Do] でフィルターの初期条件の代わりに完全微分器の初期条件を指定します。
プログラムでの使用
ブロック パラメーター: InitialConditionSource |
型: string、文字ベクトル |
値: "internal" 、"external" |
既定の設定: "internal" |
Simulink では、シミュレーションの開始時や指定のトリガー イベントの発生時に、積分器の初期条件を使用して積分器を初期化します ([外部リセット] を参照)。積分器の初期条件とフィルターの初期条件によって PID controller ブロックの初期出力が決まります。
積分器の初期条件を NaN
または Inf
にすることはできません。
依存関係
このパラメーターを使用するには、[初期化] タブで、[ソース] を [内部]
に設定し、[コントローラー] を積分動作をもつタイプに設定します。
プログラムでの使用
ブロック パラメーター: InitialConditionForIntegrator |
型: スカラー、ベクトル |
既定の設定: 0 |
Simulink では、シミュレーションの開始時や指定のトリガー イベントの発生時に、フィルターの初期条件を使用して微分フィルターを初期化します ([外部リセット] を参照)。積分器の初期条件とフィルターの初期条件によって PID controller ブロックの初期出力が決まります。
フィルターの初期条件を NaN
または Inf
にすることはできません。
依存関係
このパラメーターを使用するには、[初期化] タブで、[ソース] を [内部]
に設定し、微分フィルターをもつコントローラーを使用します。
プログラムでの使用
ブロック パラメーター: InitialConditionForFilter |
型: スカラー、ベクトル |
既定の設定: 0 |
完全微分を使用している場合、Simulink では、シミュレーションの開始時または指定のトリガー イベントの発生時に、このパラメーターを使用して微分器を初期化します ([外部リセット] を参照)。積分器の初期条件と微分の初期条件によって PID controller ブロックの初期出力が決まります。
微分の初期条件を NaN
または Inf
にすることはできません。
依存関係
このパラメーターを使用するには、[時間領域] を [離散時間]
に設定し、[不完全微分の使用] チェック ボックスをオフにし、[初期化] タブで [ソース] を [内部]
に設定します。
プログラムでの使用
ブロック パラメーター: DifferentiatorICPrevScaledInput |
型: スカラー、ベクトル |
既定の設定: 0 |
このパラメーターを使用して、[Integrator Initial condition] パラメーターと [Filter Initial condition] パラメーターを対応するブロック状態または出力に適用するかどうかを指定します。このパラメーターはコマンド ラインでのみ変更できます。変更するには、set_param
を使用してブロックの InitialConditionSetting
パラメーターを設定します。
自動
すべての状況においてこのオプションを使用しますが、ブロックが Triggered Subsystem または Function-Call Subsystem 内に存在し、簡易初期化モードが有効になっている場合は例外となります。
出力
ブロックが Triggered Subsystem または Function-Call Subsystem にあり、簡易初期化モードが有効になっている場合はこのオプションを使用します。
[初期条件設定] パラメーターの詳細については、Discrete-Time Integrator ブロックを参照してください。
このパラメーターにはプログラムからのみアクセスできます。
プログラムでの使用
ブロック パラメーター: InitialConditionSetting |
型: string、文字ベクトル |
値: "Auto" 、"Output" |
既定の設定: "Auto" |
ブロックで積分器とフィルターを初期条件にリセットするトリガー条件を指定します ([不完全微分の使用] が選択されていない場合、トリガーにより積分器と微分器が初期条件にリセットされます)。[なし]
以外のオプションを選択すると、ブロックで外部リセット信号の [リセット] 端子が有効になります。
なし
積分器とフィルター (または微分器) の出力をシミュレーションの開始時に初期条件に設定し、シミュレーション中はリセットしません。
立ち上がり
リセット信号が立ち上がりエッジをもつ場合に出力をリセットします。
立ち下がり
リセット信号が立ち下がりエッジをもつ場合に出力をリセットします。
両方
リセット信号が立ち上がりまたは立ち下がりをもつ場合に出力をリセットします。
レベル
リセット信号が次のいずれかに該当する場合に出力をリセットします。
現在のタイム ステップで非ゼロである場合
以前のタイム ステップでの非ゼロから現在のタイム ステップでの 0 まで変化した場合
このオプションでは、リセット信号が非ゼロである間は出力が初期条件のままになります。
依存関係
このパラメーターを有効にするには、[コントローラー] を微分動作または積分動作をもつタイプに設定します。
プログラムでの使用
ブロック パラメーター: ExternalReset |
型: string、文字ベクトル |
値: "none" 、"rising" 、"falling" 、"either" 、"level" |
既定の設定: "none" |
[外部リセット] パラメーターで指定されたリセット メカニズムを Simulink および Simulink Control Design の線形化コマンドで無視する場合に選択します。リセット状態を無視すると、操作点によってブロックがリセットされても、操作点を中心にモデルが線形化されます。
プログラムでの使用
ブロック パラメーター: IgnoreLimit |
型: string、文字ベクトル |
値: "off" 、"on" |
既定の設定: "off" |
信号トラッキングを使用すると、ブロック出力が [TR] 端子で指定したトラッキング信号に従うように設定できます。信号トラッキングがアクティブな場合、[Tracking gain (Kt)] パラメーターで指定したゲイン Kt
でトラッキング信号とブロック出力の差が積分器入力に返されます。信号トラッキングは、バンプレス制御の転送やマルチループ制御構造でのワインドアップの防止などに応用できます。
バンプレス制御の転送
信号トラッキングを使用して、システムで 2 つのコントローラーを切り替えるバンプレス制御転送を行います。PID コントローラーと別のコントローラーの間で制御を切り替えるとします。これを行うには、次の図に示すように、コントローラーの出力を [TR] 入力に接続します。
詳細については、バンプレス制御の転送を参照してください。
マルチループ制御
信号トラッキングを使用して、次のモデルのようなマルチループ制御方法でのブロックのワインドアップを防ぎます。
Inner Loop サブシステムには次の図に示すブロックが含まれています。
内側のループの出力をトラッキングしているため、PID コントローラーの出力が内側のループの飽和出力を超えることはありません。詳細については、マルチループ制御におけるブロック ワインドアップの回避を参照してください。
依存関係
このパラメーターを有効にするには、[コントローラー] を積分動作をもつタイプに設定します。
プログラムでの使用
ブロック パラメーター: TrackingMode |
型: string、文字ベクトル |
値: "off" 、"on" |
既定の設定: "off" |
[トラッキングモードを有効にする] を選択すると、信号 [TR] とブロック出力の差がゲイン Kt
で積分器入力に返されます。このパラメーターを使用して、そのフィードバック ループのゲインを指定します。
離散時間コントローラーでは、ブロックの [I*Ts を使用] パラメーターを選択した場合は、このパラメーターを値 Kt*Ts
に設定します。ここで、Kt
は目的のゲイン、Ts
はサンプル時間です。
依存関係
このパラメーターを有効にするには、[トラッキングモードを有効にする] を選択します。
プログラムでの使用
ブロック パラメーター: Kt |
タイプ: スカラー |
既定の設定: 1 |
飽和
出力の飽和
このオプションをアクティブにすると、ブロック出力が制限されるため、コントローラーの後に個別の Saturation ブロックを置く必要がなくなります。また、ブロックに組み込みのアンチワインドアップ メカニズムをアクティブにすることもできます ([アンチワインドアップ手法] パラメーターを参照)。[下限] パラメーターと [上限] パラメーターを使用して出力の飽和の制限を指定します。飽和の下限をブロックの入力端子として外部で指定することもできます。
プログラムでの使用
ブロック パラメーター: LimitOutput |
型: string、文字ベクトル |
値: "off" 、"on" |
既定の設定: "off" |
このパラメーターを使用して、ブロックの出力の飽和の上限値と下限値を提供する方法を指定します。
内部
[上限] パラメーターと [下限] パラメーターを使用して出力の飽和の制限を指定します。
外部
ブロックの入力端子を使用して、出力の飽和の制限を外部で指定します。追加の入力端子の [up] と [lo] がブロックに表示されます。入力端子を使用すると、Simulink モデルのロジックまたはその他の計算によって特定され、ブロックに渡される出力の飽和の上限と下限を実装できます。
プログラムでの使用
ブロック パラメーター: SatLimitsSource |
型: string、文字ベクトル |
値: "internal" 、"external" |
既定の設定: "internal" |
ブロック出力の上限を指定します。比例、積分、微分動作の重み付き総和がこの値を上回ると、ブロック出力は [飽和の上限] に保持されます。
依存関係
このパラメーターを有効にするには、[出力を制限する] を選択します。
プログラムでの使用
ブロック パラメーター: UpperSaturationLimit |
タイプ: スカラー |
既定の設定: Inf |
ブロック出力の下限を指定します。比例、積分、微分動作の重み付き総和がこの値を下回ると、ブロック出力は [飽和の下限] に保持されます。
依存関係
このパラメーターを有効にするには、[出力を制限する] を選択します。
プログラムでの使用
ブロック パラメーター: LowerSaturationLimit |
タイプ: スカラー |
既定の設定: -Inf |
[上限] パラメーターと [下限] パラメーターで指定されたブロック出力の制限を Simulink および Simulink Control Design の線形化コマンドで無視します。出力制限を無視すると、操作点によってブロックが出力制限を超えても、操作点を中心にモデルが線形化されます。
依存関係
このパラメーターを有効にするには、[出力を制限する] パラメーターを選択します。
プログラムでの使用
ブロック パラメーター: LinearizeAsGain |
型: string、文字ベクトル |
値: "off" 、"on" |
既定の設定: "off" |
[出力を制限する] を選択したときにコントローラー コンポーネントの重み付き総和が指定された出力制限を超えると、ブロック出力は指定された制限に保持されます。ただし、積分器出力は増加を続け (積分器ワインドアップ)、ブロック出力とブロック コンポーネントの合計の差が大きくなります。つまり、出力が飽和制限に拘束されていてもブロックの内部信号は拘束を受けない可能性があります。積分器ワインドアップを防ぐメカニズムがない場合、2 つの結果が考えられます。
入力信号の符号が変化しない場合、積分器はオーバーフローするまで積分を続けます。オーバーフロー値は、積分器出力のデータ型の最大値または最小値です。
重み付き総和が出力制限を超えてから入力信号の符号が変化した場合、積分器のワインドアップを解消して重み付き総和をブロック飽和制限範囲内に戻すには長い時間がかかることがあります。
いずれの場合もコントローラーの性能に悪影響があります。アンチワインドアップ メカニズムを使用せずにワインドアップの影響に対抗するためには、コントローラーをデチューンしなければならないことがありますが (コントローラーのゲインを減らすなど)、コントローラーの反応が遅くなることがあります。この問題を避けるには、このパラメーターを使用してアンチワインドアップ メカニズムをアクティブにします。
なし
アンチワインドアップ メカニズムを使用しません。
[back-calculation]
ブロック出力が飽和したときに、飽和した制御信号と飽和していない制御信号の差を積分器に戻すことで積分器のワインドアップを解消します。次の図は、連続時間コントローラーの逆解析フィードバック回路を示しています。コントローラー構成の実際のフィードバック回路を表示するには、ブロックを右クリックし、[マスク] 、 [マスク内を表示] を選択します。
アンチワインドアップ フィードバック回路のゲインは、[逆算係数 (Kb)] パラメーターを使用して指定します。通常は、
Kb = I
またはKb = sqrt(I*D)
(微分動作を含むコントローラーの場合) を設定すれば十分です。逆解析は、デッド タイムが比較的大きいプラントに効果的な場合があります [1]。[clamping]
ブロック コンポーネントの合計が出力制限を上回り、積分器出力とブロック入力の符号が同じ場合に積分を停止します。ブロック コンポーネントの合計が出力制限を上回り、積分器出力とブロック入力の符号が反対の場合に積分を再開します。固定は条件付き積分と呼ばれることがあります。
固定は、デッド タイムが比較的小さいプラントに役立つことがありますが、デッド タイムが大きい場合は過渡応答が低くなる可能性があります [1]。
外部
(R2024b 以降)組み込みのアンチワインドアップ手法は、指定されたブロック出力の制限を超えるブロック コンポーネントの合計に依存します。アプリケーションに飽和がある場合や PID Controller ブロックの下流を制限する場合は、"extAW" 入力端子を使用してカスタム アンチワインドアップ ロジックを実装できます。カスタム アルゴリズムへの入力として使用できるように、ブロックの preInt 出力端子で積分器の前の信号も提供されています。
依存関係
このパラメーターを有効にするには、[出力を制限する] パラメーターを選択します。
プログラムでの使用
ブロック パラメーター: AntiWindupMode |
型: string、文字ベクトル |
値: "none" 、"back-calculation" 、"clamping" 、"external" |
既定の設定: "none" |
[back-calculation
] アンチワインドアップ手法では、ブロック出力が飽和したときに積分器のワインドアップが解消されます。これは、飽和した制御信号と飽和していない制御信号の差を積分器に戻すことで行われます。アンチワインドアップ フィードバック回路のゲインは、[逆算係数 (Kb)] パラメーターを使用して指定します。詳細については、[アンチワインドアップ手法] パラメーターを参照してください。
離散時間コントローラーでは、ブロックの [I*Ts を使用] パラメーターを選択した場合は、このパラメーターを値 Kb*Ts
に設定します。ここで、Kb
は目的の係数、Ts
はサンプル時間です。
依存関係
このパラメーターを有効にするには、[出力を制限する] パラメーターを選択し、[アンチワインドアップ手法] パラメーターを [逆解析]
に設定します。
プログラムでの使用
ブロック パラメーター: Kb |
タイプ: スカラー |
既定の設定: 1 |
積分器の飽和
このパラメーターを有効にすると、積分器出力が指定した範囲内に制限されます。積分器出力が制限値に達すると、積分動作はオフになり、積分飽和現象を回避します。[下限] パラメーターと [上限] パラメーターを使用して飽和の制限を指定します。
依存関係
このパラメーターを有効にするには、[コントローラー] を積分動作をもつコントローラー タイプに設定します。
プログラムでの使用
ブロック パラメーター: LimitIntegratorOutput |
型: string、文字ベクトル |
値: "off" 、"on" |
既定の設定: "off" |
積分器出力の上限を指定します。積分器出力がこの値を上回る場合、この値で保持されます。
依存関係
このパラメーターを有効にするには、[積分器の飽和] の [出力を制限する] を選択します。
プログラムでの使用
ブロック パラメーター: UpperIntegratorSaturationLimit |
タイプ: スカラー |
既定の設定: Inf |
積分器出力の下限を指定します。積分器出力がこの値を下回る場合、この値で保持されます。
依存関係
このパラメーターを有効にするには、[積分器の飽和] の [出力を制限する] を選択します。
プログラムでの使用
ブロック パラメーター: LowerIntegratorSaturationLimit |
タイプ: スカラー |
既定の設定: -Inf |
データ型
このタブのパラメーターは、主に Fixed-Point Designer™ を使用した固定小数点コードの生成で使用します。ブロックに関連する数値量のコード生成時の格納方法や処理方法を定義します。
固定小数点コードの生成用にデータ型を設定する必要がある場合は、[固定小数点ツールを開く] をクリックし、そのツールを使用してタブの残りのパラメーターを設定します。固定小数点ツールの使用の詳細については、固定小数点ツールを使用したデータ オブジェクトのオートスケーリング (Fixed-Point Designer)を参照してください。
固定小数点ツールの使用後、このタブのパラメーターを使用して、固定小数点データ型の設定を必要に応じて調整できます。ブロックに関連するそれぞれの量について以下を指定できます。
浮動小数点または固定小数点のデータ型。データ型をブロックの上流の値から継承するかどうかも含みます。
量の最小値と最大値。これにより、固定小数点表現における量のスケーリング方法が決まります。
適切な値を選択するためのサポートとして、 をクリックすると対応する量のデータ型アシスタントが開きます。詳細については、データ型アシスタントを利用したデータ型の指定を参照してください。
[データ型] タブにリストされる具体的な量は、PID Controller ブロックの構成に応じて異なります。一般に、次のタイプの量についてのデータ型を設定できます。
乗算出力 — ブロックのマスクの下で実行された乗算の結果を格納します。たとえば、[P の乗算出力] には、ブロック入力を比例ゲイン [P] で乗算する Gain ブロックの出力が格納されます。
パラメーター — [P]、[I]、[D] など、数値ブロック パラメーターの値を格納します。
ブロック出力 — PID Controller ブロックのマスクの下にあるブロックの出力を格納します。たとえば、Integrator というブロックの出力のデータ型を指定するには [積分器の出力] を使用します。このブロックは、Integrator Subsystem 内のマスクの下にあり、コントローラーの動作の積分項を計算します。
アキュムレータ — Sum ブロックに関連する値を格納します。たとえば、[SumI2 Accumulator] は、Sum ブロック SumI2 に関連するアキュムレータのデータ型を設定します。このブロックは、Anti-Windup Subsystem の Back Calculation Subsystem 内のマスクの下にあります。
一般に、リストされたパラメーターに関連するブロックは、PID Controller ブロックのマスク内を参照してサブシステムを調べると見つかります。モデル エクスプローラーを使用して、SumI2
などのリストされたパラメーターの名前をマスクの下で検索することもできます (モデル エクスプローラーを参照)。
入力データ型と内部データ型の照合
既定の設定では、ブロック内のデータ型はすべて [継承: 内部ルールによる継承]
に設定されます。この設定の場合、Simulink は、組み込みターゲット ハードウェアのプロパティを考慮しつつ、数値の精度、パフォーマンス、生成コードのサイズのバランスが取れるように、データ型を選択します。
状況によっては、ブロック内のデータ型の間で非互換性が発生することがあります。たとえば、連続時間では、マスクの下の Integrator ブロックは [double]
型の信号しか受け入れません。ブロックの入力信号の型が [double]
に変換できない [uint16]
などの型の場合、コードの生成時に型の継承に関する内部ルールによってエラーが生成されます。
このようなエラーを回避するために、[データ型] の設定を使用して強制的にデータ型変換を行うことができます。たとえば、[P の乗算出力]、[I の乗算出力]、および [D の乗算出力] を明示的に [double]
に設定すると、連続時間の積分器に到達する信号が必ず [double]
型になります。
一般に、コード生成アプリケーション用にブロックを連続時間で使用することは推奨されません。ただし、一部の値をブロック内の下流の信号の制約と互換性がないデータ型に明示的に設定した場合、離散時間でも同様のデータ型エラーが発生することがあります。その場合は、[データ型] の設定を使用して、すべてのデータ型を内部的に互換性があるものにします。
固定小数点が使用可能なパラメーター
固定小数点演算の丸めモードを指定します。詳細については、丸めモード (Fixed-Point Designer)を参照してください。
ブロック パラメーターは常に最近傍の表現可能な値に丸められます。ブロックパラメーターの丸めを直接制御するには、MATLAB® の丸め関数を使用する式をマスク フィールドに入力します。
プログラムでの使用
ブロック パラメーターの値をプログラムで設定するには、関数 set_param
を使用します。
パラメーター: | RndMeth |
値: | 'Floor' (既定値) | 'Ceiling' | 'Convergent' | 'Nearest' | 'Round' | 'Simplest' | 'Zero' |
オーバーフローで飽和するかラップするかを指定します。
on
— オーバーフローは、データ型が表現できる最小値または最大値のいずれかに飽和します。off
— オーバーフローは、データ型によって表現される適切な値にラップされます。
たとえば、符号付き 8 ビット整数 int8
で表現できる最大値は 127 です。この最大値を超えるブロックの演算結果により 8 ビット整数のオーバーフローが発生します。
このパラメーターがオンになっていると、ブロック出力は 127 で飽和します。同様に、ブロック出力は最小出力値である -128 で飽和します。
このパラメーターをオフにすると、オーバーフローを引き起こした値は
int8
として解釈され、意図しない結果が引き起こされる可能性があります。たとえば、int8
として表されるブロック結果 130 (バイナリで 1000 0010) は -126 です。
ヒント
モデルでオーバーフローが発生する可能性があり、生成コードに飽和保護を明示的に組み込む必要があるときには、このパラメーターをオンにすることを検討してください。
生成コードの効率を最適化する場合には、このパラメーターをオフにすることを検討してください。このパラメーターをオフにすると、ブロックが範囲外の信号を処理する方法を指定しすぎないようにする点でも役立ちます。詳細については、信号範囲のエラーのトラブルシューティングを参照してください。
このパラメーターをオンにすると、飽和は出力や結果だけでなく、このブロックの内部演算すべてに適用されます。
通常、オーバーフローが可能ではない場合は、コード生成プロセスで検出されます。この場合、コード ジェネレーターでは飽和コードは生成されません。
プログラムでの使用
ブロック パラメーターの値をプログラムで設定するには、関数 set_param
を使用します。
パラメーター: | SaturateOnIntegerOverflow |
値: | 'off' (既定値) | 'on' |
このパラメーターを選択して、このブロックについて指定したデータ型を固定小数点ツールがオーバーライドするのを防止します。詳細については、出力データ型設定のロック (Fixed-Point Designer)を参照してください。
プログラムでの使用
ブロック パラメーター: LockScale |
型: 文字ベクトル |
値: 'off' | 'on' |
既定の設定: 'off' |
状態属性
このタブのパラメーターは、主にコード生成で使用します。
連続時間 PID コントローラーの積分器またはフィルターに関連する状態に固有名を割り当てます (離散時間 PID コントローラーの状態名の詳細については、[状態名] パラメーターを参照してください)。状態名は、たとえば以下に使用されます。
生成コード内の対応する変数
シミュレーション中に状態をログに記録する際のストレージ名の一部
ブロックを線形化して得られる線形モデル内の対応する状態
有効な状態名は英字またはアンダースコア文字で始まり、英数字またはアンダースコア文字が続きます。
依存関係
このパラメーターを有効にするには、[時間領域] を [連続時間]
に設定します。
プログラムでの使用
パラメーター: IntegratorContinuousStateAttributes 、FilterContinuousStateAttributes |
型: 文字ベクトル |
既定の設定: '' |
離散時間 PID コントローラーの積分器またはフィルターに関連する状態に固有名を割り当てます (連続時間 PID コントローラーの状態名の詳細については、[状態名 ('position' など)] パラメーターを参照してください)。
有効な状態名は英字またはアンダースコア文字で始まり、英数字またはアンダースコア文字が続きます。状態名は、たとえば以下に使用されます。
生成コード内の対応する変数
シミュレーション中に状態をログに記録する際のストレージ名の一部
ブロックを線形化して得られる線形モデル内の対応する状態
コード生成での状態名の使用の詳細については、C Data Code Interface Configuration for Model Interface Elements (Simulink Coder)を参照してください。
依存関係
このパラメーターを有効にするには、[時間領域] を [離散時間]
に設定します。
プログラムでの使用
パラメーター: IntegratorStateIdentifier 、FilterStateIdentifier |
型: string、文字ベクトル |
既定の設定: "" |
このパラメーターは、離散時間の積分器またはフィルターの状態名を Simulink の信号オブジェクトに関連付けるよう要求する場合に選択します。
依存関係
このパラメーターを離散時間の積分器またはフィルターの状態に対して有効にするには、次のようにします。
[時間領域] を
[離散時間]
に設定します。積分器またはフィルターの [状態名] の値を指定します。
モデル コンフィギュレーション パラメーター [信号の関連付け] を
[なし]
以外の値に設定します。
プログラムでの使用
ブロック パラメーター: IntegratorStateMustResolveToSignalObject 、FilterStateMustResolveToSignalObject |
型: string、文字ベクトル |
値: "off" 、"on" |
既定の設定: "off" |
ブロックの特性
データ型 |
|
直達 |
|
多次元信号 |
|
可変サイズの信号 |
|
ゼロクロッシング検出 |
|
参照
[1] Visioli, A., "Modified Anti-Windup Scheme for PID Controllers," IEE Proceedings - Control Theory and Applications, Vol. 150, Number 1, January 2003
拡張機能
連続時間 PID コントローラー ([時間領域] を [連続時間]
に設定):
連続時間ブロックについては、モデルの離散化を使用して、コード生成をサポートする同等な離散時間ブロックにマッピングすることを検討します。[モデルの離散化] にアクセスするには、モデルから [アプリ] タブの [制御システム] で [モデルの離散化] をクリックします。
量産コードには推奨されません。
離散時間 PID コントローラー ([時間領域] を [離散時間]
に設定):
Triggered Subsystem の階層の内部に置かれる場合は絶対時間に依存します。
生成されたコードは、ある条件の下で関数
memcpy
または関数memset
(string.h
) に依存します。
HDL Coder™ には、HDL の実装および合成されたロジックに影響する追加のコンフィギュレーション オプションがあります。
このブロックには 1 つの既定の HDL アーキテクチャがあります。
ConstrainedOutputPipeline | 既存の遅延を設計内で移動することによって出力に配置するレジスタの数。分散型パイプラインではこれらのレジスタは再分散されません。既定の設定は |
InputPipeline | 生成されたコードに挿入する入力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
OutputPipeline | 生成されたコードに挿入する出力パイプライン ステージ数。分散型パイプラインと制約付き出力パイプラインでは、これらのレジスタを移動できます。既定の設定は |
HDL コードの生成は、離散時間 PID コントローラー ([時間領域] を
[離散時間]
に設定) でのみサポートされます。[積分手法] が
[後退オイラー法]
または[台形則]
に設定されている場合、次のいずれかに該当する状況ではブロックの HDL コードを生成できません。[出力を制限する] が選択されており、[アンチワインドアップ手法] が
[なし]
以外に設定されている場合。[トラッキングモードを有効にする] が選択されている場合。
HDL コードを生成するには、次のようにします。
離散時間 PID コントローラーを使用する。[時間領域] セクションで [離散時間] を指定します。
[不完全微分の使用] チェック ボックスをオンのままにする。
フィルターと積分器の初期条件を内部的に指定する。[初期化] タブで [ソース] を
[内部]
に指定します。HDL コード生成ではフィルター係数を内部的にも外部的にも指定できます。[メイン] タブで [ソース] には
[内部]
または[外部]
を使用できます。[外部リセット] を
[なし]
に設定する。double 入力を使用する場合、[アンチワインドアップ手法] を
[固定]
に設定しない。
PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。
固定小数点コードの生成は、離散時間 PID コントローラー ([時間領域] を [離散時間]
に設定) でのみサポートされます。
バージョン履歴
R2009b で導入新しい入力端子 extAW を使用して、ブロックの外部でアンチワインドアップ アルゴリズムを指定できるようになりました。カスタム アルゴリズムの入力として使用できるように、ブロックの preInt 出力端子で積分器の前の信号も提供されています。PID Controller ブロックには組み込みのアンチワインドアップ手法が 2 つ用意されていますが、積分器のワインドアップを解消するために、それらの手法は指定されたブロック出力の制限を超えるブロック コンポーネントの合計に依存します。アプリケーションに飽和がある場合や PID Controller ブロックの下流を制限する場合は、新しい extAW 端子と preInt 端子を使用してカスタム アンチワインドアップ ロジックを実装できます。新しい端子を有効にするには、[飽和] タブで [出力を制限する] を選択し、[アンチワインドアップ手法] を [外部]
に設定します。
PID Controller ブロックで、プラント信号 y の導関数をブロックに入力として直接提供できるようになりました。これは、モデル内に利用可能な微分信号があり、ブロック内での微分の計算をスキップする場合に便利です。
導関数を提供する入力端子を有効にするには、微分動作をもつコントローラー タイプを選択し、[外部ソースの導関数を使用] パラメーターを有効にします。
積分器またはフィルターの初期条件の値が出力の飽和の制限から外れている場合に、ブロックでエラーが発行されるようになりました。以前のリリースでは、それらの初期条件の値がそのようになっていてもブロックでエラーは発行されませんでした。
この変更によってモデルに影響が生じる場合は、PID の積分器またはフィルターの初期条件を更新し、それらの値が出力の飽和の制限に収まるようにしてください。
R2021b 以降、関数 get_param
は ReferenceBlock
パラメーターに異なる値を返します。ReferenceBlock
パラメーターは、すべての Simulink ブロックに共通するプロパティであり、ブロックがリンクしているライブラリ ブロックのパスを与えます。PID Controller ブロックと Discrete PID Controller ブロックは現在、'slpidlib/PID Controller'
にリンクしています。以前、これらのブロックは 'pid_lib/PID Controller'
にリンクしていました。
この変更は、他の機能やワークフローには影響しません。関数 set_param
では、以前のパスを引き続き使用できます。
R2020b 以降、関数 get_param
は ReferenceBlock
パラメーターに異なる値を返します。ReferenceBlock
パラメーターは、すべての Simulink ブロックに共通するプロパティであり、ブロックがリンクしているライブラリ ブロックのパスを与えます。PID Controller ブロックと Discrete PID Controller ブロックは、今は 'pid_lib/PID Controller'
にリンクしています。以前は、ブロックは 'simulink/Continuous/PID Controller'
にリンクしていました。
この変更は、他の機能やワークフローには影響しません。関数 set_param
では、以前のパスを引き続き使用できます。
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)