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

Ergebnis 1 bis 8 von 8

Thema: Struktur auf Wert 0 abfragen

  1. #1
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo, gibt es eine Möglichkeit eine Struktur ohne Zeiger auf den Wert 0 abzufragen?
    Also ich habe eine Struktur welche Bits mit Warnungen enthält. Nun möchte ich einfach eine Sammelwarnung erzeugen, wenn eines der Bits TRUE wird.
    Wenn alle Bits False sind, soll die Sammelwarnung wieder auf FALSE wechseln.

    Ich dachte jetzt schon daran eine lokale Struktur zu erzeugen, welche alle Elemente = false hat und darauf zu vergleichen. gibt es noch eine einfachere Variante?



    Danke

    Zusatz: das mit dem Vergleichen der Struktur funktioniert leider nicht
    Geändert von SY50 (07.01.2015 um 12:56 Uhr)
    Zitieren Zitieren Struktur auf Wert 0 abfragen  

  2. #2
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Wie wäre es mit einer UNION aus der Bitstruktur und einem BYTE, WORD, DWORD oder LWORD?

  3. #3
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    ich habe mir jetzt eine Funktion geschrieben, welche mir einfach den Speicherbereich auf "0" Prüft.
    so habe ich es gemacht:
    Code:
    // Check Buffer for Zero
    FOR Counter := 1 TO CheckSize BY 1 DO
     IF ADRBuffer^ <> 0 THEN
      BufferNotZero := TRUE;
      Counter := CheckSize;
     ELSE
      ADRBuffer := ADRBuffer + 1;
     END_IF
    END_FOR
    CheckBufferZero := NOT BufferNotZero;

  4. #4
    Registriert seit
    16.03.2014
    Beiträge
    359
    Danke
    74
    Erhielt 45 Danke für 38 Beiträge

    Standard

    Hallöchen,
    soweit ich das nachgelesen habe,
    kann man beim deninieren der Variablen den Speicherbereich mit angeben.
    Somit muss man in diesem Fall ggf. nur ein Byte/Word/DWORD vor dem BIT-Bereich definieren und dann hat man
    alle BITS in dieser Variable drin.

    Beispiel aus Doku Codesys, Wago, http://www.google.de/url?sa=t&rct=j&...83134100,d.d2s

    "Überlappende Speicherbereiche
    Diese Funktion Menüs 'Projekt' 'Überprüfen' (siehe oben) prüft, ob bei der Zuweisung von Variablen
    mittels „AT"-Deklaration auf bestimmte Speicherbereiche Überschneidungen entstehen.
    Beispielsweise entsteht durch die Zuweisung der Variablen "var1 AT %QB21: INT" und "var2 AT
    %QD5: DWORD" eine Überschneidung, da sie das Byte 21 gemeinsam belegen. Die Ausgabe sieht
    dann folgendermaßen aus:
    %QB21 wird durch folgende Variablen referenziert:
    PLC_PRG (3): var1 AT %QB21
    PLC_PRG (7): var2 AT %QD5"

    Ich hoffe das dies deinen Ideen entspricht.
    Viel Erfolg
    Shrimps

  5. #5
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Hey Danke für die Abtwort, aber was hat das mit meiner Frage zu tun?

  6. #6
    Registriert seit
    25.11.2010
    Ort
    OWL
    Beiträge
    750
    Danke
    27
    Erhielt 165 Danke für 143 Beiträge

    Standard

    Nun, wer falsch fragt, bekommt Antworten, mit denen er nichts anfangen kann. Wenn Dein Code funktioniert, hast Du wohl eine Struktur aus Bools. Gefragt hattest Du aber nach einer Möglichkeit, eine Struktur aus Bits in einem Rutsch mit 0 zu vergleichen.

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

    shrimps (07.01.2015)

  8. #7
    Registriert seit
    27.06.2009
    Ort
    am Nordharz
    Beiträge
    3.717
    Danke
    443
    Erhielt 920 Danke für 740 Beiträge

    Standard

    Zitat Zitat von SY50 Beitrag anzeigen
    Code:
    // Check Buffer for Zero
    FOR Counter := 1 TO CheckSize BY 1 DO
     IF ADRBuffer^ <> 0 THEN
      BufferNotZero := TRUE;
      Counter := CheckSize;
     ELSE
      ADRBuffer := ADRBuffer + 1;
     END_IF
    END_FOR
    CheckBufferZero := NOT BufferNotZero;
    Auch wenn Deine Version funktioniert, würde ich die markierte Zuweisung trotzdem durch:
    Code:
    EXIT;
    ersetzen, denn der Schleifenabbruch ist ja das, was hier wirklich bewirkt werden soll.

  9. Folgender Benutzer sagt Danke zu hucki für den nützlichen Beitrag:

    SY50 (11.01.2015)

  10. #8
    SY50 ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    04.02.2013
    Beiträge
    271
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Danke für den Exit Tip. Hatte sowas gesucht und dann einfach schnell durch das setzen des counters auf den entwertet realisiert. Naja .... Es ging mir auch um eine Struktur aus beliebigen Daten, nicht nur um Bits

Ähnliche Themen

  1. Auf interne Struktur eines EtherCAT-Slaves zugreifen
    Von SY50 im Forum CODESYS und IEC61131
    Antworten: 6
    Letzter Beitrag: 16.09.2014, 19:00
  2. Step 5 S5 Zaehlerausgang auf Wert (=0) abfragen
    Von DI87 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 17.05.2013, 21:09
  3. Zugriff von java auf Struktur per ADS
    Von henne1978 im Forum CODESYS und IEC61131
    Antworten: 8
    Letzter Beitrag: 19.09.2011, 11:22
  4. Zeiger/Pointer auf eine Struktur
    Von logo78 im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 29.03.2009, 17:09
  5. Pointer auf Struktur (SCL)?
    Von momo99 im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 25.03.2009, 10:23

Lesezeichen

Berechtigungen

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