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

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