(* @PATH := '\/TASK2_ControlMain\/Blender_Procedure' *) (* @SYMFILEFLAGS := '59392' *) PROGRAM SyrBrix_Autocorrection VAR mSyrBrix_AutoCorrReqTP : TP ; mSyrBrix_AutoCorrReqTP1 : TP ; mAuxONS : R_TRIG ; mAuxONS1 : R_TRIG ; mAuxONS2 : R_TRIG ; m2sONS : BOOL ; mProdSyrFactAcq : BOOL ; mLatchONS : BOOL ; mSyrupFactFlt : LowPassFilter ; mProdSyrFact : REAL ; mSyrupMFMFactFlt : LowPassFilter ; mSyrMFMFact : REAL ; mZeroTest : BOOL ; mZeroTest1 : BOOL ; mDummy : BOOL ; END_VAR VAR_OUTPUT EN_Out : BOOL ; END_VAR (* @END_DECLARATION := '0' *) _LD_BODY _NETWORKS : 24 _NETWORK _COMMENT Syrup Autocorrection means that the measured syrup brix AND syrup density from meter, are used instead OF the one from the recipe, TO calculate the volumetric ratio. Activated only IF the beverage is sugar based. _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 6 _LD_CONTACT gBlenderProdMode _EXPRESSION _POSITIV _LD_CONTACT gSugarBeverage _EXPRESSION _POSITIV _LD_CONTACT gFirstProd_Done _EXPRESSION _POSITIV _LD_CONTACT gWaterRecipe _EXPRESSION _NEGATIV _LD_CONTACT gBlenderRinseMode _EXPRESSION _NEGATIV _LD_CONTACT gBlenderSuppliesOk _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Qualifier _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_OR _LD_OPERATOR : 2 _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gSyrRunOut_Latch _EXPRESSION _POSITIV _FUNCTIONBLOCK mSyrBrix_AutoCorrReqTP _BOX_EXPR : 2 _EMPTY _OPERAND _EXPRESSION _POSITIV t#1s _EXPRESSION _POSITIV TP _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET _EMPTY _EXPRESSION _POSITIV _LD_AND _LD_OPERATOR : 3 _LD_CONTACT gH_CMD_SyrAutoReq _EXPRESSION _POSITIV _LD_CONTACT gSyrRunOut_Latch _EXPRESSION _NEGATIV _FUNCTIONBLOCK mAuxONS _BOX_EXPR : 1 _EMPTY _EXPRESSION _POSITIV R_TRIG _OUTPUTS : 0 _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Request _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_CONTACT gSyrAutoCorr_Qualifier _EXPRESSION _NEGATIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Reset _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_OR _LD_OPERATOR : 2 _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gH_Blender_OPT_SyrBrixMeter _EXPRESSION _POSITIV _LD_CONTACT gmPDS1000Error _EXPRESSION _POSITIV _EXPRESSION _POSITIV _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gH_Blender_OPT_SyrBrixMeter _EXPRESSION _NEGATIV _LD_CONTACT gSyrupMFM_Fault _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Wait _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 4 _LD_OR _LD_OPERATOR : 2 _LD_CONTACT gSyrAutoCorr_Request _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _POSITIV _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Done _EXPRESSION _NEGATIV _LD_CONTACT gSyrAutoCorr_Reset _EXPRESSION _NEGATIV _LD_CONTACT gSyrRunOut_Done _EXPRESSION _NEGATIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Latch _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _POSITIV _FUNCTIONBLOCK mAuxONS2 _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 gSyrAutoCorr_Latch _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Wait _EXPRESSION _NEGATIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Running _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _EMPTY _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _FUNCTIONBLOCK ??? _BOX_EXPR : 0 _ENABLED _EXPRESSION _POSITIV SyrBrix_Autocorrection.SyrupCorrPerc _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 : 2 _LD_CONTACT gClock_2s _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 m2sONS _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 5 _LD_CONTACT gSyrAutoCorr_Qualifier _EXPRESSION _POSITIV _LD_CONTACT gPV_SyrBrixOk _EXPRESSION _POSITIV _LD_CONTACT gFirstProd_Done _EXPRESSION _POSITIV _LD_CONTACT gBlenderEnToRamp _EXPRESSION _POSITIV _LD_CONTACT m2sONS _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET mProdSyrFactAcq _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _EMPTY _EXPRESSION _POSITIV ENABLELIST : 2 _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV mProdSyrFact _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV EQ _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gProdRunSyrFact _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV EQ _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET mZeroTest _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV mSyrMFMFact _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV EQ _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gProdRunSyrMFMFact _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV EQ _EXPRESSION _POSITIV OR _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET mZeroTest1 ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT This segment calculates the Syrup Factor during production, so when the Surup Run Out starts OR the Autocorrection is activated, the actual syrup brix doesn't change and so also the actual ratio doesn't. _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 3 _LD_CONTACT mZeroTest _EXPRESSION _NEGATIV _LD_CONTACT mProdSyrFactAcq _EXPRESSION _POSITIV _LD_CONTACT gH_Blender_OPT_SyrBrixMeter _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 3 _ENABLED _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gSyrAutoCorr_Latch _OPERAND _EXPRESSION _POSITIV gSyrRunOut_Latch _EXPRESSION _POSITIV OR _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gActualRecipe_Syrup_Brix _OPERATOR _BOX_EXPR : 2 _OPERATOR _BOX_EXPR : 3 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gMeterSyrBrix _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV EQ _OPERAND _EXPRESSION _POSITIV gMeterSyrBrix _OPERAND _EXPRESSION _POSITIV gActualRecipe_Syrup_Brix _EXPRESSION _POSITIV SEL _OPERAND _EXPRESSION _POSITIV gActualRecipe_Syrup_Brix_Fact _EXPRESSION _POSITIV MUL _EXPRESSION _POSITIV DIV _OPERAND _EXPRESSION _POSITIV mProdSyrFact _EXPRESSION _POSITIV SEL _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET mProdSyrFact ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT This segment calculates the Syrup Factor during production, so when the Surup Run Out starts OR the Autocorrection is activated, the actual syrup brix doesn't change and so also the actual ratio doesn't. _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT mZeroTest1 _EXPRESSION _NEGATIV _LD_CONTACT mProdSyrFactAcq _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 3 _ENABLED _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gSyrAutoCorr_Latch _OPERAND _EXPRESSION _POSITIV gSyrRunOut_Latch _EXPRESSION _POSITIV OR _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gActualRecipe_Syrup_Brix _OPERATOR _BOX_EXPR : 2 _OPERATOR _BOX_EXPR : 3 _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gMFM_Syrup1Brix _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV EQ _OPERAND _EXPRESSION _POSITIV gMFM_Syrup1Brix _OPERAND _EXPRESSION _POSITIV gActualRecipe_Syrup_Brix _EXPRESSION _POSITIV SEL _OPERAND _EXPRESSION _POSITIV gActualRecipe_Syrup_Brix_Fact _EXPRESSION _POSITIV MUL _EXPRESSION _POSITIV DIV _OPERAND _EXPRESSION _POSITIV mSyrMFMFact _EXPRESSION _POSITIV SEL _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET mSyrMFMFact ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_OR _LD_OPERATOR : 3 _LD_CONTACT mZeroTest _EXPRESSION _POSITIV _LD_CONTACT gFirstProd_Latch _EXPRESSION _POSITIV _LD_CONTACT gSyrBrixOutSpec_Fault _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 1 _ENABLED _OPERAND _EXPRESSION _POSITIV 1 _EXPRESSION _POSITIV MOVE _EXPRESSION _POSITIV _OUTPUTS : 2 _OUTPUT _POSITIV _NO_SET gProdRunSyrFact _OUTPUT _POSITIV _NO_SET mProdSyrFact ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_OR _LD_OPERATOR : 3 _LD_CONTACT mZeroTest1 _EXPRESSION _POSITIV _LD_CONTACT gFirstProd_Latch _EXPRESSION _POSITIV _LD_CONTACT gSyrBrixOutSpec_Fault _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 1 _ENABLED _OPERAND _EXPRESSION _POSITIV 1 _EXPRESSION _POSITIV MOVE _EXPRESSION _POSITIV _OUTPUTS : 2 _OUTPUT _POSITIV _NO_SET gProdRunSyrMFMFact _OUTPUT _POSITIV _NO_SET mSyrMFMFact ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT mProdSyrFactAcq _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _NEGATIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _FUNCTIONBLOCK mSyrupFactFlt _BOX_EXPR : 3 _ENABLED _OPERAND _EXPRESSION _POSITIV mProdSyrFact _OPERAND _EXPRESSION _POSITIV 12 _OPERAND _EXPRESSION _POSITIV TRUE _EXPRESSION _POSITIV LowPassFilter _OUTPUTS : 0 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gProdRunSyrFact ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT mProdSyrFactAcq _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _NEGATIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _FUNCTIONBLOCK mSyrupMFMFactFlt _BOX_EXPR : 3 _ENABLED _OPERAND _EXPRESSION _POSITIV mSyrMFMFact _OPERAND _EXPRESSION _POSITIV 12 _OPERAND _EXPRESSION _POSITIV TRUE _EXPRESSION _POSITIV LowPassFilter _OUTPUTS : 0 _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gProdRunSyrMFMFact ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gAlwaysOff _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Request _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 2 _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gProdRunSyrFact _OPERAND _EXPRESSION _POSITIV gH_A_Recipe_SyrupFactor _EXPRESSION _POSITIV MUL _EXPRESSION _POSITIV _OUTPUTS : 2 _OUTPUT _POSITIV _NO_SET gH_A_Recipe_SyrupFactor _OUTPUT _POSITIV _NO_SET gActualRecipe_Syrup_Brix_Fact _ASSIGN _OPERATOR _BOX_EXPR : 1 _ENABLED _OPERAND _EXPRESSION _POSITIV TRUE _EXPRESSION _POSITIV MOVE _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gH_SyrFactUpdate ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _POSITIV _LD_CONTACT gBlenderBlending _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gR_Out_SYR_PID _OPERAND _EXPRESSION _POSITIV 95.0 _EXPRESSION _POSITIV GT _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gMinRatio ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _POSITIV _LD_CONTACT gBlenderBlending _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gH_SyrupBrixCorrection _OPERAND _EXPRESSION _POSITIV 52 _EXPRESSION _POSITIV GT _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gMaxSyrAutoCorrDone ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _NEGATIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 2 _OUTPUT _NEGATIV _SET gMinRatio _OUTPUT _NEGATIV _SET gMaxSyrAutoCorrDone _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_CONTACT gSyrAutoCorr_Latch _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gH_SyrBrixAutoRun _NETWORK _COMMENT Message Syrup Autocorrection Running TO HMI _END_COMMENT _LD_ASSIGN _LD_CONTACT gSyrAutoCorr_Running _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gH_Status004 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_OR _LD_OPERATOR : 2 _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gSyrRunOut_Latch _EXPRESSION _POSITIV _LD_OR _LD_OPERATOR : 2 _LD_CONTACT gMaxSyrAutoCorrDone _EXPRESSION _POSITIV _LD_CONTACT gMinRatio _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV _LD_AND _LD_OPERATOR : 3 _LD_CONTACT gSyrAutoCorr_Request _EXPRESSION _POSITIV _LD_CONTACT mLatchONS _EXPRESSION _NEGATIV _LD_CONTACT gSyrRunOut_Latch _EXPRESSION _NEGATIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV _LD_CONTACT gSyrAutoCorr_Running _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrAutoCorr_Done END_PROGRAM ACTION SyrupCorrPerc: IF gSyrAutoCorr_Latch AND gActualRecipe_Syrup_Brix_Fact<>0 AND gActualRecipe_Syrup_Brix<>0 THEN gH_SyrupBrixCorrection := 100.0 - (gActualSyrupBrix / (gActualRecipe_Syrup_Brix * gActualRecipe_Syrup_Brix_Fact) * 100.0) ; ELSE gH_SyrupBrixCorrection := 0.0 ; END_IF END_ACTION