|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
To go to next HMI image use the touch buttons; some of them are interactive. |
FB32 SEQ1 P01 : P01 sequencer 1 |
|
|
|
Network 1: Step Switching Mechanism (SSM) #SSM(STEP_PLS := "HMI KEY".P01.GLB.F17_StepPls, STEP_MNS := "HMI KEY".P01.GLB.F18_StepMns, GOTO_STEP := "HMI KEY".P01.GLB.F19_GoToStep, GOTO_STEP_NO := "HMI KEY".P01.GLB.GoToStep, LAST_STEP := 33); |
|
|
|
Network 2: Pre-Setting "M01 RdyToStart" := "M01 HomPosIS" AND "M01 SEQ1 DoWP1" AND #IndexPos2 < "ModulDa".P01.MaPa.SetBatchParts; IF NOT "M01 SEQ1 DoWP1" AND #IndexPos_FEg THEN #LastActPos := #IndexPos2 := 0; END_IF; #IndexPos_FEg := "M01 SEQ1 DoWP1"; |
|
|
|
Network 3: Execute Pick and Place BlisterTray CASE #SSM.S.stepact OF 0: // waiting for SEQ to start "M01 SEQ1 Active" := FALSE; IF NOT "M01 RdyToStart" THEN "M00 AutoCmpltMa run" := "M00 InchCmpltMa run" := FALSE; RETURN; ELSE #IndexPos1 := #LastActPos; #SSM.S.stepd := #SSM.S.steps; #MaxPos1 := "ModulDa".P01.MaPa.WPC1_NumOfPos_X * "ModulDa".P01.MaPa.WPC1_NumOfPos_Y; #MaxPos2 := "ModulDa".P01.MaPa.WPC2_NumOfPos_X * "ModulDa".P01.MaPa.WPC2_NumOfPos_Y; END_IF;
1: // C01 Lifting gate WP (close) #PosPointer := 0; "M01 SEQ1 Active" := TRUE; "DI OUT P01".C01.VLV_O.CmdExe_WP := "HMI KEY".P01.C01.F12_Enable_WP; #SSM.S.stepd := "DI OUT P01".C01.FB_WP;
2: // XYZGaxis MovAbso towards Pos.12 palette 1 Pick (down/opened) IF #SSM.S.stepfc THEN "M01 SEQ2 DoWP2" := FALSE; #PosPointer := 12; #LastActPos := #IndexPos1 := #IndexPos1 + 1; #ExecuteCoodinate(INDEX_POS := #IndexPos1, PLACES_ON_X := "ModulDa".P01.MaPa.WPC1_NumOfPos_X, PLACES_ON_Y := "ModulDa".P01.MaPa.WPC1_NumOfPos_Y, REF_POS := "ModulDa".P01.MaPa.WPC1_RefPos, GAP_ON_X := "ModulDa".P01.MaPa.WPC1_Gap_X, GAP_ON_Y := "ModulDa".P01.MaPa.WPC1_Gap_Y, TARGET_POS := #TrgtPos1); #TrgtPos1.Z := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; #TrgtPos1.G12 := "ModulDa".P01.MaPa.Gripper12_SetOpn; #TrgtPos1.G34 := "ModulDa".P01.MaPa.Gripper34_SetOpn; ELSE "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := #TrgtPos1, VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_2, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01 AND "DI OUT P01".V90_X.DRV.Support.InPos AND "DI OUT P01".V90_Y.DRV.Support.InPos AND "DI OUT P01".V90_X.NexDrv_DlyOn, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #SSM.S.c1.start); "DI OUT P01".MD_12.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_12.HALT_01 AND #SSM.S.c1.done; "DI OUT P01".MD_34.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_34.HALT_01 AND #SSM.S.c1.done; #SSM.S.stepd := "DI OUT P01".MD_12.DRV.Support.InPos AND "DI OUT P01".MD_34.DRV.Support.InPos AND #SSM.S.c1.done; END_IF;
3: // XYZaxis MovAbso towards Pos.2 part control (up/opened) #PosPointer := 2; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_2, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01 AND "DI OUT P01".V90_Z.NexDrv_DlyOn, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01 AND "DI OUT P01".V90_Z.NexDrv_DlyOn, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #SSM.S.stepd);
4: // Zaxis MovAbso towards Pos.7 part control (down/opened) IF #SSM.S.stepfc THEN #PosPointer := 7; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".V90_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
5: // Zaxis MovAbso towards Pos.2 part control (up/opened) IF #SSM.S.stepfc THEN #PosPointer := 2; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; // Query missing part "M01 SEQ2 DoWP2" := "E00 S10 GrprPartPrsnt"; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".V90_Z.DRV.Support.InPos AND NOT #SSM.S.steplo;
IF NOT "M01 SEQ2 DoWP2" AND #SSM.S.stepd THEN IF "M00 AutoCmpltMa run" THEN "ModulDa".P01.MaPa.CounterMissingParts := "ModulDa".P01.MaPa.CounterMissingParts + 1; #MissingParts := #MissingParts + 1; END_IF; IF #MissingParts >= "ModulDa".P01.MaPa.EndAfterMissingParts THEN #SSM.S.stepnew := 32; // ending ELSE #SSM.S.stepnew := 2; END_IF; END_IF; END_IF;
6: // XYZaxis MovAbso towards Pos.8 alcohol pool (down/opened) #PosPointer := 8; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_2, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #tmp_llo); // start immersing time #SSM.S.c2.set := "ModulDa".P01.MaPa.Alcohol_Immers_Time; #SSM.S.c2.start := #tmp_llo; #SSM.S.stepd := #SSM.S.c2.done;
7: // Zaxis MovAbso towards Pos.3 drip off Alcohol pool (up/opened) IF #SSM.S.stepfc THEN #PosPointer := 3; #SSM.S.c2.set := "ModulDa".P01.MaPa.Alcohol_DripOff_Time; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.c2.start := "DI OUT P01".V90_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; #SSM.S.stepd := #SSM.S.c2.done; END_IF;
8: // XYZGaxis MovAbso towards Pos.9 UV resin (down/opened) #PosPointer := 9; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_2, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #SSM.S.stepd);
9: // MD_12axis MovAbso gripper finges 1+2 close IF #SSM.S.stepfc THEN #PosPointer := 9; #SSM.S.c2.set := "ModulDa".P01.MaPa.Gripper12_UVresin_ClsTime; "DI OUT P01".MD_12.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_0; "DI OUT P01".MD_12.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].G12; ELSE "DI OUT P01".MD_12.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_12.HALT_01; #SSM.S.c2.start := "DI OUT P01".MD_12.DRV.Support.InPos AND NOT #SSM.S.steplo; #SSM.S.stepd := #SSM.S.c2.done; END_IF;
10: // MD_12axis MovAbso gripper finges 1+2 open IF #SSM.S.stepfc THEN "DI OUT P01".MD_12.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_0; "DI OUT P01".MD_12.DRV.MC_MoveAbsolute.Position := "ModulDa".P01.MaPa.Gripper12_SetOpn; ELSE "DI OUT P01".MD_12.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_12.HALT_01; #SSM.S.stepd := "DI OUT P01".MD_12.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
11: // MD_34axis MovAbso gripper finges 3+4 close IF #SSM.S.stepfc THEN #PosPointer := 9; #SSM.S.c2.set := "ModulDa".P01.MaPa.Gripper12_UVresin_ClsTime; "DI OUT P01".MD_34.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_0; "DI OUT P01".MD_34.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].G34; ELSE "DI OUT P01".MD_34.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_34.HALT_01; #SSM.S.c2.start := "DI OUT P01".MD_34.DRV.Support.InPos AND NOT #SSM.S.steplo; #SSM.S.stepd := #SSM.S.c2.done; END_IF;
12: // MD_34axis MovAbso gripper finges 3+4 open IF #SSM.S.stepfc THEN "DI OUT P01".MD_34.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_0; "DI OUT P01".MD_34.DRV.MC_MoveAbsolute.Position := "ModulDa".P01.MaPa.Gripper34_SetOpn; ELSE "DI OUT P01".MD_34.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_34.HALT_01; #SSM.S.stepd := "DI OUT P01".MD_34.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
13: // Zaxis MovAbso towards Pos.4 drip off coating resin (up/opened) IF #SSM.S.stepfc THEN #PosPointer := 4; #SSM.S.c2.set := "ModulDa".P01.MaPa.Alcohol_DripOff_Time; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.c2.start := "DI OUT P01".V90_Z.DRV.Support.InPos; #SSM.S.stepd := #SSM.S.c2.done; END_IF;
14: // XYZaxis MovAbso towards Pos.7 part control (down/opened) #PosPointer := 7; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_2, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #SSM.S.stepd);
15: // Zaxis MovAbso towards Pos.2 part control (up/opened) IF #SSM.S.stepfc THEN #PosPointer := 2; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; "M01 SEQ2 DoWP2" := "E00 S10 GrprPartPrsnt"; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".V90_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
IF NOT "M01 SEQ2 DoWP2" AND #SSM.S.stepd THEN "ModulDa".P01.MaPa.CounterMissingParts := "ModulDa".P01.MaPa.CounterMissingParts + 1; #MissingParts := #MissingParts + 1; IF #MissingParts >= "ModulDa".P01.MaPa.EndAfterMissingParts THEN #SSM.S.stepnew := 32; // ending ELSE #SSM.S.stepnew := 2; END_IF; END_IF;
16: // XYZaxis MovAbso towards Pos.10 UV coting (down/opened) #PosPointer := 10; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_1, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #tmp_llo); #SSM.S.c2.start := #tmp_llo; #SSM.S.c2.set := "ModulDa".P01.MaPa.UV_Coating_Time; #SSM.S.stepd := #SSM.S.c2.done;
17: // Zaxis MovAbso towards Pos.5 UV coting (up/opened) IF #SSM.S.stepfc THEN #PosPointer := 5; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; IF #HMI_QA_Test THEN #SSM.S.stepnew := 20; ELSE #SSM.S.stepnew := 30; END_IF; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".V90_Z.DRV.Support.InPos; END_IF;
20: // XYZaxis MovAbso towards Pos.11 QA control (down/closed) #PosPointer := 11; "FC POS REACHED"(START := #SSM.S.steplo, TARGET_POS := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer], VELO_Z := "DI OUT P01".MANUAL.XYZGaxisVelo_1, VELO_XYG := "DI OUT P01".MANUAL.XYZGaxisVelo_2, ENABLE_X := NOT "DI OUT P01".V90_X.HALT_01, ENABLE_Y := NOT "DI OUT P01".V90_Y.HALT_01, ENABLE_Z := NOT "DI OUT P01".V90_Z.HALT_01, MOV_TO_POS_X => "DI OUT P01".V90_X.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Y => "DI OUT P01".V90_Y.DRV.Support.Cmd_MovAbso, MOV_TO_POS_Z => "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso, PRECISION := 5.0, TARGET_REACHED => #tmp_llo); "DI OUT P01".MD_12.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_12.HALT_01 AND #tmp_llo; "DI OUT P01".MD_34.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".MD_34.HALT_01 AND #tmp_llo; #SSM.S.stepd := "DI OUT P01".MD_12.DRV.Support.InPos AND "DI OUT P01".MD_34.DRV.Support.InPos AND #tmp_llo;
21: // Zaxis MovAbso towards Pos.6 part control (up/opened) IF #SSM.S.stepfc THEN #PosPointer := 6; "DI OUT P01".V90_Z.DRV.Support.SetVelo := "DI OUT P01".MANUAL.XYZGaxisVelo_1; "DI OUT P01".V90_Z.DRV.MC_MoveAbsolute.Position := "DI OUT P01".MANUAL.XYZG_TrgtPos[#PosPointer].Z; ELSE "DI OUT P01".V90_Z.DRV.Support.Cmd_MovAbso := NOT "DI OUT P01".V90_Z.HALT_01; #SSM.S.stepd := "DI OUT P01".V90_Z.DRV.Support.InPos AND NOT #SSM.S.steplo; END_IF;
22: // C01 Lifting gate HP/WP (Open/Close lifting gate) "DI OUT P01".C01.VLV_O.CmdExe_WP := "HMI KEY".P01.C01.F12_Enable_WP AND "M00 AutoCmpltMa run";
IF "HMI KEY".P01.GLB.F10_Open_SafetyDoor_HMI THEN "M00 AutoCmpltMa run" := #SSM.S.steplo; ELSIF "HMI KEY".SYS.GLB.F5_Start AND "DI OUT P01".C01.FB_HP THEN #HMI_QA_Test := FALSE; #SSM.S.stepnew := 2; #SSM.S.c1.set := 30; #SSM.S.c1.start := TRUE; END_IF; #SSM.S.stepd := #SSM.S.c1.done AND "DI OUT P01".C01.FB_WP;
|
|