众为兴机械手与上位机交互调试

示教器的使用

  • 界面及按钮含义
    众为兴机械手与上位机交互调试_第1张图片
    众为兴机械手与上位机交互调试_第2张图片众为兴机械手与上位机交互调试_第3张图片众为兴机械手与上位机交互调试_第4张图片众为兴机械手与上位机交互调试_第5张图片点击手动界面上方倍率,改变速度倍率
    在这里插入图片描述导入程序 可以插入U盘可以在我的电脑输入ftp://192.168.0.123,将文件拖入PROJECT 点击左上方小黄人点击CPU#1导入程序 示教器点击刷新即可
    众为兴机械手与上位机交互调试_第6张图片众为兴机械手与上位机交互调试_第7张图片

LUA编程软件使用

  • 新建文件:点击文件,新建,输入

function main()
end

Ctrl+s 保存文件,用数字或者字母命名文件名,将后缀名改为.AR,机械手才可识别文件
众为兴机械手与上位机交互调试_第8张图片

  • 程序编写:

1.local 定义局部变量
定义输入信号,输出信号,报警信号,点位定义,

--输入信号
local Input_pause = 8  									 --暂停信号

local Input_Release_Clamp_L = 4 							 --左夹紧气缸到位输入端口4
local Input_Up_Down_L = 1									 --左上下气缸到位输入端口1
local Input_Release_Clamp_M = 5 							 --中夹紧气缸到位输入端口5
local Input_Up_Down_M = 2									 --中上下气缸到位输入端口2
local Input_Release_Clamp_R = 6 							 --右夹紧气缸到位输入端口6
local Input_Up_Down_R = 3									 --右上下气缸到位输入端口3

--输出信号
--气缸
local Output_Release_Clamp_L = 4       					 	 --左夹紧气缸输出端口4	
local Output_Up_Down_L = 1      							 --左上下气缸输出端口1	

local Output_Release_Clamp_M = 5       						 --中夹紧气缸输出端口5	
local Output_Up_Down_M = 2      						 	 --中上下气缸输出端口2

local Output_Release_Clamp_R = 6       					 	 --右夹紧气缸输出端口6	
local Output_Up_Down_R = 3      						 	 --右上下气缸输出端口3
--报警
local Output_Release_Clamp_L_alarm = 10						 --夹紧气缸没到位报警输出端口10
local Output_Up_Down_alarm_L = 7						     --上下气缸没到位报警输出端口7

local Output_Release_Clamp_M_alarm = 11						 --夹紧气缸没到位报警输出端口11
local Output_Up_Down_M_alarm = 8							 --上下气缸没到位报警输出端口8

local Output_Release_Clamp_R_alarm = 12					     --夹紧气缸没到位报警输出端口12
local Output_Up_Down_R_alarm = 9							 --上下气缸没到位报警输出端口9

2.IO初始化,点位初始化

--点位定义	 
local waitLoc = p1  			 						 	 --等待点 
local putLoc = p2   										 --安全及放料点
					 
--输出IO初始化
for i=1,20 do
	DO(i,OFF)
end
--点位初始化
MovP(waitLoc,"Spd=100 CP=100")
print("点位初始化完成,等待上位机拍照")

3.主程序

--[[视觉CM0协议:
    上位机收到: NO,0,0,0; 给机械手发点位 
				The Message is nil.Please Send again! 点位格式错误
				in position  动作到位完成
	自动点位格式:
		auto,350,-50,60;auto,360,-60,70;auto,370,-70,80;(逗号分隔,分号分组)
	手动气缸格式:
		manual,1,0,0;打开左上下气缸
		manual,2,0,0;打开中上下气缸
		manual,3,0,0;打开右上下气缸
		manual,4,0,0;打开左夹紧气缸
		manual,5,0,0;打开中夹紧气缸
		manual,6,0,0;打开右夹紧气缸
		
		manual,7,0,0;关闭左上下气缸
		manual,8,0,0;关闭中上下气缸
		manual,9,0,0;关闭右上下气缸
		manual,10,0,0;关闭左夹紧气缸
		manual,11,0,0;关闭中夹紧气缸
		manual,12,0,0;关闭右夹紧气缸
	手动点位格式:
		manual,7,0,0;移动到等待位上方
		manual,8,0,0;移动到放置位上方--]]

function main()

	MotOn()														 --伺服所有轴上电使能 
	CCDclr("CAM0") 												 --清除网络托管
	
	while 1 do
	
		--MArchP(A,B,C,D, "Acc=20 Dec=20 Spd=100 ZsAcc=20 ZsSpd=80 ZsDec=20  ZeAcc=20  ZeSpd=80  ZeDec=20  Stop= 0 I=0 In=10 ON/ OFF”)
		
		--[[MovP(waitLoc+Z(-30),"Spd=100 CP=100") 
		MovP(waitLoc,"Spd=100 CP=100")--]]
	   --[[ MArchP(waitLoc,0,10,5,"CP=100 Acc=20 Dec=20 Spd=100")				--移动到等待位,运动过程中检测到输入信号IN8打开,则停止--]]
		CCDsent("CAM0","NO,0,0,0;")											 --采用网络触发方式触发相机拍照
		Delay(10)												   	     --延时10ms
		local catchLoc = {x=0,y=0,z=0,c=0,h=0}							 --定义抓取位
		print("开始接收视觉 CAM0 的数据")
		local n,data,err=CCDrecv("CAM0")    					 		 --接收视觉 CAM0 的数据
		local time1=systime()   											--获取当前的系统时钟  
		if data == nil then													--如果数据为空
			print("data == nil")
			CCDsent("CAM0","The Message is nil.Please Send again!")	
		elseif data ~= nil then                                             --如果数据不为空
			print("data ~= nil")
			if data[1].NO == "auto" then      								--如果接收到的数据第一位是auto,进入自动模式
				print("enter auto")	
				for i=1,n do                     							 --循环n次     
					print(i,data[i].NO,data[i][1],data[i][2],data[i][3]) 		     	 --打印每组数据     
					if data[i][1]~=0 or data[i][2]~=0 then 			     	 --判断数据不同时为零  
						catchLoc.x=data[i][1]           				     --数据 data[i][1]赋值给 catchLoc.x   
						catchLoc.y=data[i][2]         					     --数据 data[i][2]赋值给 catchLoc.y       
						catchLoc.z=-10       
						catchLoc.c=data[i][3]            			         --数据 data[i][3]赋值给 catchLoc.c 
						Delay(100)
						print("到第",i,"个点位了")
						
						MovP(catchLoc,"Spd=100 CP=100")
						MovP(catchLoc+Z(-30),"Spd=100 CP=100") 
						MovP(catchLoc,"Spd=100 CP=100")
						--[[MArchP(catchLoc,0,10,5,"CP=100 Acc=20 Dec=20 Spd=100")      --运动到点 catchLoc,运动过程中检测到输入信号IN8打开,则停止  --]]
						DO(0+i,ON)              		   				     --气缸往下
						Delay(100)
						print("输入端:",i)	
						Pause()
						--WDI(10,ON,"Time=1000") 							 --感应器亮 检测到输入信号IN10打开再执行下一行,若检测不到,等待一秒后跳出
						if DI(0+i) == OFF then 								 --如果上下气缸没到位
						   DO(6+i,ON)					     				 --上下气缸没到位报警
							CCDsent("CAM0","Cylinder not in place")
						   Pause() 										 	 --执行该指令后程序暂停执行,按启动键后程序继续运行
						end
						 
						DO(3+i,ON) 										 --气缸夹紧
						Delay(100)	
						print("输入端:",i+3) 
						Pause()   		 				    
						--WDI(11,ON,"Time=1000") 						     --感应器亮 检测到输入信号IN15打开再执行下一行,若检测不到,等待一秒后跳出
						if DI(3+i) == OFF then 
						   DO(6+i,ON)				 						 --夹紧气缸没到位报警
						   Pause() 											 --执行该指令后程序暂停执行,按启动键后程序继续运行
						end
					end     
				end 
				MovP(putLoc,"Spd=100 CP=100")
				MovP(putLoc+Z(-30),"Spd=100 CP=100") 
				MovP(putLoc,"Spd=100 CP=100")
				--[[MArchP(putLoc,0,10,5,"CP=100 Acc=20 Dec=20 Spd=100")--]]
				
				MovP(waitLoc,"Spd=100 CP=100")
				MovP(waitLoc+Z(-30),"Spd=100 CP=100") 
				MovP(waitLoc,"Spd=100 CP=100")
				
				CCDsent("CAM0","in position")	
				
				local time2 = systime()-time1 								--获取程序运行的时间 
				print(time2) 
			elseif data[1].NO == "manual" then								--如果接收到的数据第一位是manual,进入手动模式
				print("enter manual")
				if data[1][1] == 1 then										--如果接收到的数据第二位是1
					DO(1,ON)	
					print("DO(1,ON)")											--打开左上下气缸
				elseif data[1][1] == 2 then
					DO(2,ON)
					print("DO(2,ON)")											--打开中上下气缸
				elseif data[1][1] == 3 then
					DO(3,ON)	
					print("DO(3,ON)")											--打开右上下气缸
				elseif data[1][1] == 4 then
					DO(4,ON)	
					print("DO(4,ON)")											--打开左夹紧气缸
				elseif data[1][1] == 5 then
					DO(5,ON)			
					print("DO(5,ON)")											--打开中夹紧气缸
				elseif data[1][1] == 6 then
					DO(6,ON)	
					print("DO(6,ON)")											--关闭右夹紧气缸
				elseif data[1][1] == 7 then										
					DO(1,OFF)	
					print("DO(1,OFF)")											--关闭左上下气缸
				elseif data[1][1] == 8 then
					DO(2,OFF)
					print("DO(2,OFF)")											--关闭中上下气缸
				elseif data[1][1] == 9 then
					DO(3,OFF)	
					print("DO(3,OFF)")											--关闭右上下气缸
				elseif data[1][1] == 10 then
					DO(4,OFF)	
					print("DO(4,OFF)")											--关闭左夹紧气缸
				elseif data[1][1] == 11 then
					DO(5,OFF)			
					print("DO(5,OFF)")											--关闭中夹紧气缸
				elseif data[1][1] == 12 then
					DO(6,OFF)	
					print("DO(6,OFF)")											--关闭右夹紧气缸	
				elseif data[1][1] == 7 then									--如果接收到的数据第二位是7
					MovP(waitLoc,"Spd=100 CP=100")
					print("移动到等待位上方")
				elseif data[1][1] == 8 then									--如果接收到的数据第二位是8
					MovP(putLoc,"Spd=100 CP=100")
					print("移动到放置位上方")
				else
					print("err")											--打印错误
				end
			else
				print("o")
			end
		elseif err~=0 then   
			print("网线断开或 IP 配置错误或网络超时") 
		end 
	end 
end 
  • 导入文件:在我的电脑输入ftp://192.168.0.123,将文件拖入PROJECTS
    众为兴机械手与上位机交互调试_第9张图片

示教器视觉配置

手动模式,点击小黄人,视觉,配置,打开

你可能感兴趣的:(机械手)