код программы
PHP код:
PROGRAM PLC_PRG
VAR
(*configuration panel*)
set_point_from_panel_1 AT %QD9.6.0 : REAL;
set_point_from_panel_2 AT %QD9.7.0 : REAL;
FIT_VR_value_1 AT %QD9.19.0:REAL;
FIT_VR_value_2 AT %QD9.20.0:REAL; (*ðåàëüíîå çíà÷åíèå ðàñõîäà*)
button_for_sp AT %QX9.1.0.6: BOOL;
hi_limit_error AT %QX9.2.0.4: BOOL;
PID_manual AT %QX9.3.0.0: BOOL; (*ðó÷íîé ðåæèì ðåãóëÿòîðà*)
alarm AT %QX9.3.0.1: BOOL;
status_system AT %QX9.3.0.2: BOOL;
simulation AT %QX9.3.0.3: BOOL;
level_lall AT %QX9.3.0.4: BOOL;
level_lal AT %QX9.3.0.5: BOOL;
level_lah AT %QX9.3.0.6: BOOL;
level_lahh AT %QX9.3.0.7: BOOL;
battery_low AT %QX9.4.0.2: BOOL;
emergency_system AT %QX9.4.0.3: BOOL;
temp_plc150_owen AT %QD9.23.0 : REAL;
time_accum AT %QW9.24.0: WORD;
(*configuration panel*)
P1_PID:PID;
P2_PID:PID;
kP : REAL;
kI : REAL;
kD : REAL;
(* AT %QX9.17.0.7: BOOL; (*ðó÷íîé ðåæèì ðåãóëÿòîðà*)*)
sp_flow1_for_PID: REAL; (*óñòàâêà íà ã/ë*)
sp_flow2_for_PID: REAL; (*óñòàâêà íà ã/ë*)
unit_1: REAL;
unit_2: REAL;
block_system: BOOL;
regulation: BOOL;
END_VAR
VAR_INPUT
P1_Flow_SP:REAL;
P2_Flow_SP:REAL;
(*configuration panel*)
k_P AT %QD9.12.0:REAL;
k_I AT %QD9.13.0:REAL;
k_D AT %QD9.14.0:REAL;
KH2SO4 AT %QD9.15.0:REAL; (*êîýôôèöåíò ïëîòíîñòè êèñëîòû*)
FIT_acida_PID AT %QD9.17.0:REAL;
FIT_acidb_PID AT %QD9.18.0:REAL;
(*configuration panel*)
(*discret input PLC*)
start_system AT %IX0.0: BOOL;
stop_system AT %IX0.1: BOOL;
manual_system AT %IX0.2: BOOL;
auto_system AT %IX0.3: BOOL;
emergency_stop AT %IX0.4: BOOL;
(*discret input PLC*)
FIT_1 AT %ID10.2.0.0: REAL;
FIT_2 AT %ID10.2.1.0: REAL;
timer_turn: BOOL;
PV_FI_1_panel: REAL; (*çíà÷åíèå òåêóùåãî ðàñõîäà êèñëîòû*)
PV_FI_2_panel: REAL; (*çíà÷åíèå òåêóùåãî ðàñõîäà êèñëîòû*)
FIT_VR_1 AT %ID10.2.2.0:REAL; (*ðàñõîä ÂÐ*)
FIT_VR_2 AT %ID10.2.3.0:REAL; (*ðàñõîä ÂÐ*)
END_VAR
VAR_OUTPUT
(*configuration panel*)
fithics_vallue_Hz_1 AT %QD9.8.0:REAL;
fithics_vallue_Hz_2 AT %QD9.9.0:REAL;
(*configuration panel*)
(*discret output PLC*)
status_system_start_stop AT %QX1.1: BOOL;
alarm_system AT %QX1.2: BOOL;
(*discret output PLC*)
P_01 AT %QD7.0: REAL;
P_02 AT %QD8.0: REAL;
statistic_power AT %IW11.1: WORD;
Temp_inside_PLC AT %ID11.2: REAL;
END_VAR
VAR_INPUT RETAIN
(*configuration panel*)
HI_LIM AT %QD9.16.0: REAL; (*âåðõíèé ïðèäåë øêàëû äëÿ ðàñõîäåìåðà êèñëîòû*)
HI_LIM_VR AT %QD9.21.0:REAL;(*LO_LIM AT %QD9.10.0: REAL;*) (*íèæíèé ïðèäåë øêàëû ðàñõîäåìåðà*)
(*configuration panel*)
END_VAR
PHP код:
(*ìàñøòàáèðîâàíèå àíàëîãîâûõ ñèãíàëîâ m3/h*)
scale_1(
IN:=FIT_1 , (*ðàñõîä êèñëîòû*)
IN_MIN:= 0.0,
IN_MAX:= 100,
OUT_MIN:= 0,
OUT_MAX:= HI_LIM, (*HI_LIM*)
OUT=>FIT_acida_PID ,
ERROR=>error_fit1 );(**)
IF error_fit1 THEN(*îáíóëåíèå ñèãíàëà ïðè àâòî ðåæèìå. Åñëè îòñóòñòâóåò ñèãíàë ðàñõîäà êèñëîòû, òî íàñîñû íå áóäåò ðàáîòàòü*)
FIT_acida_PID:=0.0;
END_IF;
scale_3(
IN:= FIT_VR_1, (*ðàñõîä ÂÐ*)
IN_MIN:= 0.0,
IN_MAX:= 100.1,
OUT_MIN:= 0,
OUT_MAX:= HI_LIM_VR, (*HI_LIM_VR*)
OUT=> FIT_VR_value_1,
ERROR=> error_fi_vr1);(**)
IF error_fi_vr1 THEN
FIT_VR_value_1:=0.0;
END_IF;
IF HI_LIM=0.0 OR HI_LIM_VR=0.0(*ïàðàìåòðèðîâàíèå â ïàíåëè ìàêñ. çíà÷åíèå ðàñõîäîâ*)
THEN
hi_limit_error:=TRUE;
ELSE
hi_limit_error:=FALSE;
END_IF;
IF button_for_sp THEN (*ïåðåêëþ÷åíèå ïî ðåæèìàì ðåãóëèðîâàíèÿ*)
P1_Flow_SP:=sp_flow1_for_PID;
P2_Flow_SP:=sp_flow2_for_PID;
ELSE
(*óñòàâêà äëÿ ðåãóëèðîâàíèå*)
P1_Flow_SP:= FIT_VR_value_1*sp_flow1_for_PID/(0.925*koef); (*ôîðìóëà äëÿ âû÷åñëåíèÿ ðàñõîäà êèñëîòû ë/÷*)
P2_Flow_SP:= FIT_VR_value_2*sp_flow2_for_PID/(0.925*koef); (*óñòàâêà äëÿ ðåãóëèðîâàíèå*)
END_IF;
(*ïåðåìåííûå äëÿ íàñîñîâ+ðåãó*)
P1_01:=P_01;
P2_02:=P_02;
(*ÏÈÄ-ðåãóëèðîâàíèÿ äëÿ íàñîñà P1*)
P1_PID(
ACTUAL:= FIT_acida_PID, (*__FIT_acida_PID,--->íàäî çàìåíèòü ïîñëå ñèìóëÿöèè*)
SET_POINT:= P1_Flow_SP,
KP:= P1_P_SP,
TN:= P1_I_SP,
TV:= P1_D_SP,
Y_MANUAL:=P1_Man_Spd_SP,
Y_OFFSET:= 0.0,
Y_MIN:=0.0,
Y_MAX:= 10.0,
MANUAL:=PID_manual,
RESET:= ,
Y=> P_01,
LIMITS_ACTIVE=> ,
OVERFLOW=> );
(*ÏÈÄ-ðåãóëèðîâàíèÿ äëÿ íàñîñà P2*)
P2_PID(
ACTUAL:= FIT_acidb_PID,
SET_POINT:= P2_Flow_SP,
KP:= P1_P_SP,
TN:= P1_I_SP,
TV:= P1_D_SP,
Y_MANUAL:=P2_Man_Spd_SP,
Y_OFFSET:=0.0 ,
Y_MIN:=0.0,
Y_MAX:= 10.0,
MANUAL:=PID_manual,
RESET:= ,
Y=> P_02,
LIMITS_ACTIVE=> ,
OVERFLOW=> );
pid1.jpg
pid2.jpg