Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Ergebnis 1 bis 10 von 10

Thema: Struktur in Array

  1. #1
    Registriert seit
    17.07.2009
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo habe ein Problem für euch sicherlich leicht zu lösen!

    jedoch ich brauch Hilfe dabei !!!!

    habe eine Struktur in der nur Byte werte enthalten sind diese möchte ich gern in ein Array of Byte gleicher größe bringen und ausgeben. Dann soll das Array bearbeitet werden und danach wieder das Array of Byte in die Struktur geschrieben werden.

    Ich könnte sozusagen zwei Wandlerfunktionen brauchen die Struct_to_Array und Array_to_Struct!

    Könnte mir jemand einen solchen Code zuverfügungstellen?
    oder bei der Lösung helfen
    Zitieren Zitieren Struktur in Array  

  2. #2
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    Hallo,
    der Befehl AT ermöglicht es dir, eine vollkommen andere (aber gleich große) Sicht auf einen vorgegebenen Speicherbereich zu definieren. Versuch dich doch mal daran ...

    Gruß
    LL

  3. #3
    ipacsre ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.07.2009
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Danke für deine schnelle Antwort aber ich kann damit leider nichts anfangen kannst du es mir etwas näher erklären was du meinst!!!
    Bitte

    MfG

  4. #4
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.726
    Danke
    398
    Erhielt 2.401 Danke für 2.001 Beiträge

    Standard

    ... schau dir doch mal die Hilfe zu dem Befehl an.

    Ansonsten hier mal ein Beispiel :
    Code:
    myVar1 : struct 
       uVar1 : word ;
       uVar2 : int ;
       uVar3 : DINT ;
    end_struct ;
     
    myNeuVar1 AT myVar1 : array[1..8] of byte ;
    in myNeuVar wird die in myVar vorgegebene Struktur als Array of byte betrachtet. Wichtig hier : es müssen immer beide Elemente in der Größe zueinander passen ...

    Gruß
    LL

  5. #5
    Registriert seit
    19.11.2006
    Beiträge
    1.346
    Danke
    6
    Erhielt 254 Danke für 231 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Code:
    myVar1 : struct 
       uVar1 : word ;
       uVar2 : int ;
       uVar3 : DINT ;
    end_struct ;
     
    myNeuVar1 AT myVar1 : array[1..8] of byte ;
    Das wird aber nicht von jeder Steuerung unterstützt! CoDeSys kann's z. B. nicht.

  6. #6
    Registriert seit
    27.07.2007
    Ort
    Leipzig
    Beiträge
    239
    Danke
    25
    Erhielt 47 Danke für 43 Beiträge

    Standard

    Hallo Rene,

    deine Funktionen kannst du auch über Pointer realisieren, schau dir doch mal den FB Transfer_STRUCT_Bool_ARRAY (Insider) an, den du sicher hast.

    gruß bonatus

  7. #7
    ipacsre ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    17.07.2009
    Beiträge
    3
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hallo Bonatus könnte dies richtig sein???
    Code:
    FUNCTION_BLOCK STRUCT_to_ARRAY
    VAR_INPUT
     adrStruct: POINTER TO BYTE;
     uiSize: UINT;
    END_VAR
    VAR_OUTPUT
     Data: ARRAY[1..111] OF BYTE;
    END_VAR
    VAR
     Temp_Struct: ARRAY[1..111] OF BYTE;
     i: INT;
     Temp: BYTE;
    END_VAR
    --------------------------------------------------------
    Code:
    FOR i:=1 TO uiSize BY 1 DO
    Temp := ROR(Temp_Struct[(i/8+1)],(i-1));
     IF adrStruct^ = 1 THEN
      Temp.0 := TRUE;
     END_IF
     IF adrStruct^ = 0 THEN
      Temp.0 := FALSE;
     END_IF;
    Temp_Struct[(i/8+1)] := ROL(Temp,(i-1));
    adrStruct := adrStruct + 1;
    END_FOR
    Data := Temp_Struct;
    Danke schon mal im Vorraus...
    und liebe Grüße an alle...
    Zitieren Zitieren Hallo Bonatus!!!  

  8. #8
    Registriert seit
    27.07.2007
    Ort
    Leipzig
    Beiträge
    239
    Danke
    25
    Erhielt 47 Danke für 43 Beiträge

    Standard

    Hallo,

    das kommt jetzt darauf an was du willst dieser FB ist dafür gedacht gewesen BOOLsche Variablen einer Struktur in ein Array zu wandeln. Wenn du nun die Bytes einer Struktur in ein Array packen willst, musst du den Baustein ändern...
    Geändert von bonatus (18.05.2010 um 14:08 Uhr)

  9. #9
    Registriert seit
    30.08.2005
    Beiträge
    280
    Danke
    41
    Erhielt 96 Danke für 66 Beiträge

    Standard

    Zitat Zitat von ipacsre Beitrag anzeigen
    Hallo Bonatus könnte dies richtig sein???
    Code:
    FUNCTION_BLOCK STRUCT_to_ARRAY
    VAR_INPUT
     adrStruct: POINTER TO BYTE;
     uiSize: UINT;
    END_VAR
    VAR_OUTPUT
     Data: ARRAY[1..111] OF BYTE;
    END_VAR
    VAR
     Temp_Struct: ARRAY[1..111] OF BYTE;
     i: INT;
     Temp: BYTE;
    END_VAR
    --------------------------------------------------------
    Code:
    FOR i:=1 TO uiSize BY 1 DO
    Temp := ROR(Temp_Struct[(i/8+1)],(i-1));
     IF adrStruct^ = 1 THEN
      Temp.0 := TRUE;
     END_IF
     IF adrStruct^ = 0 THEN
      Temp.0 := FALSE;
     END_IF;
    Temp_Struct[(i/8+1)] := ROL(Temp,(i-1));
    adrStruct := adrStruct + 1;
    END_FOR
    Data := Temp_Struct;
    Danke schon mal im Vorraus...
    und liebe Grüße an alle...
    Schaut mir abenteuerlich aus, was spricht denn gegen
    Code:
    FOR i:=1 TO uiSize BY 1 DO
    DATA[i] := adrStruct^;
    adrStruct := adrStruct+1;
    END_FOR
    du kannst auch einfach einen Pointer folgendermassen definieren:
    pbytes : POINTER TO ARRAY [0..SIZE] OF BYTE;
    und dem dann die Adresse einer Struktur zuweisen.
    pbytes := ADR(struct);
    Das entspräche in etwa der AT-Deklaration. mit pbytes^[index] kannst du dann einfach auf die einzelnen Bytes in deiner Structur zugreifen.
    Du arbeitest dann allerdings auf dem Original und nicht auf einer Kopie.

    Bernhard

  10. #10
    Registriert seit
    11.07.2004
    Beiträge
    1.597
    Danke
    10
    Erhielt 213 Danke für 183 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Welche Hardware? Wago hat eine Funktion "Memcopy" (sinngemäß, kann auswendig nicht garantieren daß es genau so geschrieben wird).

    Man könnte natürlich auch die Strukt und das Bytearray auf Merker zeigen lassen:

    Code:
        MeineStruktur AT %MW100:    MeineStruct;
        MeinArray AT %MW100:    ARRAY[0..8] OF Bytes ;
    Würde ich aber perönlich nicht machen.

Ähnliche Themen

  1. Antworten: 18
    Letzter Beitrag: 21.12.2016, 17:03
  2. Date_Time Struktur
    Von Nerowinger84 im Forum HMI
    Antworten: 0
    Letzter Beitrag: 15.03.2010, 16:56
  3. Pointer auf Struktur (SCL)?
    Von momo99 im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 25.03.2009, 10:23
  4. WinCC flex Variable, Struktur, Array
    Von xhasx im Forum HMI
    Antworten: 3
    Letzter Beitrag: 11.06.2007, 16:30
  5. DB-struktur
    Von Pimsti im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 13.06.2006, 12:48

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •