ABB PC SDK 手册学习4中文(作业部落查看)
Rapid域
数组处理
在rapid里我们可以使用最大3维数组,可以通过类似其他raipid数据类型一样来访问rapid对象主要有两种访问数组中每个元素的方法:索引器或枚举器ArrayData 对象如果RapidData引用了一个rapid数组,则rapid数组是Valueproperty,返回一个ArrayData类型的对象。在进行强制转换之前,使用is操作符或使用RapidData对象上的IsArray属性检查类型。
RapidData rd = aController.Rapid.GetRapidData("T_ROB1", "user", "num_array");if (rd.IsArray) { ArrayData ad = (ArrayData)rd.Value; ..... }
ArrayData类允许将数据读写到rapid数组中。将数据从控制器传输到ArrayData类有两种不同的模式。
Snapshot:在这种模式下,数组的所有项一次传输到ArrayData实例。Dynamic:在这种模式下,特定项目的数据被传输。例如当您使用ArrayData[i,j,k]访问一个项目时,该特定项目的数据将被传输。快照和动态模式都没有对可以传输的字节数施加任何限制。由于数据是按需传输的,因此使用动态模式的数据传输提供了比快照更好的性能。若要使用动态模式,必须将模式设置为“动态”(如果在循环中使用ArrayData)。
arrayData.Mode = ArrayModes.Dynamic;foreach (IRapidData rapidData in arrayData)Console.WriteLine(rapidData.ToString());
当使用RapidData.ReadItem()访问单个项目时,ArrayData模式是无效的。限制不支持使用RapidData.Value.ToString()方法在快照模式下查看大型快速数组。数组维数数组的维数由Rank属性返回。如果需要检查各个数组的长度,可以使用ArrayData对象上的GetLength方法,将维度索引作为参数传递。
int aRank = ad.Rank; int len = ad.GetLength(aRank);
使用索引器访问数组项使用索引器可以访问每个数组元素,即使是在三维数组中。GetLength方法和for循环的组合使访问任何项目成为可能:
double aSum = 0d;Num aNum;RapidData rd = aController.Rapid.GetRapidData("T_ROB1", "user", "num_array");ArrayData ad = (ArrayData)rd.Value;int aRank = ad.Rank;if (ad.Rank == 1){ for (int i = 1; i <= ad.Length; i++) { aNum = (Num)ad[i]; aSum += (double)aNum; } }else if (ad.Rank == 2){ for (int i = 1; i <= ad.GetLength(0); i++) { for (int j = 1; j <= ad.Length; j++) { aNum = (Num)ad[i, j]; aSum += (double)aNum; } }}else{ for (int i = 0; i < ad.GetLength(0); i++) { for (int j = 0; j < ad.GetLength(1);j++) { for (int k = 0; k < ad.GetLength(2); k++) { aNum = (Num)ad[i, j, k]; aSum += (double)aNum; } }} }
使用枚举数访问数组项您还可以使用枚举器操作(foreach),就像. net中的集合使用它一样。注意,它既可以用于一维数组,也可以用于多维数组来访问每个单独的元素。前面的例子要简单得多:
double sum = 0d;foreach (Num ANum in ad){ sum += (double)ANum;}
作业部落查看https://www.zybuluo.com/haozhihao/note/1683821