C# 机器视觉工控通讯------ABB机器人上位机通讯


前言

本文调用RobotStudio所提供的库文件通过PCP/IP直接访问控制ABB机器人(需要开通模块616-1 PC interface支持)。


一、RobotStudio是什么?

RobotStudio 是一款 PC 应用程序,用于机器人单元的建模、离线创建和仿真。

RobotStudio 允许您使用离线控制器,即在您 PC 上本地运行的虚拟 IRC5 控制器。这种离线控制器也被称为虚拟控制器 (VC)。RobotStudio 还允许您使用真实的物理 IRC5 控制器(简称为“真实控制器”)。

一、使用步骤

1.引入库

项目引用添加如下

 

using ABB.Robotics.Controllers;
using ABB.Robotics.Controllers.Discovery;
using ABB.Robotics.Controllers.EventLogDomain;
using ABB.Robotics.Controllers.FileSystemDomain;
using ABB.Robotics.Controllers.IOSystemDomain;
using ABB.Robotics.Controllers.MotionDomain;
using ABB.Robotics.Controllers.RapidDomain;

2.扫描ABB控制器

        public static ControllerInfoCollection Scan(NetworkScanner scanner)
        {
            scanner.Scan();  //扫描控制器
            ControllerInfoCollection controllers = scanner.Controllers; //获取扫描到的控制器集合
            networkWatcher = new NetworkWatcher(controllers);
            //networkWatcher.Found += NetworkWatcher_Found;
            networkWatcher.Lost += NetworkWatcher_Lost;
            networkWatcher.EnableRaisingEvents = true;
            return controllers;
        }

3.连接控制器

      public static bool Connect(ControllerInfoCollection controllers, ref Controller controller)
        {
            bool flag = false;
            try
            {
                foreach (ControllerInfo controllerInfo in controllers)
                {
                    if (controllerInfo.Availability == Availability.Available)
                    {
                        //if (controller != null)
                        //{
                        //    DisConnect(controller);
                        //    flag = false;
                        //}
                        //else
                        //{
                        controller = Controller.Connect(controllerInfo, ConnectionType.Standalone);   //连接控制器
                        controller.Logon(UserInfo.DefaultUser);    //以DefaultUser登录
                        flag = true;
                        //}
                    }
                    else
                    {
                        flag = false;
                    }
                }
                return flag;
            }
            catch
            {
                return false;
            }
        }

4 断开控制器的连接

        public static void DisConnect(Controller controller)
        {
            controller.Logoff();
            controller.Dispose();
            controller = null;
        }

5 获取权限

     public static bool GetRoot(Controller controller)
        {
            try
            {
                mastership = Mastership.Request(controller);
                return mastership.IsMaster;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

6.释放权限 

        public static void DisposeRoot(Mastership mastership)
        {
            if (mastership != null && mastership.IsMaster)
                mastership.Dispose();
        }

7.获取机械单元,可获取坐标、速度....具体看对象的结构或协议 

        public static bool GetMechanicalUnit(Controller controller)
        {
            lock (lock_ABBInterface)
            {
                try
                {
                    MechanicalUnitCollection aMechCol = controller.MotionSystem.MechanicalUnits;
                    curr_robTarget = aMechCol[0].GetPosition(CoordinateSystemType.World);//获取机械单元ROB_1(机器人本体)数据
                    curr_robTarget.Extax.Eax_a = aMechCol[2].GetPosition(CoordinateSystemType.World).Trans.X;  //获取机械单元M7(第七轴)数据
                    robot_speed = controller.MotionSystem.SpeedRatio;   //获取机械单元的速度,即机器人当前速度
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }

 8 获取程序模块

        public static bool GetProgramName(Controller controller)
        {
            lock (lock_ABBInterface)
            {
                try
                {
                    ABB.Robotics.Controllers.RapidDomain.Task[] taskCol = controller.Rapid.GetTasks();
                    routine = taskCol[0].ProgramPointer.Routine;
                    module = taskCol[0].ProgramPointer.Module;
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }

9 获取机器人状态

      public static bool GetState(Controller controller)
        {
            lock (lock_ABBInterface)
            {
                try
                {
                    con_states = controller.State;      //控制器状态
                    op_mode = controller.OperatingMode;     //控制器操作模式
                    executionStatus = controller.Rapid.ExecutionStatus;     //执行状态
                    return true;
                }
                catch (Exception ex)
                {
                    return false;
                }
            }
        }

10  获取控制器位置数据

        public static string GetRapidData(Controller controller, string task, string module, string robTargetName)
        {
            lock (lock_ABBInterface)
            {
                RapidData rd = controller.Rapid.GetRapidData(task, module, robTargetName);
                return rd.StringValue;
            }
        }

11 写控制器位置 

      public static void RobTargetToRapidData(Controller controller, string task, string module, string robTargetName, string robTarget)
        {
            lock (lock_ABBInterface)
            {
                RobTarget rt = new RobTarget();
                rt.FillFromString2(robTarget);
                RapidData rd = controller.Rapid.GetRapidData(task, module, robTargetName);
                using (Mastership.Request(controller))
                {
                    rd.Value = rt;
                }
            }
        }

12  获取数字信号

     public static int GetDigitalSignal(Signal sig)
        {
            lock (lock_ABBInterface)
            {
                DigitalSignal digitalSig = (DigitalSignal)sig;
                int val = digitalSig.Get();
                return val;
            }
        }

13   写数字信号

      public static void WriteDigitalSignal(Signal sig, float val)
        {
            lock (lock_ABBInterface)
            {
                DigitalSignal digitalSig = (DigitalSignal)sig;
                digitalSig.Value = val;
            }
        }

14 获取日志,可以用事件实现

      public static EventLogCategory GetEventLog(Controller controller)
        {
            lock (lock_ABBInterface)
            {
                ABB.Robotics.Controllers.EventLogDomain.EventLog eventLog = controller.EventLog;
                return eventLog.GetCategory(0); //0表示读取所有日志,具体见CategoryType
            }
        }

总结

以上就是今天要讲的内容,本文仅仅简单介绍了C# 上位机通过模块616-1 PC interface 和ABB机器人控制器通讯,从而实现视PC 对ABB机器人的视觉数据传输和控制方法。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值