Messwertspeicherung mit cleverem Speicherkonzept?

Küffel

Level-1
Beiträge
137
Reaktionspunkte
1
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Aufgrund des beschränktem Arbeitsspeichers bin ich auf der Suche nach einem guten Speicherkonzept für Messwerte.

Ich habe mir folgendes vorgestellt und möchte mal eure Meinung zur Realisierung hören:

-Ich möchte verschiedenste Messwerte in einenem DB zur späteren Auswertung speichern. Es sollen neben den Messwerten auch das jeweilige Datum bzw. Uhrzeit gespeichert werden. Das Ganze soll ca. alle 10 Sekunden erfolgen.

1. Frage: Alle Messwerte in einen DB? Sicherlich sinnvoll, da die Zeit nur einmal gespeichert werden muss, oder gibts Probleme bei der Darstellung von Kurven, in Protool?

2. Frage: Speicherung im Array sinnvoll? Insgesamt ca. 5 Realwerte pro Messzeitpunkt!

-Da die Auswertungszeitpunkte der Messreihen nicht regelmäßig sind, und der DB nicht zu groß werden sollte, will ich ihn beispielsweise nach einem Tag (oder einer Woche), in den Ladespeicher verfrachten.

3. Frage: Ist das möglich? Wenn ja wie? Wie schaut es mit dem Zugriff von Protool auf einem DB im Ladespeicher der SPS aus?


Oder bestimmt gibts auch bessere Ideen?!

Vielen Dank für eure Hilfen...

MFG
Küffel
 
Wenn der DB als unlinked gekennzeichnet wird, belegt er nur Platz im Ladespeicher, nicht aber im Arbeitsspeicher, das stimmt. Wenn du Platz sparen willst, solltest du möglichst auf Struct und UDT verzichten (Array weiß ich nicht genau) und wirklich einfach linear die Daten im DB ablegen. Aus unerfindlichen Gründen bläht die Strukturierung eines DB dessen Platzbedarf im Ladespeicher enorm auf. Du kannst das in deinem Fall einfach ausprobieren, indem du die unterschiedlichen Datenbausteine erzeugst und die Daten jeweil anders strukturierst. Unter Eigenschalften(Teil 2) wird dir der Speicherverbrauch angezeigt.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Ralle,

vielen Dank erst mal.

Das mit dem unlinked habe ich auch mal gelesen. Aber wäre es nicht tödlich alle 10 sek. auf die MMC zu schreiben? Der Ladespeicher befindet sich doch dort, oder (313C)? Deshalb wollte ich den db täglich (wöchentlich) dort hin kopieren.

Gruß Küffel
 
nicht häufig auf MMC schreiben...

... den die Schreibzyklen sind begrenzt.
@Küffel

Bei 5 Messwerten aller 10s sind das 30 pro Minute.
Mit Zeitstempel und angehängten Real-Wert sind das
8 + 4 Byte (glaube ich) = 360 Byte pro Minute !!!!

Je nach CPU darf ein DB max. 16K (seltener 64K - nur "große" CPU)
große sein. Das ist leider sehr schnell erreicht.
In ca. 45 Minuten sind 16k voll, wenn ich richtig rechnen kann.

Das wird zuviel, denke ich.

Kauf die einen CP343-1IT und schreiben die Daten
in den RAM (nicht EEPROM-Bereich = MMC Verhalten)
Allerdings sind die Daten weg, wenn der Strom ausfällt.
Das Datenschreiben:

CPU - CP mittels FTP

CP - PC mittels FTP (z.B. sehr einfach TOTAL Commander)


Tschau

Frank S.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Frank,

stimmt, du hast Recht, das wird verdammt groß!

Wenn man jedoch von 100000 Schreibzyklen einer MMC ausgeht (Richtwert, korregiert mich wenn ich falsch liege) komme ich bei Stündlichem schreiben auf die MMC auf ca 11 Jahre, wer weiß was bis dahin sonst alles kaputt ist :) Also das würde gehen!

Wenn ich jetzt anstatt real nur int speichere (müsste auch reichen), und die zeit nur jede stunde, käme ich auf 3608 Byte pro stunde. Du merkst ich bin schon einige Kompromisse eingegangen :evil:
Aber die IT-Baugruppe ist viel zu teuer...

Was denkt Ihr, ist das realsierbar?

Danke noch mal
Gruß Küffel
 
Es kommt noch darauf an, wie lange du die Meßwerte aufnehmen willst. Man kann auch einen PC mit MPI-Schnittstelle dranhängen und diesen die Daten aus dem DB abholen lassen. (LINUX und Libnodave, Prodave von Siemens und diverse andere Bibliotheken). Mit einem Panel von Siemens (MP270?) könnten man per Script Daten auf eine Flashkarte mit 1GByte Speicher ablegen. (Suche mal im Forum nach VBScript, als Anregung)
Das hab ich aber auch noch nicht gemacht :cry: .
 
Hallo Ralle,

die Größe der MMC (4MB) dürfte reichen! Angenommen ich habe 3.6kB pro stunde --> ca. 2,7 MB im Monat! Länger als ein monat brauche ich die Daten nicht!

Das mit dem MP wäre auch eine gute Idee. leider hängt nur ein TP170a dran!

Gruß Küffel
 
Zuviel Werbung?
-> Hier kostenlos registrieren
wenn du die schreibzyklen noch weiter reduzieren willst spricht doch auch nichts dagegen den speicher im ram über meherer db´s zu ziehen, und zb. alle 5 stunden einen block mit 5 db´s kopieren...
 
Hallo Markus, leider sind 32kb ram zu 90 Prozent voll!

Ich habe heute versucht einen DB im Ladespeicher mit sfc 82 zu erzeugen, leider funktioniert dies mit PLCSIM nicht, da er keine MMC simuliert! Ist das richtig? gibts eine möglichkeit das in PLCSIM einzustellen?

Gruß Küffel
 
Filter die Daten

Hallo
vielleicht hilft ja auch ein Filter vor dem Abspeichern der Daten, da
haeufig die Daten sich nur wenig aendern. Und da du die Zeit mit
speicherst, hast du schon die halbe Miete.

Wie geht's :

Man vergleich den aktuellen Wert mit dem vorheriggespeicherten Wert und speichert den aktuellen Wert nur ab, wenn die Abweichung (absolut) groesser als ein waehlbaren Faktor ist (z.B. 5 % ).

mit gruss
Michael
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo Michael,
das ist eine gute IDee, habe ich noch gar nicht dran gedacht!

Allerdings wollte ich um Speicher zu sparen die Zeit nur am anfang speichen, heißt: z.b. jede Stunde! ich könnte jedoch in einer int variable zählen, wie oft ein wert gleich ist!

Das Problem sehe ich dann nur bei der Visualisierung, wie mache ich Protool klar, welche werte es wie zu interpretieren hat!
 
Zurück
Oben