12 KiB
12 KiB
// Block Type: FB
// Block Number: 1791
// Original Network Languages: STL, LAD
FUNCTION_BLOCK "PID_Filling_Head"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_INOUT
TNKLev : Real;
END_VAR
VAR_STAT
mFillerProdSlew : Real;
mPIDFillHeadProp : Real;
mPIDFillHeadInt : Real;
mPIDFillHeadDer : Real;
mFillerEstSlew : "SlewLimit";
mFillingHead_PID : "PIDControl";
Calcolous : "PID_Filling_Head_Calc";
mReset_Int_ONS : Bool;
END_VAR
VAR_TEMP
mDummy : Bool;
mAuxCalc : Real;
mHr_Hs : Real;
Block_Move_Err : Int;
__PlcmigTempFillBits_12B0 : Array[0..7] of Bool;
END_VAR
BEGIN
// Network 1: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."ConfigPID" := "HMI_PID"."PPM303"."ConfigPID";
// Network 2: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Hold_Int" := "HMI_PID"."PPM303"."Hold_Int";
// Network 3: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."I_ITL" := "HMI_PID"."PPM303"."I_ITL";
// Network 4: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Alarm" := "HMI_PID"."PPM303"."Alarm";
// Network 5: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Config" := "HMI_PID"."PPM303"."Config";
// Network 6: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."High_Limit" := "HMI_PID"."PPM303"."High_Limit";
// Network 7: To HMI (0: PID 1: fixed values) (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Low_Limit" := "HMI_PID"."PPM303"."Low_Limit";
// Network 8: From HMI - Local (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."ManualControl"."LocalSP" := "HMI_PID"."PPM303"."ManualControl"."LocalSP";
// Network 9: BP (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Bp" := "HMI_PID"."PPM303"."Bp";
// Network 10: Integral (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Ti" := "HMI_PID"."PPM303"."Ti";
// Network 11: Differential (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Td" := "HMI_PID"."PPM303"."Td";
// Network 12: Feed Forward (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Ff" := "HMI_PID"."PPM303"."Ff";
// Network 13: Proportional (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."KP" := "HMI_PID"."PPM303"."KP";
// Network 14: PV (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Pv" := "HMI_PID"."PPM303"."Pv";
// Network 15: Limit (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."OutMaxHmi" := "HMI_PID"."PPM303"."OutMaxHmi";
// Network 16: Limit (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Lsp" := "HMI_PID"."PPM303"."Lsp";
// Network 17: Cycle Time (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Cycle_Time" := "HMI_PID"."PPM303"."Cycle_Time";
// Network 18: Integral (Original Language: LAD)
IF "gIN_FillerBottleFilling" THEN
"Filler_Head_Variables"."FillerHead"."I_ITLVAL" := "HMI_PID"."PPM303"."I_ITLVAL";
END_IF;
// Network 19: Dead band (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Dead_Band" := "HMI_PID"."PPM303"."Dead_Band";
// Network 20: Fillig Head Calculation (Original Language: LAD)
"Calcolous"();
// Network 21: Estimated Product Flow in l/min (Original Language: LAD)
TankLevelToHeight(Level_Height0 := "HMI_Blender_Parameters"."ProcessSetup"."_TM301Height_0", Level_Height1 := "HMI_Blender_Parameters"."ProcessSetup"."_TM301Height_2", Level_Perc0 := 0.0, Level_Perc1 := "HMI_Blender_Parameters"."ProcessSetup"."_TM301LevelPerc_2", Level_Percentage := "HMI_Instrument"."LTM302"."PVFiltered");
"Filler_Head_Variables"."TM301_Height" := "HMI_Variables_Status"."Analog_Values"."TM301Heigh";
FillingTime(i_BottleSize := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_BottleSize", i_FillingValveHead := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_FillingValveHead_SP");
"HMI_Blender_Parameters"."ProcessSetup"."_FillingTime" := "Filler_Head_Variables"."FillingTime";
"mDummy" := TRUE;
// Network 22: Estimated Product Flow in l/min (Original Language: LAD)
"mAuxCalc" := "Filler_Head_Variables"."Filler_Speed" / 60.0;
"Filler_Head_Variables"."Prod_FlowEstimated" := "mAuxCalc" * "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_BottleSize";
// Network 23: Estimated Product Flow in l/min (Original Language: LAD)
SEL_R(G := "Filler_Head_Variables"."FillingTime" > 0.0, IN0 := 1.0, IN1 := "Filler_Head_Variables"."FillingTime");
"mAuxCalc" := "Filler_Head_Variables"."Prod_FlowEstimated" / "mAuxCalc";
SEL_R(G := "Filler_Head_Variables"."Filler_Speed" > 0.0, IN0 := "mFillerProdSlew", IN1 := "mAuxCalc");
// Network 24: Estimated Product Flow in l/min (Original Language: LAD)
SEL_R(G := "gIN_FillerBottleFilling", IN0 := 0.0, IN1 := "Filler_Head_Variables"."Prod_FlowEstimated");
LIMIT_R(IN := "mFillerProdSlew", MN := 0.5, MX := 100000.0);
"mFillerEstSlew"(i_Cycle := "HMI_PID"."PPM303"."Cycle_Time", i_InValue := "Filler_Head_Variables"."Prod_FlowEstimated", i_SlewMax := "mFillerProdSlew", out := "Filler_Head_Variables"."Prod_FlowEstimatedSlw");
// Network 25: 1 = CIP or Rinse (Original Language: LAD)
"Filler_Head_Variables"."Head_CIP_Rinse" := "gBlenderCIPMode" OR ("gBlenderRinseMode" AND "Blender_Variables_Pers"."gFillerRinse_DoneLatch");
// Network 26: From HMI (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."ManualControl"."ManOut" := "HMI_PID"."PPM303"."ManualControl"."ManOut" OR "Filler_Head_Variables"."Head_Drain";
// Network 27: Out min (Original Language: LAD)
Freq_To_mmH2O(i_Freq := "HMI_PID"."PPM303"."OutMin", i_K_freq := "HMI_Blender_Parameters"."ProcessSetup"."_KPPM303");
// Network 28: Out Max (Original Language: LAD)
SEL_R(G := "Filler_Head_Variables"."FillerHead"."ManualControl"."ManOut", IN0 := "Filler_Head_Variables"."Prod_HeadPIDMax_Freq", IN1 := "HMI_PID"."PPM303"."OutMax");
Freq_To_mmH2O(i_Freq := "mAuxCalc", i_K_freq := "HMI_Blender_Parameters"."ProcessSetup"."_KPPM303");
// Network 29: 1 = Enable Filling Valve Head PID (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."ManualControl"."PidEnable" := "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" AND (("Filler_Head_Variables"."Head_CIP_Rinse" AND "Procedure_Variables"."Blender_Run"."Latch") OR ("gIN_Filler_AVM346_En" AND "HMI_Device"."AVM346"."Alarm" AND "gIN_Filler_AVM362_En" AND "HMI_Device"."AVM362"."Alarm" AND "gDiffSensor_Analog_Fault" AND ("gP_PID_Head_Enable" OR ("System_RunOut_Variables"."ProdPipe_RunOut"."Done" AND "Procedure_Variables"."BlendFill_StartUp"."Done"))));
"HMI_PID"."PPM303"."ManualControl"."PidEnable" := "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" AND (("Filler_Head_Variables"."Head_CIP_Rinse" AND "Procedure_Variables"."Blender_Run"."Latch") OR ("gIN_Filler_AVM346_En" AND "HMI_Device"."AVM346"."Alarm" AND "gIN_Filler_AVM362_En" AND "HMI_Device"."AVM362"."Alarm" AND "gDiffSensor_Analog_Fault" AND ("gP_PID_Head_Enable" OR ("System_RunOut_Variables"."ProdPipe_RunOut"."Done" AND "Procedure_Variables"."BlendFill_StartUp"."Done"))));
// Network 30: Integral PID Hold (Original Language: LAD)
"Filler_Head_Variables"."FillerHead"."Hold_Int" := "Filler_Head_Variables"."FillerHead"."ManualControl"."PidEnable" OR "Procedure_Variables"."BlendFill_StartUp"."Latch";
// Network 31: Integral PID Inizilize (Original Language: STL)
// #mReset_Int_ONS
// --- BEGIN STL Network 31 ---
A_BRACK
O "Filler_Head_Variables".FillerHead.ManualControl.ManOut
O "Filler_Head_Variables".Head_CIP_Rinse
ON "gIN_FillerBottleFilling"
BRACKET
Rise "FillingHeadIntegrInit"
= "__PlcmigTempFillBits_12B0"[0]
A "__PlcmigTempFillBits_12B0"[0]
JC ZERO
JU NORM
ZERO: L 0.0
T "Filler_Head_Variables".FillerHead.I_ITLVAL
NORM: NOP_0
// --- END STL Network 31 ---
// Network 32: Centrifugal Head (Original Language: LAD)
Cetrifugal_Head(i_Diameter := "HMI_Blender_Parameters"."ProcessSetup"."_FillerDiameter", i_NumValve := "HMI_Blender_Parameters"."ProcessSetup"."_FillingValveNum", i_Speed := "Filler_Head_Variables"."Filler_Speed");
// Network 33: Estimated Product Flow in l/min (Original Language: LAD)
"mAuxCalc" := "Filler_Head_Variables"."Prod_Flow";
LIMIT_R(IN := "mAuxCalc", MN := 10.0, MX := 4000.0);
Flow_To_Press_Loss(i_Flow := "mAuxCalc", i_K_Loss := "Filler_Head_Variables"."mKp_Loss");
// Network 34: FILLING HEAD SETPOINT SELECTION (Original Language: LAD)
// during the startup use fixed Filling head = 2,5 M
SEL_R(G := "Procedure_Variables"."BlendFill_StartUp"."Latch", IN0 := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_FillingValveHead_SP", IN1 := 2.5);
"Filler_Head_Variables"."FillerHead"."Sp" := "mAuxCalc";
"HMI_PID"."PPM303"."Sp" := "mAuxCalc";
// Network 35: FEEDFORWARD CALCULATION (Original Language: LAD)
"mAuxCalc" := "mAuxCalc" + "HMI_Blender_Parameters"."ProcessSetup"."_FillingValveHeight";
"mAuxCalc" := "mAuxCalc" - "Filler_Head_Variables"."TM301_Height";
"mAuxCalc" := "Filler_Head_Variables"."TotalPressLoss" + "mAuxCalc";
LIMIT_R(IN := "mAuxCalc", MN := 0.0, MX := "Filler_Head_Variables"."FillerHead"."OutMax");
// Network 36: Feed Forward Out (Original Language: LAD)
mmH2O_TO_Freq(i_Head := "Filler_Head_Variables"."FillerHead"."FfOut", i_K_Pump := "HMI_Blender_Parameters"."ProcessSetup"."_KPPM303");
// Network 37: Diff Height (Original Language: LAD)
"mAuxCalc" := "HMI_Blender_Parameters"."ProcessSetup"."_DiffSensor_Height" + "HMI_Blender_Parameters"."ProcessSetup"."_DiffSensor_DeltaHeight";
"Filler_Head_Variables"."DiffSensor_Height" := "mAuxCalc" - "HMI_Blender_Parameters"."ProcessSetup"."_DiffSensor_Offset";
// Network 38: PV (Original Language: LAD)
"mHr_Hs" := "HMI_Blender_Parameters"."ProcessSetup"."_FillingValveHeight" - "Filler_Head_Variables"."DiffSensor_Height";
"mAuxCalc" := "HMI_Instrument"."PTF203"."PVFiltered" + "Filler_Head_Variables"."FillerCentrifugalHead";
"Filler_Head_Variables"."FillerHead"."Pv" := "mAuxCalc" - "mHr_Hs";
"HMI_PID"."PPM303"."Pv" := "Filler_Head_Variables"."FillerHead"."Pv";
// Network 39: Out Manual (Original Language: LAD)
Freq_To_mmH2O(i_Freq := "HMI_PID"."PPM303"."OutMan", i_K_freq := "HMI_Blender_Parameters"."ProcessSetup"."_KPPM303");
// Network 40: PID Control (Original Language: LAD)
"mFillingHead_PID"(D_Sel := "AUX TRUE", FF_Enable := "AUX TRUE", I_Sel := "AUX TRUE", LMN_FAC := 1.0, LMN_OFF := 0.0, MAN_ON := "Filler_Head_Variables"."FillerHead"."ManualControl"."ManOut", PID_Data := "Filler_Head_Variables"."FillerHead", PID_Enable := "Filler_Head_Variables"."FillerHead"."ManualControl"."PidEnable" OR "Filler_Head_Variables"."FillerHead"."I_ITL", P_Sel := "AUX TRUE", REG_INV := "AUX FALSE");
// Network 41: Integral PID Inizilize (Original Language: LAD)
IF "Filler_Head_Variables"."FillerHead"."I_ITL" THEN
"Filler_Head_Variables"."FillerHead"."I_ITL" := FALSE;
END_IF;
// Network 42: Valve Output (Original Language: LAD)
SEL_R(G := "Filler_Head_Variables"."FillerHead"."ManualControl"."PidEnable", IN0 := 0.0, IN1 := "Filler_Head_Variables"."FillerHead"."Out");
mmH2O_TO_Freq(i_Head := "Filler_Head_Variables"."FillerHead"."Out", i_K_Pump := "HMI_Blender_Parameters"."ProcessSetup"."_KPPM303");
// Network 43: Setpoint (Original Language: LAD)
"HMI_PID"."PPM303"."Sp" := "Filler_Head_Variables"."FillerHead"."Sp";
END_FUNCTION_BLOCK