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