概述
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);
- 无参数构造函数controller()适用于只有一个控制器情况,直接初始化默认控制器;
- Controller(Guid systemID)以控制器的systemID为参数,每个控制器都有一个独一无二的ID,通过这个构造函数可以让我们精确锁定所要操控的控制器;
- Controller(ControllerInfo controller)需传入一个控制器的信息进去,其中这个信息里面隐藏着systemID;
- 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种方式【重要】
- 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的方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复