ABB机器人程序实例

合集下载

ABB机器人程序实例

ABB机器人程序实例

MODULE MainModuleCONST robtarget pHome:=[[1525.42,272.18,1873.69],[4.42963E-05,0.699969, -0.714173,-2.80277E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09, 9E+09,9E+09,9E+09]];CONST robtarget pPrePickMould:=[[1653.99,272.19,1779.41],[5.83312E-05,0 .69997,-0.714172,-3.47922E-05],[0,-1,-1,0],[9E+09,9E+09 ,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPrePickClapboard:=[[2036.17,-741.24,1235.05],[0.678651 ,0.73435,-0.0119011,0.00467586],[-1,-2,2,0],[9E+09,9E+0 9,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPickMould:=[[1943.13,173.08,630.89],[4.66987E-05,0.699 977,-0.714166,-3.24109E-05],[0,-1,-1,0],[9E+09,9E+09,9E +09,9E+09,9E+09,9E+09]];CONST robtarget pPickClapboard:=[[1943.19,173.08,620.72],[1.61422E-05,0 .699977,-0.714165,-7.62858E-06],[0,-1,-1,0],[9E+09,9E+0 9,9E+09,9E+09,9E+09,9E+09]];CONST robtargetpPrePlace:=[[785.90,-957.40,1722.38],[0.00231652,0.0492 402,-0.998779,-0.00310842],[-1,-1,-1,0],[9E+09,9E+09,9E +09,9E+09,9E+09,9E+09]];CONST robtarget pPrePlace10:=[[-277.40,-1202.57,1621.17],[0.00183571,-0 .0139794,-0.999895,-0.00341408],[-2,-1,-2,0],[9E+09,9E+ 09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPrePlace20:=[[-491.18,-1082.85,1505.90],[0.000663644,0 .69408,0.719887,0.00386364],[-2,0,-1,0],[9E+09,9E+09,9E +09,9E+09,9E+09,9E+09]];CONST robtarget pPlaceMould:=[[-92.13,-2580.19,1171.45],[0.000771646,0. 713144,0.701007,0.00383692],[-2,0,-1,0],[9E+09,9E+09,9E +09,9E+09,9E+09,9E+09]];CONST robtarget pPlaceClapboard:=[[1585.08,1761.04,787.33],[0.00645323, -0.00552996,-0.726358,-0.687263],[0,1,-1,0],[9E+09,9E+0 9,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPrePlaceClapboard:=[[1017.30,955.85,1443.17],[1.0621E-05,-0.00849593,-0.999964,4.01139E-05],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPrePickClapboard10:=[[2257.17,-841.03,1579.56],[0.6675 17,0.74457,-0.00360206,0.00487631],[-1,-1,2,0],[9E+09,9 E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPrePickMould10:=[[530.24,-1703.27,1762.63],[5.07659E-0 5,0.96161,0.274421,2.37287E-05],[-1,0,0,0],[9E+09,9E+09 ,9E+09,9E+09,9E+09,9E+09]];CONST num nOffs:=100;PERS num nCurOffs:=100;CONST num nLayer:=0;PERS num nCurLayer:=0;CONST num nThickness:=40;VAR bool bTimeOut:=FALSE;PERS bool bDryCycle:=FALSE;VAR intnum iDryCycle;VAR intnum iResDryCycle;VAR intnum iVacuum;PERS tooldatatGripper:=[TRUE,[[0,0,100],[1,0,0,0]],[88.5,[-3.7,-1.4, 132.1],[1,0,0,0],5.5,17.831,25.067]];PROC main()rInitAll;WHILE TRUE DOIF siDryCycle=1 or nCurLayer<1 thenrPickClapboard;ELSErPickMould;ENDIFWaittime 0.2;ENDWHILEENDPROCPROC rPickMould()DIWait diMouldready,1,3,"entrance Conveyer","ready for pick";DIWait diPlaceReady,1,3,"exit Conveyer","ready for remove";MoveJ pPrePickMould, v1500, z50, tGripper;IF BitCheck(nCurlayer,1) THENnCurOffs:=nOffs;ELSEnCurOffs:=-nOffs;ENDIFMoveLoffs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness),v1000, z50, tGripper;MoveLoffs(pPickMould,0,nCurOffs,(nCurLayer-1)*nThickness),v200, fine, tGripper;GripClose;Decr nCurLayer;MoveLoffs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness),v200, z50, tGripper;MoveJ pPrePickMould, v1000, z50, tGripper;DIWait diPlaceReady,1,3,"exit Conveyer","ready for remove";MoveJ pPrePlace10, v1500, z10, tGripper;MoveL offs(pPlaceMould,0,0,100), v1500, z10, tGripper;MoveL pPlaceMould, v200, fine, tGripper;GripOpen;MoveL offs(pPlaceMould,0,0,100), v200, z10, tGripper;MoveL pPrePlace10, v1500, z10, tGripper;MoveJ pPrePickMould, v1500, z10, tGripper;PulseDO\PLength:=2, doMouldPlaceOK;ENDPROCPROC rPickClapboard()DIWait diMouldready,1,3,"entrance Conveyer","ready for pick";MoveL offs(pPickClapboard,0,0,100), v1000, z50, tGripper;MoveL pPickClapboard, v200, fine, tGripper;GripClose;MoveL offs(pPickClapboard,0,0,100) ,v200, z50, tGripper;MoveL offs(pPickClapboard,0,0,500) ,v1000, z50, tGripper;MoveL pPrePlaceClapboard, v1000, z10, tGripper;DIWait diClapboardReady, 1, 3, "exit Conveyer", "ready for remove";MoveL offs(pPlaceClapboard,-700,-200,250), v1000, z10, tGripper;MoveL offs(pPlaceClapboard,00,-10,100), v1000, z10, tGripper;MoveL pPlaceClapboard, v100, fine, tGripper;GripOpen;MoveL offs(pPlaceClapboard,0,-50,100), v1000, z10, tGripper;MoveL offs(pPlaceClapboard,-700,-200,250), v1000, z10, tGripper;MoveL pPrePlaceClapboard, v1000, z10, tGripper;PulseDO\PLength:=1.0, doClapboardPickOK;MoveJ pHome, v1500, fine, tGripper;PulseDO\PLength:=1.0, doUnStackOk;WaitTime 2;DIWait diMouldready,0,3,"exit Conveyer","ready for remove";nCurLayer:=nLayer;ENDPROCPROC rInitAll()IF diVacuum1=0 THENWaitTime 1;ELSEErrWrite "The Rob1 gripper error! " ,"The gripper is not opened!"\RL2:="Check the gripper signal postion ."\RL3:=" open the gripper manually and take away the part from gripper.";Stop;Exit;ENDIFrMoveHome;nCurLayer:=nLayer;IDelete iVacuum;CONNECT iVacuum WITH tLostPart;ISignalDI diVacuum1, 1, iVacuum;ISleep iVacuum;ENDPROCROC GripClose()SetDO doVacuum,1;SetDO doBlow,0;WaitUntildiVacuum1=1\MaxTime:=10\TimeFlag:=bTimeOut;IF bTimeOut THENErrWrite "Rob Gripper Signal error ! " ,"Fatal error in Gripper"\RL2:="Check the gripper signal postion ."\RL3:=" change a new sensor .";Stop;ENDIFWaittime 0.5;IWatch iVacuum;ENDPROCPROC GripOpen()ISleep iVacuum;SetDO doVacuum,0;PulseDO \PLength:=2.0, doBlow;WaitUntil diVacuum1=0 \MaxTime:=5\TimeFlag:=bTimeOut;IF bTimeOut THENErrWrite "Rob Gripper Signal error ! " ,"Fatal error in Gripper"\RL2:="Check the gripper signal postion ."\RL3:=" change a new sensor .";Stop;ENDIFWaittime 0.5;ENDPROCPROC rMoveHome()VAR string HomeOffset;CONST num MinX:=-500;CONST num MaxX:=500;CONST num MinY:=-500;CONST num MaxY:=500;CONST num MinZ:=500;CONST num MaxZ:=1200;VAR robtarget ActualPos;VelSet 100,500;AccSet 70, 70;IF bCurrentPos(pHome,tGripper,50)=TRUE THEN M oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIFbCurrentPos(pPrePickMould,tGripper,50\wobj:=Wobj0)= TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIFbCurrentPos(pPrePickClapboard,tGripper,100\wobj:=Wobj0) = TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIFbCurrentPos(pPreplace,tGripper,100\wobj:=Wobj0)= TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIF bCurrentPos(pHome,tGripper,100)=FALSE THEN! If no known position is found, check if the robot is in a specified! window and move him to the first position in the programActualPos:=CRobT(\Tool:=tGripper\WObj:=wobj0); IF ActualPos.trans.x<MinX OR ActualPos.trans.x>MaxX OR ActualPos.trans.y<MinY OR ActualPos.trans.y>MaxY OR ActualPos.trans.z<MinZ OR ActualPos.trans.z>MaxZ THENHomeOffset:="";IF ActualPos.trans.x<MinX THENHomeOffset:=HomeOffset+"X :"+NumToStr(MinX-ActualPos.tr ans.x,0)+" ";ELSEIF ActualPos.trans.x>MaxX THENHomeOffset:=HomeOffset+"X :"+NumToStr(MaxX-ActualPos.tr ans.x,0)+" ";ELSEHomeOffset:=HomeOffset+"X : OK ";ENDIFIF ActualPos.trans.y<MinY THENHomeOffset:=HomeOffset+"Y :"+NumToStr(MinY-ActualPos.tr ans.y,0)+" ";ELSEIF ActualPos.trans.y>MaxY THENHomeOffset:=HomeOffset+"Y :"+NumToStr(MaxY-ActualPos.tr ans.y,0)+" ";ELSEHomeOffset:=HomeOffset+"Y : OK ";ENDIFIF ActualPos.trans.z<MinZ THENHomeOffset:=HomeOffset+"Z :"+NumToStr(MinZ-ActualPos.tr ans.z,0)+" ";ELSEIF ActualPos.trans.z>MaxZ THENHomeOffset:=HomeOffset+"Z :"+NumToStr(MaxZ-ActualPos.tr ans.z,0)+" ";ELSEHomeOffset:=HomeOffset+"Z : OK ";ENDIFErrWrite HomeOffset,"Move robot manually near homeposition";WHILE OpMode()<>OP_MAN_PROG DOTPErase;TPWrite "Please switch robot to Manual mode"; !TPErase;Stop;ENDWHILEStop;MoveJ pHome,v500,fine,tGripper;!npallet:=4;ActualPos:=CRobT(\Tool:=tGripper\WObj:=wobj0);WHILE OpMode()<>OP_AUTO DOTPErase;TPWrite "Please switch robot to AUTO mode"; !TPErase;Stop;ENDWHILEENDIFENDIFVelSet 100,3000;ENDPROCTRAP tLostPartErrWrite "Part lost!" ,"Fatal error in Gripper"\RL2:="Check the gripper ."\RL3:=" check the vacuum .";Stop;ENDTRAPENDMODULE。

abb机器人程序实例

abb机器人程序实例

abb机器人程序实例随着科技的不断进步和人工智能的快速发展,机器人已经成为我们生活中不可或缺的一部分。

而abb机器人则是其中一种应用广泛的机器人程序。

本文将介绍abb机器人程序的实例和应用。

abb机器人程序是一种用于控制abb机器人的软件程序。

它可以让机器人具备自主的工作能力,完成各种任务,提高工作效率,减少人力成本。

下面我们将以工业领域中的应用为例,来具体介绍abb 机器人程序的实例。

abb机器人程序在汽车生产线上的应用非常广泛。

在汽车制造过程中,需要进行许多重复的工作,如焊接、喷漆、装配等。

通过编写abb机器人程序,可以将这些工作交给机器人来完成。

机器人根据程序指令,可以准确地进行焊接,保证焊接质量;可以均匀地喷漆,提高喷漆效率;可以精确地进行装配,保证装配的质量。

这样不仅提高了生产效率,还减少了工人的劳动强度,提高了产品质量。

除了汽车制造,abb机器人程序还在电子制造行业中得到了广泛应用。

在电子制造过程中,需要进行很多微小精细的操作,如电路板组装、元器件焊接等。

这些操作对操作者的技术要求很高,而且容易出错。

通过编写abb机器人程序,可以让机器人来完成这些操作,提高操作的准确性。

机器人可以根据程序指令,精确地完成电路板的组装,确保组装的准确性;可以精确地进行元器件的焊接,保证焊接的质量。

这样不仅提高了生产效率,还减少了产品的不良率。

abb机器人程序还可以在仓储物流行业中得到应用。

在仓储物流过程中,需要进行大量的物品搬运和装卸工作。

通过编写abb机器人程序,可以让机器人来完成这些工作,提高搬运和装卸的效率。

机器人可以根据程序指令,准确地搬运物品,避免了人工搬运的不准确和劳累;可以精确地进行装卸工作,保证装卸的速度和质量。

这样不仅提高了物流效率,还减少了人力资源的浪费。

总结起来,abb机器人程序在工业领域中的应用非常广泛。

通过编写abb机器人程序,可以让机器人具备自主的工作能力,完成各种任务,提高工作效率,减少人力成本。

(完整版)ABB机器人的程序编程

(完整版)ABB机器人的程序编程

ABB[a]-J-6ABB 机器人的程序编程6.1 任务目标➢掌握常用的PAPID 程序指令。

➢掌握基本RAPID程序编写、调试、自动运行和保存模块。

6.2 任务描述◆建立程序模块test12.24,模块test12.24 下建立例行程序main 和Routine1,在main 程序下进行运动指令的基本操作练习。

◆掌握常用的RAPID 指令的使用方法。

◆建立一个可运行的基本RAPID程序,内容包括程序编写、调试、自动运行和保存模块。

6.3 知识储备6.3.1 程序模块与例行程序RAPID 程序中包含了一连串控制机器人的指令,执行这些指令可以实现对机器人的控制操作。

应用程序是使用称为RAPID 编程语言的特定词汇和语法编写而成的。

RAPID 是一种英文编程语言,所包含的指令可以移动机器人、设置输出、读取输入,还能实现决策、重复其他指令、构造程序、与系统操作员交流等功能。

RAPID 程序的基本架构如图所示:RAPID 程序的架构说明:1)RAPID 程序是由程序模块与系统模块组成。

一般地,只通过新建程序模块来构建机器人的程序,而系统模块多用于系统方面的控制。

2)可以根据不同的用途创建多个程序模块,如专门用于主控制的程序模块,用于位置计算的程序模块,用于存放数据的程序模块,这样便于归类管理不同用途的例行程序与数据。

3)每一个程序模块包含了程序数据、例行程序、中断程序和功能四种对象,但不一定在一个模块中都有这四种对象,程序模块之间的数据、例行程序、中断程序和功能是可以互相调用的。

4)在RAPID 程序中,只有一个主程序main,并且存在于任意一个程序模块中,并且是作为整个RAPID 程序执行的起点。

操作步骤:6.3.2 在示教器上进行指令编程的基本操作ABB 机器人的RAPID 编程提供了丰富的指令来完成各种简单与复杂的应用。

下面就从最常用的指令开始学习RAPID 编程,领略RAPID 丰富的指令集提供的编程便利性。

ABB工业机器人编程基础操作-建立RAPID程序

ABB工业机器人编程基础操作-建立RAPID程序
•ABB工业机器人编程基础操作-建立RAPID程序
3.FOR重复执行判断指令 FOR重复执行判断指令,是用于一个或多个指令需要重 复执行次数的情况 FOR i FROM 1 TO 6 DO
Routine1; ENDFOR 例行程序Routine1,重复执行6次。 4.WHILE条件判断指令 WHILE条件判断指令,用于在给定条件满足的情况下, 一直重复执行对应的指令。 WHILE num1>num2 DO
度值来定义目标位置数据。 操作步骤如下:
•ABB工业机器人编程基础操作-建立RAPID程序
•ABB工业机器人编程基础操作-建立RAPID程序
•ABB工业机器人编程基础操作-建立RAPID程序
•ABB工业机器人编程基础操作-建立RAPID程序
•ABB工业机器人编程基础操作-建立RAPID程序
MoveAbsJ jpos10 \NoEOffs, v1000, z50,tool1\Wobj:=wobj1; MoveAbsJ指令解析
•ABB工业机器人编程基础操作-建立RAPID程序
5.WaitUntil信号判断指令 WaitUntil信号判断指令可用于布尔量、数字量和I/O信号值的 判断,如果条件到达指令中的设定值,程序继续往下执行,否 则就一直等待,除非设定了最大等待时间。flag1为布尔量型数 据,num1数字型数据。 WaitUntil di1 = 1; WaitUntil do1 = 0; WaitUntil flag = TRUE; WaitUntil num1 = 8;
•ABB工业机器人编程基础操作-建立RAPID程序
•ABB工业机器人编程基础操作-建立RAPID程序
5.2基本RAPID程序指令 ABB工业机器人提供了多种编程指令可以完成工业机器人 在焊接、码垛、搬运等各种应用。下面将从最常用的指令开始 学习RAPID编程。

【原创】ABB机器人编程之程序流程指令(含案例)

【原创】ABB机器人编程之程序流程指令(含案例)

【原创】ABB机器人编程之程序流程指令(含案例)导读:机器人程序的执行是从上到下的方式,从第一条指令逐次扫描至程序的结尾,不断循环。

但是在某种场合,需要程序的等待、程序的跳转以及程序的停止,这些场合都会影响到程序的流程。

例如:在机器人抓取物料的时候,机器人抓完了之后,需要等机器人抓稳了,机器人才移动,这就需要进行程序的等待!那接下来我们来看几个关于程序流程指令吧!1.waitTime:用于等待给定的时间例1:WaitTime 0.5;程序执行等待0.5秒程序执行等待的最短时间(以秒计)为0 s。

最长时间不受限制。

分辨率为0.001 s。

详解:机器人程序指针执行到此条指令,必须等待0.5秒以后才继续往下执行!例2:WaitTime \InPos,0.5详解:在WaitTime指令后面加入了Inpos参数的含义就是:机器人到位且完全停止后才开始计时,时间到达0.5秒以后才继续往下执行!例3:MoveJ p1, vmax, fine, tool2;WaitTime \InPos,0.5;MoveJ p2, vmax, z30, tool2;详解:机器人到达P1位置点之后,并且机器人完全停止下来,才开始计时,时间到达0.5秒以后才机器人继续执行到达P2位置点。

2. WaitDI:用于等待,直至已设置数字信号输入例1:WaitDI di4, 1;仅在已设置di4输入后,继续程序执行。

详解:机器人程序指针执行到此条指令,需要等待开关信号di4为1的时候,才往下执行。

例2:WaitDI di0,1\MaxTime:=3;详解:在WaitDI di0,1指令后面加上了可选参数MaxTime:=3,则表示允许的最长等待时间3秒。

如果在3秒时间以内di0还没有为1,机器人则报错处理。

3. WaitUntil:用于等待,直至满足逻辑条件。

例如,其可以等待,直至已设置一个或多个输入例1:WaitUntil di4 = 1;仅在已设置di4输入后,继续程序执行。

ABB机器人程序数据

ABB机器人程序数据

ABB 机器人程序数据编程实例1:路径如下,编写程序程序如下,程序名为move0,放在名为TEST0的程序模块中。

MODULE TEST0PROC move0 ()MoveL p10, v200, fine, tPen;MoveL p20, v200, fine, tPen;MoveL p30, v200, fine, tPen;MoveL p40, v200, fine, tPen;MoveL p10, v200, fine, tPen;ENDPROCENDMODULE编程实例2:路径如下,编写程序程序如下,程序名为move1,放在名为TEST1的程序模块中。

MODULE TEST1PROC move1( )MoveL p10, v200, fine, tPen;MoveL p20, v200, Z50, tPen;MoveL p30, v200, fine, tPen;MoveL p40, v200, Z50, tPen;MoveL p10, v200, fine, tPen;ENDPROCENDMODULE编程实例3:编写程序MoveL p1, v500, fine, tool1;MoveC p2, p3, v500, z20, tool1; P1、P2、P3三点确定一个圆弧MoveC p4, p1, v500, fine, tool1; P3、P4、P1三点确定一个圆弧如下图所示,不一定是一个圆,如右图所示,与P4点的位置有关。

一条MoveC指令最多只能转过240°,因此不可能通过一条指令完成一个圆。

编程实例4:利用MoveAbsJ让机器人返回机械原点位置提示:机械原点处轴1-6角度分别为0-0-0-0-30-0度。

(轴5的角度也可以设置为90°或其他角度,设为0°会出现奇异点)编程实例5:函数Offs()Offs(p1,x,y,z)代表一个离p1点X轴偏差量为x,Y轴偏差量为y,Z轴偏差量为z的点(坐标值的增量)。

ABB机器人的程序编程

ABB机器人的程序编程

ABB[a]-J-6ABB 机器人的程序编程6.1 任务目标掌握常用的PAPID 程序指令。

掌握基本RAPID程序编写、调试、自动运行和保存模块。

6.2 任务描述◆建立程序模块test12.24,模块test12.24 下建立例行程序main 和Routine1,在main 程序下进行运动指令的基本操作练习。

◆掌握常用的RAPID 指令的使用方法。

◆建立一个可运行的基本RAPID程序,内容包括程序编写、调试、自动运行和保存模块。

6.3 知识储备6.3.1 程序模块与例行程序RAPID 程序中包含了一连串控制机器人的指令,执行这些指令可以实现对机器人的控制操作。

应用程序是使用称为RAPID 编程语言的特定词汇和语法编写而成的。

RAPID 是一种英文编程语言,所包含的指令可以移动机器人、设置输出、读取输入,还能实现决策、重复其他指令、构造程序、与系统操作员交流等功能。

RAPID 程序的基本架构如图所示:RAPID 程序的架构说明:1)RAPID 程序是由程序模块与系统模块组成。

一般地,只通过新建程序模块来构建机器人的程序,而系统模块多用于系统方面的控制。

2)可以根据不同的用途创建多个程序模块,如专门用于主控制的程序模块,用于位置计算的程序模块,用于存放数据的程序模块,这样便于归类管理不同用途的例行程序与数据。

3)每一个程序模块包含了程序数据、例行程序、中断程序和功能四种对象,但不一定在一个模块中都有这四种对象,程序模块之间的数据、例行程序、中断程序和功能是可以互相调用的。

4)在RAPID 程序中,只有一个主程序main,并且存在于任意一个程序模块中,并且是作为整个RAPID 程序执行的起点。

操作步骤:6.3.2 在示教器上进行指令编程的基本操作ABB 机器人的RAPID 编程提供了丰富的指令来完成各种简单与复杂的应用。

下面就从最常用的指令开始学习RAPID 编程,领略RAPID 丰富的指令集提供的编程便利性。

ABB机器人程序编写实战

ABB机器人程序编写实战

疏散现场
如果发生事故或危险情况 ,应立即疏散现场,并采 取必要的急救措施。
报告事故
对于任何事故或危险情况 ,应立即向上级主管部门 报告,以便及时采取措施 防止类似事故再次发生。
06
ABB机器人发展趋势与展 望
新技术融合
机器人与物联网技术融合
通过物联网技术,实现机器人远程监控、数据采集和智能决策,提升机器人智 能化水平。
复杂轨迹编程
总结词
复杂轨迹编程涉及到机器人的多轴联动、协同作业等 高级应用,需要精确控制机器人的姿态和速度。
详细描述
在复杂轨迹编程中,需要实现机器人的多轴联动和协 同作业等高级应用。这需要精确控制机器人的姿态和 速度,以实现复杂轨迹的跟踪和控制。同时,还需要 考虑机器人的动力学特性和运动稳定性,以确保机器 人在高速运动和高精度操作时的安全性和稳定性。复 杂轨迹编程的应用可以提高机器人的工作效率和灵活 性,使其能够适应更多复杂和多样化的任务场景。
变量
变量是用于存储数据的标识符,具有 名称、数据类型和值。在RAPID语言 中,变量可以进行声明、赋值和传递 。
程序控制结构
顺序结构
按照程序代码的顺序执行。
选择结构
根据条件判断选择执行不同的 代码块。
循环结构
重复执行某段代码直到满足特 定条件。
跳转结构
根据需要跳过某些代码或提前 结束程序执行。
函数与子程序
ABB机器人程序编写实战
汇报人: 202X-12-30
contents
目录
• ABB机器人简介 • ABB机器人编程语言 • ABB机器人编程实战 • ABB机器人调试与优化 • ABB机器人安全操作 • ABB机器人发展趋势与展望
01
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MODULE MainModuleCONST robtarget pHome:=[[1525.42,272.18,1873.69],[4.42963E-05,0.699969,-0.7141 73,-2.80277E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9 E+09]];CONST robtarget pPrePickMould:=[[1653.99,272.19,1779.41],[5.83312E-05,0.69997, -0.714172,-3.47922E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9 E+09,9E+09]];CONST robtarget pPrePickClapboard:=[[2036.17,-741.24,1235.05],[0.678651,0.73435 ,-0.0119011,0.00467586],[-1,-2,2,0],[9E+09,9E+09,9E+09,9E+09,9 E+09,9E+09]];CONST robtarget pPickMould:=[[1943.13,173.08,630.89],[4.66987E-05,0.699977,-0.7 14166,-3.24109E-05],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+0 9,9E+09]];CONST robtarget pPickClapboard:=[[1943.19,173.08,620.72],[1.61422E-05,0.699977, -0.714165,-7.62858E-06],[0,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9 E+09,9E+09]];CONST robtargetpPrePlace:=[[785.90,-957.40,1722.38],[0.00231652,0.0492402,-0.99 8779,-0.00310842],[-1,-1,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09, 9E+09]];CONST robtarget pPrePlace10:=[[-277.40,-1202.57,1621.17],[0.00183571,-0.0139794, -0.999895,-0.00341408],[-2,-1,-2,0],[9E+09,9E+09,9E+09,9E+09,9 E+09,9E+09]];CONST robtarget pPrePlace20:=[[-491.18,-1082.85,1505.90],[0.000663644,0.69408,0. 719887,0.00386364],[-2,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09 ,9E+09]];CONST robtarget pPlaceMould:=[[-92.13,-2580.19,1171.45],[0.000771646,0.713144,0 .701007,0.00383692],[-2,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+0 9,9E+09]];CONST robtarget pPlaceClapboard:=[[1585.08,1761.04,787.33],[0.00645323,-0.00552 996,-0.726358,-0.687263],[0,1,-1,0],[9E+09,9E+09,9E+09,9E+09,9 E+09,9E+09]];CONST robtarget pPrePlaceClapboard:=[[1017.30,955.85,1443.17],[1.0621E-05,-0.00 849593,-0.999964,4.01139E-05],[0,-1,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];CONST robtarget pPrePickClapboard10:=[[2257.17,-841.03,1579.56],[0.667517,0.744 57,-0.00360206,0.00487631],[-1,-1,2,0],[9E+09,9E+09,9E+09,9E+0 9,9E+09,9E+09]];CONST robtarget pPrePickMould10:=[[530.24,-1703.27,1762.63],[5.07659E-05,0.961 61,0.274421,2.37287E-05],[-1,0,0,0],[9E+09,9E+09,9E+09,9E+09,9 E+09,9E+09]];CONST num nOffs:=100;PERS num nCurOffs:=100;CONST num nLayer:=0;PERS num nCurLayer:=0;CONST num nThickness:=40;V AR bool bTimeOut:=FALSE;PERS bool bDryCycle:=FALSE;V AR intnum iDryCycle;V AR intnum iResDryCycle;V AR intnum iVacuum;PERS tooldatatGripper:=[TRUE,[[0,0,100],[1,0,0,0]],[88.5,[-3.7,-1.4,132.1],[1,0,0, 0],5.5,17.831,25.067]];PROC main()rInitAll;WHILE TRUE DOIF siDryCycle=1 or nCurLayer<1 thenrPickClapboard;ELSErPickMould;ENDIFWaittime 0.2;ENDWHILEENDPROCPROC rPickMould()DIWait diMouldready,1,3,"entrance Conveyer","ready for pick";DIWait diPlaceReady,1,3,"exit Conveyer","ready for remove";MoveJ pPrePickMould, v1500, z50, tGripper;IF BitCheck(nCurlayer,1) THENnCurOffs:=nOffs;ELSEnCurOffs:=-nOffs;ENDIFMoveLoffs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness), v1000, z50, tGripper;MoveLoffs(pPickMould,0,nCurOffs,(nCurLayer-1)*nThickness), v200, fine, tGripper;GripClose;Decr nCurLayer;MoveLoffs(pPickMould,0,nCurOffs,100+nCurLayer*nThickness), v200, z50, tGripper;MoveJ pPrePickMould, v1000, z50, tGripper;DIWait diPlaceReady,1,3,"exit Conveyer","ready for remove";MoveJ pPrePlace10, v1500, z10, tGripper;MoveL offs(pPlaceMould,0,0,100), v1500, z10, tGripper;MoveL pPlaceMould, v200, fine, tGripper;GripOpen;MoveL offs(pPlaceMould,0,0,100), v200, z10, tGripper;MoveL pPrePlace10, v1500, z10, tGripper;MoveJ pPrePickMould, v1500, z10, tGripper;PulseDO\PLength:=2, doMouldPlaceOK;ENDPROCPROC rPickClapboard()DIWait diMouldready,1,3,"entrance Conveyer","ready for pick";MoveL offs(pPickClapboard,0,0,100), v1000, z50, tGripper;MoveL pPickClapboard, v200, fine, tGripper;GripClose;MoveL offs(pPickClapboard,0,0,100) ,v200, z50, tGripper;MoveL offs(pPickClapboard,0,0,500) ,v1000, z50, tGripper;MoveL pPrePlaceClapboard, v1000, z10, tGripper;DIWait diClapboardReady, 1, 3, "exit Conveyer", "ready for remove";MoveL offs(pPlaceClapboard,-700,-200,250), v1000, z10, tGripper;MoveL offs(pPlaceClapboard,00,-10,100), v1000, z10, tGripper;MoveL pPlaceClapboard, v100, fine, tGripper;GripOpen;MoveL offs(pPlaceClapboard,0,-50,100), v1000, z10, tGripper;MoveL offs(pPlaceClapboard,-700,-200,250), v1000, z10, tGripper;MoveL pPrePlaceClapboard, v1000, z10, tGripper;PulseDO\PLength:=1.0, doClapboardPickOK;MoveJ pHome, v1500, fine, tGripper;PulseDO\PLength:=1.0, doUnStackOk;WaitTime 2;DIWait diMouldready,0,3,"exit Conveyer","ready for remove";nCurLayer:=nLayer;ENDPROCPROC rInitAll()IF diVacuum1=0 THENWaitTime 1;ELSEErrWrite "The Rob1 gripper error! " ,"The gripper is not opened!"\RL2:="Check the gripper signal postion ."\RL3:=" open the gripper manually and take away the part from gripper.";Stop;Exit;ENDIFrMoveHome;nCurLayer:=nLayer;IDelete iVacuum;CONNECT iVacuum WITH tLostPart;ISignalDI diVacuum1, 1, iVacuum;ISleep iVacuum;ENDPROCROC GripClose()SetDO doVacuum,1;SetDO doBlow,0;WaitUntildiVacuum1=1\MaxTime:=10\TimeFlag:=bTimeOut;IF bTimeOut THENErrWrite "Rob Gripper Signal error ! " ,"Fatal error in Gripper"\RL2:="Check the gripper signal postion ."\RL3:=" changea new sensor .";Stop;ENDIFWaittime 0.5;IWatch iVacuum;ENDPROCPROC GripOpen()ISleep iVacuum;SetDO doVacuum,0;PulseDO \PLength:=2.0, doBlow;WaitUntil diVacuum1=0 \MaxTime:=5\TimeFlag:=bTimeOut;IF bTimeOut THENErrWrite "Rob Gripper Signal error ! " ,"Fatal error in Gripper"\RL2:="Check the gripper signal postion ."\RL3:=" change a new sensor .";Stop;ENDIFWaittime 0.5;ENDPROCPROC rMoveHome()V AR string HomeOffset;CONST num MinX:=-500;CONST num MaxX:=500;CONST num MinY:=-500;CONST num MaxY:=500;CONST num MinZ:=500;CONST num MaxZ:=1200;V AR robtarget ActualPos;VelSet 100,500;AccSet 70, 70;IF bCurrentPos(pHome,tGripper,50)=TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIF bCurrentPos(pPrePickMould,tGripper,50\wobj:=Wobj0)= TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIFbCurrentPos(pPrePickClapboard,tGripper,100\wobj:=Wobj0)= TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIF bCurrentPos(pPreplace,tGripper,100\wobj:=Wobj0)= TRUE THENM oveJ pHome,v500,fine,tGripper\WObj:=wobj0;ENDIFIF bCurrentPos(pHome,tGripper,100)=FALSE THEN! If no known position is found, check if the robot is in a specified! window and move him to the first position in the programActualPos:=CRobT(\Tool:=tGripper\WObj:=wobj0);IF ActualPos.trans.x<MinX OR ActualPos.trans.x>MaxX OR ActualPos.trans.y<MinY OR ActualPos.trans.y>MaxY OR ActualPos.trans.z<MinZ OR ActualPos.trans.z>MaxZ THENHomeOffset:="";IF ActualPos.trans.x<MinX THENHomeOffset:=HomeOffset+"X :"+NumToStr(MinX-ActualPos.trans. x,0)+" ";ELSEIF ActualPos.trans.x>MaxX THENHomeOffset:=HomeOffset+"X :"+NumToStr(MaxX-ActualPos.trans .x,0)+" ";ELSEENDIFIF ActualPos.trans.y<MinY THENHomeOffset:=HomeOffset+"Y :"+NumToStr(MinY-ActualPos.trans. y,0)+" ";ELSEIF ActualPos.trans.y>MaxY THENHomeOffset:=HomeOffset+"Y :"+NumToStr(MaxY-ActualPos.trans .y,0)+" ";ELSEHomeOffset:=HomeOffset+"Y : OK ";ENDIFIF ActualPos.trans.z<MinZ THENHomeOffset:=HomeOffset+"Z :"+NumToStr(MinZ-ActualPos.trans. z,0)+" ";ELSEIF ActualPos.trans.z>MaxZ THENHomeOffset:=HomeOffset+"Z :"+NumToStr(MaxZ-ActualPos.trans. z,0)+" ";ELSEENDIFErrWrite HomeOffset,"Move robot manually near homeposition";WHILE OpMode()<>OP_MAN_PROG DOTPErase;TPWrite "Please switch robot to Manual mode";!TPErase;Stop;ENDWHILEStop;MoveJ pHome,v500,fine,tGripper;!npallet:=4;ActualPos:=CRobT(\Tool:=tGripper\WObj:=wobj0);WHILE OpMode()<>OP_AUTO DOTPErase;TPWrite "Please switch robot to AUTO mode";!TPErase;Stop;ENDWHILEENDIFENDIFVelSet 100,3000;ENDPROCTRAP tLostPartErrWrite "Part lost!" ,"Fatal error in Gripper"\RL2:="Check the gripper ."\RL3:=" check the vacuum .";Stop;ENDTRAPENDMODULE。

相关文档
最新文档