Step 7 Frage zu AWL Befehlen

MatthiasNm

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

ich versuche gerade einen AWL Code zu verstehen, dieser sieht so aus:

Code:
M001: NOP 0
U DB20.DBX1.0
SPBN M002
L 19
T DB30.DBX1.0
SET
= M9.0

M002:
L MW 10
L MW 11
<=I 
S M10.0
SET
R M11.0

  • Was ist der Unterschied zwischen den Befehlen S und SET?
  • Stimmt es, dass der Ladebefehl L 19 nicht ausgeführt, bzw übersprungen wird, wenn DB20.DBX1.0 logisch 1 ist?
  • Was passiert bei der Anweisung M002? Ist der SET Befehl notwendig oder würde ohne diesen das gleiche passieren?
  • Wird die Anweisung M002 immer bearbeitet? Auch dann, wenn DB20.DBX1.0 logisch 0 ist?
Ich würde mich über eine Erklärung sehr freuen.

Gruß
 
Moin MatthiasNm,

- S setzt aufgrund des vorhergehenden VKE eine Variable auf TRUE; SET setzt bedingungslos das VKE auf TRUE
- Nein. SPBN heißt: springe NICHT. Wenn das VKE TRUE ist, wird folglich nicht gesprungen. Ansonsten müsste der Befehl SPB M002 heißen
- M002: ist kein Befehl, sondern eine Sprungmarke. Mit SPBN M002 wird zur Marke M002 gesprungen.
- s.o.

VG

MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
In der Hilfe steht (Taste F1) unter SPBN: Wenn VKE=0 unterbricht SPBN den linearen Programmablauf und springt an das Sprungziel. Der Begriff Befehl ist in Bezug auf M002 falsch, ok ich meinte natürlich Sprungmarke.

  • Stimmt es, dass der Ladebefehl L 19 nicht ausgeführt, bzw übersprungen wird, wenn DB20.DBX1.0 logisch 1 ist? ----> das heißt dann, nein?
  • Wird die Anweisung M002 immer bearbeitet? Auch dann, wenn DB20.DBX1.0 logisch 0 ist? ---> ok, das verstehe ich so, dass die Sprungmarke M002 immer ausgeführt wird
Wenn DB20.DBX1.0 logisch 0 ist, dann heißt es springe nicht und der Befehl L 19 wird ausgeführt, ist er aber logisch 1, dann wird L 19 ausgeführt. Die Sprungmarke M002 wird unabhängig davon immer ausgeführt.
 
Zuletzt bearbeitet:
Moin MatthiasNm,

In der Hilfe steht (Taste F1) unter SPBN: Wenn VKE=0 unterbricht SPBN den linearen Programmablauf und springt an das Sprungziel. Der Begriff Befehl ist in Bezug auf M002 falsch, ok ich meinte natürlich Sprungmarke.
Ja, genau so ist es.

  • Stimmt es, dass der Ladebefehl L 19 nicht ausgeführt, bzw übersprungen wird, wenn DB20.DBX1.0 logisch 1 ist? ----> das heißt dann, nein?
Wenn DB20.DBX1.0 logisch 1 ist, wird L 19 ausgeführt, da das VKE vor SPBN nicht logisch 0 ist.
Code:
U DB20.DBX1.0    1                0
SPBN M002        kein Sprung        Sprung
L 19            L 19 wird        -
T DB30.DBX1.0    ausgeführt        -
...
M002: nop 0


  • Wird die Anweisung M002 immer bearbeitet? Auch dann, wenn DB20.DBX1.0 logisch 0 ist? ---> ok, das verstehe ich so, dass die Sprungmarke M002 immer ausgeführt wird
Nochmal: die Sprungmarke wird niemals "ausgeführt". Es wird nur ggf. da hingesprungen. Sie ist das Ziel, zu dem mit Sprungbefehlen gesprungen wird (SPA, SPB, SPBN, SPP, ...). DANACH folgen Anweisungen, die ausgeführt werden.

Wenn DB20.DBX1.0 logisch 0 ist, dann heißt es springe nicht und der Befehl L 19 wird ausgeführt, ist er aber logisch 1, dann wird L 19 ausgeführt. Die Sprungmarke M002 wird unabhängig davon immer ausgeführt.
Nein. s.o.

VG

MFreiberger
 
Es wird nur ggf. da hingesprungen. Sie ist das Ziel, zu dem mit Sprungbefehlen gesprungen wird (SPA, SPB, SPBN, SPP, ...). DANACH folgen Anweisungen, die ausgeführt werden. --> ggf. dahin gesprungen, das heißt die Anweisungen, die zu der Sprungmarke gehören werden NUR dann ausgeführt, wenn dahin gesprungen werden soll.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wo hast Du den Code gefunden? Oder hast Du den nur so als Beispiel getippselt?

"M002:" darf nicht alleine in einer Zeile stehen, hinter einer Sprungmarke muß zwingend eine Anweisung stehen, z.B. NOP 0
"T DB30.DBX1.0": ein Bit kann nicht Ziel einer Transfer-Anweisung sein

Harald
 
Moin MatthiasNm,

bist Du etwas mit AWL vertraut?
Weißt Du, was ein VKE ist?

SPBN heißt: Nur springen, wenn das VKE 0 ist. Sonst nicht springen. (SPringe Bedingt Null)


Code:
                    Status        VKE
U E0.0                1            0
U E0.1                1            1 (aufgrund dieses Wertes wird der Sprungbefehl ausgeführt)
SPBN M002            // Das VKE ist NICHT 0, deswegen wird NICHT gesprungen

L 19                // diese Anweisungen
T DB20.DBW0            // werden ausgeführt

M002:nop 0            // hier geht es (normal) weiter

------------------------------------------------------------------------------------------

                    Status        VKE
U E0.0                1            0
U E0.1                0            0 (aufgrund dieses Wertes wird der Sprungbefehl ausgeführt)
SPBN M002            // Das VKE ist 0, deswegen wird gesprungen

L 19                // diese Anweisungen
T DB20.DBW0            // werden NICHT ausgeführt

M002:nop 0            // hier wird hingesprungen und es geht (normal) weiter



Es wird nur ggf. da hingesprungen. Sie ist das Ziel, zu dem mit Sprungbefehlen gesprungen wird (SPA, SPB, SPBN, SPP, ...). DANACH folgen Anweisungen, die ausgeführt werden. --> ggf. dahin gesprungen, das heißt die Anweisungen, die zu der Sprungmarke gehören werden NUR dann ausgeführt, wenn dahin gesprungen werden soll.
Die Anweisungen, die nach der Sprunganweisung stehen, werden NUR dann ausgeführt, wenn NICHT gesprungen wird.

VG

MFreiberger
 
Du hast recht, ich hab den Code zwar "getippt" aber er existiert so in dem Programm. M002 darf nicht alleine stehen, richtig.

Code:
M001: NOP 0
U DB20.DBX1.0
SPBN M002
L 19
T MW100
SET
= M9.0

M002: NOP 0
L MW 10
L MW 11
<=I
S M10.0
SET
R M11.0

Ich hab den Merker in ein Bit verwandelt, natürlich sollte z. B. MW verwendet werden. Danke für den Hinweis
 
Zuviel Werbung?
-> Hier kostenlos registrieren
SPBN heißt: Nur springen, wenn das VKE 0 ist. Sonst nicht springen. (SPringe Bedingt Null) ----> hier liegt ein Missverständnis vor. Das habe ich verstanden.

Die Bausteine werden von oben nach unten abgearbeitet. Das Springen ist klar, aber ich habe nach der Sprungmarke M002 gefragt. Denn wenn nicht gesprungen wird, dann kommt der Programmablauf irgendwann an dieser Sprungmarke vorbei. Ich weiss, dass hingesprungen wird, aber ich wollte wissen was passiert wenn das nicht so sein sollte.
 
Moin MatthiasNm,

Wenn gesprungen wird, wird quasi NACH dem : der Sprungmarke weitergemacht.
Da die Sprungmarke nicht allein ohne Anweisung stehen kann, wird diese Anweisung ausgeführt (auch ein Grund für nop 0).

VG

MFreiberger
 
Code:
M001: NOP 0
U DB20.DBX1.0
SPBN M002
L 19
T MW100
SET
= M9.0
Das SET ist eigentlich unnötig, weil SPBN das VKE auf jeden Fall auf 1 setzt, erhöht aber die Verständlichkeit des Codes.
Für die Querverweisliste würde ich aber schreiben: S M9.0, dann sieht man schon in der QVL daß da M9.0 auf 1 gesetzt wird.

Code:
M002: NOP 0
L MW 10
L MW 11
<=I
S M10.0
SET
R M11.0
Dieses SET sorgt dafür, daß M11.0 auf jeden Fall auf 0 rückgesetzt wird, egal wie der Vergleich "MW10 <= MW11 ?" ausgeht. M10.0 wird nur gesetzt wenn der Vergleich WAHR ist (TRUE ergibt).

Harald
 
Zurück
Oben