Erklärung nötig U<>0

mietian

Level-1
Beiträge
2
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich programmiere jetzt seit ca 1,5 Jahren für SPS-Systeme und bin in diesem Forum schon sehr oft fündig geworden was Erklärungen und Tipps angeht und darum möchte ich erstmal ein großes Danke vorrausschicken.
Wie Ihr Euch aber denken könnt habe ich jetzt ein Problem für das ich keine Lösung gefunden habe und darum sehr dankbar wäre für einen Tipp zur Lösung oder einen Hinweis wo diese zu finden ist (bin leider auch in den Siemens manuals nicht fündig geworden).

Folgender Codeausschnitt gibt mir Rätsel auf:
Code:
L     LD [AR1,P#0.0]
L     LD [AR1,P#4.0]
OD    
L     LW [AR1,P#8.0]
OD    
U     <>0
=     #Sonstwas
Bis zum zweiten Oder-Doppelwort ist alles klar. Aber die Zeile
Code:
U     <>0
ist noch etwas rätselhaft. Meine Vermutung: Zuerst wird das "ungleich 0" auf Akku1 angewendet wo das Ergebnis aus dem letzten Oder-Doppelwort drin steht. Anschließend wird durch das "Und" das Ergebnis der "ungleich 0"-Abfrage abgefragt um es "Sonstwas" zuweisen zu können. Für Erklärungen oder eine Bestätigung meiner Vermutung wäre ich sehr dankbar.

Grüße
Patrick
 
einen Hinweis wo diese zu finden ist (bin leider auch in den Siemens manuals nicht fündig geworden).
Hallo Patrick,

im relevanten Siemens Manual kann man einfach nach "<>0" suchen, in der Step7-AWL-Hilfe ist das "<>0" sicher auch irgendwo zu finden, ich meine sogar ausführlicher als im Manual (habe jetzt gerade keinen PC mit Step7).

"U <>0" verknüpft das Statuswort, ob die davor stehende Operation "OD" ein Ergebnis ungleich 0 hatte. Es erspart das explizite Laden von 0 und Vergleichen (was außerdem die Akkus verändern würde).

Dein kompletter Codeausschnitt testet indirekt adressiert 10 aufeinanderfolgende Bytes. Steht in mindestens 1 Byte ein Wert ungleich 0 drin, dann wird #Sonstwas TRUE. Steht in allen 10 Byte eine 0 drin, dann wird #Sonstwas FALSE.

Referenzhandbuch: Anweisungsliste (AWL) für S7-300/400
Mit der Operation UND können Sie auch direkt das Statuswort abfragen. Verwenden Sie hierzu die folgenden Operanden: ==0, <>0, >0, <0, >=0, <=0, OV, OS, UO, BIE.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald,

Ich danke Dir für Deine Erklärung und den Hinweis. Beim suchen hatte ich mich wohl zu sehr auf das "und" eingeschossen. Nach Deinen Ausführungen war es sowieso klar und ausserdem habe ich es dann auch an entsprechender Stelle gefunden. Mal wieder mit Blindheit geschlagen gewesen....

Patrick
 
Da wäre noch etwas zu ergänzen:
Bei Arithmetikoperationen werden beide Bits der Ergebnisanzeige genutzt um die möglichen Zustände des Ergebnis anzuzeigen (<0, >0, ==0), Wort- und Doppelwortweise Verknüpfungsoperationen nutzen nur Bit 1 während Bit 0 fest auf 0 gesetzt wird. Die Operationen U <0, U ==0 etc. werten beide Bits der Ergebnisanzeige aus, aus diesem Grund ist es nicht möglich, alle möglichen Zustände von AKKU 1 nach einer W- oder DW-weisen Verknüpfung mit Hilfe von U <>0 etc. zu erfassen, sondern nur =0 und <>0.
 
... weil die Datentypen WORD und DWORD kein Vorzeichen haben und es keine Vergleichsoperationen gibt, kann man nicht größer-als-irgendwas und kleiner-als-irgendwas erfassen bzw. auswerten. Es gibt nur den einen auswertbaren Spezialfall: ein WORD oder DWORD ist 0 oder nicht --> deshalb nur ==0 und <>0

Welche Operationen welche Statusflags wie beeinflussen steht bei jeder Operationsbeschreibung. Daraus kann man dann ersehen, welche Vergleiche, Statusverknüpfungen oder bedingte Sprünge im Anschluß an diese Operationen möglich/sinnvoll sind.

Harald
 
Zurück
Oben