TIA Datenlogger CSV-Datei über USB-Stick an HMI

Stefan2000

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

ich habe die Aufgabe, einen Datenlogger für die Messwerte unserer Testanlagen zu realisieren, um z.B. ROI-Berechnungen durchführen zu können. Die Lösung soll außerdem auch ohne Internetanbindung funktionieren, daher kommt eine Cloudlösung nicht in Frage. Es sollen folgende Messwerte bis zu 3 Monate erfasst werden:

Elektrische Energie Verbrauch Gesamtanlage
Auslastung Pumpenmotoren
Heißwasser Verbrauch
Kaltwasser Verbrauch
3x Temperatur Messwerte
3x Fluss Messwerte
3x Druck Messwerte
Druckluft Verbrauch
Regenerationsmittel Verbrauch
Volumenmessung
Füllstand Tank
Leitwertmessung

Ich dachte daran, die Daten direkt als CSV-Datei auf einen USB-Stick zu schreiben und später, wenn die Anlage wieder zurückkommt, in einer Excel auszuwerten. Leider habe ich darin aber keine Erfahrung und weiß nicht, ob diese Lösung überhaupt so realisierbar ist. Oder doch lieber direkt über einen IPC mit SQL-Datenbank laufen lassen …? Vielleicht hat jemand schon so ein Projekt realisiert und kann mir weiterhelfen.

Danke schonmal für eure Hilfe.
 
Hallo

wie schnell muß die Erfassung sein?

Bei Druckspitzen (Stöße) und Motorstromspitzen wird ein Siemens-HMI zu langsam sein.

Wenn 3 sec reichen schau Dir mal Archiv_Trend Funktionen an.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was für eine CPU, HMI und TIA-Version nutzt du denn?
Prinzipiell kannst du die csv-Datei über die Archiv-Funktion erstellen, wobei ich die Anordnung der Werte da nicht so prickelnd finde. Es ginge auch über ein Skript (falls keine Basic-Panel), da gibt es hier im Forum zahlreiche Beispiele die mir auch sehr geholfen haben.
Allerdings würde ich dir vom USB-Stick abraten, damit hatte ich immer Probleme. Besser ist es wenn du dem Panel eine SD-Card spendierst.
 
- falls deine unbekannte CPU das kann, dann logge die Werte in der CPU
-wenn du mit dem HMI loggen willst, dann projektiere Archive. Das dabei nicht änderbare csv-Dateiformat kannst du später mit Excel in ein dir besser passendes Format umkonvertieren.
- wenn du mit dem HMI in eigene csv-Dateien loggen willst, dann bekommst du das Problem, dass du die Werte nur mit einem eigenen Handshake oder als Rezeptur garantiert aktualisiert und konsistent ins HMI eingelesen bekommst. Siehe Forumsuche mit Stichwort: GetDataRecordTagsFromPLC

Wie häufig sollen die Werte geloggt werden? Rechne mal aus, wieviel Speicherplatz das für 3 Monate erfordert.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Zusammen,

danke für eure schnellen Antworten @Ing_Lupo @schwimmer @PN/DP @Heinileini. Wir verwenden in unserer Anlage eine 1512SP-1 CPU und ein TP900 Comfort Panel sowie TIA V17. Erfassungszeitraum von 3s sollten genügen. Benötigter Speicherplatz werde ich heute noch berechnen. Inwiefern gibt es Probleme mit dem USB-Stick also weshalb eher eine Speicherkarte?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
"SPS-intern" hat eine REAL-Zahl 4 Byte. In "druckbarer" Form, z.B. in einer CSV-Datei, je nach Formatierung bzw. StellenZahl unterschiedlich, aber je Zeichen 1 Byte.
In CSV-Datei zusätzlich noch als TrennZeichen zur nächste Spalte 1 Byte einplanen.
1 TAG = 18 (Sensorwerte) * 4 Byte (Realzahl) * 16Byte (Trennstellen) * 3s (Erfassungszeitraum) * 20s * 60min * 24h = 99532800 Byte = 0,1 GB

1 Monat = 99532800 * 30 = 2985984000 Byte = 2,99 GB

3 Monate = 2985984000 * 3 = 8957952000 Byte = 8,96 GB

Wäre die Rechnung so Korrekt oder muss ich für z.B. Zeitstempel auch noch Speicher einplanen?
 
Da würde sich auch ein kleiner PC (RASPI sollte auch gehen) mit Python anbieten, der die Daten aus der SPS alle 3 Sekunden via Ethernet ausliest.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hatte da immer wieder Probleme, dass die USB-Sticks nicht erkannt werden oder die Datei nicht lesbar war.
Okay in dem fall dann nur SD-Karte.

Da würde sich auch ein kleiner PC (RASPI sollte auch gehen) mit Python anbieten, der die Daten aus der SPS alle 3 Sekunden via Ethernet ausliest.
An sowas dachte ich auch schon. z.B. mit einem SIEMENS IOT 2050 über OPC UA und Notered. Leider aber auch keine wirkliche Erfahrung damit.
 
1 TAG = 18 (Sensorwerte) * 4 Byte (Realzahl) * 16Byte (Trennstellen) * 3s (Erfassungszeitraum) * 20s * 60min * 24h = 99532800 Byte = 0,1 GB
4 Byte für 1 REAL-Zahl ist in einem CSV-Format seeehr knapp kalkuliert. Je nach Wert/Grösse der Zahl, ExponentialSchreibweise ja/nein, Anzahl der Vorzeichen, Anzahl der VorkommaStellen, Anzahl der NachkommaStellen, ... ist der PlatzBedarf recht variabel.
Z.B. 0,0 ... -1234,567 ... -1234567000000 ... -1,23+E12
... oder muss ich für z.B. Zeitstempel auch noch Speicher einplanen?
Ja, ZeitStempel würde ich einplanen. Evtl. könnte man Platz sparen, wenn man nur die Differenz zum vorhergehenden (!?!) ZeitStempel abspeichert. Aber dafür müsste man zusätzlich "GerhirnSchmalz" und Rechnerei investieren.
Welche Genauigkeit? Sekunden? MilliSekunden? ...?
 
Eine ziemlich schicke Lösung wäre auch InfluxDB mit Telegraf (als Docker Container).
Telegraf ist ein Agent der OPC-UA kann und die Daten ausließt und an InfluxDB schickt.
Ist kostenlos und bietet ein WebUI um sich die Daten anzuschauen und sogar Berechnungen zu machen.

Es gibt sehr viele Anleitungen online dazu.

Konfiguration wäre über ein Config-file so in der Art:

Code:
# Retrieve data from OPCUA devices
[[inputs.opcua]]
   interval = "1s"
   name = "XXX_FAST"
   endpoint = "opc.tcp://172.18.66.30:4840"
   connect_timeout = "10s"
   request_timeout = "5s"
   security_policy = "None"
   security_mode = "None"
   auth_method = "Anonymous"
  [[inputs.opcua.group]]
   namespace ="3"
   identifier_type ="s"
   nodes = [
    {name="DB_Analog_FTI220_11_Istwert", namespace="3", identifier_type="s", identifier='"DB_Analog"."FTI220_11"."Istwert"'},
    {name="DB_Analog_FTI220_12_Istwert", namespace="3", identifier_type="s", identifier='"DB_Analog"."FTI220_12"."Istwert"'},
    {name="DB_Analog_FTI220_21_Istwert", namespace="3", identifier_type="s", identifier='"DB_Analog"."FTI220_21"."Istwert"'},
    {name="DB_Analog_FTI220_22_Istwert", namespace="3", identifier_type="s", identifier='"DB_Analog"."FTI220_22"."Istwert"'},
  ]
 
Zurück
Oben