06.11.2010, 11:23
Hi zusammen,
ich habe mal wieder eine Real-Time-Frage (cRIO).
Aktuell habe ich eine While-Schleife, in der Datenerfassung, Auswertung und Protokollierung erfolgen. Es handelt sich dabei um mehrere Sensoren, die teils parallel, teils nacheinander eingelesen werden.
Aktuell habe ich das sequenziell so aufgebaut:
1. Datenerfassung aller Sensoren
2. Prüfen, welche Daten relevant sind bzw. welche Sensoren auszuwerten sind
3. Messzeit abwarten
4. Messende: Alle aufgezeichneten Messdaten auf einmal in eine Binärdatei schreiben
Es kann folgendes sein: Messzeit 5 Sekunden und z.B. nach 1 Sekunde beginnt die Messung von Sensor 1, nach 2 weiteren Seunden die von Sensor 2. Wenn die Messung von Sensor 1 dann zu Ende ist und die Daten protokolliert werden, läuft die Messung von Sensor 2 noch weitere 3 Sekunden und wird dann protokolliert. In der Zeit kann aber die Messung von Sensor 1 wieder beginnen.
Mein Problem ist nun, dass das Speichern der Datei sehr lange dauert (ca. 100 - 500 ms), auch wenn das nur ca. 300 Bytes sind.
Die Messwerte vom FPGA werden zwar gepuffert und gehen auch bei Verzögerungen nicht verloren, aber die Messzeit variiert, wenn der Speichervorgang zu lange dauert. Und deterministisch bin ich auch nicht mehr (klar, Dateizugriffe sind es nunmal nicht).
Mit dem Real-Time Execution Trace Toolkit konnte ich sehen, dass das Speichern alles ausbremst.
Ich speichere pro Messung übrigens ein Cluster ab (Messdaten, Bewertungsergebnisse etc).
Nun dachte ich mir, ich nehme eine zeitkritische Schleife für Erfassung und Bewertung und eine parallele While-Schleife, die die Protokollierung übernimmt.
Die Daten gelangen parallel über mehrere RT-FIFOs von der zeitkritischen Schleife in die Datei-I/O-Schleife. Meherere RT-FIFOs deshalb, weil ein RT-FIFO nur einen Datentyp aufnehmen kann, ich aber mehrere habe (2 Dbl-Arrays, 1 boolsches Array, ... pro Sensor).
Die Anzahl der RT-FIFOs ist vermutlich nicht kritisch. Es könnten bis zu ca. 36 sein (mehrere Sensoren, von denen u.U. die Daten gleichzeitig protokolliert werden müssen, wenn das Messende gleichzeitig erreicht ist).
In der zeitkritischen Schleife würde ich z.B. alls 100 ms meine Messwerte aus dem DMA-FIFO (vom FPGA) auslesen und dann auswerten. In der Zeit, in der auf die Messwerte gewartet wird, könnten eventuelle Speichervorgänge in der parallelen Schleife durchgeführt werden. Die zeitkritische Schleife hat natürlich eine höhere Priorität.
Ist dieses Vorgehen sinnvoll oder kennt ihr Alternativen?
Ich glaube, es gibt auch das TDMS-Format im RT-System, nur weiß ich nicht, ob das schneller ist, da auch hier die Datei geöffnet und wieder geschlossen werden muss, was langsam ist. Ich würde die Datei dann wohl beim Messbeginn öffnen, während der Messung streamen und bei Messende schließen. Nur Öffnen und schließen ist garantiert auch langsam.
Über Tipps aus der Praxis, eure Erfahrungen oder Anregungen würde ich mich wirklich freuen.
Grüße
Matze
ich habe mal wieder eine Real-Time-Frage (cRIO).
Aktuell habe ich eine While-Schleife, in der Datenerfassung, Auswertung und Protokollierung erfolgen. Es handelt sich dabei um mehrere Sensoren, die teils parallel, teils nacheinander eingelesen werden.
Aktuell habe ich das sequenziell so aufgebaut:
1. Datenerfassung aller Sensoren
2. Prüfen, welche Daten relevant sind bzw. welche Sensoren auszuwerten sind
3. Messzeit abwarten
4. Messende: Alle aufgezeichneten Messdaten auf einmal in eine Binärdatei schreiben
Es kann folgendes sein: Messzeit 5 Sekunden und z.B. nach 1 Sekunde beginnt die Messung von Sensor 1, nach 2 weiteren Seunden die von Sensor 2. Wenn die Messung von Sensor 1 dann zu Ende ist und die Daten protokolliert werden, läuft die Messung von Sensor 2 noch weitere 3 Sekunden und wird dann protokolliert. In der Zeit kann aber die Messung von Sensor 1 wieder beginnen.
Mein Problem ist nun, dass das Speichern der Datei sehr lange dauert (ca. 100 - 500 ms), auch wenn das nur ca. 300 Bytes sind.
Die Messwerte vom FPGA werden zwar gepuffert und gehen auch bei Verzögerungen nicht verloren, aber die Messzeit variiert, wenn der Speichervorgang zu lange dauert. Und deterministisch bin ich auch nicht mehr (klar, Dateizugriffe sind es nunmal nicht).
Mit dem Real-Time Execution Trace Toolkit konnte ich sehen, dass das Speichern alles ausbremst.
Ich speichere pro Messung übrigens ein Cluster ab (Messdaten, Bewertungsergebnisse etc).
Nun dachte ich mir, ich nehme eine zeitkritische Schleife für Erfassung und Bewertung und eine parallele While-Schleife, die die Protokollierung übernimmt.
Die Daten gelangen parallel über mehrere RT-FIFOs von der zeitkritischen Schleife in die Datei-I/O-Schleife. Meherere RT-FIFOs deshalb, weil ein RT-FIFO nur einen Datentyp aufnehmen kann, ich aber mehrere habe (2 Dbl-Arrays, 1 boolsches Array, ... pro Sensor).
Die Anzahl der RT-FIFOs ist vermutlich nicht kritisch. Es könnten bis zu ca. 36 sein (mehrere Sensoren, von denen u.U. die Daten gleichzeitig protokolliert werden müssen, wenn das Messende gleichzeitig erreicht ist).
In der zeitkritischen Schleife würde ich z.B. alls 100 ms meine Messwerte aus dem DMA-FIFO (vom FPGA) auslesen und dann auswerten. In der Zeit, in der auf die Messwerte gewartet wird, könnten eventuelle Speichervorgänge in der parallelen Schleife durchgeführt werden. Die zeitkritische Schleife hat natürlich eine höhere Priorität.
Ist dieses Vorgehen sinnvoll oder kennt ihr Alternativen?
Ich glaube, es gibt auch das TDMS-Format im RT-System, nur weiß ich nicht, ob das schneller ist, da auch hier die Datei geöffnet und wieder geschlossen werden muss, was langsam ist. Ich würde die Datei dann wohl beim Messbeginn öffnen, während der Messung streamen und bei Messende schließen. Nur Öffnen und schließen ist garantiert auch langsam.
Über Tipps aus der Praxis, eure Erfahrungen oder Anregungen würde ich mich wirklich freuen.
Grüße
Matze