441 lines
6.0 KiB
Plaintext
441 lines
6.0 KiB
Plaintext
|
|
(* @PATH := '\/TASK2_ControlMain\/Blender_Procedure' *)
|
|
(* @SYMFILEFLAGS := '59392' *)
|
|
PROGRAM ProdBrixRecovery
|
|
VAR
|
|
mAuxONS : R_TRIG ;
|
|
mSyrPerc : REAL ;
|
|
mH2OPerc : REAL ;
|
|
mRatio_M : REAL ;
|
|
mRatio_V : REAL ;
|
|
mQSugarNominal : REAL ;
|
|
mQSugarActual : REAL ;
|
|
mQH2ONominal : REAL ;
|
|
mQH2OActual : REAL ;
|
|
mTankSpaceAvail : REAL ;
|
|
mSyrupKgMissing : REAL ;
|
|
mSyrupLitMissing : REAL ;
|
|
mTotalRecoverProd : REAL ;
|
|
mKgH2OToRecover : REAL ;
|
|
mTooMuchProdInTank : BOOL ;
|
|
|
|
mProductElapsedONS : R_TRIG ;
|
|
mProductElapsed : BOOL ;
|
|
|
|
mDummy : BOOL ;
|
|
END_VAR
|
|
VAR_OUTPUT
|
|
EN_Out : BOOL ;
|
|
END_VAR
|
|
|
|
(* @END_DECLARATION := '0' *)
|
|
_LD_BODY
|
|
_NETWORKS : 10
|
|
_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
|
|
gProdBrixRecovery_Qualifier
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_AND
|
|
_LD_OPERATOR : 2
|
|
_LD_CONTACT
|
|
gH_CMD_ProdBrixRecoveryReq
|
|
_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
|
|
gProdBrixRecovery_Request
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Qualifier
|
|
_EXPRESSION
|
|
_NEGATIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 0
|
|
ENABLELIST_END
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
gProdBrixRecovery_Reset
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_CONTACT
|
|
mTooMuchProdInTank
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 0
|
|
ENABLELIST_END
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
gProdBrixRecovery_Wait
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_EMPTY
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 1
|
|
_ASSIGN
|
|
_FUNCTION
|
|
_BOX_EXPR : 1
|
|
_ENABLED
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
gProductTankLevel
|
|
_EXPRESSION
|
|
_POSITIV
|
|
ProductLiterInTank
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
gTankProdAmount
|
|
ENABLELIST_END
|
|
_OUTPUTS : 0
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_EMPTY
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 1
|
|
_ASSIGN
|
|
_FUNCTIONBLOCK
|
|
???
|
|
_BOX_EXPR : 0
|
|
_ENABLED
|
|
_EXPRESSION
|
|
_POSITIV
|
|
ProdBrixRecovery.BrixCalc
|
|
_OUTPUTS : 0
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
mDummy
|
|
ENABLELIST_END
|
|
_OUTPUTS : 0
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_AND
|
|
_LD_OPERATOR : 3
|
|
_LD_OR
|
|
_LD_OPERATOR : 2
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Request
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Latch
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Reset
|
|
_EXPRESSION
|
|
_NEGATIV
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Done
|
|
_EXPRESSION
|
|
_NEGATIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 0
|
|
ENABLELIST_END
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
gProdBrixRecovery_Latch
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_AND
|
|
_LD_OPERATOR : 2
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Latch
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Wait
|
|
_EXPRESSION
|
|
_NEGATIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 0
|
|
ENABLELIST_END
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
gProdBrixRecovery_Running
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Latch
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 0
|
|
ENABLELIST_END
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
gH_ProdBrixRecoveryRun
|
|
_NETWORK
|
|
|
|
_COMMENT
|
|
|
|
_END_COMMENT
|
|
_LD_ASSIGN
|
|
_LD_CONTACT
|
|
gProdBrixRecovery_Qualifier
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_EXPRESSION
|
|
_POSITIV
|
|
|
|
|
|
ENABLELIST : 1
|
|
_ASSIGN
|
|
_FUNCTIONBLOCK
|
|
mProductElapsedONS
|
|
_BOX_EXPR : 1
|
|
_ENABLED
|
|
_OPERATOR
|
|
_BOX_EXPR : 2
|
|
_OPERATOR
|
|
_BOX_EXPR : 2
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
gH_ProductTotalizer
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
0
|
|
_EXPRESSION
|
|
_POSITIV
|
|
GT
|
|
_OPERATOR
|
|
_BOX_EXPR : 2
|
|
_OPERATOR
|
|
_BOX_EXPR : 2
|
|
_OPERATOR
|
|
_BOX_EXPR : 1
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
gH_ProductTotalizer
|
|
_EXPRESSION
|
|
_POSITIV
|
|
REAL_TO_DINT
|
|
_OPERATOR
|
|
_BOX_EXPR : 1
|
|
_OPERATOR
|
|
_BOX_EXPR : 2
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
gProdAmountInSerpentine
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
2
|
|
_EXPRESSION
|
|
_POSITIV
|
|
MUL
|
|
_EXPRESSION
|
|
_POSITIV
|
|
REAL_TO_DINT
|
|
_EXPRESSION
|
|
_POSITIV
|
|
MOD
|
|
_OPERAND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
0
|
|
_EXPRESSION
|
|
_POSITIV
|
|
EQ
|
|
_EXPRESSION
|
|
_POSITIV
|
|
AND
|
|
_EXPRESSION
|
|
_POSITIV
|
|
R_TRIG
|
|
_OUTPUTS : 0
|
|
_EXPRESSION
|
|
_POSITIV
|
|
_OUTPUTS : 1
|
|
_OUTPUT
|
|
_POSITIV
|
|
_NO_SET
|
|
mProductElapsed
|
|
ENABLELIST_END
|
|
_OUTPUTS : 0
|
|
|
|
END_PROGRAM
|
|
ACTION BrixCalc:
|
|
IF gActualRecipe_Syrup_Brix<>0 AND gActualRecipe_Syrup_Brix_Fact<>0 THEN
|
|
mSyrPerc := gProductBrix / (gActualRecipe_Syrup_Brix * gActualRecipe_Syrup_Brix_Fact) ;
|
|
mSyrupKgMissing := (mQSugarNominal - mQSugarActual) / (gActualRecipe_Syrup_Brix * gActualRecipe_Syrup_Brix_Fact) * 100 ;
|
|
END_IF
|
|
mH2OPerc := 1 - mSyrPerc;
|
|
IF mSyrPerc<>0 THEN
|
|
mRatio_M := mH2OPerc / mSyrPerc ;
|
|
END_IF
|
|
IF gH2O_Density<>0 THEN
|
|
mRatio_V := mRatio_M * gActualRecipe_SyrDens / gH2O_Density ;
|
|
mKgH2OToRecover := (mQH2OActual - mQH2ONominal) / gH2O_Density ;
|
|
END_IF
|
|
CASE gH_Blender_OPT_MeterType OF
|
|
1: ;
|
|
IF (mRatio_V+1)<>0 THEN
|
|
gProdDensFromMeter := gActualRecipe_SyrDens * (mRatio_M + 1) / (mRatio_V + 1) ; (* Maselli *)
|
|
ELSE
|
|
gProdDensFromMeter := 1.0 ;
|
|
END_IF
|
|
2: ;
|
|
gProdDensFromMeter := gProductDens ; (* Anton Paar *)
|
|
ELSE
|
|
gProdDensFromMeter := 1.0 ;
|
|
END_CASE
|
|
|
|
mQSugarNominal := (gTankProdAmount + gProdAmountInSerpentine) * gProdDensFromMeter * gActualRecipe_Beverage_Brix / 100 ;
|
|
mQSugarActual := (gTankProdAmount + gProdAmountInSerpentine) * gProdDensFromMeter * gProductBrix / 100 ;
|
|
mQH2ONominal := gTankProdAmount - mQSugarNominal ;
|
|
mQH2OActual := gTankProdAmount - mQSugarActual ;
|
|
IF gActualRecipe_SyrDens<>0 THEN
|
|
mTotalRecoverProd := (mSyrupKgMissing / gActualRecipe_SyrDens) * (gActualSP_RatioVol + 1);
|
|
END_IF
|
|
IF gActualSyrupDens<>0 THEN
|
|
mSyrupLitMissing := mSyrupKgMissing /gActualSyrupDens ;
|
|
END_IF
|
|
mTankSpaceAvail := (gProdTankVolume * gProdTankStopLvl / 100) - gTankProdAmount ;
|
|
IF mTankSpaceAvail>=2*gProdAmountInSerpentine THEN
|
|
mTooMuchProdInTank := FALSE;
|
|
ELSE
|
|
mTooMuchProdInTank := TRUE;
|
|
END_IF
|
|
END_ACTION
|
|
|