Welcome to our new forum
All users of the legacy CODESYS Forums, please create a new account at account.codesys.com. But make sure to use the same E-Mail address as in the old Forum. Then your posts will be matched. Close

DWORD mit Array of BOOL überlagern?

CuBe
2006-03-21
2006-04-26
  • CuBe - 2006-03-21

    Hallo,

    wieder Spass mit dem Speicher :

    Ich möchte eine Speicherstelle (z.B. %MD20) sowohl gesamt als DWORD, als auch als einzelne BOOL ansprechen.

    Die BOOL Variablen hätte ich gerne in einem ARRAY zusammengefasst, Zwecks einfacherem Initialisierens und Schleifen codens.

    Mein Versuch war:

    VAR_GLOBAL
       Variable AT %MD20 : DWORD;
       Variable_Array AT %MD20 : ARRAY [0..15] OF BOOL;
    END_VAR
    

    Leider führt dies nur dazu, dass die einzelnen Bools jeweils ein BYTE belegen.

    Heißt: Die ersten 4 Bools liegen im DWORD... Ein Setzen des DWords auf 2#1111111.... führt zu undeffinierten Zuständen der Bools.

    Ein "AT %MX41.0 : ARRAY [0..15] OF BOOL" führt zu einer Fehlermeldung.

     
  • Anonymous - 2006-03-21

    Originally created by: Bernhard Werner

    Hallo CuBe,

    so wie Sie das machen wollen geht das leider nicht. Ein Array von Bits kann nicht angelegt werden. Aber Sie können die einzelnen Bits des DWORDS über Bitaccess ansprechen:

    dw.1 spricht beispielsweise Bit 1 im DWORD an. Das geht allerdings nur mit einem konstanten Bitoffset. Also insbesondere nicht mit einem Schleifenzähler.

    Bernhard Werner

     
  • CuBe - 2006-03-21

    Schade.

    Danke für die Information.

     
  • Juebo - 2006-04-19

    Es müßte über Pointer zu lösen sein!?

    Etwas ähnliches habe ich mal bei der Wandlung von ASCII nach Byte und umgekehrt gemacht.

     
  • CuBe - 2006-04-20

    Mit Pointern habe ich das gelöst.

    Leider soll die Programmierung nach DIN EN 61131-3 sein ... und die kennt keine Pointer.

     
  • Anonymous - 2006-04-26

    Originally created by: Frank Hailer

    Hallo Zusammen

    Eine andere, 61131-3 konforme Möglichkeit wurde hier noch nicht angesprochen. In der Util.lib gibt es zwei Funktionen, EXTRACT und PUTBIT, mit deren Hilfe man einzelne Bits aus (maximal) Doppelworten extrahieren bzw. setzen kann. Das, in eine Schleife verpackt, erfüllt die Anforderung zu 100%. Ich habe ein Beispielprojekt zur Veranschaulichung angefügt.

    Grüße, Frank Hailer

     

Log in to post a comment.