PLC论坛-全力打造可编程控制器专业技术论坛

 找回密码
 注册哦

QQ登录

只需一步,快速开始

微信扫码登录

查看: 93274|回复: 0

KUKA机器人中阵列的概念,通过FOR...TO...ENDFOR实现堆垛和卸垛

[复制链接]
发表于 2024-2-28 09:15:42 | 显示全部楼层 |阅读模式


FOR...TO...ENDFOR 循环计算。




Counter

INT

循环计算使用整数变量

Start

INT

表达式指定计算器最初的值。

End

INT

表达式指定计算器最后的值。

Increment

INT

算术表达式的计算器总量由每个执行的循环增加:

增量可能是负数

增量可能是零

增量可能是变量

如果增量被指定,那么默认值为1 。

指定运行数能真正明确FOR循环被程序使用。循环运行由计算器帮助计算。

执行FOR的条件:

‹   通过正增量:如果计算器的值比最后的值大,那么循环结束。

‹   通过负增量:如果计算器的值比最后的值小,那么循环结束。

执行的条件是在任何一个循环运行之前选择。在个别的情况下FOR循环不能完全执行。

表达式类型的整数必须给出计算器的最初和最后的值。表达式求一次循环开始的值。计时器被最初的值调整和增加或在循环运行后消耗。

增加可以不是0 。如果不指定增加,那么默认的值是1 。负值也能被用于增加。

计数器的值能在循环语句的内部和外部使用。在循环内部,作为排列处理的最新的指数,在循环外,计数器保留大部分新近来的值。

为了每个FOR语句都必须ENDFOR语句对应。在循环执行完成后,程序在  遇见ENDFOR后返回第一个指令。使用EXIT语句循环可以提前退出。

在10循环中变量B每次增加1 。

FOR A=1 TO 10

B=B+1

ENDFOR

在两级FOR 循环中, 增加计数器A 后每次运行通过计数器的值增加变量B。变量B达到10,循环提前退出。

FOR A=1 TO 15 STEP 2

B=B+A

IF B==10 THEN

EX

IT

ENDIF

ENDFOR

阵列

术语“阵列“指的是相同数据类型对象的组合产生的一个数据对象;通过下标可以寻址阵列中的独立的元素。声明如下

DECL INT OTTO[7]

您可以存储,例如,7个不同的整数在阵列OTTO[]中。通过指定相关的下标(第一个下标永远是数字1),您可以访问阵列中每个单独的元素。

OTTO[1]=5:  数字5分配给第一个元素

OTTO[2]=10:数字10分配给第二个元素

OTTO[3]=15:数字15分配给第三个元素

OTTO[4]=20:数字20分配给第四个元素

OTTO[5]=25:数字25分配给第五个元素

OTTO[6]=30:数字30分配给第六个元素

OTTO[7]=35:数字35分配给第七个元素

可以将阵列OTTO[]想象为一个包含7个间隔的架子。根据以上的分配,填充元素如下:一维阵列的表示



如果阵列中的所有元素都初始化为同一个数字,例如0,您不必要编程每个分配,可以使用循环和一个计数变量 “自动”分配。

FOR I=1 TO 7

OTTO[I]=0

ENDFOR

该情况下,计数变量为整数型变量I,该变量在作为整数使用前必须声明。

阵列可能是任何数据类型。单独的元素也可能有复杂的数据类型(例如,阵列组成的阵列)。

●仅整数型数据类型允许作为下标。

●除常量和变量外,算术表达式也允许作为下标。

●下标起始值通常为1。

2维阵列

除已经讨论过的一维阵列,也就是说仅有一个下标,在KRL中还可以使用两维或三维阵列。采用

DECL REAL MATRIX[7,3]

您可以声明一个两维5×4的阵列,包含5×4=20个实数元素。可以表达该阵列为5列和4行的矩阵。程序顺序如下

I[3]=0

FOR COLUMN=1 TO 7

   FOR ROW=1 TO 3

I[3]=I[3]+1

MATRIX[COLUMN,ROW]=I[3]

ENDFOR

ENDFOR

根据元素在矩阵中的顺序分配值。得到下列矩阵分配:



3维阵列

三维阵列可以看作是一个接一个的一些两维矩阵。第三维指示矩阵所处位置的级别。一个三维阵列可简单地声明为一维或两维阵列,例如:

DECL BOOL ARRAY_3D[5,3,4]

初始化顺序如下:

FOR LEVEL=1 TO 3

FOR COLUMN=1 TO 5

FOR ROW=1 TO 4

ARRAY_3D[LEVEL,COLUMN,ROW]=FALSE

ENDFOR

ENDFOR

ENDFOR

三维阵列的表示



堆垛和卸垛练习:

堆垛.........

PTP fa2 Vel=100 % PDAT3 Tool[1]:1 Base[10]:g

for n=1 to 4                           计算出16个点的位置值     

for m=1 to 4                           

tp1[n,m]=xfa1                        提取放件位置的数据                     

tp2[n,m]=xfa1                        提取预放件位置的数据

tp1[n,m].y=tp1[n,m].y+80*(n-1)   

tp1[n,m].x=tp1[n,m].x+65*(m-1)

tp2[n,m].z=tp2[n,m].z+100          预放件位置的Z轴方向要抬高100mm

tp2[n,m].y=tp2[n,m].y+80*(n-1)

tp2[n,m].x=tp2[n,m].x+65*(m-1)

endfor

endfor

PTP fa3 Vel=20 % PDAT4 Tool[1]:1 Base[10]:g

for n=1 to 4                                   

for m=1 to 4

zhua()                                 循环执行抓件程序

PTP fa4 Vel=10 % PDAT5 Tool[1]:1 Base[10]:g

ptp tp2[n,m]                          运行到预放件位置

wait sec 0.5

lin tp1[n,m]                          运行到放件位置

wait sec 0.2

SET GRIPPER State= GDAT1              打开夹爪

lin tp1[n,m]                       

ptp tp2[n,m]                         运行到抬起位置

endfor

endfor

PTP P1 Vel=50 % PDAT1 Tool[1]:1 Base[10]:g

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册哦

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册哦

本版积分规则

QQ|小黑屋|手机版|Archiver|PLC技术网-PLC论坛 ( 粤ICP备17165530号 )|网站地图

GMT+8, 2024-9-19 09:24 , Processed in 0.045892 second(s), 26 queries .

快速回复 返回顶部 返回列表