WinCC Kurvenverlauf in Array als Grafik auf TP 1200 darstellen

emtewe

Level-1
Beiträge
106
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich habe ein technisches Gerät, welches Analysedaten in einem Array aufbereitet. Es ist eine Folge von 300 Zahlen, jeweils als UInt.
Diese Folge repräsentiert eine Kurve, mit einer Länge auf der X-Achse, und einem zugehörigen Messwert auf der Y-Achse. Die Position im Array enstpricht der X-Achse, und der Zahlenwert als UInt entspricht der Y-Achse.
Ich habe eine Variablentabelle im HMI welche ein Array [0..300] of UInt enthält, die Daten werden dort über OPC ständig aktualisiert.

Im Moment behelfe ich mir, indem ich 300 vertikale Balken erzeugt habe, die jeweils einem dieser Werte entsprechen. Jeder Balken 2 Pixel breit und 350 Pixel hoch, setze ich die 300 lückenlos nebeneinander, erhalte ich ein 600x350 Pixel Feld, welches mir die Analysedaten anzeigt. So weit so gut.

Das Handling und Bearbeiten dieses Feldes ist natürlich lästig, und der Hersteller des technischen Gerätes ist sein Produkt ständig am verbessern. Statt 300 Werte bekomme ich demnächst 600 oder gar 1200. Aktuell sind sogar 2048 in der Entwicklung.

Ein Array von 600 UInt würde schon deutlich lästiger auf diese Weise anzuzeigen, aber was dann?

Gibt es eine elegante Möglichkeit eine Zahlenfolge, die in einem Array of UInt abgelegt ist, als Kurve auf einem TP 1200 Comfortpanel auszugeben?
Am liebsten wäre mir natürlich eine Möglichkeit, bei der ich in dieser Kurve Schieben und Zoomen kann. Sollte die Datenmenge also irgendwann zunehmen, und die Auflösung des Displays überschreiten.

Ich arbeite im Moment noch mit dem TIA Portal V15.1 Update 4, ein Wechsel auf TIA Portal 16 steht aber an.
 
Ja, danke! Das hatte ich schon gefunden. Da muss man die Werte per Script in eine Archivdatei reinschreiben, und kann dann die Kurve aus dem Archiv abrufen.
Wenn ich das richtig sehe, ist das dann aber statisch, bzw. muss ständig aktualisiert werden?
Die Werte die ich per OPC bekomme werden dynamisch kontinuierlich erfasst.
Die Kurve die man in meinem Beitrag sehen kann die verändert sich ständig.
Das funktioniert mit den 300 Balken und dem Array praktisch in Echtzeit, je nachdem wie schnell man per OPC die Daten überschreibt.
Wenn ich die jetzt erst per Script in ein Archiv packe, und dann das Archiv als Kurve wieder auslese, glaube ich nicht dass das in der gleichen Geschwindigkeit geht.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wenn die Abstände der x-Werte immer gleich sind, dann brauchst Du keine f(x)-Anzeige.
Schau Dir mal bitgetriggerte Kurven an (Typ Kurve: Puffer bitgetriggert)
TIA Informationssystem > Suchen nach: kurvenanzeige bitgetriggert > Thema: Kurven (Panels...)

Harald
 
Ja, das mit de bitgetriggerten Kurve würde wohl funktionieren, wenn ich die Werte nacheinander abfragen würde. Ich habe die aber komplett als Array vorliegen, welches per OPC aktualisiert wird. Die ganze Aufbereitung und Pufferung der Daten geschieht ja schon in dem Messgerät, und die ganze Kurve wird auf einmal geliefert, mit konsistenten Daten.
Die Frage ist wie schnell die Kurve bitgetriggert aufgebaut werden kann?
Wenn ich das richtig verstehe, müsste ich einen Wert schreiben und das Triggerbit setzen. Die Kurve liest dann den Zahlenwert, und setzt das Triggerbit zurück. Jetzt kann das Messgerät den nächsten Wert schreiben, und das Triggerbit wieder setzen... usw...
Wie lange brauche ich da wohl für 300 Werte?
Das Array überschreibe ich zur Zeit etwa alle 2-3 Sekunden.

Im Moment gefällt mir die sehr lästige Lösung mit den 300 Balken noch am besten, vor allem was die Darstellungsgeschwindigkeit angeht. Eine Kurve, ähnlich schnell aus dem Array aufgebaut, wäre natürlich schöner und flexibler einsetzbar.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei gepufferte und bitgetriggerte Kurven, wenn du den Triggerbit setzt wird den gesammte Array von Panel auf einmal gelesen.

Wenn ich die Zeitachse auf "Punkte" setze, dann kann ich bei der Kurve "Puffer bitgetriggert" auswählen. Aber ich kann dann bei der Datenquelle für Prozesswerte nicht das Array angeben. Dort akzeptiert der nur eine einzelne Variable. Das Array muss ich ja nicht mehr aufbauen, das befindet sich schon im internen Variablenspeicher des Displays, und wird alle 2 Sekunden per OPC überschrieben.
 
Zurück
Oben