![]() |
Signalverlauf
Hallo Erstmal!
Bin neu hier in eurer netten Community! Gleich mal meine Frage: Ich möchte in meinem Prog 1000 Werte/s als Signalverlauf in Echtzeit anzeigen lassen! Wie kann ich das am besten realisieren, bzw. simulieren(1000 Werte in Array)! Mit Timer gehts wohl zu langsam oder? Vielen Dank für eure Tips im Voraus! |
Re: Signalverlauf
Hallo und willkommen.... :dp:
ich verstehe nicht ganz. Du willst wirklich 1000Werte/Sekunde visuell darstellen ? :gruebel: und wieviele davon kannst du wirklich wahrnehmen ? PS: wo kommen denn 1000Werte/Sekunde her ? |
Re: Signalverlauf
Hi!
Die Werte kommen über usb von einem µC! Darstellen will ich die bspw. wie ein Sinus, 1000 Werte für eine Periode und auf der x-Achse bspw 4 Perioden, die sich dann immer weiter verschieben(Also links ein Wert weg und rechts ein Wert wieder dazu)! Es soll dann bspw. in einer s eine Periode dargestellt werden und eben dann 4 Perioden nebeneinander, die immer erneurt werden! Falls das immer noch unverständlich erklärt war, bitte nochmal nachfragen! |
Re: Signalverlauf
Noch ein paar Fragen :wink:
- die visuelle Darstellung soll in Echtzeit passieren ? - sollen die Werte gespeichert werden (spätere Nutzung) ? - soll das ganze (sinngemäß :wink: ) so aussehen wie die Prozessorlast im Taskmanager ? Zitat:
:hi: |
Re: Signalverlauf
Ja das ganze sollte in Echtzeit passieren, wobei ich aber auch erstmal mit einer Verzögerung im s-Bereich leben könnte!
Das speichern der Daten ist noch nicht so wichtig, könnte aber mit vorgesehen werden! Im Prinzip sollte das so ungefähr aussehen wie du das mit der Prozessorlast beschrieben hast! Ich wäre auch für andere Vorschläge offen, aber ich will ein Signal abtasten, welches vlt. ca.200Hz haben könnte! 4-5fache Sicherheit beim Abtasten muss wohl sein denk ich! VD |
Re: Signalverlauf
hmmm... :gruebel:
ich würde bezweifeln, daß die Visualisierung (in welcher Form auch immer) bei der Menge an Daten stabil hinterherkommt. Vieleicht hat jemand anderes schon Erfahrung mit dieser Größenordnung. Sorry, daß ich dir an dieser Stelle dann doch nicht weiterhelfen kann. PS: aber...Deine Informationen sind schon mal vollständiger :wink: |
Re: Signalverlauf
Zitat:
![]() Bei 200 Hz reichen also z.B. 250 450 Hz Abtastrate. Darstelung darf sogar noch viel langsamer sein (20 fps <=> 20 Hz = 50 mal zeichnen pro Sekunde = viel Arbeit) |
Re: Signalverlauf
Hallo
meines Wissens sollte aber die Abtastrate größer als das doppelte der 200 Hz sein, also min 400 Hz! Aber mit der langsameren Darstellung klingt nicht schlecht, wie kann ich das aber so genau realisieren? --> einfach mehrere Werte mit einem Mal anzeigen lassen? |
Re: Signalverlauf
Zitat:
Es sollte kein Problem darstellen (solange USB hinterherkommt). Ich kenne Transientenrekorder, die mit bis zu 100kHz abtasten und das für mehrere Kanäle übereinander darstellen. Das gibt es u.a. für Dos, Windows 98, Windows XP. Du musst ja nicht nach jedem Wert neu zeichnen. Vielleicht reicht auch alle 100ms. Du kannst im Hintergrund qusai immer den nächsten "Schnappschuss" vorbereiten und wenn er fertig ist, nach vorne kopieren. |
Re: Signalverlauf
Hab Dank, so probier ich jetzt mal!
|
Re: Signalverlauf
Ich würde die Messwerte in ein VBO laden und das Ganze hardwarebeschleunigt mit OpenGL oder DirectX (oder Andorra 2D) zeichnen. Damit sollten Bildwiederholraten von über 1000FPS drin sein.
|
Re: Signalverlauf
- Messwerte in eine Liste schieben.
- Mit einem Timer (Interval=1) folgendes aufrufen - Timer abschalten - Die aktuelle Liste mit Assign kopieren - Alle Messwerte darstellen - Timer einschalten - Die Liste zyklisch bereinigen (damit der Speicher nicht vollläuft) Dann ist die Darstellung der Messwerte praktisch so schnell wie der Rechner das abarbeiten kann (ausgenommen dies kleine Millisekündchen, bis der Timer wieder anspringt) |
Re: Signalverlauf
Ein Timer schafft nie eine Auflösung von 1 Millisekunde. Unter XP maxmimal 10 ms und unter Win9x nur 50 ms.
Gut, wie das bei Vista ist, weiß ich nicht. Einen normalen TTimer würde ich dafür nicht nutzen, dann schon eher einen Timer, der schneller ist und wie er sicherlich in Andorra 2D zu finden ist, das Andreas bereits erwähnt hat. Edit: Einen Timer würde ich jedoch nur fürs Einlesen mit einem hohen Intervall nutzen. Die Ausgabe reicht ja langsamer, denn da kommt ein TFT ja sonst eh nicht hinterher. |
Re: Signalverlauf
Ich denke, dass es sinnvoll ist, die Messdaten in einem Thread einzulesen und in eine Art Ringbuffer zu schreiben. Dieser kann dann periodisch von dem Grafiksystem ausgegeben werden.
Damit die Bewegung flüssig erscheinen sollten schon Bildwiederholraten von 60-100FPS langen - mehr schaffen die meisten Monitore sowieso nicht. Von daher muss Hardwarebeschleunigung nicht unbedingt sein. |
Re: Signalverlauf
|
Re: Signalverlauf
Ja das sieht ganz gut aus, ist nur etwas aufwendig für das was ich machen will, so mit Dll und so!
Ich hab mal das mit der Verzögerten Darstellung in einem TChart versucht, hatte da aber wohl gestern Abend schon die Augen zu beim proggen.! Also ich lad beim Progstart erstmal die 1000 Werte 3 mal, also insgesamt 3000, in das Chart! Diese habe ich vorher in ein Array eingelesen! Zum testen benutze ich jetzt erstmal immer die gleichen 1000 Werte, also ich versuche immer das Array in das Chart zu laden. Probleme: Ich komme nicht ganz klar, bspw. links 100 Werte im Chart zu löschen und rechts 100 neue anzufügen! --> völliges Brett vorm Kopf Und das meinetwegen dann alle 100ms per Timer! Kennt sich jemend mit TChartValueList aus, geh ich da richtig in der Annahme, dass ich eigentlich meine Werte die ich ins Array schreibe nicht auch gleich darein schreiben könnte, und wenn ja wie kann ich das realisieren, wenn ich die TChartValueList per for Schleife bspw. mit den Arraywerten testweise füllen möchte. Werden bei jeder Änderung dieser List auch die Werte im Graph geändert? VD |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:52 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