09-08-2008 03:22 AM
Hallo,
ich habe ein Programm zur Erzeugung zweier synchronisierter Sinussignale programmiert. Die Sinussignale können in ihrer Amplitude, Frequenz, Phasenverschiebung und Offset verändert werden, und zwar während das Programm läuft.
Das funktioniert auch alles soweit sehr gut. Allerdings gibt es da noch einen kleinen Schönheitsfehler, den ich gerne beseitigen würde. Es betrifft die Veränderung der Frequenz und der Phasenverschiebung.
Damit die Änderungen der Frequenz und der Phasenverschiebung korrekt übernommen werden während das Programm läuft, musste ich eine kleine Unterbrechung der inneren While-Schleife einbauen. Die Änderungen der Amplitude und des Offsets funktionierten auch ohne die Unterbrechung der Schleife reibungslos. Bei der Änderung der Frequenz ohne die Unterbrechung der While-Schleife hat sich nämlich zusätzlich auch die Phasenverschiebung geändert, obwohl ich gar keine Phase eingestellt hatte. Die Änderung der Phasenverschiebung wurde vom Progamm ohne Unterbrechung der Schleife erst gar nicht übernommen. Damit also das Signal auch bei einer Frequenz- und Phasenverschiebungsänderung weiterhin korrekt erzeugt wird, musste ich die innere While-Schleife kurz unterbrechen. Doch genau hier gibt es diesen oben genannten Schönheitsfehler: Durch die Unterbrechung der Schleife wird logischerweise für eine kurze Zeit gar kein Signal erzeugt. Erst wenn alles wieder synchronisiert ist, erscheint das Signal wieder.
Genau diese Signalunterbrechung würde ich gerne beseitigen. Das Signal soll sich also einfach verändern lassen ohne jegliche Unterbrechung während der Programm-
laufzeit. Allerdings habe ich keinen blassen Schimmer, wie ich diese Unterbrechung der inneren While-Schleife umgehen könnte.
Ich hoffe, meine Problembeschreibung war nicht all zu kompliziert. Falls jemand etwas nicht verstanden hat, könnt ihr mich einfach fragen. Mein Programm habe ich unten angehängt. Ich benutze übrigens LabVIEW 8.2. Die Sinussignale werden von zwei Karten NI PXI-5412 erzeugt.
Vielen Dank schon mal im Vorraus für eure Hilfe.
Gruß,
Daniel
09-08-2008 08:25 AM
Das ein Control nur IN der While-Schleife regelmäßig ausgelesen wird, ist Dir bekannt? (in Deinem Fall also in der Inneren While Schleife)
Deine Lokalen Variablen sind unnötig, und machen den Code unübersichlicher. Stichwort Datenflußmodell(?) Dataflow
Jetzt noch eine Producer-Consumer Architektur mit Eventhandler und es wird was nettes draus 😉
09-09-2008 12:53 AM
Hallo Henrik,
vielen Dank für deine Antwort. Dass ein Control nur in einer While-Schleife ausgelesen wird, ist mir bekannt, ja. Allerdings verstehe ich nicht, was eine "Producer-Consumer Architektur mit Eventhandler" sein soll ???
Könntest du mir das bitte näher erklären? Vielleicht mit einem Beispiel, oder ähnliches? Natürlich freue ich mich auch über Antworten von anderen Usern, die mir hierzu helfen können.
Nur noch mal zur Erinnerung: Ich habe LabVIEW 8.2.
Danke und Gruß,
Daniel
09-09-2008 03:56 AM
http://zone.ni.com/devzone/cda/tut/p/id/5785
http://zone.ni.com/devzone/fn/p/sn/n15:Tutorial,n16:de,n23:4.28
ff