EPSON简单视觉应用编程

EPSON简单视觉编程

需要设备
1.EPSON机械手一台。
2.工业相机一个。
3.通讯设备。

以固定向下相机为例
1.首先准备一个类似针尖工具,装到法兰盘上。
2.准备一张九个MARK点,尽可能遍布整个拍照区域。

image.png

3.建立一个camera_down_camera.pts点文件。将示教好的mark点和视觉像素点分别写入P1-P9 P11-P19中。

image.png

4.新建一个cal.prg程序。

image.png

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.运行程序

image.png

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,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864