Struktur auf Wert 0 abfragen

SY50

Level-1
Beiträge
271
Reaktionspunkte
1
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
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
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;
 
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...GyH4K2CST0xMILOk3tk6g0A&bvm=bv.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
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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.
 
Code:
// Check Buffer for Zero
FOR Counter := 1 TO CheckSize BY 1 DO
 IF ADRBuffer^ <> 0 THEN
  BufferNotZero := TRUE;
  [COLOR=#ff8c00]Counter := CheckSize;[/COLOR]
 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.
 
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
 
Zurück
Oben