====== IpidReset() ====== ''IpidReset()''はPIDの積分値と内部状態を初期化します。 {{:ja-jp_commands:reference:ipidreset.svg?900|IpidReset コマンドの動作フロー}} ''void IpidReset(uint8_t id)'' ===== コマンド ===== ^ コマンド ^ 引数 ^ 戻り値 ^ 動作 ^ | ''IpidReset(id)'' | ''uint8_t id'' — PIDループ番号。''0'' ~ ''255''を使用可能 | ''void'' | PIDの積分値と内部状態を初期化します。 | ===== 使用例 ===== MPINO-16A8R8TのA0をPIDの現在値として読みます。D22入力がLOWからHIGHに変わると、PIDの内部状態を一度初期化します。計算結果はシリアルモニタにのみ表示します。A0の設定とD22の配線は製品仕様で確認してください。 const uint8_t PID_ID = 0; void setup() { Serial.begin(115200); IpidSet(PID_ID, 2.0F, 0.4F, 0.1F, 100, 0.0F, 1023.0F); // PID係数、計算周期、出力範囲を設定します。 } void loop() { static bool wasHigh = false; const bool isHigh = digitalRead(22) == HIGH; if (isHigh && !wasHigh) IpidReset(PID_ID); // D22の立ち上がりでPID内部状態を初期化します。 wasHigh = isHigh; const float currentValue = analogRead(A0); // A0のADC生値を読み出します。 const float result = IpidRun(PID_ID, currentValue, 512.0F); // A0の生値と目標値512からPID出力を計算します。 Serial.println(result); delay(100); } ===== 注意事項 ===== * PID出力は現場機器に直接影響する場合があるため、最初は低い出力範囲と小さなゲインでテストしてください。 * ''IpidRun()''は''sampleMs''周期に達するまでは直前の出力値を保持します。''loop()''で繰り返し呼び出しても構いません。 * 積分項は出力制限を基準に自動制限され、ワインドアップを低減します。追加の制限が必要な場合は''IpidItermLimit()''を使用します。 * 微分項は設定値変更による急激な跳ねを抑えるため、PV変化量を基準に計算します。 * ''IpidReset()''は積分項、直前のPV、直前の出力値を初期化します。 * 同じ''id''は1つの制御ループだけに使用します。 ===== 同じカテゴリの内蔵コマンド ===== * [[:ja-jp_commands:reference:ipidset|IpidSet() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipidrun|IpidRun() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipidreverse|IpidReverse() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipiditermlimit|IpidItermLimit() 詳細説明を見る]] * [[:ja-jp_commands:reference:ipidoutput|IpidOutput() 詳細説明を見る]] [[:ja-jp_commands:builtin|← 内蔵コマンド一覧]]