分享

ABB机器人与PLC位置数据交互 详细讲解

 钺YUE 2024-05-28 发布于天津

图片ABB机器人发送当前坐标位置给PLC的详细过程可以分为以下几个步骤,以下将结合参考文章中的信息进行清晰讲解:

1. 通信协议与接口选择

  • 通信协议:ABB机器人与PLC之间可以通过多种工业现场通信协议进行数据传输,如ProfiBus、ProfiNet、DeviceNet等。其中,ProfiNet作为一种高性能的以太网解决方案,常用于实现机器人与PLC之间的实时通信。

  • 接口选择:根据PLC的型号和配置,选择合适的接口与ABB机器人进行连接。例如,S7-1200 PLC可以通过PROFINET接口与ABB机器人进行通信。

2. 变量声明与数据类型

  • 变量声明:在ABB机器人中,需要声明用于存放机器人当前位置数据的变量。这些变量包括表示TCP(工具中心点)当前坐标的x、y、z坐标值以及绕x、y、z轴旋转的角度值。这些数据的类型通常是实数类型,在ABB机器人中可以使用num或dnum来表示,其中num类型与西门子PLC中的real类型一致,都是32位的单精度实数。

  • 数据类型匹配:确保ABB机器人中声明的变量数据类型与PLC中对应的数据类型一致,以便进行正确的数据传输和解析。

3. 组输出信号配置

  • 信号长度:由于机器人当前位置数据都是32位的单精度实数类型,因此每个组输出信号的长度也应该是32位。

  • 信号配置:在ABB机器人中配置组输出信号,以便将机器人的实时位置数据发送给PLC。这可以通过使用ABB机器人内置的数据处理指令编写实时位置数据发送程序来实现。

4. 中断子程序编写

  • 读取位置数据:在ABB机器人中创建一个中断子程序,用于定期读取机器人的当前位置数据。这些数据包括TCP的x、y、z坐标值以及旋转角度值。

  • 数据处理:在中断子程序中,对读取到的位置数据进行必要的处理,如单位转换、格式调整等,以确保数据符合PLC的接收要求。

5. 数据发送与接收

  • 数据发送:将处理后的位置数据通过之前配置的组输出信号发送给PLC。这可以通过ABB机器人的通信模块和PLC的PROFINET接口实现。

  • 数据接收:在PLC中编写相应的程序来接收ABB机器人发送的位置数据。这包括配置PLC的IP地址、端口号等网络参数,以及编写用于解析和存储接收到的数据的程序。

6. 调试与优化

  • 通信测试:在完成上述配置和编程后,进行通信测试以确保ABB机器人能够成功地将实时位置数据发送给PLC,并且PLC能够正确地接收和解析这些数据。

  • 性能优化:根据测试结果对通信参数、数据处理程序等进行必要的优化和调整,以提高数据传输的实时性和准确性。

  • 1. ABB机器人发送浮点数数据

    图片

    图片

    2. 发送坐标,机器人回端要解决的问题

    图片

3. 机器人端进行數据高低位转换

图片

4. PLC数据类型讲解

图片

图片

5. 分析机器人端和PLC端需要创建的变量数据

   任务要求:回传机器人1轴-6轴以及XYZ的坐标值

图片

图片

MODULE SUCC_B_station_Lmsa!B站林木森Lmsa VAR intnum intno1; !声明一个中断识别号 VAR num POS{9}; !声明一个存放J1-J6 XYZ坐标的数组 VAR rawbytes rawbyte1; !声明一个Rabytes数据类型用于存放打包与解包的数据。 VAR byte byte1{4}; !声明存放一个浮点数数据被拆分成组成这个浮点数的4个字节数据。
VAR byte Position{36};!存放将9个坐标浮点数转换为字节的4X9=36字节的一个数组“Position{36}” VAR num Lmsa; !声明一个遍历Position数组的NUM变量 CONST jointtarget Phome{8}:=[[[90,-20,-57.2,-0.59,90,0.2584],[9E+09,9E+09,9E+09,9E+09,9E+09,9E+09]],[[-7.85711E-7,7.00837,-7.39141,1.05234E-39,30.3831,1.45085E-37],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[4.50332,7.23671,-7.64511,-7.65159,30.7097,8.8439],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-16.693,8.55096,-1.39327,32.3497,27.7035,-37.8103],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-10.9289,-32.9271,32.5103,18.0069,32.1168,-20.9049],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-36.0406,32.8987,-33.2878,45.3095,45.8053,-55.1465],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-36.0406,60.5635,-0.919765,124.632,38.277,-151.317],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]],[[-36.0406,37.4155,-47.9823,39.4339,-1.33303,-46.1254],[9E+9,9E+9,9E+9,9E+9,9E+9,9E+9]]];
PROC Position_Lmsa() !读取机器人当前位置的子程序
VAR jointtarget Jpos; !声明jointtarget用于存放机器人关节轴角度数据 VAR robtarget Lpos; !声明robtarget用于存放机器人XYZ数据 Jpos:=CJointT(); !读取机器人当前位置6个关节轴角度存入Jpos Pos{1}:=Jpos.robax.rax_1; !把机器人1轴角度的数据放入到Pos{1}中 Pos{2}:=Jpos.robax.rax_2; Pos{3}:=Jpos.robax.rax_3; Pos{4}:=Jpos.robax.rax_4; Pos{5}:=Jpos.robax.rax_5; Pos{6}:=Jpos.robax.rax_6;!把机器人6轴角度的数据放入到Pos{6}中 Lpos:=CRobT(); !读取机器人当前位置的坐标存入Lpos Pos{7}:=Lpos.trans.x; !把机器人X轴坐标的数据放入到Pos{7}中 Pos{8}:=Lpos.trans.y; !把机器人X轴坐标的数据放入到Pos{8}中 Pos{9}:=Lpos.trans.z; !把机器人Z轴坐标的数据放入到Pos{9}中
ClearRawBytes rawbyte1; !清除Rwabyte1中的值 Lmsa:=1; !初始化Lmsa,用于从下标1开始遍历Position这个数组 FOR I FROM 1 TO 9 DO !开始9次循环 PackRawBytes POS{I},rawbyte1,1\Float4; !把Pos{i}的值以浮点数的形式打包放入到Rwabyte1中 FOR J FROM 1 TO 4 DO !开始4次循环 UnpackRawBytes rawbyte1,J,byte1{J}\hex1;!把rawbyte1中的值拆分成四个字节以16进制的形式放入到Byte1数组的四个元素中 ENDFOR !结束4次循环 FOR K FROM 4 TO 1 DO !开始4次循环 Position{Lmsa}:=byte1{k};!把byte1数组中的元素从大到小赋值给Posittion数组 Incr Lmsa;!Lmsa 变量自增1 ENDFOR!结束4次循环 ENDFOR!结束9次循环 ENDPROC
Proc Send_Pos() SocketClose Socket1; SocketCreate Socket1; SocketConnect Socket1,'192.168.0.1',2000; SocketSend Socket1\data:=Position; SocketClose Socket1; ENDPROC
PROC main()!主程序 IDelete intno1; !删除一个中断识别号 CONNECT intno1 WITH HuiChuan_Lmsa; !把Huichuan_Lmsa这个程序关联在Intno1的中断识别号上 ITimer 0.8,intno1; !每0.8秒执行一次HuiChuan_Lmsa程序 FOR i FROM 1 TO 8 DO for j from 1 to 8 DO MoveAbsJ phome{j},v500,z30,tool0; waittime 2; ENDFOR ENDFOR ENDPROC
TRAP HuiChuan_Lmsa !中断程序 Position_Lmsa; !调用Position_Lmsa Send_Pos; !调用Send_Pos ENDTRAP !结束中断
ENDMODULE

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多