Daten Speicher optimiert auf der Steuerung sichern!

MartinB

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

arbeit mich schon eine weile in Codesys ein, und bin gerade auf der Suche nach einer Möglichkeit große Datenmengen auf der Steuerung abzulegen, die ich kann bei Bedarf als CSV-Datei auf einen Stick exportieren kann.

Gib es in Codesys eine andere Möglichkeit als txt. oder csv. die Daten speicheroptiemierter abzulegen?
Im Vorraus schon vielen Dank für eure Beiträge!
Gruß MartinB
 
... bin gerade auf der Suche nach einer Möglichkeit große Datenmengen auf der Steuerung abzulegen, die ich kann bei Bedarf als CSV-Datei auf einen Stick exportieren kann.

Gib es in Codesys eine andere Möglichkeit als txt. oder csv. die Daten speicheroptiemierter abzulegen?
Um welche Art von Daten geht es denn?
FestPunktZahlen? GleitPunktZahlen? Daten im Sinne von "Datümern" und bzw. mit UhrZeiten?

Die Daten SPS-intern fix und fertig schon als Text aufbereitet abzuspeichern, mag verlockend klingen. Insbesondere, wenn man nur relativ selten grosse DatenMengen auslagern, aber die Zeit für das Konvertieren der Daten möglichst breit verstreuen will.

Welche DatenStrukturen gedenkst Du denn auszulagern?
Es müsste doch durch die AufgabenStellung schon mindestens ein wenig vorgegeben sein, wie die Daten sich als Array oder als Array Of Struct am besten unterbringen und "verwalten" lassen.
In Hinblick auf eine zu produzierende CSV-Datei wäre natürlich eine möglichst einfache und übersichtliche TabellenDarstellung der Daten anzustreben.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Heinileine,


Es handelt sich um Diagramm Daten (Kraft Weg verlauf). Zwischen gespeichert in einem "Array[0..512]of Struct".
***********************************************************************************************************************
TYPE DUT_LogDataDiagram :
STRUCT
Kraft : REAL; (*()*)
Weg : REAL; (*()*)
END_STRUCT
END_TYPE
***********************************************************************************************************************
PROGRAM PLC_PRG
VAR
Kurvendaten : ARRAY[0..512]OF DUT_LogDataDiagram; (*Kurvendaten mit max 512 Punkten()*)
Zeitstempel : DATE; (*Zeitstempel()*)
BauteilInfo : STRING; (*Bauteilinformation()*)
END_VAR
***********************************************************************************************************************
Die Daten werden während des Prozesses in der Array-Struktur gesammelt und sollen solang der Werker das Bauteil wechsel gesichert werden.
Und am Ende des Tages (120-150 Datensätze) sollen die Daten auf ein Speicher-Stick gesichert werden!

Vielen Dank für deine Mühe !!!
 
Also, Du weisst schon, welche Daten Du sammeln und gelegentlich auslagern willst/sollst. Und eine zweckmässige DatenStruktur hast Du anscheinend auch schon.
Ich verstehe aber nach wie vor Deine Frage nicht so richtig. Du willst die Daten "speicheroptimiert" ablegen?
Vermutlich, um nicht allzu häufig die Daten auslagern zu müssen?
Was versteckt sich hinter "Bauteilinformation". Sind das häufig wiederkehrende Begriffe/Texte aus einer "überschaubaren" Liste von Texten, so dass man SPS-intern anstelle des Textes eine platzsparende Codierung - z.B. IndexNr des Textes - abspeichern könnte?

Dir ein Rezept an die Hand zu geben, das sich allgemeingültig zum PlatzSparen anwenden liesse, halte ich für schwierig/bedenklich.
Die Umwandlung in Text würde ich mir aufsparen, bis zu dem ZeitPunkt, in dem die CSV-Datei ausgegeben werden muss.
Nach PlatzSparPotenzial in der CSV-Datei würde ich mich auf die Suche machen. Wie sollten die einzelnen Zahlen "formatiert" werden?
Anzahl vorlaufende Nullen? Anzahl Stellen der Mantisse u.s.w..
Wie werden die CSV-Dateien weiterverarbeitet?
Zunächst mal in Excel, so dass in Excel vieles automatisch "nachgearbeitet" werden könnte?
Oder direkt zur Begutachtung an einen "ZweiBeiner", dem man nicht das Leben zur Hölle machen möchte?
Oder sollen die CSV-Dateien evtl. später wieder in die oder eine andere SPS eingelesen werden?
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Kurvendaten : ARRAY[0..512]OF DUT_LogDataDiagram; (*Kurvendaten mit max 512 Punkten()*)
Warum hat das Array 513 Elemente für max 512 Datenpunkte?

513 * 2 REAL = 4104 Byte + geschätzt 24 (?) Byte Date + Infostring = 4128 Byte, davon 150 Datensätze macht 619'200 Byte, ca. 605 kB
Deine Codesys-SPS hat nicht so viel Datenspeicher? Wieviel hat sie und wieviel davon kann remanent sein? Hat sie eine Memory Card? Gibt es in der Codesys-SPS sowas wie Ladespeicher und kann die SPS darauf schreiben/lesen? Muß jeder Datensatz 512 Datenpunkte haben oder kann er auch kürzer ausfallen? Wieviele Daten dürfen verloren gehen, falls mal die Stromversorgung der SPS ausfällt?

REALs in einer csv- oder Textdatei speichern braucht sehr wahrscheinlich mehr Platz, es sei denn die meisten Werte sind 0 oder ein anderer sehr häufig vorkommender Wert, oder es reichen 4..5 Ziffern, oder die Werte unterscheiden sich nur wenig oder steigen/fallen nur langsam (mit wenig Differenz zum Vorgänger).

Harald
 
Dir ein Rezept an die Hand zu geben, das sich allgemeingültig zum PlatzSparen anwenden liesse, halte ich für schwierig/bedenklich.
Sehe ich auch so. Dafür müsste man mehr über die Struktur der Daten wissen, und wieviel Rechenzeit und Programmspeicherplatz in der SPS zur Verfügung steht. Vermutlich wird es aber keine in der SPS sinnvoll anwendbare Komprimiermethode geben. Also: entweder der Datenspeicherplatz reicht oder es muß auf genügend großen Datenspeicherplatz ausgelagert werden.


Gib es in Codesys eine andere Möglichkeit als txt. oder csv. die Daten speicheroptiemierter abzulegen?
Das binäre Format von REAL-Zahlen ist schon eine speicheroptimierte (verlustbehaftete) Kompression. Der Platzbedarf von REAL-Datensätzen läßt sich nur noch weiter verringern, wenn man Redundanzen aus den Datenstrukturen entfernen kann oder unwichtige Informationsverluste hinnehmen kann.

wikipedia/Datenkompression#Verlustfreie_Kompression

google.de/search?q=zahlen+komprimiert+speichern

Harald
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,
danke erstmal für eure Beiträge !!!

in der CSV speichere ich den Wert, nicht als Text!

Diese Aufzeichnung von Kraft und Weg kommt zusätzlich in meine bestehende Steuerung. (eine riesige Datenmenge)
Wird immer öfters von Kunden gefordert!

ich habe in meiner Steuerung eine Kraft-Weg-Diagramm Aufzeichnung und die Aktuelle soll angezeigt werden.
Für eine Kurve habe ich aktuell 512 gemessene Punkte, soll aber vielleicht auch noch erhöht werden.

Hier für benötige ich für ein Datensatz:
- ein Kraftwert REAL 512x (Überlegung den auf INT zu ändern, um speicher zu sparen) => sind steigende Werte
- ein Wegstrecke REAL 512x (Überlegung den auch auf INT zu ändern, um speicher zu sparen) => sind steigende Werte
- pro Kraft-Weg Aufzeichnung ein Material und SerialNr. 2x INT

- Für die Auswertung des Kraft-Weg-Verlaufs benötige ich noch Fenster-Daten: (hier schematisch blau dargestellt)
* pro Fenster 2x Weg / 2x Kraft = 4x INT
* 10 Fenster sind einstellbar

- Zeit-/Datum Stempel.
1682662294926.png

Auf der Steuerung von EPIS habe ich zu wenig Speicher um (in einem Ringpuffer) 150 Datensätze in CSV-Format vor zu halten! Da ich noch andere Daten (wie Konfigurationsdaten auch noch sichern muss, hauptsächlich Bool und Int)

Solange die Daten auf der Steuerung gespeichert sind muss ich Sie auch nicht lesen können nur wieder herstellen. Erst wenn ich die Daten auf einen Stick exportiere, müssen in Ecxel die Daten auswertbar sein!
 
Wie kann ich die Daten Binär speichern?
In der SPS sind sie das ja schon - der Vorschlag bezog sich auf "in einer Datei" weil du die Daten in einer CSV-Datei üblicherweise als String ablegst.

Zu deinem Haupt-Thema :
Ich habe in der Vergangenheit sehr häufig Kraft-Weg-Messungen mit der SPS umgesetzt (bei mir allerdings in der Siemens-Welt). Meißt Federkraft- oder Belastungs-Entlastungs-Kurven - sehr häufig auch nicht-linear.
Hierzu hatte ich einen FB, der die Werte entgegengenommen hat und der sie nach erfolgter Messung auch ausgewertet hat. Fenster, wie von dir dargestellt (bei mir aber meißt als Parallelogramm oder in S-Form) hatte ich auch. Ich hatte die Messungen aber grundsätzlich NIE versucht auf der SPS zu archivieren (die kommt da dann schnell an ihre Grenzen) sondern ich habe sie von der Visualisierung (PC-Runtimes) abholen lassen auf den Trigger hin "Auswertung beendet". Bei mir reichten in den meißten Fällen die Auswerte-Ergebnisse (also IO-NIO und die Lage in den Kontroll-Fenstern) - es kam aber auch vor, dass der Kunde die Kurve selbst archiviert haben wollte. Auch hier hatte ich mich einer CSV-Datei bedient wobei (der Einfachheit halber) jede Messung eine eigene Datei war und jeder Tag ein eigenes Verzeichnis.
Außerhalb der Visu gab es dann ein PC-Programm, dass diese Dateien einlesen und in eine Datenbank abspeichern konnte ... und natürlich auf Wunsch hin die Daten auch wieder hervorholen und visualisieren konnte.

Das Ganze mal als Anregung zu deinem Thema - vielleicht hilft es dir ...
 
Zurück
Oben