机械手自动化程序

合集下载

机械手工件搬运PLC顺控程序

机械手工件搬运PLC顺控程序

机械手工件搬运PLC顺控程序机械手工件搬运PLC顺控程序是一种自动化工艺,用于控制和协调机械手和工业车间中的其他设备,以完成物料和零件的搬运。

PLC(可编程逻辑控制器)是这个系统的核心部分,它包含了一个程序,用于控制机械手的动作,并协调搬运过程中的其他元素,例如输送带、传送机和各种传感器。

该系统的主要应用场景是工业生产线,例如汽车、电子和五金制品制造厂等。

其中最大的优点是实现了高效率、高精度和高质量的生产流程。

本文将深入探讨机械手工件搬运PLC顺控程序的构成、原理和应用,以帮助读者更好地理解和应用这个自动化系统。

1. 构件机械手工件搬运PLC顺控程序由以下四个构件组成:机械手、输送带、传送机和PLC控制器。

机械手是核心部件,它包括一个控制系统和一系列从动部件。

控制系统通常由一个工控机和一个专用的PLC控制器组成,它们负责控制机械手的动作,并与其他设备协调工作。

输送带和传送机是用来传输工件和零件的,通常安装在生产线上。

输送带通常是一条长度较长的带式输送机,由电机驱动,可在两端控制速度和停止运行。

传送机通常是一个类似于传送带的机械臂,负责在不同的生产器件之间传输物品。

这两个设备都配备了传感器,用于激活PLC控制器,以便向机械手指示何时进行抓取和卸载操作。

PLC控制器是整个系统的核心,由一个或多个微处理器组成。

它与机械手、输送带和传送机之间建立通信网络,以便管理工作流程,并实现自动化操作。

因为PLC控制器是可编程的,它可以根据需要进行定制操作,满足不同的生产要求。

2. 工作原理该系统的工作过程如下:- 首先,工件或零件通过输送带或传送机传输到机械手前方,触发传感器。

- 传感器激活PLC控制器,PLC控制器发送信号到机械手,让机械手开始运作。

- 机械手进行抓取动作,把工件从输送带或传送机上抓取下来。

- 机械手在特定的位置上停止,等待PLC控制器发送下一道指令。

- PLC控制器向机械手发送下一道指令,指示机械手如何移动或卸载工件。

epson机械手程序讲解

epson机械手程序讲解

epson机械手程序讲解Epson机械手是一种工业机器人,通常用于自动化生产线上的装配、搬运和加工等任务。

它们可以根据预先设定的程序执行各种复杂的动作,从而提高生产效率和质量。

下面我将从不同角度讲解Epson机械手的程序。

首先,Epson机械手的程序可以通过专门的机器人编程软件进行编写和编辑。

这些软件通常提供了图形化的用户界面,使操作人员可以直观地创建机器人动作序列,设置运动路径、速度、加减速度和姿态等参数。

此外,一些软件还支持基于模拟的程序验证,以确保程序的准确性和安全性。

其次,Epson机械手的程序通常包括了各种运动指令、逻辑控制和传感器反馈等元素。

例如,可以通过编程指定机械手的起始位置、目标位置和中间路径,还可以添加逻辑判断,使机械手根据不同的情况执行不同的动作,同时还可以集成传感器反馈,实现对工件位置、质量等信息的实时监测和响应。

此外,Epson机械手的程序还可以与其他设备进行接口和通讯,实现自动化生产线的协调作业。

通过编写程序,可以实现机械手与输送带、加工设备、检测设备等的联动操作,从而实现整个生产过程的自动化控制和优化。

最后,Epson机械手的程序还需要考虑安全性、稳定性和可维护性等方面。

在编写程序时,需要充分考虑机械手在工作过程中的安全保护措施,避免发生意外伤害。

同时,还需要考虑程序的稳定性和可维护性,确保程序的稳定运行和便于日常维护和升级。

总的来说,Epson机械手的程序编写涉及到多个方面,包括机器人编程软件的使用、运动控制、逻辑控制、传感器接口、设备通讯、安全性和稳定性等。

通过合理的程序设计和编写,可以充分发挥Epson机械手在自动化生产中的作用,提高生产效率和质量。

简易机械手PLC控制

简易机械手PLC控制

简易机械手PLC控制简介在制造业中,机械手是一种关键的工业自动化设备,用于处理和搬运物品。

机械手的控制非常重要,它决定了机械手的精度和效率。

PLC (可编程逻辑控制器)是一种常用的控制设备,它可以编程来控制机械手的运动和动作。

本文将介绍如何使用PLC控制一个简易机械手的运动。

所需硬件和软件•一台简易机械手•一个PLC设备•一个用于编程的PLC软件步骤步骤一:连接PLC设备和机械手首先,将PLC设备连接到机械手控制器上。

确保连接正确,以便PLC能够发送指令给机械手控制器。

步骤二:安装PLC软件并编程在电脑上安装PLC软件,并启动软件。

创建一个新的项目,并选择适当的PLC类型和通信配置。

然后,开始编程。

步骤三:设置输入输出(IO)点在PLC软件中,设置适当的输入输出(IO)点,以接受和发送信号。

例如,设置一个输入点来接收机械手的位置信号,以便PLC可以确定机械手的当前位置。

同时,设置一个输出点来发送控制信号给机械手,以控制它的动作。

步骤四:编写程序逻辑使用PLC软件编写机械手的控制程序。

根据机械手的需求,编写逻辑来控制机械手的运动和动作。

例如,如果机械手需要抓取一个物体并将其放置到另一个位置,那么编程逻辑应该包括机械手的移动和抓取指令。

确保编写的逻辑合理且有效。

步骤五:测试和调试在PLC软件中,模拟机械手的动作并进行测试。

确保PLC能够正确地控制机械手的运动。

如果发现错误或问题,进行调试并修正程序逻辑。

步骤六:上传程序到PLC当测试和调试完成后,将编写的程序上传到PLC设备中。

确保上传的程序可以在PLC上正确运行。

步骤七:运行机械手一切准备就绪后,运行机械手。

PLC将根据编写的逻辑控制机械手的运动和动作。

结论使用PLC控制机械手是一种常见的工业自动化方法。

通过编写合理的程序逻辑,PLC可以控制机械手的运动和动作,提高生产效率和精度。

希望本文能够帮助读者了解如何使用PLC控制简易机械手。

机械手自动化程序

机械手自动化程序

1、主程序main&ACCESS RVP1&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF Pro_main( )INT l;FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI)GLOBAL INTERRUPT DECL 4 WHEN $IN[10]==FALSE DO Itrpt1 ()GLOBAL INTERRUPT DECL 5 WHEN $IN[11]==FALSE DO Itrpt1 ()INTERRUPT DECL 6 WHEN $IN[9]==TRUE DO Itrpt1 ();地轨异常进入中断INTERRUPT ON 6;开地轨监视中断6IF NOT Gripper_ChkStatus(1,"C") THENGripper_SetStatus(1,"O")Part0InLeft = FALSEPart2InLeft = FALSEENDIFIF NOT Gripper_ChkStatus(2,"C") THENGripper_SetStatus(2,"O")Part1InRight = FALSEENDIFFOR l = 1 TO 14$OUT[l] = FALSEENDFOR;此循环语句在初始化时把所有端口清零复位。

IF $IN[5] THENMachine1_OnlyDrop = TRUEMachine2_OnlyDrop = TRUE;机台1有首件信号时,机台1与机台2第一次响应只放标志位置1 ELSEMachine1_OnlyDrop = FALSEMachine2_OnlyDrop = FALSEENDIF$FLAG[8]=FALSE;FLAG[8]是干什么用的?;ENDFOLD (INI);初始化完成$OV_PRO=70;限定系统运行速度;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDIF $IN_HOME THEN$OUT[5]=FALSE$OUT[8]=FALSE$OUT[11]=FALSEENDIFLOOPWAIT SEC 0.05IF $IN[1] AND NOT Part0InLeft AND Gripper_ChkStatus(3,"O") THEN ToPick_Search()ENDIFIF Part0InLeft AND ($IN[3] OR Machine1_OnlyDrop) AND Gripper_ChkStatus(1,"C") AND Gripper_ChkStatus(2,"O") THENMachine1()ENDIFIF Part1InRight AND ($IN[6] OR Machine2_OnlyDrop) AND Gripper_ChkStatus(2,"C") AND Gripper_ChkStatus(1,"O") THENMachine2()ENDIFIF Part2InLeft AND ($IN[8] OR Machine3_OnlyDrop) AND Gripper_ChkStatus(1,"C") THENMachine3()ENDIFENDLOOPENDDEF Itrpt1 ()HALTBRAKEEND2、取料程序(采用中断的方法自动探料,完成取料作业)&ACCESS RVO2&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF ToPick_Search( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( );单独用了一个系统中断?INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)INTERRUPT DECL 1 WHEN $IN[10]==TRUE DO FOUND()SevenAxis_Run(1)GOTO MARK;FOLD PTP P1 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT2$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD;FOLD PTP P3 CONT Vel=100 % PDAT8 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P3, 3:C_DIS, 5:100, 7:PDAT8$BWDSTART=FALSEPDAT_ACT=PPDAT8FDAT_ACT=FP3BAS(#PTP_PARAMS,100)PTP XP3 C_DIS;ENDFOLD;FOLD LIN P2 CONT Vel=2 m/s CPDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:2, 7:CPDAT2$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P1 Vel=0.05 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P1, 3:, 5:0.05, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP1BAS(#CP_PARAMS,0.05)LIN XP1;ENDFOLD;FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDmark:Search()INTERRUPT OFF 1WAIT SEC 0XP4=$POS_ACT;FOLD LIN P4 CONT Vel=2 m/s CPDAT10 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P4, 3:C_DIS C_DIS, 5:2, 7:CPDAT10$BWDSTART=FALSELDAT_ACT=LCPDAT10FDAT_ACT=FP4BAS(#CP_PARAMS,2)LIN XP4 C_DIS C_DIS;ENDFOLDGripper_SetStatus(1,"O")LIN_REL{Z 15}LIN_REL{Z -17}Gripper_SetStatus(1,"C")Part0InLeft = TRUEWAIT SEC 0XP0=$POS_ACTXP0.Z=XP0.Z+25 ;看一下寻料程序到底是怎么运转的!;FOLD LIN P0 CONT Vel=0.025 m/s CPDAT8 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P0, 3:C_DIS C_DIS, 5:0.025, 7:CPDAT8$BWDSTART=FALSELDAT_ACT=LCPDAT8FDAT_ACT=FP0BAS(#CP_PARAMS,0.025)LIN XP0 C_DIS C_DIS;ENDFOLDWAIT SEC 0IF NOT $IN[10] THENGOTO markENDIF;FOLD LIN P1 CONT Vel=2 m/s CPDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P1, 3:C_DIS C_DIS, 5:2, 7:CPDAT7$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP1BAS(#CP_PARAMS,2)LIN XP1 C_DIS C_DIS;ENDFOLDENDDEF Search( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)INTERRUPT ON 1;FOLD PTP P1 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD$OUT[16]=TRUE;FOLD LIN P3 CONT Vel=2 m/s CPDAT11 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:C_DIS C_DIS, 5:2, 7:CPDAT11$BWDSTART=FALSELDAT_ACT=LCPDAT11FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3 C_DIS C_DIS;ENDFOLD;FOLD LIN P2 CONT Vel=0.05 m/s CPDAT5 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:0.05, 7:CPDAT5$BWDSTART=FALSELDAT_ACT=LCPDAT5FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P1 Vel=0.02 m/s CPDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P1, 3:, 5:0.02, 7:CPDAT6$BWDSTART=FALSELDAT_ACT=LCPDAT6FDAT_ACT=FP1BAS(#CP_PARAMS,0.02)LIN XP1;ENDFOLDWAIT SEC 0ENDDEF FOUND()BRAKELIN $POS_INT ;rise a littleRESUMEEND3、机台1取放料程序(完成机台1取放料动作与信号交互)&ACCESS RVO2&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF Machine1( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)SevenAxis_Run(1);FOLD OUT 5 '' State=TRUE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:5, 3:, 5:TRUE, 6: $OUT[5]=TRUE;ENDFOLDIF NOT Machine1_OnlyDrop THEN;FOLD PTP P1 CONT Vel=100 % PDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT4$BWDSTART=FALSEPDAT_ACT=PPDAT4FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLDmark:;FOLD LIN P2 CONT Vel=2 m/s CPDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:2, 7:CPDAT4$BWDSTART=FALSELDAT_ACT=LCPDAT4FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P3 CONT Vel=2 m/s CPDAT5 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:C_DIS C_DIS, 5:2, 7:CPDAT5$BWDSTART=FALSELDAT_ACT=LCPDAT5FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3 C_DIS C_DIS;ENDFOLDGripper_SetStatus(2,"C")LIN_REL{Z 7.5}Gripper_SetStatus(2,"O");FOLD LIN P3 Vel=2 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(2,"C")Part1InRight = TRUE;FOLD LIN P2 Vel=0.05 m/s CPDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:, 5:0.05, 7:CPDAT6$BWDSTART=FALSELDAT_ACT=LCPDAT6FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2;ENDFOLDIF NOT $IN[11] THENGOTO markENDIF;FOLD PTP P4 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P4, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel=100 % PDAT10 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT10$BWDSTART=FALSEPDAT_ACT=PPDAT10FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT8 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT8$BWDSTART=FALSEPDAT_ACT=PPDAT8FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT7$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(1,"O");FOLD PTP P6 CONT Vel=100 % PDAT14 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT14$BWDSTART=FALSEPDAT_ACT=PPDAT14FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT9 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT9$BWDSTART=FALSEPDAT_ACT=PPDAT9FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDELSE;FOLD PTP P5 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT2$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT13 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT13$BWDSTART=FALSEPDAT_ACT=PPDAT13FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT9 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT9$BWDSTART=FALSELDAT_ACT=LCPDAT9FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(1,"O");FOLD PTP P6 Vel=100 % PDAT12 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:, 5:100, 7:PDAT12$BWDSTART=FALSEPDAT_ACT=PPDAT12FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT7$BWDSTART=FALSEPDAT_ACT=PPDAT7FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDMachine_Start(1);FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDENDIFIF Machine1_OnlyDrop THENMachine1_OnlyDrop = FALSEENDIFMachine_Start(1)END4、机台2取放料程序(完成机台2取放料动作与信号交互)&ACCESS RV2&REL 6&PARAM DISKPATH = KRC:\R1\ProgramDEF Machine2();FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)PTP $POS_ACTSevenAxis_Run(2);FOLD OUT 8 '' State=TRUE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:8, 3:, 5:TRUE, 6: $OUT[8]=TRUE;ENDFOLDIF NOT Machine2_OnlyDrop THEN;FOLD PTP P1 CONT Vel=100 % PDAT3 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT3$BWDSTART=FALSEPDAT_ACT=PPDAT3FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLDmark:;FOLD PTP P2 CONT Vel=100 % PDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P2, 3:C_DIS, 5:100, 7:PDAT4$BWDSTART=FALSEPDAT_ACT=PPDAT4FDAT_ACT=FP2BAS(#PTP_PARAMS,100)PTP XP2 C_DIS;ENDFOLD;FOLD LIN P3 Vel=2 m/s CPDAT4 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT4$BWDSTART=FALSELDAT_ACT=LCPDAT4FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(1,"C")LIN_REL{Z 7.5}Gripper_SetStatus(1,"O");FOLD LIN P3 Vel=2 m/s CPDAT0 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:2, 7:CPDAT0$BWDSTART=FALSELDAT_ACT=LCPDAT0FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(1,"C")Part2InLeft = TRUE;FOLD LIN P2 CONT Vel=0.05 m/s CPDAT3 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:0.05, 7:CPDAT3$BWDSTART=FALSELDAT_ACT=LCPDAT3FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2 C_DIS C_DIS;ENDFOLDIF NOT $IN[10] THENGOTO markENDIF;FOLD PTP P4 CONT Vel=100 % PDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P4, 3:C_DIS, 5:100, 7:PDAT7$BWDSTART=FALSEPDAT_ACT=PPDAT7FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel=100 % PDAT14 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT14$BWDSTART=FALSEPDAT_ACT=PPDAT14FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT9 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT9$BWDSTART=FALSEPDAT_ACT=PPDAT9FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT7 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT7$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(2,"O");FOLD PTP P6 CONT Vel=100 % PDAT11 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT11$BWDSTART=FALSEPDAT_ACT=PPDAT11FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT12 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT12$BWDSTART=FALSEPDAT_ACT=PPDAT12FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDELSE;FOLD PTP P5 CONT Vel=100 % PDAT13 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT13$BWDSTART=FALSEPDAT_ACT=PPDAT13FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel=100 % PDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P6, 3:C_DIS, 5:100, 7:PDAT1$BWDSTART=FALSEPDAT_ACT=PPDAT1FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel=0.25 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P7, 3:, 5:0.25, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(2,"O");FOLD LIN P6 CONT Vel=2 m/s CPDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P6, 3:C_DIS C_DIS, 5:2, 7:CPDAT2$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP6BAS(#CP_PARAMS,2)LIN XP6 C_DIS C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P8, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDMachine_Start(2);FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:,5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDENDIFIF Machine2_OnlyDrop THENMachine2_OnlyDrop = FALSEENDIFMachine_Start(2)END5、机台3取放料程序(完成机台3取放料动作与信号交互)&ACCESS RVP1&REL 6DEF Machine3( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI)WAIT FOR $FLAG[1]$FLAG[8]=TRUE;ENDFOLD (INI)PTP $POS_ACTSevenAxis_Run(3);FOLD OUT 11 '' State=TRUE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:11, 3:, 5:TRUE, 6: $OUT[11]=TRUE;ENDFOLD;FOLD PTP P1 CONT Vel=100 % PDAT6 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P1, 3:C_DIS, 5:100, 7:PDAT6$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD;FOLD PTP P2 CONT Vel=100 % PDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P2, 3:C_DIS, 5:100, 7:PDAT2$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP2BAS(#PTP_PARAMS,100)PTP XP2 C_DIS;ENDFOLD;FOLD LIN P3 Vel=0.25 m/s CPDAT1 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P3, 3:, 5:0.25, 7:CPDAT1$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP3BAS(#CP_PARAMS,0.25)LIN XP3;ENDFOLDGripper_SetStatus(1,"O");FOLD LIN P2 CONT Vel=2 m/s CPDAT2 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VLIN,%P 1:LIN, 2:P2, 3:C_DIS C_DIS, 5:2, 7:CPDAT2$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD PTP P4 CONT Vel=100 % PDAT3 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P4, 3:C_DIS, 5:100, 7:PDAT3$BWDSTART=FALSEPDAT_ACT=PPDAT3FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel=100 % PDAT5 Tool[1] Base[0];%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:P5, 3:C_DIS, 5:100, 7:PDAT5$BWDSTART=FALSEPDAT_ACT=PPDAT5FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLDMachine_Start(3);FOLD PTP HOME Vel=100 % DEFAULT;%{PE}%R 8.3.40,%MKUKATPBASIS,%CMOVE,%VPTP,%P 1:PTP, 2:HOME, 3:, 5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLD$TIMER_STOP[1]=FALSEIF $TIMER[1]>0 THEN$TIMER_STOP[1]=TRUEENDIFIF Machine3_OnlyDrop THENMachine3_OnlyDrop = FALSEENDIFCount_Part=Count_Part+1IF Count_Part>=40 THENCount_Part=0SevenAxis_Run(4)WAIT SEC 0.1ENDIFEND6、地轨运动程序(完成与地轨信号交互及运动交互)&ACCESS RV2&REL 8&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabeDEF SevenAxis_Run(Num:IN)INT NumSWITCH NumCASE 1;FOLD PULSE 1 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:1, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[1], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT FOR $IN[2]$OUT[1] = FALSE$OUT[14] = FALSECASE 2;FOLD PULSE 2 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:2, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[2], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[2] = FALSE$OUT[14] = FALSECASE 3;FOLD PULSE 3 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:3, 3:, 5:TRUE,6:, 8:1PULSE($OUT[3], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[3] = FALSE$OUT[14] = FALSECASE 4;FOLD PULSE 4 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:4, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[4], TRUE,1);ENDFOLD;FOLD PULSE 14 '' State=TRUE Time=1 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:14, 3:, 5:TRUE, 6:, 8:1PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[4] = FALSE$OUT[14] = FALSEDEFAULTMsgQuit("Error")ENDSWITCHEND7、机台启动控制程序(完成机台启动,取消工作中信号给开始加工信号)&ACCESS RV2&REL 3&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabeDEF Machine_Start(Num:IN)INT NumSWITCH NumCASE 1;FOLD OUT 5 '' State=FALSE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:5, 3:, 5:FALSE, 6: $OUT[5]=FALSE;ENDFOLD;FOLD PULSE 6 '' State=TRUE Time=0.5 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:6, 3:, 5:TRUE, 6:, 8:0.5PULSE($OUT[6], TRUE,0.5);ENDFOLDCASE 2;FOLD OUT 8 '' State=FALSE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:8, 3:, 5:FALSE, 6: $OUT[8]=FALSE;ENDFOLD;FOLD PULSE 9 '' State=TRUE Time=0.5 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:9, 3:, 5:TRUE, 6:, 8:0.5PULSE($OUT[9], TRUE,0.5);ENDFOLDCASE 3;FOLD OUT 11 '' State=FALSE ;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VOUTX,%P 2:11, 3:, 5:FALSE, 6: $OUT[11]=FALSE;ENDFOLD;FOLD PULSE 12 '' State=TRUE Time=0.5 sec;%{PE}%R 8.3.40,%MKUKATPBASIS,%COUT,%VPULSE,%P 2:12, 3:, 5:TRUE, 6:, 8:0.5PULSE($OUT[12], TRUE,0.5);ENDFOLDDEFAULTMsgQuit("Error")ENDSWITCHEND8、手爪控制程序(完成对手爪的控制)手爪1控制点位为OUT[16],对应检测为IN[10],对应中断4手爪2控制点位为OUT[15],对应检测为IN[11],对应中断5&ACCESS RV2&REL 50&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabeDEF Gripper_SetStatus(Num:IN,Status:IN)INT NumCHAR StatusSWITCH NumCASE 1SWITCH StatusCASE "O"IF NOT $T1 THENINTERRUPT OFF 4ENDIF$OUT[16] = FALSEWAIT SEC 0.3WAIT FOR NOT $IN[10]Part0InLeft = FALSEPart2InLeft = FALSECASE "C"IF NOT $T1 THENINTERRUPT ON 4ENDIF$OUT[16] = TRUEWAIT SEC 0.5WAIT FOR $IN[10]DEFAULTMsgQuit("Element Error")ENDSWITCHCASE 2SWITCH StatusCASE "O"IF NOT $T1 THENINTERRUPT OFF 5ENDIFINTERRUPT OFF 89$OUT[15] = FALSEWAIT SEC 0.3WAIT FOR NOT $IN[11]Part1InRight = FALSECASE "C"IF NOT $T1 THENINTERRUPT ON 5ENDIF$OUT[15] = TRUEWAIT SEC 0.5WAIT FOR $IN[11]Part1InRight = TRUEDEFAULTMsgQuit("Element Error")ENDSWITCHDEFAULTMsgQuit("Element Error")ENDSWITCHEND9、手爪真空检测(完成对掉料状况的检测)&ACCESS RV2&REL 10&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\FunctionVorgabe DEFFCT BOOL Gripper_ChkStatus(Num:IN,Status:IN)INT NumCHAR StatusSWITCH NumCASE 1SWITCH StatusCASE "O"IF NOT $OUT[16] AND NOT $IN[10] THENRETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[16] AND $IN[10] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHCASE 2SWITCH StatusCASE "O"IF NOT $OUT[15] AND NOT $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[15] AND $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHCASE 3SWITCH StatusCASE "O"IF NOT $OUT[15] AND NOT $OUT[16] AND NOT $IN[10] AND NOT $IN[11] THEN RETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[15] AND $OUT[16] AND $IN[10] AND $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHENDFCT10、装夹检测子程序(完成对每台机的装夹检测与装夹异常信号交互)11、后台监视程序(对安全姿态信号自动触发等后台程序进行配置)&ACCESS R&COMMENT HandlerOnRobotFaultDEF IR_STOPM ( );-----------------------------------; Error Handling Robot Controller; Switch OFF and Switch ON processes; KRC Version >= V5.5;-----------------------------------;FOLD DECLARATIONS;FOLD USER DECL; Please insert user defined declarations;ENDFOLD (USER DECL);FOLD BASISTECH DECLBOOL ApplicationRunFlagDECL CHAR ID[3];ENDFOLD (BASISTECH DECL);ENDFOLD (DECLARATIONS);FOLD BASISTECH INITINTERRUPT OFF 3STOPM_FLAG=TRUE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt ID[]="CTL"If ($STOPMESS==TRUE) THENBRAKE;ENDFOLD (BASISTECH INIT);FOLD USER STOP;Make your modifications here;ENDFOLD (USER STOP);FOLD BASISTECH STOPP00 (#EXT_ERR,#PGNO_GET,ID[],128 )ApplicationRunFlag=FALSEIF (Appl_Run>0) THENIF $OUT[Appl_Run] THENApplicationRunFlag=TRUE$OUT[Appl_Run]=FALSEENDIFENDIFREPEATPOWER=SYNC()HALTUNTIL (($STOPMESS==FALSE) AND ($POWER_FAIL==FALSE));ENDFOLD (BASISTECH STOP);FOLD BASISTECH RESTARTP00 (#EXT_ERR,#PGNO_GET,ID[],0 )IF (ApplicationRunFlag==TRUE) THENIF (Appl_Run>0) THEN$OUT[Appl_Run]=TRUEENDIFENDIF最新精品文档,知识共享!;ENDFOLD (BASISTECH RESTART);FOLD USER RESTART;Make your modifications here;ENDFOLD (USER RESTART);FOLD BASISTECH REACTIVATEEndifINTERRUPT ON 3STOPM_FLAG=FALSE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt;ENDFOLD (BASISTECH REACTIVATE)END。

PLC实验简易机械手PLC控制

PLC实验简易机械手PLC控制

简易机械手PLC控制示意图如下:2、控制方式:1)手动操作:将机械手复归至原点位置。

2)连续运行:在原点时,按启动按钮,按工作循环图边疆工作一个周期。

一个工作周期工艺过程:原点下降夹紧(T)上升右移下降松(T)上升左移至原点。

3、显示控制Y0------下降Y1------夹紧、放松Y2------上升Y3------右移Y4------左移参考答案:(1)I/O输入、输出分配X0 起动Y0------下降X1 下限X2 上限Y1------夹紧、放松X3 右限X4 左限Y2------上升X5 手动/自动X6 下降Y3------右移X7 夹紧、放松X10 上升Y4------左移X11 右移X12 左移Y5------原点X13 原点X14 急停/复位(2)PLC输入、输出图(3)状态流程图(4)步进状态图X5CJ P0X6Y0 X14 ZRST S20 S28 X7Y1 ZRST Y0 Y5 X10Y2X11Y3X12Y4FENDP0自动程序RETENDS20(5)编写程序LD X5 SET S22CJ P0 STL S22LD X6 RST Y1OUT Y0 OUT T0 K20LD X7 LD T0OUT Y1 SET S23LD X10 STL S23OUT Y2 OUT Y2LD X11 LD X2OUT Y3 SET S24LD X12 STL S24OUT Y4 OUT Y3LD X13 LD X3OUT Y5 SET S25FEND STL S25P0 OUT Y0LD M8000 LD X1SET S0 SET S26STL S0 STL S26LD X14 SET Y1ZRST S20 S28 OUT T1 K20ZRST Y0 Y5 LD T1LD X2 SET S27AND X4 STL S27SET S20 OUT Y2STL S20 LD X2SET Y1 SET S28OUT Y5 STL S28LD X0 OUT Y4SET S21 LD X4STL S21 OUT S20OUT Y0 RETLD X1 END。

机械手自动化控制系统的PLC实现

机械手自动化控制系统的PLC实现
1.通过本次设计,我们得出由于FX2N系列 本身指令 限制,不能实现对机械手的多种动作灵活控制.如果换 用其他型号或种类的PLC能实现预期的目标,做到灵 活控制
2.关于前面调用程序所出现的结果我们正在考虑,如 果调用程序能够的成功的话,也能实现预期的目标,做 到灵活控制.
动作的过程
底盘反转30度 横轴伸出 手反转 竖轴下降 爪夹住工件 手正转到 限位处 横轴缩回 竖轴上升 底 盘正转 横轴伸出 手反转 竖轴 下降 爪松开
发现的问题及其原因和遗留的问题
1.发现的问题及其原因:前期我们直接采用FX2N系 列的脉冲输出 指令_FNC57(PLSY)指令发出脉冲驱动 步进电机,发现此指令只能使用一次,中间不能连续出 现使用多次的现象,否则不给予执行。
2.遗留的问题:后来我们采用子程序调用的方式来完 成多次脉冲输出的需要,但在实验中我们只采用了两次 子程序调用,在多次实验中却出现了5种结果,而且全 是错误的结果,没有达到预期的目的Байду номын сангаас究竟是什么原因 我们还在考虑中.望各位老师和同学多多指教.
取得的成果和创新
1.彻底的理解了FX2N系列 FNC57(PLSY)指令的运用
机械手的背景及其意义
在工业生产和其他领域内,由于工作的需要, 人们经常受到高温、腐蚀及有毒气体等因素 的危害,增加了工人的劳动强度,甚至于危 机生命。由于以上的问题,需要一种东西代 替人在恶劣的环境中作业的要求呼之欲出, 同时随着社会的进步,工业自动化产品的性 能日益加强,而价格也因电子技术的高速发 展而不断下降,机械手就在这样诞生了,机 械手可以代替人在各种恶劣的环境中作业 。
本课题研究的目的和意义
鉴于PLC的优点和机械手的对人类的意义, 如果能把二者结合起来则会更加完美,这个 也是我们的课题研究的目的和意义所在—— 既采用PLC来控制机械手动作灵活多样 的完 成空间抓物。而在这次设计中有我和徐立同 同学共同完成,我则是主要负责软件部分, 主要是负责编写程序和调试程序,那么下面 我就我这一块给大家介绍一下这几个月我们 设计和研究的心得和结果。

epson机械手程序讲解

epson机械手程序讲解

epson机械手程序讲解Epson机械手程序讲解Epson机械手是一种先进的自动化设备,广泛应用于工业生产线上。

它的功能强大,可以完成各种复杂的任务,如搬运、装配和焊接等。

今天,我将为大家详细介绍Epson机械手的工作原理和程序控制。

我们来了解一下Epson机械手的结构。

它由基座、臂、手和手指组成。

基座固定在工作台上,臂连接在基座上,并可以在三个方向上移动。

手则连接在臂的末端,并具有多个关节,使机械手可以灵活地移动和旋转。

手指用于抓取物体,具有可调节的力量和灵敏度。

Epson机械手的程序控制是通过编程实现的。

在编写程序之前,我们首先需要对任务进行分析和规划。

然后,我们可以使用Epson机械手的编程软件来编写程序。

编程软件提供了一系列的指令,可以控制机械手的各种动作,如移动、旋转和抓取等。

在编写程序时,我们需要考虑机械手的安全性和效率。

为了确保机械手的安全操作,我们需要设置一些限制条件,如最大速度和力量。

此外,我们还可以使用传感器来检测环境和物体,以避免碰撞和损坏。

一旦程序编写完成,我们就可以将其加载到机械手的控制器中。

控制器是机械手的"大脑",负责解析和执行程序。

一旦程序开始执行,机械手将按照指定的路径和动作进行操作。

通过不断的反馈和调整,机械手可以高效地完成任务。

Epson机械手的运行速度和精度非常高,可以大大提高生产效率和质量。

它可以在短时间内完成大量的工作,而且准确无误。

与传统的人工操作相比,机械手可以减少人力成本和劳动强度,并提高工作环境的安全性。

总结一下,Epson机械手是一种功能强大的自动化设备,可以完成各种复杂的任务。

通过编写程序和控制器的实施,机械手可以高效地工作,并提高生产效率和质量。

它为工业生产线带来了巨大的改变,使生产过程更加安全、快速和精确。

相信随着技术的不断发展,Epson机械手将会在更多领域得到应用。

机械手的程序设计

机械手的程序设计

机械手的程序设计机械手是一种自动化装置,广泛应用于工业生产线、仓储物流等领域。

机械手的程序设计是指为机械手设定一系列的动作和任务,以实现特定的功能和工作流程。

本文将介绍机械手程序设计的基本原理和步骤。

一、机械手程序设计的基本原理机械手程序设计基于控制系统来实现。

控制系统包括硬件设备和软件程序两部分。

硬件设备主要包括机械手臂、传感器、执行器等,而软件程序则负责控制硬件设备的运作。

机械手程序设计的基本原理是将任务分解为一系列的运动和动作,并将其编程到机械手的控制系统中。

机械手可以通过各种传感器获取输入信号,并根据预先编写的程序进行相应的动作。

程序设计需要考虑到机械手的结构特点、工作环境以及任务需求,以保证机械手的安全性和工作效率。

二、机械手程序设计的步骤1. 分析任务需求:首先,需要对机械手的任务需求进行详细的分析和了解。

这包括任务的性质、工作空间的要求、物体的尺寸和重量等。

只有清楚了解任务需求,才能更好地进行程序设计。

2. 设计动作序列:根据任务需求,设计机械手的动作序列。

动作序列是指机械手需要执行的一系列动作和运动。

可以根据实际情况将任务分解为多个子任务,并设计相应的动作序列。

3. 编写程序代码:根据设计的动作序列,编写程序代码。

程序代码需要根据机械手控制系统的编程语言和平台来编写。

常用的编程语言包括C++、Python等。

4. 调试和优化:完成程序编写后,需要对程序进行调试和优化。

通过调试和测试可以发现和解决程序中的错误和问题,并对程序进行优化,提高机械手的工作效率和稳定性。

5. 上机验证和应用:在调试和优化完成后,将程序加载到机械手的控制系统中,并进行实际的上机验证和应用。

根据实际情况对程序进行进一步的调整和改进,以满足任务需求。

三、机械手程序设计的挑战和解决方案1. 运动规划:机械手的运动规划是程序设计的核心问题。

机械手的运动规划需要考虑到物体的位置、运动轨迹、碰撞检测等因素,以实现精确的动作控制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

1、主程序main&ACCESS RVP1&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF Pro_main( )INT l;FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI)GLOBAL INTERRUPT DECL 4 WHEN $IN[10]==FALSE DO Itrpt1 ()GLOBAL INTERRUPT DECL 5 WHEN $IN[11]==FALSE DO Itrpt1 ()INTERRUPT DECL 6 WHEN $IN[9]==TRUE DO Itrpt1 ();地轨异常进入中断INTERRUPT ON 6;开地轨监视中断6IF NOT Gripper_ChkStatus(1,"C") THENGripper_SetStatus(1,"O")Part0InLeft = FALSEPart2InLeft = FALSEENDIFIF NOT Gripper_ChkStatus(2,"C") THENGripper_SetStatus(2,"O")Part1InRight = FALSEENDIFFOR l = 1 TO 14$OUT[l] = FALSEENDFOR;此循环语句在初始化时把所有端口清零复位。

IF $IN[5] THENMachine1_OnlyDrop = TRUEMachine2_OnlyDrop = TRUE;机台1有首件信号时,机台1与机台2第一次响应只放标志位置1 ELSEMachine1_OnlyDrop = FALSEMachine2_OnlyDrop = FALSEENDIF$FLAG[8]=FALSE;FLAG[8]是干什么用的?;ENDFOLD (INI);初始化完成$OV_PRO=70;限定系统运行速度;FOLD PTP HOME Vel$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDIF $IN_HOME THEN$OUT[5]=FALSE$OUT[8]=FALSE$OUT[11]=FALSEENDIFLOOPWAIT SEC 0.05IF $IN[1] AND NOT Part0InLeft AND Gripper_ChkStatus(3,"O") THEN ToPick_Search()ENDIFIF Part0InLeft AND ($IN[3] OR Machine1_OnlyDrop) AND Gripper_ChkStatus(1,"C") AND Gripper_ChkStatus(2,"O") THENMachine1()ENDIFIF Part1InRight AND ($IN[6] OR Machine2_OnlyDrop) AND Gripper_ChkStatus(2,"C") AND Gripper_ChkStatus(1,"O") THENMachine2()ENDIFIF Part2InLeft AND ($IN[8] OR Machine3_OnlyDrop) AND Gripper_ChkStatus(1,"C") THENMachine3()ENDIFENDLOOPENDDEF Itrpt1 ()HALTBRAKEEND2、取料程序(采用中断的方法自动探料,完成取料作业)&ACCESS RVO2&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF ToPick_Search( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( );单独用了一个系统中断?INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)INTERRUPT DECL 1 WHEN $IN[10]==TRUE DO FOUND()SevenAxis_Run(1)GOTO MARK;FOLD PTP P1 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD;FOLD PTP P3 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT8FDAT_ACT=FP3BAS(#PTP_PARAMS,100)PTP XP3 C_DIS;ENDFOLD;FOLD LIN P2 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P1 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP1BAS(#CP_PARAMS,0.05)LIN XP1;ENDFOLD;FOLD PTP HOME Vel$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDmark:Search()INTERRUPT OFF 1WAIT SEC 0XP4=$POS_ACT;FOLD LIN P4 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT10FDAT_ACT=FP4BAS(#CP_PARAMS,2)LIN XP4 C_DIS C_DIS;ENDFOLDGripper_SetStatus(1,"O")LIN_REL{Z 15}LIN_REL{Z -17}Gripper_SetStatus(1,"C")Part0InLeft = TRUEWAIT SEC 0XP0=$POS_ACTXP0.Z=XP0.Z+25 ;看一下寻料程序到底是怎么运转的!;FOLD LIN P0 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT8FDAT_ACT=FP0BAS(#CP_PARAMS,0.025)LIN XP0 C_DIS C_DIS;ENDFOLDWAIT SEC 0IF NOT $IN[10] THENGOTO markENDIF;FOLD LIN P1 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP1BAS(#CP_PARAMS,2)LIN XP1 C_DIS C_DIS;ENDFOLDENDDEF Search( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( )INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)INTERRUPT ON 1;FOLD PTP P1 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD$OUT[16]=TRUE;FOLD LIN P3 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT11FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3 C_DIS C_DIS;ENDFOLD;FOLD LIN P2 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT5FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P1 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT6FDAT_ACT=FP1BAS(#CP_PARAMS,0.02)LIN XP1;ENDFOLDWAIT SEC 0ENDDEF FOUND()BRAKELIN $POS_INT ;rise a littleRESUMEEND3、机台1取放料程序(完成机台1取放料动作与信号交互)&ACCESS RVO2&REL 1&PARAM DISKPATH = KRC:\R1\ProgramDEF Machine1( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)SevenAxis_Run(1)$OUT[5]=TRUE;ENDFOLDIF NOT Machine1_OnlyDrop THEN;FOLD PTP P1 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT4FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLDmark:;FOLD LIN P2 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT4FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD LIN P3 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT5FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3 C_DIS C_DIS;ENDFOLDGripper_SetStatus(2,"C") LIN_REL{Z 7.5}Gripper_SetStatus(2,"O");FOLD LIN P3 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(2,"C") Part1InRight = TRUE;FOLD LIN P2 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT6FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2;ENDFOLDIF NOT $IN[11] THENGOTO markENDIF;FOLD PTP P4 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT10FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT8FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(1,"O");FOLD PTP P6 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT14FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT9FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDELSE;FOLD PTP P5 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT13FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT9FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7Gripper_SetStatus(1,"O");FOLD PTP P6 Vel$BWDSTART=FALSEPDAT_ACT=PPDAT12FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6;ENDFOLD;FOLD PTP P8 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT7FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDMachine_Start(1);FOLD PTP HOME Vel$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDENDIFIF Machine1_OnlyDrop THENMachine1_OnlyDrop = FALSEENDIFMachine_Start(1)END4、机台2取放料程序(完成机台2取放料动作与信号交互)&ACCESS RV2&REL 6&PARAM DISKPATH = KRC:\R1\ProgramDEF Machine2();FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI);ENDFOLD (INI)PTP $POS_ACTSevenAxis_Run(2)$OUT[8]=TRUEIF NOT Machine2_OnlyDrop THEN ;FOLD PTP P1 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT3FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLDmark:;FOLD PTP P2 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT4FDAT_ACT=FP2BAS(#PTP_PARAMS,100)PTP XP2 C_DIS;ENDFOLD;FOLD LIN P3 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT4FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(1,"C")LIN_REL{Z 7.5}Gripper_SetStatus(1,"O");FOLD LIN P3 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT0FDAT_ACT=FP3BAS(#CP_PARAMS,2)LIN XP3;ENDFOLDGripper_SetStatus(1,"C")Part2InLeft = TRUE;FOLD LIN P2 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT3FDAT_ACT=FP2BAS(#CP_PARAMS,0.05)LIN XP2 C_DIS C_DIS;ENDFOLDIF NOT $IN[10] THENGOTO markENDIF;FOLD PTP P4 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT7FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;ENDFOLD;FOLD PTP P5 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT14FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT9FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT7FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(2,"O");FOLD PTP P6 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT11FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT12FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDELSE;FOLD PTP P5 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT13FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLD;FOLD PTP P6 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT1FDAT_ACT=FP6BAS(#PTP_PARAMS,100)PTP XP6 C_DIS;ENDFOLD;FOLD LIN P7 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP7BAS(#CP_PARAMS,0.25)LIN XP7;ENDFOLDGripper_SetStatus(2,"O");FOLD LIN P6 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP6BAS(#CP_PARAMS,2)LIN XP6 C_DIS C_DIS;ENDFOLD;FOLD PTP P8 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP8BAS(#PTP_PARAMS,100)PTP XP8 C_DIS;ENDFOLDMachine_Start(2);FOLD PTP HOME Vel5:100, 7:DEFAULT$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLDENDIFIF Machine2_OnlyDrop THENMachine2_OnlyDrop = FALSEENDIFMachine_Start(2)END5、机台3取放料程序(完成机台3取放料动作与信号交互)&ACCESS RVP1&REL 6DEF Machine3( );FOLD INI;%{PE};FOLD BASISTECH INIGLOBAL INTERRUPT DECL 3 WHEN $STOPMESS==TRUE DO IR_STOPM ( ) INTERRUPT ON 3BAS (#INITMOV,0 );ENDFOLD (BASISTECH INI);FOLD USER INI;Make your modifications here;ENDFOLD (USER INI)WAIT FOR $FLAG[1]$FLAG[8]=TRUE;ENDFOLD (INI)PTP $POS_ACTSevenAxis_Run(3)$OUT[11]=TRUE;ENDFOLD;FOLD PTP P1 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT6FDAT_ACT=FP1BAS(#PTP_PARAMS,100)PTP XP1 C_DIS;ENDFOLD;FOLD PTP P2 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT2FDAT_ACT=FP2BAS(#PTP_PARAMS,100)PTP XP2 C_DIS;ENDFOLD;FOLD LIN P3 Vel$BWDSTART=FALSELDAT_ACT=LCPDAT1FDAT_ACT=FP3BAS(#CP_PARAMS,0.25)LIN XP3;ENDFOLDGripper_SetStatus(1,"O");FOLD LIN P2 CONT Vel$BWDSTART=FALSELDAT_ACT=LCPDAT2FDAT_ACT=FP2BAS(#CP_PARAMS,2)LIN XP2 C_DIS C_DIS;ENDFOLD;FOLD PTP P4 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT3FDAT_ACT=FP4BAS(#PTP_PARAMS,100)PTP XP4 C_DIS;FOLD PTP P5 CONT Vel$BWDSTART=FALSEPDAT_ACT=PPDAT5FDAT_ACT=FP5BAS(#PTP_PARAMS,100)PTP XP5 C_DIS;ENDFOLDMachine_Start(3);FOLD PTP HOME Vel$BWDSTART=FALSEPDAT_ACT=PDEFAULTFDAT_ACT=FHOMEBAS(#PTP_PARAMS,100)$H_POS=XHOMEPTP XHOME;ENDFOLD$TIMER_STOP[1]=FALSEIF $TIMER[1]>0 THEN$TIMER_STOP[1]=TRUEENDIFIF Machine3_OnlyDrop THENMachine3_OnlyDrop = FALSEENDIFCount_Part=Count_Part+1IF Count_Part>=40 THENCount_Part=0SevenAxis_Run(4)WAIT SEC 0.1ENDIFEND6、地轨运动程序(完成与地轨信号交互及运动交互)&ACCESS RV2&REL 8&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabe DEF SevenAxis_Run(Num:IN)INT NumSWITCH NumCASE 1PULSE($OUT[1], TRUE,1);ENDFOLDPULSE($OUT[14], TRUE,1);ENDFOLDWAIT FOR $IN[2]$OUT[1] = FALSE$OUT[14] = FALSECASE 2PULSE($OUT[2], TRUE,1)PULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[2] = FALSE$OUT[14] = FALSECASE 36:, 8:1PULSE($OUT[3], TRUE,1);ENDFOLDPULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[3] = FALSE$OUT[14] = FALSECASE 4PULSE($OUT[4], TRUE,1);ENDFOLDPULSE($OUT[14], TRUE,1);ENDFOLDWAIT SEC 0.5WAIT FOR $IN[2]$OUT[4] = FALSE$OUT[14] = FALSEDEFAULTMsgQuit("Error")ENDSWITCHEND7、机台启动控制程序(完成机台启动,取消工作中信号给开始加工信号)&ACCESS RV2&REL 3&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\ExpertVorgabeDEF Machine_Start(Num:IN)INT NumSWITCH NumCASE 1$OUT[5]=FALSE;ENDFOLDPULSE($OUT[6], TRUE,0.5);ENDFOLDCASE 2$OUT[8]=FALSE;ENDFOLDPULSE($OUT[9], TRUE,0.5);ENDFOLDCASE 3$OUT[11]=FALSE;ENDFOLDPULSE($OUT[12], TRUE,0.5);ENDFOLDDEFAULTMsgQuit("Error")ENDSWITCHEND8、手爪控制程序(完成对手爪的控制)手爪1控制点位为OUT[16],对应检测为IN[10],对应中断4手爪2控制点位为OUT[15],对应检测为IN[11],对应中断5 &ACCESS RV2&REL 50&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\vorgabeDEF Gripper_SetStatus(Num:IN,Status:IN)INT NumCHAR StatusSWITCH NumCASE 1SWITCH StatusCASE "O"IF NOT $T1 THENINTERRUPT OFF 4ENDIF$OUT[16] = FALSEWAIT SEC 0.3WAIT FOR NOT $IN[10]Part0InLeft = FALSEPart2InLeft = FALSECASE "C"IF NOT $T1 THENINTERRUPT ON 4ENDIF$OUT[16] = TRUEWAIT SEC 0.5WAIT FOR $IN[10]DEFAULTMsgQuit("Element Error")ENDSWITCHCASE 2SWITCH StatusCASE "O"IF NOT $T1 THENINTERRUPT OFF 5ENDIFINTERRUPT OFF 89$OUT[15] = FALSEWAIT SEC 0.3WAIT FOR NOT $IN[11]Part1InRight = FALSECASE "C"IF NOT $T1 THENINTERRUPT ON 5ENDIF$OUT[15] = TRUEWAIT SEC 0.5WAIT FOR $IN[11]Part1InRight = TRUEDEFAULTMsgQuit("Element Error")ENDSWITCHDEFAULTMsgQuit("Element Error")ENDSWITCHEND9、手爪真空检测(完成对掉料状况的检测)&ACCESS RV2&REL 10&PARAM EDITMASK = *&PARAM TEMPLATE = C:\KRC\Roboter\Template\FunctionVorgabe DEFFCT BOOL Gripper_ChkStatus(Num:IN,Status:IN)INT NumCHAR StatusSWITCH NumCASE 1SWITCH StatusCASE "O"IF NOT $OUT[16] AND NOT $IN[10] THENRETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[16] AND $IN[10] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHCASE 2SWITCH StatusCASE "O"IF NOT $OUT[15] AND NOT $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[15] AND $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHCASE 3SWITCH StatusCASE "O"IF NOT $OUT[15] AND NOT $OUT[16] AND NOT $IN[10] AND NOT $IN[11] THEN RETURN TRUEELSERETURN FALSEENDIFCASE "C"IF $OUT[15] AND $OUT[16] AND $IN[10] AND $IN[11] THENRETURN TRUEELSERETURN FALSEENDIFDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHDEFAULTMsgQuit("Element Error")RETURN FALSEENDSWITCHENDFCT10、装夹检测子程序(完成对每台机的装夹检测与装夹异常信号交互)11、后台监视程序(对安全姿态信号自动触发等后台程序进行配置)&ACCESS R&COMMENT HandlerOnRobotFaultDEF IR_STOPM ( );-----------------------------------; Error Handling Robot Controller; Switch OFF and Switch ON processes; KRC Version >= V5.5;-----------------------------------;FOLD DECLARATIONS;FOLD USER DECL; Please insert user defined declarations;ENDFOLD (USER DECL);FOLD BASISTECH DECLBOOL ApplicationRunFlagDECL CHAR ID[3];ENDFOLD (BASISTECH DECL);ENDFOLD (DECLARATIONS);FOLD BASISTECH INITINTERRUPT OFF 3STOPM_FLAG=TRUE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt ID[]="CTL"If ($STOPMESS==TRUE) THENBRAKE;ENDFOLD (BASISTECH INIT);FOLD USER STOP;Make your modifications here;ENDFOLD (USER STOP);FOLD BASISTECH STOPP00 (#EXT_ERR,#PGNO_GET,ID[],128 )ApplicationRunFlag=FALSEIF (Appl_Run>0) THENIF $OUT[Appl_Run] THENApplicationRunFlag=TRUE$OUT[Appl_Run]=FALSEENDIFENDIFREPEATPOWER=SYNC()HALTUNTIL (($STOPMESS==FALSE) AND ($POWER_FAIL==FALSE));ENDFOLD (BASISTECH STOP);FOLD BASISTECH RESTARTP00 (#EXT_ERR,#PGNO_GET,ID[],0 )IF (ApplicationRunFlag==TRUE) THENIF (Appl_Run>0) THEN$OUT[Appl_Run]=TRUEENDIFENDIF;ENDFOLD (BASISTECH RESTART);FOLD USER RESTART;Make your modifications here;ENDFOLD (USER RESTART);FOLD BASISTECH REACTIVATEEndifINTERRUPT ON 3STOPM_FLAG=FALSE ;Reflects state of interrupt 3 to activate/deactivate $Stopmess interrupt ;ENDFOLD (BASISTECH REACTIVATE)END。

相关文档
最新文档