在工作站配置中所使用的机器人是ABB机器人 IRB1410型机器人,并且事先已经使用Smart组件构建完成机器人所使用的工具的夹取和放置的动态效果。

程序注释:

MODULE MainMoudle

程序主模块

PERS tooldata tGripper:=[TRUE,[[0,0,123],[1,0,0,0]],[1,[0,0,60],[1,0,0,0],0,0,0]];

定义工具数据

TASK PERS wobjdata WobjPick:=[FALSE,TRUE,"",[[812.92,-380,554],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];

定义左侧托盘工件坐标数据

TASK PERS wobjdata WobjPlace:=[FALSE,TRUE,"",[[812.112,131.704,629],[1,0,0,0]],[[0,0,0],[1,0,0,0]]];

定义右侧托盘工件坐标数据

PERS loaddata LoadEmpty:=[0.001,[0,0,0.001],[1,0,0,0],0,0,0];

定义空载载荷数据

PERS loaddata LoadFull:=[0.1,[0,0,5],[1,0,0,0],0,0,0];

定义抓取工件后的载荷数据

PERS robtarget pPick:=[[226.448,104.769,13.931],[0.00734292,-1.6E-08,0.999973,-1E-09],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

定义抓取数据,此数据随着抓取位置的不同而变化,是变量

PERS

robtarget

pPlace:=[[223.781,102.869,13.3023],[0.00656412,0.698111,0.71593,-0.00649543],[0,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

定义放置数据,此数据随着抓取位置的不同而变化,是变量

CONST

robtarget

pHome:=[[873.054605526,0,764.656133294],[0.007342891,0,0.999973041,0],[0,0,0,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

定义安全点

CONST

robtarget

pPickBase:=[[66.447802087,24.768906099,13.931002806],[0.007342918,-0.000000016,0.99997304,-0.000000001],

[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

定义抓取基准点

CONST

robtarget

pPlaceBase:=[[63.7807864,22.868891847,13.302282874],[0.006564124,0.698111195,0.715929802,-0.006495435],

[0,-1,1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];

定义放置基准点

PERS num nPickH:=150; 定义抓取位置的安全距离

PERS num nPlaceH:=100; 定义放置位置的安全距离

PERS num nOffsX:=40; 定义X方向偏移数值

PERS num nOffsY:=40; 定义Y方向偏移数值

PERS num nCount:=16; 定义搬运数量并赋初始值为1,此数值随着搬运数量的变化而变化,是变量

PERS speeddata vMinSpeed:=[200,100,1000,5000];

PERS speeddata vMidSpeed:=[500,200,1000,5000];

PERS speeddata vMaxSpeed:=[800,300,1000,5000];定义高中低3种不同的运行速度,根据不同情况选择不同的运行速度

PROC Main()

主程序

rInitAll; 调用初始化子程序

WHILE TRUE DO

条件语句,通过这样的的调用方式,只运行初始化程序一次

rPick; 调用抓取子程序

rPlace; 调用放置子程序

ENDWHILE

ENDPROC

PROC rInitAll()

初始化子程序

ConfL\Off;

关闭线性运动和圆弧运动时的轴配置参数,使机器人能自由选择轴运动方式接近目标点,预防报警

ConfJ\Off;

关闭关节运动时的轴配置参数,使机器人能自由选择轴运动方式接近目标点,预防报警

AccSet 100,100; 设置加速度数据

VelSet 100,5000; 设置速度数据

Reset doGrip; 复位启动信号

nCount:=1; 搬运计数数值置1

MoveJ pHome,vMinSpeed,fine,tGripper\WObj:=wobj0;

利用关节运动指令移动TCP到安全点pHome

ENDPROC

PROC rPick()

抓取子程序

rCalPos; 调用计算位置子程序

MoveJ Offs(pPick,0,0,nPickH),vMaxSpeed,z50,tGripper\WObj:=wobjPick;

以关节运动方式高速运动到抓取点工件上方150mm处

MoveL pPick,vMinSpeed,fine,tGripper\WObj:=wobjPick;

以直线运动方式低速运动到待抓取工件位置

Set doGrip; 启动抓取操作

WaitTime 0.5; 等待0.5秒,确保抓取动作高质量完成

GripLoad LoadFull; 机器人满载

MoveL Offs(pPick,0,0,nPickH),vMidSpeed,z50,tGripper\WObj:=wobjPick;

以直线运动方式中速运动到待抓取工件上方150mm

ENDPROC

PROC rPlace()

放置子程序

MoveJ Offs(pPlace,0,0,nPlaceH),vMidSpeed,z50,tGripper\WObj:=wobjPlace;

以关节运动方式中速运动到待抓取工件上方100mm

MoveL pPlace,vMinSpeed,fine,tGripper\WObj:=wobjPlace;

以直线运动方式低速运动到待放置位置处

Reset doGrip;复位启动信号,放下火花塞

WaitTime 0.5;等待0.5秒,确保放置动作完成

GripLoad LoadEmpty;机器人空载

MoveL Offs(pPlace,0,0,nPickH),vMidSpeed,z50,tGripper\WObj:=wobjPlace;

以直线运动方式中速运动抬起100mm

rPlaceRD;调用计数子程序

ENDPROC

PROC rPlaceRD()

计数子程序

nCount:=nCount+1;

搬运火花塞数量自增

IF nCount>32 THEN

IF条件判断指令,当计数变量大于32的时候向下执行

TPErase; 清屏

TPWrite "Pick&Place done,the robot will stop!";

在触摸屏上显示"Pick&Place done,the robot will stop!"

nCount:=1; 计数变量置1

Reset doGrip;启动复位信号

MoveJ pHome,vMinSpeed,fine,tGripper\WObj:=wobj0;

以关节运动形式低速运动到安全点

Stop;机器人停止

ENDIF

ENDPROC

PROC rCalPos()

计算位置子程序

!Row 1

TEST nCount

测量nCount变量,与CASE的数值作对比

CASE 1:

pPick:=Offs(pPickBase,0,0,0);

pPlace:=Offs(pPlaceBase,0,0,0);

CASE 2:

pPick:=Offs(pPickBase,nOffsX,0,0);

pPlace:=Offs(pPlaceBase,nOffsX,0,0);

CASE 3:

pPick:=Offs(pPickBase,2*nOffsX,0,0);

pPlace:=Offs(pPlaceBase,2*nOffsX,0,0);

CASE 4:

pPick:=Offs(pPickBase,3*nOffsX,0,0);

pPlace:=Offs(pPlaceBase,3*nOffsX,0,0);

!Row 2

CASE 5:

pPick:=Offs(pPickBase,-nOffsX,nOffsY,0);

pPlace:=Offs(pPlaceBase,-nOffsX,nOffsY,0);

CASE 6:

pPick:=Offs(pPickBase,0,nOffsY,0);

pPlace:=Offs(pPlaceBase,0,nOffsY,0);

CASE 7:

pPick:=Offs(pPickBase,nOffsX,nOffsY,0);

pPlace:=Offs(pPlaceBase,nOffsX,nOffsY,0);

CASE 8:

pPick:=Offs(pPickBase,2*nOffsX,nOffsY,0);

pPlace:=Offs(pPlaceBase,2*nOffsX,nOffsY,0);

CASE 9:

pPick:=Offs(pPickBase,3*nOffsX,nOffsY,0);

pPlace:=Offs(pPlaceBase,3*nOffsX,nOffsY,0);

CASE 10:

pPick:=Offs(pPickBase,4*nOffsX,nOffsY,0);

pPlace:=Offs(pPlaceBase,4*nOffsX,nOffsY,0);

!Row 3

CASE 11:

pPick:=Offs(pPickBase,-nOffsX,2*nOffsY,0);

pPlace:=Offs(pPlaceBase,-nOffsX,2*nOffsY,0);

CASE 12:

pPick:=Offs(pPickBase,0,2*nOffsY,0);

pPlace:=Offs(pPlaceBase,0,2*nOffsY,0);

CASE 13:

pPick:=Offs(pPickBase,nOffsX,2*nOffsY,0);

pPlace:=Offs(pPlaceBase,nOffsX,2*nOffsY,0);

CASE 14:

pPick:=Offs(pPickBase,2*nOffsX,2*nOffsY,0);

pPlace:=Offs(pPlaceBase,2*nOffsX,2*nOffsY,0);

CASE 15:

pPick:=Offs(pPickBase,3*nOffsX,2*nOffsY,0);

pPlace:=Offs(pPlaceBase,3*nOffsX,2*nOffsY,0);

CASE 16:

pPick:=Offs(pPickBase,4*nOffsX,2*nOffsY,0);

pPlace:=Offs(pPlaceBase,4*nOffsX,2*nOffsY,0);

!Row 4

CASE 17:

pPick:=Offs(pPickBase,-nOffsX,3*nOffsY,0);

pPlace:=Offs(pPlaceBase,-nOffsX,3*nOffsY,0);

CASE 18:

pPick:=Offs(pPickBase,0,3*nOffsY,0);

pPlace:=Offs(pPlaceBase,0,3*nOffsY,0);

CASE 19:

pPick:=Offs(pPickBase,nOffsX,3*nOffsY,0);

pPlace:=Offs(pPlaceBase,nOffsX,3*nOffsY,0);

CASE 20:

pPick:=Offs(pPickBase,2*nOffsX,3*nOffsY,0);

pPlace:=Offs(pPlaceBase,2*nOffsX,3*nOffsY,0);

CASE 21:

pPick:=Offs(pPickBase,3*nOffsX,3*nOffsY,0);

pPlace:=Offs(pPlaceBase,3*nOffsX,3*nOffsY,0);

CASE 22:

pPick:=Offs(pPickBase,4*nOffsX,3*nOffsY,0);

pPlace:=Offs(pPlaceBase,4*nOffsX,3*nOffsY,0);

!Row 5

CASE 23:

pPick:=Offs(pPickBase,-nOffsX,4*nOffsY,0);

pPlace:=Offs(pPlaceBase,-nOffsX,4*nOffsY,0);

CASE 24:

pPick:=Offs(pPickBase,0,4*nOffsY,0);

pPlace:=Offs(pPlaceBase,0,4*nOffsY,0);

CASE 25:

pPick:=Offs(pPickBase,nOffsX,4*nOffsY,0);

pPlace:=Offs(pPlaceBase,nOffsX,4*nOffsY,0);

CASE 26:

pPick:=Offs(pPickBase,2*nOffsX,4*nOffsY,0);

pPlace:=Offs(pPlaceBase,2*nOffsX,4*nOffsY,0);

CASE 27:

pPick:=Offs(pPickBase,3*nOffsX,4*nOffsY,0);

pPlace:=Offs(pPlaceBase,3*nOffsX,4*nOffsY,0);

CASE 28:

pPick:=Offs(pPickBase,4*nOffsX,4*nOffsY,0);

pPlace:=Offs(pPlaceBase,4*nOffsX,4*nOffsY,0);

!Row 6

CASE 29:

pPick:=Offs(pPickBase,0,5*nOffsY,0);

pPlace:=Offs(pPlaceBase,0,5*nOffsY,0);

CASE 30:

pPick:=Offs(pPickBase,nOffsX,5*nOffsY,0);

pPlace:=Offs(pPlaceBase,nOffsX,5*nOffsY,0);

CASE 31:

pPick:=Offs(pPickBase,2*nOffsX,5*nOffsY,0);

pPlace:=Offs(pPlaceBase,2*nOffsX,5*nOffsY,0);

CASE 32:

pPick:=Offs(pPickBase,3*nOffsX,5*nOffsY,0);

pPlace:=Offs(pPlaceBase,3*nOffsX,5*nOffsY,0);

计算火花塞抓取和放置位置数据

DEFAULT:

TPErase;清屏

TPWrite "the counter is error,please check it!";

在屏幕上显示"the counter is error,please check it!"

Stop;机器人停止

ENDPROC

PROC rTeachPos()

示教位置子程序

MoveL pHome,v1000,z100,tGripper\WObj:=wobj0;

示教安全点

MoveL pPickBase,v1000,z100,tGripper\WObj:=WobjPick;

示教抓取基准点

MoveL pPlaceBase,v1000,z100,tGripper\WObj:=WobjPlace;

示教放置基准点

ENDPROC

ENDMODULE

abb焊接机器人编程全解_ABB机器人的离线编程与仿真之原程序详解!!!——ABB机器人...相关推荐

  1. 中断程序_ABB机器人中断程序详解(安川FANUC)

    ABB机器人中断程序详解 1.新建一个中断程序 test001,类型中断 TRAP hanmianshadiaoliao StopMove; SetDO DO04, 0; !Stop; StartMo ...

  2. java网络编程阻塞_Java网络编程由浅入深三 一文了解非阻塞通信的图文代码示例详解...

    本文详细介绍组成非阻塞通信的几大类:Buffer.Channel.Selector.SelectionKey 非阻塞通信的流程ServerSocketChannel通过open方法获取ServerSo ...

  3. c#endread怎么打印出来_C#编程直接发送打印机命令到打印机及ZPL常用的打印命令详解...

    本文主要向大家介绍了C#编程直接发送打印机命令到打印机及ZPL常用的打印命令详解,通过具体的内容向大家展示,希望对大家学习C#编程有所帮助. using System; using System.Co ...

  4. 车牌识别与计算机编程,基于MATLAB的车牌识别程序详解.ppt

    基于MATLAB的车牌识别程序详解 自定义一个字符函数,用来从车牌区域中提取出7个字符,其中利用切割函数来进行切割. 程序:function [word,result]=getword(d) word ...

  5. Windows编程入门程序详解

    Windows编程入门程序详解 1.     程序 /************************************************************************* ...

  6. 非局部相似性 matlab,非局部均值滤波(NLM)和MATLAB程序详解视频教程保持图像细节...

    [内容简介]<非局部均值滤波与应用和MATLAB程序详解视频>共6章28节视频,总学时698分钟,合11.6小时.主要内容包括:非局部均值滤波类算法入门,基于滤波参数自适应的非局部均值滤波 ...

  7. Dede二次开发程序详解(dede爱好者必备)

    Dede二次开发程序详解(dede爱好者必备) 调用说明:推荐会员(带用户头像)  [quote] {dede:sql sql="SELECT mid,mtype,userid,uname, ...

  8. linux系统设置服务开机启动3种方法,Linux开机启动程序详解

    linux系统设置服务开机启动 方法1:.利用ntsysv伪图形进行设置,利用root登陆 终端命令下输入ntsysv 回车:如下图 方法2:利用命令行chkconfig命令进行设置 简要说明一下ch ...

  9. 单片机c语言程序流程图,ds1302时钟程序详解,ds1302程序流程图(C程序)

    ds1302时钟程序详解 DS1302 的控制字如图2所示.控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中,位6如果为0,则表示存取日历时钟数据,为1表示存取RA ...

最新文章

  1. 学校SOLARIS ORACLE很好的电子教材
  2. Java ArrayList的不同排序方法
  3. Jackson 注解 -- 忽略字段
  4. 盒子模型与DOCTYPE
  5. C++/C--内存的四驱模型
  6. c++ opencv添加logo_Python+Opencv+Tkinter指纹识别与人脸识别的门禁兼考勤(二)
  7. Oracle导入大数据量(百万以上)dmp文件,报错ora-12592 :包错误
  8. sql server 更新语句
  9. nor flash与nand flash启动的简单比较--APPLE的ARM学习笔记一
  10. [ctfshow]web入门——命令执行(web54-web71)
  11. 2019年,免费的检测僵尸粉软件《雪球微信小助手》,无打扰检测清理微信僵尸粉
  12. RoboWare Studio使用的部分问题
  13. 棋牌游戏定时器模块设计
  14. 计算机桌面不显示时间,win7电脑不显示时间怎么办|win7电脑不显示时间的恢复方法...
  15. 阿里云服务器 云监控 API 调用示例
  16. redis 安装
  17. 截图神器FastStone Capture :小而强悍的截图一哥 (软件-神器系列第1篇)
  18. dede文章采集管理php,dedecms采集过滤
  19. 游戏开发中的物理介绍
  20. 这八道经典指针笔试题你都会做嘛?

热门文章

  1. JetsonNano人脸识别(一)安装配置
  2. SCI EI 检索的会议期刊
  3. linux mic阵列通道丢数据,基于XMOS平台的USB麦克风阵列多声道采集装置
  4. html5 div布局与table布局
  5. SNS 社区系统设计
  6. python办公自动化实例(一):批量转换word文件为PDF
  7. ksu7对讲机调频软件_常见对讲机调频方法
  8. 阿里云服务器 通过JavaMail发送邮箱STMP问题( 25端口被禁用 使用SSL协议465端口
  9. BIOS实战之PCI设备枚举一
  10. DOSBox模拟器官网简介