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机器人的视觉数据传输和控制方法。

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 要实现上位机与西门子S7-1200 PLC通讯解析,需要使用S7协议进行数据交换。下面是用C#实现上位机与S7-1200 PLC通讯解析的基本步骤: 1. 引入`using S7.Net;`命名空间,安装S7.Net库。 2. 定义PLC连接对象: ``` Plc plc = new Plc(CpuType.S71200, "192.168.0.1", 0, 1); ``` 其中,`CpuType.S71200`表示PLC型号为S7-1200,IP地址为`192.168.0.1`,`0`表示Rack号,`1`表示Slot号。 3. 连接PLC: ``` plc.Open(); ``` 4. 读取PLC数据: ``` byte[] buffer = new byte[4]; plc.Read(DataType.DataBlock, 1, 0, buffer.Length, buffer); ``` 其中,`DataType.DataBlock`表示数据类型为数据块,`1`表示数据块编号,`0`表示起始地址,`buffer.Length`表示读取数据的长度,`buffer`为读取数据的缓冲区。 5. 解析PLC数据: ``` int value = S7.GetIntAt(buffer, 0); ``` 其中,`S7.GetIntAt()`方法用于将`buffer`中的字节数据解析为整型数据,`0`表示起始位置。 6. 关闭PLC连接: ``` plc.Close(); ``` 以上是用C#实现上位机与S7-1200 PLC通讯解析的基本步骤,具体实现可能因项目要求而有所不同。需要注意的是,PLC连接需要在程序中进行管理,保证连接的稳定性和数据的准确性。 ### 回答2: C语言是一种计算机编程语言,是由贝尔实验室的丹尼斯·里奇于1972年开发的。它被广泛用于编写系统软件和应用软件。 C语言具有简洁、高效和灵活的特点,因此非常适合进行底层编程。它具有强大的指针操作和位操作功能,可以直接访问内存,实现对硬件的底层控制。这使得C语言在操作系统、驱动程序和嵌入式系统等方面有很大的应用空间。 C语言还具有高度可移植性。它的语法规则相对简单,且几乎所有计算机平台都有相应的编译器和解释器。这使得C语言编写的程序可以方便地在不同的操作系统和硬件平台上运行。 另外,C语言还有丰富的标准库。标准库提供了大量的函数和工具,方便开发人员开发各种应用。C标准库包括了文件操作、字符串处理、数学计算、内存管理等功能模块。 虽然C语言非常强大,但它也有一些限制。首先,C语言的可读性相对较差,代码需要写得非常精确才能运行。其次,C语言对于错误处理的支持相对较弱,容易引发一些潜在的错误。此外,C语言中没有直接支持面向对象编程的特性,不太适合开发大型复杂的软件系统。 总的来说,C语言是一种功能强大、高度可移植的编程语言,特别适合进行底层编程和系统开发。但在使用时需要注意一些潜在的问题,同时也需要结合其他语言进行开发和设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值