EGM中使用的是Protocol Buffer2的协议,从Egm.proto模板文件中可以了解到,协议版本没有定义默认为proto2,目前最新版本为proto3。PC安装了RobotStudio 6.08后,在如下路径可以找到egm.proto模板文件。
C:\ProgramData\ABB Industrial IT\Robotics IT\DistributionPackages\ABB.RobotWare-6.08.0134\RobotPackages\RobotWare_RPK_6.08.0134\utility\Template\EGM
初次使用Protocol Buffer协议格式时,是在项目中使用微服务了解到的。有用到gRpc基于远程过程调用框架,gRPC 是Google 发布的开源 RPC 框架,提供 protocol buffer 编译插件,能够从一个服务定义的 .proto 文件生成客户端和服务端代码。通常 gRPC 用户可以在服务端实现这些API,并从客户端调用它们。使用和了解更多帮助信息可以参考以下两个链接
gRPC 官方文档中文版 http://doc.oschina.net/grpc?t=60132
gRpc入门之旅博客 https://www.cnblogs.com/chillsrc/p/18062504
这里不做详细介绍,主要讲两点,第一点需要用到包,在打开的NuGet包管理界面的中选择“浏览”标签页,在搜索框中输入“google”,找到最新版本Google.ProtocolBuffers,点击安装。如下图
安装完成后打开.nuget包本地文件夹路径,我电脑在如下位置C:\Users\Administrator.nuget\packages\google.protocolbuffers\2.4.1.555\tools
第二点复制Egm.proto文件至该文件夹内,win+r输入cmd打开控制台,cd到该路径下。输入以下命令生成.cs文件,详细看截图操作
如何使用Egm.cs里面的方法,模板里的Egm.proto有注释,更多功能自行尝试,需要获取机器人相关数据,可以参考如下示例代码
UdpClient _udpServer = new UdpClient(6511);var remoteEP = new IPEndPoint(IPAddress.Any, 6511); while (true){var data = _udpServer.Receive(ref remoteEP);//先启动C#程序,再启动机器人程序MessageBox.Show($"Seq={robot.Header.Seqno.ToString()} tm={robot.Header.Tm.ToString()} pos= {robot.FeedBack.Cartesian.Pos}");}
机器人通讯设置需要设置6511端口
机器人Rapid代码如下
PROC main()MoveJ p100,v1000,fine,MyTool\WObj:=wobj0;EGMReset egmID1;waittime 1;EGMGetId egmID1;egmSt1:=EGMGetState(egmID1);IF egmSt1<=EGM_STATE_CONNECTED THEN EGMSetupUC ROB_1,egmID1,"default","UCdevice"\pose;ENDIFEGMActPose egmID1\Tool:=MyTool,corr_frame_offs,EGM_FRAME_WORLD,corr_frame_offs,EGM_FRAME_WORLD\x:=egm_minmax_lin1\y:=egm_minmax_lin1\z:=egm_minmax_lin1\rx:=egm_minmax_rot1\ry:=egm_minmax_rot1\rz:=egm_minmax_rot1\LpFilter:=20\MaxSpeedDeviation:=30;EGMRunPose egmID1,EGM_STOP_HOLD\x\y\Z\CondTime:=3\RampInTime:=0.05;ENDPROC
对Rapid中EGM相关指令不熟悉可以参考,RobotStudio中帮助手册