C# ABB机器人上位机控制 .net PC SDK开发全流程(通信、控制、日志、二次开发)--Chapter 1

前言

ABB机器人相比于其他几个友商,硬件开放的水平较高,但仍然存在一定的问题,以我的理解,ABB机器人在ROS环境下才有最大的干涉权限。不过在Windows环境下,开发简单的上位控制系统的条件也是具备的。在此提供一套开发windows控制器的流程。具体操作流程为:

  1. RobotStudio创造对应硬件设备的虚拟机,配置好环境;
  2. 使用SDK提供的网络通信,与虚拟机建立Socket通信(TCP/IP协议);
  3. 网络通信读取机器人当前信息,并加以区分、显示;
  4. 网络通信读取日志,并整合进现有日志框架中
  5. 对机器人实现基本运动控制(三种移动方式);
  6. 对机器人实现坐标控制,包含:坐标系设置、标定信息设置、速度设置;
  7. 对机器人程序进行控制,包含程序下载上载,RAPID程序启动和停止、程序指针设置、信号状态设置;
  8. 将实现内容整合入现有框架当中;
  9. 将机器人坐标系设置信息整合进现有程序之中;
  10. 与虚拟机器人进行联调;
  11. 与实际机器人进行联调。

通过这组文章,目的是提供一个比原版官方文档更简单易懂而且好用地,贴近于工程应用实践的C# 傻瓜式应用范例,并提供最基础的启动代码。此处需要指出的是,这份档案只需要应用于一个机器人,所以很多地方想当然地觉得全世界只有这么一个机器人;多个机器人的复杂协作需要修改不少内容。(如需有偿人工帮助请联系)

1. 项目启动

配置安装环境

首先去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。可以参考链接
在这里插入图片描述

2. 开始编程:与机器人连接

接下来进入项目的启动环境,首先确保程序调用了需要的内容,在此预先罗列了一部分内容:

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 是一个数组,其每项中信息可能有用的是如下几类:

  1. IP地址
  2. 系统名称
  3. 控制器名称
  4. 版本
  5. 标识码
  6. 是否为虚拟机

在这里插入图片描述

大概扫描的结果如下图所示,删除了很多不必要的信息(其实显示也不太重要,大部分情况下,都没几个机器人选项,记住每个机器人标识码就行了)
在这里插入图片描述

一行代码完成连接

并不需要了解这些究竟是什么,如果你的控制器只有单独一个小可爱,甚至不需要显示这些杂七杂八的内容,盘他!选择一个控制器,不需要知道任何事情,直接连接就可以,像这样不需要挑挑拣拣:

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);
            }
        }

好的同样比较简单,至此第二步也就结束了,机器人连接上之后,下一步就是机器人状态的采集和操作了,还有问题吗?没有了?好的下章见。

  • 19
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,以下是一个使用C#编写的ABB机器人SDK二次开发的DEMO示例: ```csharp using System; using ABB.Robotics.Controllers; using ABB.Robotics.Controllers.Discovery; using ABB.Robotics.Controllers.EventLogDomain; using ABB.Robotics.Controllers.FileSystemDomain; using ABB.Robotics.Controllers.RapidDomain; namespace ABBRobotDemo { class Program { static void Main(string[] args) { // 创建机器人控制器对象 ControllerInfoCollection controllers = ControllerInfoFactory.GetControllers(); ControllerInfo controllerInfo = controllers[0]; Controller controller = ControllerFactory.CreateFrom(controllerInfo); // 连接机器人控制器 controller.Logon(UserInfo.DefaultUser); // 获取机器人状态 State state = controller.State; Console.WriteLine("Robot State: " + state.ToString()); // 获取机器人位置信息 RobotPosition position = controller.MotionSystem.Position; Console.WriteLine("Robot Position: X=" + position.X + ", Y=" + position.Y + ", Z=" + position.Z); // 控制机器人移动到指定位置 RobotPosition targetPosition = new RobotPosition(); targetPosition.X = 100; targetPosition.Y = 100; targetPosition.Z = 100; targetPosition.Q1 = 0; targetPosition.Q2 = 0; targetPosition.Q3 = 0; targetPosition.Q4 = 1; controller.MotionSystem.Motion.MoveTo(targetPosition); // 断开机器人控制器连接 controller.Logoff(); } } } ``` 这个DEMO展示了如何使用C#编写ABB机器人SDK连接、获取机器人状态和位置信息,以及控制机器人移动到指定位置。这只是一个简单的示例,你可以根据自己的需求进行二次开发
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值