ja-jp_commands:reference:ipidreset
文書の過去の版を表示しています。
目次
IpidReset()
コマンド
| コマンド | 引数 | 戻り値 | 動作 |
|---|---|---|---|
IpidReset(id) | uint8_t id — PIDループ番号。0 ~ 255を使用可能 | void | PIDの積分値と内部状態を初期化します。 |
使用例
const uint8_t PID_ID = 0; const float SETPOINT_C = 45.0F; void setup() { Serial.begin(115200); if (!IpidSet(PID_ID, 2.0F, 0.4F, 0.1F, 100, 0.0F, 100.0F)) return; // PID係数、計算周期、出力範囲を設定します。 IpidItermLimit(PID_ID, -20.0F, 20.0F); // PID積分項の最小値と最大値を制限します。 IpidReverse(PID_ID, false); // PIDの正動作または逆動作を選択します。 } void loop() { const float temperature = ntcReadf(0); // NTC 3950 10kΩセンサの温度を℃単位の浮動小数点値で返します。 if (IdigitalRead(0, 5)) IpidReset(PID_ID); // 入力を連続して複数回読み、すべて一致した場合のみ状態を更新します。HIGHとLOWが混在する場合は前の安定状態を保持します。 / PIDの積分値と内部状態を初期化します。 const float demand = IpidRun(PID_ID, temperature, SETPOINT_C); // 現在値と設定値からPID出力を計算します。 const float lastDemand = IpidOutput(PID_ID); // 最後に計算したPID出力値を返します。 IanalogWritef(0, 0.0F, 100.0F, lastDemand); // ユーザーの浮動小数点値をアナログ出力範囲に変換して出力します。 delay(20); }
注意事項
- PID出力は現場機器に直接影響する場合があるため、最初は低い出力範囲と小さなゲインでテストしてください。
IpidRun()はsampleMs周期に達するまでは直前の出力値を保持します。loop()で繰り返し呼び出しても構いません。- 積分項は出力制限を基準に自動制限され、ワインドアップを低減します。追加の制限が必要な場合は
IpidItermLimit()を使用します。 - 微分項は設定値変更による急激な跳ねを抑えるため、PV変化量を基準に計算します。
IpidReset()は積分項、直前のPV、直前の出力値を初期化します。- 同じ
idは1つの制御ループだけに使用します。
ja-jp_commands/reference/ipidreset.1788791738.txt.gz · 最終更新: by 127.0.0.1
