Twincat3 ByteArray[0..99] in UINT Convertieren

Schorsch1991

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

in meiner E-A Ebene habe mehrere Byte Arrays [0..99]. welche ich jeweils in einzelne Real,UINT,und Bool Werte konvertieren muss. jedes Byte Array in den jeweiligen Typ.
gibt es dafür eine einfache Möglichkeit in Twincat 3 das zu lösen ?

Danke
 
Das könnte man mit Pointern lösen, denke ich. Vorausgesetzt es müssen nicht noch irgendwelche Späße wie Byteorder etc. berücksichtigt werden.

EDIT
Ein Union Typ sollte auch gehen, oder? (Kann es leider gerade nicht testen)

Code:
TYPE U_DATEN :
UNION
  arrInputByteArray: Array [0..99] of Byte;
  arrOutputRealArray: Array [0..24] of REAL;
  arrOutputIntArray: Array [0..49] or INT;
END_UNION
END_TYPE
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Schorsch1991,

Hallo Zusammen,

in meiner E-A Ebene habe mehrere Byte Arrays [0..99]. welche ich jeweils in einzelne Real,UINT,und Bool Werte konvertieren muss. jedes Byte Array in den jeweiligen Typ.
gibt es dafür eine einfache Möglichkeit in Twincat 3 das zu lösen ?

Danke

Ohne genau zu wissen, was du tun willst, aber so würde ich vorgehen (wie @MasterOhh beschrieben hat) :
Union erstellen:
Code:
TYPE U_ArrayByte :
UNION
  aByte AT %I*: Array[0..99] of BYTE;
  aReal: Array [0..24] of REAL;
  aUint: Array [0..49] of UINT;
  // leider nicht möglich:
  // aBool: Array[0..799] of BIT;
END_UNION
END_TYPE
Durch den Union ist sichergestellt, dass jeder Eintrag eine Größe von 100 BYTE hat.

Das sollte für REALs und UINTs klappen. Für BITs würde ich eine private Methode oder Funktion erstellen, da Arrays of BIT nicht verwendet werden können:
Code:
FUNCTION F_ConvByteArrToBoolArr : ARRAY[0..799] OF BOOL
VAR_INPUT
    aByte   : ARRAY[0..99] OF BYTE;
END_VAR
VAR
    i           : INT;
END_VAR

FOR i := 0 TO 99 BY 1 DO
    F_ConvByteArrToBoolArr[i*8+0] := aByte[i].0;
    F_ConvByteArrToBoolArr[i*8+1] := aByte[i].1;
    F_ConvByteArrToBoolArr[i*8+2] := aByte[i].2;
    F_ConvByteArrToBoolArr[i*8+3] := aByte[i].3;
    F_ConvByteArrToBoolArr[i*8+4] := aByte[i].4;
    F_ConvByteArrToBoolArr[i*8+5] := aByte[i].5;
    F_ConvByteArrToBoolArr[i*8+6] := aByte[i].6;
    F_ConvByteArrToBoolArr[i*8+7] := aByte[i].7;
END_FOR

var := F_ConvByteArrToBoolArr(<U_ArrayByte>.aByte);
Somit liese sich auf ein Array-Zugriff auf die Bits realisieren ...

-Stirni
 
Zuletzt bearbeitet:
Zurück
Oben