zwei Schleifen oder eine Schleife
Guten Abend!
Ich habe ein Problem, wo ich grade etwas auf dem Schlauch stehe. Ich habe heute mit jemand anders diskutiert, ob man Messwerterfassung und Abspeichern in eine Schleife setzt oder in zwei Schleifen und diese miteinander verbindet, z.B. mittels Queues.
Folgende Randbedingungen:
Die Messwerte kommen per Ethernet aus einem Echtzeitsystem. Das Echtzeitsystem hat einen sehr großen Ringspeicher, der kontinuierlich gefüllt wird.
Nach meinen bisherigen LabView-Erfahrungen würde ich den Prozess des Auslesens und des Abspeicherns in zwei Schleifen realisieren. Die Auslesung aus dem Echtzeitsystem würde ich mit einem Timer versehen, so dass in regelmässigen Abständen - z.B. alle 100ms der Ringspeicher komplett gelert wird, dann bekomme ich ein Array mit Messwerten und dieses Array würde ich an eine zweite Schleife mittels einer Queue senden, um dort den Abspeicherprozess zu erledigen.
Ich sehe folgende Vorteile in dieser Variante:
- die Proesse von Abspeichern und Daten holen sind "dynamisch" voneinander getrennt
- ich kann die Abspeichereinheit später leichter anpassen - z.B. wenn die Datei zu groß wird und eine zweite her muss
- eventuelle Verzögerungen z.B. durch das Schreiben auf die Festplatte würden vermieden werden (jede Schleife hat ihre eigene Dynamik, die Queue puffert nochmal)
- wenn eine Messung viele Stunden dauert, dann muss die Datei nicht ständig geöffnet sein, wenn man beim Auslesen z.B. 10.000 Werte bekommt in einem Datenpaket, dann wird die Datei kurz geöffnet, die Daten aus dem Array gespeichert, dann die Datei wieder geschlossen - ich weis auch garnicht was passiert, wenn eine Datei noch offen ist und der Rechner abstürzt
Folgende Gegenargumente wurden benannt:
- es sind zwei Speicher vorhanden - in dem Computer durch die Queue und in dem Echtzeitsystem (Ringspeicher)
- der Prozess vom Datenholen und vom Abspeichern soll in einem Zug durchgeführt werden mit höchster Priorität, aber immer nur dann, wenn er dran ist. Während der Wartezeit nicht. Durch die Variante mit den zwei Schleifen und die Queue ist dies nicht gewährleistet, sondern die Queue liefert zeitverzögert den Datensatz an die zweite Schleife
- wenn z.B. irgendwelche Verzögerungen auftreten - z.B. wenn das Datenaufdiefestplatteschreiben länger dauert, dann wird dies schon durch den im Echtzeitsystem vorhandenen Ringspeicher ausgeglichen
- das Problem mit dem Öffnen und schließen kann man so umgehen, wenn man den Prozess des Öffnens vor das Datenauslesen setzt, da auch z.B. 8445 Messwerte bekommt und die dann auch in einem Rutsch abspeichert
Ich habe auch später noch in meinem LabView-Buch noch nach einer Lösung gesucht, welche Variante empfohlen wird (habe das Buch Einführung in Labviev 5.0 von Ergen Mertin), aber irgendwie nichts gefunden.
Ich wie gesagt würde von meinem Bauchgefühl heraus die erste Variante mit voneinander entkoppelten Datenholen- und Abspeichern vorziehen, kann aber auch die Argumente meines Chefs verstehen, dass hierbei nochmal eine Queue neu geschaffen wird und ein zweites Puffern der Messwerte nicht nötig ist.
Ich hab mir später auch gedacht, dass meine Variante vielleicht dann sinnvoll ist, wenn die Daten sehr schnell aus einem Messgerät ausgelesen werden müssen, wenn der Ringspeicher in dem Gerät nicht groß genug ist und dann Verzögerungen durch Speicherprozesse z.B. zum Überlauf beim Datenerfassungsgerät die Folge sein könnten.
Ich würde mich sehr freuen, wenn mir ein paar Spezialisten von Euch dazu ein paar Argumente geben könnten, welche Variante denn nun geeigneter wäre, weil es zwei unterschiedliche Programmieransätze sind und wenn ich einen andere Variante nehme als die von meinem Chef, dann muss ich das auch gut begründen können, was ich aber zur Zeit nicht kann - ich würde es nur aus dem Bauchgefühl heraus so machen wie von mir beschrieben. Aber irgendwie erscheinen mir auch die anderen Argumente schlüssig.
|