F355_PID_DUT

PID演算命令

PID演算命令は、与えられた測定値(温度など)とあらかじめ与えられた出力値(20°Cなど)から、プロセス(ヒータなど)を調整する制御に使用します。

パラメータ

入力

s (PID_DUT_31)

パラメータの詳細については、PID_DUT_31の項をご参照ください。

解説

  • F命令を使用する代わりに、対応するFP7命令を使用することをおすすめします。FP_PID_BASIC

  • この命令は、30個の要素を持つARRAY型の変数sに入力されたデータテーブルに設定されたパラメータに従って、PIDアルゴリズムを演算します。

エラーフラグ

sys_bIsOperationErrorHold (TRUEになり、TRUEを保持)

パラメータ設定値が指定できる範囲外のとき

sys_bIsOperationErrorNonHold (1回のスキャンに対してTRUE)

パラメータ設定値が指定できる範囲外のとき

グローバル変数リスト

グローバル変数リストでは、プロジェクト内のすべてのPOUからアクセスできる変数を宣言します。

POUヘッダ

POUヘッダには、このプログラムで使用するすべての入力変数と出力変数を宣言します。POUヘッダは全プログラム言語で使用できます。

	VAR_EXTERNAL
		EnableAutoTuning: BOOL:=FALSE;
			(*Switch Auto Tuning On *)
		Set_Value_SP: WORD:=0;
			(*A/D CH0*)
		Process_Value_PV: WORD:=0;
			(*A/D CH1*)
		Output_Value_MV: WORD:=0;
			(*D/A*)
	END_VAR
	VAR 
		PidParameters: PID_DUT_31;
			(*PID Parameters*)
	END_VAR

データ型PID_DUT_31の変数PidParametersの初期化で、MVの上限値が4000に設定されます。比例ゲインKp80 (8)、TiTd200 (20s)、サンプリング時間Ts100 (1s)に設定されています。

POUボディ

実行条件EnableAutoTuningFALSEからTRUEになると(F355_PID_DUT命令の制御モードオートチューニングがアクティブになると)、MOVE命令によって、値16#8000がDUT PidParametersControlの要素にコピーされます。

また、変数Set_Value_SPProcess_Value_PVの値が、DUT PidParametersSPPVの要素に割り付けられます。これらの値は、A/D変換部のチャンネル0、チャンネル1から取得されます。

F355_PID_DUTファンクションブロックのEN出力は、母線に直接接続されているので、このファンクションは、PLCがRUNモードのとき実行されます。"DUT PidParameters"の要素"MV"にあるコントローラの演算出力値を、変数Output_Value_MVに格納します。この値は、PLCからD/A変換部を経由し出力されます。

LDボディ

BODY
    WORKSPACE
        NETWORK_LIST_TYPE := NWTYPELD ;
        ACTIVE_NETWORK := 0 ;
    END_WORKSPACE
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 6 ;
        NETWORK_BODY
B(B_F,E_MOVE,,10,2,17,6,,?DEN?Da_Num?AENO?C);
B(B_VAROUT,,PidParameters.Control,17,4,19,6,);
B(B_VARIN,,16#8000,8,4,10,6,);
B(B_CONTACT,,EnableAutoTuning,5,3,7,5,R);
B(B_COMMENT,,Enable Auto Tuning,2,1,12,2,);
L(1,4,5,4);
L(7,4,10,4);
L(1,0,1,6);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_VARIN,,Set_Value_SP,9,2,11,4,);
B(B_VAROUT,,PidParameters.SP,11,2,13,4,);
B(B_COMMENT,,Fill the DUT PID_DUT_31 with the corresponding values,2,1,24,2,);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 2 ;
        NETWORK_BODY
B(B_VARIN,,Process_Value_PV,9,0,11,2,);
B(B_VAROUT,,PidParameters.PV,11,0,13,2,);
L(1,0,1,2);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 7 ;
        NETWORK_BODY
B(B_VARIN,,PidParameters,8,5,10,7,);
B(B_F,F355_PID_DUT!,Instance,10,3,18,7,,?DEN?D@'s'?AENO);
B(B_COMMENT,,Carry out the PID arithmetic,2,1,21,2,);
L(1,5,10,5);
L(1,0,1,7);
        END_NETWORK_BODY
    END_NET_WORK
    NET_WORK
        NETWORK_TYPE := NWTYPELD ;
        NETWORK_LABEL :=  ;
        NETWORK_TITLE :=  ;
        NETWORK_HEIGHT := 4 ;
        NETWORK_BODY
B(B_VARIN,,PidParameters.MV,9,2,11,4,);
B(B_VAROUT,,Output_Value_MV,11,2,13,4,);
B(B_COMMENT,,Write manipulated value to the output,2,1,21,2,);
L(1,0,1,4);
        END_NETWORK_BODY
    END_NET_WORK
END_BODY

STボディ

(* Auto Tuning: *)
if DF(EnableAutoTuning) then
    PidParameters.Control:=16#8000;
end_if;
(* Fill the DUT PidParameters with the corresponding input values: *)
PidParameters.SP:=Set_Value_SP;
PidParameters.PV:=Process_Value_PV;
(* Carry out the PID arithmetic: *)
F355_PID_DUT(PidParameters);
(* Write the manipulated value to the output: *)
Output_Value_MV:=PidParameters.MV;

ILボディ

最終修正日: 2019-08-03このページに関するフィードバックお問い合わせ窓口