8.3 KiB
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