一文看懂PLC与工业视觉的数据交互方式
随着工业自动化技术的发展,越来越多的企业开始采用机器视觉系统来进行产品检测和质量控制。机器视觉系统的主要作用是通过摄像头等设备对产品进行拍照,然后使用图像处理算法对图像进行分析和识别,从而实现对产品的检测、分类、计数等功能。而在实际应用中,往往需要将机器视觉系统与PLC(可编程逻辑控制器)等设备进行数据交互和设备控制,以实现自动化生产。
对于PLC和机器视觉系统之间的数据交互方式,主要有以下几种:
PLC与智能相机的视觉系统通讯
智能相机视觉系统通常都是模式比较固化,软件系统不方便修改,因此,与PLC通讯大多采用的是IO接口方式,也就是通过IO接线端子输出产品检测信息,给到PLC的输入信号,而PLC也是通过IO端口将拍照检测指令发送给PLC。这种方式比较简单,实现方便,但是需要注意的是,由于IO接口数量有限,不能同时支持多种检测模式,因此适用于检测模式比较单一的情况。
PLC与普通相机视觉系统的通讯
普通相机的视觉系统都是基于用户需求开发的,与PLC通讯方式大多采用下面几种:
2.1 串口通讯
串口通讯是一种常见的通讯方式,一般采用modbus的通讯协议。在这种通讯方式下,PLC和机器视觉系统之间通过串口连接,实现数据的双向传输。这种方式比较灵活,可以支持多种检测模式和控制方式,但是需要注意的是,由于串口传输速率较低,可能会影响系统的响应速度。
2.2 网络通讯
网络通讯是一种更加高效的通讯方式,一般采用TCP/IP的通讯协议。在这种通讯方式下,PLC和机器视觉系统之间通过网络连接,实现数据的双向传输。这种方式的优点是可以支持更高的传输速率和更大的数据量,同时也支持多种检测模式和控制方式。
2.3 简易控件通讯
一些品牌的PLC都有自己的通讯组件,使用组件进行通讯简单快捷,非常高效。在这种通讯方式下,PLC和机器视觉系统之间通过通讯组件进行数据交互和设备控制。这种方式的优点是可以实现快速开发和部署,同时也具备较高的数据传输速度和可靠性。
总的来说,PLC和机器视觉系统之间的数据交互是自动化生产中非常重要的一环。通过选择合适的通讯方式,可以实现PLC和机器视觉系统之间的数据传输和设备控制,从而提高生产效率、降低成本,保证产品的质量和稳定性。同时,随着技术的不断发展和创新,相信未来会出现更加高效和灵活的PLC和机器视觉系统之间的通讯方式,为自动化生产带来更多的便利和效益。
最近很多小伙伴找我学习,然后我根据二十年自动化控制经验精心录制了全套C#,机器视觉,运动控制卡原创教程,特别适合PLC工程师进阶上位机学习,一键三连就可以领取,以下是领取入口:
点击领取上位机编程全套入门教程+工具
ABB机器人与视觉通信发送数据
关注“PLC发烧友 ”,一起涨知识!
回复:机器人,领机器人全套电子资料包
导读:在工作中,通常会使用机器人去实现物料的抓取,而物料的颜色、形状、大小、角度等参数,机器人无法去实现,而视觉相机有可以实现这一功能。但是双方交换数据时,需要编程人员去规约或者提取。今天就和大家聊聊ABB机器人与视觉的通信及数据处理。
本次机器人与视觉这边,我们采用的是Socket通信。这种协议我们在这不作介绍,主要的重点是给大家介绍双方数据的提取和转换过程。
如图1,机器人欲抓起物料,但是物料的角度只能通过视觉相机这边提供给机器人(2D相机,可以识别平面旋转角度)。
图1
在编程之前,我们要掌握机器人去准确抓取一个物料的条件有两个:1.物料的位置值 2.物料的旋转角度值。所以,需要视觉这边提供3个数据,分别是:物料的X和Y位置数据和Z旋转角度值。但是ABB机器人工具的旋转姿态由q1/q2/q3/q4四个参数(四元素)决定,而视觉相机发过来的值是旋转角度值(欧拉角),所以要通过欧拉角转换为四元素机器人才能调整适合的工具姿态去抓取物料。
MODULE Module1
VAR num cam_x:=0;定义视觉发送X位置数据值
VAR num cam_y:=0; 定义视觉发送y位置数据值
VAR num cam_angle:=0; 定义视觉发送旋转角度数据值
CONST robtarget p10:=[[-1.289131E-05,3.351449E-06,237.1972],[0.01633704,-3.806521E-08,0.9998665,-3.595199E-08],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
定义安全位置点数据
Var robtarget 定义抓取位置点数据
ppick:=[[24.6736,49.99907,19.99434],[0.01633701,-5.075877E-09,0.9998665,-2.882863E-08],[-1,0,-1,0],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]];
VAR socketdev Socket1;定义套接字数据
VAR string received_string;定义字符串数据
VAR num startBit1; 定义num数据startBit1
VAR num startBit2; 定义num数据startBit2
VAR num startBit3; 定义num数据startBit3
VAR num startBit4; 定义num数据startBit4
VAR num startBit5; 定义num数据startBit5
VAR num EndBit1; 定义num数据
VAR num EndBit2; 定义num数据
VAR num EndBit3; 定义num数据
VAR num LenBit1; 定义num数据
VAR num LenBit2; 定义num数据
VAR num LenBit3; 定义num数据
VAR num Lenstring; 定义num数据
VAR string XData:=""; 定义num数据
VAR string yData:=""; 定义num数据
VAR string AngleData:=""; 定义num数据
PERS num X; 定义num数据
PERS num Y; 定义num数据
PERS num Angle; 定义num数据
以下是ABB机器人程序编写:(视觉发送给机器人的数据以字符串的格式发送并分号进行隔开,例如“12.3;33.5;24.2”)
PROC main()
SocketCreate Socket1; 创建套接字
SocketConnect Socket1, "127.0.0.1", 3000; 连接套接字
WHILE TRUE DO
SocketSend Socket1\Str:="hello server";发送数据给视觉相机
SocketReceive Socket1\Str:=received_string; 接收数据到机器人
TPWrite "server wrote-"+received_string; 写屏
DecodeData; 数据解析程序
cal_data; 欧拉角四元素转换程序
r_move; 抓取程序
ENDWHILE
ERROR 出错将关闭通信
SocketClose Socket1;
ENDPROC
PROC DecodeData()数据转换程序
VAR string Strread:=""; 定义字符串数据
VAR bool datatrue:=FALSE;定义布尔数据
Strread:=received_string; !接收来的数据存入Strread
Lenstring:=StrLen(Strread); !判断接收来的数据长度
startBit1:=1;
EndBit1:=StrFind(Strread,startBit1,";"); 查找第一个分号
LenBit1:=EndBit1-startBit1; 确定第一个数据的长度
startBit2:=EndBit1+1;
EndBit2:=StrFind(Strread,startBit2,";"); 查找第二个分号
LenBit2:=EndBit2-startBit2;确定第二个数据的长度
startBit3:=EndBit2+1; 查找第三个分号
EndBit3:=StrFind(Strread,startBit3,";"); 确定第三个数据的长度
LenBit3:=EndBit3-startBit3;
XData:=StrPart(Strread,startBit1,LenBit1); 截取第一个数据
yData:=StrPart(Strread,startBit2,LenBit2); 截取第二个数据
AngleData:=StrPart(Strread,startBit3,LenBit3); 截取第三个数据
datatrue:=StrToVal(XData,cam_x); 字符串转换为num
datatrue:=StrToVal(yData,cam_y); 字符串转换为num
datatrue:=StrToVal(AngleData,cam_angle); 字符串转换为num
ENDPROC
PROC cal_data()欧拉角四元素转换程序
VAR num rx;定义num数据
VAR num ry; 定义num数据
VAR num rz; 定义num数据
ppick.trans.z:=0; 2D视觉平面旋转,Z为0
rx:=EulerZYX(\X,ppick.rot); 四元素转换为欧拉角X
ry:=EulerZYX(\Y,ppick.rot); 四元素转换为欧拉角Y
rz:=EulerZYX(\z,ppick.rot); 四元素转换为欧拉角Z
ppick.trans.x:=cam_x; 相机X位置值给到抓取点X
ppick.trans.y:=cam_y; 相机Y位置值给到抓取点Y
ppick.rot:=OrientZYX(cam_angle,ry,rx); 欧拉角转换为四元素
ENDPROC
PROC r_move()抓取程序
MoveL Offs(ppick,0,0,30),v1000,z50,xipan\WObj:=Workobject_2;
移动到抓取点上方
MoveL ppick,v1000,fine,xipan\WObj:=Workobject_2; 移动到抓取点
WaitTime 0.5;等待0.5秒
MoveL Offs(ppick,0,0,30),v1000,fine,xipan\WObj:=Workobject_2; 移动到抓取点上方
MoveL p10,v1000,fine,xipan\WObj:=Workobject_2;回到安全点
ENDPROC
ENDMODULE
结束语:ABB机器人与视觉相机的通信并且实现抓取,主要掌握以下几个知识点即可解决:
1.视觉会发送哪几个数据给机器人,以什么格式进行发送?
2.视觉发送数据给了机器人,如何提取出来?
3.视觉发送的数据欧拉角如何转换成机器人的工具旋转角度
没有视觉的话我们可以采用调试软件进行测试。如图2
图2
来源:技成培训网——PLC发烧友,作者:郭彪,未经授权不得转载
回复:机器人,领机器人全套资料电子包
相关问答
plc能做视觉控制吗?
回答如下:是的,PLC(可编程逻辑控制器)可以通过连接视觉传感器、相机和图像处理系统来实现视觉控制。PLC可以接收传感器和相机的输入,并使用图像处理算法来分...
工业机器人用plc控制还是自己有一套控制?
工业机器人用PLC控制还是自己有一套控制?答:工业机器人有自己的一套控制与驱动系统。单一的PLC控制无法完成工业机器人的复杂的运动和工作流程。因为机器人的机...
3D视觉是直接连接机器人好还是通过PLC中转?
在实现3D视觉系统与机器人的连接时,选择直接连接机器人还是通过PLC中转,取决于具体的场景和需求。直接将3D视觉系统连接到机器人控制器上的方案具有许多优点。...
女生,做了四年非标视觉自动化,厌倦了出差和去现场调试,编程能力一般,转什么行业呢?
不想出差,找个你的待遇不错的客户跳槽过去,基本不需要你自己编程,做分析和解决问题再带些自己的创新型工作,很好了。不想出差,找个你的待遇不错的客户跳槽过...
怎么把PLC上的程序复制到我的电脑上-ZOL问答
回复LS的PLC?查看电脑上的通讯口是否被占用有用(0)回复不懂哦!!有用...个人觉得,用视觉检测并区分物体后,将信号传递给PLC,在条皮带上装一个旋转编码器...
搞自动化的学PLC有必要吗?前景怎么样?有前途吗?
非常感谢你的邀请,我很乐意回答你的问题。作为从事自动化专业的技术人员PLC应该是要熟练掌握的一门核心专业技术。我们知道PLC(可编程控制器)是建立在微处理器...
在座的老师有人知道吗!!小榄PLC编程公司,PLC编程如何使用??
[回答]你没有用户手册么?那你怎么编程,应用?j2s伺服可以24v输入,也可以5v输入,端子不一样。5v的差动输入,输入频率比较高,距离可以到达10m,24v对应集电极...
plp源码是什么意思?
PLP即分组级协议,全称PacketLevelProtocol。实现需要借助网络技术、自动控制系统、机器视觉等一系列尖端技术的综合应用,在整体发展过程中,PLC与机器视觉技...
童鞋们,求答案!口碑好的PLC编程哪家专业,PLC编程有哪些牌子??
[回答]宇丰视觉检测系统就是用工业相机代替人眼睛去完成识别、测量、定.位等功能。宇丰在一些特殊工业环境中实施工况检测,如焊接、火药制造等,人工视觉可...
大学学的是自动化,现在有plc三级证书,可以从事什么工作?
你可以从事的工作太多了,说都说不完,主要是不知你可以做多久。plc有等级证好像在一个技校听过,但我可以告诉你这证屁用都没有,所有单位都不会看你这个证,外...如...