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

8.3 KiB

// Block Type: FB
// Block Number: 1719
// Original Network Languages: STL, LAD

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

VAR_STAT
  mNumOfCycle : Int;
  mInitialLevel : Real;
  mPrevSpeed : Real;
  mAcqTime : Real;
  mProdLt : Real;
  mSaveDeltaV : Real;
  mFillerTracked : Bool;
  mFillerTrackedTmrON : Bool;
  mFlrFlowDelayOnON : Bool;
  mFlrFlowDelayOffON : Bool;
  mFillerTrackedTmr : "TON_TIME:v1.0";
  mFlrFlowDelayOn : "TON_TIME:v1.0";
  mFlrFlowDelayOff : "TOF_TIME:v1.0";
  mFillerDeltaVFilter : "LowPassFilter";
  mFillerSpeedFilter : "LowPassFilter";
END_VAR

VAR_TEMP
  mReadLevel : Bool;
  mNotZero : Bool;
  mSave : Bool;
  gBlenderSpeedUp : Bool;
  gBlenderSpeedDown : Bool;
  mDummy : Bool;
  Aux_calc1 : Real;
  Aux_calc2 : Real;
  mTemp : Real;
  mSpeedPerc : Real;
  mFillerEstimatedFlow : Real;
  __PlcmigTempFillBits_22B0 : Array[0..7] of Bool;
END_VAR

  #_20S : Bool; // Auto-generated temporary
  #TON_INSTANCE_29 : Bool; // Auto-generated temporary
BEGIN

  // Network 1: Track Filler Speed Start (Original Language: LAD)

  IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_TrackFillerSpeed" THEN
    "gTrackFillerSpeed" := TRUE;
  END_IF;

  // Network 2: Track Filler Speed Stop (Original Language: LAD)

  IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_TrackFillerSpeed" OR "HMI_PID"."RMM301"."ManualControl"."ManOut" THEN
    "gTrackFillerSpeed" := FALSE;
  END_IF;

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

  "Procedure_Variables"."Filler_Speed"."Qualifier" := "Procedure_Variables"."Blender_Run"."Latch" OR "AUX FALSE";

  // Network 4: Read Level (Original Language: LAD)

  "mReadLevel" := Eq("mNumOfCycle", 0);

  // Network 5: Read level & Product Target (Original Language: LAD)

  IF "mReadLevel" THEN
    "mInitialLevel" := "HMI_Instrument"."LTM302"."PVFiltered";
    "mPrevSpeed" := "Blender_Variables"."gActual_Prod_SP";
  END_IF;

  // Network 6: Acquisition Time (Original Language: LAD)

  IF "Procedure_Variables"."Filler_Speed"."Qualifier" AND "Procedure_Variables"."Filler_Speed"."Latch" THEN
    "mAcqTime" := "mAcqTime" + "Time_300ms";
  END_IF;

  // Network 7: Speed Request (Original Language: LAD)

  IF "Procedure_Variables"."Filler_Speed"."Qualifier" THEN
    "mNumOfCycle" := "mNumOfCycle" + 1;
  END_IF;

  "Procedure_Variables"."Filler_Speed"."Request" := "mNumOfCycle" > 8;

  // Network 8: Speed Latch (Original Language: LAD)

  "Procedure_Variables"."Filler_Speed"."Latch" := ("FirstScan" AND "Procedure_Variables"."Filler_Speed"."Done" AND "Procedure_Variables"."Filler_Speed"."Qualifier" AND "Procedure_Variables"."Filler_Speed"."Latch") OR ("FirstScan" AND "Procedure_Variables"."Filler_Speed"."Done" AND "Procedure_Variables"."Filler_Speed"."Qualifier" AND "Procedure_Variables"."Filler_Speed"."Request");

  // Network 9: Product Liters Calculation (Original Language: LAD)

  IF "Procedure_Variables"."Filler_Speed"."Latch" THEN
    "Aux_calc1" := "Blender_Variables"."gProdTankVolume" - "Blender_Variables"."gProdTankBottomVol";
    "mNumOfCycle" := 0;
  END_IF;

  IF "Procedure_Variables"."Filler_Speed"."Latch" THEN
    "Aux_calc1" := "Aux_calc1" / 100.0;
  END_IF;

  IF "Procedure_Variables"."Filler_Speed"."Latch" THEN
    "Aux_calc2" := "mInitialLevel" - "HMI_Instrument"."LTM302"."PVFiltered";
  END_IF;

  IF "Procedure_Variables"."Filler_Speed"."Latch" THEN
    "mProdLt" := "Aux_calc1" * "Aux_calc2";
  END_IF;

  // Network 10: Reset Product Liters (Original Language: LAD)

  IF "Procedure_Variables"."First_Production"."Done" THEN
    "mProdLt" := 0.0;
  END_IF;

  // Network 11: Acquisition Time not Zero (Original Language: LAD)

  "mNotZero" := Ne("mAcqTime", 0.0);

  // Network 12: Filler DeltaV Filter (Original Language: STL)
  //   Aggiungere il LowPassFilter!!

  // --- BEGIN STL Network 12 ---
   
     	A	"mNotZero"
     	A	"Procedure_Variables".Filler_Speed.Latch
     	=	"__PlcmigTempFillBits_22B0"[0]
     	A	"AUX TRUE"
     	=	"__PlcmigTempFillBits_22B0"[1]
     	BLD	103
     	A_BRACK
     	A_BRACK
     	A	"__PlcmigTempFillBits_22B0"[0]
     	JNB	_00b
     	L	"mProdLt"
     	L	"mAcqTime"
     	DIV_R
     	T	"Aux_calc1"
     	AN	_Statusword_?
     	SAVE
     	CLR
     _00b:   		A	_Statusword_?
     	BRACKET
     	JNB	_00c
     	L	"Aux_calc1"
     	L	60.0
     	MUL_R
     	T	"Aux_calc1"
     	AN	_Statusword_?
     	SAVE
     	CLR
     _00c:   		A	_Statusword_?
     	BRACKET
     	JNB	_00d
     	CALL	"mFillerDeltaVFilter"
     _00d:   		NOP_0
     	A	"__PlcmigTempFillBits_22B0"[0]
     	JNB	_00e
     	L	0
     	T	"mAcqTime"
     _00e:   		NOP_0
   
  // --- END STL Network 12 ---

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

  IF "Procedure_Variables"."Filler_Speed"."Qualifier" THEN
    "Aux_calc1" := "mSaveDeltaV" - "Blender_Variables"."gBlenderFillerDeltaV";
  END_IF;

  "mSave" := "Aux_calc1" < 20.0;

  // Network 14: Delta V (Original Language: LAD)

  "Blender_Variables"."gBlenderFillerDeltaV" := "mSaveDeltaV";

  // Network 15: Actual Product Target With Slew Limitation (Original Language: LAD)

  "gBlenderSpeedUp" := "Blender_Variables"."gActual_Prod_SP" > "mPrevSpeed";

  // Network 16: Actual Product Target With Slew Limitation (Original Language: LAD)

  "gBlenderSpeedDown" := "mPrevSpeed" < "Blender_Variables"."gActual_Prod_SP";

  // Network 17: FillerTracked (Original Language: LAD)

  #TON_INSTANCE_29(IN := "HMI_Device"."PPM303"."Out" AND "HMI_Device"."AVM362"."Out" AND "DI_Flr1_PROD_ok", PT := T#20S); // TODO: Declarar #TON_INSTANCE_29 : TON;

  "gFlowToFiller" := #TON_INSTANCE_29.Q;

  // Network 18: Calculates blender target production Set Point TO track Filler. (Original Language: LAD)
  //   Calculates blender target production Set Point TO track Filler.

  "Aux_calc1" := "Blender_Variables"."gBlenderFillerDeltaV" / 4.0;

  "mTemp" := "Blender_Variables"."gActual_Prod_SP" + "Aux_calc1";

  // Network 19: Blender Filler Production Rate difference - L/min - (Original Language: LAD)

  "Aux_calc1" := "Blender_Variables"."gSP_ProdTrackFiller" - "mTemp";

  // Network 20: Product Tank Bottom Volume Below level Probe (Original Language: LAD)

  IF "gWorkshopTest" THEN
    SpeedAdjust(i_IstLvl := "Blender_Constants"."gTM301TargetL_Ist", i_PrdTnkLvl := "HMI_Instrument"."LTM302"."PVFiltered", i_SpeedPerc := "Blender_Constants"."gTM301LvlPercRange", i_TrgTnkLvl := "Blender_Variables"."gProdTankTargetLvl");
  END_IF;

  IF "gWorkshopTest" THEN
    "mSpeedPerc" := 1.0;
  END_IF;

  "mDummy" := "gWorkshopTest";

  // Network 21: Speed Perc (Original Language: LAD)

  IF "gWorkshopTest" AND "AUX TRUE" THEN
    SpeedAdjust(i_IstLvl := "Blender_Constants"."gTM301TargetL_Ist", i_PrdTnkLvl := "HMI_Instrument"."LTM302"."PVFiltered", i_SpeedPerc := "Blender_Constants"."gTM301LvlPercRange", i_TrgTnkLvl := "Blender_Variables"."gProdTankTargetLvl");
  END_IF;

  IF "gWorkshopTest" AND "AUX TRUE" THEN
    "mSpeedPerc" := 1.0;
  END_IF;

  // Network 22: Estimated Filler Speed (Original Language: LAD)

  IF "mFillerTracked" THEN
    "mFillerSpeedFilter"(i_Enable := "gBlenderBlending" AND "gBlenderStableFlow", i_Num := 10, i_Value := "mTemp");
  END_IF;

  // Network 23: Estimated Flow (Original Language: LAD)

  IF "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" THEN
    "mFillerEstimatedFlow" := "Filler_Head_Variables"."Prod_FlowEstimatedSlw";
  END_IF;

  IF NOT "HMI_Blender_Parameters"."Processor_Options"."Blender_OPT"."_BlendFillSystem" THEN
    "mFillerEstimatedFlow" := "Blender_Variables"."gEstimateFillerSpeed";
  END_IF;

  // Network 24: Estimated Flow (Original Language: LAD)

  IF NOT "gTrackFillerSpeed" OR NOT "gEnRampDownToStop" THEN
    "mFillerEstimatedFlow" := "HMI_Blender_Parameters"."Actual_Recipe_Parameters"."_ProductionRate";
  END_IF;

  // Network 25: L / min (Original Language: LAD)

  "Blender_Variables"."gSP_ProdTrackFiller" := "mFillerEstimatedFlow" * "mSpeedPerc";

  // Network 26: Analog Values (Original Language: LAD)

  "HMI_Variables_Status"."Analog_Values"."BlenderProd" := "Blender_Variables"."gActual_Prod_SP";

  "HMI_Variables_Status"."Analog_Values"."EstFillerProd" := "Blender_Variables"."gEstimateFillerSpeed";

  "mDummy" := TRUE;

  // Network 27: Speed Measuring Done (Original Language: LAD)

  "Procedure_Variables"."Filler_Speed"."Done" := "Procedure_Variables"."Filler_Speed"."Latch" AND "Procedure_Variables"."Filler_Speed"."Request";

END_FUNCTION_BLOCK