1. TwinCAT 3 ADS

1.21. TwinCAT和C#走ADS通讯,怎么读取二维数组?用ADS与C#通讯怎样实现数组的整体读写?

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了。



2019.8.30 冯国城 编辑