WinCC Flexible. Wie erkennen WELCHE Verbindung auf/abgebaut ist ?

Beiträge
8.292
Reaktionspunkte
1.876
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe SPS Freunde.

In WinCC Flexible verwende ich die System Events 140000 und 140001 um zu erkennen ob der Online Verbindung OK ist oder nicht.
Dies visualisiert dann eine Meldung an der Benutzer so dass er erkennt das der HMI online ist oder nicht.
Funktioniert gut.

Nun habe ich aber ein HMI mit mehrere Verbindungen.
Wie erkenne ich das Verbindung 1 ist OK und Verbindung 2 ist nicht OK ?

Kann man irgendwie den Systemmeldungstext abfangen und interpretieren ?
Kann man die Werte von die "Placeholders" lesen ? (sie Bild)
WinCCflex_sysevent_140000.jpg

Danke im voraus.
 
Meines Wissens kann man nicht unterscheiden, für welche Verbindung die Systemmeldungen kommen. (man müßte mal Siemens fragen..)
Man kann mehrere "Fortschrittsbalken" in ein Bild (z.B. das Permanentbild) machen. Der Balken der stehenbleibt - dessen Verbindung ist abgebaut (oder die CPU in Stop).

CPU-Variablen auf Wertänderung überwachen dauert lange, weil man im Aufgabenplaner nur min. 1 Minute angeben kann.

Vielleicht könnte man irgendwie die Verbindungen sich gegenseitig überwachen lassen? (daß die Wertänderung einer Variablen der einen Verbindung die Wertänderung einer Variablen der anderen Verbindung überwacht)
Kommunizieren die CPU miteinander? Dann könnten die CPU den Ausfall der Verbindung der anderen CPU melden.

Vielleicht geht auch sowas, daß bei Verbindungsausfall ein Skript gezielt versucht, nacheinander in die CPUs zu schreiben bis die Systemmeldung "Wertübernahme nicht möglich" kommt? Oder besser: in jede CPU in eine Variable schreibt, welche in der CPU in eine weitere Variable kopiert wird, welche im HMI auf Wertänderung eine Reaktion hat. Von der abgebauten Verbindung käme keine Reaktion. Das ginge innerhalb von Sekunden auszuwerten.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Harald.

Ja ich habe die "fliegender Balken". leider sind die etwas zu diskret. Wenn etwas schiefgeht sieht man es nicht sofort. Deswegen habe ich den Farbwechsel auf Rot wenn 140001 kommt.

Was mich ärgert ist das ich kann auch nicht eine Visualisierung machen mit ein Warnschild (etwa wie "Kommunikationsproblem, einer von 2 Verbindungen gestört") weil wenn 140000 kommt wurde das den Warnung entfernen obwohl 1 Verbindung noch gestört ist.

PN/DP schrieb:
CPU-Variablen auf Wertänderung überwachen dauert lange, weil man im Aufgabenplaner nur min. 1 Minute angeben kann.
Ja ich kenne diese Verfahren auch. Ich glaube das dies wird den Antwort von Siemens Support sein. Wenn es kein bessere Lösung gibt, dann muss ich mit den 1 Minute leben.

PN/DP schrieb:
Vielleicht könnte man irgendwie die Verbindungen sich gegenseitig überwachen lassen? (daß die Wertänderung einer Variablen der einen Verbindung die Wertänderung einer Variablen der anderen Verbindung überwacht)
Kommunizieren die CPU miteinander? Dann könnten die CPU den Ausfall der Verbindung der anderen CPU melden.
Ja, die CPUs kommunizieren mit einander mittels Profinet i-device. Das wäre ein Möglichkeit und sogar nicht kompliziert.
Aber es kann ja sein das die CPUs miteinander redet, aber trotzdem hat der HMI ein Problem. Die Verbindungsprobleme kann ja alles mögliches sein.

PN/DP schrieb:
Vielleicht geht auch sowas, daß bei Verbindungsausfall ein Skript gezielt versucht, nacheinander in die CPUs zu schreiben bis die Systemmeldung "Wertübernahme nicht möglich" kommt? Oder besser: in jede CPU in eine Variable schreibt, welche in der CPU in eine weitere Variable kopiert wird, welche im HMI auf Wertänderung eine Reaktion hat. Von der abgebauten Verbindung käme keine Reaktion. Das ginge innerhalb von Sekunden auszuwerten
Das konnte ein Weg sein. Aber lautet sehr kompliziert, u.A weil es gibt kein Zeitverzögerung in WinCC Flexible. Das macht es schwierig erst der erste Verbindung zu testen, abwarten auf den Antwort, und dann nächste Verbindung testen und auf den Antwort abwarten. Und ich habe mehrere Skripte (meistens für Loggen von Daten) die ich nicht gerne sperren will wenn diese Verbindungstest lauft.
 
Noch eine Variante:

Zwei WinCC Flexible interne Variabeln anlegen "verb1ok" und "verb2ok".

Zwei WinCC Flexible externe Variabeln anlegen "verb1onlinebanner" und "verb2onlinebanner" (habe ich schon) die mit die 2 Steuerungen verbunden sind. Der SPS rollt der Wert 0..1..2.......98..99..0..1.. usw.
Per Wertänderung von "verb1onlinebanner" und "verb2onlinebanner" werden "verb1ok" oder "verb2ok" gesetzt.

Wenn 140001 kommt, dann beide "verb1ok" und "verb2ok" rücksetzen.

Einfach.
Einzigste Nachteil ist das wenn 140001 kommt, dann flackert "verb1ok" oder "verb2ok" ganz kurz, was ein bisschen visuel störend sein kann.
 
Hallo Jesper,
was ich mir (in Anlehnung an den Vorschlag von Harald) noch vorstellen könnte wäre :
Du hast ein Script, dass auf die Wertänderung einer jeden Toggle-Variablen der jeweiligen Verbindung reagiert (also der Variablen, deren Wertänderung in der jeweiligen SPS erfolgt).
Läuft das Script so wird zu der entsprechenden Toggle-Variablen die aktuelle Systemzeit der Visu (Now) gespeichert. Kommt ein neuer Toggle und die Zeitdifferenz einer Verbindung ist zu groß (Now - gespeicherte_Zeit_Verbindung) dann ist diese Verbindung gestört und du könntest darüber eine andere Variable setzen und/oder irgendetwas animieren.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Du hast ein Script, dass auf die Wertänderung einer jeden Toggle-Variablen der jeweiligen Verbindung reagiert (also der Variablen, deren Wertänderung in der jeweiligen SPS erfolgt).
Läuft das Script so wird zu der entsprechenden Toggle-Variablen die aktuelle Systemzeit der Visu (Now) gespeichert. Kommt ein neuer Toggle und die Zeitdifferenz einer Verbindung ist zu groß (Now - gespeicherte_Zeit_Verbindung) dann ist diese Verbindung gestört und du könntest darüber eine andere Variable setzen und/oder irgendetwas animieren.
Aber wenn beide SPS'en offline sind, dann wird das Skript nicht ausgeführt.
 
Per Wertänderung von "verb1onlinebanner" und "verb2onlinebanner" werden "verb1ok" oder "verb2ok" gesetzt.

Wenn 140001 kommt, dann beide "verb1ok" und "verb2ok" rücksetzen.

Einfach.
Einzigste Nachteil ist das wenn 140001 kommt, dann flackert "verb1ok" oder "verb2ok" ganz kurz, was ein bisschen visuel störend sein kann.
Ja genau! In diese Richtung ging meine zuletzt genannte Idee, sie war nur noch nicht fertig. :(

In meiner Idee wollte ich erst in alle CPU schreiben um eine Wertänderung zu provozieren. Doch das ist ja unnötig. Deine Idee mit der sich immer ändernden CPU-Variable ist besser.

Falls das kurzzeitige visuelle Flackern stört - das kann man vielleicht mit einem Zähler verhindern, vielleicht mit Hilfe von "SimuliereVariable"? Da müßte ich mal was ausprobieren. Das Problem: es muß was panel-internes zeitversetzt passieren, wenn von extern keine Events mehr kommen. Mit "SimuliereVariable" kann sich eine Variable alle 200ms ändern ohne weitere Events.

Man könnte auch ein Skript starten, was 1 bis 2 Sekunden lang läuft, wenn die anderen Skripte solange warten können.

Harald
 
Ich bevorzüge "einfach und zuverlässig" über "komplizert, aber perfekt".
Ich denke ich bleibe bei der einfachere Variante.

Danke für die Diskussion :)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich ich auch!
Hätte als Idee noch gehabt, die Systemzeit des HMI beide CPU´s zu übertragen. Die CPU´s senden sie einfach wieder zurück. Stimmt eine nicht dann klemmt die Verbindung auf dies CPU.
 
Ich mache so etwas mit einem Toggle-Bit aus den Taktmerkern der jeweiligen CPU. Zunächst zähle ich im Aufgabenplaner im Minutentakt jeweils eine interne Integer-Variable hoch. Bei Wertänderung des Toggle-Bits setze ich diesen Zähler zurück. Soweit wurde diese Idee von euch ja schon diskutiert. Aus diesen Zähler generiere ich allerdings eine Analogmeldung. Erreicht der Zählerstand den Wert "2" (Grenzwert=1), erfolgt eine Störungsmeldung. Der Vorteil ist dabei dass eine "richtige" Störungsmeldung angezeigt wird und dass hierfür kein Script notwendig ist. Dass es bis zu zwei Minuten dauern kann bis diese Meldung erscheint, stört mich eigentlich nicht. Es handelt sich dann ohnehin um einen "schweren Ausnahmefehler", zumindest in meinen Fällen. Wenn man irgendwie mit "Simuliere Variable" den Zähler schneller hochzählen könnte, wäre das natürlich gut. Vielleicht hat dazu jemand eine Idee?
 
Jaaa, ein oder zwei Minuten warten kann ja jeder, sogar Siemens ;)

Wie eigentlich immer von Siemens nur halbfertig und nur zum Vorführen nutzbar, kommt ja direkt am Connection-Timeout eine Meldung, daß eine Verbindung abgebaut wurde - man muß halt "nur noch" Minutenlang warten, bis man eine detaillierte Aussage und ggf. Großanzeige machen kann, welche Verbindung denn ausgefallen ist...

Das Problem ist, daß man wegen dem von Siemens wegen den Hobby-Programmierern eingebauten Loop-Breaker intern im Panel kein Event schneller als jede Minuten erzeugen kann. (oder nur höchst umständlich?)
Man müßte sich aber ein panel-internes, ein paar Sekunden verzögertes "Wiedervorlage"-Event machen, was ohne Events von außerhalb des Panels auskommt. Das scheint aber nicht möglich zu sein. Bzw. ich kenne nur den Weg ein Skript zu starten, was sich ein paar Sekunden in eine Schleife begibt, dabei allerdings auch so lange die Ausführung anderer Skripte blockiert.

Das "SimuliereVariable" habe ich ausprobiert, damit bekommt man leider auch kein Ereignis ausgelöst. Ein Wert außerhalb der projektierten Grenzwerte läßt sich der Variable nicht zuweisen, und von alleine läuft die Variable nicht über die Grenzwerte sondern bleibt stehen. Es wird sogar fieserweise eine Systemmeldung angezeigt, daß der limitierte Bereich verlassen werden sollte - es wird aber kein Ereignis "Grenzwert überschritten" ausgelöst, weil Dank der Fürsorge von Siemens der Grenzwert ja nicht überschritten wurde. Ich hatte auch schonmal mit variabel zugewiesenen Grenzwerten experimentiert, da kam aber auch nichts vernünftiges bei raus.

Das "SimuliereVariable" kann man durchaus nutzen, um etwas eine zeitlang sichtbar oder unsichtbar oder animiert darzustellen (*), doch ums verrecken will nichts mein Anwenderprogramm antriggern :(


(*) Für diejenigen, die unbedingt aus Grafiklisten filmreife Animationen erstellen wollen: "SimuliereVariable" ist Euer Freund!

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich ich auch!
Hätte als Idee noch gehabt, die Systemzeit des HMI beide CPU´s zu übertragen. Die CPU´s senden sie einfach wieder zurück. Stimmt eine nicht dann klemmt die Verbindung auf dies CPU.
Ach, es gibt ja so viele Ideen, woran man den Ausfall einer Verbindung erkennen könnte. Das Problem ist nur, daß wenn alle ausgefallen sind, man das erst Minuten später mitkriegen kann. Da kann man sonstwie tolle Programme schreiben - die nützen nichts, wenn sie garnicht aufgerufen werden.

Harald
 
Wie eigentlich immer von Siemens nur halbfertig und nur zum Vorführen nutzbar, kommt ja direkt am Connection-Timeout eine Meldung, daß eine Verbindung abgebaut wurde - man muß halt "nur noch" Minutenlang warten, bis man eine detaillierte Aussage und ggf. Großanzeige machen kann, welche Verbindung denn ausgefallen ist...

Das Problem ist, daß man wegen dem von Siemens wegen den Hobby-Programmierern eingebauten Loop-Breaker intern im Panel kein Event schneller als jede Minuten erzeugen kann. (oder nur höchst umständlich?)
Man müßte sich aber ein panel-internes, ein paar Sekunden verzögertes "Wiedervorlage"-Event machen, was ohne Events von außerhalb des Panels auskommt. Das scheint aber nicht möglich zu sein. Bzw. ich kenne nur den Weg ein Skript zu starten, was sich ein paar Sekunden in eine Schleife begibt, dabei allerdings auch so lange die Ausführung anderer Skripte blockiert.

Das "SimuliereVariable" habe ich ausprobiert, damit bekommt man leider auch kein Ereignis ausgelöst. Ein Wert außerhalb der projektierten Grenzwerte läßt sich der Variable nicht zuweisen, und von alleine läuft die Variable nicht über die Grenzwerte sondern bleibt stehen. Es wird sogar fieserweise eine Systemmeldung angezeigt, daß der limitierte Bereich verlassen werden sollte - es wird aber kein Ereignis "Grenzwert überschritten" ausgelöst, weil Dank der Fürsorge von Siemens der Grenzwert ja nicht überschritten wurde. Ich hatte auch schonmal mit variabel zugewiesenen Grenzwerten experimentiert, da kam aber auch nichts vernünftiges bei raus.

Das "SimuliereVariable" kann man durchaus nutzen, um etwas eine zeitlang sichtbar oder unsichtbar oder animiert darzustellen (*), doch ums verrecken will nichts mein Anwenderprogramm antriggern :(
Danke. Du hast mir vielen nutzlosen eksperimentieren gesparrt.
 
Und eigentlich wäre das ganze völlig einfach wenn Siemens sein Arbeit fertig gemacht hatte.
Es gibt ja nur maximal 8 Verbindungen in WinCC Flexible. Warum nicht ein Systemevent per Verbindung anstatt ein gemeinsame Systemevent für alle Verbindungen ?
 
Zurück
Oben