Я использую TwinCAT.Ads (TwinCAT 3) для связи Beckhoff plc через приложение C#. Приложение - это чтение и запись нескольких переменных plc. Я получаю сообщение об ошибке:Записать массив структуры, используя TwinCAT.Ads через приложение C#
“Unable to marshal object. Parameter name: value”
при записи массива переменной struct. Однако приложение читает его без каких-либо ошибок. Любая помощь будет оценена по достоинству. Ниже приведен пример моего кода.
Struct в Plc
TYPE Station :
STRUCT
ClusterID : STRING[10];
Tech_Type : USINT;
Status : BOOL;
Reject : BOOL;
Rej_Detail : STRING[50];
Rej_Catagory : USINT;
END_STRUCT
END_TYPE
класса в C#
[StructLayout(LayoutKind.Sequential, Pack = 0)]
public class Station
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 11)]
public string ClusterID;
public byte Tech_Type;
[MarshalAs(UnmanagedType.I1)]
public bool Status;
[MarshalAs(UnmanagedType.I1)]
public bool Reject;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 51)]
public string Rej_Detail;
public byte Rej_Catagory;
}
Я пишу с ниже код где ручки [0] является переменной ручкой и станций является массив класса с длина 5.
adsClient.WriteAny(handles[0], stations, new int[] { 5 });
Можете ли вы опубликовать код для массива станций в ПЛК? Также объявление переменной в ПЛК и дескриптор кода C#. –
Pack = 0 вздор, удалите его. –