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

559 lines
12 KiB
Plaintext

(* @PATH := '\/TASK2_ControlMain\/CIP' *)
(* @SYMFILEFLAGS := '59392' *)
PROGRAM Exec_Simple_CIP
VAR_INPUT
Start : BOOL ;
Hold : BOOL ;
StepUp : BOOL ;
StepDown : BOOL ;
Inizialize : BOOL ;
Clock : BOOL ;
END_VAR
VAR
mSteppingUp : BOOL ;
mSteppingDown : BOOL ;
mStepTimeValue : UINT ;
mWordOut0 : ARRAY [0..15] OF BOOL ; (* Temporary Word Out0 To Valves *)
mWordOut1 : ARRAY [0..15] OF BOOL ; (* Temporary Word Out1 To Valves *)
mWordOut2 : ARRAY [0..15] OF BOOL ; (* Temporary Word Out2 To Valves *)
mWordOut3 : ARRAY [0..15] OF BOOL ; (* Temporary Word Out3 To Valves *)
mWaitEventReqWordTemp : WORD ; (* *)
mWaitEventReqDWord : DWORD ; (* Waiting Conditions Word From Simple Program - Request - *)
mWaitEventStatusDWord : DWORD ; (* Waiting Conditions Word From Simple Program *)
mWaitAnyCond : BOOL ; (* WOR of the 2 Conditions Word *)
mClock_ONS : R_TRIG ;
mStepUp_ONS : R_TRIG ;
mStepDown_ONS : R_TRIG ;
mInizialize_ONS : R_TRIG ;
mCycleCount : UINT ;
mMemCopyResult : UDINT ;
mDummy : BOOL ;
END_VAR
VAR_OUTPUT
EN_Out : BOOL ;
END_VAR
(* @END_DECLARATION := '0' *)
mInizialize_ONS(CLK:=Inizialize) ;
mStepUp_ONS(CLK:=StepUp AND NOT gCIP_Completed) ;
mStepDown_ONS(CLK:=StepDown AND NOT gCIP_Inizialized) ;
mClock_ONS(CLK:=Clock) ;
IF gCIP_ProgramLoaded THEN
Exec_Simple_CIP.CopyCIPProgram ;
END_IF
IF mInizialize_ONS.Q THEN
Exec_Simple_CIP.CIP_Prog_Inizialize ;
ELSE
IF gActualSimpleNum = 0 THEN
gActualSimpleNum := 1 ;
END_IF
IF gActualSimpleNum>gCIPMaxSimpleNum THEN
gActualSimpleNum := gCIPMaxSimpleNum ;
END_IF
IF gActualStepNum = 0 THEN
gActualStepNum := 1 ;
END_IF
IF mStepUp_ONS.Q THEN
Exec_Simple_CIP.CIP_Prog_StepUp ;
END_IF
IF mStepDown_ONS.Q THEN
Exec_Simple_CIP.CIP_Prog_StepDown ;
END_IF
mStepTimeValue := gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_StepTime ;
mCycleCount := 0 ;
WHILE mStepTimeValue = 0 AND NOT gCIP_Completed AND NOT gCIP_Inizialized AND gActualStepNum<=gCIPMaxStepNum AND NOT (mCycleCount>gCIPMaxSimpleNum*gCIPMaxStepNum) DO
mCycleCount := mCycleCount + 1 ;
IF mStepUp_ONS.Q OR (gCIP_Run_Running AND mStepTimeValue = 0) THEN
mSteppingUp := TRUE ;
END_IF
IF mStepDown_ONS.Q THEN
mSteppingDown := TRUE ;
END_IF
IF mSteppingUp THEN
Exec_Simple_CIP.CIP_Prog_StepUp ;
ELSIF NOT (mSteppingUp OR mSteppingDown) THEN
EXIT ;
END_IF
IF mSteppingDown THEN
Exec_Simple_CIP.CIP_Prog_StepDown ;
ELSIF NOT (mSteppingUp OR mSteppingDown) THEN
EXIT ;
END_IF
mStepTimeValue := gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_StepTime ;
END_WHILE
mSteppingUp := FALSE ;
mSteppingDown := FALSE ;
IF mStepDown_ONS.Q THEN
IF gStepActualTime=0 THEN
gCIPTotalElapsedTime := gCIPTotalElapsedTime - mStepTimeValue ;
ELSE
gCIPTotalElapsedTime := gCIPTotalElapsedTime - gStepActualTime ;
END_IF
gStepActualTime := 0 ;
END_IF
IF Start THEN
Exec_Simple_CIP.Exec_Step ;
END_IF
END_IF
gH_Blender_CIP_LinkName := gActual_LinkProgName ;
IF gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleCode>0 THEN
gH_Blender_CIP_SimpleName := gActual_ArrSimpleProgName[gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleCode] ;
END_IF
gH_Blender_CIP_StepTime := LIMIT(0, ABS(mStepTimeValue - gStepActualTime), mStepTimeValue) ;
gH_Blender_CIP_TotalTime := LIMIT(0, ABS(gCIPTotalTime - gCIPTotalElapsedTime), gCIPTotalTime) ;
gH_Blender_CIP_StepNum := gActualStepNum ;
IF gCIPTotalTime>0 THEN
gH_Blender_CIP_LinkProgPerc := UDINT_TO_REAL(gCIPTotalElapsedTime) / UDINT_TO_REAL(gCIPTotalTime) * 100 ;
END_IF
IF mStepTimeValue>0 THEN
gH_Blender_CIP_SimpleProgPerc := UINT_TO_REAL(gStepActualTime) / UINT_TO_REAL(mStepTimeValue) * 100 ;
END_IF
gH_Blender_CIP_PV_HighCond := gIn_C1_Conductivity_Caustic ;
gH_Blender_CIP_PV_LowCond := gIn_C2_Conductivity_Water ;
gH_Blender_CIPHeaterTempPV := gCIPHeaterTemp_PV ;
gH_Blender_CIPReturnTempPV := gCIPReturnTemp_PV ;
END_PROGRAM
ACTION CIP_Prog_Completed:
gCIP_Completed := TRUE ;
mWaitAnyCond := FALSE ;
mWordOut0 := _Word_To_BoolArray(0) ;
mWordOut1 := mWordOut0 ;
mWordOut2 := mWordOut0 ;
mWordOut3 := mWordOut0 ;
mWaitEventReqDWord := 0 ;
mWaitEventStatusDWord := 0 ;
END_ACTION
ACTION CIP_Prog_Inizialize:
_LD_BODY
_NETWORKS : 1
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_EMPTY
_EXPRESSION
_POSITIV
ENABLELIST : 7
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
1
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gActualSimpleNum
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
1
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gActualStepNum
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gCIP_Completed
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
FALSE
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gCIP_WaitAnyCond
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gStepActualTime
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
TRUE
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gCIP_Inizialized
_ASSIGN
_OPERATOR
_BOX_EXPR : 1
_ENABLED
_OPERAND
_EXPRESSION
_POSITIV
0
_EXPRESSION
_POSITIV
MOVE
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
gCIPTotalElapsedTime
ENABLELIST_END
_OUTPUTS : 0
END_ACTION
ACTION CIP_Prog_StepDown:
IF gActualSimpleNum >= 1 THEN
IF gActualStepNum > 1 THEN
IF gStepActualTime<=0 THEN
gActualStepNum := gActualStepNum - 1 ;
END_IF
ELSIF gActualSimpleNum>1 THEN
gActualSimpleNum := gActualSimpleNum - 1 ;
gActualStepNum := gCIPMaxStepNum ;
END_IF
END_IF
IF gActualSimpleNum=1 AND gActualStepNum=1 THEN
gCIP_Inizialized := TRUE ;
ELSE
gCIP_Inizialized := FALSE ;
END_IF
IF gCIP_Completed THEN
gCIP_Completed := FALSE ;
END_IF
END_ACTION
ACTION CIP_Prog_StepUp:
IF gActualSimpleNum<gCIPMaxSimpleNum THEN
IF gActualStepNum<gCIPMaxStepNum THEN
gActualStepNum := gActualStepNum + 1 ;
ELSIF gActualStepNum = gCIPMaxStepNum THEN
gActualSimpleNum := gActualSimpleNum + 1 ;
gActualStepNum := 1 ;
END_IF
ELSIF gActualSimpleNum=gCIPMaxSimpleNum THEN
IF gActualStepNum<gCIPMaxStepNum THEN
gActualStepNum := gActualStepNum + 1 ;
ELSIF gActualStepNum = gCIPMaxStepNum THEN
IF mStepTimeValue=0 OR (mStepTimeValue<=gStepActualTime) THEN
Exec_Simple_CIP.CIP_Prog_Completed ;
END_IF
END_IF
END_IF
IF gCIP_Inizialized THEN
gCIP_Inizialized := FALSE ;
END_IF
IF mStepTimeValue>0 AND gH_Blender_CIP_ProgStepUp THEN
gCIPTotalElapsedTime := gCIPTotalElapsedTime + LIMIT(0, (mStepTimeValue - gStepActualTime), mStepTimeValue) ;
END_IF
gStepActualTime := 0 ;
END_ACTION
ACTION CopyCIPProgram:
_LD_BODY
_NETWORKS : 3
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_EMPTY
_EXPRESSION
_POSITIV
ENABLELIST : 1
_ASSIGN
_FUNCTION
_BOX_EXPR : 3
_ENABLED
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
gCIP_Run_Prog
_EXPRESSION
_POSITIV
ADR
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
gActualCIP_LinkProgram
_EXPRESSION
_POSITIV
ADR
_OPERATOR
_BOX_EXPR : 1
_OPERAND
_EXPRESSION
_POSITIV
gActualCIP_LinkProgram
_EXPRESSION
_POSITIV
SIZEOF
_EXPRESSION
_POSITIV
MEMCPY
_EXPRESSION
_POSITIV
_OUTPUTS : 1
_OUTPUT
_POSITIV
_NO_SET
mMemCopyResult
ENABLELIST_END
_OUTPUTS : 0
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_AND
_LD_OPERATOR : 2
_LD_CONTACT
gCIP_ProgramLoaded
_EXPRESSION
_POSITIV
_LD_CONTACT
gCIP_Completed
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_NEGATIV
_SET
gCIP_Completed
_NETWORK
_COMMENT
_END_COMMENT
_LD_ASSIGN
_LD_CONTACT
gCIP_ProgramLoaded
_EXPRESSION
_POSITIV
_EXPRESSION
_POSITIV
ENABLELIST : 0
ENABLELIST_END
_OUTPUTS : 1
_OUTPUT
_NEGATIV
_SET
gCIP_ProgramLoaded
END_ACTION
ACTION Exec_Step:
IF mClock_ONS.Q THEN (* One Second Clock *)
IF mStepTimeValue>gStepActualTime THEN
gCIP_Simple_Exec := gCIP_Run_Prog[gActualSimpleNum] ;
mWordOut0 := _Word_To_BoolArray(gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_OutWord_0) ;
mWordOut1 := _Word_To_BoolArray(gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_OutWord_1) ;
mWordOut2 := _Word_To_BoolArray(gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_OutWord_2) ;
mWordOut3 := _Word_To_BoolArray(gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_OutWord_3) ;
mWaitEventReqWordTemp:= gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_ControlWord1 ;
mWaitEventReqDWord := mWaitEventReqDWord AND mWaitEventReqWordTemp ;
mWaitEventReqDWord := SHL(mWaitEventReqDWord,16) ;
mWaitEventReqWordTemp := gCIP_Run_Prog[gActualSimpleNum].CIP_SimpleArray[gActualStepNum].CIP_ControlWord0 ;
mWaitEventReqDWord := mWaitEventReqDWord OR mWaitEventReqWordTemp ;
gCIP_WaitEventReq_Array := _DWord_To_BoolArray(mWaitEventReqDWord) ;
mWaitEventStatusDWord := _BoolArray_To_DWord(gCIP_WaitEventStatus_Array) ;
(* mWaitEventStateWord1 := _BoolArray_To_Word(gCIP_WaitEventState_Array1) ;*)
IF (mWaitEventReqDWord<>0) AND (mWaitEventReqDWord XOR mWaitEventStatusDWord)<>0 THEN
gCIP_WaitAnyCond := TRUE ;
ELSE
gCIP_WaitAnyCond := FALSE ;
END_IF
gCIP_SPHigh_Cond := gCIP_Run_Prog[gActualSimpleNum].CIP_SetPoint_HighCond ;
gCIP_SPLow_Cond := gCIP_Run_Prog[gActualSimpleNum].CIP_SetPoint_LowCond ;
gCIP_SPTemperature := gCIP_Run_Prog[gActualSimpleNum].CIP_SetPoint_Temp ;
IF NOT Hold AND NOT gCIP_Completed THEN
gStepActualTime := gStepActualTime + 1 ;
gCIPTotalElapsedTime := gCIPTotalElapsedTime + 1 ;
END_IF
ELSE
gStepActualTime := 1 ;
CIP_Prog_StepUp ;
END_IF
END_IF
(***********************************************************************************************************)
(* Transfer the X in the Simple program i-th Step to the Sp Sustain Memory *)
(***********************************************************************************************************)
gSp_CIP_Temp_En := mWordOut0[0] ; (* CIP Enable PID Control Temperature *)
gSp_EV01 := mWordOut0[1] ; (* EV01 Deair Tank Water Level Control Valve *)
gSp_EV02 := mWordOut0[2] ; (* EV02 Deair Tank Water Manual Valve *)
gSp_EV03 := mWordOut0[3] ; (* EV03 Syrup Tank Syrup Level Control Valve *)
gSp_EV04 := mWordOut0[4] ; (* EV04 Syrup Tank Syrup Manual Valve *)
gSp_CIP_CO2_Inj := mWordOut0[5] ; (* Enable CO2 Injection Uring CIP *)
gSp_EV14 := mWordOut0[6] ; (* EV14 Deair Tank Drain Valve *)
gSp_EV15 := mWordOut0[7] ; (* EV15 Product Tank Drain Valve *)
gSp_EV16 := mWordOut0[8] ; (* EV16 Syrup Tank Drain Valve *)
(*gSp_EV17 := NOT mWordOut0[9] ; (* EV17 Deair + Product Tank SprayBall Valve *)
(*gSp_EV61 := NOT mWordOut0[10] ; (* EV61 Syrup Tank SprayBall Valve *)
gSp_EV23 := mWordOut0[11] ; (* EV23 Serpentine Drain Valve *)
gSp_EV24 := NOT mWordOut0[12] ; (* EV24 Syrup Tank Recirc Valve *)
gSp_EV31 := mWordOut0[13] ; (* EV31 Venturi Suction Valve *)
gSp_EV32 := mWordOut0[14] ; (* EV32 Venturi Washing Valve *)
gSp_EV33 := mWordOut0[15] ; (* EV33 Sanitizier Inlet Valve 1 - Caustic - *)
gSp_EV34 := mWordOut1[0] ; (* EV34 Sanitizier Inlet Valve 2 *)
gSp_EV35 := mWordOut1[1] ; (* EV35 Sanitizier Inlet Valve 3 *)
gSp_EV36 := mWordOut1[2] ; (* EV36 Plant Recirc Valve *)
gSp_EV37 := mWordOut1[3] ; (* EV37 Plant Drain Valve *)
gSp_EV38 := mWordOut1[4] ; (* EV38 Plant Caustic Recovery Valve *)
gSp_CIPRunning := mWordOut1[5] ;
gSp_CIPDrainRequest := mWordOut1[6] ;
gSp_CIPHotPhase := mWordOut1[7] ;
mWordOut1[8] ;
mWordOut1[9] ;
gSp_P1 := mWordOut1[10] ; (* P1 Water Pump Run In CIP to get Prod Tank 100% level *)
gSp_SyrRoomPump := mWordOut1[11] ; (* Syrup Room Pump Run In CIP *)
mWordOut1[12] ;
mWordOut1[13] ;
mWordOut1[14] ;
mWordOut1[15] ;
mWordOut2[0] ;
mWordOut2[1] ;
mWordOut2[2] ;
mWordOut2[3] ;
mWordOut2[4] ;
mWordOut2[5] ;
mWordOut2[6] ;
mWordOut2[7] ;
mWordOut2[8] ;
mWordOut2[9] ;
mWordOut2[10] ;
mWordOut2[11] ;
mWordOut2[12] ;
mWordOut2[13] ;
mWordOut2[14] ;
mWordOut2[15] ;
mWordOut3[0] ;
mWordOut3[1] ;
mWordOut3[2] ;
mWordOut3[3] ;
mWordOut3[4] ;
mWordOut3[5] ;
mWordOut3[6] ;
mWordOut3[7] ;
mWordOut3[8] ;
mWordOut3[9] ;
mWordOut3[10] ;
mWordOut3[11] ;
mWordOut3[12] ;
mWordOut3[13] ;
mWordOut3[14] ;
mWordOut3[15] ;
END_ACTION