勇哥注: 设备的动作可以是plc,或者是运动控制来完成。 后者是一台工业电脑配上运动板卡来完成。 在有些工厂里,可能由客户喜好更喜欢用运动控制(比如富士康的苹果客户, 因为PC机和工厂的生产系统进行通讯要更方便一些,并且对视觉的配合要更好些)。 基于IPC和windows的运动控制,可靠性是没有plc好的。 因为plc相当于是一个专用小系统,并且是实时扫描的。可靠性是相当高。 但是PC有自己的优势,比如复杂和精密的视觉处理的设备都是离不开运动控制的, 因为运动卡能提供更复杂的运动能力和精度保证,plc只能做一些简单的ptp运动。
系列贴子导航:
C#编写运动控制:自定义回原(五) 验证自定义回原精度,并提出解决方案
C#编写运动控制:自定义回原(三) 回原时为什么会出现运动指令无效跳过的现象
C#编写运动控制:自定义回原(二) 限位做为回原、限位反找回原
C#编写运动控制:自定义回原(五) 验证回原功能
自定义回原是靠C#代码循环扫描感应器来回原的。
而C#的线程调度都是看操作系统自由发挥,因为windows是抢占式多任务系统。
因此你无法保证1毫秒准时去做什么事情。
一般的订时器或者Thread.Sleep()都无法保证上面的要求。
所以,你回原的时候,可能停止的位置是飘乎不定的。至于这种误差是否接受,要看你的设备的精度要求了。
勇哥的测试方式是用相机拍,多次回原后,我们看图片的同一个标志位置,看其坐标的变化。
为了方便测试,我挂了一个普通的高清摄像头,而非工业级相机。
因此下面只是说明方法,测试精度有限。
测试结果
行方向上三次回原结果最大不超过0.5个像素。
因为标定板两个圆的圆心距离是10mm,所以每个像素是0.1434mm
所以行方向上的回原误差约7条,小于0.1mm
回原不准的若干原因,全部是经验:
1. 对于距离比较长的轴,如果是一次回原,则长距离回原跟短距离回原位置不同
2. 回原后发现脉冲位置可能不是0,这个往往跟在ui线程中调用回原方法有关系,属于程序编写考虑不周全。
3. 回原是高速还是低速回原,对精度有影响
4. 原点感应器是有响应速度的指标的
对于回原精度的改进意见:
做两次回原,第一次高速回原,第二次在原点上慢速度回原
使用回原+EZ回原,EZ即Z相信号。
Z相是零位信号,编码器旋转一周输出一个脉冲,一般在机械回零时应用。
有关Z相信号请参见勇哥写的另一个贴子:http://47.98.154.65/?id=1918
3. 每一根轴都必须先做重复性测试,排除机械问题。
本文视频讲解:
视频中的halcon测试代码:
read_image (T1, 'D:/org3.bmp') gen_rectangle1 (ROI_0, 416.042, 499.542, 546.212, 590.855) reduce_domain(T1, ROI_0, ImageReduced) rgb1_to_gray(ImageReduced, GrayImage) threshold (GrayImage, Regions, 0, 119) connection(Regions, ConnectedRegions) select_shape(ConnectedRegions, SelectedRegions, \ ['area','width','height'], 'and', [110,8,8], [125,15,15]) count_obj(SelectedRegions, Number) area_center(SelectedRegions, Area, Row, Column) //517.873,559.966 //518.0,559.916 //517.916,560 //0.5, 0.2 gen_rectangle1 (ROI_0, 259.332, 470.816, 371.881, 520.446) reduce_domain(T1, ROI_0, ImageReduced1) rgb1_to_gray(ImageReduced1, GrayImage1) threshold (GrayImage1, Regions1, 0, 81) connection(Regions1, ConnectedRegions1) area_center(ConnectedRegions1, Area1, Row1, Column1) row2:=Row1[1]-Row1[0] //69.7 res:=10/69.7
---------------------
作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!

