使用 TwinCAT 3 ADS.Net 从 PLC 读取数据,我尝试读取包含结构数组的结构,但 ReadAny 命令因“无法编组类型”异常而崩溃。
不过,直接读取结构数组效果很好。
public object ReadAny(long indexGroup, long indexOffset, Type type, int[] args);
ReadAny方法的头部注释中写道:“如果要读取的对象类型是数组类型,则必须在参数args中指定每个维度的元素数量。”
但是对于包含结构数组的结构,args 应该是什么?(如果没有“args”,它也会失败。)
我目前使用 .NET 4.7、VS 2013。
有选择吗?
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class WholeData
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 5)]
public Station[] StationArray;
// Potentially more fields...
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class Station
{
[MarshalAs(UnmanagedType.I1)]
public bool isPass;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 81)]
public string name;
// More fields...
}
// -- Main --
int[] args = { 5 };
// Works fine:
Station[] stationArray = (Station[])m_AdsClient.ReadAny(indexGroup, indexOffset, typeof(Station[]), args);
// Fail:
WholeData wholeData = (WholeData)m_AdsClient.ReadAny(indexGroup, indexOffset, typeof(WholeData), args);
// - OR -
WholeData wholeData = (WholeData)m_AdsClient.ReadAny(m_VarHandle, typeof(WholeData), args);
慕森卡
相关分类