Wie kann man einen Sprung erstellen?

Tmbiz

Level-2
Beiträge
562
Reaktionspunkte
15
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo, ich habe nur sehr wenig Erfahrung in AWL aber muss nun in AWL Programmieren.

Ich möchte mich nun in Sprünge einarbeiten. Und erst mal verstehen wie das funktionierte. Daher wäre ich euch dankbar wenn ich mal einen Vorlage bekommen könnte.


mal angenommen, ich habe 2 Taster

U Ein
Sprung a wenn Ein = 0
S Test // solange Ein = 0 ist soll das Setzen nicht ausgeführt werden.
Ziel Sprung a


U Aus
Sprung b wenn aus = 1
R Test // solange Aus = 1 ist soll das Rück Setzen nicht ausgeführt werden.
Ziel Sprung b


Wie müsste ich das in AWL schreiben?
 
Zuletzt bearbeitet:
Schau dir mal unter der Hilfe den Befehl SPB an ( springe bedingt )

z.B.
U E 0.0
SPBN ENDE

Dieser Code hier wird nur ausgeführt, wenn E0.0 =1 ist.

ENDE : NOP0

oder

U E 0.0
SPB ENDE

Dieser Code hier wird nur ausgeführt, wenn E0.0 =0 ist.

ENDE : NOP0

Die Sprungmarke kannst du auch anders benennen ( z.B. M001 )
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau dir mal unter der Hilfe den Befehl SPB an ( springe bedingt )

z.B.
U E 0.0
SPBN ENDE

Dieser Code hier wird nur ausgeführt, wenn E0.0 =1 ist.

ENDE : NOP0

oder

U E 0.0
SPB ENDE

Dieser Code hier wird nur ausgeführt, wenn E0.0 =0 ist.

ENDE : NOP0

Die Sprungmarke kannst du auch anders benennen ( z.B. M001 )

Das will das Programm nicht fressen:
Sprung.PNG
 

Anhänge

  • Sprung.PNG
    Sprung.PNG
    4 KB · Aufrufe: 34
Zuletzt bearbeitet:
TIA 14. Ich habe den Fehler ich habe geschrieben

ende: NOP0

es muss aber sein ende: NOP 0

Was bedeutet das NOP eigentlich?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schaut nach TIA aus.
Im ersten Bild passen die Sprungmarken nicht zusammen, es muss immer Pärchen geben, sonst übersetzt er nicht.
Im zweiten Bild muss einfach ein Leerzeichen zwischen NOP und 0.
 
bei Mikroprozessoren und Mikrokontroller :
NOP = No Operation
dieser Befehl braucht nur speicher und zeit.

Bei Mikroprozessoren und Mikrokontroller wird damit eine definierte Zeit "gewartet".
Bei S5 + S7 nimmt man NOP 0 fürs Label, weil es leider nicht alleine stehen kann, und man keinen anderen Befehl dort plazieren "möchte".
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
U Ein
Sprung a wenn Ein = 0
S Test // solange Ein = 0 ist soll das Setzen nicht ausgeführt werden.
Ziel Sprung a


U Aus
Sprung b wenn aus = 1
R Test // solange Aus = 1 ist soll das Rück Setzen nicht ausgeführt werden.
Ziel Sprung b
Da haste Dir aber ein blödes Beispiel für Deine Sprünge ausgesucht!

Wenn Du das jemals so in einer echten Anlage programmieren solltest, wirst Du wahrscheinlich von der Instandhaltung gesteinigt.
Der Grund dafür liegt in den einzig übersprungenen Setze/Rücksetze-Befehlen, die VKE-abhhängig sind und damit nicht übersprungen werden müssen:
Code:
U  Ein
S  Test

UN Aus
R  Test

Ich wollte darauf noch einmal aufmerksam machen, da bei Einsteigern bzw. Umsteigern von Hochsprachen immer schnell die Möglichkeit besteht, dass man sich diesen umständlichen Code aus Deinem Beispiel angewöhnt.



PS: Lade- und Transferbefehle sind z.B. nicht VKE-abhängig und müssen daher übersprungen werden, wenn eine Bedingung für die Ausführung nicht zutrifft.
 
Zuletzt bearbeitet:
Da haste Dir aber ein blödes Beispiel für Deine Sprünge ausgesucht!

Wenn Du das jemals so in einer echten Anlage programmieren solltest, wirst Du wahrscheinlich von der Instandhaltung gesteinigt.
Der Grund dafür liegt in den einzig übersprungenen Setze/Rücksetze-Befehlen, die VKE-abhhängig sind und damit nicht übersprungen werden müssen:
Code:
U  Ein
S  Test

UN Aus
R  Test

Ich wollte darauf noch einmal aufmerksam machen, da bei Einsteigern bzw. Umsteigern von Hochsprachen immer schnell die Möglichkeit besteht, dass man sich diesen umständlichen Code aus Deinem Beispiel angewöhnt.



PS: Lade- und Transferbefehle sind z.B. nicht VKE-abhängig und müssen daher übersprungen werden, wenn eine Bedingung für die Ausführung nicht zutrifft.


U Ein
S Test

UN Aus
R Test

Wenn ich das so schreibe, denke ich immer, OHH das geht in eins durch. Ich bin so an Symbolisches Programmieren gewöhnt das ich immer denke wenn da nichts zwischen ist, geht das nicht.

In dem Fall wird UN Aus als etwas neues gesehen? Richtig? Wann sollte ich dann das SET einsetzen?
 
ja hucki diese leidigen IF THEN ELSE Orgien...

@TE wie hucki schon schreibt fuer Bitoperationen braucht man in der Regel keine Spruenge. Logische Verknuepfungen mit Zuweisungen bzw. Setze Ruecksetze sind meist uebersichtlicher und vor allem eindeutiger.
Fuer bedingte Zuweisungen von Analogwerten braucht mans aber....
Ausnahmen bestaetigen wie immer die Regel.
Gruss
 
Zuviel Werbung?
-> Hier kostenlos registrieren
U Ein
S Test

UN Aus
R Test

Wenn ich das so schreibe, denke ich immer, OHH das geht in eins durch. Ich bin so an Symbolisches Programmieren gewöhnt das ich immer denke wenn da nichts zwischen ist, geht das nicht.

In dem Fall wird UN Aus als etwas neues gesehen? Richtig? Wann sollte ich dann das SET einsetzen?

ne neue Verknuepfung beginnt immer nach = bzw. S bzw. R ....

SET brauchst Du um das VKE auf TRUE zu setzen:

SET
= A0.0

so funktioniert halt AWL, muss man eben lernen, wie alles andere auch.
 
U Ein
S Test

UN Aus
R Test

Wenn ich das so schreibe, denke ich immer, OHH das geht in eins durch. Ich bin so an Symbolisches Programmieren gewöhnt das ich immer denke wenn da nichts zwischen ist, geht das nicht.
Das ist auch symbolisch programmiert. Oder siehst Du dort etwa eine absolute Adresse?
;)


Ich vermute mal, dass Du eher diese blöde Angewohnheit von "Hochsprachen" meinst:
diese leidigen IF THEN ELSE Orgien...
:ROFLMAO:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In dem Fall wird UN Aus als etwas neues gesehen? Richtig?
Ja. Siehe AWL-Hilfe zum Statuswort - /ER Erstabfragebit. Die Zuweisungen =, S, R, und VKE-abhängige Sprungoperationen schreiben das /ER-Bit auf 0.

Wann sollte ich dann das SET einsetzen?
Das SET kann man auch nehmen wenn man sichergehen will, daß eine vorherige Verknüpfung abgeschlossen wird und eine neue Verknüpfung beginnt ("VKE-Abgrenzung", siehe Erstabfragebit /ER). Z.B. wenn man zum Debuggen testweise Anweisungen auskommentiert dann kommt auch vor, daß ein VKE-begrenzender Sprung oder eine Zuweisung auskommentiert werden soll. Da setzt man am besten ein SET hin, damit die nicht mehr abgeschlossene Verknüpfung nicht in die nächste Verknüpfung "verschleppt" wird. Oder wenn man eine lokale "Variablenbeobachtungstabelle" ins Programm einbaut wo man auch Bools beobachten will, dann muß man das mit einer VKE-abgrenzenden Anweisung beenden - da muß man nicht eine Dummy-Zuweisung auf irgendeine Bool-Variable einbauen, ein SET ist da perfekt geeignet.

Bei Sprungmarken "ohne" Anweisung schreibe ich "SET" anstatt dem üblichen "NOP 0", das tippt sich schneller und begrenzt auch gleich das VKE, was sonst nicht sicher wäre wenn die Sprungmarke mit nicht VKE-abhängigen Sprüngen (SPZ, SPM, ...) angesprungen wird.

Harald
 
Das ist auch symbolisch programmiert. Oder siehst Du dort etwa eine absolute Adresse?
;)


Ich vermute mal, dass Du eher diese blöde Angewohnheit von "Hochsprachen" meinst:

:ROFLMAO:

Ja da hast du recht. Ich meine mit Symbolen wie bei FUP denn da dann man immer eine "Kasten" sehen und der macht dann etwas. Ich bin noch so ungeübt in AWL das ich immer das Gefühl habe das alles was in einem Netzwerk steht "zusammen" gezogen wird. Ich bin daran gewähnt, immer nur einen Ausgang in einem Netzwerk. Aber in AWL wir immer Zeile für Zeile verarbeitet und mir ist manchmal nicht ganz klar wann eine "Operation" zu ende ist.
 
Auch in AWL kannst und solltest Du natürlich weiterhin die Netzwerke zum optischen Abtrennen verschiedener Funktionen untereinander nutzen.

Die Netzwerke wirken aber nicht VKE-begrenzend!
Also trotzdem die Hinweise von PN/DP verinnerlichen.
;)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Guten Tag,

bevor ich ein neues Thema mit einem ähnlichen Anliegen eröffne, könnt ihr mir vielleicht weiter helfen.
Ich bin derzeit dabei, ein Aufbau in der Ausbildung zu programmieren, mit S7.

Der Grundablauf steht und läuft auch ohne Probleme ab. Da bei dem Projekt keine Maginabfrage erfolgt, muss ich dies anders Lösen.
Und zwar war der Hintergedanke, dass wenn keine Farbe vom Modell erkannt wird, und das erste Zylinder wieder ein fährt (der die Teile austoßen tut) die Sprungleite an einem anderen Punkt weiter geführt wird, weil sich sonst das Programm "aufhängt".

Hier ein Auszug von meinem Programm:

J004: NOP 0
U 1A1 Sensor Eingefahren
U P6 Teil erkannt
SPBN J013

J013 ist entweder Das ende, dass er wieder ganz noch oben springt oder ein externe SPA die wiederrum erst quittiert warden muss mit einem Taster.

Aber das Problem ist anscheind, dass das program nach einem Ablauf direct nach oben springt und von vorne anfängt .

Kann da jemand aushelfen?
 
Hast Du evtl. ein Verständnisproblem zur Arbeitsweise von SPS?

Ein SPS-Programm wird generell von oben nach unten abgearbeitet und "springt" dann wieder zyklisch (oder bei bestimmten Ereignissen) nach oben und wird wieder nach unten abgearbeitet.
Ein SPS-Programm kann nicht in einer Schleife zwischen oben und unten verbleiben - da würde die Zykluszeitüberwachung die SPS in STOP schicken.

PS: Deine Frage hat mit dem Thema hier überhaupt nichts zu tun, außer das auch das Wort "Sprung" drin vorkommt. Es wäre besser gewesen, wenn Du ein eigenes Thema erstellt hättest.

Harald
 
Zurück
Oben