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

示教器的使用

  • 界面及按钮含义
    众为兴机械手与上位机交互调试
    文章图片

    众为兴机械手与上位机交互调试
    文章图片
    众为兴机械手与上位机交互调试
    文章图片
    众为兴机械手与上位机交互调试
    文章图片
    众为兴机械手与上位机交互调试
    文章图片
    点击手动界面上方倍率,改变速度倍率
    众为兴机械手与上位机交互调试
    文章图片
    导入程序 可以插入U盘可以在我的电脑输入ftp://192.168.0.123,将文件拖入PROJECT 点击左上方小黄人点击CPU#1导入程序 示教器点击刷新即可
    众为兴机械手与上位机交互调试
    文章图片
    众为兴机械手与上位机交互调试
    文章图片
LUA编程软件使用
  • 新建文件:点击文件,新建,输入
function main()
end
【众为兴机械手与上位机交互调试】Ctrl+s 保存文件,用数字或者字母命名文件名,将后缀名改为.AR,机械手才可识别文件
众为兴机械手与上位机交互调试
文章图片

  • 程序编写:
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--中上下气缸输出端口2local 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--上下气缸没到位报警输出端口7local Output_Release_Clamp_M_alarm = 11--夹紧气缸没到位报警输出端口11 local Output_Up_Down_M_alarm = 8--上下气缸没到位报警输出端口8local 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=20ZeAcc=20ZeSpd=80ZeDec=20Stop= 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 =https://www.it610.com/article/= nil then--如果数据为空 print("data =https://www.it610.com/article/= 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()--执行该指令后程序暂停执行,按启动键后程序继续运行 endDO(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
    众为兴机械手与上位机交互调试
    文章图片
示教器视觉配置 手动模式,点击小黄人,视觉,配置,打开

    推荐阅读