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

13 KiB

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