TIA WinCC Professional V13 SP1 - Fehler bei Syntaxprüfung eines C-Skriptes

Grimsey

Level-1
Beiträge
542
Reaktionspunkte
31
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

ich bekomme beim Übersetzen eines C-Skiptes 2 Fehler von der WinCC-Syntaxprüfung gemeldet (siehe Bild).
Die Variable "rtest" ist eine interne REAL-Variable.
Kann mir eventuell jemand sagen, weshalb die Syntax-Prüfung die Zeilen 8 und 12 anmeckert?

WinCC-Syntaxprüfung.jpg
 
Welchen Datentyp hat Dein Tag "rtest"? Float? Nochmal überprüfen!
Wenn es Float/Real ist, dann solltest Du auch durchgängig Float/Real-Konstanten im Code verwenden, also nicht 0, 10, 50 sondern 0.0, 10.0, 50.0

PS: in Zeile 12 ist eine andere Variable "itest", die anscheinend nicht Float ist? "GetTagWord(...) + 1.0" geht natürlich nicht

Harald
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Das Skript ist nicht von mir sondern von einem unserer Lieferanten. Beim Übersetzen des Projektes ist mir das aufgefallen und ich versuche es zu bereinigen.
"rtest" ist eine interne Real-Variable, habe ich gerade nochmal geprüft.
In Zeile 12 habe ich jetzt eine 1 statt 1.0 draus gemacht, die Meldung bleibt allerdings.
 
Also der Fehler liegt bei der Zuweisung des Variablenwertes in Zeile 8.
Die Anweisung "GetTagFloat("rtest") + 0.2" ist Ursache für die Meldung. Schreibt man nur "GetTagFloat("rtest") oder nur 0.2 funktioniert es. Nur stimmt dann der zuzuweisende Wert nicht.

Wie addiert man jetzt einen Float-Wert von 0.2 dazu ohne dass Syntaxprüfung einen Fehler meldet?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hmm...das habe ich auch schon probiert...die Meldung bleibt bei mir trotzdem. Jetzt halt nur in der Zeile mit
rtemp = GetTagFloat("rtest") + 0.2;

Schon merkwürdig...
 
Und diese Varianten?
Code:
rtemp = GetTagFloat("rtest");
rtemp = rtemp + 0.2;
SetTagFloat("rtest", rtemp);
Code:
rtemp = GetTagFloat("rtest");
SetTagFloat("rtest", rtemp + 0.2);

Harald
 
Nope...da kommt die selbe Meldung...immer an den Stellen wo "+ 0.2" addiert wird.....äußerst merkwürdig.
naja ich lass das jetzt gut sein...laut dem Bild oben handelt sich ja um Warnungen (gelbes Dreieck)...das Übersetzen geht ja scheinbar.

Danke für Deine Bemühungen!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ist "rtest" wirklich eine "Gleitkommazahl 32-Bit"?

Frag' mal den Siemens Support. Vielleicht haben die etwas geändert und der C-Compiler interpretiert nun Float-Konstanten als Double?

Hilft vielleicht dies:
Code:
rtemp = GetTagFloat("rtest");
rtemp = rtemp + [COLOR="#0000FF"](float)[/COLOR]0.2;
SetTagFloat("rtest", rtemp);
oder das:
Code:
rtemp = 0.2;
rtemp = rtemp + GetTagFloat("rtest");
SetTagFloat("rtest", rtemp);

Harald
 
Hallo PN/DP,

ja "rtest" ist in der Visu-Variablentabelle als interne Variable vom Datentyp REAL angelegt.
Die beiden letzten Versionen funktionieren aber so!!!! Danke!

Der direkte CAST von "0.2" im 1. Beispiel als auch die 2. Version funktionieren.
Ebenfalls funktioniert es im Ausgangsbeispiel, wenn man einen CAST auf float von 0.2 macht.

Schwere Geburt...aber wieder was gelernt!

Recht herzlichen Dank!
 
Scheint so, als ob der C-Compiler nun wenig flexibel Gleitkomma-Konstanten stets als Double ("Gleitkommazahl 64-Bit") interpretiert und deshalb warnt ... Gibt es dazu vielleicht irgendeinen Hinweis in der WinCC Hilfe?

"rtest" ist in der Visu-Variablentabelle als interne Variable vom Datentyp REAL angelegt.
Könntest Du uns vielleicht von der Konfiguration der Variable ein Bild zeigen?

Harald
 
Zurück
Oben