7.2 KiB
7.2 KiB
// Block Type: FC
// Block Number: 2010
// Original Network Languages: LAD
FUNCTION "SelCheckBrixSource" : Void
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_TEMP
m_mPDS1000Selector : Bool;
mBrix_mPDS1000Selector : Bool;
mDens_mPDS1000Selector : Bool;
mSyrBrixOutSpec : Bool;
SyrFactor : Real;
SyrMFMFactor : Real;
gMeterSyr : Real;
gMFMSyr : Real;
Brix : Real;
SyrBrix : Real;
SyrBrix_SUB : Real;
SyrBrix_ABS : Real;
Water_Density : Real;
Water_Density_ADD : Real;
mDummy : Bool;
END_VAR
#_4S : Bool; // Auto-generated temporary
BEGIN
// Network 1: HMI Blender Parameters (Original Language: LAD)
"m_mPDS1000Selector" := "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "HMI_Variables_Status"."Meters"."QTM3012_SYR_Fault" AND "Procedure_Variables"."Syr_RunOut"."Latch" AND "Procedure_Variables"."First_Production"."Latch";
// Network 2: Meter Syrup Temperature (Original Language: LAD)
SEL_R(G := "m_mPDS1000Selector", IN0 := "Profibus_Variables"."gFTP302_Temp", IN1 := "mPDS_SYR_PA_Data"."Input_From_mPDS1000"."SyrTemp");
// Network 3: Meter Syrup Brix (Original Language: LAD)
SEL_R(G := "m_mPDS1000Selector", IN0 := "Profibus_Variables"."gFTP302_Brix", IN1 := "mPDS_SYR_PA_Data"."Input_From_mPDS1000"."SyrBrix");
// Network 4: Meter Syrup Brix (Original Language: LAD)
LIMIT_R(IN := "Blender_Variables"."gMeterSyrBrix", MN := 5.0, MX := 100.0);
// Network 5: Meter Syrup Brix (Original Language: LAD)
SEL_R(G := "gWorkshopTest", IN0 := "Blender_Variables"."gMeterSyrBrix", IN1 := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupBrix");
// Network 6: Meter Syrup Density (Original Language: LAD)
SEL_R(G := "m_mPDS1000Selector", IN0 := "Profibus_Variables"."gFTP302_Density", IN1 := "mPDS_SYR_PA_Data"."Input_From_mPDS1000"."SyrDens");
// Network 7: Meter Syrup Density (Original Language: LAD)
SEL_R(G := "gWorkshopTest" AND "gWorkshop_Syrup_Test", IN0 := "Blender_Variables"."gMeterSyrDens", IN1 := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupDensity");
// Network 8: Meter Syrup Density (Original Language: LAD)
LIMIT_R(IN := "Blender_Variables"."gMeterSyrDens", MN := 0.8, MX := 1.9);
// Network 9: Syrup Brix Ok (Original Language: LAD)
"gPV_SyrBrixOk" := "Blender_Variables"."gMeterSyrBrix" > 5.0;
// Network 10: Syrup Density value not zero (Original Language: LAD)
WaterDensity(i_Temperature := "HMI_Instrument"."FTP302_Temperature"."PVFiltered");
"Water_Density_ADD" := "Water_Density" + "Blender_Constants"."gGoodSyrupDensOffset";
"gPV_SyrDensOk" := ("gWorkshopTest" AND "gWorkshop_Syrup_Test") OR ("Blender_Variables"."gMeterSyrDens" > "Water_Density_ADD");
// Network 11: SelCheckBrixSource (Original Language: LAD)
"mSyrDensDelayAlrm"(IN := "Blender_Variables_Pers"."gSugarBeverage" AND "gPV_SyrDensOk" AND "Procedure_Variables"."Syr_RunOut"."Done" AND "Procedure_Variables"."FTP302Line_Preparation"."Done", PT := S5T#4S); // TODO: Declarar "mSyrDensDelayAlrm" : TON;
"gSyrupDensOutSpec_Fault" := "mSyrDensDelayAlrm".Q;
// Network 12: Syrup Factor (Original Language: LAD)
IF Eq("HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupFactor", 0.0) THEN
"HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupFactor" := 1.0;
END_IF;
// Network 13: Brix (Original Language: LAD)
IF NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" OR (NOT "Procedure_Variables"."SyrAuto_Corr"."Latch" AND NOT "Procedure_Variables"."Syr_RunOut"."Latch") THEN
"SyrFactor" := "Blender_Variables"."gProdRunSyrFact" * "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupFactor";
END_IF;
IF NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" OR (NOT "Procedure_Variables"."SyrAuto_Corr"."Latch" AND NOT "Procedure_Variables"."Syr_RunOut"."Latch") THEN
"gMeterSyr" := "SyrFactor" * "Blender_Variables"."gMeterSyrBrix";
END_IF;
IF NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" OR (NOT "Procedure_Variables"."SyrAuto_Corr"."Latch" AND NOT "Procedure_Variables"."Syr_RunOut"."Latch") THEN
"Brix" := "gMeterSyr";
END_IF;
IF ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "Procedure_Variables"."SyrAuto_Corr"."Latch") OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "Procedure_Variables"."Syr_RunOut"."Latch") THEN
"SyrMFMFactor" := "Blender_Variables"."gProdRunSyrMFMFact" * "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupFactor";
END_IF;
IF ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "Procedure_Variables"."SyrAuto_Corr"."Latch") OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "Procedure_Variables"."Syr_RunOut"."Latch") THEN
"gMFMSyr" := "SyrMFMFactor" * "Profibus_Variables"."gFTP302_Brix";
END_IF;
IF ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "Procedure_Variables"."SyrAuto_Corr"."Latch") OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrBrixMeter" AND "Procedure_Variables"."Syr_RunOut"."Latch") THEN
"Brix" := "gMFMSyr";
END_IF;
IF "Procedure_Variables"."SyrAuto_Corr"."Latch" AND "gPV_SyrBrixOk" THEN
"Blender_Variables"."gActualSyrupBrix" := "Brix";
END_IF;
IF NOT "Procedure_Variables"."SyrAuto_Corr"."Latch" OR NOT "gPV_SyrBrixOk" THEN
"Blender_Variables"."gActualSyrupBrix" := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupBrix";
END_IF;
"mDummy" := TRUE;
// Network 14: Actual Brix (Original Language: LAD)
LIMIT_R(IN := "Blender_Variables"."gActualSyrupBrix", MN := 5.0, MX := 100.0);
// Network 15: Latch (Original Language: LAD)
"mDummy" := ("Procedure_Variables"."SyrAuto_Corr"."Latch" AND "gPV_SyrDensOk") OR ("Procedure_Variables"."First_Production"."Latch" AND "gPV_SyrDensOk");
// Network 16: Actual Density (Original Language: LAD)
SEL_R(G := "mDummy", IN0 := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupDensity", IN1 := "Blender_Variables"."gMeterSyrDens");
// Network 17: Brix Out Spec (Original Language: LAD)
IF "gBlenderStableFlow" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Simulation" AND "Procedure_Variables"."SyrAuto_Corr"."Running" AND "Blender_Variables_Pers"."gSugarBeverage" THEN
"SyrBrix" := "Blender_Variables"."gMeterSyrBrix" * "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupFactor";
END_IF;
IF "gBlenderStableFlow" AND "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_Simulation" AND "Procedure_Variables"."SyrAuto_Corr"."Running" AND "Blender_Variables_Pers"."gSugarBeverage" THEN
"SyrBrix_SUB" := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupBrix" - "SyrBrix";
END_IF;
// Network 18: Brix Out Spec Alarm (Original Language: LAD)
"mSyrBxDelayAlrm"(IN := "mSyrBrixOutSpec" AND "Procedure_Variables"."First_Production"."Done", PT := S5T#4S); // TODO: Declarar "mSyrBxDelayAlrm" : TON;
"gSyrBrixOutSpec_Fault" := "mSyrBxDelayAlrm".Q;
// Network 19: Slope (Original Language: LAD)
"Sel_Check_Brix_Data"(i_Cycle := "Time_250ms", i_Enable := "AUX TRUE", i_Num := 8, i_Value := "Profibus_Variables"."gFTP302_Brix");
END_FUNCTION