' schrieb:Wenn ich ein Array mit maximaler Größe vor der While-Schleife initialisiere, dann macht es doch keinen Sinn einen Ringpuffer zu verwenden. Der Speicher ist jetzt eh belegt und es wäre doch dann unnötig die CPU ständig damit zu belasten, Teile zu löschen... Oder mache ich jetzt einen Denkfehler?
Jein. Das kommt darauf an.
Ist deine (3-Minuten-)Messung spätestens dann beendet, wenn das Array voll ist, dann brauchst du keinen Ringpuffer. Bei der nächsten Messung würde das Array ja wieder von vorne beginnend aufgefüllt werden.
Willst du aber einen Ringpuffer als solchen haben, hat das an sich nichts mit dem Array-Initialisieren als solchem zu tun. Für den Ringpuffer brauchst du auch ein initialisiertes Array. Der Ringpuffer ist ja nur dazu da, um bei einer (un-)endlich lang dauernden Messung nur z.B. die letzten 3 Minuten zu speichern.
Weder bei der Ringpuffermethode, noch bei der ohne, werden Teile gelöscht - zumindest nicht explizit. Bei jeder dieser Methoden werden lediglich Daten überschrieben und ein Lese- und ein Schreibzeiger angepasst. Genau dieses Überschreiben (Replace) ist ja Ziel der Übung.
Zitat:(Für die Grafanzeige reicht es doch mittels dem LV-Befehl "Teilarray" nur einen bestimmten Teil anzuzeigen...)
Das ist in einfacher Weise richtig für einen linearen Puffer: Methode ohne Ringpuffer. Weil bei dieser Methode der Beginn der Daten immer am Array-Anfang liegt.
Bei einem Ringpuffer liegt aber der Anfang der Daten beliebig im Array. Nämlich an der Lese-Position (die zuerst Null ist und bei vollem Ringpuffer mit der nächsten Schreibposition identisch ist). Weiterer Unterschied: Die Anzahl der Daten. Bei ohne Ringpuffer ist das immer die Länge des Arrays. Bei mit Ringpuffer muss die Differenz zwischen Lese- und Schreibposition beachtet werden.
Zitat:Und dann habe ich mich jetzt doch direkt mal mit dem kleineren Datentyp befasst.
Genau, du hast dich damit befasst. So ist es ja vorgesehen - dich damit zu befassen, was noch nichts über das Ergebnis aussagt.
Es muss natürlich zuerst der Messbereich festgelegt werden. Wenn der von 0 bis 400 Bar (also ohne Nachkommastellen) geht kann man U16 nehmen. Bei -120 bis 1500 Grad Celsiun (auch ohne Nachkommastellen) muss man schon auf I16 umsteigen. Bei +- 0,001 bis 999,999 mm (also Auflösung 1µ auf 1m) kann man mit 1000 multiplizieren, in µm rechnen und I32 verwenden. I32 ist immer doch besser als DBL. Wenn du eine Frequenz auf 12 Stellen genau messen willst, bist du dann doch wieder bei 64Bit (I64 oder DBL).
Hinweis:
Die Methode mit der Scalierung (mm => µm) und der Verwendung von Integer anstelle von DBL/SGL war früher mal interessant wegen des Geschwindigkeitsvorteiles von INT gegenüber DBL. Jetzt ist glaub ich auch DBL sehr schnell.