シーケンス制御講座

PID制御

実際にPID制御を使ったプログラムを紹介します。今回はフィードバックの値をアナログユニットから入力するため、アナログユニットの設定も同時に行います。

作成日:2016年05月10日
更新日:2022年10月30日


PIDの書き方

実際にPID制御のプログラムを作ってみます。「PIDとは」では不完全微分を使用してくださいと書きましたが、ここではあえて完全微分でプログラムを作ってみます。完全微分と不完全微分では命令の前に「S.」がつくかつかないかの違いだけです。不完全微分の場合は「S.」を命令の前につけてください。

機器構成ですが、アナログ入出力ユニットを使用しています。アナログ出力では、出力先の電流値が増減できるようになっています。電流が流れる回路にCTを取り付け、電流値を測定します。CTにアイソレーションを取付、アナログ入力ユニットの入力レンジに合うようにしています。アナログ入出力ユニットと外部機器の接続にはアイソレーションを中継し、絶縁と値の変換を行っています。

PIDは基本的にアナログユニットに使用するイメージがあるかもしれませんが、アナログにこだわる必要はありません。例えば上記回路構成で電流値測定にCTからアナログユニットに入力していますが、パネルメータからBCD入力でも問題ありません。

アナログユニットの設定

ではプログラムです。今回はアナログユニットを使用するため、最初にアナログユニットのパラメータ書き込みです。


パラメータの続きです

アナログユニットの使い方は「アナログ変換」を参考にしてください。上記パラメータを書き込みことでアナログ出力「D/A変換」ができるようになります。

PIDの設定

ここからPIDの設定です。

  • D7000:使用ループ数 PID制御を行う数。今回は1つなのでK1
  • D7001:1スキャン実行ループすう。シーケンサーの1スキャン中に何個ループを実行するか。複数のループ数の場合、分割して実行できる。
  • D7002:演算方式⇒逆動作 0が正動作1が逆動作。逆動作は,設定値より測定値が減少したときに操作量を増加させる。つまり電流値が減少したから出力増加させるため逆動作です。
  • D7003:サンプリング周期 PID演算をする周期です。測定値入力の周期より早くしておきます。
  • D7007:フィルター係数 測定値にフィルターをかけます。パルスなどの外乱がある場合大きくしてみてください。
  • D7008:操作量下限値 最低限の出力値。今回の構成では目標電流を0Aに設定してもD7008にK2があるため、0まで下がらないという意味です。
  • D7009:操作量上限値 これ以上値が上がりません。アナログユニットの出力値上限が4000なので3900に設定しています。
  • D7010,D7011:操作量と測定値の変化量のリミット値です。

デバイス番号の順番に書いてもいいのですが、PIDの値を合えて分けています。

  • D7004:P動作 値を大きくすれば制御動作が早くなる。ただしハンチングを起こしやすくなる。値を小さくすれば制御動作が遅くなる。なかなか目標値にならない。
  • D7005:I動作 値を小さくすればオフセットをなくす時間が早くなる。目標値に近づいたときの制御動作です。値が大きいと目標値になかなか近づかなくなる。
  • D7006:D動作 外乱などによる制御対象の変動を防ぐ。大きくすれば効果が上がるが、ハンチングが起きやすくなる。

PIDINIT命令でD7000~の設定値をCPUに登録します。これでPIDが可能となります。不完全微分の場合はS.PIDINITにしてください。

PIDINIT命令でD7000を指定しています。そのためPID設定値はD7000から書き込みました。ここをD1000などに変更すれば、設定値はD1000からに書き込み形になります。このPIDINIT命令で強制的にデータレジスタを使用します。今回はループ数1なのでPIDINI命令を実行した時点でD7000~D7015の16個使用することになります。さらにループ数が増えると14個ずつ増えていきますので、データレジスタの重複に注意してください。

次の設定です。

  • D7500:初回フラグ PID実行開始時の処理です。K0の場合は最初の1スキャンは全てのループを一括処理します。
  • D7510:設定値(SV) PID演算中はこの値に近づけようとします。演算中に変更も可能です。
  • D7511:測定値(PV) 現在の測定値を常時書き込んでください。この値を元にPID出力値を(MV)を算出します。
  • D7515:自動切換え K0で自動モード

設定値を入力したらPIDCONT命令で実行します。ここではD7500を指定しているため、設定値はD7500から書いています。ここを変更すればデータレジスタの使用番号を変更できます。ループ数1で使用されるデータレジスタ数は33個です。データレジスタの重複に注意してください。

不完全微分の場合はS.PIDCONTとしてください。

PIDの動作方法

それではPIDを動作させてみます。

先ほどPIDCONT D7500の命令を使用しましたが、それによってD7512に操作量のMVが自動的に入ってきます。このプログラムではPID演算開始時にMV値をアナログ出力させています。途中にあるA接点はただの条件なので、作成するプログラムによっては変わってきます。
PIDRUN K1命令でループのNo1をPID実行状態にします。PIDSTOPはPIDを停止させます。このプログラムでは「M625」がOしている間はPIDが実行されます。

これでPID制御のプログラムは完成です。ポイントさえおさえておけば特に難しくはないと思います。参考としてMV値はPID実行中に強引に変更することも可能です。ただし自己責任で行ってください。

「M625」がOFFになるとPIDが停止します。この回路はPID停止と同時にMV値を最低値に変更しています。PID実行中に強制的に変更もできます。ただし正常な動作ではありませんので使用は自己責任でお願いします。



図解入門 よくわかる最新 シーケンス制御と回路図の基本はKindle版(電子書籍)です。単行本ご希望の方は、フォーマットで単行本を選択してください。または、トップページよりご購入ください。

Copyright (C) 2010 シーケンス制御講座, All rights reserved.