Step 7 AWL Programmcode übersetzen

Gehlem

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

Ich habe jetzt mal versucht den untenstehenden AWL Code in Step 7 in FUP nachzubilden. Es ist mir nicht gelungen. Ja ich weiß, dass nicht alles aus AWL in FUP übersetzt werden kann. Aber da ich AWL nicht gelernt habe komme ich hier einfach nicht weiter. Vielleicht kann mir ja jemand weiterhelfen und dieses Code in FUP darstellen?

ON E 1.0
O E 1.2
UN E 1.3
U E 1.4
U E 1.5
UN E 1.6
O(
U E 1.7
U E 2.0
UN E 2.1
U E 2.3
)
U E 2.4
= M 1.0


Vielen Dank...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit meiner Erfahrung finde ich die hier fehlenden AWL-Anweisungen (3 Klammern: "U(", "O(", "U(" und 3x Klammer zu ")" ), damit das ganze in KOP/FUP darstellbar wird.
Wenn es komplizierter wird, dann zeichne ich mir das gerne in KOP zusammen.

Den AWL-Code in KOP zeichnen:
1) ON + O : Parallelschaltung
2) UN ... : rechts hinter die O-Parallelschaltung 4x U-Reihenschaltung
3) O( : parallel zu Allem einen zweiten Zweig mit 4x U-Reihenschaltung
4) ) : die beiten Zweige am rechten Ende zusammenschalten
5) U : ganz rechts noch 1x U-Reihenschaltung
6) = : Zuweisung/Spule --( )

Das kann nun in FUP umgeschaltet werden und auch wieder in AWL und KOP.
Wenn man die 3 Klammern per Hand in AWL einfügt, dann werden bei der Umschaltung zu AWL die überflüssigen O-Klammern entfernt.
Die FUP-Darstellung sieht im Vergleich zur AWL-Vorlage sehr plausibel aus.

Harald
 
Hallo

Vielen Dank für die Antworten. Ich habe probiert es im Simatic Manager nachzubilden. Bin aber nie auf eine annähernde Lösung gekommen, die nur halb so aussieht, nachdem ich es von FUP in AWL übersetzt habe.
@PN/DP Ich versuche deine Anleitung mal zu verstehen und werde versuchen den Code in KOP umzusetzen.
@Heinileini Hast du diesen AWL Code in eine LOGO und konntest du daraus diesen Funktionsplan daraus übersetzen? Ich werde deinen Plan mal in Step 7 eingeben mal sehen was da an AWL rauskommt.
Danke erstmal an alle...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe den Code jetzt in Step 7 in FUP "programmiert". Anschließend habe ich es in AWL darstellen lassen. Sieht total anders aus als das was ich zu Beginn eingefügt habe. Dann habe ich den ersten AWL Code aus meiner ersten Beitrag und den Code in FUP simuliert. Die Merker habe ich natürlich unterschiedlich gewählt. Beim setzen/nicht setzen der Eingänge kommt das Gleiche raus.
Wie soll man da den Originalcode verstehen wenn es mind. 2 unterschiedliche Schreibweisen gibt in AWL??? 😩Unbenannt.JPGUnbenannt1.JPG
 
Die beiden Schreibweisen sind für einen AWL-Programmierer nicht wirklich unterschiedlich.
Es hat etwas damit zu tun wie der Interpreter UND bzw. ODER in der Abarbeitung wertet.
Dein oben geposteter Code ist manuell eingegeben - das haben viele so gemacht ... Ich persönlich habe allerdings AWL-Netzwerke immer so eingegeben, sofern es sinnvoll möglich war, dass sie auch nach KOP oder FUP umschaltbar waren ...
 
Ich habe den Code jetzt in Step 7 in FUP "programmiert".
Dein Code ist korrekt (y)

Wie soll man da den Originalcode verstehen wenn es mind. 2 unterschiedliche Schreibweisen gibt in AWL??? 😩
Es gibt noch weitere Schreibweisen. :cool: AWL-Code wird von oben nach unten abgearbeitet und jede Operation beeinflußt das aktuelle VKE an der Stelle und braucht selten Klammern. Ein Indiz, daß der Code direkt in AWL eingegeben wurde, ist für mich, wenn der Code "O("-Klammern enthält. Die sind nämlich in den meisten Fällen unnötig und kommen fast nur bei Handeingabe von AWL-Code vor. ("Angst"-Klammern)

Wenn man zunächst die für die FUP/KOP-Darstellung fehlenden Klammern einfügt, kommt man zu diesem Code:
U(
O(
U(

ON E 1.0
O E 1.2
)
UN E 1.3
U E 1.4
U E 1.5
UN E 1.6
)
O(
U E 1.7
U E 2.0
UN E 2.1
U E 2.3
)
)
U E 2.4
= M 1.0

Nun kann der Code in FUP und KOP dargestellt werden. Beim Zurückschalten in AWL sieht man dann, daß die überflüssigen O-Klammern entfernt wurden, und es kommt der von Dir gefundene Code 'raus.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich glaube das bei übersetzen immer der erste Befehl ein U sein sollte, zumindest nach IEC 61131-3. Normal wird nach der Norm das AWL Netzwerk mit L(D) IX.Y begonnen.
Bei Step7 ist das manchmal Versions abhängig.

@harald im AWL sind sicher noch andere Lösungen möglich, leider gibt es Programmierer die sich im Code verewigen.

Alex
 
Ich glaube das bei übersetzen immer der erste Befehl ein U sein sollte, zumindest nach IEC 61131-3. Normal wird nach der Norm das AWL Netzwerk mit L(D) IX.Y begonnen.
Mit dem "U" als erster Befehl einer Verknüpfung ist wohl ein hartnäckiges Gerücht von AWL-Programmierern, die das Konzept der Erstabfrage/VKE-Begrenzung nicht verstanden hatten. Bei Siemens AWL ist der erste Verknüpfungs-Befehl nach einer VKE-Begrenzung tatsächlich völlig egal, ob U oder O oder X, weil er bei /ER=0 immer einem "LD" wie in IEC IL entspricht.
Wenn die vorherige Verknüpfung nicht abgeschlossen (begrenzt) ist, dann "heilt" auch ein U nicht diesen Fehler, sondern setzt die Verknüpfung fehlerhaft fort. Ein U ist genauso "falsch" wie O oder X.
Ein generelles "erzwungenes" LD nach IEC hilft dem Compiler allerdings ein kleines bisschen mehr, vom Programmierer ungewollte Fehler zu erkennen und zu melden.

Bei Step7 ist das manchmal Versions abhängig.
Nein, nie versionsabhängig. Das ist schon mindestens seit Step5 immer so.

Harald
 
Danke nochmal für die Erklärung.
Dein Code ist korrekt (y)


Es gibt noch weitere Schreibweisen. :cool: AWL-Code wird von oben nach unten abgearbeitet und jede Operation beeinflußt das aktuelle VKE an der Stelle und braucht selten Klammern. Ein Indiz, daß der Code direkt in AWL eingegeben wurde, ist für mich, wenn der Code "O("-Klammern enthält. Die sind nämlich in den meisten Fällen unnötig und kommen fast nur bei Handeingabe von AWL-Code vor. ("Angst"-Klammern)

Wenn man zunächst die für die FUP/KOP-Darstellung fehlenden Klammern einfügt, kommt man zu diesem Code:
U(
O(
U(

ON E 1.0
O E 1.2
)
UN E 1.3
U E 1.4
U E 1.5
UN E 1.6
)
O(
U E 1.7
U E 2.0
UN E 2.1
U E 2.3
)
)
U E 2.4
= M 1.0

Nun kann der Code in FUP und KOP dargestellt werden. Beim Zurückschalten in AWL sieht man dann, daß die überflüssigen O-Klammern entfernt wurden, und es kommt der von Dir gefundene Code 'raus.

Harald
Hier steige ich nicht wirklich durch. Hier sind mir zuviel UND und ODER Klammer. Da ist der erste Code den ich eingeben habe, nachdem ich den Code in FUP gesehen habe, einfacher nachzuvollziehen. Für mich ist es wichtig den Code wie es der Programmierer damals für unsere Anlage geschrieben hat, also dann direkt eingegeben in AWL, diesen in FUP umzuschreiben, damit ich den AWL Code verstehe. Vielleicht verstehe ich irgendwann AWL auch. Ein wichtger Hinweis ist denke ich mal das jede Zeile das VKE beeinflusst und das man den Code von oben nach unten lesen muss.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Mit dem "U" als erster Befehl einer Verknüpfung ist wohl ein hartnäckiges Gerücht von AWL-Programmierern, die das Konzept der Erstabfrage/VKE-Begrenzung nicht verstanden hatten.
...
Nein, nie versionsabhängig. Das ist schon mindestens seit Step5 immer so.
Es gab durchaus S5-CPUs, die das Konzept der ErstAbfrage nicht verstanden hatten. ;)
Ich erinnere mich an die Begegnung mit einer solchen CPU, bei der sich genau der "Fehler" zeigte, dass als ErrstVerknüpfung O statt U bzw. ON statt UN programmiert worden war. Damals war ich überhaupt nur deshalb auf die ProblemLösung gekommen, weil ich in irgendeiner SiemensDoku gelesen hatte, dass mit U bzw. UN begonnen werden muss. X bzw. XN gab es bei S5 noch nicht.

Doch. Bei S5 gab es also tatsächlich ein CPU-abhängiges Verhalten.
Wenn die vorherige Verknüpfung nicht abgeschlossen (begrenzt) ist, dann "heilt" auch ein U nicht diesen Fehler, sondern setzt die Verknüpfung fehlerhaft fort. Ein U ist genauso "falsch" wie O oder X.
Ein generelles "erzwungenes" LD nach IEC hilft dem Compiler allerdings ein kleines bisschen mehr, vom Programmierer ungewollte Fehler zu erkennen und zu melden.
Was Du hier beschreibst, ist etwas ganz anderes, Harald. Dass eine (versehentliche) nicht abgeschlossene Verknüpfung (z.B. durch Auskommentieren von Befehlen beim Testen) zu zwangsläufigen Fehlern in der nächsten Verknüpfung führen kann, ist unmittelbar einleuchtend und sicherlich kein versionsabhängiges Phänomen.

Das Konzept "ErstAbfrage/VKE-Begrenzung" gab es meines Wissens nur bei Siemens. Diese "automatische Erkennung" einer ErstVerknüpfung mit recht einfachen Mitteln ermöglichte es, auf die speziellen OP-Codes (LD, LDN kombiniert mit den Operanden A, E, M, D, T, Z) zur Kennzeichnung einer ErstVerknüpfung zu verzichten. Vermutlich in der Absicht, möglichst viele Reserven für zukünftige Erweiterungen des Befehlssatzes offen zu halten.

Edit:
Da ist der erste Code den ich eingeben habe, nachdem ich den Code in FUP gesehen habe, einfacher nachzuvollziehen. Für mich ist es wichtig den Code wie es der Programmierer damals für unsere Anlage geschrieben hat, also dann direkt eingegeben in AWL, diesen in FUP umzuschreiben, damit ich den AWL Code verstehe. Vielleicht verstehe ich irgendwann AWL auch.
Das ist nur eine Frage der Übung im Umgang damit. Ich finde AWL einfacher als FUP, weil ...
Ein wichtger Hinweis ist denke ich mal das jede Zeile das VKE beeinflusst und das man den Code von oben nach unten lesen muss.
Man muss nicht nur von oben nach unten lesen, man darf es auch bzw. man darf sich darauf verlassen, dass dies funktioniert und der AWL-Code dadurch eindeutig ist. Für FUP sieht das schon komplizierter und weniger eindeutig aus, weil es hier ausser "von oben nach unten" auch noch die Richtung "von links nach rechts" gibt. Da kann man bei FUP gelegentlich ins Grübeln kommen, welche Richtug den Vorrang hat. In dieser Beziehung ist AWL wirklich einfacher als FUP.

@ Heinileini Hast du diesen AWL Code in eine LOGO und konntest du daraus diesen Funktionsplan daraus übersetzen?
Die LOGO! kennt kein AWL. Sie kann nur von FUP in KOP bzw. von KOP ind FUP umwandeln (wenn überhaupt ;) ).
Und FUP bei der LOGO! ist eine ganz andere Welt als FUP bei sonstigen Steuerungen. Zuerst LOGO!-FUP zu erlernen, um damit den Einstieg in andere FUPs zu erleichtern, das funktioniert leider nicht wirklich!
Ich habe nur deshalb LOGO!-FUP gewählt, weil ich es zur Verfügung habe und mich davor scheue, die Kästchen und Verbindungen "zu Fuss" zu malen. Reine Bequemlichkeit meinerseits.
Die Umwandlung von AWL in FUP habe ich "im Kopf" gemacht, ganz ohne Unterstützung durch irgendein Programm.
 
Zuletzt bearbeitet:
Hier steige ich nicht wirklich durch. Hier sind mir zuviel UND und ODER Klammer. (...) Vielleicht verstehe ich irgendwann AWL auch. Ein wichtger Hinweis ist denke ich mal das jede Zeile das VKE beeinflusst und das man den Code von oben nach unten lesen muss.
Zwei Operanden mit O verknüpfen und dann mit U fortsetzen: AWL braucht da keine Klammern, weil die sequenzielle Abarbeitung mit und ohne Klammer zum selben Ergebnis kommt. Für die "Rückumwandlung" von AWL-Code zu FUP/KOP werden aber bestimmte Anweisungs-"Makros" erwartet/benötigt, z.B. Klammern und oft "NOP 0" an bestimmten Stellen für optionale Inputs und Outputs von FUP/KOP-Boxen.

(1) Im Code muß als erstes eine U-Klammer um die O-Verknüpfung.
(2) Dann muß der ganze Teil vor dem "O(" ebenfalls eine O-Klammer erhalten (oder man ist so clever/schlau/erfahren, daß man die vorhandene O-Klammer gleich entfernt - das kann man aber besser dem FUP/KOP-Compiler überlassen. Man darf zusätzliche überflüssige Klammern verwenden).
(3) Für die abschließende U-Verknüpfung nach den O-Klammern muß der komplette erste Codeteil in eine U-Klammer gesetzt werden:

(3) U(
(2) O(
(1) U(
ON E 1.0
O E 1.2
(1) )
UN E 1.3
U E 1.4
U E 1.5
UN E 1.6
(2) )
O(
U E 1.7
U E 2.0
UN E 2.1
U E 2.3
)
(3) )
U E 2.4
= M 1.0
 
Es gab durchaus S5-CPUs, die das Konzept der ErstAbfrage nicht verstanden hatten. ;)
Ich erinnere mich an die Begegnung mit einer solchen CPU, bei der sich genau der "Fehler" zeigte, dass als ErrstVerknüpfung O statt U bzw. ON statt UN programmiert worden war. Damals war ich überhaupt nur deshalb auf die ProblemLösung gekommen, weil ich in irgendeiner SiemensDoku gelesen hatte, dass mit U bzw. UN begonnen werden muss. X bzw. XN gab es bei S5 noch nicht.

Doch. Bei S5 gab es also tatsächlich ein CPU-abhängiges Verhalten.
Aha. Solche S5-CPUs kenne ich nicht. Ich weiß aber, daß es Hinweise gab, daß Verknüpfungen mit U begonnen werden sollten. Daher wohl die verbreitete Angewohnheit und das Gerücht, daß das bei generell allen S5 und auch bei S7 notwendig wäre. Bei S7 ist es aber definitiv nie nötig.

Die Umwandlung von AWL in FUP habe ich "im Kopf" gemacht, ganz ohne Unterstützung durch irgendein Programm.
Wenn man weiß, wie bei der sequenziellen AWL-Abarbeitung bei jeder Anweisung das VKE und andere Statusbits beeinflußt werden, dann ist es in der Tat sehr einfach, den AWL-Code komplett neu in FUP/KOP (für irgendeine SPS) einzugeben (ich bevorzuge KOP). Dann ist man auch sehr nahe dran, was sich der ursprüngliche AWL-Programmierer bei der Programmierung gedacht hatte.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn ich von meinem zuerst geposteten Code die UND's mit den ODER tauschen würde und andersherum würde der AWL Code dann so aussehen? Ob das jetzt Sinn macht oder nicht, ich möchte wie gesagt den Code des Programmieres in meiner Anlage in FUP darstellen.

Im ersten Bild, Netzwerk 2 habe ich wie gesagt den Tausch durchgeführt. Im Netzwerk 3 habe ich davon den Code in FUP erstellt. Hoffe das stimmt so??? Habe es nachdem Prinzip gemacht von gestern, wie der ursprünbgliche Code in FUP umgeschrieben wurde.

Im 2. Bild habe ich den Code im Netzwerk 3 in AWL darstellen lassen. Hier ist jetzt die ein oder andere Klammer dazu gekommen. Die große Frage ist jetzt, ist das alles jetzt das Gleiche? Ich werde es heute nachmittag auch nochmal simulieren.
Unbenannt1.JPGUnbenannt.JPG
 
Das Original ist meiner Meinung nach extrem schlechter Programmierstil.Alles kann man mit Und-Oder Verknüpfungen eindeutig und klar(strukturiert) Nachprogrammieren.Die Einzelnen Zweige sieht man dann im FUP schön.Mag sein das man in dem Einen oder anderen Fall grössere Netzwerke braucht, das sollte man dann trotzdem in kauf nehmen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Original ist meiner Meinung nach extrem schlechter Programmierstil.
Viele Programmier fühlen sich irgendwann nach der Anfänger-Phase als "Experten", die mit textuellen Programmiersprachen (AWL, SCL) viel besser und schneller und kürzer programmieren können, und halten oft die grafischen Programmiersprachen (FUP, KOP) für "Malen nach Zahlen für Kinder" ;)

Wenn das Programm schön übersichtlich in FUP oder KOP programmiert ist, dann kann das fast jeder verstehen, diagnostizieren und ggf. anpassen, und der Original-Programmierer gilt dann nicht mehr als unersetzbarer "Zauberer" ;)

Harald
 
Für Logik ist KOP oder FUP zu bevorzugen.In den meissten Fällen ist das die PS die zu bevorzugen ist.
Ich kenne gar nicht soviele Anwendungen wo man SCL braucht.Wer viel rechnet und Formeln benutzt, kann SCL benutzen.
Aber die Grundstruktur des Programms sollte eben FUP oder KOP bleiben.Die Berechnungen können dann noch im FB oder FC versteckelt werden.
Gut programmiert ist einfach programmiert, sodaß es jeder versteht.
 
Zurück
Oben