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

664 lines
14 KiB
Plaintext

(* @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