在编程的灵活性方面相比,ABB机器人比一般国产和日系机器人要方便很多,比如用PERS前缀声明任意类型的变量,甚至自定义数据类型变量,就可以将数据永久保存,保存的数量基本没有限制.

再如获取位置数据的指定方向分量异常方便,p1.trans.z就可表示p1位置在z轴方向距离工件坐标系原点的距离。本文简单介绍ABB机器人指令开发过程,其实也就是编写附带了参数的程序。

在编程之前需要弄清几个基本概念。

任务与模块

RAPID应用被称作一项任务。一项任务包括一组模块。一个模块包含一组数据和程序声明。

数据类型:

Atomic(内置原子型/基本数据类型)数据类型:

1、bool为枚举类型,其值为真或假,提供了一种开展逻辑计算和关联计算的方式。

2、num型支持精确算术计算和近似算术计算。

3、string型表示字符序列。

Record(记录型)数据类型:为一种带命名有序分量的复合类型。record类型的值为由各分量的值组成的复合值。一个分量可具备atomic型或record型,用户自定义复杂数据类型一般就是记录型。内置记录型有:

1、pos型表示空间位置(矢量)。

2、orient型表示在空间中的方位。

3、pose型表示坐标系(位置/方位组合)。

alias数据类型被定义为等同于另一种类型。alias类型提供一种对象分类手段。系统可采用alias分类来查找和显示与类型相关的对象,内置别名型数据有errnum和intnum。Errnum和intnum均为num的别名,用于表示错误和中断编号。

数据对象:

有四种数据对象:常量(CONST)、变量(VAR)、永久数据对象(PERS)和参数。永久(数据对象)可描述为“永久”变量。在两次会话之间,永久变量将保持值。在每次新会话开始时,即,当加载模块时(模块变量)或调用程序时(程序变量),将失去(重新初始化)变量值。

程序:

Rapid程序分为三类:无返回值程序(PROC)、有返回值程序(FUNC)和软中断程序。程序声明指定了程序的下列内容:名称,数据类型(仅对有返回值程序有效),参数(不适用于软中断程序),数据声明和语句(体),回退处理器(仅对无返回值程序有效),错误处理器和撤销处理器

程序声明的参数表指定了调用程序时必须/可提供的参数(实参)。参数将为必要参数或可选参数。可选参数可从程序调用的参数表省去,声明或调用时需要使用符号“”。两项或两项以上可选参数可声明为彼此排斥(用符号“|“分隔,在此情况下,程序调用中最多只可有其中一项可选参数。可利用预定义有返回值程序Present来测试可选参数是否存在。可将特殊类型switch分配给可选参数,这能提供采用“开关型参数”的手段,即,仅以名称(非值)赋予的参数。开关型的域为空,没有值能转移给开关型参数。

下面通过三则示例演示指令开发。

如何实现码垛指令

码垛是机器人最常用的功能之一,与其他多数机器人不同,ABB没有码垛包,但实现起来也很简单,也甚至可以实现复杂码垛情况。下面以简单的码垛为例。pBase为基准示教点,partColumns为列数,partWidth为列宽,PartHeight为单层码垛高度,numCounter已经存在的工件数量,返回robtarget机器人应该放置或抓取的位置。

FUNC robtarget pStack(robtarget pBase,num partColumns,num partWidth,num PartHeight,num numCounter)

VAR num Columns;

VAR num Rows;

Columns:=( numCounter -1) MOD partColumns;

Rows:=( numCounter -1-Columns)/partColumns;

RETURN Offs(pBase,0,Columns*(PartWidth),Rows*PartHeight);

ENDFUNC

如何实现机器人在任意路径上可自动回原点

多数项目机器人直接自动回原点可能会导致撞机,只能通过增加过渡点的方式实现,有的时候过渡点可以设置成机器人当前位置在指定坐标系中往指定方向偏移指定位移的位置,如果需要更加严格保证安全,可以根据位置和旋转方向来判定机器人需要往何种方向偏移,这里不做深究。

FUNC robtarget getRobT(switch Rel,num x,num y,num z,inout tooldata tool,wobjdata wobj)

VAR robtarget pCurrent;

pCurrent:=crobT(tool:=toolwobj:=wobj);

IF Present(Rel) THEN

IF Present(x) THEN

pCurrent.trans.x:=pCurrent.trans.x+x;

ENDIF

IF Present(y) THEN

pCurrent.trans.y:=pCurrent.trans.y+y;

ENDIF

IF Present(z) THEN

pCurrent.trans.z:=pCurrent.trans.z+z;

ENDIF

ELSE

IF Present(x) THEN

pCurrent.trans.x:=x;

ENDIF

IF Present(y) THEN

pCurrent.trans.y:=y;

ENDIF

IF Present(z) THEN

pCurrent.trans.z:=z;

ENDIF

ENDIF

RETURN pCurrent;

tENDFUNC

其中实现了有开关型参数Rel情况下,实现增量偏移,无Rel时实现绝对偏移,也可以根据可选参数x,y,z实现指定方向偏移,返回robtarget目标位置(过渡点)。

下面是指令的使用示例,调用形式上与RAPID内置Offs等指令有些相识:

movel getRobPos(rel,y:=100, ,tool0,wobj0),v100,z0,tool0;

movel getRobPos(z:=1000,tool0,wobj0),v100,z0,tool0;

p1:= getRobPos(y:=200,tool0,wobj0),

如何判定机器人是否在指定位置附近:

此功能类似于机器人的安全区域功能,在实时任务中调用此函数可实现安全区域差不多的效果。如果结合crobT 指令可以实现更加复杂的空间判断,这里不做深究。

示例中pCheck是指定位置,num1为判断符合区域阈值,返回bool型判定结果。

FUNC bool rCheckPos(jointtarget pCheck,num num1)

VAR jointtarget pCurrent;

VAR num numTemp;

IF Present(num1) THEN

numTemp:=num1;

ENDIF

pCurrent:=CalcJointT(CRobT(),tool0);

IF pCurrent.robax.rax_1<=pcheck.robax.rax_1+num1 and="" pcurrent.robax.rax_1="">=pCheck.robax.rax_1-num1 AND

pCurrent.robax.rax_2<=pcheck.robax.rax_2+num1 and="" pcurrent.robax.rax_2="">=pCheck.robax.rax_2-num1 AND

pCurrent.robax.rax_3<=pcheck.robax.rax_3+num1 and="" pcurrent.robax.rax_3="">=pCheck.robax.rax_3-num1 AND

pCurrent.robax.rax_4<=pcheck.robax.rax_4+num1 and="" pcurrent.robax.rax_4="">=pCheck.robax.rax_4-num1 AND

pCurrent.robax.rax_5<=pcheck.robax.rax_5+num1 and="" pcurrent.robax.rax_5="">=pCheck.robax.rax_5-num1 AND

pCurrent.robax.rax_6<=pcheck.robax.rax_6+num1 and="" pcurrent.robax.rax_6="">=pCheck.robax.rax_6-num1 THEN

RETURN TRUE;

ELSE

RETURN FALSE;

ENDIF

ENDFUNC

当然,熟悉编写如何去编写指令是不够的,还需深刻认识坐标系的概念和一些基本指令,结合实际操作。

来源 | 上海ABB工程有限公司 ,转载请注明出处

注:文章为作者独立观点,不代表Soo56立场

abb机器人指令手册_「ABB」ABB机器人指令模块介绍与开发过程相关推荐

  1. abb机器人指令手册_第1519课 ABB机器人初级教程

    每一位读者都是我分享的动力,感谢大家关注! 第15课 系统输入输出与IO信号的关联 第16课 示教器可编程按钮的使用 第17课 什么是程序数据 第18课 程序数据的类型与分类 第19课 创建程序数据 ...

  2. abb机器人指令手册_爆!!ABB机器人支持OPC UA了

    更多内容请点击上方 ABB机器人实战技巧 关注 也可点击公众号下方 往期经典 浏览更多内容 转载请先后台留言,大家一起支持原创,推动机器人使用和发展 本公众号对各类ABB机器人应用,仿真,毕业设计提供 ...

  3. 海狮号水下机器人_「揭晓」水下机器人哪家强?冠军出炉了

    机械手臂参与工厂生产线作业 已经不是什么新鲜事 不过 你见过机械手 在真实的大海里抓扇贝捞海参吗? 还在15分钟内 一举抓取到30个扇贝,1个海参 8月22日 来自全国的35支团队 170多名队员 在 ...

  4. 公开「处刑」!波士顿动力的搬砖机器人,私下竟「翻车」不断

    编辑 | 汽车人 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 [导读]如何让一个机器人尴尬?波士顿动力发布Atlas失误集锦,全网围观机器人翻车的各种样子 ...

  5. mc有什么红石机器人_我的世界红石机器人怎么做_我的世界红石机器人制作教程...

    我的世界是一款风靡全球的高自由度沙盒游戏,很多玩家都认为在游戏中做一个会动的机器人是一件很有趣的事情,然而还有很多小伙伴不清楚怎么搭建机器人,那么我的世界红石机器人怎么做?下面小编就把我的世界红石机器 ...

  6. abb软启动器pstx手册_关于 ABB工业机器人碰撞检测功能的介绍

    A2B机器人吐槽部专业挖(填)坑小分队 ABB工业机器人碰撞检测功能介绍 软件选项号: [613-1] Collision Detection 简介: 主要功能: Collision Detectio ...

  7. 发那科机器人零点找回_「发那科」FANUC机器人零点复归详解

    原标题:「发那科」FANUC机器人零点复归详解 今天整理一篇关于FANUC机器人:零点复归内容,希望对大家有所帮助! 1概述 零点复归机器人时,需要将机器人的机械信息.与位置信息同步,来定义机器人的物 ...

  8. 三菱modbusRTU通讯实例_「笔记」信捷plc应用,两个plc通讯篇

    本文转自微信公众号:自动化电气工程师技术交流与分享 关键词:Modbus协议本文目标:以XC5系列为例,完成两个信捷PLC基于Modbus RTU协议的通讯. 本文目录 一,通讯前须知 二,参数设置 ...

  9. fanuc机器人编程手册_是谁需要G代码编程机器人?

    用G代码编程机器人是一个5,6年前就碰到过的一个概念.当时就有点困惑,不过没有细究为何提出这样的想法.这个问题一直搁置很久也没有想起来主动去了解,去和同行去交流.今天在翻阅西门子自动化产品手册时,看到 ...

最新文章

  1. python调用其他文件中的函数或者类
  2. 现代谱估计-互谱功率
  3. HDU - 1723 - Distribute Message
  4. jQuery框架学习第七天:jQuery动画–jQuery让页面动起来!
  5. 开源博客-秋色园QBlog多用户博客系统安装视频教程
  6. 《编译原理》学习笔记 ·001【第一章:总论】
  7. php use后怎么引用函数,php后向引用怎么带入到函数参数
  8. mac php mysql 环境_Mac下配置PHP+MySql环境
  9. C语言实现BMP格式转RGB格式、YUV格式
  10. electron 读取文件夹内容_读写本地文件
  11. 谈胶印机供水装置调节的技巧
  12. ceph 代码分析 读_Ceph代码分析
  13. codeigniter3 全面集成 phpunit
  14. ElasticSearch(6.3.0)的配置和使用全过程
  15. Rails 中的 RJS 模板
  16. windwos系统安装python教程
  17. UPC 1016: 幼儿园小朋友们的难题
  18. linux服务器登录卡在last login的解决
  19. linux卸载 bind,Linux CentOS中 BT下载客户端 安装及卸载方法 Transmission
  20. 数据挖掘概念汇总及数据预处理

热门文章

  1. windows cab文件安装
  2. php算法和数据结构
  3. Redis源码解析(1)——源码目录介绍
  4. thinkphp引入PHPExcel类---thinkPHP类库扩展-----引入没有采用命名空间的类库
  5. iOS for 和 forin 的区别 以及注意事项
  6. PHP String
  7. UVA 216 - Getting in Line
  8. 【摘录】Android画图之抗锯齿
  9. 转 天才学生的天才回答
  10. AndroidStudio安卓原生开发_Activity的IntentFlag的SINGLE_TOP_CLEAR_TOP_REORDER_TO_FRONT的用法---Android原生开发工作笔记90