266 lines
8.3 KiB
Markdown
266 lines
8.3 KiB
Markdown
```pascal
|
|
// 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
|
|
|
|
```
|