ABB机器人相比于其他几个友商,硬件开放的水平较高,但仍然存在一定的问题,以我的理解,ABB机器人在ROS环境下才有最大的干涉权限。不过在Windows环境下,开发简单的上位控制系统的条件也是具备的。在此提供一套开发windows控制器的流程。具体操作流程为:
通过这组文章,目的是提供一个比原版官方文档更简单易懂而且好用地,贴近于工程应用实践的C# 傻瓜式应用范例,并提供最基础的启动代码。此处需要指出的是,这份档案只需要应用于一个机器人,所以很多地方想当然地觉得全世界只有这么一个机器人;多个机器人的复杂协作需要修改不少内容。(如需有偿人工帮助请联系)
首先去ABB机器人的二次开发中心 https://developercenter.robotstudio.com
下载PC SDK版本,在此示例当中使用的版本为PC SDK 6.08 ,同时需要安装Robot Studio(网络上资源很多,在此随便提供一个链接供参考 http://college.irobot-edu.com/community/ShowTopic-373.htm )。此时,当软件需要转移到其他设备上时,同样需要安装PC SDK。
ABB机器人SDK的语言框架是.NET框架,需要提前安装Visual Studio的C#支持库,在此使用的版本是Visual Studio 2019 Community版本和.NET 4.7.2版本。个人以为.Net 4.0以上框架均可,SDK会包含一个最低框架的说明,对于最新版 2020.1 Vesion,必须是4.8以上。
ABB机器人的上位机通讯主要有两种方式,PC SDK与Web Service。PC SDK可通过ABB官网下载,Web Service使用HTTP GET/POST获取数据。这两种通讯无论使用哪一种,均需要机器人控制器具有616-1 PC Interface选项,选项可通过示教器系统信息查看。
使用Robot Studio虚拟机无须任何操作,直接打开就行,但要注意RS端需要打开PC-Interface端,具体的操作方法如链接所示:
使用实际机器人操作时,具体操作参见最后一个章节的实操部分。
虚拟机的操作对于熟悉RobotStudio的朋友是很简单的,如果这一点不太会请自行补课。创建一个打开的虚拟示教器即可。简要流程为:创建一个机器人→创建一个控制器→连接控制器→打开示教器→完工OK。可以参考链接。
接下来进入项目的启动环境,首先确保程序调用了需要的内容,在此预先罗列了一部分内容:
using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.FileSystemDomain;
using ABB.Robotics.Controllers.RapidDomain;
using ABB.Robotics.Controllers.MotionDomain;
using ABB.Robotics.Controllers.Discovery;
using System.Windows.Forms;
using System.Collections;
using ABB.Robotics.Controllers.EventLogDomain;
建议一个专门的类,用于储存机器人控制的方法(全部是静态变量,还不知道静态类的朋友需要补课了),我管他叫RC - Robot Controller
class RC
{
//仅限单个机器人的操作
static Controller controller;
static ABB.Robotics.Controllers.RapidDomain.Task task = null;
就像这样提供两个静态变量就行。
非常基本的内容,实现起来也很简单,阅读起来也很简单。调试模式下单独用这段程序跑一下,infos应该已经被赋值啦。
NetworkScanner scanner = new NetworkScanner();
try
{
scanner.Scan();
}
catch (ControllerNotFoundException e)
{
MessageBox.Show(e.Message);
}
ControllerInfoCollection infos = scanner.Controllers;
如果这一步没有什么结果,说明你当前环境完全没有配置好。请确保RobotStudio已经打开,并且虚拟示教器已经配置完毕。
这一步的结果比较复杂,但是大部分内容都是可以忽略的,ControllerInfoCollection 是一个数组,其每项中信息可能有用的是如下几类:
大概扫描的结果如下图所示,删除了很多不必要的信息(其实显示也不太重要,大部分情况下,都没几个机器人选项,记住每个机器人标识码就行了)
并不需要了解这些究竟是什么,如果你的控制器只有单独一个小可爱,甚至不需要显示这些杂七杂八的内容,盘他!选择一个控制器,不需要知道任何事情,直接连接就可以,像这样不需要挑挑拣拣:
controller = new Controller(infos[0]);
controller.Logon(UserInfo.DefaultUser);
好吧确实比较简单,我理解大家比较想看完整代码,如下:
static public void Connect(ControllerInfo info)//连接函数,创建静态类需要优先调用
{
try
{
controller = new Controller(info);
controller.Logon(UserInfo.DefaultUser);
task = controller.Rapid.GetTask("T_ROB1");
}
catch (Exception e)
{
string T = e.Message;
MessageBox.Show(T);
}
}
好的同样比较简单,至此第二步也就结束了,机器人连接上之后,下一步就是机器人状态的采集和操作了,还有问题吗?没有了?好的下章见。