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

7.2 KiB

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