1. Крайне желательно обрабатывать PID в отдельной программе с отдельной от всего остального кода выделенной задачей с высшим приоритетом (100мс например)
2. ASo верно сказал. Вы нигде не вызываете экземпляр. Математика блока может работать только если блок циклически вызывается. Пример вызова ниже.
PHP код:
IF MODE_GVS=1 THEN SP_TE3:=TE3_M; GVS_MAN:=TRUE; ELSE GVS_MAN:=FALSE; END_IF;(*Ðó÷íîé*)
IF MODE_GVS=2 THEN Y1_MANUAL:=Y1_M; END_IF;(*Àâòî*)
IF Y1_MANUAL<0 THEN Y1_MANUAL:=0; END_IF;IF Y1_MANUAL>100 THEN Y1_MANUAL:=100; END_IF;
PID_Y1(
ACTUAL:= TE3_M, (* actual value, process variable *)
SET_POINT:= SP_TE3,(* desired value, set point *)
KP:= Y1_P,(* proportionality const. (P)*)
TN:= Y1_I, (* reset time (I) in sec *)
TV:= Y1_D, (* rate time, derivative time (D) in sec*)
Y_MANUAL:=Y1_MANUAL , (* Y is set to this value as long as MANUAL=TRUE *)
Y_OFFSET:= 0.1, (* offset for manipulated variable *)
Y_MIN:= 0.0, (* minimum value for manipulated variable *)
Y_MAX:= 100.0, (* maximum value for manipulated variable *)
MANUAL:= GVS_MAN, (* TRUE: manual: Y is not influenced by controller,FALSE: controller determines Y *)
RESET:= GVS_RESET, (* reset: set Y output to Y_OFFSET and reset integral part *)
Y=> Y1_M, (* manipulated variable, set value*)
LIMITS_ACTIVE=> Y1_LA,(* true set value would exceed limits Y_MIN, Y_MAX *)
OVERFLOW=> Y1_OW);(* overflow in integral part *)