Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Signalverlauf (https://www.delphipraxis.net/125654-signalverlauf.html)

goalierb 9. Dez 2008 17:03


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!

haentschman 9. Dez 2008 17:10

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 ?

goalierb 9. Dez 2008 17:58

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!

haentschman 9. Dez 2008 18:04

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:

Also links ein Wert weg und rechts ein Wert wieder dazu)!
...das würde dann jede 1000tel Sekunde passieren... oh,oh :gruebel:

:hi:

goalierb 9. Dez 2008 18:09

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

haentschman 9. Dez 2008 18:15

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:

jfheins 9. Dez 2008 18:40

Re: Signalverlauf
 
Zitat:

Zitat von goalierb
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!

Muss nicht sein: http://de.wikipedia.org/wiki/Nyquist...-Abtasttheorem ;)

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)

goalierb 9. Dez 2008 19:03

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?

sirius 9. Dez 2008 19:13

Re: Signalverlauf
 
Zitat:

Zitat von jfheins

Das ist für die mathematische Beschreibung eines Signals gedacht. Für eine ausreichende Visualisierung ist goalierbs Überschlagsrechnung deutlich besser. Ansonsten machst du aus einem 200Hz Sinus ein Dreieck. Ist, wie gesagt, mathematisch korrekt, sieht aber Sch**** aus.

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.

goalierb 9. Dez 2008 19:19

Re: Signalverlauf
 
Hab Dank, so probier ich jetzt mal!

igel457 9. Dez 2008 20:30

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.

Sir Rufo 9. Dez 2008 20:37

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)

Matze 9. Dez 2008 20:44

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.

igel457 9. Dez 2008 20:55

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.

DerDan 9. Dez 2008 22:38

Re: Signalverlauf
 
Schau doch mal hier vorbei:

http://www.oscilloscope-lib.com/


mfg

DerDan

goalierb 10. Dez 2008 09:28

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 03:03 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz