WinCC 7 - Variablen immer zyklisch aktualisieren

Beiträge
9.189
Reaktionspunkte
2.934
Zuviel Werbung?
-> Hier kostenlos registrieren
Weiß jemand wie man WinCC dazu bringen kann bestimmte Variablen immer zyklisch zu aktualisieren, auch wenn das Bild in dem diese angezeigt werden nicht aufgerufen ist?

Ich habe nämlich Variablen die ich über SNMP und Simatic Net OPC-Server von diversen Netzwerkgeräten abfrage. Für die ganzen Geräte habe ich mir eine schicke Übersichtsseite gebaut in dem die Daten angezeigt werden. Jetzt ist es aber so, dass es beim ersten Aufrufen der Seite fast 10 Sekunden dauert bis die Variablenwerte angezeigt werden. Das sieht natürlich äußerst unschön aus.
Beim OPC-Server kann man dahingehend nichts einstellen, und in WinCC läuft alles über den Zyklus in den Prozessbildern.
Wenn ich ein paar SNMP Daten mit dem OPC Scout abfrage dauert die Aktualisierung auch nicht so extrem lange.

Ich möchte ungern irgendwelche Skripte schreiben die zyklisch diese Variablen abfragen.
 
Lies die Variablen in einem Script ein und ruf dieses Script einfach mit einem zyklischem Trigger auf.
Ob es mit OPC geht kann ich allerdings nicht sagen.

Gruß
Dieter
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Skript wollte ich ja eigentlich vermeiden, nur wenns nicht anders geht.

Ich habe den Eindruck als ob die Verbindung zum OPC-Server nach einiger Zeit des Nichtgebrauchs wieder komplett abgebaut wird, und dann der Neuaufbau so lange dauert.
Denn die Variablenaktualisierung dauert nicht nur beim Erstaufruf des Bildes so lange, sondern ebenfalls wenn man ein paar Stunden das Bild mit den Variablen nicht aufgerufen hat, und dann wieder aufruft. Bei Wertanzeigen die den Variablenstatus auswerten steht dieser nämlich so lange auf "schlecht".
 
Meine Vermutung ist das WinCC die OPC Variablen "abmeldet" wenn das Bild nicht angezeigt wird. Bei erneuter Bildumschaltung zurück auf das Bild mit den OPC Variablen, werden diese (mit AddItem) beim OPC Server wieder neu in eine (aktive) Gruppe hinzugefügt, vermutlich auch noch einzeln einer nach dem anderen. Nun kommen zwei Probleme zutage a) der Server muss warten (jeweils um UpdateRate) um den Client notifizieren zu dürfen, dies sieht man meist daran das "QualityBadInitialValue" nacheinander einzeln nach "Good" wechselt da die Werte nacheinander reintröpfeln und b) der Server gezwungen wird den "Pollzyklus" auf das unterlagerte SNMP sukkzesive aufzubauen und nicht in einem Rutsch.

Um das Problem a) zu beheben gibt es (oder gab es zumindest mal) einen Schalter in einem Konfigurations.ini File des OPC Servers, mit dem man das "verzögern" von Initialen-DataChange-Callbacks, um jeweils die UpdateRate einzuhalten, abschalten konnte. Damit wird quasi das "Verhalten" des Servers beim (ersten) DataChange-Callback versenden verändert. Der Server sendet - nach frischem Hinzufügen in die Gruppe - den ersten Callback "sofort" auch ohne die Updaterate der Gruppe einzuhalten. Dieses Verhalten ist streng genommen nicht "konform" zur OPC Spezifikation, und dahher auch defaultmäßig abgeschaltet.

Um Problem b) zu beheben gibt es keine Lösung, hier kann man nur hoffen dass der OPC Server und das SNMP "schnell" genug sind beim Aufbau des Request, denn man kann nicht verhinden das ein Client "einzeln" hunderte Items nacheinander in eine aktive Gruppe einfügt. Der Server ist aber "gezwungen" sofort zu versuchen die Werte für diese Items zu beschaffen. Daher sollte ein Client das "AddItems" immer nur auf eine "inaktive" Gruppe ausführen, und erst wenn alle drin sind die Gruppe abschließend "aktiv" schalten.
 
Zuletzt bearbeitet:
Ich habe vor einer Woche mir erstmal mit einem Skript beholfen. Da ich dort nicht alle SNMP-Variablen eintragen wollte, habe ich immer eine Variable von einem Netzwerkgerät (&ping) genommen. Hat aber nicht wirklich geholfen, zumindest die anderen SNMP-Variablen brauchen immer noch lange bis der Wert da ist.

Mit deiner Erklärung ergibt das ja auch Sinn, wenn die anderen Variablen trotzdem abgemeldet werden.

Ich habe es schon fast als "Systemeigenschaft" abgeschrieben (Siemens Bezeichnung für Softwarefehler). Aber das mit der ini-Datei behalte ich im Hinterkopf, falls der Kunde bei der Abnahme meckern sollte.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Und noch eins habe ich vergessen, das hier vorgeschlagene Script kann in sofern helfen, dass es (wenn permanent aufgerufen) quasi verhindert das WinCC die Items beim OPC Server abmelden kann. Ebenso würde es übrigens helfen alle OPC Items des Bildes auch (zusätzlich) ins TagLogging aufzunehmen, denn auch dadurch wird "erzwungen" dass sie am OPC Server angemeldet bleiben, selbst wenn das Bild weggeschaltet wird, werden die Werte ja zum loggen weiterhin in der Gruppe belassen (loggen bei Änderung, versteht sich) weil sie immer noch benötigt werden. Ich setze natürlich voraus das beim Bild und beim Tagloggin die selbe UpdateRate konfiguriert wird und somit WinCC-Client im SimaticNET-OPC-Server für Bild und Logging nur EINE Gruppe anlegt.

Ja ich gebe zu das ist mit Kanonen auf Spatzen geschossen, aber so ist es nun mal.
 
Zuletzt bearbeitet:
Ich lasse mein Skript alle 10 Sekunden aufrufen. Im Bild ist der Aktualisierungszyklus aber 2 Sekunden. Kann es dann sein dass die Variablen am OPC-Server dadurch in verschiedenen Gruppen angemeldet werden?

Taglogging ist schlecht, kostet ja Geld ;-) zumindest wenn ich 100 Archivvariablen für nix verschwende...
 
Das mit dem Skript ist nicht so einfach, a) kommt es darauf an welche Funktion du aufrufst z.B. GetTagMultiWait, löst nur einen Read aus, es wird keine Gruppe angelegt und auch keine Items, soweit ich mich erinnere. b) ist natürlich die UpdateRate wichtig, für jede unterschiedliche legt der WinCC-Client eine neue Gruppe an und stellt die UDR ein. Der ganze Wahnsinn funktioniert also nur wenn du "zufällig" überall die selbe UDR hast und somit alles in einer Gruppe landet.

Also Script ist schlecht und Taglogging auch, ging mir nur ums Prinzip zu erklären. Ich würde den Schalter im ini File des SimaticNET Servers suchen (ich bin nicht sicher ob es den im SNMP gab, sinnvoll wäre er global für den ganzen OPC Server, wenn ich so drüber nachdenke).
 
Zurück
Oben