我是靠谱客的博主 香蕉西牛,最近开发中收集的这篇文章主要介绍C#3种初始化ABB Controller的方法C# ABB_SDK初始化Controller的方法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

C# ABB_SDK初始化Controller的方法

使用ABB的SDK时,需要先对控制器进行初始化,才能使PC找到对应的控制器。很多童靴对Guid这个类都不知道什么意思,也不知道去哪里获取这个Guid,本文主要介绍3中常用的初始化Controller方法。

Controller类的构造函数

首先看一下Controller类的4个构造函数:

        //
        // 摘要:
        //     Creates a controller from the defaultController id in the capi section of the
        //     App.config file.
        public Controller();
        //
        // 摘要:
        //     Creates a controller instance from a system id.
        //
        // 参数:
        //   systemId:
        //     System id.
        public Controller(Guid systemId);
        //
        // 摘要:
        //     Creates a controller from a controller info object.
        //
        // 参数:
        //   controller:
        //     Info object from NetworkScanner.
        public Controller(ControllerInfo controller);
        //
        // 摘要:
        //     Not for public use.
        //
        // 参数:
        //   controllerID:
        //     Not for public use.
        public Controller(string controllerID);
  1. 无参数构造函数controller()适用于只有一个控制器情况,直接初始化默认控制器;
  2. Controller(Guid systemID)以控制器的systemID为参数,每个控制器都有一个独一无二的ID,通过这个构造函数可以让我们精确锁定所要操控的控制器;
  3. Controller(ControllerInfo controller)需传入一个控制器的信息进去,其中这个信息里面隐藏着systemID;
  4. Controller(string controllerID)这个构造函数很少用到。
    综上:只有一个控制器时,使用无参构造函数直接初始化就可以了,当有多个控制器时,就要使用2、3两种构造方法了,本文主要介绍这两两种构造方法的使用。

扫描系统控制器

初始化之前,要扫描系统里所有联网的控制器。

NetworkScanner netscan = null;
ControllerInfoCollection allControllers = null;//控制器信息集   
netscan = new NetworkScanner();
netscan.Scan();
allControllers = netscan.Controllers;// 扫描到所有控制器:      

Controller(ControllerInfo controller)

该构造函数需传入ControllerInfo类的实例,在上面扫描到的控制器ontrollerInfoCollection allControllers集合中,它的子集就是ControllerInfo类的实例。可以用foreach 语句遍历。

  foreach (ControllerInfo info in allControllers)
            {
                Console.WriteLine (
                    //info.IPAddress.ToString(),
                    info.SystemName+":"+
                   // info.IsVirtual.ToString(),
                    info.SystemId.ToString()+"rn"
                    );
            }

既然是个集合,那么直接按index索引即可。


        /// <summary>
        /// 通过 index 获取指定控制系统:
        /// </summary>
        /// <param name="Select"></param>
        /// <returns></returns>
        public Controller GetController(int Select)
        {
            return new Controller(allControllers[Select]);
        }

Controller(Guid systemId)

Guid类介绍

Guid类是一个全局唯一标识。
也是不同控制器Controller的区别之处,相当于身份证号。

        //
        // 摘要:
        //     初始化的新实例System.Guid通过使用指定的字节数组的结构。
        //
        // 参数:
        //   b:
        //     包含用于初始化 GUID 的值的 16 元素字节数组。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     b 为 null。
        //
        //   T:System.ArgumentException:
        //     b不是 16 个字节长。
        public Guid(byte[] b);
        //
        // 摘要:
        //     初始化的新实例System.Guid通过使用指定的字符串表示的值的结构。
        //
        // 参数:
        //   g:
        //     包含下面任一格式的 GUID 的字符串(“d”表示忽略大小写的十六进制数字): 32 个连续的数字: dddddddddddddddddddddddddddddddd
        //     - 或 - 8、4、4、4 和 12 位数字的分组,各组之间有连线符。 也可以用一对大括号或者圆括号将整个 GUID 括起来: dddddddd-dddd-dddd-dddd-dddddddddddd
        //     - 或 - {dddddddd-dddd-dddd-dddd-dddddddddddd} - 或 - (dddddddd-dddd-dddd-dddd-dddddddddddd)
        //     - 或 - 8、4 和 4 位数字的分组,和一个 8 组 2 位数字的子集,每组都带有前缀“0x”或“0X”,以逗号分隔。 整个 GUID 和子集用大括号括起来:
        //     {0xdddddddd, 0xdddd, 0xdddd,{0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd,0xdd}} 所有大括号、逗号和“0x”前缀都是必需的。
        //     所有内置的空格都将被忽略。 组中的所有前导零都将被忽略。 组中显示的数字为可在该组显示的有意义数字的最大数目。 你可以指定从 1 到为组显示的位数。 指定的位数被认为是该组低序位的位数。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     g 为 null。
        //
        //   T:System.FormatException:
        //     格式g无效。
        //
        //   T:System.OverflowException:
        //     格式g无效。
        public Guid(string g);
        //
        // 摘要:
        //     初始化的新实例System.Guid通过使用指定的整数和字节数组的结构。
        //
        // 参数:
        //   a:
        //     GUID 的前 4 个字节。
        //
        //   b:
        //     GUID 的下两个字节。
        //
        //   c:
        //     GUID 的下两个字节。
        //
        //   d:
        //     GUID 的其余 8 个字节。
        //
        // 异常:
        //   T:System.ArgumentNullException:
        //     d 为 null。
        //
        //   T:System.ArgumentException:
        //     d不是 8 个字节长。
        public Guid(int a, short b, short c, byte[] d);
        //
        // 摘要:
        //     初始化的新实例System.Guid使用指定的结构无符号整数和字节。
        //
        // 参数:
        //   a:
        //     GUID 的前 4 个字节。
        //
        //   b:
        //     GUID 的下两个字节。
        //
        //   c:
        //     GUID 的下两个字节。
        //
        //   d:
        //     GUID 的下一个字节。
        //
        //   e:
        //     GUID 的下一个字节。
        //
        //   f:
        //     GUID 的下一个字节。
        //
        //   g:
        //     GUID 的下一个字节。
        //
        //   h:
        //     GUID 的下一个字节。
        //
        //   i:
        //     GUID 的下一个字节。
        //
        //   j:
        //     GUID 的下一个字节。
        //
        //   k:
        //     GUID 的下一个字节。
        [CLSCompliant(false)]
        public Guid(uint a, ushort b, ushort c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k);
        //
        // 摘要:
        //     初始化的新实例System.Guid通过使用指定的整数和字节的结构。
        //
        // 参数:
        //   a:
        //     GUID 的前 4 个字节。
        //
        //   b:
        //     GUID 的下两个字节。
        //
        //   c:
        //     GUID 的下两个字节。
        //
        //   d:
        //     GUID 的下一个字节。
        //
        //   e:
        //     GUID 的下一个字节。
        //
        //   f:
        //     GUID 的下一个字节。
        //
        //   g:
        //     GUID 的下一个字节。
        //
        //   h:
        //     GUID 的下一个字节。
        //
        //   i:
        //     GUID 的下一个字节。
        //
        //   j:
        //     GUID 的下一个字节。
        //
        //   k:
        //     GUID 的下一个字节。
        public Guid(int a, short b, short c, byte d, byte e, byte f, byte g, byte h, byte i, byte j, byte k);

获取控制器Guid的2种方式【重要】

  1. SystemID
    在上文的遍历中,我们获取到了不同的控制器:
 foreach (ControllerInfo info in allControllers)
            {
                Console.WriteLine (
                    //info.IPAddress.ToString(),
                    info.SystemName+":"+
                   // info.IsVirtual.ToString(),
                    info.SystemId.ToString()+"rn"
                    );
            }

每个info都有若干属性和方法:

       //
        // 摘要:
        //     Gets the id of the current system of the controller.
        public Guid SystemId { get; }

其中,SystemId属性,返回值就是Guid类型,即该控制器的唯一标识,我们只需打印出来就可以获取不同控制系统的Guid。

            foreach (ControllerInfo info in allControllers)
            {
                Console.WriteLine (
                    //info.IPAddress.ToString(),
                    info.SystemName+":"+
                   // info.IsVirtual.ToString(),
                    info.SystemId.ToString()+"rn"
                    );
            }

输出(本文有5个控制器):
ForthSystem:3dcc219a-cceb-46be-9c1d-8297b7335980

ThirdSys:63f19ed3-553e-4d4e-9cb1-64d6d0ca371c

SecondASys:65dd7913-a2fa-491d-bed9-af0e1b99c946

SecondBSys:162bddca-71c0-4c50-91ed-4bb140fb4d6e

FirstSys:a206c2e3-1218-4500-9eca-496c7e9d9568
2. 系统属性
在这里插入图片描述
如上图所示:
1、选择“控制器”;
2、选中系统,右键,点击“打开系统目录”;
3、{Guid}括号里面的即为Guid。

方法

 		/// <summary>
        /// 通过唯一的识别号ControllerInfo.SystemId获取对应的机器人控制器
        /// </summary>
        /// <param name="guid">ControllerInfo.SystemId</param>
        /// <returns></returns>
        public Controller GetControllerByGuid(Guid guid)
        {
            return new Controller(netscan.Find(guid));
        }

Done!

最后

以上就是香蕉西牛为你收集整理的C#3种初始化ABB Controller的方法C# ABB_SDK初始化Controller的方法的全部内容,希望文章能够帮你解决C#3种初始化ABB Controller的方法C# ABB_SDK初始化Controller的方法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部