ich hätte mal eine Frage an euch bezüglich des Verhaltens des CASE-Befehl unter ST und wie dieser in der IEC 61131-3-Norm beschrieben ist. Vielleicht kann mich jemand aufklären.
Folgender Fall:
case x of1: xxx;2: yyy;2: zzz;end_case;
Was passiert mit der doppelten 2? Wird nur der erste Abschnitt ausgeführt? Werden beide ausgeführt? Muss/darf/soll der Compiler einen Fehler/Warnung ausgeben wenn ich sowas schreibe?
Ich weiß dass CoDeSys das nicht zulässt, aber was sagt die Norm dazu?
Vielen Dank.
Gruß
Herdi
PS: Als pdf gibt die Norm nirgends zum Downloaden?
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Zu meiner Frage hab ich gehofft das mir hier jemand näheres dazu sagen kann. Weshalb ich eigentlich Frage ist dass ich beruflich gezwungen bin mich mit dem Siemens-SCL-Sch... rumzuärgern und deren Compiler schluckt sowas ohne zu murren und führt dann halt zur Laufzeit nur die erste Passage aus. Da bin ich auch erst drauf gekommen als ich einen entsprechenden Fehler eingebaut hatte... Witzig ist nur das die Siemens-Jünger alle das System verteidigen und auch in diesem Fall der Meinung sind: "Wenn der Programmierer sowas schreibt kann der Compiler auch nichts dafür... Und außerdem für was braucht man ST..."
CoDeSys is Welten besser...
Gruß
Herdi
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Anonymous
-
2008-09-16
Originally created by: Bernhard Werner
Hallo Herdi,
die Norm sagt eigentlich relativ eindeutig aus, dass der Wert auch mehrfach vorkommen darf. Die Idee ist, dass man mehrere Bereiche haben kann, die sich auch überlappen dürfen, und der erste Case in dessen Bereich der Wert vorkommt soll ausgeführt werden.
So steht es da, aber wir sind manchmal so frei und machen uns unsere eigenen Gedanken und melden einen Fehler, wenn ein Case überhaupt nicht ausgeführt werden kann.
Bernhard
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hallo miteinander,
ich hätte mal eine Frage an euch bezüglich des Verhaltens des CASE-Befehl unter ST und wie dieser in der IEC 61131-3-Norm beschrieben ist. Vielleicht kann mich jemand aufklären.
Folgender Fall:
case x of1: xxx;2: yyy;2: zzz;end_case;
Was passiert mit der doppelten 2? Wird nur der erste Abschnitt ausgeführt? Werden beide ausgeführt? Muss/darf/soll der Compiler einen Fehler/Warnung ausgeben wenn ich sowas schreibe?
Ich weiß dass CoDeSys das nicht zulässt, aber was sagt die Norm dazu?
Vielen Dank.
Gruß
Herdi
PS: Als pdf gibt die Norm nirgends zum Downloaden?
Hallo
Wie du schon richtig bemerkst, bemängelt das ja bereits der Compiler.
Da hat er auch vollkommen recht, denn diese Vorgehensweise ist Blödsinn.
Das Programm arbeitet die erste 2 ab und verlässt danach die case Schleife komplett.
Beim nächsten Durchlauf wird wieder die erste 2 bearbeitet und die Schleife verlassen usw...
Die zweite 2 käme also sowieso niemals dran.
Ich glaube nicht dass sich die Norm dazu überhaupt irgendwie äussert...
Gruss Erik
Ich nochmal
Legal gibts im gar keine IEC-/DIN-/ISO Normen zum Download.
Die IEC ist eine Normierungsbehörde und die lässt sich ihre Arbeit bezahlen wie alle anderen auch.
Gruss
Erik
Hab ich mir schon gedacht...
Zu meiner Frage hab ich gehofft das mir hier jemand näheres dazu sagen kann. Weshalb ich eigentlich Frage ist dass ich beruflich gezwungen bin mich mit dem Siemens-SCL-Sch... rumzuärgern und deren Compiler schluckt sowas ohne zu murren und führt dann halt zur Laufzeit nur die erste Passage aus. Da bin ich auch erst drauf gekommen als ich einen entsprechenden Fehler eingebaut hatte... Witzig ist nur das die Siemens-Jünger alle das System verteidigen und auch in diesem Fall der Meinung sind: "Wenn der Programmierer sowas schreibt kann der Compiler auch nichts dafür... Und außerdem für was braucht man ST..."
CoDeSys is Welten besser...
Gruß
Herdi
Originally created by: Bernhard Werner
Hallo Herdi,
die Norm sagt eigentlich relativ eindeutig aus, dass der Wert auch mehrfach vorkommen darf. Die Idee ist, dass man mehrere Bereiche haben kann, die sich auch überlappen dürfen, und der erste Case in dessen Bereich der Wert vorkommt soll ausgeführt werden.
So steht es da, aber wir sind manchmal so frei und machen uns unsere eigenen Gedanken und melden einen Fehler, wenn ein Case überhaupt nicht ausgeführt werden kann.
Bernhard