EPSON简单视觉应用编程

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

over

  • 7
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值