之前编程需要了解一些基本的概念。
任务与模块
快速应用程序称为任务。任务由一组模块组成。模块包含一组数据和程序声明。
数据类型:
原子(内置原子 / 基本数据类型)数据类型:
BOOL是一个枚举类型,其值为TRUE或FALSE,为执行逻辑计算和相关计算提供了一种方法。
NUM类型支持**近似算术和算术计算。
字符串类型表示一系列字符。
记录数据类型: 具有命名有序组件的复合类型。 类型记录的值是由每个组件的值组成的复合值。 组件可以具有原子或记录类型,用户定义的复杂数据类型通常是记录类型。 内置的记录类型是:
其中pos类型表示空间位置(向量)..
定向类型表示在空间的取向。
姿势类型表示坐标系(位置/方向组合)。
别名数据类型被定义为等效于另一个类型。 别名类型提供了一种对对象分类的方法。 可以使用别名分类找到并显示与类型相关的对象,使用 errnum 和 intnum 作为内置别名。 Errnum 和 intnum 是 num 的别名,用于指示错误和中断号。
数据对象:
有四个数据对象:常数(Const)、变量(VAR)、永久数据对象(PERS)和参数。永久性(数据对象)可以描述为“永久”变量。永久变量保存两个会话之间的值。在每个新会话开始时,即当加载模块(模块变量)或调用程序(程序变量)时,变量值将丢失(重新初始化)。
程序:
快速程序分为三类:程序(PROC)的无返回值,则该程序(FUNC)和软中断程序的返回值。项目申报规定了以下程序:名称,数据类型(有计划的**有效的返回值),参数(并不适用于软中断程序),数据宣言和声明(身体),退处理器(仅适用于不归路有效该方案的值),一个错误处理程序处理器和撤销
程序声明的参数表指定调用程序时必须/可以提供的参数(参数)。参数将是必需的或可选的。程序调用的参数表中可以省略可选参数。声明或调用需要符号''。两个或多个可选参数可以声明为互斥(用符号“|”分隔),在这种情况下,程序调用中*多可以有一个可选参数。可以使用预定义的返回值程序来测试可选参数的存在。可以将特殊类型的开关分配给可选参数,这提供了一种使用“开关参数”的方法,即仅按名称(非值)给定参数。开关类型的字段为空,不能将任何值传递给开关类型参数。
以下三个例子说明教学发展。
如何实现码垛指令
堆垛是机器人*常见的功能之一,与大多数其他机器人不同,ABB没有堆叠袋,但实现起来也很简单,甚至可以实现复杂的堆垛情况。下面是一个简单堆叠的例子。pBase是参照点,派对列是列数,党宽是列宽,ParHight是单层堆叠高度,numCounter已经存在的工件数是机器人应该放置或抓取的位置。
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型判定结果。
此功能类似于机器人的安全区域功能,在实时任务中调用此函数可实现安全区域差不多的效果。如果结合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
当然,仅仅熟悉如何编写指令是不够的。还要结合实际操作,深刻理解坐标系的概念和一些基本指令。