当前位置:首页>资讯 >技术知识>【ABB】ABB机器人如何通过离线编程与仿真完成搬运火花塞项目

【ABB】ABB机器人如何通过离线编程与仿真完成搬运火花塞项目

2020-08-19 来源:JQRZX |责任编辑:小球球 浏览数:720 全球焊接网

核心提示:ABB机器人如何通过离线编程与仿真完成搬运火花塞项目?本次的任务是在已经构建好的工作站里面将火花塞从左侧工件托盘上搬运到右侧摆台上。在工作站配置中所使用的机器人是ABB IRB1410型机器人,并且事先已经使用Smar

ABB机器人如何通过离线编程与仿真完成搬运火花塞项目?


本次的任务是在已经构建好的工作站里面将火花塞从左侧工件托盘上搬运到右侧摆台上。在工作站配置中所使用的机器人是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()


初始化子程序


ConfLOff;


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


ConfJOff;


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


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


VelSet 100,5000; 设置速度数据


Reset doGrip; 复位启动信号


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


MoveJ pHome,vMinSpeed,fine,tGripperWObj:=wobj0;


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


ENDPROC


PROC rPick()


抓取子程序


rCalPos; 调用计算位置子程序


MoveJ Offs(pPick,0,0,nPickH),vMaxSpeed,z50,tGripperWObj:=wobjPick;


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


MoveL pPick,vMinSpeed,fine,tGripperWObj:=wobjPick;


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


Set doGrip; 启动抓取操作


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


GripLoad LoadFull; 机器人满载


MoveL Offs(pPick,0,0,nPickH),vMidSpeed,z50,tGripperWObj:=wobjPick;


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


ENDPROC


PROC rPlace()


放置子程序


MoveJ Offs(pPlace,0,0,nPlaceH),vMidSpeed,z50,tGripperWObj:=wobjPlace;


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


MoveL pPlace,vMinSpeed,fine,tGripperWObj:=wobjPlace;


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


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


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


GripLoad LoadEmpty;机器人空载


MoveL Offs(pPlace,0,0,nPickH),vMidSpeed,z50,tGripperWObj:=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,tGripperWObj:=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,tGripperWObj:=wobj0;


示教安全点


MoveL pPickbase,v1000,z100,tGripperWObj:=WobjPick;


示教抓取基准点


MoveL pPlacebase,v1000,z100,tGripperWObj:=WobjPlace;


示教放置基准点


ENDPROC


ENDMODULE

打赏
分享到:
0相关评论
阅读上文 >> 全球机器人行业一周新闻盘点:钟南山团队研发智能咽拭子机器人、快仓助力全球无人工厂…
阅读下文 >> 日本推出重达25公吨的巨型高达机器人

大家喜欢看的

  • 品牌
  • 资讯
  • 展会
  • 视频
  • 图片
  • 供应
  • 求购
  • 商城

版权与免责声明:

注明稿件来源的内容均为自动转载信息、企业用户或网友注册发布,本网转载出于传递更多信息的目的;如转载信息涉及版权问题,请及时联系网站客服,我们将第一时间对相关内容进行删除处理。同时对于资讯内容及用户评论等信息,本网并不表示赞同其观点或证实其内容的真实性;亦不承担任何法律责任。


本文地址:http://www.qqweld.com/news/show-2785.html

转载本站原创文章请注明来源:全球焊接网 或原稿来源。

推荐新闻

更多

微信“扫一扫”
即可分享此文章

友情链接

  • 旗下平台:货源网

  • 旗下平台:玩具网

2018-2023 QQWELD.COM All Rights Reserved 全球焊接网版权所有 丨 冀ICP备2024057666号
访问和使用全球焊接网,即表明您已完全接受和服从我们的用户协议。