Autor Thema: Byte Array in Struct kopieren  (Gelesen 2101 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline mactoolz

  • Jr. Member
  • **
  • Beiträge: 82
    • Profil anzeigen
Byte Array in Struct kopieren
« 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

Offline CurtisMay

  • Newbie
  • *
  • Beiträge: 2
    • Profil anzeigen
    • sbo
Re: Byte Array in Struct kopieren
« Antwort #1 am: 20. Dezember 2018, 09:24:09 »
It is good for your posts. Which is very useful to me.

Offline krajtl

  • Newbie
  • *
  • Beiträge: 2
  • Wago Programmierer
    • Profil anzeigen
Re: Byte Array in Struct kopieren - zur Inspiration...
« Antwort #2 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*)

« Letzte Änderung: 28. Januar 2020, 11:08:27 von krajtl »