本文是通过自编程的形式实现托盘取料(我司有专门的码垛/拆垛功能,这部分后面有机会再细讲),其主要是在用户坐标系下,对托盘各料位逐一取料,期间还可以通过视觉或者传感器信号等外围设备来实现取不到了后往下一个料位取料。
前期准备工作有:
1.  在托盘上建立用户坐标系:根据以往项目经验,建议尽可能做这个工作,以保证机器人偏移时是与托盘平行的,否则可能出现剐蹭托盘的情况;
2. 测量料位X和Y向间距:机器人是根据料位间距进行偏移的,因此需要两个数据。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9caa4bc0d6f04f8489d2a0ff130aa29b.png)

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/21b1337891a2490c8cc4c5a0fee6e488.png#pic_center)
**'变量声明**
	V2! = 10.0			'托盘X向间距
	V3! = 10.0			'托盘Y向间距
	V11% = 5			'托盘X向料位数量
	V12% = 5			'托盘Y向料位数量
	V13% = 25			'托盘料位总数
**'初始化**
	SETM o1,1			'爪手气缸——开 = ON
	SETM o2,0			'爪手气缸——关 = OFF
	WAITI i1			'爪手开到位
	WIATJ i2			'爪手关到位
	MOVE 待命位
	V1% = 0				'托盘取料计数
	V2% = 0				'取余数,X向第几列
	V3% = 0				'求商,Y向第几行
	V4% = 0				'取料成功 = 1,取料失败 = 2
**'程序开始**
* Start
	* StartPick
	WAITI i3			'托盘到位,即物料到位,机器人可以取料
	CHGCOORD 1			'切换到1#用户坐标系
	V2% = V1% MOD 5		'取余数,X向第几列
	V3% = V1% \ 5		'求商,Y向第几行
	SHIFTA 2,V2%*V2!,V3%*V3!,0
		'参数说明:2=用户坐标系(0=机械,1=工具,2=用户,3=绝对)
	MOVE 取料上方点		'1#用户坐标系下示教
	MOVE 取料点			'1#用户坐标系下示教
	SETM o1,0			'爪手气缸——开 = OFF
	SETM o2,1			'爪手气缸——关 = ON
	WAITL i2,3,*pick_NG	'3秒内气缸未关到位,认为这个料位无料,跳转到*pick_NG

	* pick_OK
	V4% = 1
	MOVE 取料上方点		'1#用户坐标系下示教
	SHIFTA 2,0,0,0
	GOTO * NumCount

	* pick_NG
	V4% = 2
	SETM o1,1			'爪手气缸——开 = ON
	SETM o2,0			'爪手气缸——关 = OFF
	WAITI i1			'爪手开到位
	WIATJ i2			'爪手关到位
	MOVE 取料上方点		'1#用户坐标系下示教
	SHIFTA 2,0,0,0
	GOTO * NumCount

	* NumCount
	INH
	ADDVI V1%,1			'V1% = V1% + 1,计数+1
	INH
	IF V1% >= 25
		MOVE 待命位
		SETMD o3,1,0,2	'脉冲指令。o3 = 通知PLC可换料盘;1= ON;0=该指令执行后对信号延时/提前触发的时间;2=2秒
		V1% = 0			'计数归0
	ENDIF
	INH
	IF V4% = 1
	  MOVE 待命位
	  V4% = 0
	  END				'取料完成,结束本程序
	ELSEIF V4% = 2
		MOVE 待命位
		V4% = 0
		GOTO *StartPick
	ENDIF
END
	



Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐