AWL Code in schaltalgebra

Zuviel Werbung?
-> Hier kostenlos registrieren
Onkel Dagobert schrieb:
Code:
U		E0.0
O		E0.1
U		E0.2
O		E0.3
U		E0.4
O		E0.5
U		E0.6
=		A0.0

Der Code von Onkel Dagobert muss wie folgt in STEP 7 AWL programmiert werden, damit er in STEP 7 FUP übersetzt werden kann.

Der Code in Netzwerk 1 entspricht dabei dem Code in Netzwerk 2.

Gruß Kai
 

Anhänge

  • step7-fup.jpg
    step7-fup.jpg
    99,2 KB · Aufrufe: 136
  • step7-awl.jpg
    step7-awl.jpg
    81,6 KB · Aufrufe: 133
Hallo Kai,
der Code von Onkel Dago in Netzwerk 1 ist in STEP7 syntaktisch nicht besonders sinnvoll.
Es wird auch nicht dadurch besser, dass Du dass jetzt wiederholst.

Gruß
Question_mark
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Question_mark,

es geht hier nicht darum, ob der Code von Onkel Dagobert besonders sinnvoll ist oder nicht.
Du hast scheinbar den Sinn oder Unsinn des gesamten Threads nicht verstanden.
Im übrigen lass das mal meine Sorge sein, was ich hier poste und was nicht.

Gruß Kai
 
Ach Kai,
Kai schrieb:
Im übrigen lass das mal meine Sorge sein, was ich hier poste und was nicht.
Du darfst doch selbstverständlich soviel posten wie Du möchtest und kannst. Und sogar was Du möchtest.

Gruß
Question_mark
 
Hey,

streitet euch nicht. Kai hat recht. Ich brauche wohl mal eine Pause, und die mache ich jetzt. Entschuldigung.


Gruß, Onkel

Nachtrag:
Was aber stimmt, ist ein Unterschied zu Bosch.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
der Gast war ich. Login war mal wieder weg, ich komm einfach mit diesem neumodischem Zeug nicht zurecht. Es ist sowieso schon schwierig für mich, wenn ich mal wieder Glühlampen in der Firma wechseln muss, den Bedarfsschein am Computer einzugeben. Letztes Mal hatte ich doch statt 4 Glühbirnen a 40 Watt eine Palette mit 4000 Leuchtstofflampen bekommen.

Gruß
Question_mark
 
Hallo,
Kai schrieb:
Du hast scheinbar den Sinn oder Unsinn des gesamten Threads nicht verstanden.
Bis zu Onkel Dago's Vergleich zwischen STEP7 und Bosch hatte dieser Thread einen Sinn, der auch mir nicht verschlossen blieb. Der Vergleich zwischen syntaktisch falschem S7 AWL-Code und einem Bosch AWL-Code (die korrekte Bosch-Syntax dazu kann ich nicht beurteilen) nach Umsetzung in FUP durch das jeweilige Programmiersystem ist Quatsch und dazu habe ich Stellung genommen. Das ist meine Meinung und Punktum.
Jeder mag seine Meinung dazu posten oder auch nicht, ein Forum lebt ja schließlich von kontroversen Standpunkten.

Gruß
Question_mark
 
Butter bei die Fische ...

Geiler Thread ...

Ich darf mal auch mein "gefährliches Halbwissen" dazu äußern:

Meiner bescheidenen Erfahrung nach gibt es eklatante Unterschiede zwischen Bosch, Siemens sowie zwischen S7-200, S7-300 usw. Kann deshalb nicht einmal ansatzweise einschätzen was Sache ist und was nicht. Vielleicht hilft es allen nicht irgendwelche Meinungen oder Beispiele zu posten, sondern mal mit Quellangaben einzelne Behauptungen zu unterlegen (z.B. unterschiedlich starke Bindung von U und O).

Mein "gefährliches Halbwissen" (erworben auf einer S7-200) sagt mir jedenfalls, dass AWL eine interpretierte Sprache ist. Die heisst AnweisungsListe, weil die Anweisungen der Reihe nach, d.h. zeilenweise, ausgeführt werden. Das führt mich zum Schluss, dass es so etwas wie eine unterschiedlich starke Bindung von U und O gar nicht geben kann, da der Interpreter dafür "nach Vorne" schauen können müsste, ob nicht ein stärker bindender Operator als der aktuelle, später in der Liste auftaucht. Würde der Code nicht interpretiert sondern compilert sähe das ganze schon anders aus. Da ist es durch die semantischen Analyse möglich auf unterschiedlich starke Bindung einzugehen. So das waren meine "2 Cent". Im Handbuch der S7-200 finde ich jedenfalls nichts über unterschiedlich starke Bindungen der Operatoren. Deshalb kann ich hier auch keine Quellen angeben. Andere Handbücher stehen mir nicht zur Verfügung, Bitte da mal ganz genau nachlesen ob da wirklich was über eine unterschedlich starke Bindung drinsteht und in welchem Kontext das gilt. Ich könnte mir zum Beispiel glatt vorstellen, dass hier AWL (interpretiert) und SCL (compiliert) durcheinandergeworfen werden. Des Weiteren bin ich mir nicht sicher ob die Umwandlungen zwischen AWL, SCL, KOP und FUP wirklich immer korrekt durchgeführt werden. Zum Ausführen von KOP, FUP und SCL müssen diese in AWL umgewandelt (compiliert) werden, während AWL allein ja nur interpretiert wird. Könnte mir glatt vorstellen, dass die Umwandlung keine Äquivalenzumformung darstellt. Es ist ja durchaus etwas beunruhigend, dass in den Vorposting von Bosch-FUP und Siemens-FUP gesprochen wird, d.h. FUP scheinbar nicht gleich FUP ist. Aber das ist nur eine Vermutung, da ich weder mit SCL, KOP oder FUP je gearbeitet habe, Ich halte mich generell immer an AWL, da es eben näher an der tatsächlichen arbeitsweise der CPU dran ist.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Halllo und :lol:,

Kai hat definitiv recht. Ein AWL-Programmierer würde mit seinem Code genau das erreichen was Kai umgewandelt hat. Das Step7 das nicht wandeln kann wundert mich allerdings, aber das liegt wohl an den Einschränkungen bei FUP/KOP.

Mir ist auch nicht klar warum der Code "Sinnlos" sein sollte. Ich habe auch schon die ein oder andere sps gesehen und die die ich kenne arbeiten alle so.
Ich kann mir auch nicht vorstellen das es bei Bosch anders sein soll.

Aber die Krone ist die Behauptung das dass seit den anfängen der Digitaltechnik gültige Schaltalgebra wohl Unfug sein muß :lol:

Das ein solch kurzes Codeschnipsel überhaupt zu so einer Verwirrung führen kann, finde ich auch lustig. Mit einem Stift und einem Blatt Papier ließe sich das sehr einfach darstellen, und auch in KOP sieht der Elektriker sehr schön wie das zu lesen ist.

Edit: Das von Dagobert dargestelltei n KOP ist auch falsch.


Torsten
 
Torsten05 schrieb:
Aber die Krone ist die Behauptung das dass seit den anfängen der Digitaltechnik gültige Schaltalgebra wohl Unfug sein muß :lol:

Ich nehme mal an du beziehst duch auf mein Posting. Ich bin also immer noch bei der S7-200 und sage mal: Da spricht doch überhaupt niemand von Schaltalgebra, sondern nur von Stackoperationen. Siehe S7-200 Automatisierungsystem Systemhandbuch Seite 77 - Stackoperationen. Die AWL Befehle U sowie O verbinden den angegebenen Operanden mit dem obersten Stackwert. Das geschieht sofort, d.h. unabhängig davon was für Befehle folgen und unabhängig von dem was sonst noch so auf dem Stack liegt.
 
Hallo

Ja, das stimmt, nur ist bei einem U Befehl wichtig wie das VKE vor diesem Befehl war, bei einem O ist es Egal. Ist der Operand beim Oder = True, oder 1, ist das VKE 1, egal was auch davor stand oder wie das VKE vorher aussah.
Das ist doch schon ein Unterschied.

Im Übrigen ist KOP schon KOP und FUP=FUP. Wie soll ein Hersteller rechtfertigen das er seine eigene Logik hat mit der keiner klarkommt, weil sie einfach falsch ist. Etwas anders sieht es bei AWL aus. Da könnte ich mir schon vorstellen das einige Dinge anders zu handeln sind, weil es eben keinen AKKU 1 und 2 gibt denn man so wie in der S7-300 ansprechen kann.

Das sieht man dann dran was übersetzt rauskommt wenn man von FUP/KOP in awl wandelt.

Torsten
 
Torsten05 schrieb:
Ja, das stimmt, nur ist bei einem U Befehl wichtig wie das VKE vor diesem Befehl war, bei einem O ist es Egal. Ist der Operand beim Oder = True, oder 1, ist das VKE 1, egal was auch davor stand oder wie das VKE vorher aussah.
Das ist doch schon ein Unterschied.

Und inwiefern veranlasst das jetzt eine nicht mehr sequentielle Abarbeitung der Stackoperationen? Ich glaub du verwechselst immer noch Schaltalgebra mit Stackoperationen. Ich kenne die S7-300 nicht. Meine Vermutung ist inzwischen, dass man bei der irgendwie auch Ausdrücke aus der Schaltalgebra verwenden kann. Bei der S7-200 gibt es das aber nicht. Da gibt es NUR Stackoperationen. Ich lass mich jetzt auch mal zu einem Beispiel von der S7-200 hinreissen:

LD E0.0 // läd E.0.0 in den Stack
O E0.1
O E0.2
U E0.3
= A0.0

A0.0 geht bei mir auf 1 sobald E.03 und mind. einer von E0.0, E0.1 oder E0.2 an ist. Das entspricht dem vollständig geklammerten Ausdruck:

( ((E0.0 oder E0.1) oder E0.2) und E0.3 )

Nach deiner Aussage soll ja angeblich auch auf Stackoperationen UND stärker binden als ODER. Der AWL Code würde dann dem folgenden Ausdruck entsprechen:

( E0.0 oder ( E0.1 oder (E0.2 und E0.3) ) )

Damit würde es aber auch ausreichen E0.0 auf auf 1 zu setzen um A0.0 einzuschalten. Tut es aber nicht. Glaub es mir jetzt einfach mal. Hab es eben auch noch extra ausprobiert.

FAZIT:

Die Steuerungen arbeiten allesamt sehr unterschiedlich. Da hilft wirklich nur ein Blick ins Handbuch. Deswegen sollten alle hier genau angeben auf welcher SPS sie arbeiten und ggf. dann auch noch Quellangaben machen.

Im Übrigen ist KOP schon KOP und FUP=FUP. Wie soll ein Hersteller rechtfertigen das er seine eigene Logik hat mit der keiner klarkommt, weil sie einfach falsch ist. Etwas anders sieht es bei AWL aus. Da könnte ich mir schon vorstellen das einige Dinge anders zu handeln sind, weil es eben keinen AKKU 1 und 2 gibt denn man so wie in der S7-300 ansprechen kann.

Das sieht man dann dran was übersetzt rauskommt wenn man von FUP/KOP in awl wandelt.

Das war ja auch nicht meine Aussage (Siemens-FUP!=Bosch-FUP). Die habe ich weder bejaht noch verneint. Insofern müsstest du dich an den Orginalposter wenden (c;
 
Hallo,


caret schrieb:
Nach deiner Aussage soll ja angeblich auch auf Stackoperationen UND stärker binden als ODER. Der AWL Code würde dann dem folgenden Ausdruck entsprechen:
...
FAZIT:

Die Steuerungen arbeiten allesamt sehr unterschiedlich. Da hilft wirklich nur ein Blick ins Handbuch. Deswegen sollten alle hier genau angeben auf welcher SPS sie arbeiten und ggf. dann auch noch Quellangaben machen.


Was reine Bitverknüpfungen angeht können die gar nicht unterschiedlich arbeiten. Wie ich schon schrieb: Wem willst du so ne Steuerung verkaufen bei der Bitaritmethik nach Lust und Laune gemacht wird. Intern passiert bei der S7-200/300 vielleicht was anderes, aber nach aussen machen die genau das gleiche. Der Unterschied besteht darin das du bei ner 300er Klammern setzt, und bei der 200er durch OLD und ULD mit dem Ergebnis auf dem Stack arbeitest.

U E1.1
O E1.2
U(
U E 1.3
U E1.4
O E1.5
)
U E1.6

ergibt auf der 300er das gleiche wie das auf der 200er dieses:

LD E1.1
O E1.2
LD E1.3
U E1.4
O E1.5
ULD
U E1.6

Das Programm wird immer noch sequentiell abgeabeitet, aber durch das arbeiten mit dem Stack werden Zwischenergebnisse benutzt, die genaugenommen die Reihenfolge der Vernküpfung ändern.
Vermutlich wird in der 300er bei erkennen einer Klammer das gleiche gemacht wie bei der 200er beim erkennen eines LD-Befehls, nämlich das Zwischenergenis auf den Stack gepackt. Nach dem schliessen der Klammer (300) oder einem ULD/OLD (200er) wird das Ergenbis in der Klammer mit dem Wert auf dem Stack vernküpft.

In AWL ist man eh immer bemüht Klammern zu vermeiden und durch die Reihenfolge der programmierung diese zu umgehen. Wenn man als AWL programmierer sich anguckt was aus einer Verknüpfung wird wenn man sie von FUP oder KOP umwandelt bekommt man schon mal Bauchschmerzen. IMO kommt daher auch das Gerücht AWL wäre schwerer zu lesen. Ist es IMO aber nicht wenn man es gleich in AWL macht.


Torsten

Edit: Wenn es dir nur darum geht einen Operanden mit dem Stack zu verknüpfen hast du recht, es gibt keine Bevorzugung.
Wenn du 3+7 rechnest ist die Regel "Punkt vor Strich" natürlich Witzlos, es gibt ja nur eine Operation. Wenn aber mehr ins Spiel kommen gilt die Regel. Hoffentlich auch für SPS Hersteller !
Man kommt aber nicht immer mit einer Operation aus. Und man fährt auch schlecht wenn man die hälfte der Rechnung weglässt um dann zu sagen "Punkt vor Strich, wer braucht das schon"...
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hi Onkel Dagobert,

Was s5 bzw s7 betrifft bin ich auch der Meinung von HDD.
Bei anderen Steuerungen will ich mich raushalten -->kenne ich leider nicht.

Mein Komentar ist an der falschen Stelle gelandet. Ich hatte übersehen das es noch mehr Seiten zu dem Beitrag gibt.
 
Torsten05 schrieb:
Was reine Bitverknüpfungen angeht können die gar nicht unterschiedlich arbeiten.
Worüber diskutieren wir eigentlich? Hab doch nichts anderes bahauptet. Der ursprüngliche Code war doch:

U E 1.0
O E 2.0
U E 3.0
= A 1.0

Reply von Seeba war, das es folgedem Ausdruck entspricht:

E1.0 oder (E2.0 und E3.0) = A 1.0

Reply von Gast:

Der Eingang E1.0 bewirkt gar nichts bzw. hat keinen Einfluss auf A1.0.

Reply von Student:

UND bindet ja stärker als ODER

Hallo? Gehts noch? Mein Post besagte, das das alles schon allein deshalb nicht sein könne da AWL interpretiert wird und nicht compiliert wird. Insbesondere ist so etwas wie eine stärkere Bindung damit gar nicht möglich zu realisieren. Da die obigen Posts aber alle das Gegenteil behaupten sollten die doch mal bitte ein paar Quellangaben machen. Könnte ja sein, dass das bei den verschiedenen Steuerungen anders implementiert ist. Aus eigener Erfahrung weiss ich, dass bei Siemens vieles anders gehandhabt wird als der Rest der Welt es macht. Und zumindest mit dem Reply von Gast assoziere ich dass er zu diesem Ergebnis kommt, weil er es ausprobiert hat. Und dann kommt man doch ins grübeln, oder? Aber so wie ich das jetzt sehe hat der das gar nicht getestet und der Post war einfach nur Unfug,
 
Hallo und sorry,

aber hier verliert man schonmal den Überblick wer was postet, da einige Stammuser immer noch hin und wieder als Gast posten.

Egal, Hauptsache alle sind nun verwirrt :lol:

Torsten
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

Torsten05 schrieb:
..Egal, Hauptsache alle sind nun verwirrt :lol: ..Torsten
Ich bin untröstlich :cry: .

Ok, ich habe mich mit der Umsetzung von AWL nach FUP und „UND-VOR-ODER“ wieder einmal prächtig blamiert. In der Praxis passiert mir das weniger, da ich Klammern setze wie es jeweils notwendig ist.
Der Grund warum ich mich überhaupt geäußert hatte war, den Unterschied zwischen Siemens und z.Bsp. Bosch deutlich zu machen. Wenn man diese Unterschiede nicht kennt, kann man nämlich nicht einfach einen S7-AWL-Code nach den allgemeinen Regeln der Boolschen Logik in Schaltalgebra umsetzen. Man muss die Philosophie des jeweiligen Herstellers berücksichtigen. Da manche ihr eigenes Süppchen kochen, kann man schon mal durcheinander kommen, auch bei einfachsten Verknüpfungen.

Interessenten finden hier ein Einsteigerbuch zur CL150 von Bosch. Auf Seite 31 sind zwei Beispiele dargestellt, welche es noch einmal verdeutlichen.
Betrachten wir mal das erste Beispiel. Nehmen wir den AWL-Code und kopieren ihn in S7. Ohne E1.3 = true würde in Step7 der Ausgang nicht kommen, richtig? Bei Bosch schon, wenn die ersten beiden Anweisungen erfüllt sind.


Frohes Fest, Onkel
 
Hallo Onkel,

ich habs mir mal angeguckt und versteh nun auch was du meinst. Sehr seltsam was da bei Bosch abgeht. Das sehe ich so das erste mal . Ich würds nicht glauben wenn ichs nicht gelesen hätte. Ich gehe mal davon aus das dass was im Handbuch steht auch stimmt.
Vielleicht erklärt das warum kein Schwein Bosch einsetzt ? :roll:

Torsten
 
Zurück
Oben