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

Ergebnis 1 bis 6 von 6

Thema: Abfrage Bit und if Abfrage

  1. #1
    Registriert seit
    30.01.2009
    Beiträge
    441
    Danke
    25
    Erhielt 48 Danke für 44 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo Leute,

    habe folgendes Problem:
    Ich frage ein DWORD ab ob dort Bit0 =1 oder =0 ist.
    Wenn 1 dann mache dies und wenn nicht (also 0) mache was anderes.
    Aber die Abfrage funktioniert nicht, ich denke mal wieder Unwissenheit
    TAG_2 wird immer auf 1 gesetzt egal was die Abfrage TAG_3 ergibt.

    Gruß
    Move
    Das Script sieht so aus:
    #include "apdefap.h"
    void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
    {
    // WINCC:TAGNAME_SECTION_START
    // syntax: #define TagNameInAction "DMTagName"
    #define Tag_1 "_AUTO"
    #define TAG_2 "_BEIN"
    #define TAG_3 "_EIN"
    DWORD dwHelp3;
    dwHelp3 = GetTagDWordWait(TAG_3); // Information Antrieb läuft / steht
    // next TagID : 1
    // WINCC:TAGNAME_SECTION_END
    // WINCC:PICNAME_SECTION_START
    // syntax: #define PicNameInAction "PictureName"
    // next PicID : 1
    // WINCC:PICNAME_SECTION_END
    if (dwHelp3 & 1 !=0) // Antrieb steht
    {
    DWORD dwHelp1,dwHelp2;
    dwHelp1=GetTagDWordWait(TAG_2);
    dwHelp2=dwHelp1&(0xFFFFFFFF^1);
    SetTagDWordWait(TAG_2, dwHelp2); // Wert 0 schreiben (Nachführung)
    }
    else // Antrieb läuft
    {
    DWORD dwHelp1,dwHelp2;
    dwHelp1=GetTagDWordWait(TAG_2);
    dwHelp2=dwHelp1|1;
    SetTagDWordWait(TAG_2, dwHelp2); // Wert 1 schreiben (Nachführung)
    }
    SetTagBit(Tag_1,1-(GetTagBit(Tag_1))); // Befehl Hand setzen
    Zitieren Zitieren Abfrage Bit und if Abfrage  

  2. #2
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    probiers mal mit anderer klammersetzung:

    if (dwHelp3 & 1) != 0

  3. #3
    Move ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.01.2009
    Beiträge
    441
    Danke
    25
    Erhielt 48 Danke für 44 Beiträge

    Standard

    Zitat Zitat von tnt369 Beitrag anzeigen
    probiers mal mit anderer klammersetzung:

    if (dwHelp3 & 1) != 0
    Hi,

    nee gibt nen Fehler:
    error(0040): <ident>expected before '!='
    Aktion beinhaltet keinen Interprtercode

  4. #4
    Registriert seit
    17.06.2010
    Ort
    nähe Memmingen
    Beiträge
    610
    Danke
    93
    Erhielt 116 Danke für 100 Beiträge

    Standard

    dann lass doch mal das != 0 weg
    das ergebnis der und-verknüpfung ist ja schon eine boolscher wert

    if (dwHelp3 & 1)
    {
    ...
    }
    else
    {
    ...
    }

    sollte funktionieren.

  5. Folgender Benutzer sagt Danke zu tnt369 für den nützlichen Beitrag:

    Move (11.05.2011)

  6. #5
    Registriert seit
    29.03.2004
    Beiträge
    5.741
    Danke
    143
    Erhielt 1.687 Danke für 1.226 Beiträge

    Standard

    Code:
    if ((dwHelp3 & 1) != 0) 
    {
    ...
    sollte aber funktioneren.

    Das Problem haben die C-Erfinder Kernighan & Ritchie schon erkannt und es in der C-Bibel entsprechend aufgeschrieben:
    Zitat Zitat von Programmieren in C, Brian W. Kernighan, Dennis M. Ritchie
    Zu beachten ist, dass der Vorrang der Operatoren zur Bit-Manipulation &, ^ und | geringer ist als der Vorrang der Vergleiche == und !=. Daraus folgt, dass beim Überprüfen bestimmter Bits, wie etwa
    if ((x & MASK) == 0) ...
    die Bit-Verknüpfungen in Klammern eingeschlossen werden müssen, damit korrekte Resultate entstehen.

  7. Folgender Benutzer sagt Danke zu Thomas_v2.1 für den nützlichen Beitrag:

    Move (11.05.2011)

  8. #6
    Move ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    30.01.2009
    Beiträge
    441
    Danke
    25
    Erhielt 48 Danke für 44 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hi Leute,

    so, nur diese Variante funzt jetzt:

    Gruß
    Move

    #define Tag_1 "_AUTO"
    #define TAG_2 "_BEIN"
    #define TAG_3 "_EIN"
    DWORD dwHelp3;
    dwHelp3 = GetTagDWordWait(TAG_3); // Information Antrieb läuft / steht

    if (dwHelp3 & 1) // Antrieb läuft
    {
    DWORD dwHelp1,dwHelp2;
    dwHelp1=GetTagDWordWait(TAG_2);
    dwHelp2=dwHelp1|1;
    SetTagDWordWait(TAG_2, dwHelp2); // Wert 1 schreiben (Nachführung)
    }
    else // Antrieb steht
    {
    DWORD dwHelp1,dwHelp2;
    dwHelp1=GetTagDWordWait(TAG_2);
    dwHelp2=dwHelp1&(0xFFFFFFFF^1);
    SetTagDWordWait(TAG_2, dwHelp2); // Wert 0 schreiben (Nachführung)
    }
    SetTagBit(Tag_1,1-(GetTagBit(Tag_1))); // Befehl Hand setzen
    }

Ähnliche Themen

  1. IF Abfrage in SCL
    Von fbeine im Forum Simatic
    Antworten: 14
    Letzter Beitrag: 31.08.2012, 19:14
  2. <> Abfrage
    Von husox81 im Forum Simatic
    Antworten: 5
    Letzter Beitrag: 19.04.2010, 10:18
  3. if- Abfrage
    Von Hannes im Forum Sonstige Steuerungen
    Antworten: 0
    Letzter Beitrag: 08.07.2009, 16:45
  4. abfrage SQL-Datenbank
    Von mertens2 im Forum PC- und Netzwerktechnik
    Antworten: 12
    Letzter Beitrag: 14.11.2008, 13:39
  5. bcd abfrage
    Von Hobby programmierer im Forum Simatic
    Antworten: 13
    Letzter Beitrag: 26.05.2005, 22:51

Lesezeichen

Berechtigungen

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