ParamManagerScripts/backend/script_groups/TwinCat/.example/BRIXTRACKING.EXP

827 lines
10 KiB
Plaintext

(* @PATH := '\/TASK2_ControlMain\/Blender_Procedure' *)
(* @SYMFILEFLAGS := '59392' *)
PROGRAM BrixTracking
VAR
mLocalProdLevel : REAL ;
mProdQualityGood : BOOL ;
mAuxONS : R_TRIG ;
mAuxONS1 : R_TRIG ;
mLatchONS : BOOL ;
mDummy : BOOL ;
mProdBrixStat : StatisticalAnalisys ;
mProdBrixSample : INT := 35 ;
mWaitCycleToSample : INT ;
mCycleCount : INT ;
mTotalCount : INT ;
mProdRefresh : REAL ; (* Time in min to refresh all product in product tank *)
mProdRefreshS : REAL ; (* Time in sec to refresh all product in product tank *)
mAuxProdBrixCorr : REAL ;
mAuxProdBrixCorrInit : REAL ;
mStart : BOOL ;
mTakeSample : BOOL ;
mTakeProdSample : BOOL ;
mProdInit : REAL ;
mAllSamples : BOOL ;
END_VAR
VAR_OUTPUT
EN_Out : BOOL ;
END_VAR
(* @END_DECLARATION := '0' *)
_LD_BODY
_NETWORKS : 18
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 5
_LD_CONTACT
gBlenderProdMode
_EXPRESSION
_POSITIV
_LD_CONTACT
gFirstProd_Done
_EXPRESSION
_POSITIV
_LD_CONTACT
gProductMeterOk
_EXPRESSION
_POSITIV
_LD_CONTACT
gSugarBeverage
_EXPRESSION
_POSITIV
_LD_CONTACT
gWaterRecipe
_EXPRESSION
_NEGATIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Qualifier
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 2
_LD_CONTACT
gH_CMD_PrdBrixTrackingReq
_EXPRESSION
_POSITIV
_FUNCTIONBLOCK
mAuxONS
_BOX_EXPR : 1
_EMPTY
_EXPRESSION
_POSITIV
R_TRIG
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Request
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gProdBrixTrack_Qualifier
_EXPRESSION
_NEGATIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Reset
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_OPERATOR
_BOX_EXPR : 2
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
gProdBxStat_DevStd
_OPERAND
_EXPRESSION
_POSITIV
8E-3
_EXPRESSION
_POSITIV
LT
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mProdQualityGood
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_OR
_LD_OPERATOR : 4
_LD_CONTACT
mProdQualityGood
_EXPRESSION
_NEGATIV
_LD_CONTACT
gFlowToFiller
_EXPRESSION
_NEGATIV
_LD_CONTACT
gFreezeProductMeter
_EXPRESSION
_POSITIV
_LD_CONTACT
gBlenderEnToRamp
_EXPRESSION
_NEGATIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Wait
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 3
_LD_OR
_LD_OPERATOR : 2
_LD_CONTACT
gProdBrixTrack_Request
_EXPRESSION
_POSITIV
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_LD_CONTACT
gProdBrixTrack_Reset
_EXPRESSION
_NEGATIV
_LD_CONTACT
gProdBrixTrack_Done
_EXPRESSION
_NEGATIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Latch
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 2
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_FUNCTIONBLOCK
mAuxONS1
_BOX_EXPR : 1
_EMPTY
_EXPRESSION
_POSITIV
R_TRIG
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mLatchONS
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 2
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_LD_CONTACT
gProdBrixTrack_Wait
_EXPRESSION
_NEGATIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Running
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 2
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_LD_CONTACT
gProdBrixTrack_Wait
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gH_Status009
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gH_PrdBrixTrackingRun
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_EMPTY
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_OPERATOR
_BOX_EXPR : 3
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
gProductTankLevel>50
_OPERAND
_EXPRESSION
_POSITIV
gProductTankLevel
_OPERAND
_EXPRESSION
_POSITIV
60
_EXPRESSION
_POSITIV
SEL
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mLocalProdLevel
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_EMPTY
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_FUNCTION
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
mLocalProdLevel
_EXPRESSION
_POSITIV
ProductLiterInTank
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProductLitTank
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_EMPTY
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_ENABLED
_EXPRESSION
_POSITIV
BrixTracking.ProdSamples
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mDummy
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_ENABLED
_EXPRESSION
_POSITIV
BrixTracking.SampleTimeCalc
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mDummy
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_NEGATIV
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
mAuxProdBrixCorr
_OUTPUT
_POSITIV
_NO_SET
gBrixTrackingCorr
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gProdBrixTrack_Running
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gH_Status010
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_OR
_LD_OPERATOR : 3
_LD_AND
_LD_OPERATOR : 3
_LD_CONTACT
gProdBrixTrack_Latch
_EXPRESSION
_POSITIV
_LD_CONTACT
mLatchONS
_EXPRESSION
_NEGATIV
_LD_CONTACT
gProdBrixTrack_Request
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_LD_CONTACT
gBlenderRinseMode
_EXPRESSION
_POSITIV
_LD_CONTACT
gBlenderCIPMode
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBrixTrack_Done
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_EMPTY
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_FUNCTIONBLOCK
???
_BOX_EXPR : 0
_ENABLED
_EXPRESSION
_POSITIV
BrixTracking.ProductQualityMonitor
_OUTPUTS : 0
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mDummy
ENABLELIST_END
_OUTPUTS : 0
END_PROGRAM
ACTION ProdSamples:
(* Calculates the product liters during blending. Every 60 Liters of product take a sample for the statistical analisys
in order to correct the product brix *)
IF gBlenderBlending THEN
gProductTotalizerLt.i_NewValue :=gActual_Prod_Flow ;
gProductTotalizerLt.i_IntCycle := gTask02CycleTime ;
gProductTotalizerLt(Out_Integral:=gProductLiters) ;
END_IF
IF gBlenderRinseMode OR gBlenderCIPMode THEN
gProductLiters := 0.0 ;
gProductTotalizerLt(Out_Integral:=gProductLiters) ;
END_IF
IF (gProductLiters-mProdInit)>60 THEN
mTakeProdSample := TRUE ;
mProdInit := gProductLiters ;
END_IF
(*mAuxProdBrixCorr := (gActualRecipe_Beverage_Brix - gProdBxStat_MeanValue) / 2 ;*)
END_ACTION
ACTION ProductQualityMonitor:
_LD_BODY
_NETWORKS : 3
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_OR
_LD_OPERATOR : 2
_LD_CONTACT
mTakeSample
_EXPRESSION
_POSITIV
_LD_AND
_LD_OPERATOR : 2
_LD_CONTACT
gAlwaysOff
_EXPRESSION
_POSITIV
_LD_CONTACT
mTakeProdSample
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_FUNCTIONBLOCK
mProdBrixStat
_BOX_EXPR : 3
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
gProductBrix
_OPERAND
_EXPRESSION
_POSITIV
mProdBrixSample
_OPERAND
_EXPRESSION
_POSITIV
1
_EXPRESSION
_POSITIV
StatisticalAnalisys
_OUTPUTS : 2
_OUTPUT
_POSITIV
_NO_SET
gProdBxStat_Variance
_OUTPUT
_POSITIV
_NO_SET
gProdBxStat_DevStd
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gProdBxStat_MeanValue
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
mTakeSample
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_NEGATIV
_SET
mTakeSample
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
mTakeProdSample
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_NEGATIV
_SET
mTakeProdSample
END_ACTION
ACTION SampleTimeCalc:
IF gActual_Prod_SP<>0 THEN
mProdRefresh := gProductLitTank / gActual_Prod_SP ;
ELSE
mProdRefresh := 0 ;
END_IF
mProdRefreshS := mProdRefresh * 1.6 * 60 ;
IF gTask02CycleTime<>0 AND mProdBrixSample<>0 THEN
mWaitCycleToSample := REAL_TO_INT(mProdRefreshS / mProdBrixSample / gTask02CycleTime) ;
END_IF
IF mWaitCycleToSample<1 THEN
mWaitCycleToSample := 1 ;
END_IF
IF gProdBrixTrack_Latch AND NOT gFreezeProductMeter THEN
IF mCycleCount<=mWaitCycleToSample THEN
mCycleCount := mCycleCount + 1 ;
ELSE
mTakeSample := TRUE ;
mCycleCount := 0 ;
END_IF
ELSE
mTakeSample := FALSE ;
(* mCycleCount := 0 ;*)
END_IF
IF mTakeSample THEN
mTotalCount := mTotalCount + 1 ;
END_IF
IF mTotalCount>=mProdBrixSample THEN
IF gProdBrixTrack_Running THEN
IF NOT mStart THEN
mStart := TRUE ;
mAuxProdBrixCorrInit := gActualRecipe_Beverage_Brix - gProdBxStat_MeanValue ;
IF mAuxProdBrixCorr=0 THEN
mAuxProdBrixCorr := (gActualRecipe_Beverage_Brix - gProdBxStat_MeanValue) / 3 ;
END_IF
ELSE
mStart := FALSE ;
(* IF ABS(gActualRecipe_Beverage_Brix - gProdBxStat_MeanValue)<=mAuxProdBrixCorrInit THEN*)
mAuxProdBrixCorr := mAuxProdBrixCorr + (gActualRecipe_Beverage_Brix - gProdBxStat_MeanValue) / 10 ;
(* END_IF*)
END_IF
END_IF
mAllSamples := TRUE ;
mTotalCount := 0 ;
ELSE
mAllSamples := FALSE ;
END_IF
(* Check the limit boundaries to act the product tracking *)
IF gProdBrixTrack_Running THEN
IF NOT (ABS(mAuxProdBrixCorr)<gBrixTrackingMinCorr OR ABS(mAuxProdBrixCorr)>gBrixTrackingMaxCorr) THEN
gBrixTrackingCorr := mAuxProdBrixCorr ;
END_IF
END_IF
END_ACTION