



|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FB32 SEQ1 P01 : Delta Picker Robot |
|
|
|
|
|
Network 1: Pre-Setting "DI MAIN P01".M00.ReadyToStart := "DI MAIN GLB".M00.HomPos_SR AND "DI MAIN GLB".M00.AutoEntirePlant_run; |
|
|
|
|
|
Network 2: Define last step #SSM(LAST_STEP := 10); |
|
|
|
|
|
Network 3: Step Switching Mechanism (SSM) CASE #SSM.S.stepact OF 0: // Waiting for SEQ to start "DI MAIN P01".to_P02.Done := "DI MAIN P01".M00.SEQ1_Busy := FALSE; "DI MAIN P01".to_P02.Request := "DI MAIN P01".M00.ReadyToStart; #SSM.S.stepd := #SSM.S.steps AND "DI MAIN P01".M00.ReadyToStart AND "DI MAIN P02".to_P01.Request AND "DI MAIN P02".to_P01.EnabledToMove;
1: // MoveJog Picking Control Conveyor IF #SSM.S.stepfc THEN "DI MAIN P01".M00.SEQ1_Busy := TRUE; "DI OUT P01".G120.DRV.Support.SetVelo := "HMI KEY".Plantinfo_P01.Work_Velocity; #RunTimeCounter := 0; ELSE "DI OUT P01".C100.CmdExe_WP := "DI OUT P01".G120.DRV.Support.Cmd_MoveJogWP := "HMI KEY".P01.G120.F12_Enable_WP AND #SSM.S.stepa; #SSM.S.stepd := "DI OUT P01".G120.DRV.Support.LampON AND "E00 C100 PartAvailable" AND "DI OUT P01".TRACT_CONVEYOR.DRV.MC_MeasuringInput.Execute; END_IF;
2: // Delta Picker 3D MoveLinearAbsolut WCS PickUp Position UP IF #SSM.S.stepfc THEN "DI OUT P01".TRACT_CONVEYOR.DRV.Support.Enable_ReMeasuring := TRUE; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Velocity := -1.0; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.CoordSystem := 0; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.BufferMode := 1; "DI OUT P01".TRACT_CONVEYOR.DRV.Support.Measuring_Offset := "HMI KEY".Plantinfo_P01.Camera_Recording_Axis[1] + "HMI KEY".Plantinfo_P01.Object_Offset; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[1] := "DI OUT P01".TRACT_CONVEYOR.DRV.Support.Measuring_Offset + "DI OUT P01".TRACT_CONVEYOR.DRV.Support.Measuring_Shift_Distance; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[2] := "HMI KEY".Plantinfo_P01.Camera_Recording_Axis[2] + "DI OUT P01".TRACT_CONVEYOR.DRV.MC_TrackConveyorBelt.ConveyorBeltOrigin.y; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[3] := "DI OUT P01".TRACT_CONVEYOR.DRV.MC_TrackConveyorBelt.ConveyorBeltOrigin.z + "HMI KEY".Plantinfo_P01.Pick_Distan_to_ConveyorBelt; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[4] := "HMI KEY".Plantinfo_P01.Camera_Recording_Axis[4]; ELSE "DI OUT P01".C100.CmdExe_WP := #SSM.S.steplo; #SSM.S.stepd := "DI OUT P01".ROBOT.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P01".M100.DRV.CmdExe_WP := "HMI KEY".P01.M100.F12_Enable_WP AND #SSM.S.stepa; "DI OUT P01".ROBOT.DRV.Support.Cmd_MoveLinearAbsolute := "DI OUT P01".ROBOT.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
3: // G120 Move Object towards Delta Picker 3D Position "DI OUT P01".M100.DRV.CmdExe_WP := #SSM.S.steplo AND #SSM.S.stepa; IF ABS("DI OUT P01".G120.DRV.Support.ActPos - "DI OUT P01".TRACT_CONVEYOR.DRV.Support.InitialObjectPosition_x) < "HMI KEY".Plantinfo_P01.Window THEN #SSM.S.stepd := TRUE; END_IF;
4: // MC_TrackConveyorBelt.Execute IF #SSM.S.stepfc THEN "DI OUT P01".TRACT_CONVEYOR.DRV.MC_TrackConveyorBelt.Execute := TRUE; ELSE #SSM.S.stepd := "DI OUT P01".TRACT_CONVEYOR.DRV.MC_TrackConveyorBelt.Done; END_IF;
5: // Delta Picker 3D MoveLinearAbsolute OCS1 synchronous DOWN PosNo[1] IF #SSM.S.stepfc THEN #No := 1; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.DynamicAdaption := 0; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.CoordSystem := 1; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[2] -= "DI OUT P01".TRACT_CONVEYOR.DRV.MC_TrackConveyorBelt.ConveyorBeltOrigin.y; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[3] := "HMI KEY".Plantinfo_P01.MoveLinear_Pos[#No].Axis[3]; #SSM.S.c1.start := TRUE; ELSE #SSM.S.stepd := "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Active AND NOT #SSM.S.steplo; "DI OUT P01".ROBOT.DRV.Support.Cmd_MoveLinearAbsolute := "DI OUT P01".ROBOT.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa AND #SSM.S.c1.done; END_IF;
6: // Delta Picker 3D MoveLinearAbsolute OCS1 follow to PICK UP PosNo[2] IF #SSM.S.stepfc THEN #No := 2; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[1] += "HMI KEY".Plantinfo_P01.MoveLinear_Pos[#No].Axis[1]; #SSM.S.c1.start := TRUE; ELSE #SSM.S.stepd := "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Active AND NOT #SSM.S.steplo; "DI OUT P01".ROBOT.DRV.Support.Cmd_MoveLinearAbsolute := "DI OUT P01".ROBOT.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa AND #SSM.S.c1.done; "DI OUT P01".Y100.VLV_O.CmdExe_WP := "HMI KEY".P01.Y100.F12_Enable_WP; END_IF;
7: // Delta Picker 3D MoveLinearAbsolute OCS1 synchronous UP IF #SSM.S.stepfc THEN "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[3] += "HMI KEY".Plantinfo_P01.Pick_Distan_to_ConveyorBelt; ELSE #SSM.S.stepd := "DI OUT P01".ROBOT.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P01".ROBOT.DRV.Support.Cmd_MoveLinearAbsolute := "DI OUT P01".ROBOT.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
8: // Delta Picker 3D MoveLinearAbsolute WCS Place DOWN PosNo[3] IF #SSM.S.stepfc THEN #No := 3; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.CoordSystem := 0; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[1] := "HMI KEY".Plantinfo_P01.MoveLinear_Pos[#No].Axis[1]; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[2] := "HMI KEY".Plantinfo_P01.MoveLinear_Pos[#No].Axis[2]; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[3] := "HMI KEY".Plantinfo_P01.MoveLinear_Pos[#No].Axis[3]; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position[4] := "HMI KEY".Plantinfo_P01.MoveLinear_Pos[#No].Axis[4]; ELSE #SSM.S.stepd := "DI OUT P01".ROBOT.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P01".ROBOT.DRV.Support.Cmd_MoveLinearAbsolute := "DI OUT P01".ROBOT.DRV.Support.KINpos_Enabled AND NOT #SSM.S.stepd AND #SSM.S.stepa; END_IF;
9: // Y100 Pick and place gripper PLACE IF #SSM.S.stepfc THEN "DI OUT P01".Y100.VLV_O.CmdExe_WP := FALSE; ELSIF "DI OUT P01".Y100.FEEDBACK_HP THEN IF "DI MAIN P02".to_P01.Done THEN #SSM.S.stepnew := 10; #SSM.S.stepd := TRUE; ELSE #SSM.S.stepnew := 0; #SSM.S.stepd := "DI MAIN P01".to_P02.EnabledToMove := TRUE; END_IF; END_IF;
10: // Delta Picker Robot MoveLinearAbsolut towards base position IF #SSM.S.stepfc THEN "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.Position := "HMI KEY".Plantinfo_P01.MoveLinear_Pos[0].Axis; "DI OUT P01".ROBOT.DRV.MC_MoveLinearAbsolute.CoordSystem := 0; "DI MAIN P01".to_P02.EnabledToMove := FALSE; ELSE "DI MAIN P01".to_P02.Done := "DI OUT P01".ROBOT.DRV.Support.InPos AND NOT #SSM.S.steplo; "DI OUT P01".ROBOT.DRV.Support.Cmd_MoveLinearAbsolute := "DI OUT P01".ROBOT.DRV.Support.KINpos_Enabled AND NOT "DI MAIN P01".to_P02.Done AND #SSM.S.stepa; "DI MAIN P01".M00.SEQ1_Done := "HMI KEY".Plantinfo_P02.Product_Packaging_Done AND "DI MAIN P01".to_P02.Done; END_IF; END_CASE; |
|