TIA Prozessdaten konsistent in csv Datei ablegen.

zeata

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

ich benötige mal eure Hilfe/Einschätzung/Ideen zum Loggen von Daten in einer csv.
Erstmal zum generellen Problem: Ich habe eine Anlage übernommen welche laut Kunde nicht zufriedenstellende Ergebnisse liefert. Die Arbeit mit dem Lieferant wurde beendet und nun soll unsere Firma die Anlage zuende bringen bzw. optimieren. Grundsätzlich arbeitet die Maschine wie sie soll aber die Genauigkeit lässt zu wünschen übrig. Es geht darum ein Teil zu schneiden. Die Anlage fährt dazu wie ein Portal über das Werkstück, angetrieben von zwei Antrieben im Sync Betrieb. Zuerst wird das Objekt vermessen mithilfe von Abstandslasern um die Lage des Objektes zu bestimmen. Anschließend kann dann ein Quer/Längsschnitt vollzogen werden. Nun wollte ich als ersten Step mal ein Datenlogging erstellen um folgende Daten zu loggen: Positionen und Geschwindigkeiten beider X-Achsen(Portal), Position und Geschwindigkeit der Y-Achse(Schneide), Abstandswerte der Lasermessung.

Hard-/Software: CPU 1513-1PN, TP900 Comfort, TIA V15.1

Jetzt zu meinem technischen Problem: Mein Plan ist es mithilfe eines VB-Scriptes im Panel die Daten sekündlich zu loggen. Das bekomme ich hin. Die Fragestellung ist ob die Daten dann zeittechnisch konsistent sind. Die HMI-Variablen sind ja eigene Variablen mit einem Aktualisierungzyklus, dabei kann ich mir aber nicht sicher sein alle Daten zeitglich aktualisiert worden sind, richtig? Jetzt habe ich folgende Ansätze:
- Die Daten in einem UDT ablegen und diesen ins HMI bringen. Die Aktualisierungzeit wird dann für den Gesamten UDT eingestellt, ist damit auch sichergestellt das alle darin enthaltenen Daten zeitgleich aktualisiert werden?
- Ich habe in einem anderen Beitrag gelesen das man die Daten auch konsistent per Rezeptur aktualiseren kann per "GetDataRecordTagsFromPLC". Ich habe bisher nie Rezepturen gearbeitet, daher mein Verständnis dazu: Ich lege eine Rezeptur an, welche alle Daten enthält die ich geloggt haben möchte. Dann hole ich mir die aktuellen Werte per "GetDataRecordTagsFromPLC" und schreibe dann meine aktualisierten Werte in die csv.
- Die Daten mit "GetTag" direkt aus der Steuerung lesen und in der csv ablegen.

Vielleicht kann mir jemand von euch meine Sorgen nehmen oder mir erklären wie ich die Daten möglichst Konsistent in die csv bekomme, vielleicht passt einer meiner Ansätze schon. Oder habt ihr noch anderen Ideen zur Umsetzung?

Gruß Michael
 
- Ich habe in einem anderen Beitrag gelesen das man die Daten auch konsistent per Rezeptur aktualiseren kann per "GetDataRecordTagsFromPLC". Ich habe bisher nie Rezepturen gearbeitet, daher mein Verständnis dazu: Ich lege eine Rezeptur an, welche alle Daten enthält die ich geloggt haben möchte. Dann hole ich mir die aktuellen Werte per "GetDataRecordTagsFromPLC" und schreibe dann meine aktualisierten Werte in die csv.
Das sollte die einfachste und schnellste Lösung für dein Problem sein. Habe mich vor einiger Zeit selber mit einem ähnlichen Problem, allerdings und Professional, rumärgern dürfen. Da hätte diese Funktion mir das Leben sehr erleichtert.
 
Von mit vermutlich jetzt zu einfach gedacht :

Mit Data Logging-Anweisungen direkt auf die Memory Karte in der SPS schreiben ?
Sekündlich sollte das doch noch funktionieren , mit Zeitstempel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Vielleicht ist auch die Trace-Funktion der CPU hilfreich?
Ich verstehe die Aufgabe nicht ganz.
Ob die Messungen dauernd wegen die Messvorgang aufgezeichnet werden muss.
Oder erst wenn die Messung beeendet ist muss eine einzelne Werte-Satz geloggt werden.
In den ersten Fall wäre die Trace absolut eine Lösung.

Ich weiß nicht, ob man die Trace-Aufzeichnung in eine csv-Datei exportieren kann
Kann man. Mit TIA oder über die Webserver.
 
Wie funktioniert das denn eigentlich mit GetDataRecordTagsFromPLC wenn das konsistent sein soll? Gibt es dazu eine Funktion im SPS-Programm die mit dem HMI kommuniziert? Ansonsten kann doch auch hier nicht gewährleistet werden, dass die Daten nicht von zwei unterschiedlichen Zyklen stammen, bzw. bei der 1500er findet die Kommunikation ja auch mitten im Zyklus statt, was bei Strings dann auch mal der halbe String vom aktuellen und der andere Teil vom vorigen Zyklus sein kann.
 
Da wird man wohl selbst dafür sorgen müssen, daß sich die Variablenwerte nicht ändern, während GetDataRecordTagsFromPLC läuft. Positiv ist aber, daß es einen Bearbeitungsstatus gibt mit dem man feststellen kann, daß/wann alle Variablen gelesen wurden.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Da wird man wohl selbst dafür sorgen müssen, daß sich die Variablenwerte nicht ändern, während GetDataRecordTagsFromPLC läuft. Positiv ist aber, daß es einen Bearbeitungsstatus gibt mit dem man feststellen kann, daß/wann alle Variablen gelesen wurden.
Dann müsste das SPS Programm aber mitbekommen, dass die Funktion läuft. Wenn das nicht automatisch funktioniert, dann muss man ja schon sehr viel händisch drum herum programmieren. HMI sagt "ich will starten mit dem Lesen", SPS muss das merken, letzten Daten in den DB schreiben und dann ans HMI melden "habe ich mitbekommen", HMI ruft GetDataRecordTagsFromPLC auf, wenn alles fertig Rückmeldung an die SPS "bin fertig mit lesen".
 
Ja, entweder gibt das SPS-Programm Bescheid, wann die Variablen gelesen werden können, oder vor dem Start von GetDataRecordTagsFromPLC muß das HMI eine Variable in der SPS setzen. Ich habe bisher GetDataRecordTagsFromPLC immer nur mit diesem zusätzlichen eigenen Handshake benutzt.

Harald
 
Eben, mindestens zwei Handshakesignale drumherum, mindestens. Seltsamerweise wird das bei der Verwendung von GetDataRecordTagsFromPLC nie erwähnt, denn dass dann alle Variablen gelesen werden, ist nur ein kleiner Teil des Problems. Und wegen des notwendigen Handshakes dürfte das mit dem sekündlichen konsistenten Aufzeichnen vermutlich nichts werden, zumindest nicht mit dieser Funktion.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Habe mich vor einiger Zeit selber mit einem ähnlichen Problem, allerdings und Professional, rumärgern dürfen. Da hätte diese Funktion mir das Leben sehr erleichtert.
Bei WinCC Scada / Professional existieren dafür die GetTagXXWait Funktionen, mit denen du alles viel flexibler zusammenstellen kannst. Außerdem lassen sich Rohdatenblöcke lesen die mit der SPS aus über BSEND koordiniert ausgetauscht werden, und zumindest bei WinCC Scada lassen sich in der SPS auch zeitgestempelte Daten 1:1 mit dem aufgezeichneten Zeitstempel ins Taglogging übernehmen, z.B. zyklusgenau mit Zeitstempel der SPS in das Taglogging übernehmen (ob das bei Prof. vorhanden ist weiß ich aber nicht). Also bei WinCC Scada hätte man alle Möglichkeiten um das genau so umzusetzen.
 
Eben, mindestens zwei Handshakesignale drumherum, mindestens. Seltsamerweise wird das bei der Verwendung von GetDataRecordTagsFromPLC nie erwähnt
Das Problem, wie man bei WinCC Comfort/Advanced Variablenwerte konsistent und garantiert aktualisiert aus der SPS ins HMI bekommt, wird eigentlich nie erwähnt oder gar erklärt. Bei den FAQ, wie man im HMI Werte in csv-Dateien schreiben kann (z.B. hier), schreibt Siemens nur geschickt unauffällig von "Speichern beliebiger auf dem Bediengerät vorliegender Daten". Wie die Daten aus der SPS sicher aufs Bediengerät kommen wird nicht erwähnt.

Harald
 
Jetzt zu meinem technischen Problem: Mein Plan ist es mithilfe eines VB-Scriptes im Panel die Daten sekündlich zu loggen. Das bekomme ich hin. Die Fragestellung ist ob die Daten dann zeittechnisch konsistent sind.
Wenn Du wirklich mit dem HMI-Panel die Daten loggen willst, dann wirst Du die Datensätze in der SPS in einem "Array[...] of Datensatz" (z.B. als Ringpuffer) zwischenpuffern müssen. Da kannst Du garantieren, daß die Variablen im Datensatz konsistent aus dem selben Zyklus stammen und einen zu dem Zyklus gehörenden Zeitstempel mitspeichern. Das HMI-Panel könnte dann z.B. jeweils 10 Datensätze als eine Rezeptur am Stück aus der SPS lesen. Die Geschwindigkeit, wie schnell so ein GetDataRecordTagsFromPLC die Werte ins HMI einliest, ist fast nur von der Aktualisierungsrate der Handshake-Variablen abhängig und fast gar nicht von der Anzahl der Variablen im Datensatz.
Schau Dir mal diesen Thread an, besonders ab Beitrag #12, wo ein sicherer Export von Datensätzen aus der CPU in eine CSV-Datei beschrieben ist (ereignisgesteuert, kein Warten im Script).

Wenn Du die Daten eh' nur testweise loggen willst, dann könntest Du auch generell nur in einen Ringpuffer in DBs loggen, und das aufwendige csv-Schreiben auf dem HMI-Panel weglassen, und die Werte bei Bedarf manuell mit dem PG mit TIA aus der CPU kopieren per Schnappshot oder Copy & Paste, z.B. direkt in Excel. So mache ich es in vielen meiner Steuerungen (mit Step7 classic), wo permanent einige Werte in Ringpuffer geschrieben werden und bei Bedarf kann ich dann manuell die Daten der letzten Stunde(n) aus der SPS in Excel kopieren.

Loggen auf die Memorycard der CPU oder Trace sind nicht so kompliziert und nicht so zeitkritisch beim herauskopieren der Daten aus der SPS.

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Bei WinCC Scada / Professional existieren dafür die GetTagXXWait Funktionen, mit denen du alles viel flexibler zusammenstellen kannst. Außerdem lassen sich Rohdatenblöcke lesen die mit der SPS aus über BSEND koordiniert ausgetauscht werden, und zumindest bei WinCC Scada lassen sich in der SPS auch zeitgestempelte Daten 1:1 mit dem aufgezeichneten Zeitstempel ins Taglogging übernehmen, z.B. zyklusgenau mit Zeitstempel der SPS in das Taglogging übernehmen (ob das bei Prof. vorhanden ist weiß ich aber nicht). Also bei WinCC Scada hätte man alle Möglichkeiten um das genau so umzusetzen

Das hätte mir wirklich sehr geholfen. Leider bei meinen Recherchen nie drüber gestolpert. Naja nun ist es ehh zu spät (arbeite "glücklicherweise" nicht mehr mit WinCC.

Wie funktioniert das denn eigentlich mit GetDataRecordTagsFromPLC wenn das konsistent sein soll? Gibt es dazu eine Funktion im SPS-Programm die mit dem HMI kommuniziert?

Richtig. Darum muss man sich natürlich selbst kümmern. Vorteil: Über den Status bekommt man mit wenn alle Variablen in der Visu geupdatet worden sind. Nachteil: Ob diese Daten alle aus dem selben Zyklus stammen ist wie bei jeder asynchron laufenden Übertragung nicht garantiert.
 
Erstmal danke an das viele Feedback.
Das Problem ist, das ich aktuell nicht sagen kann wo das Problem ist. Wir haben die Anlage ja übernommen und sollen schauen ob wir die zuverlässig genau bekommen. Beim durchschauen des Programmes ist mir nichts aufgefallen, was dieses Verhalten erklären könnte. Auch wenn das schwer ist ohne die Anlage in Betrieb zu sehen. Aus der Aussage vom Kunden, das die Anlage zu 90% richtig arbeitet (das reicht nicht aus), schließe ich das es kein systematischer Fehler im Programm ist. Also war meine Idee das es vielleicht an der Lageerkennung liegt oder mechanischer Natur ist. Daher möchte ich alle relavanten Werte loggen um zu sehen ob es irgendwelche Ausschläge gibt die das Problem vielleicht eingrenzen. Daher hätte ich auch gerne die Daten mit der selben Aktualisierungszeit.

Grundsätzlich ist es egal ob ich das über das Panel mache oder die SPS. Panel kam mir nur in den Sinn, da ich sowas schon gemacht habe. Und es muss eine csv Datei sein, da die Techniker des Kunden damit ebenfalls arbeiten möchten. Ich würde die Daten gerne auf einem PC ablegen, welcher im Netz ist. Dort werden vom HMI auch schon Protokolle abgelegt mit Chargennummern, etc. Ich möchte vermeiden die Daten ständig auf der SD Karte der SPS zu schreiben, da ein Vorgang ca. 60 - 120 Minuten dauert. Das wären bei sekündlichem Schreiben ziemlich viele Schreibzugriffe auf die Karte.
 
da ein Vorgang ca. 60 - 120 Minuten dauert. Das wären bei sekündlichem Schreiben ziemlich viele Schreibzugriffe auf die Karte.
Das ist natürlich richtig, aber die „Spezial teuren“ Siemenskarten sollten das schon mal abkönnen.
Ist ja auch nur für die Zeit für der Fehlerfindungsphase, soll ja nicht ewig so bleiben.

Abholen könntest du die csv Datei ja dann schön von dem PC im Netzt wenn du vorübergehend den Webserver aktivierst
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Die Frage ist, ob es für eine erste Analyse wirklich darauf ankommt, dass die Daten konsistent sind. Ansonsten könntest du auch im SPS Programm einen Datensatz in einem hochprioren DB (d.h. höher als die HMI-Kommunikation) zusammenstellen, mit einer automatisch inkrementierten ID am Anfang und Ende des Datensatzes, und diesen dann mit GetDataRecordTagsFromPLC aufzeichnen. Wenn du dann eine Auffälligkeit feststellst und die IDs sind verschieden, dann deutet das zumindest auf ein unsynchronisierten Lesevorgang und kein Problem im Programm hin.

Mit einer kleinen selbst erstellten Anwendung basierend auf Libnodave/Snap7 wäre das kein Problem, das 100% wasserdicht aufgezeichnet zu bekommen. Muss man nur ein mal etwas Zeit investieren, ist dann aber kostenfrei wiederverwendbar.
 
Ja genau, für temporäre Datenaufzeichnungen ist die Lösung mit Libnodave/Snap7 etc. auf einem extra PC viel einfacher zu realisieren, als mit einer WinCC HMI Panel/Runtime. Und wenn die Variablen in eine PDU passen, dann könnte man auch den Multiread (oder so ähnlich) verwenden, dann sollten die Werte aus dem selben Zyklus sein. Zum Daten loggen mit einem PC gibt es auch schon recht preiswerte fertige Programme, die man nur noch parametrieren muß.

Harald
 
Zurück
Oben