(* @PATH := '\/TASK0_VOID' *) (* @SYMFILEFLAGS := '59392' *) PROGRAM MFMAnalog_Values VAR mCarboCO2DeltaPSim : REAL ; mTemp : MFM_Real_Struct ; mAuxONS : F_TRIG ; mBlendStopONS : BOOL ; mBlendStopDly : TOF ; mAuxTP : TP ; mH2OValveSlew : SlewLimit ; mH2OFlowFlted : LowPassFilter ; mSyrValveSlew : SlewLimit ; mSyrFlowFlted : LowPassFilter ; mCarboCO2ValveSlew : SlewLimit ; mCarboCO2FlowFlted : LowPassFilter ; mWaterFlowTmp : REAL ; mSyrupFlowTmp : REAL ; mCarboCO2FlowTmp : REAL ; mCO2InjPressure : REAL ; mWaterFlowDld : Delay ; mSyrupFlowDld : Delay ; mCarboCO2FlowDld : Delay ; mWaterVFMError : LREAL ; mWaterDRand : FW_DRand ; mCO2WaterEffectDRand : FW_DRand ; mCO2WaterCoupling : REAL ; mSyrupMFMError : LREAL ; mSyrupDRand : FW_DRand ; mCO2MFMError : LREAL ; mCO2DRand : FW_DRand ; mH2OTotFlted : LowPassFilter ; mSyrupTotFlted : LowPassFilter ; mSyrupDensFlted : LowPassFilter ; mSyrupBrixFlted : LowPassFilter ; mSyrupTempFlted : LowPassFilter ; mCarboCO2TotFlted : LowPassFilter ; mCarboCO2TempFlted : LowPassFilter ; mCarboCO2DensFlted : LowPassFilter ; mCO2InjPressFlted : LowPassFilter ; mProdFlowFlt : LowPassFilter ; mCO2DensSim : REAL ; mDummy : BOOL ; mProdFlowFlted : LowPassFilter; END_VAR VAR_OUTPUT EN_Out : BOOL ; END_VAR (* @END_DECLARATION := '0' *) IF NOT gH_Blender_OPT_Simulation THEN IF gH_Blender_OPT_Conductimeter_Profibus THEN mTemp := ConvertReal(gLowCond_Node15 ) ; gLowCond_Conductivity := mTemp.Analog_Value ; gLowCond_Conductivity_State := mTemp.Value_State ; gIn_C2_Conductivity_Water := 1000*gLowCond_Conductivity; mTemp := ConvertReal(gLowCondTemp_Node15 ) ; gLowCond_Temperature := mTemp.Analog_Value ; gLowCond_Temperature_State := mTemp.Value_State ; gCIPReturnTemp_PV:=gLowCond_Temperature; mTemp := ConvertReal(gHighCond_Node16 ) ; gHighCond_Conductivity := mTemp.Analog_Value ; gHighCond_Conductivity_State := mTemp.Value_State ; gIn_C1_Conductivity_Caustic := 1*gHighCond_Conductivity; mTemp := ConvertReal(gHighCondTemp_Node16 ) ; gHighCond_Temperature := mTemp.Analog_Value ; gHighCond_Temperature_State := mTemp.Value_State ; gCIPHeaterTemp_PV:=gHighCond_Temperature; END_IF mTemp := ConvertReal( gProductFlow_Node17 ) ; gVFM_ProductFlow := mTemp.Analog_Value ; (* Product Flowrate Reading From FM Node17 *) gVFM_ProductFlow_State := mTemp.Value_State ; (* Product Flowrate Error Code *) mTemp := ConvertReal( gProductTotalizer1_Node17 ) ; gVFM_ProductTotalizer := mTemp.Analog_Value ; (* Product Totalizer Reading From FM Node17 *) gVFM_ProductTotalizer_State := mTemp.Value_State ; (* Product Totalizer Error Code *) mTemp := ConvertReal(gProdPH_Node18 ) ; gProdPH_PHValue := mTemp.Analog_Value ; gProdPH_PHValue_State := mTemp.Value_State ; mTemp := ConvertReal(gTempProdPH_Node18 ) ; gProdPH_Temperature := mTemp.Analog_Value ; gProdPH_Temperature_State := mTemp.Value_State ; mTemp := ConvertReal(gProdCond_Node19 ) ; gProdCond_Conductivity := mTemp.Analog_Value ; gProdCond_Conductivity_State := mTemp.Value_State ; gProductConductivity := 1000*gProdCond_Conductivity; mTemp := ConvertReal(gTempProdCond_Node19 ) ; gProdCond_Temperature := mTemp.Analog_Value ; gProdCond_Temperature_State := mTemp.Value_State ; mTemp := ConvertReal( gWaterFlow_Node20 ) ; gMFM_WaterFlow := mTemp.Analog_Value ; (* Water Flowrate Reading From VFM Node20 *) gMFM_WaterFlow_State := mTemp.Value_State ; (* Water Flowrate Error Code *) mTemp := ConvertReal( gWaterTotalizer1_Node20 ) ; gMFM_WaterTotalizer := mTemp.Analog_Value ; (* Water Totalizer Reading From VFM Node20 *) gMFM_WaterTotalizer_State := mTemp.Value_State ; (* Water Totalizer Error Code *) mTemp := ConvertReal( gSyrMassFlow_Node21 ) ; gMFM_Syrup1Flow := mTemp.Analog_Value ; (* Syrup Flowrate Reading From MFM Node21 *) gMFM_Syrup1Flow_State := mTemp.Value_State ; (* Syrup Flowrate Error Code *) mTemp := ConvertReal( gSyrTemperature_Node21 ) ; gMFM_TemperatureSyrup1 := mTemp.Analog_Value ; (* Syrup Temperature Reading From MFM Node21 *) IF gMFM_TemperatureSyrup1>200 THEN gMFM_TemperatureSyrup1 := gMFM_TemperatureSyrup1 - gZeroAbsolute ; END_IF gMFM_TemperatureSyrup1_State := mTemp.Value_State ;(* Syrup Temperature Error Code *) mTemp := ConvertReal(gSyrTotalizer1_Node21 ) ; gMFM_Syrup1Totalizer := mTemp.Analog_Value ; gMFM_Syrup1Totalizer_State := mTemp.Value_State ; mTemp := ConvertReal( gSyrDensity_Node21 ) ; gMFM_Syrup1Density := mTemp.Analog_Value + gH2O_Density_Off ; gMFM_Syrup1Density_State := mTemp.Value_State ; mTemp := ConvertReal( gSyrBrix_Node21 ) ; IF gWorkshopTest THEN gMFM_Syrup1Brix := gTestSyrBrix ; ELSE gMFM_Syrup1Brix := mTemp.Analog_Value ; END_IF gMFM_Syrup1Brix_State := mTemp.Value_State ; mTemp := ConvertReal( gCO2MassFlow_Node22 ) ; gMFM_CO2Flow := mTemp.Analog_Value ; gMFM_CO2Flow_State := mTemp.Value_State ; mTemp := ConvertReal( gCO2Temperature_Node22 ) ; gMFM_CO2Temperature := mTemp.Analog_Value ; IF gMFM_CO2Temperature>200 THEN gMFM_CO2Temperature := gMFM_CO2Temperature - gZeroAbsolute ; END_IF gMFM_CO2Temperature_State := mTemp.Value_State ; mTemp := ConvertReal( gCO2Density_Node22 ) ; gMFM_CO2Density := mTemp.Analog_Value ; gMFM_CO2Density_State := mTemp.Value_State ; mTemp := ConvertReal( gCO2Totalizer1_Node22 ) ; gMFM_CO2Totalizer := mTemp.Analog_Value ; gMFM_CO2Totalizer_State := mTemp.Value_State ; mCO2InjPressure := CO2InjPressure(i_Temp:=gMFM_CO2Temperature ,i_Dens:=gMFM_CO2Density) ; ELSE (* Simulation *) IF gBlenderProdMode THEN (* Calculates the flow across the water valve *) mH2OValveSlew(i_InValue:=gR_Out_H2O_PID, i_SlewMax:=15,i_Cycle:=gTask0Cycle_Time, out:=gH2OValveSlewOut) ; IF (gCarboWaterLine_Running OR gDeairStartUp_Running) AND gH_EV22_Status THEN gH2OValveSlewOut := 4 ; END_IF mCarboCO2DeltaPSim := DeltaP(i_Flow:=gCarboCO2FlowSim, i_K:= gCarboCO2ValveCv, i_Valve:=gCarboCO2ValveSlewOut) ; mWaterFlowTmp := ValveFlow(i_DeltaP:=gWaterValveDeltaP-0.02*mCarboCO2DeltaPSim ,i_ValveOp:=gH2OValveSlewOut ,i_KFF:=0.055, i_Dens:=gH2O_Density ) + mWaterVFMError + mCO2WaterCoupling ; mH2OFlowFlted(i_Value:=mWaterFlowTmp,i_Num:=10 ,i_Enable:=TRUE) ; mWaterFlowDld(i_Value:=mH2OFlowFlted.FilterOut ,i_Sample:=2 ) ; mCO2WaterEffectDRand(nSeed:=0) ; IF (gCarboStillProduct OR gH_Blender_OPT_DoubleDeair) AND gWaterPipe_Vel>0 AND gBlenderStableFlow AND gAlwaysOff THEN mCO2WaterCoupling := mCO2WaterEffectDRand.fRndNum * (1 / EXPT(gWaterPipe_Vel,3)) * mWaterFlowDld.i_out * 0.02 ; ELSE mCO2WaterCoupling := 0.0 ; END_IF mWaterDRand(nSeed:=0) ; mWaterVFMError := mWaterDRand.fRndNum * gWaterVFMCalcError ; gWaterFlowSim := mWaterFlowDld.i_out ; mSyrValveSlew(i_InValue:=gR_Out_SYR_PID, i_SlewMax:=20,i_Cycle:=gTask0Cycle_Time, out:=gSyrValveSlewOut) ; mSyrupFlowTmp := ValveFlow(i_DeltaP:=gSyrupValveDeltaP ,i_ValveOp:=gSyrValveSlewOut ,i_KFF:=0.35, i_Dens:=gActualRecipe_SyrDens) + mSyrupMFMError ; mSyrFlowFlted(i_Value:=mSyrupFlowTmp,i_Num:=10 ,i_Enable:=TRUE) ; mSyrupFlowDld(i_Value:=mSyrFlowFlted.FilterOut ,i_Sample:=5) ; mSyrupDRand(nSeed:=0) ; mSyrupMFMError := mSyrupDRand.fRndNum * gSyrupMFMCalcError ; gSyrupFlowSim := mSyrupFlowDld.i_out ; mCarboCO2ValveSlew(i_InValue:=gR_Out_CO2_PID, i_SlewMax:=20,i_Cycle:=gTask0Cycle_Time, out:=gCarboCO2ValveSlewOut) ; mCarboCO2FlowTmp := ValveFlow(i_DeltaP:=gCarboCO2ValveDeltaP ,i_ValveOp:=gCarboCO2ValveSlewOut ,i_KFF:=0.34, i_Dens:=gCO2_Density / 1000) + mCO2MFMError ; mCarboCO2FlowFlted(i_Value:=mCarboCO2FlowTmp ,i_Num:=10 ,i_Enable:=TRUE) ; mCarboCO2FlowDld(i_Value:=mCarboCO2FlowFlted.FilterOut ,i_Sample:=3) ; mCO2DRand(nSeed:=0) ; mCO2MFMError := mCO2DRand.fRndNum * gCO2MFMCalcError ; gCarboCO2FlowSim := mCarboCO2FlowDld.i_out ; gMFM_WaterFlow := gWaterFlowSim ; gMFM_Syrup1Flow := gSyrupFlowSim ; gMFM_CO2Flow := gCarboCO2FlowSim ; mCO2DensSim := 0.028 + 0.0015 * SIN(Omegat) ; mCO2InjPressure := CO2InjPressure(i_Temp:=20 ,i_Dens:=mCO2DensSim) ; gMFM_Syrup1Brix := gTestSyrBrix ; gMFM_Syrup1Density := SyrupDensity(i_SyrupBrix:=gTestSyrBrix) ; END_IF END_IF mCO2InjPressFlted(i_Value:=mCO2InjPressure,i_Num:=8 ,i_Enable:=TRUE) ; gCO2InjPressureCalc := LIMIT(10, mCO2InjPressFlted.FilterOut, 20) * 1.0 ; mProdFlowFlted(i_Value:=gVFM_ProductFlow,i_Num:=8 ,i_Enable:=TRUE) ; gProd_Flow_Meas := mProdFlowFlted.FilterOut ; IF gBlenderProdMode THEN mH2OFlowFlted(i_Value:=gMFM_WaterFlow,i_Num:=6 ,i_Enable:=gBlenderFlowFltEn) ; gH2O_Flow_Meas := mH2OFlowFlted.FilterOut ; mSyrFlowFlted(i_Value:=gMFM_Syrup1Flow,i_Num:=6 ,i_Enable:=gBlenderFlowFltEn) ; gSYR_Flow_Meas := mSyrFlowFlted.FilterOut ; mCarboCO2FlowFlted(i_Value:=gMFM_CO2Flow,i_Num:=6 ,i_Enable:=gBlenderFlowFltEn) ; MFMAnalog_Values.Totalizers ; ELSE mH2OFlowFlted(i_Value:=gMFM_WaterFlow,i_Num:=10 ,i_Enable:=gBlenderFlowFltEn) ; gH2O_Flow_Meas := mH2OFlowFlted.FilterOut ; mSyrFlowFlted(i_Value:=gMFM_Syrup1Flow,i_Num:=0 ,i_Enable:=gBlenderFlowFltEn) ; gSYR_Flow_Meas := mSyrFlowFlted.FilterOut ; mCarboCO2FlowFlted(i_Value:=gMFM_CO2Flow,i_Num:=0 ,i_Enable:=gBlenderFlowFltEn) ; END_IF IF gCO2_Density<>0 THEN gCO2_Flow_Meas := mCarboCO2FlowFlted.FilterOut / gCO2_Density ; END_IF IF gActualSyrupDens > 0 THEN gSYR_Vol_Flow_Meas := gSYR_Flow_Meas / gActualSyrupDens ; ELSE gSYR_Vol_Flow_Meas := gSYR_Flow_Meas ; END_IF mProdFlowFlt(i_Value:=gH2O_Flow_Meas + gSYR_Vol_Flow_Meas,i_Num:=18, i_Enable:=gBlenderFlowFltEn) ; gActual_Prod_Flow := mProdFlowFlt.FilterOut ; MFMAnalog_Values.ResetTotalizers(); END_PROGRAM ACTION ResetTotalizers: _LD_BODY _NETWORKS : 1 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_OR _LD_OPERATOR : 3 _LD_CONTACT gBlenderCIPMode _EXPRESSION _POSITIV _LD_CONTACT gBlenderRinseMode _EXPRESSION _POSITIV _LD_CONTACT gSLIMResetCounter _EXPRESSION _POSITIV _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 1 _ASSIGN _OPERATOR _BOX_EXPR : 1 _ENABLED _OPERAND _EXPRESSION _POSITIV 0 _EXPRESSION _POSITIV MOVE _EXPRESSION _POSITIV _OUTPUTS : 8 _OUTPUT _POSITIV _NO_SET gWaterTotal _OUTPUT _POSITIV _NO_SET gSyrupTotal _OUTPUT _POSITIV _NO_SET gCO2Total _OUTPUT _POSITIV _NO_SET gProductVFMTotal _OUTPUT _POSITIV _NO_SET gCO2TempTot _OUTPUT _POSITIV _NO_SET gSyrupTempTot _OUTPUT _POSITIV _NO_SET gWaterTempTot _OUTPUT _POSITIV _NO_SET gProductVFMTempTot ENABLELIST_END _OUTPUTS : 0 END_ACTION ACTION Totalizers: _LD_BODY _NETWORKS : 4 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 3 _LD_CONTACT gBlenderBlending _EXPRESSION _POSITIV _FUNCTIONBLOCK mBlendStopDly _BOX_EXPR : 2 _EMPTY _OPERAND _EXPRESSION _POSITIV t#2s _EXPRESSION _POSITIV TOF _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET _EMPTY _FUNCTIONBLOCK mAuxONS _BOX_EXPR : 1 _EMPTY _EXPRESSION _POSITIV F_TRIG _OUTPUTS : 0 _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET mBlendStopONS _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_CONTACT mBlendStopONS _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 4 _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gMFM_WaterTotalizer _OPERAND _EXPRESSION _POSITIV gWaterTempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gWaterTempTot _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gMFM_Syrup1Totalizer _OPERAND _EXPRESSION _POSITIV gSyrupTempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrupTempTot _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gMFM_CO2Totalizer _OPERAND _EXPRESSION _POSITIV 1000 _EXPRESSION _POSITIV DIV _OPERAND _EXPRESSION _POSITIV gCO2TempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gCO2TempTot _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gVFM_ProductTotalizer _OPERAND _EXPRESSION _POSITIV gProductVFMTempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gProductVFMTempTot ENABLELIST_END _OUTPUTS : 0 _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_AND _LD_OPERATOR : 2 _LD_OR _LD_OPERATOR : 2 _LD_AND _LD_OPERATOR : 2 _LD_CONTACT gAlwaysOff _EXPRESSION _POSITIV _LD_CONTACT mBlendStopONS _EXPRESSION _POSITIV _EXPRESSION _POSITIV _LD_CONTACT gBlenderRun_Running _EXPRESSION _POSITIV _EXPRESSION _POSITIV _FUNCTIONBLOCK mAuxTP _BOX_EXPR : 2 _EMPTY _OPERAND _EXPRESSION _POSITIV t#1s _EXPRESSION _POSITIV tp _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET _EMPTY _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 0 ENABLELIST_END _OUTPUTS : 1 _OUTPUT _POSITIV _SET gBlendResetTotalizer _NETWORK _COMMENT _END_COMMENT _LD_ASSIGN _LD_CONTACT gBlenderBlending _EXPRESSION _POSITIV _EXPRESSION _POSITIV ENABLELIST : 4 _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gMFM_WaterTotalizer _OPERAND _EXPRESSION _POSITIV gWaterTempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gWaterTotal _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gMFM_Syrup1Totalizer _OPERAND _EXPRESSION _POSITIV gSyrupTempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gSyrupTotal _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERATOR _BOX_EXPR : 2 _OPERAND _EXPRESSION _POSITIV gMFM_CO2Totalizer _OPERAND _EXPRESSION _POSITIV 1000 _EXPRESSION _POSITIV DIV _OPERAND _EXPRESSION _POSITIV gCO2TempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gCO2Total _ASSIGN _OPERATOR _BOX_EXPR : 2 _ENABLED _OPERAND _EXPRESSION _POSITIV gVFM_ProductTotalizer _OPERAND _EXPRESSION _POSITIV gProductVFMTempTot _EXPRESSION _POSITIV ADD _EXPRESSION _POSITIV _OUTPUTS : 1 _OUTPUT _POSITIV _NO_SET gProductVFMTotal ENABLELIST_END _OUTPUTS : 0 END_ACTION