```pascal // Block Type: FC // Block Number: 2011 // Original Network Languages: LAD, STL FUNCTION "TankLevel" : Void { S7_Optimized_Access := 'TRUE' } VERSION : 0.1 VAR_TEMP Blending : Bool; Lvl_1 : Real; CIP_TankLvl : Real; Min_Lvl : Real; Wait_Lvl : Real; Min_SP_Lvl : Real; Target_Lvl : Real; mSyrTankFlooded : Bool; mSyrTankLowLvl_Fault : Bool; mDeairTankFlooded : Bool; mSyrTankEmpty : Bool; END_VAR #_1m : Bool; // Auto-generated temporary #_2S : Bool; // Auto-generated temporary #_3S : Bool; // Auto-generated temporary #_4S : Bool; // Auto-generated temporary BEGIN // Network 1: DeairTankLoadDelay (Original Language: LAD) "mDeairTank_LoadDelay"(IN := ("gDeairTank_LowLvl_Fault" AND "gIN_ResetBtn" AND "gP_RVN301") OR ("gDeairTank_LowLvl_Fault" AND "gIN_ResetBtn" AND "gP_RVN301_1") OR ("HMI_Alarms"."Supplies"."Alarm062" AND "gIN_ResetBtn" AND "gP_RVN301") OR ("HMI_Alarms"."Supplies"."Alarm062" AND "gIN_ResetBtn" AND "gP_RVN301_1"), PT := S5T#4S); // TODO: Declarar "mDeairTank_LoadDelay" : TP; "gDeairTank_Loading" := "mDeairTank_LoadDelay".Q; // Network 2: DeairLevFault (Original Language: STL) // --- BEGIN STL Network 2 --- O_BRACK A_BRACK AN "HMI_Digital".LSN301L.Filtered A "HMI_Device".RVN301.Out O AN "HMI_Digital".LSN302L.Filtered A "HMI_Device".RVN301_1.Out A "HMI_Blender_Parameters".Processor_Options.Blender_OPT._DoubleDeair O A "HMI_Instrument".LTN301.Config AN "gIN_DeairTank_MinLvl" BRACKET AN "Procedure_Variables".TN301_StartUp.Done A "gBlenderProdMode" L S5T#1M OnDelay "mDeairTank_LevFault" NOP_0 NOP_0 NOP_0 A "mDeairTank_LevFault" BRACKET O_BRACK A_BRACK AN "HMI_Digital".LSN301L.Filtered A "HMI_Device".RVN301.Out O AN "HMI_Digital".LSN302L.Filtered A "HMI_Device".RVN301_1.Out A "HMI_Blender_Parameters".Processor_Options.Blender_OPT._DoubleDeair O A "HMI_Instrument".LTN301.Config AN "gIN_DeairTank_MinLvl" BRACKET A "Procedure_Variables".TN301_StartUp.Done AN "gDeairTank_Loading" A "gBlenderProdMode" = "Blending" A "Blending" L S5T#5S OnDelay "mDeairTank_LevFault1" NOP_0 NOP_0 NOP_0 A "mDeairTank_LevFault1" BRACKET O_BRACK A "Blending" A "gBlenderBlending" L S5T#3S OnDelay "mDeairTank_LevFault2" NOP_0 NOP_0 NOP_0 A "mDeairTank_LevFault2" BRACKET = "gDeairTank_LowLvl_Fault" // --- END STL Network 2 --- // Network 3: Deaireator Tank Minimum Level (Original Language: LAD) "gIN_DeairTank_MinLvl" := "HMI_Instrument"."LTN301"."PVFiltered" > 5.0; // Network 4: Deaireator Tank Flooded (Original Language: LAD) "mDeairTankFlooded" := "HMI_Instrument"."LTN301"."PVFiltered" > 95.0; // Network 5: TankLevel Fault (Original Language: LAD) "mDeairTank_LevFault3"(IN := "gBlenderProdMode" AND "gBlenderRinseMode" AND "mDeairTankFlooded", PT := S5T#2S); // TODO: Declarar "mDeairTank_LevFault3" : TON; // Edge Logic handled by Coil 33 "mDeairTank_HighLvlONS" := "mDeairTank_LevFault3".Q; // P_TRIG("mDeairTank_LevFault3".Q) - Mem: "mDeairTank_HighLvlONS" "gDeairTank_HighLvl_Fault" := "mDeairTank_LevFault3".Q AND NOT "mDeairTank_HighLvlONS"; "mDeairTank_HighLvlONS" := "mDeairTank_LevFault3".Q; // P_TRIG("mDeairTank_LevFault3".Q) - Mem: "mDeairTank_HighLvlONS" // Network 6: Maximum Tank Level during CIP / Rinse (Original Language: LAD) SEL_R(G := "HMI_Variables_Status"."Procedures"."CIP_DeairTankFloodRun", IN0 := "HMI_Blender_Parameters"."ProcessSetup"."_CIPTN301MaxLevel", IN1 := 100.0); // Network 7: Time delay to open valve in CIP/Rinse (Original Language: LAD) "mCIPRinseDlyOpenValve"(IN := "gBlenderStartPumps" AND "gOUT_PPN301_Run" AND ("gBlenderRinseMode" OR ("CIP_Program_Variables"."Status"."Started" AND "gBlenderCIPMode")), PT := S5T#2S); // TODO: Declarar "mCIPRinseDlyOpenValve" : TON; "gCIPRinseOpenValves" := "mCIPRinseDlyOpenValve".Q; "mCIPRinseDlyOpenRMP302"(IN := "gBlenderStartPumps" AND "gCIPRinseEnableRMP302" AND ("gBlenderRinseMode" OR ("CIP_Program_Variables"."Status"."Started" AND "gBlenderCIPMode")), PT := S5T#3S); // TODO: Declarar "mCIPRinseDlyOpenRMP302" : TON; "gCIPRinseOpenRMP302" := "mCIPRinseDlyOpenRMP302".Q; // Network 8: TankLoadDelay (Original Language: LAD) "mSyrTank_LoadDelay"(IN := ("gSyrTank_LowLvl_Fault" AND "gP_RVP303" AND "gIN_ResetBtn") OR ("HMI_Alarms"."Supplies"."Alarm063" AND "gP_RVP303" AND "gIN_ResetBtn"), PT := S5T#1m); // TODO: Declarar "mSyrTank_LoadDelay" : TP; "gSyrTank_Loading" := "mSyrTank_LoadDelay".Q; // Network 9: LevFault (Original Language: STL) // --- BEGIN STL Network 9 --- O_BRACK A "gBlenderProdMode" A_BRACK A "HMI_Digital".LAL_S3.Config AN "HMI_Digital".LAL_S3.Filtered O A "HMI_Instrument".LTP303.Config AN "gIN_SyrTank_MinLvl" BRACKET A "Procedure_Variables".FTP302Line_Preparation.Done AN "Procedure_Variables".TM301_RunOut.Latch AN "System_RunOut_Variables".ProdPipe_RunOut.Latch AN "Procedure_Variables".Syr_RunOut.Done = "mSyrTankLowLvl_Fault" A "mSyrTankLowLvl_Fault" AN "gSyrTank_Loading" L S5T#100MS OnDelay "mSyrTank_LevFault" NOP_0 NOP_0 NOP_0 A "mSyrTank_LevFault" BRACKET O_BRACK A "mSyrTankLowLvl_Fault" L S5T#30S OnDelay "mSyrTank_LevFault1" NOP_0 NOP_0 NOP_0 A "mSyrTank_LevFault1" BRACKET = "gSyrTank_LowLvl_Fault" // --- END STL Network 9 --- // Network 10: Syrup Tank Minimum Level (Original Language: LAD) "gIN_SyrTank_MinLvl" := "HMI_Instrument"."LTP303"."PVFiltered" > 10.0; // Network 11: Syrup Tank Flooded (Original Language: LAD) "mSyrTankFlooded" := "HMI_Instrument"."LTP303"."PVFiltered" > 95.0; // Network 12: Syrup Tank Empty (Original Language: LAD) "mSyrTankEmpty" := "HMI_Instrument"."LTP303"."PVFiltered" < 2.0; // Network 13: TankLevel Fault (Original Language: LAD) "mSyrTank_LevFault2"(IN := "mSyrTankFlooded" AND "gBlenderProdMode" AND "gBlenderRinseMode", PT := S5T#2S); // TODO: Declarar "mSyrTank_LevFault2" : TON; // Edge Logic handled by Coil 33 "mSyrTank_HighLvlONS" := "mSyrTank_LevFault2".Q; // P_TRIG("mSyrTank_LevFault2".Q) - Mem: "mSyrTank_HighLvlONS" "gSyrTank_HighLvl_Fault" := "mSyrTank_LevFault2".Q AND NOT "mSyrTank_HighLvlONS"; "mSyrTank_HighLvlONS" := "mSyrTank_LevFault2".Q; // P_TRIG("mSyrTank_LevFault2".Q) - Mem: "mSyrTank_HighLvlONS" // Network 14: Maximum Syrup Tank Level during CIP (Original Language: LAD) SEL_R(G := "HMI_Variables_Status"."Procedures"."CIP_SyrTankFloodRun", IN0 := "HMI_Blender_Parameters"."ProcessSetup"."_CIPTP301MaxLevel", IN1 := 100.0); // Network 15: Product Tank Maximum Level Acheaved (Original Language: LAD) IF "gBlenderStopLevel" THEN "Lvl_1" := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_PrdTankMinLevel" + 10.0; END_IF; // Network 16: Product Tank Maximum Level Acheaved (Original Language: LAD) "HMI_Variables_Status"."System"."TM301MaxLevel" := "gBlenderStopLevel" OR ("gCIPStopLevel" AND "gBlenderRinseMode") OR ("gCIPStopLevel" AND "gBlenderCIPMode"); // Network 17: Product Tank Pump Start Level Acheaved (Original Language: LAD) IF "gBlenderStartLevel" AND "gBlenderProdMode" THEN "Lvl_1" := "Blender_Variables"."gProdTankStopLvl" - "Blender_Variables"."gProdTankStartLvl"; END_IF; IF "gBlenderStartLevel" THEN "Lvl_1" := "Blender_Variables"."gProdTankStartLvl" + 2.0; END_IF; IF "gBlenderStartLevel" THEN "Lvl_1" := "Blender_Variables"."gProdTankStopLvl" - "Lvl_1"; END_IF; // Network 18: Maximum Tank Level during CIP (Original Language: LAD) IF "HMI_Variables_Status"."Procedures"."CIP_ProdTankFloodRun" THEN "gCIPStopLevel" := FALSE; END_IF; // Network 19: Maximum Syrup Tank Level during CIP (Original Language: LAD) SEL_R(G := "HMI_Variables_Status"."Procedures"."CIP_ProdTankFloodRun", IN0 := "HMI_Blender_Parameters"."ProcessSetup"."_CIPTM301MaxLevel", IN1 := 98.0); // Network 20: Product Tank 5% Level Acheaved (Original Language: LAD) IF "gBlenderMinLevel" THEN "Min_Lvl" := "Blender_Constants"."gTM301MinLvl" - 2.0; END_IF; // Network 21: - PRESSURE - (Original Language: LAD) IF "gWaitLevToHold_TankPress" THEN "Wait_Lvl" := "Blender_Constants"."gTM301PressWaitLvl" - 2.0; END_IF; // Network 22: Tank Pressure Hold reset (Original Language: LAD) IF "Procedure_Variables"."TM301_RunOut"."Latch" THEN "gWaitLevToHold_TankPress" := FALSE; END_IF; // Network 23: LEVEL - 100% Product Tank Level during CIP (Original Language: LAD) "gCIP_PrdTank_MaxLevel" := "AUX FALSE"; // Network 24: LEVEL - 100% Product Tank Level during CIP (Original Language: LAD) // Product Tank Flood Reached // Network 24 did not produce printable SCL code. // Network 25: Product Tank Recipe Minimum Level Acheaved (Original Language: LAD) IF "gBlenderLevelOk" THEN "Min_SP_Lvl" := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_PrdTankMinLevel" - 2.0; END_IF; // Network 26: Product Tank Target Level Acheaved (Original Language: LAD) IF "gBlenderLevelTarget" THEN "Target_Lvl" := 30.0 - 2.0; END_IF; // Network 27: (Original Language: LAD) "BlenderLevelStopSByFiller" := "HMI_Instrument"."LTM302"."PVFiltered" > 45.0; // Network 28: Product Tank Empty (Original Language: LAD) // Network 28 did not produce printable SCL code. // Network 29: Product Tank Low Level (Original Language: LAD) "gBlenderEmpty" := ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrupLevel" AND "HMI_Digital"."LAL_S3"."Filtered" AND (("CIP_Program_Variables"."Status"."CausticRecoveryRun" AND "M110.0" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN301L"."Filtered" AND (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_DoubleDeair" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN302L"."Filtered" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))))))) OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrupLevel" AND "mSyrTankEmpty" AND (("CIP_Program_Variables"."Status"."CausticRecoveryRun" AND "M110.0" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN301L"."Filtered" AND (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_DoubleDeair" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN302L"."Filtered" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))))))); "gCIP_SystemLowLevel" := "gBlenderCIPMode" AND (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrupLevel" AND "HMI_Digital"."LAL_S3"."Filtered" AND (("CIP_Program_Variables"."Status"."CausticRecoveryRun" AND "M110.0" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN301L"."Filtered" AND (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_DoubleDeair" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN302L"."Filtered" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))))))) OR ("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_SyrupLevel" AND "mSyrTankEmpty" AND (("CIP_Program_Variables"."Status"."CausticRecoveryRun" AND "M110.0" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN301L"."Filtered" AND (("HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_DoubleDeair" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun"))) OR ("HMI_Digital"."LSN302L"."Filtered" AND NOT (("HMI_Digital"."LSM302L"."Filtered" AND "gPrdTank_Empty") OR ("HMI_Digital"."LSM302L"."Filtered" AND "CIP_Program_Variables"."Status"."CausticRecoveryRun")))))))); END_FUNCTION ```