WinCC Unified Skript Vergleich mit 2 Variablen

deg0

Level-2
Beiträge
35
Reaktionspunkte
9
Hallo Zusammen,

wir starten grade unser erstes Unified Projekt und bin grade etwas verzweifelt.
Es ist quasi eine Serienmaschine, die Umgestellt wird. Daher wurde das vorhandene WinCC (TP1900) mit dem Addin Data2Unified zuerst zu einem MTP1500 (wegen der Auflösung) Migriert. Hat auch alles geklappt.
Nun versuche ich unsere Bildbausteine nachzubauen und versuche, einen Text mittels Script Sichtbar / Unsichtbar zu schalten.
Ziel ist es, wenn die 2 Variablen (Zahlen) den gleichen Wert hat, soll es angezeigt werden.

Mit dem einfachen Script:

Code:
if ( Tags("Test").Read() == 10 ) {
value = 1;
} else {
value = 0;
}

funktioniert es. Packe ich meine 2. Variable in die Abfrage:

Code:
if ( Tags("Test").Read() == Tags("Test_1").Read() ) {
value = 1;
} else {
value = 0;
}

klappt es nicht. Wo liegt der Fehler? Jemand eine Idee?
Verwendet wird TIA V19 und Unified V19, beides Update 2
 
Was klappt nicht? Bekommst immer "value = 0;" ?

Sind "Tags("Test").Read()" und "Tags("Test_1").Read()" von gleichen Typ (Real, Int) ?
 
value immer 0, beides sind gleicher Typ
Interne variable ULInt
 
wird denn das Script bei jeder Wertänderung beider Variablen aufgerufen ?
Hast du das mal überprüft ?
 
Ja selbst der trigger auf 100ms brachte kein Erfolg. Bin schon etwas verzweifelt bei so einer simplen Aufgabe
 
Hast du die Werte schon einmal vor dem vergleich debuggt? also einfach die Werte mal ausgeben gelassen? Kommen da die erwarteten Werte?
(also einfach vor dem If)
 
Hast Du mal überprüft, ob er die Variablen korrekt lesen kann?

Tag.Read() (RT Unified)
Die Methode führt eine synchrone Leseoperation aus. Nach Abschluss können Sie über die Eigenschaften "LastError" und "ErrorDescription" ermitteln, ob die Ausführung erfolgreich war.
 
Packe ich meine 2. Variable in die Abfrage:

Code:
if ( Tags("Test").Read() == Tags("Test_1").Read() ) {
value = 1;
} else {
value = 0;
}

klappt es nicht.
vielleicht klappt es so:
Code:
tag1 = Tags("Test").Read();
tag2 = Tags("Test_1").Read();

if ( tag1 == tag2 ) {
value = 1;
} else {
value = 0;
}
 
Ich konnte es herausfinden. Die Variablen waren ULInt. Mit Int klappt es. Sobald es auf ULint / Lint gestellt wird, funktioniert es nicht mehr.
Jemand eine Idee?
 
Ich konnte es herausfinden. Die Variablen waren ULInt. Mit Int klappt es. Sobald es auf ULint / Lint gestellt wird, funktioniert es nicht mehr.
Jemand eine Idee?
Klingt nach einem Bug oder? Sollte ja niemals so sein.
 
Hab in einer Hilfe zufällig folgendes gefunden:
JavaScript lässt standardmäßig keine Bearbeitung von 64-Bit-Datentypen zu

Toll. Und in den Schnittstellen vom Faceplate kann man nur ULInt oder Lint übergeben. Danke Siemens.
 
Zuletzt bearbeitet:
Ein Eigenes. Auch völlig Simple. Möchte einfach ein Menü Button erstellen. Im Faceplate übergebe ich die Variable "Aktuelles Bild" und eine Feste Variable (Bildnummer_Aktiv). Wenn die 2 gleich sind, soll der Button anders aussehen. Aber unter "Eigenschaften Schnittstelle" kann nur 64 Bit Zeichen oder Texte übergeben werden. Den festen Wert kann ich aber nicht unter die Variablen packen, da ich bei der Verschaltung im Bild auch eine Variable verknüpfen muss.

 
Was mich irritiert: Javascript kann 64Bit. Aber in den Datentypen in der Doku zu Unified sind nur 32Bit-Datentypen gelistet.
Was sagt denn der Debugger, wenn Du das Script mal schrittweise ausführst.
Gibt die ErrorDescription irgendwas zurück?
Kannst Du den Wert ggf. über ParseInt o.Ä. explizit in einen Integer wandeln?
 
Für die Nutzung dieser Website sind Cookies erforderlich. Du musst diese akzeptieren, um die Website weiter nutzen zu können. Erfahre mehr…