TIA SCL - Warnung beim lesen InOut Parameter

mmm_ams

Level-2
Beiträge
101
Reaktionspunkte
8
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,
in einem SCL FB beim Lesen eines InOut-Parametrs wird eine Warnung ausgegeben "Der Parameter ### wird möglicherweise nicht initialisiert". Ich habe mehrere Beiträge über diese Warnung gelesen, wo es manchmal Sinn macht, aber in meinem Fall macht es keinen Sinn in meinem Auge. InOut Parameter sind ja da um innerhalb eines FB gelesen und geschrieben zu werden.
Klar kann man die Warnung einfach ignorieren aber ich hätte mein Programm sehr gern Warnungsfrei.
Hätte jemand da einen Tipp?

Danke!
 

Anhänge

  • 01.JPG
    01.JPG
    13,9 KB · Aufrufe: 37
Schau, ob man in Deiner TIA-Version gezielt diese Warnung deaktivieren kann (gibt es meines Wissens noch nicht) oder wende Dich an den Siemens Support und wünsch Dir das. Vielleicht beschweren sich noch mehr Anwender und Siemens macht einige unnötige Warnungen deaktivierbar. Vielleicht arbeiten die auch schon an einer Lösung?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schau, ob man in Deiner TIA-Version gezielt diese Warnung deaktivieren kann (gibt es meines Wissens noch nicht) oder wende Dich an den Siemens Support und wünsch Dir das. Vielleicht beschweren sich noch mehr Anwender und Siemens macht einige unnötige Warnungen deaktivierbar. Vielleicht arbeiten die auch schon an einer Lösung?

Harald
Habe ich gerade eben einen Support request diesbezüglich geschickt. Ich bin gespannt, was sie dazu sagen werden.
 
Vielleicht läßt sich der SCL-Compiler befriedigen, wenn man vor dem ersten Lesen des InOut-Parameters (z.B. am Bausteinanfang) eine bedingte Zuweisung auf den InOut-Parameter programmiert, die aber nie erfüllt ist (also immer übersprungen wird)? z.B. IF FALSE THEN, IF 0 = 1 THEN, ...
In meinem TIA V15.1 gab es diese Warnung noch nicht.

Harald
 
Meckert der Compiler nicht deshalb, weil der Parameter erst gelesen wird (in der If-Abfrage) und dann nur bedingt geschrieben?

Lässt er sich mit folgendem Austricksen (grade kein Step7 zur Hand um zu probieren), wenn die Zeile vor der If-Abfrage eingefügt wird?

Code:
ioTextanzeigen := ioTextanzeigen;

Über die Sinnhaftigkeit kann man diskutieren, aber vielleicht kriegt man die nervige Warnung damit ja weg. Bei einem InOut ist die "Angst" des Compilers, dass eine undefinierte Variable gelesen wird, ja irgendwie etwas zu übersensibel.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Entschuldigt es Leute. Das war mein Fehler. Die genannten Variablen waren in Output Bereicht statt InOut Bereich deklariert. Nach Korrektur ist die Warnung weg.
Danke für eure Antworten. Ich werde den Beitrag demnächst löschen
 
Ich muss aktuell Teilen eines classic Programm migrieren. Da wird auch lesend auf out Variabelen zugegriffen. Da hab ich dann zwischenvariablen im statische Bereich gemacht und verwendet. Keine Warnungen mehr😁😁
Das habe ich auch schon gemacht nur um keine Warnungen zu erhalten. Wobei es eigentlich überflüssig ist, schlechter zu warten und mehr Speicher benötigt. Und die Warnung ist auch grundlegend falsch, denn bei einem FB besitzt auch eine OUT Variable einen definierten Wert und ist nie undefiniert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
... denn bei einem FB besitzt auch eine OUT Variable einen definierten Wert und ist nie undefiniert.
Definiert durch den Programmierer des FB aber nur, wenn der nicht vergessen hat, den Zustand der OUT-Variable zu definieren.
Definiert durch das "BetriebsSystem" per Initialisierung oder durch Übernahme eines zufälligen Wertes aus dem Stack tut meistens nicht das, was der Programmierer hätte beabsichtigen sollen. ;)
 
Bei FB liegen die Out-Parameter in der Instanz (IDB), liegen also immer in Speicher, der sich den zuletzt zugewiesenen Wert merken kann. Da sind vor der ersten Zuweisung definierte Initialwerte drin. Also nichts zufälliges.

Harald
 
Bei FB liegen die Out-Parameter in der Instanz (IDB), liegen also immer in Speicher, der sich den zuletzt zugewiesenen Wert merken kann. Da sind vor der ersten Zuweisung definierte Initialwerte drin. Also nichts zufälliges.
Ja, das bedeutet, man kann z.B. die AusgangsVariable per Setzen bzw. Rücksetzen definieren und muss nicht in jedem einzelnen Zyklus "definieren".
Die Gefahr lauert darin, dass zum Definieren eine nicht definierte Variable herangezogen werden und der Ausgang einen ungewollten Zustand annehmen (und speichern) könnte. Aber dann sollte natürlich die Warnung dort auftreten, wo die undefinierte Variable verknüpft/abgefragt wird und nicht erst bei der Verwendung des Ausgangs.
 
Zurück
Oben