-> Hier kostenlos registrieren
Hallo Leute,
ich bin nach einer eleganten Lösung, um einen Array of Byte in eine Struktur zu wandeln. Ich habe die folgende Situation, dass ich einen ARRAY[1..1400] OF BYTE in die Struktur von ST_PacketScan kopieren möchte. Vorab schonmal erwähnt das ich grade erst in die Beckhoff-Welt eingestiegen bin und ein kompletter Neuling bin.
Hardware ist ein CX5020 mit dem Build 4018.XX.
Mein erster Ansatz war eine UNION zu benutzen in der ich den ARRAY[1..1400] OF BYTE und ST_PacketScan übereinanderlege, aber leider klappt das mit den unterschiedlichen Datentypen und deren Offsets nicht.
Nun habe ich eine Methode zum Umwandeln geschrieben, welche auch soweit funktioniert, aber da ich eben ein Anfänger bin möchte ich da gerne nach anderen, besseren Möglichkeiten fragen.
Für stPacketAsSt habe ich eine IN_OUT-Variable gewählt, damit ich den Punkt-Operator benutzen kann.
Grüße
ich bin nach einer eleganten Lösung, um einen Array of Byte in eine Struktur zu wandeln. Ich habe die folgende Situation, dass ich einen ARRAY[1..1400] OF BYTE in die Struktur von ST_PacketScan kopieren möchte. Vorab schonmal erwähnt das ich grade erst in die Beckhoff-Welt eingestiegen bin und ein kompletter Neuling bin.
Hardware ist ein CX5020 mit dem Build 4018.XX.
Code:
TYPE ST_PacketScan :
STRUCT
nPacketType : UINT;
nPacketSize : UDINT;
nHeaderSize : UINT;
nScanNumber : UINT;
nPacketNumber : UINT;
nTimestapmRaw : ULINT;
nTimestampSync : ULINT;
nStatusFlags : UDINT;
nScanFrequency : UDINT;
nNumberPointScan : UINT;
nNumberPointPacket : UINT;
nFirstIndex : UINT;
nFirstAngle : DINT;
nAngularIncrement : DINT;
nIqInput : UDINT;
nIqOverload : UDINT;
nMeasuredDistance : ARRAY[1..336] OF UDINT;
END_STRUCT
END_TYPE
Mein erster Ansatz war eine UNION zu benutzen in der ich den ARRAY[1..1400] OF BYTE und ST_PacketScan übereinanderlege, aber leider klappt das mit den unterschiedlichen Datentypen und deren Offsets nicht.
Nun habe ich eine Methode zum Umwandeln geschrieben, welche auch soweit funktioniert, aber da ich eben ein Anfänger bin möchte ich da gerne nach anderen, besseren Möglichkeiten fragen.
Code:
METHOD PRIVATE Packet_ArrByteToSt
VAR_INPUT
pPacketAsByte : POINTER TO T_PacketOfScan;
END_VAR
VAR_IN_OUT
stPacketAsSt: ST_PacketScan;
END_VAR
MEMCPY(ADR(stPacketAsSt.nPacketType), pPacketAsByte, SIZEOF(stPacketAsSt.nPacketType));
MEMCPY(ADR(stPacketAsSt.nPacketSize), pPacketAsByte+2, SIZEOF(stPacketAsSt.nPacketSize));
MEMCPY(ADR(stPacketAsSt.nHeaderSize), pPacketAsByte+6, SIZEOF(stPacketAsSt.nHeaderSize));
MEMCPY(ADR(stPacketAsSt.nScanNumber), pPacketAsByte+8, SIZEOF(stPacketAsSt.nScanNumber));
MEMCPY(ADR(stPacketAsSt.nPacketNumber), pPacketAsByte+10, SIZEOF(stPacketAsSt.nPacketNumber));
Für stPacketAsSt habe ich eine IN_OUT-Variable gewählt, damit ich den Punkt-Operator benutzen kann.
Grüße