Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [Konzeptfrage] Messwerte speichern? (https://www.delphipraxis.net/126789-%5Bkonzeptfrage%5D-messwerte-speichern.html)

Chemiker 2. Jan 2009 15:27


[Konzeptfrage] Messwerte speichern?
 
Hallo,

welche Möglichkeiten gibt es Messwerte abzuspeichern?

In unserer Firma fallen am Tag ca. 2.880 * 280 Messstellen (806.400) Messwerte an, das sind im Jahr ca. 28.224.000 Messwerte. Diese Messwerte würde ich gerne abspeichern.

Jetzt überlege ich schon eine ganze Weile, wie ich diese Masse an Messwerte sinnvoll abspeichern kann.
Da die Datensätze nicht sehr groß sind, bin ich nicht sicher, ob es sich lohnt eine Datenbank dafür einzusetzen.
Außerdem würde ich gerne wissen, wie man es am besten anstellt auf alle Messwerte zu warten die in 30sek. übermittelt worden sind und diese dann in einem Datensatz abzuspeichern.

Für Ideen und Anregungen wehre ich dankbar.

Bis bald Chemiker

omata 2. Jan 2009 15:32

Re: [Konzeptfrage] Messwerte speichern?
 
Bei solch einer Datenmenge bietet sich eine Datenbank doch gerade zu an.

Dann sind auch später Auswertungen einfach möglich und das System ist zusätzlich noch sicher und einfach Erweiterbar.

Deine 30 Sekunden verstehe ich nicht so ganz. Willst du da den Mittelwert bilden und diesen dann abspeichern?

Chemiker 2. Jan 2009 15:38

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo omata,

habe das etwas missverständlich ausgedrückt, es werden alle 30sek. alle 280 Messwerte übermittelt. Diese müssen dann noch aufbereitet werden und mit einem Zeitstempel versehen werden.

Bis bald Chemiker

omata 2. Jan 2009 15:46

Re: [Konzeptfrage] Messwerte speichern?
 
Dann würde ich aber einen Zeitstempel ablegen und diesem eine ID zuweisen.
Dieser ZeitID können dann alle Messwerte zugewiesen werden.
Wenn die 280 Messwerte unterschiedlicher Art sind, aber sich immer wiederholen, würde ich für jede Art eine ArtID anlegen und eben die ZeitID, ArtID und den eigentlichen Messwert dann in eine dritte Tabelle schreiben. So wäre deine Datenbank normalisiert und du kannst später Auswertungen durchführen, die dir jetzt nichtmal in den Sinn kommen.

Chemiker 2. Jan 2009 16:18

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo omata,

die Auswertung ist eigentlich nicht das Problem, die Daten müssen nur gespeichert werden.
Die Messstellen-ID besteht aus 5 Zeichen und der Messwert ist ein Double, also insgesamt ist der Datensatz nicht groß. Wenn ich das in eine Datenbank mit 3 Tabellen unterbringe so müssten ja noch zusätzlich die Indexe angelegt und gepflegt werden und beim Zurückholen die Datensätze wieder zusammengesetzt werden.
Erschwerend kommt hinzu, dass einige Datensatz nicht regelmäßig übermittelt werden, das ist zwar nicht die Masse, aber die gibt es auch (Ventil auf / Ventil zu // Als Messwert wird die Zeit übertragen).
Dann kann es vorkommen das ein Messfühler ausfällt und gar keine Messwerte übertragen werden, oder nur Blödsinn.
Wie kann das Programm dann feststellen, dass keine weiteren Daten mehr übertragen werden?

Bis bald Chemiker

mkinzler 2. Jan 2009 16:20

Re: [Konzeptfrage] Messwerte speichern?
 
Die Idizes werden, wenn du Fremdschlüssel verwendest automatisch aktualisiert

Chemiker 2. Jan 2009 16:33

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo mkinzler,

nur geht bei der Masse von Datensätze die Geschwindigkeit der Datenbank in den Keller?

Bis bald Chemiker

khh 2. Jan 2009 16:34

Re: [Konzeptfrage] Messwerte speichern?
 
Zitat:

Zitat von Chemiker
Hallo omata,


Dann kann es vorkommen das ein Messfühler ausfällt und gar keine Messwerte übertragen werden, oder nur Blödsinn.
Wie kann das Programm dann feststellen, dass keine weiteren Daten mehr übertragen werden?

Bis bald Chemiker

ich denke das ist das Problem des verarbeitenden Programmes und nicht das der DB.

Gruss KH

khh 2. Jan 2009 16:36

Re: [Konzeptfrage] Messwerte speichern?
 
Zitat:

Zitat von Chemiker
Hallo mkinzler,

nur geht bei der Masse von Datensätze die Geschwindigkeit der Datenbank in den Keller?

Bis bald Chemiker

500 werte in der Minute ist für eine DB doch nix

Chemiker 2. Jan 2009 16:42

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo khh,

Zitat:

Zitat von khh
500 werte in der Minute ist für eine DB doch nix

vielleicht, ich weis es nicht. Nur es kommen da schon einige Datensätze am Tag zusammen.

Bis bald Chemiker

mkinzler 2. Jan 2009 16:44

Re: [Konzeptfrage] Messwerte speichern?
 
In diesem Bereich sollte es kein Problem darstellen ( kommt natürlich auch auf den Serverrechner an

omata 2. Jan 2009 16:47

Re: [Konzeptfrage] Messwerte speichern?
 
Nix vielleicht, dafür sind Datenbanken nunmal da. Große Datenmengen schnell zuverarbeiten und sicher abzuspeichern. Ich verstehe deine Bedenken und zaghaften Vormulierungen einfach nicht. Probier es doch einfach mal aus. Das sollte doch super fix umsetzbar sein.

Chemiker 2. Jan 2009 16:49

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo khh,

Zitat:

Zitat von khh
ich denke das ist das Problem des verarbeitenden Programmes und nicht das der DB.

Nur das Programm und die Datenbank gehören ja zusammen.

Wenn ich Datensätze in einem Stream so wie sie anfallen wegschreibe, dann ist es erst mal egal ob ein Messfühler ausgefallen ist, oder nicht.

Bis bald Chemiker

khh 2. Jan 2009 16:51

Re: [Konzeptfrage] Messwerte speichern?
 
Zitat:

Zitat von Chemiker
Hallo khh,

Zitat:

Zitat von khh
ich denke das ist das Problem des verarbeitenden Programmes und nicht das der DB.

Nur das Programm und die Datenbank gehören ja zusammen.

Wenn ich Datensätze in einem Stream so wie sie anfallen wegschreibe, dann ist es erst mal egal ob ein Messfühler ausgefallen ist, oder nicht.

Bis bald Chemiker

nur bedingt, das Programm sollte ja erst mal prüfen was es in die DB schreibt.

ich würde ja nicht ungeprüft den Stream in die DB schreiben

Bischen genauere Info wäre sicher hilfreich

mkinzler 2. Jan 2009 16:51

Re: [Konzeptfrage] Messwerte speichern?
 
Wenn keine daten kommen, brauchst du diese ja nicht wegzuschreiben

Mithrandir 2. Jan 2009 17:26

Re: [Konzeptfrage] Messwerte speichern?
 
@Chemiker: Wie sieht denn der Gesamtaufbau des Systems aus? Ich habe das Gefühl, dass du irgendwie unbedingt eine bestimmte Zeitspanne einhalten musst.

Eigentlich sollte es doch so ablaufen:

Code:
|                                                  |-> Alles Ok => Werte in die Datenbank
|Messwerte (Roh) => Programm verarbeitet die Daten |
|                                                  |-> Fehler => Fehler in das entspr. Log
Oder? Kann das Programm denn die Messwerte über eine entsprechende Schnittstelle anfordern, oder muss das Programm permanent "horchen"?

Chemiker 2. Jan 2009 17:35

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo,

Messwerte kommen an der seriellen Schnittstelle an, werden mit einem aktuellen Datum/Zeit-Stempel versehen und in einem TChart angezeigt, anschließend sollen diese Messwerte abgespeichert werden.

Zitat:

Zitat von mkinzler
Wenn keine daten kommen, brauchst du diese ja nicht wegzuschreiben

Aber wie kann ich das Erkennen mit einer Datenbank, dass ist das Problem (oder auch nicht).

Bis bald Chemiker

mkinzler 2. Jan 2009 17:39

Re: [Konzeptfrage] Messwerte speichern?
 
Ich würde nicht zuerst darstellen, sondern zuerst speichern und die Daten der DB darstellen.
Mit welcher Comport-Kompo arbeitest du. Nur wenn diese triggert würde ich Spiechern. Wie khk schon sagte, hat das mit der DB nichts zu tun

Chemiker 2. Jan 2009 17:53

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo mkinzler,

Zitat:

Zitat von mkinzler
Mit welcher Comport-Kompo arbeitest du.

mit Async Prof. 4.07.

Zitat:

Zitat von mkinzler
Wie khk schon sagte, hat das mit der DB nichts zu tun

Alleine gesehen natürlich nicht, aber ich habe bedenken das ich für die graphische Darstellung nach her zu wenig Zeit habe.
Ich muss es wie Ometa es geschrieben hat einfach ausprobieren und mir eine Datenbank mit 30 Mio. Datensätze erstellen und mal sehen, ob die Performens ausreicht für mein Vorhaben.

Bis bald Chemiker

mkinzler 2. Jan 2009 18:00

Re: [Konzeptfrage] Messwerte speichern?
 
Die absolute Anzahl stellt gar kein Problem dar. Wenn es eine Engpass gibt, liegt der am Durchsatz, also der Anzahl pro Zeit. Messe doch einmal wieviele Datensätze du pro Sekunde maximal Verarbeiten, Schreiben und darstellen kannst

TBx 2. Jan 2009 18:01

Re: [Konzeptfrage] Messwerte speichern?
 
Zitat:

Zitat von Chemiker
aber ich habe bedenken das ich für die graphische Darstellung nach her zu wenig Zeit habe.

Ich denke, da dürfte es keine Probleme geben.
Wir haben da seit geraumer Zeit eine Kühlhausüberwachung laufen, die mehrfach pro Sekunde die Daten aller Kühlhäuser speichert.
Schluckt in dem Fall der Firebird so weg.
Ein weiterer Vorteil ist, dass Du die Auswertung zeitgleich auf beliebig vielen Rechnern visualisieren kannst, solange diese Zugriff auf die DB haben.

tr909 2. Jan 2009 18:14

Re: [Konzeptfrage] Messwerte speichern?
 
zur Speicerhung von Messwerten fällt mir spontan „Round-Robin-Database“ ein.
Dort fallen natürlich dann die Einzelwerte nach einiger Zeit weg, jedoch sind Summen, Mittwerte, etc. verfügbar. (evtl. Wäre das ja ein Alternative)

Gruß
tr909

haentschman 2. Jan 2009 18:52

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo Chemiker...

Zitat:

es werden alle 30sek. alle 280 Messwerte übermittelt. Diese müssen dann noch aufbereitet werden und mit einem Zeitstempel versehen werden.
Ich glaube da besteht kein Geschwindigkeitsproblem. Da dauert wahrscheinlich die Übertragung länger als das Schreiben in die Datenbank.

Zitat:

Ich würde nicht zuerst darstellen, sondern zuerst speichern und die Daten der DB darstellen.
...dem stimme ich vorbehaltlos zu.

Wenn die Visualisierung parallel läuft könntest du das Speichern der Werte in einen Thread auslagern und dein Chart im Formular aktualisiert sich in gewissen Zeitabständen aus der DB.

:hi:

Chemiker 2. Jan 2009 22:08

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo,

erst mal Danke an alle, für die tolle Ideen.

Werde mal versuchen das mit Firebird und FIBPlus umzusetzen.

Bis bald Chemiker

mjustin 2. Jan 2009 23:25

Re: [Konzeptfrage] Messwerte speichern?
 
Zitat:

Zitat von Chemiker
Hallo,

erst mal Danke an alle, für die tolle Ideen.

Werde mal versuchen das mit Firebird und FIBPlus umzusetzen.

Bis bald Chemiker

Dieser Anwendungsbereich kann auch mit einer Message Oriented Middleware gut abgedeckt werden. Firebird kann man dabei als Persistenz-Backend einsetzen. Der Vorteil ist, dass sich an einem Message Broker beliebig viele Sender (Messwerterfassungs-Clients) und Empfänger (Visualisierungs- und Verarbeitungsanwendungen) dynamisch an- und abmelden können. Auch Load Balancing ist damit sehr leicht herstellbar, da man eine Queue für die Weiterverarbeitung von mehreren PCs aus abarbeiten kann, wobei der Message Broker dafür sorgt, dass jede Nachricht nur an einen einzigen Client gesendet wird.

Auch ist die Datenbank dann nicht mehr ein Single Point of Failure - man kann sie zu Sicherungszwecken herunterfahren, während der Message Broker weiter die Daten annimmt (oder auch mehrere Broker mit automatischem "failover").

Nachrichten, die man nicht dauerhaft speichern will, kann man dabei als 'nicht-persistent' kennzeichnen, und gängige Message Broker unterstützen auch Transaktionen (z.B. Apache ActiveMQ). Clients Libraries gibt es - je nach Broker - für fast alle Plattformen und Sprachen.

Ist vielleicht zu spät für das aktuelle Projekt, aber später eventuell mal interessant.

Schönes & erfolgreiches neues Jahr

WInfo 4. Jan 2009 12:04

Re: [Konzeptfrage] Messwerte speichern?
 
Moin, Moin, Chemiker,

kannst Du bitte mal einen Beispieldatensatz bringen, wie das aussehen wird, was Dir die Messstationen zurückbringen. Ausserdem wären ein paar Erläuterungen sinnvoll, über das was Du mit diesen Daten machen würdest, welche Auswertungen, ob Auswertungen überhaupt, maschinelle Weiterleitung etc.

Denn die Weiterverarbeitung deiner Daten bestimmen das zugrunde liegende Modell.

Chemiker 4. Jan 2009 12:23

Re: [Konzeptfrage] Messwerte speichern?
 
Hallo WInfo,

der Datensatz der von der SPS kommt sieht wie folgt aus:

3 Zeichen Maschinen-ID
2 Zeichen Messstelle-ID der Maschinen
Double-Wert = MW

Mit diesen Werten werden zum Beispiel Temperatur – Kurven im TChart dargestellt. Füllstandsanzeigen von Tanks angezeigt und aufgezeichnet, Stromverbrauch von Maschinen aufgezeichnet usw.
Es ist also eine reine MW-Aufzeichnung keine Steuerung.

Im Kleinen Maßstab läuft das Programm das Problem ist jetzt nur die Masse an Daten, die jetzt anfallen.

Bis bald Chemiker

WInfo 5. Jan 2009 14:03

Re: [Konzeptfrage] Messwerte speichern?
 
Moin Moin Chemiker,

danke für deine Ausführungen, wollte zuerst schreiben, ob Du deine Auswertungen nur eine Maschine benötigst, um ggf. die Daten maschinenbezogen abzuspeichern, aber da dürfte es wohl Probleme mit den Filehandels geben, daher wird man nicht dran vorbeikommen die Daten in ein File zu schreiben. Wie möchtest Du denn gerne die Historie auswerten, nur rückwirkend auf 30 Tage oder permanent beginnend von Adam und Eva.

Denke, hier sollte man zweigeteilt vorgehen, eine Datei mit den Daten für Auswertungen und ggf. noch eine für die Historie, auf welche nur selten schreibend zugegriffen wird. Da die Daten alle lesend sind, kann man auf ein Transaction Processing verzichten, es wird bei einem Flatfile jedoh schwierig die Daten herauszuholen, aber bei der Dateigrösse (3 + 3 + 4 + 4)* 2880 * 280 = 10,8 MB je Jahr tendiere ich zu einer strukturieren Datei. Da die paar MB sehr schnell gelesen werden können und die Datensätze schnell hinzugefügt werden können, ohne weitere Indexe mit fortzuschreiben. Einen Datenbank sehe ich für diesen Einsatzbereich aktuell nicht, wäre oversized und würde zu viel Performance schlucken.

Edit: Hier noch die Datendefinition, wie ich sie verstand in der Luxusausführung mit 23 Byte Recordlänge.
Delphi-Quellcode:
TYPE
  STR3 = string[3];
  STR2 = string[2];

  TMachineInfo = PACKED RECORD
    MachineID:   STR3;
    ControlPoint: STR2;
    TimeStamp:   tDateTime;
    Measurement: double;
  END;
VAR
  MachineInfoFile: FILE OF TMachineInfo;
Schöne Grüße


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz