Step 7 Arbeitsweise der sps

SPS-freak1

Level-2
Beiträge
396
Reaktionspunkte
54
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Abend,

ich hatte vor einigen Tagen ein Problem in einem meinem sps Programm, konnte dies zwar lösen aber ich weiß leider immer noch nicht wieso.

und zwar hatte ich einen Ablauf bei dem das ablaufende per sprung (spbn) einige Merker zurücksetzen sollte. Dies hat leider nicht funktioniert weil das Ablaufende nur einen Zyklus lange da war wobei das betreffende Netzwerk direkt unter dem setzten des Ablauf Ende stand. Jetzt ist mir eigentlich bekannt wie eine SPS arbeitet. Die Frage die ich mir nun stelle ist, wie Verhält sich ein Merker der gesetzt wird. Ist dieser noch im gleichen Zyklus in anderen Netzwerken gültig oder wird dieser, wie Ein- und Ausgänge erst beim neuen Zyklus eingelesen? Ich hoffe ihr könnt mir da weiterhelfen.
Und entschuldigt meine Rechtschreibung, ich schreibe vom Handy und das hat es nicht so genau mit Groß und Kleinschreibung.

SPS-Freak
 
Ein merker verliert seine gültigkeit bei Zyklusende nicht, wenn du ihn im zyklus veränderst ist der genau ab da natürlich mit dem neuen Zustand gültig. Das gilt für Merker, Merkerworte genau gleich.
Dasselbe gilt übrigens für alle speicher in der SPS auch z.B. DBs, Timer, Zähler etc.

mfG René
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hey, ja so hab ich auch gedacht aber genau das hat nicht funktioniert. Ich habe den Merker gesetzt, dieser setzt im nächsten Zyklus den Verriegelungsmerker zurück und nicht der VM rücksetzt das Ablaufende zurück. Und wie gesagt das ablaufende steht als einziger vor der Sprungmarke und sollte dort ein DINT mit 0 zu laden. Das funktioniert aber nur wenn ich dieses Netzwerk vor das Netzwerk des ablaufendes schreibe. Ich verstehe die Welt nicht mehr.
 
Guten Abend,

unten seht ihr mal den Code als Prinzip wie der Ablauf aufgebaut ist.
Ich habe leider meinen Laptop nicht zur Hand.

Code:
U 1.Schritt
S Verriegelungsmerker
O Ablaufende
R Verriegelungsmerker

UN Verriegelungsmerker
U Startbedinung
S 1. Schritt
O 2. Schritt
R 1. Schritt

usw
.
.
.
.

U n.Schritt
S Ablaufende
ON Verriegelungsmerker
R Ablaufende

//Direkt im nächsten Netzwerk

U Ablaufende
SPBN M001

L L#0
T DB81.DBD0

M001: NOP 0

Dieses Schema funktioniert so nicht. Schreibe ich dieses Netzwerk mit den Sprung vor das Netzwerk in dem das Ablaufende gesetzt wird
dann funktioniert das rücksetzen. Ich kann mir das Verhalten aber überhaupt nicht erklären.
Wisst ihr weshalb dies passieren kann?
Nach meinem Verständniss ist doch das Ablaufende sofort in diesem Zyklus gültig und kann das Laden ausführen?!

Gruß

SPS-Freak1
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn der Aufbau im Originalcode genauso ist, dann ist es unerklärlich.
Kannst Du bitte den Originalcode posten?
Vielleicht bringt es Dich weiter, wenn Du Dir das Ganze mal mit Haltepunkten genauer anschaust.
 
Zyklus x:
VM=1 (weil Kette ja läuft)

jetzt kommt der n.Schritt, der setzt den "Ablaufende", im gleichen Zyklus wird ins DB81.DBD0 L#0 geschrieben.

Zyklus x+1:
"Ablaufende" resetet VM, wenn Startbedingung erfüllt ist rattert es wieder bei 1.schritt los, aber jedenfalls wird "Ablaufende" durch "ON Verriegelungsmerker" wieder resetet.

Ist zwar nicht ganz übersichtlich, schaut aber nicht falsch aus.
 
Ungünstiger Aufbau....

Dein Aufbau ist etwas ungeschickt. Zum Beispiel wird der Schritt 1 kontinuierlich gesetzt solange die Startbedingung da ist. Ist das sinnvoll? Des weiteren werden nach diesem Prinzip für jeden Schritt sprich n Rücksetzbefehle benötigt. Da kann sich schnell mal ein Fehler einschleichen...

Ich würde Dir empfehlen deinen Ansatz nicht weiterzuverfolgen und Dir stattdessen mal folgenden Aufbau einer Ablaufsteuerung anzusehen:

SK_B1.JPGSK_B2.JPGSK_B3.JPGSK_B4.JPGSK_B5.JPG

Diese Ablaufsteuerung hat folgende Vorteile:
- auch bei vielen Schritten unheimlich schnell
- sehr flexibel, man kann springen wie man will
- übersichtlich

Im Moment fängt sie nach Schritt 6 wieder mit Schritt 1 an. Wenn Du aber willst dass sie am Ende beendet wird, dann einfach anstelle der 1 eine 0 an "move" übergeben.

Die ganzen "true"s sind natürlich Bedingungen die Du frei definieren kannst.
 
Guten Abend,
danke für die Antworten. Ich wollte hier jetzt keine Diskussion über die beste und verständlichste Programmierstrategie aufbrechen. Ich habe in solche Varianten auch schon auf einigen unterschiedlichen Systemen realisiert.
Ich wollte einfach nochmal mich Rückversichern das ein Merker etc. in dem Baustein indem er gesetzt wird ab dieser Zeile auch schon seine Gültigkeit hat und nicht erst im nächsten Zyklus gültig ist.

schönen abend
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich hätt hier auch noch nen SK-Entwurf in SCL

Über Feedback freue ich mich natürlich

Anhang anzeigen SK_SCL.txt

edit: BtnOn ist IN, der rest STAT, das ganze ist ein FB
edit2: Irgendwo aufder Siemens Support Seite gibts nen Programmierbeispiel für ne SK in AWL (Sprungverteiler zu den Schritten, im Schritt: Aktionen und am schrittende: IF(Transitionsbedingung)THEN nextstep ---> wieder oben im Sprungverteiler wird dann zum nächsten Schritt gesprungen. Zusätzlich gibts noch nen Endschritt und nen Fehlerschritt, welcher von jedem Schritt aus erreichbar ist.
 
Zuletzt bearbeitet:
Zurück
Oben