wofür sind SET und CLR bei S7 VKE-begrenzend?

Perfektionist

Level-1
Beiträge
3.557
Reaktionspunkte
522
Zuviel Werbung?
-> Hier kostenlos registrieren
für eine VKE-Begrenzung kann ich ja jederzeit schreiben:
Code:
= #temp_Dummy_bool

bei
Code:
SET
= "Ausgang"
ist die VKE-Begrenzung überflüssig.

bei
Code:
O "irgendwas"
CLR               // testhalber eingefügt
O "nochwas"
= "Ausgang"
bzw.
Code:
O "irgendwas"
[B]SET[/B]               // testhalber eingefügt
O "nochwas"
= "Ausgang"
habe ich durch die VKE-Begrenzung jeweils ein identisches Resultat. Ich hätte auch schreiben können:
Code:
O "irgendwas"
= #temp_Dummy_bool
O "nochwas"
= "Ausgang"

Im dem Beispiel hätte ich einen Nutzen davon, wenn SET und CLR nicht VKE-begrenzend wären. Daher frage ich mich gerade, wofür SET und CLR VKE-begrenzend designed wurden. Kennt jemand ein Beispiel, wo es nützlich ist, dass SET und CLR das VKE begrenzen?
 
Zuletzt bearbeitet:
Hallo Perfektionist,
ich kann dir da zwar kein Beispiel für die Sinnhaftigkeit liefern - ich bin aber auch noch nie auf die Idee gekommen das so verwenden zu wollen - dafür habe ich meine Merker "Null" bzw. "Eins" (oder "True" und "False" - je nach Geschmack).

Allerdings - wie würdest du sonst eine VKE-Begrenzung realisieren wollen ? Man könnte dann ja auch fragen, warum Zuweisungen das VKE begrenzen ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... dafür habe ich meine Merker "Null" bzw. "Eins" ...
zu S5-Zeiten, da schrieb ich auch
Code:
U "irgendwas"
O "Eins"   // zum Test
= "Ausgang"
bei S7 wurde daraus:
Code:
U "irgendwas"
SET
= "Ausgang"

mir ist aber erst neulich aufgefallen, dass so ein "O Eins" universeller anwendbar ist, als der SET-Befehl.

...
Man könnte dann ja auch fragen, warum Zuweisungen das VKE begrenzen ...
in anderen SPS-Dialekten gibt es dieses /ER-Flag nicht. Da wird ein "frisches" VKE direkt mit dem LD-Befehl auf den VKE-Stack geladen. Da aber S5/7 in dieser Hinsicht anders strukturiert ist, behandelt Step eine "Verknüpfung" nach einer Zuweisung eben nicht als Verknüpfung, sondern in der Art eines Ladebefehls.
 
Auf jeden Fall hast Du Deinen Namen anscheinend richtig gewählt.
Ich neige eher immer dazu gegebenes hinzunehmen ohne den Sinn ergründen zu wollen.
 
...
Ich neige eher immer dazu gegebenes hinzunehmen ohne den Sinn ergründen zu wollen.
jetzt muss ich aber aufmerksam auf meinen Schatten aufpassen und über diesen springen, um das nicht als allgemeine Handlungsempfehlung aufzufassen. Denn getreu meines Nick würde ich das nun tun ...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
bei S7 wurde daraus:
Code:
U "irgendwas"
SET
= "Ausgang"

Wozu genau dient das SET? Würde der "Ausgang" ohne SET nicht auch durch "irgendwas" angesteuert werden, oder spielt da eventuell noch das VKE aus dem vorherigen Netzwerk eine Rolle?
Wenn ja sollte ich dringend alle meine bisherigen Programme korrigieren! :shock:
 
Bei uns heißt das SET auch gern

Angst-SET

weil


Code:
..
U E5.5
U E5.6
=  A5.0
 
 
 
SET
U E1.1
U E1.2
= A1.2

Das hier sieht ja noch sehr einfach aus aber wenn man im
Stress während der IB ein paar Zeilen vom
oberen Konstrukt auskommentiert - speziell das = A5.0 - dann
ist natürlich die Anfangs-VKE für die unteren zwei U Ex.x falsch
und der Ausgang bleibt aus.

Daher habe ich mal gelernt:

Code:
CLR
O M x.x
O M x.y
= M x.z
 
SET
U M x.x
U M x.y
= M x.z

Die Gurus hier können ja sagen ob das Käse ist.

Gruß

Frank




wenn man jetzt
 
Daher habe ich mal gelernt:

Code:
CLR
O M x.x
O M x.y
= M x.z
 
SET
U M x.x
U M x.y
= M x.z
Hallo Frank,
von wem hast Du denn das gelernt?
Du schreibst das vor jede Zuweisung?
Und was schreibst bei einem gemischten UND / ODER?
Code:
   O M x.x
   O M x.y
   U M x.z
   = M a.a
Fakt ist doch, das nach jeder Zuweisung eine Erstabfrage erfolgt.
Und da brauche ich nicht vorher ein VKE beeinflussen.
Bei einem Sprung muss ich mich natürlich entscheiden ob ich je nach Sprungbefehl das VKE mitnehmen oder ignorieren will.
Und ich denke da werden auch die meisten Fehler passieren.
Das von Dir beschriebene Auskommentieren der Zuweisung ist natürlich ein grober Fehler.
Aber kannst Du jeden Programmierfehler durch das Programm abfangen?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Code:
CLR
O M x.x
O M x.y
= M x.z
 
SET
U M x.x
U M x.y
= M x.z

Tja, Jede Performance ist kleinzukriegen...mit genügend (unnötigen) Befehlen ;)

Aber trotzem immer wieder erstaunlich zu sehen, welche Märchen kursieren.

Markus
 
Tja, Jede Performance ist kleinzukriegen...mit genügend (unnötigen) Befehlen ;)

Aber trotzem immer wieder erstaunlich zu sehen, welche Märchen kursieren.
Im Prinzip gebe ich euch ja recht im Sinne von normalerweise unnötig,
im Gesamtkontext der von IBFS beschrieben wird, im Einzelfall sicher nicht schlecht.

Hier die entscheidende Stelle:
IBFS schrieb:
Stress während der IB ein paar Zeilen vom
oberen Konstrukt auskommentiert - speziell das = A5.0 - dann
ist natürlich die Anfangs-VKE für die unteren zwei U Ex.x falsch
und der Ausgang bleibt aus.

Mfg
Manuel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... je nach Sprungbefehl das VKE mitnehmen ...
Da möchte ich anmerken, dass es da zwischen den von den Anzeigebits abhängigen Sprüngen und den von VKE-abhängigen Sprüngen einen entscheidenden Unterschied gibt: erstere lassen das Statuswort unberührt, ein SPB setzt das VKE und wirkt VKE-begrenzend.
 
ich habe mir noch nicht soviele gedanken über die Befehle "SET" bzw. "CLR"
gemacht ich nutze Sie nur einfach.
Jetzt hab ich noch mal mein "Berger" Buch vorgeholt und folgendes gelesen.

VKE setzen und rücksetzen
Mit SET setzen Sie das Verknüpfungsergebnis auf "1" und mit CLR auf "0".
Parallel dazu wird das Statusbit STA ebenfalls auf "1" bzw. auf "0" gesetzt.
Beide Anweisungen werden unabhängig von Bedingungen ausgeführt.

SET und CLR setzen auch die Statusbit OR und /ER zurück, d.h. nach SET
oder CLR beginnt mit der nächten Abfrage eine neue Verknüpfung.

Mit SET können Sie ein absolutes Setzen oder Rücksetzen eines Binär-
operanden programmieren:

Code:
SET
S M 8.0 //Merker wird gesetzt
R M 8.1 //Merker wird rückgesetzt
 
CLR
S Z 1 //Flankenmerker für "Zähler setzen" rücksetzen

Das direkte Setzen und Rücksetzen des Verknüpfungsergebnisse ist auch
in Verbindung mit Zeiten und Zählern nützlich. Zum Starten einer Zeit-
funktion oder zum Zählen brauchen Sie ein Wechsel des VKEs von "0" nach
"1" (beachten Sie, dass Sie auch zum Freigeben einer positiven Flanke be-
nötigen). In Programmierteilen mit vorwiegend Digitalverknüpfungen steht
das VKE in der Regel nicht defeniert zur Verfügung, z.b. nach den Sprung-
funktionen zum Auswerten der Digitalanzeigen. Hier kann man dann mit
SET und CLR das VKE definiert setzen bzw. rücksetzen oder einen VKE-
Wechsel programmieren.

soweit das Lehrbuch....

Das blöde bei Step 7 ist das Sie kein Binären Ladebefehl für eine Eindeutige
Erstabfrage wie andere haben als Beispiel.

Code:
[COLOR=deepskyblue]LX[/COLOR] M x.x  
O M x.y
= M x.z
 
 
[COLOR=deepskyblue]LX[/COLOR] M x.x
U M x.y
= M x.z

Achtung die Anweisung "LX" gibt es nicht, aber könnte einiges Einfacher
machen. Na ja vlt. kommt das in STEP 9 :roll:
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo stört es denn dass SET und CLR VKE-begrenzend sind?
ich frage nicht: "wo stört es?". ich frage: "wo nutzt es?". Es stört nicht - aber ich glaube, die zwei Befehle wären universeller anwendbar, wären sie nicht VKE-begrenzend. Und nun suche ich Gründe dafür, dass es doch nutzt, dass sie VKE-begrenzend sind. Weil ich die Dinge ungern einfach so hinnehme, wie sie sind, sondern den Dingen gerne auf den Grund gehe.

@Helmut: Diesen LX-Befehl, wie Du ihn nennst, den gibt es tatsächlich bei Siemens auch - in der 200er nämlich. Aber zugegeben: das ist auch keine echte Siemens-Steuerung. Tückisch für jemanden, der die automatische VKE-Begrenzung von Step her gewohnt ist. Viel zu oft beginne ich da aus Versehen eine Verknüpfung mit U statt mit LD.
 
ich frage nicht: "wo stört es?". ich frage: "wo nutzt es?". Es stört nicht - aber ich glaube, die zwei Befehle wären universeller anwendbar, wären sie nicht VKE-begrenzend. Und nun suche ich Gründe dafür, dass es doch nutzt, dass sie VKE-begrenzend sind. Weil ich die Dinge ungern einfach so hinnehme, wie sie sind, sondern den Dingen gerne auf den Grund gehe.

Vielleicht hatten die Siemens-Entwickler auch keinen Grund gesehen dass es stört, und die jetzige Funktionsweise war einfacher oder billiger in einen Chip zu gießen?
 
ich frage nicht: "wo stört es?". ich frage: "wo nutzt es?". Es stört nicht - aber ich glaube, die zwei Befehle wären universeller anwendbar, wären sie nicht VKE-begrenzend. Und nun suche ich Gründe dafür, dass es doch nutzt, dass sie VKE-begrenzend sind.

Ich stimme dir vollkommen zu.
Fast jeder von uns definiert irgendwo feste 0- und 1-Merker und nutzt die Taktmerker. Aber halt leider jeder auf anderen Adressen. Insofern wäre ein festes "True" und "False" und feste Taktmerker sinnvoll und damit wäre auch das Verhalten von SET und CLR egal.

Gruß
Dieter
 
Diesen LX-Befehl, wie Du ihn nennst, den gibt es tatsächlich bei Siemens auch - in der 200er nämlich. Aber zugegeben: das ist auch keine echte Siemens-Steuerung. Tückisch für jemanden, der die automatische VKE-Begrenzung von Step her gewohnt ist. Viel zu oft beginne ich da aus Versehen eine Verknüpfung mit U statt mit LD.

genau daher kenne ich das auch, warum kann Siemens nicht von Siemens
lernen. Warum haben die diese Befehle nicht drin, feste Taktmerker und
die Merker "1" und "0". Diese dürften nicht mal im Merkerbereich liegen
sondern einen eigenen Speicherbereich bekommen meinetwegen System-
Merker "SM". Diese dürften dann nicht verändert werden, wozu auch und
sind dann auf jeder Steuerung mit Symbol an der selben stelle zu finden.

Mir passiert es fast in jeden neuen projekt das ich Symbolisch Taktmerker
aus einen anderen Projekt reinkopiere und vergesse diese in der Hardware
frei zu schalten.

So etwas in Preiswert in den Chip zu inpletieren kann eigentlich kein Problemm
sein oder warum ist die 1200er so preiswert.
 
SET und CLR

Ich möchte auch was zum Thema beitragen, doch leider hat mich die Telekom mit einem stundenlangen Totalausfall
von Festnetz, Mobil und Internet gehindert, meinen Beitrag schon heute morgen zu präsentieren.
Nun, hier ist er:

Für mich ist es eigentlich ganz logisch, daß SET und CLR VKE-begrenzend wirken müssen.

SET heißt:
Setze jetzt das VKE auf 1 - unabhängig davon, was eine eventuelle vorherige Verknüpfung bis dahin ergeben hat!
Da dadurch vorherige Verknüpfungen hinfällig werden (so als wenn sie gar nicht stattgefunden hätten), ist die
nach dem SET folgende Verknüpfungsoperation logischerweise der Beginn einer neuen Verknüpfung.
Weil nun eine neue Verknüpfung beginnt, muß das VKE hier begrenzt sein.
(Das gilt für CLR ganz genauso, nur wird dabei das VKE auf 0 gesetzt.)

Daß SET und CLR VKE-begrenzend sind, war für die S7-Sprachdesigner also keine Ermessensfrage.

Das einzig merkwürdige dabei ist, daß SET und CLR gar nicht selber in die nachfolgende Verknüpfung mit eingehen:
Code:
SET
U "nochwas"
= "Ausgang"
und
Code:
CLR
U "nochwas"
= "Ausgang"
haben das selbe Ergebnis: "Ausgang" bekommt den Zustand von "nochwas" zugewiesen.
Egal ob die Befehlsfolge mit SET oder CLR beginnt!

Das kommt daher, daß SET und CLR für die VKE-Begrenzung das Erstabfragebit /ER im Statuswort auf 0 schreiben
und dadurch die nächste Bitverknüpfungs-Operation eine VKE-Lade-Operation wird und dabei das durch SET bzw.
CLR verursachte VKE ohne Verknüpfung einfach überschrieben wird.


Der eigentliche Zweck von SET und CLR ist, das VKE einfach und verknüpfungslos auf einen definierten
Zustand zu bringen, um es für nachfolgende Zuweisungen (z.B. für das BIE-Bit) direkt verwenden zu können, ohne
wie in S5 extra 1- und 0-Merker benutzen zu müssen. Besonders in gekapselten Bausteinen und S7-"Makros" wäre es
ohne SET und CLR umständlicher, das VKE auf einen definierten Zustand zu bringen, ohne Variablen zu verknüpfen
und ohne die Akkus zu verändern.
Praktisch werden SET und CLR aber nur selten wirklich benötigt.

Nach meiner Erfahrung werden SET und CLR jedoch zu über 90% als Angst-SET benutzt, wie schon von IBFS erwähnt.
Besonders nach VKE-abhängigen bedingten Sprüngen (SPB/SPBN/SPBB/SPBNB) sehe ich oft:
Code:
U "Bedingung"
SPB M001
SET
S "Bedingung_nicht_erfüllt"
...
Das SET ist hier völlig überflüssig, weil SPBxx auf jeden Fall das VKE=1 (und /ER=0) schreiben.
Das SET hilft höchstens, die Verständlichkeit dieses Programmteils für Programmier-Anfänger zu erhöhen.

Weil SET und CLR vorherige Verknüpfungen komplett überflüssig machen und deshalb in Verknüpfungen sinnlos sind,
gibt es diese Operationen nicht in FUP und KOP.

Gruß
Harald
 
Zurück
Oben