Obsidean_VM/04-SIDEL/06 - E5.007363 - Modifica O.../Source/source/ProcedureFirstProduction.md

6.4 KiB

// Block Type: FB
// Block Number: 1805
// Original Network Languages: LAD

FUNCTION_BLOCK "ProcedureFirstProduction"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1

VAR_STAT
  Switch_Level : Real;
  mFirstProdONS : Bool;
  mAuxONS : Bool;
  mFirstProdTPON : Bool;
  mFirstProdTP1ON : Bool;
  mAuxTPON : Bool;
  mDelaySyrOkON : Bool;
  mTimeDoneON : Bool;
  mFirstProdTP : STRUCT
    PT : Time;
    ET : Time;
    IN : Bool;
    Q : Bool;
  END_STRUCT;

  mFirstProdTP1 : STRUCT
    PT : Time;
    ET : Time;
    IN : Bool;
    Q : Bool;
  END_STRUCT;

  mAuxTP : STRUCT
    PT : Time;
    ET : Time;
    IN : Bool;
    Q : Bool;
  END_STRUCT;

  mDelaySyrOk : STRUCT
    PT : Time;
    ET : Time;
    IN : Bool;
    Q : Bool;
  END_STRUCT;

  mTimeDone : STRUCT
    PT : Time;
    ET : Time;
    IN : Bool;
    Q : Bool;
  END_STRUCT;

END_VAR

VAR_TEMP
  Switch_Level_RETVAL : Int;
  mFirstProdCountDone : Bool;
  mInitialSyrupOk : Bool;
  mSyrupCountInit : Real;
  Syrup_K : Real;
  Syrup_SUB : Real;
  SyrupLiters_MUL : Real;
  Syrup_Brix_SUB : Real;
  Syrup_Brix_ABS : Real;
  Delta_Brix_MUL : Real;
  Syrup_Brix_MUL : Real;
END_VAR

  #_10S : Bool; // Auto-generated temporary
  #TON_INSTANCE_46 : Bool; // Auto-generated temporary
BEGIN

  // Network 1: Qualifier (Original Language: LAD)

  "Procedure_Variables"."First_Production"."Qualifier" := ("gBlenderProdMode" AND "gBlenderRinseMode" AND "gBlenderSuppliesOk") OR ("gBlenderProdMode" AND "gBlenderRinseMode" AND "Procedure_Variables"."First_Production"."Done");

  // Network 2: FirstProd (Original Language: LAD)
  //   Exceptionally the Request Bit is Latched in order TO save it FOR the next 
  //   Production switching

  "Procedure_Variables"."First_Production"."Request" := "gBlenderCIPMode" OR ("gBlenderRinseMode" AND "Procedure_Variables"."First_Production"."Done") OR ("Procedure_Variables"."First_Production"."Done" AND "Procedure_Variables"."First_Production"."Request");

  // Network 3: Reset (Original Language: LAD)

  // PBox SymPy processed, logic in consumer
  "FirstProductiontReset" := "Procedure_Variables"."First_Production"."Done" AND "Procedure_Variables"."First_Production"."Request" AND "System_RunOut_Variables"."FastChangeOverActivated"; // P_TRIG("Procedure_Variables"."First_Production"."Done" AND "Procedure_Variables"."First_Production"."Request" AND "System_RunOut_Variables"."FastChangeOverActivated") - Mem: "FirstProductiontReset"

  "Procedure_Variables"."First_Production"."Reset" := "Procedure_Variables"."First_Production"."Qualifier" OR "Procedure_Variables"."Blender_Rinse"."ONS_Done";

  // Network 4: Reset (Original Language: LAD)

  IF "Procedure_Variables"."First_Production"."Reset" THEN
    "mFirstProdCountDone" := FALSE;
  END_IF;

  IF "Procedure_Variables"."First_Production"."Reset" THEN
    "Blender_Variables_Pers"."gFirstProdLatched" := FALSE;
  END_IF;

  IF "Procedure_Variables"."First_Production"."Reset" THEN
    "Procedure_Variables"."First_Production"."Done" := FALSE;
  END_IF;

  // Network 5: Wait (Original Language: LAD)
  //   Wait UNTIL Production is Selected

  "Procedure_Variables"."First_Production"."Wait" := "gBlenderProdMode";

  // Network 6: Latched (Original Language: LAD)

  // Network 6 did not produce printable SCL code.

  // Network 7: LEVEL - Stop Blender when First Production Done (Original Language: LAD)

  // Network 7 did not produce printable SCL code.

  // Network 8: Count Init (Original Language: LAD)

  IF "Procedure_Variables"."FTP302Line_Preparation"."Done" AND "gPV_SyrDensOk" AND "Blender_Variables_Pers"."gFirstProdLatched" THEN
    "mSyrupCountInit" := "HMI_Variables_Status"."Analog_Values"."SyrupTotalizerLt";
  END_IF;

  // Network 9: Prod Count Done (Original Language: LAD)
  //   During Fisrt Production the SyrupRunOutLiters Parameters is multiplied BY 1.3 
  //   (30% more syrup) AND used TO state when all the Low Brix Syrup is ran Out

  "Syrup_K" := "Blender_Variables_Pers"."gSyrupTotal" / "Blender_Variables"."gActualSyrupDens";

  "Syrup_SUB" := "Syrup_K" - "mSyrupCountInit";

  "SyrupLiters_MUL" := "HMI_Blender_Parameters"."ProcessSetup"."_SyrupRunOutLiters" * 1.0;

  "mFirstProdCountDone" := "Syrup_SUB" > "SyrupLiters_MUL";

  // Network 10: Latch (Original Language: LAD)

  "Procedure_Variables"."First_Production"."Latch" := ("Procedure_Variables"."First_Production"."Reset" AND "FirstScan" AND "Procedure_Variables"."First_Production"."Done" AND "Procedure_Variables"."First_Production"."Request") OR ("Procedure_Variables"."First_Production"."Reset" AND "FirstScan" AND "Procedure_Variables"."First_Production"."Done" AND "Procedure_Variables"."First_Production"."Latch");

  // Network 11: First Production Running (Original Language: LAD)

  "Procedure_Variables"."First_Production"."Running" := "Procedure_Variables"."First_Production"."Wait" AND "Procedure_Variables"."First_Production"."Latch";

  "HMI_Alarms"."gH_Status" := "Procedure_Variables"."First_Production"."Wait" AND "Procedure_Variables"."First_Production"."Latch";

  "HMI_Variables_Status"."Procedures"."FirstProdRun" := "Procedure_Variables"."First_Production"."Latch";

  // Network 12: Reset Totalizer (Original Language: LAD)

  // Network 12 did not produce printable SCL code.

  // Network 13: DelaySyrOK (Original Language: LAD)

  "Syrup_Brix_MUL" := "Blender_Variables"."gMeterSyrBrix" * "HMI_Recipe_Edit"."Actual_Recipe_Parameters"."_SyrupFactor";

  "Syrup_Brix_SUB" := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_SyrupBrix" - "Syrup_Brix_MUL";

  "Delta_Brix_MUL" := "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_MaxSyrDeltaBrix" * 0.8;

  // Network 14: FirstProdDone (Original Language: LAD)
  //   First production stops when product tank level gets MAX Lvel (80%) OR when the 
  //   Syrup Brix Error is minimum

  #TON_INSTANCE_46(IN := ("gBlenderLevelTarget" AND "gBlenderBlending" AND "AUX FALSE" AND "mInitialSyrupOk" AND "Procedure_Variables"."First_Production"."Latch") OR ("gBlenderLevelTarget" AND "gBlenderBlending" AND "AUX FALSE" AND "gSyrupRoomEn" AND "Procedure_Variables"."First_Production"."Latch"), PT := T#10S); // TODO: Declarar #TON_INSTANCE_46 : TON;

  "Procedure_Variables"."First_Production"."Done" := "mTimeDoneON" OR ("gBlenderRinseMode" AND "gBlenderStopLevel" AND "Procedure_Variables"."First_Production"."Latch");

  // Network 15: FirstProdDone (Original Language: LAD)

  "HMI_Variables_Status"."System_Run_Out"."FirstProductionDone" := "Procedure_Variables"."First_Production"."Done";

END_FUNCTION_BLOCK