PID処理(PWM出力指定可能)
PID演算は、プロセス値PVを設定値SPに値を近づける制御を行います。F355_PID_DUT命令とは異なり、この命令では、PWM出力(ON-OFF出力)を行うこともできます。PID制御データKp、Ti、Tdを自動的に計算するオートチューニング機能もあります。
入力
開始条件
制御データ
PID制御パラメータ
演算結果出力値MV、追加制御モードエリア、オートチューニング関連エリア、ワークエリア
Runで指定した実行条件がTRUEになるとき、命令を最初に実行する場合、初期値がDUT要素1~9に書き込まれます。
測定値 (-30000–30000)
出力
PWM出力(オプション: 演算結果出力値MV)
F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_PID
PID制御命令に関する略号
略語 |
原語 |
意味 |
---|---|---|
PV |
測定値 | 実際の値、測定値 |
SP |
設定値 | 目標値、設定値 |
MV |
出力値 | 出力値、操作される変数 |
Ts |
サンプリング時間 | 周期時間 |
Ti |
積分時間 | - |
Td |
微分時間 | - |
Kp |
比例ゲイン | - |
AT |
オートチューニング | - |
FP_PIDの2回目の実行前に、DUTのDUT要素1~9を必要な値に変更する必要があります。
Runでの入力を実行したときに、引数ParametersNonHoldのデータは初期化されます。DUTの値に初期値以外の値を使用する必要がある場合は、MOVE命令を使って、DUTに値を書き込んでください(TRUE条件で連続してトリガされる必要がある場合など)。
F356_PID_PWM命令は、1スキャンに1回のみ実行するようにしてください。従って、割り込みプログラムやループ内では F356_PID_PWM 命令を実行しないでください。
PID制御中は、実行条件をFALSEに変更しないでください。PID演算ができなくなります。
複数の対象を制御するときなど、PWMの出力周期を同期させたくない場合は、タイマー命令などを利用して起動タイミングをずらしてください。
パルス出力の間隔(サイクル)は、サンプリング時間 Ts (パルス出力の周期は 1/Ts)です。デューティは MV で単位は0.01%です。例えば、MV = 10000 は、デューティ 100% を表します。
F356_Parameters_NonHold_DUTのいずれかのパラメータが指定できる範囲外のとき
F356_Parameters_NonHold_DUTのいずれかのパラメータが指定できる範囲外のとき
UpperLimitまたはLowerLimitの値が指定できる範囲外のとき
制御条件: F356_Parameters_Hold_DUT
設定値SPと制御パラメータ: F356_Parameters_Hold_DUT
オートチューニング時のご注意:
F356_Parameters_Hold_DUT内の要素AT_ProgressとF356_Control_DUT内の要素b1_AT_Completeは、オートチューニング信号の立ち上がりエッジでクリアされます。
オートチューニングが正常に完了すると、F356_Control_DUT内の要素b1_AT_Completeがセットされ、F356_Parameters_NonHold_DUT内の要素AT_Progressにオートチューニング完了コードが格納されます。
オートチューニングが中止されると、パラメータ Kp, Ti, Td の値は変化しません。
グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。
POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。 POUヘッダは全プログラム言語で使用できます。
_VAR
VAR
bStartAutoTuning: BOOL:=FALSE;
bRunPidControl: BOOL:=FALSE;
ControlData: F356_Control_DUT;
ParametersHold: F356_Parameters_Hold_DUT;
ParametersNonHold: F356_Parameters_NonHold_DUT;
END_VAR
BODY
WORKSPACE
NETWORK_LIST_TYPE := NWTYPELD ;
ACTIVE_NETWORK := 0 ;
END_WORKSPACE
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 5 ;
NETWORK_BODY
B(B_CONTACT,,bStartAutoTuning,5,1,7,3,R);
B(B_COIL,,ControlData.b0_AT_Request,22,1,24,3,);
L(1,2,5,2);
L(7,2,22,2);
L(1,0,1,5);
END_NETWORK_BODY
END_NET_WORK
NET_WORK
NETWORK_TYPE := NWTYPELD ;
NETWORK_LABEL := ;
NETWORK_TITLE := ;
NETWORK_HEIGHT := 7 ;
NETWORK_BODY
B(B_F,F356_PID_PWM!,Instance,11,0,22,7,,?DRun?DControl?DParametersHold?DParametersNonHold?DProcessValue?APWM_Output);
B(B_VARIN,,ControlData,9,2,11,4,);
B(B_VARIN,,ParametersHold,9,3,11,5,);
B(B_VARIN,,ParametersNonHold,9,4,11,6,);
B(B_VARIN,,x_iTemperatureInput,9,5,11,7,);
B(B_VAROUT,,y_bPwmOutput,22,1,24,3,);
B(B_CONTACT,,bRunPidControl,4,1,6,3,);
L(1,2,4,2);
L(6,2,11,2);
L(1,0,1,7);
END_NETWORK_BODY
END_NET_WORK
END_BODY
(* Auto Tuning: *)
if DF(bStartAutoTuning) then
ControlData.b0_AT_Request:=TRUE;
end_if;
y_bPwmOutput:=F356_PID_PWM( Run := bRunPidControl,
Control := ControlData,
ParametersHold := ParametersHold,
ParametersNonHold := ParametersNonHold,
ProcessValue := x_iTemperatureInput);