Step 7 Sprungoptionen

spsanfaenger

Level-1
Beiträge
8
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Leute,
ich bin gerade dabei Step 7 zu erlernen. Bin jetzt an dem Thema Sprungoptionen angekommen. Jetzt treten Probleme auf.
Also wenn ich mache :

U E0.0
SPB NEXT

NEXT : UN M10.0
= A0.0

Jetzt ist es aber so, dass A0.0 ja immer an ist, auch wenn E0.0 gar nicht gedrückt wird.
Ich habe das mit den Sprungoptionen so verstanden das, wenn ich springe, überspringe ich z.B.einzelne Netzwerke und gehe in die Sprungmarke.
Wieso wird jetzt aber, wenn ich auf Status gehe die SPB NEXT immer ausgeführt?

und noch ein Problem :

Wenn ich mache :

U E0.0
SPB NEXT
U E0.1
= A0.1

NEXT : UN M10.0
= A0.0

Jetzt geht das mit SPB NEXT, aber wenn ich E0.1 drücke wird auch A0.0 ausgeführt???
Also Ihr seht schon, ich bin dringend auf Hilfe angewiesen.
Vielen Dank vorab.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

zum ersten:
Ja, wenn E0.0 gesetzt ist dann wird zur Sprungstelle NEXT gesprungen. Dort wird das VKE auf 1 gesetzt.
Somit wird A0.0 true wenn M10.0 false ist.
Wenn E0.0 false ist dann wird nicht gesprungen => somit mit dem nächsten Befehl nach dem SPB weitergemacht. Und das ist bei dir UN M10.0.
Also kommt bei deinen Code immer das gleiche raus.
Wenn du willst das dem Ausgang nichts zugewiesen wird dann musst du über den Befehl = A0.0 springen. (Das ist aber sehr schlechter Programmierstiel)

Zu 2:
Wie schon oben erwähnt wird das Programm nach dem nicht ausgeführten Sprungbefehl sequenziell abgearbeitet.
Also wird A0.1 und A0.0 (wenn M10.0 false) gesetzt.
Wenn du =A0.1 überspringst dann bleibt dieser in den zuletzt vorhanden Zustand, denn wo soll dieser nun geändert werden wenn es keine Zuweisung mehr gibt?
 
Hallo godi,
mit = a0.0 hab ich auch schon probiert. geht aber auch nicht!
wie wäre denn der korrekte code? also vom prinzip habe ich es verstanden, ich habe auch die hilfe von simatic gelesen, aber ich kriegs nicht in die praxis umgesetzt!
 
Das SPS-Programm wird von oben nach unten ausgeführt. Sprünge werden ausgeführt, wenn die Sprungbedingung erfüllt ist - wenn nicht erfüllt, dann wird einfach die nächste Anweisung ausgeführt (das Programm kann ja nicht einfach stehenbleiben bis die Bedingung erfüllt ist).

Wenn die Programmausführung "unten" bei der letzten Anweisung angekommen ist, dann macht die CPU verschiedene Systemaufgaben (die Baugruppen-Ausgänge schalten und z.B. mit dem PG kommunizieren) und beginnt danach die Programmabarbeitung erneut von oben nach unten.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
achso und wieso wird bei SPB NEXT im status immer bei VKE 1 und bei STAT auch 1 angezeigt, also wie wenn der sprung immer aktiv wäre
ist das dann so das auch die srpungamarken bearbeitet werden egal ob ich reinspringe oder nicht, also nicht nur wenn ich e0.0 drücke sondern immer?

also was mir wirklich helfen würde, wäre ein beispiel mit evtl erklärung, falls das möglich wäre
:D
 
Zuletzt bearbeitet:
Hi

Zu Eins:

Das Programm in der SPS wird immer Zyklisch abgerufen von oben nach unten. Da du nur in die nächste Zeile springst ist dein Sprungbefehl sinnlos :D, Sprungbefehle benutzt man um an bestimmte stellen zu springen meistens um Programmteile auszulassen oder um Teile zu wiederholen indem man nach oben springt.

Dein Programm müsste so in die Art aussehen:

U e0.0
SPBN: M001

un M10.0
=A0.0

M001: NOP 0


Wenn der E0.0 aktiv ist dann wird das Programm bearbeitet. Sollte E0.0 = 0 sein, so wird das Programm übersprungen. Negativer Sprungbefehl.
Achtung Sprungbefehle in sind sehr mächtig hiermit kannst du sehr leit ein totales durcheinander Programmieren vorallem wenn du nach oben springen solltest.

Bei deinem Zweiten Programm hast du eigendlich das gleiche Problem wie beim ersten. Hier fehlt dir es noch etwas an Programmverständnis. Wenn du meine erste Lösung verstanden hast dann solltest du auf die zweite von alleine kommen.

Ich konnte dir hoffentlich Helfen.


Für weitere Fragen stehe ich gerne zur Verfügung
 
Zuviel Werbung?
-> Hier kostenlos registrieren
@SKNGO
vielen dank, deinen programmcode habe ich soweit verstanden. nur noch eine allgemeine frage und dann denke ich habe ich es verstanden (hoffe ich zumindest):
das heißt spungmarken (also bei mir next) werden immer bearbeitet, sie werden nicht nur bearbeitet wenn ich hin springe sondern immer, richtig. was man mit spb/spbn macht ist lediglich einen programmteil zu überspringen. das heißt für mich jetzt sprungmarken werden immer aufgerufen, also nicht nur wenn ich rein springe.
stimmt das soweit?
danke
 
hmmmm, jetzt bin ich mir nicht sicher ob meine antwort schon gepostet wurde, naja egal ich schreibs einfach nochmal.
also wenn ich es nun richtig verstehe, werden sprungmarken (bei mir next) immer aufegrufen und nicht nur wenn ich rein springe. das heißt für mich mit einem SPB/SPBN befehl überspringe lediglich einige programmabschnitte, setze aber nicht die sprungamarke außer kraft. die wird immer angesteuert.
ich habe jetzt mal was anderes gefunden mit dem es gehen würde

U E 0.0
SPB NEXT
SPA ende

NEXT: = A 0.0
ende: NOP 0


Problem ist nur, nach einmal betätigen bleibt der ausgang a0.0 gesetzt. ich dachte bei einem neuen zyklus würde dieser dann wieder den wert null annehmen? warum bleibt der a0.0 aktiv?

danke
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Eine Sprungmarke ist nur eine Hilfsmarke im Programmeditor, damit man sagen kann, wohin ein Sprung gehen soll.
Im compilierten Programm in der SPS sind Sprungmarken nicht mehr vorhanden, die SPS weiß nichts von den Sprungmarken.
Die Operationen in der Zeile hinter den Sprungmarken können durch Sprünge oder auch einfach nur dadurch erreicht werden, daß die Programmabarbeitung von oben kommend in diese Operation hineinläuft.


Ausgänge ändern nur ihren Zustand, wenn ihnen etwas zugewiesen wird oder wenn die SPS in STOP geht. Ansonsten bleibt der Zustand der letzten Zuweisung erhalten.

Harald
 
ok also alles was ich überspringe bleibt beim letzten bekannten zustand. und meine obere frage ist die so richtig?:

also wenn ich es nun richtig verstehe, werden sprungmarken (bei mir next) immer aufegrufen und nicht nur wenn ich rein springe. das heißt für mich mit einem SPB/SPBN befehl überspringe lediglich einige programmabschnitte, setze aber nicht die sprungamarke außer kraft. die wird immer angesteuert.

Unbenannt.JPG
 
Zuletzt bearbeitet:
Sprungmarken erhalten den letzten Zustand. Du musst 2 mal springen damit der Zustand den Du haben willst erhalten bleibt:
Code:
      U     "E     0.0"
      SPB   m000                            // damit springst Du in m000

      U     E      0.1
      SPB   m001                           // damit springst Du in m001
      SPA   m100                          // damit springst Du in m100 und machst damit das nach deinen sprunganweiseungen nichts mehr passiert

m000: =     A      0.0                  // dein ausgang
      SPA   m100                        // wieder nach m100 springen damit nichts weiter nach =a0.0 passiert und wenn e0.0 nicht mehr ist, befindest du dich in der "Schelife" m100

m001: U     M     10.0               // die bedingung ist nicht da somit wird dein a0.0 wieder 0
      =     A      0.0
      SPA   m100                      // wieder nach m100 springen damit nichts weiter nach =a0.0 passiert und wenn e0.0 nicht mehr ist, befindest du dich in der "Schelife" m100

m100: NOP   0                       // es wird keine Operation ausgeführt, also bleibt der letzte bekannte zustand erhalten

Im Klartext :
Druch den Sprung nach m100 an den oben genannten stellen, schickst du dein Programm in eine Art Schleife.... Es wird nichts merh danach aufgeführt. Aber Vorsicht: nicht willkürlich spa m100 setzen, wenn du es nach SPB m000 machst geht gar nix mehr, oder zumindest nicht meh viel.
Ich weiß ist ein bisschen kompliziert mit der Springerei, aber einfach Fragen wenns unklar ist.

Hoffe du verstehst alles....

***noch was, teilweise ist es leichter mit den SPBN befehlen, musst nur n bisschen anders denken.
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Zum Bild in Deiner jetzigen Version Deines Beitrags #12:

Der AWL-Programmstatus zeigt den Zustand NACH der Operation.
Wie unschwer (*) in der Beschreibung zur Operation SPB nachzulesen ist, setzt die Operation das VKE (und STA) auf 1, auch wenn nicht gesprungen wird.
Nach einem SPB ist das VKE immer 1

(*) den Cursor in die Zeile mit dem SPB setzen und F1 drücken

Harald
 
@PN/DP
sorry ich wollte nicht nerven,bin halt anfänger!
die hilfe habe ich ja gelesen, aber so ganz schlau bin ich nicht daraus geworden, deswegen wende ich mich ja an die profis.
 
Du nervst nicht. Du erhältst ja Antworten. Und Tips zur Selbsthilfe. :D

:confused: Was mich allerdings wundert ist, daß Du für das verworrene Kauderwelsch in #14 ein Danke gibst, aber keiner anderen der hilfreichen Antworten hier.
Was genau an #14 hat Dich erleuchtet?

Harald

verworren und unverständlich <> intelligent und weise
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich hatte erst kürzlich in einem anderen Thread eine Diskussion über guten Programmierstil.

Ein SPS Anfänger, der offensichtlich noch sehr, sehr wenig weiß, sollte vielleicht nicht unbedingt mit AWL anfangen, sonder mit FUP oder KOP. Die Grundlagen der SPS Abarbeitung sind bei allen gleich und sollten zwingend verstanden worden sein, bevor wil in der Gegend gesprungen.

Wenn dann in AWL noch über Ausgangszuweisungen gesprungen wird, sträuben sich mir die Nackenhaare. Dabei entsteht ein Code, den man nicht mehr nachvollziehen kann.

Damit meine ich aber nicht das Sprünge falsch wären, in Schleifen o.ä. machen sie sehr viel Sinn, aber ein Ausgang sollte in jedem Scan eine Zuweisung haben und zwar genau eine.

Gruss

Oliver
 
.
@ spsanfaenger

Ich glaube, du hast dir die Links aus
Beitrag #8 nicht einmal angeschaut.

Hier also nochmals ein weiterer LINK , der
dir die Sprungoperationen in AWL näherbringen
sollte.
 
Zurück
Oben