Step 7 AWL Code Erklärung

MadMa

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

Da ich hier relativ neu bin kurz etwas über mich:
Ich habe Jahrelang mit C++ Programmiert und viel mit Arduino herum experimentiert.

Jetzt will ich mich Hobby bedingt etwas in SPS einarbeiten.
Ich bin 41 Jahre alt und habe 3 Kinder.

Ich habe heute eine Frage die meiner ersten Frage sehr ähnelt, aber ich habe festgestellt, dass ich mir so am leichtesten tue es zu lernen. Deshalb wäre ich sehr dankbar, wenn mir jemand bisschen den Code erklären könnte was da passiert.

Ich verstehe zum Beispiel nicht warum ich die Befehle mit U jetzt Hochlade und nicht mit L.
Außerdem versteh ich das mit den Netzwerken nicht ganz. Durchläuft das Programm immer als erstes Netzwerk 1 dann 2 dann 3... oder was sind Bedingungen, dass ein Netzwerk übersprungen werden kann (abgesehen von Sprunganweisungen).

In dem AWL Code geht es um den Totmannsknopf beim Lokführer der alle 50s gedrückt werden muss. Ansonsten ertönt ein Warnsignal für 15s und anschließend, wenn der Knopf nicht erneut betätigt wird, beginnt der Zug zu bremsen.

Netzwerk 1
U "Taster"
FP "TastM2"
= "TastEin"

Netzwerk 2
U "TastEin"
FN "TastM1"
= "TastVerz"

Netzwerk 3
U "TastVerz"
L S5T'5S
SS "TAlarm"
U "TastEin"
R "TAlarm"
NOP 0
NOP 0
U "TAlarm"
= "Alarm"

Netzwerk 4
U "Alarm"
L S5T#4S
SE "TBRemse"
U "TastEin"
R "TBremse"
NOP 0
LC "TBremse"
T "Restzeit"
U "TBremse"
= "Bremse"

Ich würde mich sehr über etwas Hilfe freuen!
Danke schon mal!
 
Guten Abend.

Zum Verständniss, eine SPS ist ja eine Ablaufsteuerung. D.h. es wird Zeile für Zeile abgearbeitet.
Es beginnt immer mit dem OB1 ( Operationsbaustein ), bei einem Neustart wird vor dem OB1 noch
der OB100 aufgerufen. Im OB 1 wird dann z.B. ein FB1 ( Funktionsbaustein ) aufgerufen.

D.h. OB1 ruft FB1 auf, FB1 wird Zeile für Zeile abgearbeitet und wenn die letzte Zeile fertig ist,
geht es in der OB1 Zeile unter dem FB1 Aufruf weiter. Wenn im OB1 die letzte Zeile abgearbeitet wurde,
geht es wieder von vorne los.

U ist im Prinzip kein Ladebefehl sondern eine Bedingung.

U E 0.0 Und Eingang 0.0
U E 0.1 Und Eingang 0.1
= A 0.0 Wenn beide Bedingungen gegeben wird A0.0 TRUE.

Geladen werden z.B. Werte ( INT, BYTE WORD... oder Timer )

D.H. man kann so z.B. rechnen

L MW 10 ( Lade Merkerwort 10 )
L MW 30 ( Lade Merkerwort 30 )
+I ( Addiere diese beide Zahlen )
T MW 50 ( Transferiere das Ergebniss in das MW50 )

Ohne Sprungbedingung ( SPB, SPBN, SPA... ) wird ein Netzwerk
oder Befehl nicht übersprungen. Es kann sein, dass CODE auf der
SPS nicht abgearbeitet wird, weil z.B. der Baustein gar nicht aufgerufen
wird ( im OB1 oder sonst wo ) mit z.B. CALL FC1

Mit Grüßen
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Auf den ersten Blick sieht der Code so aus, als sei er in KOP oder FUP geschrieben. Sicherlich lassen sich die meisten bis alle Netzwerke auch als KOP oder FUP anzeigen.

Der Code funktioniert genau so gut wenn er komplett in einem Netzwerk stehen würde. Auch die NOP 's sind für den Programmlauf irrelevant.
Aber nur in dieser Struktur (bestimmte NOP-, BLD-, Befehle, immer nur "ein Ergebnis" pro Netzwer (grob gesagt)) ermöglichen es, den Code zwischen KOP, FUP und AWL hin und her zu schalten.
 
U steht für die AND Bedingung. Du kannst damit 2 Boolsche Bedingungen verknüpfen.

Du kannst dir das so vorstellen, dass

Code:
U E10.0
U E10.1
= A 10.0

in anderen Programmiersprachen in etwa dem hier entspricht

Code:
If E10.0 AND E10.1 then
A10.1 = True
Else
A10.1 = False
Endif

Ein Netzwerk überspringen geht tatsächlich nur mit einer Sprunganweisung, deswegen heißt es ja Springen.
Wenn du aber in einem Netzwerk stehen hast:

Code:
Netzwerk 1
U E10.0
U E10.1
= A 10.0
und E10.0 ist False, wird das Netzwerk bearbeitet, hat aber wie eine If- Abfrage bei der die If- Bedingung False ist, keinen Effekt (Angenommen der Else Teil der If- Abfrage ist leer).

Dann gibt es noch O, was für eine Oder Abfrage steht, oder OR wenn du so willst. Gilt auch für Boolsche Abfragen bzw. Verknüpfungen.
 
Zurück
Oben