WinCC Unified Variablen-Aktualisierung

C.D.B.

Level-2
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen,

nun arbeite ich zum ersten mal mit WinCC Unified (V17). Wie zu erwarten ... gibt es doch signifkante Unterschiede zu WinCC Advanced.

In WinCC Advanced konnte man bei E/A-Feldern sich bei "Eingabe abgeschlossen" bsp. ein Triggerbit setzen lassen. Das ist wohl weg. :(

Geht in Unified nur via verknüpftem Script. Habe dies so realisiert (siehe Bild).

In WinCC Advanced mußte ich solchen ansonsten in den Bildern nicht verwendeten Variablen die Aktualisierung auf "zyklisch fortlaufend" stellen. DIese Option gibt es in Unified auch nicht! 😮

Wird die Triggervariable in Unified trotzdem aktualisiert? (Weil das Script im E/A-Feld projektiert ist?)


Würde dies gerne vor der Inbetriebnahme wissen. 🙃
 

Anhänge

  • triggerbit.png
    triggerbit.png
    14,3 KB · Aufrufe: 65
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich schiebe die Installation der V18 schon einige Zeit vor mir her. :rolleyes:

Kann man in V18 die Variablenaktualisierung wieder auf Fortlaufend stellen? Das wäre doch glatt ein Installationsgrund. :unsure:
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Moin, das Thema ist auch in TIA V19 noch dasselbe, die Erfassungsart "Zyklisch fortlaufend" gibt es nicht mehr.

Wie reagiert denn nun "Zyklisch im Betrieb" auf Scriptaufrufe?
in Advanced musste ich extra alle Variablen in Scripten auf "Zyklisch fortlaufend" setzten weil sonst kein Aktueller Wert beim Scriptaufruf drin stand.

Ich möchte einen Bildbaustein aus Advanced in unified integrieren und dabei das VB-Sript in Java umschreiben.
Kann man mit dem Befehl <Tags("TAG").Read();> sicher sein das der Wert bei Aufruf drin steht oder nicht?
Oder gibt es inzwischen neue Befehle?
Oder Warten?:sick:
Oder andere schöne Lösungen?
 
Das Handbuch sagt:
Die Methode "Read" liest eine Variable (Objekt "Tag") aus. Beim Lesen der Variable wird der Wert, der Quality Code und der Zeitstempel der Variable ermittelt.
Für Arrays wird die Methode "Read" wird nur für Array-Elemente unterstützt. Rufen Sie die Methode nicht an der übergeordneten Array-Variablen auf.
Die Variablen werden entweder aus dem Variablenabbild (Cache) oder direkt aus dem AS gelesen. Bei Verwendung des Variablenabbildes meldet die Methode alle Variablen an, die noch nicht angemeldet sind. Für zyklisches Auslesen von Variablen sollten Sie das Variablenabbild verwenden. Wenn Sie den Variablenwert nicht zyklisch benötigen oder der Aktualisierungszyklus der Variable zu groß ist, verwenden Sie das direkte Auslesen (hmiReadDirect).
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.


Variablenabbild (Cache) - Das wäre ja das Abbild was man durch Zyklisch fortlaufend nicht mehr aktualisieren kann, denke ich
direkt aus dem AS - keine Ahnung was bei Unified AS heißt, das Siemsens Abkürzungsdokument habe ich noch nicht gefunden


Mein Problem ist das ich gerade zuviel ausprobieren muss...

zum Beispiel dieses
let lev = Tags("Level").Read();
let count_Bin = Tags("TypCtrl_Actual.Bin.Count").Read();

//switch (lev) { //Die Switch Funktion auf die lokale Variable lev wird nicht ausgeführt, aber mit der tags.read funktion gehts. Die Berechnung (lev + count_Bin) im Anschluss funktioniert was mir zeigt das lev am Ende doch den richtigen Wert enthält
switch (Tags("Level").Read()) {
case 1000: //1000 Binary
Tags("Visibility").Write(lev + count_Bin);
Tags("Visibility_Tol").Write(1010);
break;
....
default:
//statements
Tags("Level").Write(1000);
Tags("Visibility").Write(1032);
break;
}
 
Zuviel Werbung?
-> Hier kostenlos registrieren
AS ist beim Siemens normalerweise AutomatisierungsStation, also die SPS.

hmm, dass Unified nen Problem hat, genau zu wissen, wann jetzt Variablen aus der SPS gelesen werden müssen, kann ich mir vorstellen... Das ist auch nicht wirklich trivial...

Wenn direkt aus der SPS gelesen wird, dauert das ja auch noch ne Weile, ob dann das Script "so lange wartet bis die Daten da sind" ist die nächste Frage...

wenn ich das jetzt richtig verstehe, liest Tags("Level").Read() nicht aus der SPS sondern "meldet beim Panel Betriebssystem (Kommunikationstreiber) an, dass es was braucht" irgendwann liest das Panelbetriebssystem und irgendwann hat die Panelvariable auch den Wert aus der SPS...

hmiReadDirect sollte direkt aus der SPS lesen und u.U. hoffentlich mit dem script warten, bis nen Wert da ist...

In WinCC 7 gibts ja unter C: GetTagXXX und GetTagXXXWait... was so ähnlich ist...
 
Zuletzt bearbeitet:
Vielleicht mache ich es mir zu einfach, aber für was brauchst du das Skript?
EA-Felder dienen der Kommunikation direkt mit der SPS, dort wird es verarbeitet und wieder zurückgeschickt.
Mich würde mal gerne der Anwendungsfall interessieren, für was man sowas braucht.
 
Ich denke(andere mögen anderer Meinung sein) man sollte sämtliche Logik aus dem HMI verbannen wenn irgendwie das möglich ist.
Und schon gar nicht mit diesen Scriptsprachen anfangen.(wenn vermeidbar).
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn direkt aus der SPS gelesen wird, dauert das ja auch noch ne Weile, ob dann das Script "so lange wartet bis die Daten da sind" ist die nächste Frage...
Also dieses "warten" auf einen Wert kann in JS mit dem await-Operator realisiert werden, allerdings bedarf es dann einer asynchronen Funktion!

Das Handbuch sagt:
Die Methode "Read" liest eine Variable (Objekt "Tag") aus. Beim Lesen der Variable wird der Wert, der Quality Code und der Zeitstempel der Variable ermittelt.
Für Arrays wird die Methode "Read" wird nur für Array-Elemente unterstützt. Rufen Sie die Methode nicht an der übergeordneten Array-Variablen auf.
Die Variablen werden entweder aus dem Variablenabbild (Cache) oder direkt aus dem AS gelesen. Bei Verwendung des Variablenabbildes meldet die Methode alle Variablen an, die noch nicht angemeldet sind. Für zyklisches Auslesen von Variablen sollten Sie das Variablenabbild verwenden. Wenn Sie den Variablenwert nicht zyklisch benötigen oder der Aktualisierungszyklus der Variable zu groß ist, verwenden Sie das direkte Auslesen (hmiReadDirect).
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.


Variablenabbild (Cache) - Das wäre ja das Abbild was man durch Zyklisch fortlaufend nicht mehr aktualisieren kann, denke ich
direkt aus dem AS - keine Ahnung was bei Unified AS heißt, das Siemsens Abkürzungsdokument habe ich noch nicht gefunden
wenn ich das jetzt richtig verstehe, liest Tags("Level").Read() nicht aus der SPS sondern "meldet bei Panel Betriebssystem an, dass es was braucht" irgendwann liest das Panelbetriebssystem und irgendwann hat die Panelvariable auch den Wert aus der SPS...
Weiter unten im Handbuch steht:

Tag.Read() (RT Unified)
Parameter
readType
Optional, Typ: Int32, hmiReadType

Herkunft der Variablenwerte:

  • hmiReadCache (0) oder leer
    Liest den Variablenwert aus dem Variablenabbild. Falls keine Anmeldung vorhanden ist, wird die Variable angemeldet. Für einen performanten Zugriff definieren Sie die verwendeten Variablen als Trigger des Skripts.
  • hmiReadDirect (1)
    Liest den Variablenwert direkt aus dem AS. Das Variablenabbild wird nicht verwendet.
Bedeutet man kann mit Tags("Level").Read(1) das Lesen aus der SPS erzwingen, dann geht man sicher, dass nicht aus dem Cache des Panels gelesen wird. Das dabei aber mehr Ressourcen benötigt werden ist ja sicherlich klar :)
 
Ich denke(andere mögen anderer Meinung sein) man sollte sämtliche Logik aus dem HMI verbannen wenn irgendwie das möglich ist.
Und schon gar nicht mit diesen Scriptsprachen anfangen.(wenn vermeidbar).
Bei unified kommst Du ohne Scripte nicht weit, da der aktuell verfügbare Funktionsumfang noch deutlich geringer ist, als das was WinCCflex kann...
Ansonsten würd ich mal zustimmen, keine Steuerungslogik im HMI und Scripte nur wenns wirklich nicht anders geht...
 
Zurück
Oben