Step 7 Sprung SPBN

stalmoro

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

habe eine generelle Frage zu Sprüngen:

Wenn eine Bedingung für einen Sprung nicht erfüllt ist, wird die Sequenz nach der Sprungmarke trotzdem abgearbeitet im Zyklus, oder nicht?

z.B.

U M0.1
SPBN M001

Sequenz 1

M001: Sequenz 2

also die Frage ist wird die Sequenz 2 immer abgearbeitet, unabhängig davon, ob die Bedingung für Sprung erfüllt nicht oder nicht, oder nur dann, wenn der Sprung zu der Sprungmarke getätigt ist?

Danke im Voraus!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn du nicht möchtest, dass der Baustein im Falle von Sequenz 1 beendet wird, aus welchem Grund/Sinn auch immer,
dann müsstest du dein Programm folgendermaßen anpassen:
U M0.1
SPBN M001

Sequenz 1
BE

M001: Sequenz 2
 
IF..THEN..ELSE in AWL

Eine vollständige IF..THEN..ELSE sieht so aus:
Code:
IF "Bedingung" THEN
  Sequenz 1
ELSE
  Sequenz 2
END_IF

Sequenz 3
und wird in AWL so programmiert:
Code:
      U    "Bedingung"
      SPB  M001  //wenn erfüllt dann zu M001
      SPA  M002  //sonst (wenn nicht erfüllt) dann zu M002
                 //(SPA kann nicht entfallen!)
M001: ...
// Sequenz 1

      SPA  M003

M002: ...
// Sequenz 2

      SPA  M003  //(SPA kann entfallen)

M003: ...
// Sequenz 3
oder der Kopf andersrum formuliert:
Code:
      U    "Bedingung"
      SPBN M002  //wenn nicht erfüllt dann zu M002
      SPA  M001  //sonst (wenn erfüllt) dann zu M001
                 //(SPA und M001: kann entfallen)
M001: ...
// Sequenz 1

      SPA  M003

M002: ...
// Sequenz 2

      SPA  M003  //(SPA kann entfallen)

M003: ...
// Sequenz 3


Wenn es keinen ELSE-Zweig geben soll, dann kann man die zugehörige Marke M002 und einige SPA weglassen. (Ein SPA zur nächsten Zeile/Anweisung darunter ist überflüssig, weil der Programmablauf auch ohne SPA sowieso dahin geht.)
Code:
IF "Bedingung" THEN
  Sequenz 1
END_IF

Sequenz 3
Code:
      U    "Bedingung"
      SPB  M001  //wenn erfüllt dann zu M001
      SPA  M003  //sonst (wenn nicht erfüllt) dann zu M003 (hinter das END_IF)
                 //(SPA kann nicht entfallen!)
M001: ...
// Sequenz 1

      SPA  M003  //(SPA kann entfallen)

M003: ...
// Sequenz 3
oder
Code:
      U    "Bedingung"
      SPBN M003  //wenn nicht erfüllt dann zu M003 (hinter das END_IF)
      SPA  M001  //sonst (wenn erfüllt) dann zu M001
                 //(SPA und M001: kann entfallen)
M001: ...
// Sequenz 1

      SPA  M003  //(SPA kann entfallen)

M003: ...
// Sequenz 3
oder ohne alles überflüssige
Code:
      U    "Bedingung"
      SPBN M003  //wenn nicht erfüllt dann zu M003 (hinter das END_IF)

// Sequenz 1

M003: ...
// Sequenz 3


Achtung! In der Kopf-Abfrage den Sprung SPA nicht durch SPBN ersetzen!! Das funktioniert nicht!
Code:
      U    "Bedingung"
      SPB  M001
      [COLOR="#FF0000"]SPBN M002[/COLOR]  //!!! funktioniert so nicht !!! Weil das SPB davor das VKE=1 setzt!

      U    "Bedingung"
      SPBN M002
      SPB  M001  //funktioniert so, sollte man aber nicht machen, damit nicht irgendjemand das einfach umdreht

Harald
 
:confused:
BE ist aber doch das absolute BausteinEnde ... und M001 liegt dann im Jenseits/Nirvana!?
S7: BE markiert nicht das Bausteinende, sondern es ist lediglich ein unbedingter Rücksprung aus dem Baustein in den aufrufenden Baustein (ein Return). Hinter dem BE darf noch Code stehen, das BE kann ganz normal übersprungen werden. BE darf auch mehrmals im Code vorkommen.

Die S7-Operation BE ist mit der S5-Software nicht identisch. Bei S7 hat die Operation BE die gleiche Funktionalität wie die S5-Operation BEA.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
S7: BE markiert nicht das Bausteinende, sondern es ist lediglich ein unbedingter Rücksprung aus dem Baustein in den aufrufenden Baustein (ein Return). Hinter dem BE darf noch Code stehen, das BE kann ganz normal übersprungen werden. BE darf auch mehrmals im Code vorkommen.
Das habe ich Dir unbesehen geglaubt, Harald ... und trotzdem habe ich vorhin bei Siemens nachgesehen, weil mich interessiert hat, wie Siemens die "Situation" erklärt.
Die S7-Beschreibungen von BE und BEA gleichen sich, wie ein Ei demselben. Inkl. der Beispiele.
Lediglich beim BE zusätzlich der Verweis auf bzw. der Vergleich mit dem S5-BE und dem S5-BEA.
Kein Hinweis auf den S7-BEA beim S7-BE und keiner auf den S7-BE beim S7-BEA und dementsprechend auch kein SterbensWörtchen darüber, dass es 2 Befehle gibt, die sich durch nichts unterscheiden (ausser durch ihre Schreibweise). Keine Empfehlung, ob und wofür man welchen bevorzugt verwenden soll.
Klar, hier wurde dafür gesorgt, dass das Konvertieren von S5 auf S7 nicht unnötig behindert wird, aber für meine Begriffe übertrieben stillschweigend.

Sorry, ich habe also Unsinn behauptet :oops:

Gruss, Heinileini
 
Zurück
Oben