' schrieb:CAN Daten sind aber pro Schreibvorgang weniger/mehr (je nach eingestellen Sampleraten) vorhanden als AI Daten. Also die Loops laufen mit verschiedenen Geschwindigkeiten
Das Problem, das hier auftritt, ist also die Synchronität der Daten. Die Daten selbst werden tatsächlich synchron produziert. Allerdings in unterschiedlichen Datenstreams. Beim Zusammenführen dieser beiden Streams zu einem treten genau die Probleme auf, die du beschrieben hast.
Setze dich mal mit Signalverläufen auseinander. Ein Signalverlauf enthält immer auch den Samplezeitpunkt (wenn auch nur indirekt aus Start und Offset etc.). LV sollte also in der Lage sein, beim Zusammenführen zweier Siganlverläufe diese so zusammenzuführen, dass ein synchroner Datenstream entsteht. Ich selbst war noch nie in der Verlegenheit, derartiges machen zu müssen.
Zitat:Allerdings hat man damit gravierende Probleme:
Stimmt.
Zitat:Z. B. wenn CAN nur mit 1 Hz laueft, aber das AI/DAQ Loop mit 100 Hz schreibt: Dann dauert es jedesmal 100 Sekunden bis ein neues CAN Paket fertig ist.
Wenn ein derart großer Unterschied zwischen den Abtastraten besteht, kann man (bin ich) wie folgt vorgehen: Der langsame Prozess schreibt seine Daten in einen Melder. Der wird dann halt alle Sekunden refresht. Der schnellere Prozess fügt zu jedem seiner Datenpakete einfach den Wert aus dem Melder hinzu. Bei diesem Verfahren gehe ich davon aus, dass der eine Wert für den gesamten Zeitraum gültig ist. Ist der Unterschied der Abtastraten groß genug und die Samplepakete der schnellen Task klein genug, so minimiert sich der "Gleichzeitigkeits"-Fehler, den dieses Verfahren automatisch beinhaltet.
Zitat:Wenn der Anwender zwischenzeitlich abbricht, muss er a)100 Sekunden warten und b) ist das Schreiben-Loop schon laengst vom Stop-Befehl beendet worden, die letzen Daten gehen also verloren.
Solchen Effekten kann man programmatisch vorbeugen: indem man die 100 Sekunden nicht am Stück wartet, sondern 1000x100ms. Dann kann man auch 100 Sekunden schlenn abbrechen.
Zitat:Meine Notloesung ist, CAN nicht individuell in der Samplerate zu gestalten sondern an die Datei-Schreib-Rate zu koppeln.
Wenn das für die Applikation kein Nachteil ist, würde ich das so machen.