EPSON简单视觉编程
需要设备
1.EPSON机械手一台。
2.工业相机一个。
3.通讯设备。
以固定向下相机为例
1.首先准备一个类似针尖工具,装到法兰盘上。
2.准备一张九个MARK点,尽可能遍布整个拍照区域。
3.建立一个camera_down_camera.pts点文件。将示教好的mark点和视觉像素点分别写入P1-P9 P11-P19中。
4.新建一个cal.prg程序。
5.编辑cal.prg程序。
Function cal_camera_down String toks$(0), data$ '定义字符串数组 Integer i, ccd_ngok,x_vision, y_vision, u_vision, z_vision '定义变量 Motor On '打开电机 Power Low Speed 50 Accel 80, 80 SpeedS 200 AccelS 200, 200 LoadPoints "cal_down_camera.pts" '加载点文件 Print "加载当前文件" SetNet #201, "192.168.0.100", 2000, CRLF, NONE, 0 '设置端口通讯格式 OpenNet #201 As Client '打开端口 WaitNet #201 Print "TCP connected" For i = 11 To 19 Line Input #201, data$ '接收缓冲区字符 Print #201, "m" '将m发送回去--上位机要求的情况 Print data$ ParseStr data$, toks$(), "," '将data$赋值给toks$数组 x_vision = Val(toks$(1)) '将数组里1号元素赋值给x_vision y_vision = Val(toks$(2)) '同上面 u_vision = Val(toks$(3)) z_vision = Val(toks$(4)) ccd_ngok = Val(toks$(5)) If x_vision <> 0 And y_vision <> 0 Then '如果x,y不为空 打印P(i)的坐标 P(i - 10) = XY(Val(toke$(1)), Val(toke$(2)), Val(toks$(3)), Val(toks$(4))) Print "p", (i - 10), "=", P(i - 1) Else Print "拍照失败" Pause EndIf Next SavePoints "cal_down_camers.pts" '保存视觉校准点文件 VxCalib 1, 2, P(1:9), P(11:19) '生成校准文件 If VxCalInfo(1, 1) = True Then Print "向上固定相机校准成功,结果如下:" Print " X方向的平均偏差[mm]:", VxCalInfo(1, 2) Print " X方向的最大偏差[mm]:", VxCalInfo(1, 3) Print " X方向の1ピクセル当たりの長さ ( mm ):", VxCalInfo(1, 4) Print " X方向的傾角 ( deg ):", VxCalInfo(1, 5) Print " Y方向的平均偏差[mm]:", VxCalInfo(1, 6) Print " Y方向的最大偏差[mm]:", VxCalInfo(1, 7) Print " Y方向の1ピクセル当たりの長さ ( mm ):", VxCalInfo(1, 8) Print " Y方向的傾角 ( deg ):", VxCalInfo(1, 9) Else Print "向上相机校准失败,请重新示教点校准相机!" EndIf If VxCalInfo(1, 1) = True Then VxCalSave "calibcamera.caa" '保存文件 Fend
6.运行程序
7.main程序
Global Preserve Integer OKNG, charnum, c, j, k, row1,row2,range1, range2 Function main Call init Call product_check Do Call vision Tool 1 Call QuLiao Call FangLiao Loop Fend Function init Reset Motor On Power Low Speed 50 Accel 80, 80 SpeedS 200 AccelS 200, 200 OKNG = 0 '正确错误 c = 0 '步进量 i = 1 'OK计数 j = 1 'NG计数 Tool 0 LoadPoints "robot1.pts" '加载点文件 VxCalLoad "calibcamera.caa" '加载视觉校准文件 Pallet 1, P20, P21, P22, row1, range1 Pallet 2, P25, P26, P27, row2, range2 Go Here :Z(20) Jump pos_daiji :Z(25) Fend Function NetOpen charnum = ChkNet(201) If (charnum < 0) Then CloseNet #201 SetNet #201, "192.168.0.100", 5000, CRLF, NONE, 0 OpenNet #201 As Client WaitNet #201 Print "TCP connercted..." EndIf Fend Function vision Tool 0 LoadPoints "robot1.pts" String toks$(0), data$ Real x_vision, y_vision, u_vision, z_vision, ccd_ngok vrun10: Call NetOpen If charnum > 0 Then Line Input #201, data$ Print #201, data$ Else Print "通讯断开 ....", charnum CloseNet #201 GoTo vrun10 EndIf ParseStr data$, toks$(), "," x_vision = Val(toks$(1)) y_vision = Val(toks$(2)) u_vision = Val(toks$(3)) z_vision = Val(toks$(4)) ccd_ngok = Val(toks$(5)) If x_vision <> 0 And y_vision <> 0 Then Print "拍照有数据" Print "x=", x_vision, "y=", y_vision, "u=", u_vision, "z=", z_vision, "ccd_ngok=", ccd_ngok pos_zhuaqu = XY(Val(toke$(1)), Val(toke$(2)), Val(toks$(3)), Val(toks$(4))) If ccd_ngok = 0.0 Then Print 'ok' OKNG = 0 Else Print "ng" OKNG = 1 EndIf Else Print "拍照失败" EndIf c = 1 Fend Function product_check Fend Function QuLiao If c = 1 And x_vision <> 0 And y_vision <> 0 Then Print "拍照成功" 'if pos_quliao.x<185.5 and ' pos_quliao.x>-21.2 and ' pos_quliao.y<-416.9 and ' pos_quliao.y>-569.3 then Go XY(x_vision, y_vision, z_vision + 50, u_vision) '抓取点 Move XY(x_vision, y_vision, z_vision, u_vision) Wait 0.1 On 0 Wait 0.1 Move XY(x_vision, y_vision, z_vision + 50, u_vision) c = 2 'else 'print"超出范围" EndIf Fend Function FangLiao Print "等待旋转到位" If Sw(5) = On And c = 2 Then If OKNG = 0 Then Print "ok" Call fang1 Else Print "NG" Call fang2 EndIf c = 0 EndIf Fend Function fang1 Go pos_guodu1 Print "第", j, "个" Go Pallet(1, j) +Z(50) Move Pallet(1, j) Off 0 Wait 0.1 Move Pallet(1, j) +Z(50) Go pos_daiji j = j + 1 If j = row1 * range1 Then j = 1 On 7, 1, 1 EndIf Fend Function fang2 Go pos_guodu2 Print "第", k, "个" Go Pallet(1, k) +Z(50) Move Pallet(1, k) Off 0 Wait 0.1 Move Pallet(1, k) +Z(50) Go pos_daiji k = k + 1 If k = row1 * range1 Then k = 1 On 8, 1, 1 EndIf Fend
————————————————
版权声明:本文为CSDN博主「如 风」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43393043/article/details/83384079
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


