|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FB SEQ200 GLB: Programme selection + jump distributor |
|
|
|
Network 1: Show required temperature reached "HMI KEY".Message.TT302_Medium_Temperature_reached := "DI OUT P03".G320C.DRV.Support.LampON AND ABS("DI OUT P03".V307.Setpoint - "DI OUT P03".V307.Input) < "HMI KEY".SetPoint.TT302_Temperature_Deviation; |
|
|
|
Network 2: Force production abort IF "HMI KEY".Execute.Production_Abort AND #Support.SEQ226_Start THEN "DI MAIN GLB".P00.AutoCmpltMa_run := "HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production := "HMI KEY".Message.SBT1_Concentrate_Access_done := "HMI KEY".Message.SBT1_Water_Access_done := "HMI KEY".Message.SBT1_Untreated_Product_Filling_Complete := "HMI KEY".Message.Filling_Circular_Flow_With_Water_Complete := "HMI KEY".Message.Temperature_Preparation_With_Water_complete := "HMI KEY".Message.Filling_Circular_Flow_With_Product_Complete := "HMI KEY".Message.Temperature_Preparation_With_Product_complete := "HMI KEY".Message.SBT2_Product_Filling_Complete := "HMI KEY".Message.Production_With_Filler_Running := "HMI KEY".Message.Production_With_Filler_Complete := "HMI KEY".Message.CIP_Lye_Access_Complete := "HMI KEY".Message.CIP_Sterilisation_with_Water_Complete := "HMI KEY".Message.CIP_Sterilisation_Water_Access_Complete := FALSE; END_IF; |
|
|
|
Network 3: Liquid handling start / restart IF NOT "DI MAIN GLB".P00.AutoCmpltMa_run THEN #Support.SEQ210_Start := #Support.SEQ220_Start := #Support.SEQ221_Start := #Support.SEQ222_Start := #Support.SEQ223_Start := #Support.SEQ224_Start := #Support.SEQ225_Start := #Support.SEQ225_Start := #Support.SEQ226_Start := #Support.SEQ227_Start := #Support.SEQ228_Start := #Support.SEQ229_Start := #Support.SEQ240_Start := #Support.SEQ241_Start := #Support.SEQ242_Start := FALSE; ELSIF NOT "DI MAIN GLB".SET.SSM.S.steps AND "DI MAIN GLB".P00.CmpltMaRun_Imp THEN "DI MAIN GLB".P00.OM_HOME_POS_ON := #Support.SEQ201_Start := FALSE; // Liquid handling start / restart #Support.SEQ210_Start := "HMI KEY".Execute.Drainage_Selected; #Support.SEQ220_Start := "HMI KEY".Execute.Production_Selected AND NOT "HMI KEY".Message.SBT1_Untreated_Product_Filling_Complete; #Support.SEQ221_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.SBT1_Untreated_Product_Filling_Complete AND NOT "HMI KEY".Message.Filling_Circular_Flow_With_Water_Complete; #Support.SEQ222_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.Filling_Circular_Flow_With_Water_Complete AND NOT "HMI KEY".Message.Temperature_Preparation_With_Water_complete; #Support.SEQ223_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.Temperature_Preparation_With_Water_complete AND NOT "HMI KEY".Message.Filling_Circular_Flow_With_Product_Complete; #Support.SEQ224_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.Filling_Circular_Flow_With_Product_Complete AND NOT "HMI KEY".Message.Temperature_Preparation_With_Product_complete; #Support.SEQ225_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.Temperature_Preparation_With_Product_complete AND NOT "HMI KEY".Message.SBT2_Product_Filling_Complete; #Support.SEQ226_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.SBT2_Product_Filling_Complete; #Support.SEQ227_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production; #Support.SEQ228_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Message.Product_Inlet_Over_Heated_whilst_Production; #Support.SEQ229_Start := "HMI KEY".Execute.Production_Selected AND "HMI KEY".Execute.Production_Abort; #Support.SEQ240_Start := "HMI KEY".Execute.CIP_Selected AND NOT "HMI KEY".Message.CIP_with_Lye_Complete; #Support.SEQ241_Start := "HMI KEY".Execute.CIP_Selected AND "HMI KEY".Message.CIP_with_Lye_Complete AND NOT "HMI KEY".Message.CIP_Sterilisation_with_Water_Complete; #Support.SEQ242_Start := "HMI KEY".Execute.CIP_Selected AND "HMI KEY".Message.CIP_Sterilisation_with_Water_Complete; #Support.SEQ200_Start := "HMI KEY".Execute.Production_Selected OR "HMI KEY".Execute.Drainage_Selected OR "HMI KEY".Execute.CIP_Selected; IF #Support.SEQ210_Start OR "HMI KEY".Message.Production_With_Filler_Complete OR "HMI KEY".Message.CIP_Sterilisation_with_Water_Complete THEN "HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production := "HMI KEY".Message.SBT1_Concentrate_Access_done := "HMI KEY".Message.SBT1_Water_Access_done := "HMI KEY".Message.SBT1_Untreated_Product_Filling_Complete := "HMI KEY".Message.Filling_Circular_Flow_With_Water_Complete := "HMI KEY".Message.Temperature_Preparation_With_Water_complete := "HMI KEY".Message.Filling_Circular_Flow_With_Product_Complete := "HMI KEY".Message.Temperature_Preparation_With_Product_complete := "HMI KEY".Message.SBT2_Product_Filling_Complete := "HMI KEY".Message.Production_With_Filler_Running := "HMI KEY".Message.Production_With_Filler_Complete := "HMI KEY".Message.CIP_Lye_Access_Complete := "HMI KEY".Message.CIP_Sterilisation_with_Water_Complete := "HMI KEY".Message.CIP_Sterilisation_Water_Access_Complete := FALSE; END_IF; END_IF; |
|
|
|
Network 4: Programme BASIC condition IF "DI MAIN GLB".SET.SSM.S.steps AND "DI MAIN GLB".P00.CmpltMaRun_Imp THEN #Support.SEQ200_Start := #Support.SEQ201_Start := TRUE; "HMI KEY".Execute.Drainage_Selected := "HMI KEY".Execute.Production_Selected := "HMI KEY".Execute.CIP_Selected := FALSE; END_IF; |
|
|
|
Network 5: Programme selection PRODUCTION IF "HMI KEY".Execute.Select_Production AND NOT ("HMI KEY".Execute.Production_Selected OR "DI MAIN GLB".P00.AutoCmpltMa_run) THEN "HMI KEY".Execute.Production_Selected := TRUE; "HMI KEY".Execute.Drainage_Selected := "HMI KEY".Execute.CIP_Selected := FALSE; END_IF; |
|
|
|
Network 6: Programme selection DRAINAGE IF "HMI KEY".Execute.Select_Drainage AND NOT ("HMI KEY".Execute.Drainage_Selected OR "DI MAIN GLB".P00.AutoCmpltMa_run) THEN "HMI KEY".Execute.Drainage_Selected := TRUE; "HMI KEY".Execute.Production_Selected := "HMI KEY".Execute.CIP_Selected := FALSE; END_IF; |
|
|
|
Network 7: Programme selection CIP IF "HMI KEY".Execute.Select_CIP AND NOT ("HMI KEY".Execute.CIP_Selected OR "DI MAIN GLB".P00.AutoCmpltMa_run) THEN "HMI KEY".Execute.CIP_Selected := TRUE; "HMI KEY".Execute.Production_Selected := "HMI KEY".Execute.Drainage_Selected := FALSE; END_IF; |
|
|
|
Network 8: Create delay steps off #Support.DlyStepsOff(IN := #Support.SEQ200_Start AND NOT "DI MAIN GLB".P00.TOF_CmpltMaOFF_Pulse.Q, PT := t#500ms); #SSM.S.steph := NOT "DI MAIN GLB".P00.AutoCmpltMa_run AND ("HMI KEY".Execute.Production_Selected OR "HMI KEY".Execute.CIP_Selected); #SSM.S.steps := #Support.DlyStepsOff.Q; #tmp_support_steph := NOT ("E00 Estp Fb" AND "E00 AirPressure ok" AND ("DI MAIN GLB".P00.AutoCmpltMa_run OR "DI MAIN GLB".SET.SSM.S.steps)); |
|
|
|
Network 9: Perform pressure maintenance in SBT1 and SBT2 // Pressure maintenance in SBT1 #SEQ301.SSM.S.steph := #tmp_support_steph; #SEQ301.SSM.S.steps := "DI MAIN GLB".SEQ200.Support.SEQ200_Start AND NOT "DI MAIN GLB".P00.TOF_CmpltMaOFF_Pulse.Q; #SEQ301(); "HMI KEY".Message.PT101_Pressure_Maintenance_reached := ABS("DI OUT P01".PT101.Support.Out_Scaled - "HMI KEY".SetPoint.PT101_Pressure_above) <= "HMI KEY".SetPoint.PT101_PressureHysteresis; // Pressure maintenance in SBT2 #SEQ401.SSM.S.steph := #tmp_support_steph; #SEQ401.SSM.S.steps := "DI MAIN GLB".SEQ200.Support.SEQ200_Start AND NOT "DI MAIN GLB".P00.TOF_CmpltMaOFF_Pulse.Q; #SEQ401(); "HMI KEY".Message.PT201_Pressure_Maintenance_reached := ABS("DI OUT P02".PT201.Support.Out_Scaled - "HMI KEY".SetPoint.PT201_Pressure_above) <= "HMI KEY".SetPoint.PT201_PressureHysteresis; |
|
|
|
Network 10: Define SSM last step #SSM(LAST_STEP := 14); |
|
|
|
Network 11: CASE-Function correspond to actual SSM CASE #SSM.S.stepact OF 0: // waiting for sequencer to start IF #SSM.S.steps THEN #SSM.S.stepd := #Support.SEQ210_Start OR #Support.SEQ201_Start; IF #Support.SEQ220_Start THEN // Filling sterile buffer tank 1 with untreated product #SSM.S.stepnew := 2; #SSM.S.stepd := TRUE; #Support.SEQ201_Start := FALSE; ELSIF #Support.SEQ221_Start THEN // Filling circular flow with water #SSM.S.stepnew := 3; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ222_Start THEN // Temperature preparation with water #SSM.S.stepnew := 4; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ223_Start THEN // Filling circular flow with product #SSM.S.stepnew := 5; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ224_Start THEN // Temperature preparation with product #SSM.S.stepnew := 6; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ225_Start THEN // Filling sterile buffer tank 2 with product #SSM.S.stepnew := 7; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ226_Start THEN // Production #SSM.S.stepnew := 8; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ227_Start THEN // Product inlet under heated whilst production #SSM.S.stepnew := 9; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ228_Start THEN // Product inlet over heated whilst production #SSM.S.stepnew := 10; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ229_Start THEN // Production end #SSM.S.stepnew := 11; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ240_Start THEN // CIP with Lye #SSM.S.stepnew := 12; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ241_Start THEN // Rinsing #SSM.S.stepnew := 13; #SSM.S.stepd := TRUE; ELSIF #Support.SEQ242_Start THEN // Cooling #SSM.S.stepnew := 14; #SSM.S.stepd := TRUE; END_IF; END_IF;
1: // Implement basic condition #SEQ201_GLB.SSM.S.steph := #tmp_support_steph; #SEQ201_GLB.DlyStepsOff(IN := #Support.SEQ201_Start, PT := t#200ms); #SEQ201_GLB.SSM.S.steps := #SEQ201_GLB.DlyStepsOff.Q; #SEQ201_GLB(); IF (NOT #SEQ201_GLB.SSM.S.step0 OR #SSM.S.DlyOff.Q) AND NOT #Support.SEQ210_Start THEN RETURN; ELSE #SSM.S.stepd := #Support.SEQ220_Start; END_IF;
// Liquid tanks draining #SEQ210_GLB.SSM.S.steph := #tmp_support_steph; #SEQ210_GLB.DlyStepsOff(IN := #Support.SEQ210_Start, PT := t#200ms); #SEQ210_GLB.SSM.S.steps := #SEQ210_GLB.DlyStepsOff.Q; #SEQ210_GLB(); IF NOT #SEQ210_GLB.SSM.S.step0 OR #SSM.S.DlyOff.Q THEN RETURN; ELSE "DI MAIN GLB".P00.AutoCmpltMa_run := FALSE; END_IF;
2: // Filling steril buffer tank 1 with untreated product #SEQ220_GLB.DlyStepsOff(IN := #Support.SEQ220_Start, PT := t#200ms); #SEQ220_GLB.SSM.S.steph := #tmp_support_steph; #SEQ220_GLB.SSM.S.steps := #SEQ220_GLB.DlyStepsOff.Q; #SEQ220_GLB(); #SSM.S.stepd := #SEQ220_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q;
3: // Filling circular flow with water IF #SSM.S.stepfc THEN #Support.SEQ221_Start := TRUE; ELSE #SEQ221_GLB.DlyStepsOff(IN := #Support.SEQ221_Start, PT := t#200ms); #SEQ221_GLB.SSM.S.steph := #tmp_support_steph; #SEQ221_GLB.SSM.S.steps := #SEQ221_GLB.DlyStepsOff.Q; #SEQ221_GLB(); #SSM.S.stepd := #SEQ221_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q; END_IF;
4: // Temperature preparation with water IF #SSM.S.stepfc THEN #Support.SEQ222_Start := TRUE; ELSE #SEQ222_GLB.DlyStepsOff(IN := #Support.SEQ222_Start, PT := t#200ms); #SEQ222_GLB.SSM.S.steph := #tmp_support_steph; #SEQ222_GLB.SSM.S.steps := #SEQ222_GLB.DlyStepsOff.Q; #SEQ222_GLB(); #SSM.S.stepd := #SEQ222_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q; END_IF;
5: // Filling circular flow with product IF #SSM.S.stepfc THEN #Support.SEQ223_Start := TRUE; ELSE #SEQ223_GLB.DlyStepsOff(IN := #Support.SEQ223_Start, PT := t#200ms); #SEQ223_GLB.SSM.S.steph := #tmp_support_steph; #SEQ223_GLB.SSM.S.steps := #SEQ223_GLB.DlyStepsOff.Q; #SEQ223_GLB(); #SSM.S.stepd := #SEQ223_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q; END_IF;
6: // Temperature preparation with product IF #SSM.S.stepfc THEN #Support.SEQ224_Start := TRUE; ELSE #SEQ224_GLB.DlyStepsOff(IN := #Support.SEQ224_Start, PT := t#200ms); #SEQ224_GLB.SSM.S.steph := #tmp_support_steph; #SEQ224_GLB.SSM.S.steps := #SEQ224_GLB.DlyStepsOff.Q; #SEQ224_GLB(); #SSM.S.stepd := #SEQ224_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q; END_IF;
7: // Filling sterile buffer tank 2 with product IF #SSM.S.stepfc THEN #Support.SEQ225_Start := TRUE; ELSE #SEQ225_GLB.DlyStepsOff(IN := #Support.SEQ225_Start, PT := t#200ms); #SEQ225_GLB.SSM.S.steph := #tmp_support_steph; #SEQ225_GLB.SSM.S.steps := #SEQ225_GLB.DlyStepsOff.Q; #SEQ225_GLB(); END_IF; IF #SEQ225_GLB.SSM.S.step0 AND ("HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production OR "HMI KEY".Message.Product_Inlet_Over_Heated_whilst_Production) THEN IF "HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production THEN #SSM.S.stepnew := 9; #SSM.S.stepd := TRUE; ELSIF "HMI KEY".Message.Product_Inlet_Over_Heated_whilst_Production THEN #SSM.S.stepnew := 10; #SSM.S.stepd := TRUE; END_IF; ELSIF #SEQ225_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q THEN #SSM.S.stepd := TRUE; END_IF;
8: // Production IF #SSM.S.stepfc THEN #Support.SEQ226_Start := TRUE; ELSE #SEQ226_GLB.DlyStepsOff(IN := #Support.#SEQ226_Start, PT := t#200ms); #SEQ226_GLB.SSM.S.steph := #tmp_support_steph; #SEQ226_GLB.SSM.S.steps := #SEQ226_GLB.DlyStepsOff.Q; #SEQ226_GLB(); END_IF; IF #SEQ226_GLB.SSM.S.step0 AND ("HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production OR "HMI KEY".Message.Product_Inlet_Over_Heated_whilst_Production) THEN IF "HMI KEY".Message.Product_Inlet_Under_Heated_whilst_Production THEN #SSM.S.stepd := TRUE; ELSIF "HMI KEY".Message.Product_Inlet_Over_Heated_whilst_Production THEN #SSM.S.stepnew := 10; #SSM.S.stepd := TRUE; END_IF; ELSIF #SEQ226_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q THEN #SSM.S.stepnew := 11; #SSM.S.stepd := TRUE; END_IF;
9: // Product inlet under heated whilst production IF #SSM.S.stepfc THEN #Support.SEQ227_Start := TRUE; ELSE #SEQ227_GLB.DlyStepsOff(IN := #Support.SEQ227_Start, PT := t#200ms); #SEQ227_GLB.SSM.S.steph := #tmp_support_steph; #SEQ227_GLB.SSM.S.steps := #SEQ227_GLB.DlyStepsOff.Q; #SEQ227_GLB(); END_IF; IF #SEQ227_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q THEN #SSM.S.stepnew := 6; #SSM.S.stepd := TRUE; END_IF;
10: // Product inlet over heated whilst production IF #SSM.S.stepfc THEN #Support.SEQ228_Start := TRUE; ELSE #SEQ228_GLB.DlyStepsOff(IN := #Support.SEQ228_Start, PT := t#200ms); #SEQ228_GLB.SSM.S.steph := #tmp_support_steph; #SEQ228_GLB.SSM.S.steps := #SEQ228_GLB.DlyStepsOff.Q; #SEQ228_GLB(); END_IF; IF #SEQ228_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q THEN #SSM.S.stepnew := 5; #SSM.S.stepd := TRUE; END_IF;
11: // Production end IF #SSM.S.stepfc THEN #Support.SEQ229_Start := TRUE; ELSE #SEQ229_GLB.DlyStepsOff(IN := #Support.SEQ229_Start, PT := t#200ms); #SEQ229_GLB.SSM.S.steph := #tmp_support_steph; #SEQ229_GLB.SSM.S.steps := #SEQ229_GLB.DlyStepsOff.Q; #SEQ229_GLB(); END_IF; IF NOT #SEQ229_GLB.SSM.S.step0 OR #SSM.S.DlyOff.Q THEN RETURN; ELSE "DI MAIN GLB".P00.AutoCmpltMa_run := FALSE; END_IF;
12: // CIP with Lye #SEQ240_GLB.DlyStepsOff(IN := #Support.SEQ240_Start, PT := t#200ms); #SEQ240_GLB.SSM.S.steph := #tmp_support_steph; #SEQ240_GLB.SSM.S.steps := #SEQ240_GLB.DlyStepsOff.Q; #SEQ240_GLB(); #SSM.S.stepd := #SEQ240_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q;
13: // CIP Sterilisation with water IF #SSM.S.stepfc THEN #Support.SEQ241_Start := TRUE; ELSE #SEQ241_GLB.DlyStepsOff(IN := #Support.SEQ241_Start, PT := t#200ms); #SEQ241_GLB.SSM.S.steph := #tmp_support_steph; #SEQ241_GLB.SSM.S.steps := #SEQ241_GLB.DlyStepsOff.Q; #SEQ241_GLB(); #SSM.S.stepd := #SEQ241_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q; END_IF;
14: // Cooling after production IF #SSM.S.stepfc THEN #Support.SEQ242_Start := TRUE; ELSE #SEQ242_GLB.DlyStepsOff(IN := #Support.SEQ242_Start, PT := t#200ms); #SEQ242_GLB.SSM.S.steph := #tmp_support_steph; #SEQ242_GLB.SSM.S.steps := #SEQ242_GLB.DlyStepsOff.Q; #SEQ242_GLB(); END_IF; IF #SEQ242_GLB.SSM.S.step0 AND NOT #SSM.S.DlyOff.Q THEN "DI MAIN GLB".P00.AutoCmpltMa_run := FALSE; #SSM.S.stepd := TRUE; END_IF; END_CASE; |
|