OSCAT Forum

oscat.lib => oscat.lib fuer TwinCAT/CoDeSys => Thema gestartet von: mactoolz am 21. September 2018, 09:17:05

Titel: Byte Array in Struct kopieren
Beitrag von: mactoolz am 21. September 2018, 09:17:05
Hallo zusammen,

ich würde gerne ein Byte auf ein Array mit 8 Bools kopieren.
Ich möchte aber nicht den UnPack nehmen, weil später möchte ich
dann ein A1rray of Byte auf mehrere Bools bzw. sogar eine Struktur kopieren können.

Gruß
MacToolz
Titel: Re: Byte Array in Struct kopieren
Beitrag von: CurtisMay am 20. Dezember 2018, 09:24:09
It is good for your posts. Which is very useful to me.
Titel: Re: Byte Array in Struct kopieren - zur Inspiration...
Beitrag von: krajtl am 28. Januar 2020, 09:15:45
zur Inspiration...

Mein Beispiel, wie ich die Orgeleinstellungen in der Orgel löste und sie für die automatische Einrichtung vom Speicher auf die Ausgänge zurückrief:

(*declarationnnn...*)

TYPE OrgRgMEM :
STRUCT
   OrgRgMEM: ARRAY [0..11] OF BYTE; (*Speichergröße für 90 Bit Digitaleingänge*)
END_STRUCT
END_TYPE

VAR
   Crescendo   : INT;            (*0..30 Speicherzeiger für OrgRgCrA30MEM*)
   ArrDI_OrgRgstr    : ARRAY [0..89] OF BOOL;   (*array of digital inputs*)
   OrgRgCrA30MEM   : ARRAY [0..30] OF OrgRgMEM; (*Speicher für 31 Varianten*)
   ArrRegCresA    : ARRAY [0..89] OF BOOL;   (*array zum Schreiben auf digitale Ausgänge*)
END_VAR

(*programmm...*)


(*pack*)
   FOR i:=0 TO 11 BY 1 DO
   FOR j:=0 TO 7 BY 1 DO
      CASE j OF
      0:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.0:=ArrDI_OrgRgstr[(i*8 )+j];
      1:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.1:=ArrDI_OrgRgstr[(i*8 )+j];
      2:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.2:=ArrDI_OrgRgstr[(i*8 )+j];
      3:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.3:=ArrDI_OrgRgstr[(i*8 )+j];
      4:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.4:=ArrDI_OrgRgstr[(i*8 )+j];
      5:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.5:=ArrDI_OrgRgstr[(i*8 )+j];
      6:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.6:=ArrDI_OrgRgstr[(i*8 )+j];
      7:   OrgRgCrA30MEM[Crescendo].OrgRgMEM.7:=ArrDI_OrgRgstr[(i*8 )+j];
      END_CASE
   END_FOR
   END_FOR
(*end pack*)

(*unpack*)
   FOR i:=0 TO 11 BY 1 DO
   FOR j:=0 TO 7 BY 1 DO
      CASE j OF
      0:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.0;
      1:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.1;
      2:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.2;
      3:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.3;
      4:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.4;
      5:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.5;
      6:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.6;
      7:   ArrRegCresA[(i*8 )+j]:=OrgRgCrA30MEM[Crescendo].OrgRgMEM.7;
      END_CASE
   END_FOR
   END_FOR
(*end unpack*)