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

4.9 KiB

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

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

VAR_STAT
  mTakeSample : Bool;
  mTakeProdSample : Bool;
  mProdCO2Sample : Int := 35;
  mAuxProdCO2Corr : Real;
  mLocalProdLevel : Real;
  mProdCO2Stat : "Statistical_Analisys";
  mProdSamples : "CO2Tracking_ProdSamples";
  mSampleTimeCalc : "CO2Tracking_SampleTime";
  mAuxONS : Bool;
  mAuxONS1 : Bool;
END_VAR

VAR_TEMP
  mProdCO2QualityGood : Bool;
  mLatchONS : Bool;
END_VAR

BEGIN

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

  "Procedure_Variables"."ProdCO2_Track"."Qualifier" := "gBlenderProdMode" AND "Procedure_Variables"."First_Production"."Done" AND "gProductMeterOK" AND "Blender_Variables_Pers"."gCarboStillRecipe";

  // Network 2: Tracking Request Pulse (Original Language: LAD)

  // Edge Logic handled by Coil 26
  "Co2TrackingReq" := "HMI_Variables_Cmd"."Commands_From_HMI"."CMD_PrdCO2TrackingReq"; // P_TRIG("HMI_Variables_Cmd"."Commands_From_HMI"."CMD_PrdCO2TrackingReq") - Mem: "Co2TrackingReq"

  "Procedure_Variables"."ProdCO2_Track"."Request" := "HMI_Variables_Cmd"."Commands_From_HMI"."CMD_PrdCO2TrackingReq" AND NOT "Co2TrackingReq";
  "Co2TrackingReq" := "HMI_Variables_Cmd"."Commands_From_HMI"."CMD_PrdCO2TrackingReq"; // P_TRIG("HMI_Variables_Cmd"."Commands_From_HMI"."CMD_PrdCO2TrackingReq") - Mem: "Co2TrackingReq"

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

  "Procedure_Variables"."ProdCO2_Track"."Reset" := "Procedure_Variables"."ProdCO2_Track"."Qualifier";

  // Network 4: Quality Good (Original Language: LAD)

  "mProdCO2QualityGood" := "Blender_Variables"."gProdCO2Stat_DevStd" < 0.008;

  // Network 5: Wait (Original Language: LAD)

  "Procedure_Variables"."ProdCO2_Track"."Wait" := "mProdCO2QualityGood" OR "gNoFreezeProductMeter";

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

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

  // Network 7: Latch Pulse (Original Language: LAD)

  // Edge Logic handled by Coil 26
  "Co2TrackingLatch" := "Procedure_Variables"."ProdCO2_Track"."Latch"; // P_TRIG("Procedure_Variables"."ProdCO2_Track"."Latch") - Mem: "Co2TrackingLatch"

  "mLatchONS" := "Procedure_Variables"."ProdCO2_Track"."Latch" AND NOT "Co2TrackingLatch";
  "Co2TrackingLatch" := "Procedure_Variables"."ProdCO2_Track"."Latch"; // P_TRIG("Procedure_Variables"."ProdCO2_Track"."Latch") - Mem: "Co2TrackingLatch"

  // Network 8: Tracking Running (Original Language: LAD)

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

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

  "HMI_Variables_Status"."Procedures"."PrdCO2TrackingRun" := "Procedure_Variables"."ProdCO2_Track"."Latch";

  // Network 9: Product level (Original Language: LAD)

  SEL_R(G := "HMI_Instrument"."LTM302"."PVFiltered" > 50.0, IN0 := "HMI_Instrument"."LTM302"."PVFiltered", IN1 := 60.0);

  // Network 10: Liters in Tank (Original Language: LAD)

  ProductLiterInTank(i_TankLevel := "mLocalProdLevel");

  // Network 11: Sample (Original Language: LAD)

  "mProdSamples"(mTakeProdSample := "mTakeProdSample");

  // Network 12: Sample Time (Original Language: LAD)

  IF "Procedure_Variables"."ProdCO2_Track"."Latch" THEN
    "mSampleTimeCalc"(mAuxProdCO2Corr := "mAuxProdCO2Corr", mCycleCount := "MW1998", mProdCO2Sample := "mProdCO2Sample", mTakeSample := "mTakeSample");
  END_IF;

  // Network 13: Reset Tracking (Original Language: LAD)

  IF "Procedure_Variables"."ProdCO2_Track"."Latch" THEN
    "Blender_Variables"."gCO2TrackingCorr" := 0.0;
    "mAuxProdCO2Corr" := 0.0;
  END_IF;

  // Network 14: Product Brix Tracking (Original Language: LAD)

  "HMI_Alarms"."gH_Status" := "Procedure_Variables"."ProdCO2_Track"."Running";

  // Network 15: Tracking Done (Original Language: LAD)

  "Procedure_Variables"."ProdCO2_Track"."Done" := "gBlenderRinseMode" OR ("Procedure_Variables"."ProdCO2_Track"."Request" AND "mLatchONS" AND "Procedure_Variables"."ProdCO2_Track"."Latch");

  // Network 16: Quality Monitor (Original Language: LAD)

  IF "mTakeSample" OR ("AUX FALSE" AND "mTakeProdSample") THEN
    "mProdCO2Stat"(i_Cols := "mProdCO2Sample", i_Rows := 1, i_Value := "Blender_Variables"."gProductCO2");
  END_IF;

  // Network 17: Reset Take Sample (Original Language: LAD)
  //   Product Quality Monitor

  IF "mTakeSample" THEN
    "mTakeSample" := FALSE;
  END_IF;

  // Network 18: Reset Product Sample (Original Language: LAD)

  IF "mTakeProdSample" THEN
    "mTakeProdSample" := FALSE;
  END_IF;

END_FUNCTION_BLOCK