wunderschönen Aben,
Das einbinden der PCAN-BasicAPI.dll in Labview mittel CLFN hab ich zum großen Teil ganz gut hinbekommen nur mit einem Parameter einer Funktion hab ich noch Schwierigkeiten.
Die Funktion wird in der API-Doku wie folgt inform von Quelltext definiert:
Delphi
Code:
class function Read(
Channel: TPCANHandle;
var MessageBuffer: TPCANMsg;
var TimestampBuffer: TPCANTimestamp
): TPCANStatus; overload; static;
C#
Code:
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
public static extern TPCANStatus Read(
[MarshalAs(UnmanagedType.U1)]
TPCANHandle Channel,
out TPCANMsg MessageBuffer,
ref TPCANTimestamp TimestampBuffer);
C++ / CLR
Code:
[DllImport("PCANBasic.dll", EntryPoint = "CAN_Read")]
static TPCANStatus Read(
[MarshalAs(UnmanagedType::U1)]
TPCANHandle Channel,
TPCANMsg %MessageBuffer,
TPCANTimestamp %TimestampBuffer);
Der Parameter-Typ TPCANMsg ist wie folgt definiert:
C++
Code:
typedef struct
{
DWORD ID;
TPCANMessageType MSGTYPE;
BYTE LEN;
BYTE DATA[8];
} TPCANMsg;
Delphi
Code:
TPCANMsg = record
ID: Longword;
MSGTYPE: TPCANMessageType;
LEN: Byte;
DATA: array[0..7] of Byte;
end;
C#
Code:
public struct TPCANMsg
{
public uint ID;
[MarshalAs(UnmanagedType.U1)]
public TPCANMessageType MSGTYPE;
public byte LEN;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public byte[] DATA;
}
C++ / CLR
Code:
public value struct TPCANMsg
{
UInt32 ID;
[MarshalAs(UnmanagedType.U1)]
TPCANMessageType MSGTYPE;
Byte LEN;
[MarshalAs(UnmanagedType::ByValArray, SizeConst = 8)]
array<Byte>^ DATA;
}
Darum hab ich mir ein VI gebaut, wie unten zu sehen ist
Der Rückgabewert ist "PCAN_ERROR_OK". Das heißt es müsste Daten im Puffer liegen sonst wäre der Rückgabewert "PCAN_ERROR_QVRCEMPTY"
Iin meinem AugabeCluster: MessageBuffer out werden die richtige ArbitrationID, der richtige Nachrichten-Typ und die richtige Nachrichten-Länge aber der Daten-Array ist immer leer obwohl laut Status Daten-anliegen müssten. Mit anderen fertigen Programmen können diese Daten auch über die selbe Harwarre ausgelesen werden.
Kann mir jemand sagen ab ich bei der Parameter-Definition irgend etwas falsch gemacht habe? Vielen Dank.
mfG.
Stefan