Showing results 1 to 4 of 4

Thread: Bitmasking mit einem Button möglich?

  1. #1
    Join Date
    30.12.2010
    Posts
    23

    Default Bitmasking mit einem Button möglich?

    Guten Tag

    Ich habe eine Frage zum Bitmasking einer Variable mit bestehendem Wert. Dies ist meine Ausgangslage:

    Ich habe eine Ganzzahl-Variable (Datentyp UDINT), welche einen bestehenden Wert hat und je nach Zustand der verschiedenen Bits einen Motorzustand anzeigt. Um den jeweiligen Zustand anzuzeigen habe ich ein Combi-Element eingesetzt. Somit ändert sich die Symbolfarbe je nach Zustand.

    z.B. Motor gestartet, wenn:
    Bit Nr.20 auf 1, alle anderen Bits sind egal.

    oder Motor unter Sicherheitsverriegelung wenn:
    Bit Nr.16 auf 1, alle anderen Bits sind egal.

    Ich möchte nun aber über einen Button diese Zustände ändern können, resp. den Zustand der einzelnen Bits auf 1/0 stellen ohne das die anderen Bits sich verändern. Da das Combi-element nur Zustände auswertet, dachte ich man könnte vielleicht ein Bitmasking (eine OR-Bitmaske) machen, so das der bestehende Wert nicht überschrieben wird. Ist dies irgendwie möglich?

    Vielleicht kann man so etwas mit VBA/VSTA machen? Ich habe jedoch hier gar kein Wissen und kann noch nicht damit umgehen. Ich weiss aber das es existiert und nützlich ist

    Ich wär Ihnen für Hilfe oder Tipps sehr dankbar!
    Danke im Voraus!

    Eine Zenon-Anfängerin

  2. #2
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default Re: Bitmasking mit einem Button möglich?

    Das Schreiben einzelner Bits von einem Wort ist nicht möglich
    -> hierzu ist es notwendig für jedes einzlene Bit eine eigene Variable (basierend auf dem Treiber) anzulegen

    Folgender Beitrag ist hierzu auch hilfreich:
    http://www.copadata.com/forums/showthread.php?t=631


  3. #3
    Join Date
    03.04.2013
    Posts
    1

    Default Re: Bitmasking mit einem Button möglich?

    Ein freundliches Hallo an das zenon-Team und den Fragensteller,

    Quote Originally Posted by herberto View Post
    Das Schreiben einzelner Bits von einem Wort ist nicht möglich[...]
    Ist es nicht möglich, folgendes in VSTA umzusetzen?

    1) Für jedes zu beobachtende UDINT-Variable 32 BOOL-Variablen (intern) anlegen, wodurch zudem keine Lizenz-Tags verbraucht werden.
    2) Diese UDINT-Variable und alle zugehörigen BOOL-Variablen einem Online Container anhängen (siehe http://www.copadata.com/forums/showthread.php?t=1074)
    3) Die Funktion "obOnlineVar_VariableChange" so ergänzen, dass:
    3a) Mit einer Änderung der UDINT-Variable in 32 einzelnen Maskierungen die jeweiligen BOOL-Variablen gesetzt werden

    uint mask = 0x0001;
    BIT[i - offset].set_Value(0, ((WORD_value & mask) != 0 ? 1 : 0));

    3b) Mit einer Änderung einer BOOL-Variablen das jeweilige BIT der zugehörigen UDINT-Variable gesetzt wird

    if (BIT.get_Value(0).ToString().Equals("1"))
    {
    // Set the nth bit
    WORD_value |= (uint)0x0001 << shift;
    }
    else
    {
    // Reset the nth bit
    WORD_value &= ~((uint)0x0001 << shift);
    }

    4) Beachten, dass hierbei ein rekursives Verhalten auftreten kann, denn eine Änderung des UDINT bewirkt eine Änderung der BOOL-Variablen und umgekehrt. Beobachtet wurde dies aber nur, falls die Bitschubserei Fehler enthielt:
    Eine erneute Zuweisung des exakt selben Wertes bewirkt keinen erneuten Aufruf der Funktion "obOnlineVar_VariableChange", soweit ich das beobachten konnte. Lassen sich alle Bits einwandfrei übertragen bewirkt ein erneuter Schreibvorgang keinen solchen Aufruf mehr.

    5) Mit jeder Änderung werden abhängig von der Größe der verwendeten Variable einige Zeilen Code durchlaufen, das könnte den Programmablauf stören und sollte wohl getestet werden.

    Ich bitte um Kritik und Anregungen zu diesem Beitrag, denn ich habe dies selbst schon (in einem Testprojekt) implementiert und wüsste gerne, wie kritisch dies zu sehen ist.

    Mit freundlichen Grüßen,

    Clemens G.

  4. #4
    Join Date
    19.03.2008
    Posts
    23

    Default Re: Bitmasking mit einem Button möglich?

    Unterstützt wird diese Vorgehensweise für die Auswertung von Variablenwerten nicht. Das als kritische Anmerkung dazu

Similar Threads

  1. Replies: 12
    Last Post: 24th January 2013, 09:35
  2. Archivauslagerung in SQL-Datenbank nicht möglich
    By hp in forum zenon Supervisor
    Replies: 4
    Last Post: 1st October 2010, 10:13
  3. Replies: 4
    Last Post: 20th January 2010, 01:02
  4. Replies: 1
    Last Post: 2nd December 2008, 11:07
  5. Replies: 3
    Last Post: 29th July 2008, 09:24

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •