WinCC Unified Variable in Script hochzählen & begrenzen

DaisyChain

Level-2
Beiträge
16
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich unternehme gerade meine ersten Schritte in WinCC Unified (TIA V17, Update 4). Aktuell habe ich ein Problem und komme damit nicht weiter.
Ich habe einen Button (Schaltfläche) und möchte bei jedem mal loslassen des Buttons eine Variable (Int) um +1 hochzählen. Wenn die Variable den Wert 3 erreicht hat, soll sie beim nächsten Klick wieder mit 1 beginnen. Also 1,2,3 --> 1,2,3 etc.

Folgende Funktion habe ich unter "loslassen" als Script hinterlegt:

Code:
let tag1 = Tags("Variable1");
let tagValue1 = tag1.Read();


if (tagValue1 < 3) {
tag1.write(tagValue++);
HMIRuntime.Trace("tag1: "+tag1);
} else {
tag1.write(1);
HMIRuntime.Trace("tag1: "+tag1);
}

Beim ausführen bekomme ich im Trace allerdings immer nur eine Warnung und es passiert nichts 😬
Kann mir hierbei vielleicht jemand helfen?

Vielen Dank & Liebe Grüße
 
Zuletzt bearbeitet von einem Moderator:
Zuviel Werbung?
-> Hier kostenlos registrieren
let tag1 = Tags("Variable1");
let tagValue1 = tag1.Read();


if (tagValue1 < 3) {
tag1.write(tagValue++);
HMIRuntime.Trace("tag1: "+tag1);
} else {
tag1.write(1);
HMIRuntime.Trace("tag1: "+tag1);
}
Wenn das dein ganzes Script ist fehlt dir meiner Meinung nach die Deklaration von tagValue, oder soll das tagValue1 heißen?

Bei Trace würde ich eher zu +tagValue1 tendieren.
Wenn du das Inkrementieren wie @PN/DP so schön angemerkt hat noch vor dem Write machst geht es auch gleich viel besser, siehe auch hier.
Und Write großschreiben, das ist Javascript auch wichtig. ;)

In meiner Sandbox klappts so:
1664985366593.png
 
Ich kenne TIA V17 und die unified Scripts nicht, doch mir kommt diese Programmzeile mit dem Inkrementieren falsch vor. Versuche mal:
tag1.write(++tagValue); oder tag1.write(tagValue + 1);


Dürfen wir den Text der Warnung erfahren?

Harald
Wenn das dein ganzes Script ist fehlt dir meiner Meinung nach die Deklaration von tagValue, oder soll das tagValue1 heißen?

Bei Trace würde ich eher zu +tagValue1 tendieren.
Wenn du das Inkrementieren wie @PN/DP so schön angemerkt hat noch vor dem Write machst geht es auch gleich viel besser, siehe auch hier.
Und Write großschreiben, das ist Javascript auch wichtig. ;)

In meiner Sandbox klappts so:
Anhang anzeigen 63922


Hallo Harald, Hallo revve,

Danke für die Info, wenn ich es mit der Variante tag1.write(++tagValue); versuche und wie @revve das .Write noch großschreibe funktioniert es!
--> tag1.Write(++tagValue);
Schade das die Syntaxprüfung das nicht bemerkt hat.


Liebe Grüße
 
Schade das die Syntaxprüfung das nicht bemerkt hat.
Vielleicht hat die Syntaxprüfung das ja bemerkt, und Du liest die Meldungen nur einfach nicht? Den Text der Warnung "verheimlichst" Du uns ja noch ...
Und hat die Syntaxprüfung nicht auch gemeckert, daß Du Dich beim Variablenname vertippt hast? (mal schreibst Du "tagValue1" und mal "tagValue"). Oder hast Du diesen Fehler nur hier im Forum gemacht?

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Fehlermeldung im Trace war wie folgt:
session: 0001, trace: JavaScript exception: PROPERTY_GET GetIdsOfNames failed (property='write', id=-1, error=0x8000001c)
Tatsächlich hat die Syntaxprüfung keinen Unterschied zwischen Groß- und Kleinschreibung erkannt.

mal schreibst Du "tagValue1" und mal "tagValue").
Diesen Fehler habe ich tatsächlich nur hier im Form gemacht...
 
Hallo Harald, Hallo revve,

Danke für die Info, wenn ich es mit der Variante tag1.write(++tagValue); versuche und wie @revve das .Write noch großschreibe funktioniert es!
--> tag1.Write(++tagValue);
Schade das die Syntaxprüfung das nicht bemerkt hat.


Liebe Grüße
Welche syntaxprüfung? :D die ist das reinste Armutszeugnis. Selbst sienens empfiehlt den vscode zu nutzen mit deren ES erweiterung um sinnvoll Syntax zu prüfen
 
Zurück
Oben