```pascal // 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 ```