ABB机器人复习

1、工业机器人最显著的特点:
  1. 可编程
  2. 拟人化
  3. 通用性
2、工业气人的5种典型的结构:
  1. 直角坐标工业机器人
  2. 平面关节型工业机器人
  3. 并联工业机器人
  4. 串联工业机器人
  5. 协作工业机器人
3、认识示教器:

Page27

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、ABB机器人坐标系:

在这里插入图片描述

5、轴运动与线性运动:
1.轴运动:

​ 调姿态,粗精度,单轴运动

2.线性运动:

​ 调加工轨迹,高精度,多轴协作运动,会遇到奇异点问题

6、重定位:

​ 工业机器人的重定位运动是指工业机器人第六轴法兰盘上的工具TCP点在空间中绕着坐标轴旋转的运动,也可以理解为工业机器人绕着工具TCP点做姿态调整的运动。(焊接)

重定位的实现:

​ 1.RobotStudio中手动重定位

​ 2.示教器手动重定位

​ 3.编写程序:

7、转数计数器更新:

​ ABB工业机器人留个关节轴都有一个机械原点的位置,在下列情况下,需要对机械原点的位置进行转数计数器更新操作:

  1. 更换伺服电机转数计数器电池后;
  2. 当转数计数器发生故障,修复后;
  3. 转数计数器与SMB测量板之间断开以后;
  4. 断电后,工业机器人关节轴发生了位移;
  5. 当系统报警提示“10036转数计数器未更新”时。
8、ABB标准I/O板:

​ DSQC651:di8\do8\ao2

​ DSQC652:di16\do16

1、板卡地址:

DSQC挂在DeviceNet网络上,端子X5(这些端子是板卡的接口,不是控制柜的X1-X11端子)的6~12跳线用来确定模块的地址

6:公共地

7-12: 6位地址 bit0-bit5 001010(5-0)即表示地址10(这是硬件上的连接,还需要在示教器中添加板卡,设置它的地址)

定义DSQC651板步骤:

  1. 控制面板——配置——DeviceNet Device——添加

  2. 来自模板的值,选择DSQC651…

  3. 修改name

  4. Address设置为10

  5. 点击“是”

2、do地址:

接在X1端子上

地址分配:32-39

3、di地址:

接在X3端子上

地址分配:0-7

4、ao地址:

接在X6端子上

地址分配 :AO1:0-15

​ AO2:16-32

5.定义di、do的方法:
  1. 控制面板——配置——Signal——添加
  2. Name,di1
  3. 选择Type
  4. 绑定板卡 Assigned to Device
  5. Device Mapping (do是0,di是32,ao1是0-15,ao2是16-32,gi是32-**,ao还要设置最大逻辑值、最大物理值、最大逻辑位值等信息)
9、程序数据的建立:
  1. 在示教器中的程序数据界面建立程序数据;
  2. 在建立程序指令时,同时自动生成对应的程序数据。
10、程序数据的存储类型:

​ 程序数据的类型有100多种,但其存储类型只有如下3种(就比如数据结构的存储方式只有数组个链表两种,而数据结构有图、树等多种):

  1. 变量VAR:程序执行、停止时会保持当前值,但程序指针复位后悔恢复为初值
  2. 可变量PERS:无论程序指针如何变化,都会保持最后赋予的值
  3. 常量CONST:不能在程序中进行修改,只能修改生命时的值
11、3个关键程序数据及其设定:
1.工具数据tooldata:

​ 描述安装在工业机器人第六轴上的工具的TCP、质量、重心等参数数据。

​ tooldata组成:[robot hold,tool frame ,tool load]

​ robot hold:类型bool,TRUE表示法兰安装工具

​ tool frame:类型pose,包含:TCP相对于腕坐标系的位置,工具坐标系的方向,如:[[1,2,3],[0.924,0,0,0]]

​ tool load:工具的负载,类型loaddata,包括:工具的质量、工具负载的重心、工具负载主惯性轴的方位、围绕力矩惯性轴的惯性矩

​ 示例:

PERS tooldata gripper :=[TRUE,[[97.4,0,223.1],[0.9,0,0.3,0]],[5,[23,0,75],[1,0,0,0],0,0,0]];

tooldata的设定:

  1. 手动操作——工具坐标系——新建
  2. 设定属性——确定
  3. 编辑——定义
  4. TCP和Z、X,四点法
  5. 选择适当的手动操作模式
  6. 使工具参考点考上固定点——修改位置,重复操作
  7. 朝X方向反方向移动…
  8. Z轴
  9. 确定
  10. 查看误差,越小越好
  11. 设置tool的重心、质量
  12. 保存后,使用重定位查看效果
2.工件坐标数据wobjdata

​ 工件坐标数据对应工件,它定义工件相对于大地坐标系的位置。

​ 示例:

`PERS wobjdata wobj1 :=[FALSE,TRUE,[[],[]],[[],[]]];`

​ 说明:是否夹持工件,是否使用固定的用户坐标系,用户坐标系(当前工作面的位置,包括位置和姿态),目标坐标系(当前工件的位置,包含位置和姿态)

wobjdata的设定:

  1. 手动操作——工件坐标——新建
  2. 设置相关属性——确定
  3. 编辑——定义
  4. 用户方法:3点发
  5. X1、X2、Y1,修改位置
  6. 确定。。。
3.有效载荷数据loaddata

​ lodadata用于设置工业机器人轴6上安装法兰的负载的负载载荷数据。

​ 示例:

​ PERS loddata piece :=[5,[50,0,50],[1,0,0,0],0,0,0];

​ 说明:负载质量,重心位置,方向姿态,负载围绕3个轴的转动惯量

loddata的设定:

  1. 手动操纵——有效载荷——新建
  2. 设定相关属性
  3. 单击初始值,进行设定
  4. okkk
12、任务、程序模块、例行程序
1.Rapid程序架构、
  1. 任务由一系列模块组成,模块有程序模块与系统模块
  2. 可以根据不同用途创建多个程序模块
  3. 每个程序模块可以包含:程序数据、例行程序、中断程序、功能
  4. 只有一个main程序

在这里插入图片描述

2.常用Rapid指令
  1. MoveC:圆弧运动指令
  2. MoveJ:关节运动指令,对路径精度要求不高
  3. MoveL:线性运动指令,对路径要求较高的场合,如焊接

示例:

MoveJ p10, v150, z50, my_tool\WObj:=my_wobj;

MoveL p20, v150, z50, my_tool\WObj:=my_wobj;

MoveC p40, p50, v150, z10, my_tool\WObj:=my_wobj;  !(第一个点事当前位置,第二个点事p40.。。。)

fine:是否预读,z**越大,路径越圆滑与流畅

3.条件逻辑判断指令

1.紧凑型条件判断
PROC Test()
	IF flag1=TRUE Set do1;
ENDPROC
2.IF条件判断指令
PROC Test1()
	IF num1=1 THEN
		flag1:=TRUE;
	ELSEIF num1=2 THEN
		flag1:=FALSE
	ELSE
		Set do1;
	ENDIF
ENDPROC
3.FOR重复执行判断指令
PROC Test2()
	FOR i FROM 1 TO 10 DO 
		Routine1;
	ENDFOR
ENDPROC
4.WHILE 条件判断指令
PROC Test3()
	WHILE num1>num2 DO
		num1:=num1-1;
	ENDWHILE
ENDPROC
5.TRAP中断程序
  1. 建立例行程序,类型为“中断”,并编写相关的中断处理程序
  2. 在需要调用TRAP程序的例行程序中进行中断设置:
  3. IDelete,取消指定的中断(没有就新建)
  4. CONNECT,连接一个中断标识符到中断程序
  5. 然后设置中断触发条件,调用中断程序

示例:

IDelete inton1;
CONNECT inton1 WITH myinterrupt;
ISignalDI\Signal,di1,1,inton1;  (Signal表示只响应一次)
6.带参数的例行程序

​ 创建例行程序的时候,添加参数选项即可

7.功能FUNCTION的使用

​ 可以看做是带返回值的例行程序。

13、ABB机器人的典型应用
1.涂胶机器人需求分析:
  1. 轨迹要符合要求
  2. 涂胶质量要符合要求
  3. 防止出现出现意外
2.U形槽

与之类似:

PROC Path_10()
    MoveL Target_30,v150,z100,MyTool\WObj:=wobj0;
    MoveL Target_40,v150,z100,MyTool\WObj:=wobj0;
	MoveC Target_50,Target_60,v150,z100,MyTool\WObj:=wobj0;
	MoveL Target_70,v150,z100,MyTool\WObj:=wobj0;
	MoveL Target_80,v150,z100,MyTool\WObj:=wobj0;
ENDPROC

在这里插入图片描述

书上的:(完整椭圆)

PROC Path_10()
	MoveJ Offs(Path1_10,0,0200),v2000,z50,MyTool\WObj:=wobj0;
	MoveL Path1_10,v200,fine,MyTool\WObj:=wobj0;
	Set doGunon;    !打开胶枪
	WaitTime 0.5;
    MoveL Path1_20,v200,z1,MyTool\WObj:=wobj0;
	MoveC Path1_30,Path1_40,v200,z1,MyTool\WObj:=wobj0;
	MoveL Path1_50,v200,在,MyTool\WObj:=wobj0;
	MoveC Path1_60,Path1_10,v200,fine,MyTool\WObj:=wobj0;
	Reset doGunn;
	WaitTime 0.5;
	MoveL Offs(Path1_10,0,0200),v2000,z50,MyTool\WObj:=wobj0;
ENDPROC
3.圆形轨迹

基于圆心进行偏移,RelTool().

示例:

PROC circle()
	MoveJ RelTool(Path2_10,100,0,-200),v2000,z50,MyTool\WObj:=wobj0;
	MoveL RelTool(Path2_10,100,0,0),v200,fine,MyTool\WObj:=wobj0;
	Set doGunon;
	WaitTime 0.5;
	MoveC RelTool(Path2_10,0,-100,0),RelTool(Path2_10,-100,0,0),v2000,fine,MyTool\WObj:=wobj0;
	MoveC RelTool(Path2_10,0,100,0),RelTool(Path2_10,100,0,0),v2000,fine,MyTool\WObj:=wobj0;
	Reset doGunon;
	WaitTime 0.5;
	MoveL RelTool(Path2_10,100,0,-200),v200,z50,MyTool\WObj:=wobj0;
ENDPROC

Path1_10需要在程序数据中进行设置。

4.码垛程序

需求:

  1. 安全稳定
  2. 速度节拍适中
  3. 良品率

各个点位的作用(以1号工位为例):

pHome:机器人工作原位即初始位置;

pActualPos:机器人当前停止位置目标点数据;

pPick1:机器人在1号工位传输带末端物料的位置;

pPlace: 机器人在1号工位托盘上放置物料的位置数据;

pBase1_0和pBase1_90:机器人在托盘上放置物料基准位置数据,分别表示物料沿托盘长边、短边放置,程序中通过计数器,在此基准上计算每一块物料的放置位置。

此外,pick和place例行程序中的MoveL Offs表示每次拾起或者放置完成后机器人抬高的位置(抬高避免碰撞)。

初始化流程图;

在这里插入图片描述

拾取程序的流程图:

在这里插入图片描述

放置程序的流程图:

在这里插入图片描述

完整程序:
MODULE MainMoudle

PERS tooldata tGrip:=[TRUE,[[0,0,200],[1,0,0,0]],[25,[0,0.00109327,116.889],[1,0,0,0],0,0,0]];

PERS loaddata LoadEmpty:=[0.01,[0,0,1],[1,0,0,0],0,0,0];
PERS loaddata LoadFull:=[40,[0,0,100],[1,0,0,0],0,0,0];

PERS robtarget pHome:=[[1600.00,0.01,1400],[1.27986E-06,-0.707107,-0.707107,1.27986E-06],[0,0,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
PERS robtarget pActualPos:=[[1505,0,1400],[1.81E-6,0,-1,0],[0,0,0,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];

PERS robtarget pPick1:=[[1488.007792464,376.826660408,476.964684195],[0,0.707106307,0.707107256,0],[0,0,1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PERS robtarget pPlace1:=[[428.023,1772.47,55.4492],[0,1,-3.0621E-5,0],[1,0,3,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
PERS robtarget pBase1_0:=[[-292.446294945,1263.272085268,55.449220723],[0,0.707107387,0.707106176,0],[1,0,2,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PERS robtarget pBase1_90:=[[-391.976797324,1362.469634994,55.449159414],[0,1,-0.000030621,0],[1,0,3,0],[9E9,9E9,9E9,9E9,9E9,9E9]];

PERS robtarget pPick2:=[[1488.013130905,-358.406014736,476.965039287],[0,0.707106307,0.707107256,0],[-1,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PERS robtarget pPlace2:=[[292.622,-1857.99,55.449],[0,0.707108,0.707106,0],[-2,0,-1,0],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]];
PERS robtarget pBase2_0:=[[-317.378137718,-1857.993871961,55.448967354],[0,0.707107745,0.707105817,0],[-2,0,-1,0],[9E9,9E9,9E9,9E9,9E9,9E9]];
PERS robtarget pBase2_90:=[[-407.525988074,-1755.902485322,55.449282402],[0,1,-0.000031217,0],[-2,0,0,0],[9E9,9E9,9E9,9E9,9E9,9E9]];

PERS speeddata MinSpeed:=[1000,300,5000,1000];
PERS speeddata MidSpeed:=[2500,400,5000,1000];
PERS speeddata MaxSpeed:=[4000,500,5000,1000];

PERS bool bPalletFull1:=FALSE;
PERS bool bPalletFull2:=FALSE;

PERS num nCount1:=6;
PERS num nCount2:=1;

VAR intnum iPallet1;
VAR intnum iPallet2;

PROC Main()
    rInitAll;
    WHILE TRUE DO
        IF diBoxInPos1=1 AND diPalletInPos1=1 AND bPalletFull1=FALSE THEN
            rPick1;
            rPlace1;
        ENDIF
        IF diBoxInPos2=1 AND diPalletInPos2=1 AND bPalletFull2=FALSE THEN
            rPick2;
            rPlace2;
        ENDIF
        WaitTime 0.1;
    ENDWHILE
ENDPROC

PROC rInitAll()
    Reset doGrip;

​    pActualPos:=CRobT(\tool:=tGrip);
​    pActualPos.trans.z:=pHome.trans.z;
​    MoveL pActualPos,MinSpeed,fine,tGrip\WObj:=wobj0;
​    MoveJ pHome,MidSpeed,fine,tGrip\WObj:=wobj0;

​    bPalletFull1:=FALSE;
​    nCount1:=1;
​    bPalletFull2:=FALSE;
​    nCount2:=1;

​    IDelete iPallet1;
​    CONNECT iPallet1 WITH tPallet1;
​    ISignalDI diPalletChanged1,1,iPallet1;
​    ISleep iPallet1;

​    IDelete iPallet2;
​    CONNECT iPallet2 WITH tPallet2;
​    ISignalDI diPalletChanged2,1,iPallet2;
​    ISleep iPallet1;
ENDPROC

PROC rPick1()
    MoveJ Offs(pPick1,0,0,800),MaxSpeed,z50,tGrip\WObj:=wobj0;
    MoveL pPick1,MinSpeed,fine,tGrip\WObj:=wobj0;
    Set doGrip;
    WaitTime 0.3;
    GripLoad LoadFull;
    MoveL Offs(pPick1,0,0,800),MinSpeed,z50,tGrip\WObj:=wobj0;
ENDPROC

PROC rPick2()
    MoveJ Offs(pPick2,0,0,800),MaxSpeed,z50,tGrip\WObj:=wobj0;
    MoveL pPick2,MinSpeed,fine,tGrip\WObj:=wobj0;
    Set doGrip;
    WaitTime 0.3;
    GripLoad LoadFull;
    MoveL Offs(pPick2,0,0,800),MinSpeed,z50,tGrip\WObj:=wobj0;
ENDPROC


    PROC rPlace1()
        rPosition1;
        MoveJ Offs(pPlace1,0,0,800),MidSpeed,z50,tGrip\WObj:=wobj0;
        MoveL pPlace1,MinSpeed,fine,tGrip\WObj:=wobj0;
        Reset doGrip;
        WaitTime 0.3;
        GripLoad LoadEmpty;
        MoveL Offs(pPlace1,0,0,800),MidSpeed,z50,tGrip\WObj:=wobj0;
        MoveJ Offs(pPick1,0,0,800),MaxSpeed,z50,tGrip\WObj:=wobj0;
        nCount1:=nCount1+1;
        IF nCount1>20 THEN
            bPalletFull1:=TRUE;
            IWatch iPallet1;
        ENDIF
    ENDPROC
    
    PROC rPlace2()
        rPosition2;
        MoveJ Offs(pPlace2,0,0,800),MaxSpeed,z50,tGrip\WObj:=wobj0;
        MoveL pPlace2,MinSpeed,fine,tGrip\WObj:=wobj0;
        Reset doGrip;
        WaitTime 0.3;
        GripLoad LoadEmpty;
        MoveL Offs(pPlace2,0,0,800),MidSpeed,z50,tGrip\WObj:=wobj0;
        MoveJ Offs(pPick2,0,0,800),MaxSpeed,z50,tGrip\WObj:=wobj0;
        nCount2:=nCount2+1;
        IF nCount2>20 THEN
            bPalletFull2:=TRUE;
            IWatch iPallet2;
        ENDIF
    ENDPROC
    
    PROC rPosition1()
        TEST nCount1
        CASE 1:
            pPlace1:=Offs(pBase1_0,0,0,0);
        CASE 2:
            pPlace1:=Offs(pBase1_0,600+10,0,0);
        CASE 3:
            pPlace1:=Offs(pBase1_90,0,400+10,0);
        CASE 4:
            pPlace1:=Offs(pBase1_90,400+10,400+10,0);
        CASE 5:
            pPlace1:=Offs(pBase1_90,800+20,400+10,0);
        CASE 6:
            pPlace1:=Offs(pBase1_0,0,600+10,200);
        CASE 7:
            pPlace1:=Offs(pBase1_0,600+10,600+10,200);
        CASE 8:
            pPlace1:=Offs(pBase1_90,0,0,200);
        CASE 9:
            pPlace1:=Offs(pBase1_90,400+10,0,200);
        CASE 10:
            pPlace1:=Offs(pBase1_90,800+20,0,200);
        CASE 11:
            pPlace1:=Offs(pBase1_0,0,0,400);
        CASE 12:
            pPlace1:=Offs(pBase1_0,600+10,0,400);
        CASE 13:
            pPlace1:=Offs(pBase1_90,0,400+10,400);
        CASE 14:
            pPlace1:=Offs(pBase1_90,400+10,400+10,400);
        CASE 15:
            pPlace1:=Offs(pBase1_90,800+20,400+10,400);
        CASE 16:
            pPlace1:=Offs(pBase1_0,0,600+10,600);
        CASE 17:
            pPlace1:=Offs(pBase1_0,600+10,600+10,600);
        CASE 18:
            pPlace1:=Offs(pBase1_90,0,0,600);
        CASE 19:
            pPlace1:=Offs(pBase1_90,400+10,0,600);
        CASE 20:
            pPlace1:=Offs(pBase1_90,800+20,0,600);
        DEFAULT:
            TPErase;
            TPWrite "the Counter of line 1 is error,please check it!";
            Stop;
        ENDTEST
    ENDPROC
    
    PROC rPosition2()
        TEST nCount2
        CASE 1:
            pPlace2:=Offs(pBase2_0,0,0,0);
        CASE 2:
            pPlace2:=Offs(pBase2_0,600+10,0,0);
        CASE 3:
            pPlace2:=Offs(pBase2_90,0,400+10,0);
        CASE 4:
            pPlace2:=Offs(pBase2_90,400+10,400+10,0);
        CASE 5:
            pPlace2:=Offs(pBase2_90,800+20,400+10,0);
        CASE 6:
            pPlace2:=Offs(pBase2_0,0,600+10,200);
        CASE 7:
            pPlace2:=Offs(pBase2_0,600+10,600+10,200);
        CASE 8:
            pPlace2:=Offs(pBase2_90,0,0,200);
        CASE 9:
            pPlace2:=Offs(pBase2_90,400+10,0,200);
        CASE 10:
            pPlace2:=Offs(pBase2_90,800+20,0,200);
        CASE 11:
            pPlace2:=Offs(pBase2_0,0,0,400);
        CASE 12:
            pPlace2:=Offs(pBase2_0,600+10,0,400);
        CASE 13:
            pPlace2:=Offs(pBase2_90,0,400+10,400);
        CASE 14:
            pPlace2:=Offs(pBase2_90,400+10,400+10,400);
        CASE 15:
            pPlace2:=Offs(pBase2_90,800+20,400+10,400);
        CASE 16:
            pPlace2:=Offs(pBase2_0,0,600+10,600);
        CASE 17:
            pPlace2:=Offs(pBase2_0,600+10,600+10,600);
        CASE 18:
            pPlace2:=Offs(pBase2_90,0,0,600);
        CASE 19:
            pPlace2:=Offs(pBase2_90,400+10,0,600);
        CASE 20:
            pPlace2:=Offs(pBase2_90,800+20,0,600);
        DEFAULT:
            TPErase;
            TPWrite "the Counter of line 1 is error,please check it!";
            Stop;
        ENDTEST
    ENDPROC
    
    TRAP tPallet1
        bPalletFull1:=FALSE;
        nCount1:=1;
        ISleep iPallet1;
        TPErase;
        TPWrite "The Pallet in line 1 has been changed!";
    ENDTRAP
    
    TRAP tPallet2
        bPalletFull2:=FALSE;
        nCount2:=1;
        ISleep iPallet2;
        TPErase;
        TPWrite "The Pallet in line 2 has been changed!";
    ENDTRAP
    
    PROC rModify()
        MoveJ pHome,MinSpeed,fine,tGrip\WObj:=wobj0;
        MoveJ pPick1,MinSpeed,fine,tGrip\WObj:=wobj0;
        MoveJ pBase1_0,MinSpeed,fine,tGrip\WObj:=wobj0;
        MoveJ pBase1_90,MinSpeed,fine,tGrip\WObj:=wobj0;
    ENDPROC

ENDMODULE
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

感谢地心引力

有用的话请我喝杯咖啡吧????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值