TIA TIA Portal V15

Zuviel Werbung?
-> Hier kostenlos registrieren
Ihr impliziert jetzt auch alles was böses (wie ich) dahinter...
Aber die Frage liegt doch relativ nahe. Da müsste doch irgendein Außendienstler mal was "Halb-offizielles" bei Nachfrage zu sagen können/gesagt haben .
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
In älteren Versionen des TIA Portals war die Abarbeitungsreihenfolge von Zuweisungen, die
Ausdrücke oder Funktionsaufrufe beinhalteten, nicht immer eindeutig. Die Bearbeitung wurde
nicht konsequent von rechts nach links durchgeführt, sondern es wurden in bestimmten Fällen
Teile des Ausdrucks auf der linken Seite zuerst ausgewertet.

Dieses Verhalten wurde in V15.1 korrigiert, so dass nun immer zuerst die rechte Seite der
Zuweisung berechnet und dann die linke Seite bestimmt wird.
Beispiel:
#myArr["FC_1"()]:= #x + #y;.

In früheren Versionen wurde hier zunächst der „FC1“ ausgeführt, um ein ARRAY-Element zu
bestimmen. Anschließend wurde #x + #y gerechnet.

Ab V15.1 wird das Programm nun korrekt von rechts nach links bearbeitet: Zunächst wird #x
+ #y gerechnet und anschließend der „FC1“ ausgeführt.

Wobei ich da gerne wissen würde an welcher Stelle ich denn nachlesen kann was "korrekt" ist. Korrekt ist etwas wenn es so funktioniert wie es spezifiziert und dokumentiert wurde.

In C - was jetzt zwar nicht gerade als eleganteste Sprache mit wenigen Fallstricken bekannt ist - wäre das laut meiner Interpretation der C-Spezifikation ein Fall von "undefiniertem Verhalten" aufgrund von Seiteneffekten. Bei C wäre für das gezeigte Beispiel der Funktionsaufruf ein sog. Sequence Point, und dann das abschließende Semikolon ebenfalls. Der Rest gehört dann zu einem einzigen Ausdruck, und wenn Werte innerhalb eines Ausdrucks von anderer Stelle verändert werden (wie x oder y aus der Funktion FC_1 heraus), dann ist das Verhalten undefiniert, d.h. es kann mal so mal so berechnet werden. In dem Fall macht aber der Programmierer einen Fehler.
 
naja, richtig oder falsch... Das Problem ist an der Stelle halt, dass der Compiler geändert wurde und somit Programme nach einer Hochrüstung anders funktionieren... Und sowas ist bei Industrieanlagen mit Milionenwerten im besten Fall problematisch.

OT: ich kenne eine Aussage vom Siemens, das die 315-2PNDP immer noch die am meisten verkaufte SPS ist. Und sicherlich nicht mit TIA programmiert wird... Da wissen sicherlich auch viele Kollegen warum...
 
Ich würde solche Ausdrücke ganz einfach vermeiden, wenn ich selber darüber nachdenken muss wie und in welcher Reihenfolge etwas abgearbeitet wird. Da beim TIA-Portal so gut wie nichts dokumentiert ist, programmiert man eh nur auf gut Glück und durch ausprobieren.

Bei
Code:
#myArr["FC_1"()] := #x + #y;
könnte man zwar noch argumentieren, dass es zumindest logischer wäre wenn die Funktion nach der Auswertung des Ausdrucks auf der rechten Seite aufgerufen wird.

Uneindeutiger wird es aber dann z.B. bei
Code:
#myArr["FC_1"()] += #x + #y;
Was hat dort Vorrang? Wird die Funktion gar zwei Mal aufgerufen?

Zum Glück gibt es in SCL noch keinen pre/post-increment Operator (++i, i++), da würde es dann noch komplizierter das zu definieren.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Interessehalber hab ich mal im Handbuch zu V14SP1Basic gesucht und unter dem Hauptkapitel "SCL-Programme erstellen" ab Seite 5226/Kapitel 11.14.1.6 u. a. dies gefunden:

Die Reihenfolge der Auswertung von Ausdrücken hängt von der Rangfolge der Operatoren
und der Klammerung ab. Grundsätzlich gelten folgende Regeln:
● Arithmetische Operatoren werden vor Vergleichsoperatoren und diese vor logischen
Operatoren ausgewertet.
● Gleichrangige Operatoren werden nach ihrem Auftreten von links nach rechts ausgewertet.
● Wertzuweisungen werden von rechts nach links ausgewertet.
● Operationen in Klammern werden zuerst ausgewertet.

Dahinter kommt dann noch eine Tabelle mit der Rangfolge der Operationen und auf der nächsten Seite Aussagen zu Wertzuweisungen.

Möglich, daß dort nicht alle Zuweisungskonstrukte ausreichend dokumentiert und spezifiziert sind, aber der hier behandelte Fall scheint mir eingeschlossen zu sein.

Finden ist allerdings nicht ganz einfach, im Text zu V15.1 wir der Begriff "Abarbeitungsreihenfolge" verwendet, im V14-Handbuch steht das Ganze unter "Auswertungsreihenfolge", die Suche nach "Abarbeitungsreihenfolge" bleibt ergebnislos.

Und die 19144 Seiten des V15.1-Handbuchs machen das alles bestimmt nicht besser ...
 
Zurück
Oben