Obsidean_VM/04-SIDEL/00 - MASTER/Source/source/TankLevel.md

293 lines
13 KiB
Markdown

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