TwinCAT中的二维数组是按顺序排列的。
假如在PLC中声明了二维数组:array2: ARRAY[0..2, 0..2] OF INT。实际上他是按照[0,0],[0,1]这个顺序排列下去,一共9个数。
换而言之,在C#那头,也可以按照一维数组来读取,创建一个9个int组成的一维数组来接收那个二维数组。(建议放在结构体来做通讯,这样以后可以再加别的类型的变量)
[StructLayout(LayoutKind.Sequential)]
public class ComplexStruct
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 9)]//表示9个数
public Int16[] DintArrTwo = new Int16[9];
}
用一维数组接收完了,然后再将这个一维数组转换成二维数组就可以了,网上方法有很多,答案不唯一,我这里用一个for语句来实现。
for (int i = 0; i < 9; i++)
{
TwoDimensionalArray[i / 3, i % 3] = Structure.DintArrTwo[i];
}
这样的话,C#中二维数组TwoDimensionalArray就对应了PLC中二维数组array2了。