WinCC Unified Skript Vergleich mit 2 Variablen

deg0

Level-2
Beiträge
35
Reaktionspunkte
9
Zuviel Werbung?
-> Hier kostenlos registrieren
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) ?
 
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 😂
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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;
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
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.

button.png
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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?
 
Zurück
Oben