LabVIEWForum.de - VI zur Takterzeugung

LabVIEWForum.de

Normale Version: VI zur Takterzeugung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Leute!

Ich möchte gerne mit LabVIEW ein Taktsignal erzeugen. Damit wird ein impulsgesteuerter Aktor via PCI-IO-Karte betätigt.
Es wird damit von einem PC aus ein kleiner zeitunkritischer Prozess automatisiert. Kleinere Zeitabweichungen sind also tolerierbar.
Die zu erzielende Taktfrequenz liegt bei 1...2 Hz und langsamer.
Habe das VI mit einem Durchgangspiepser an der IO-Karte ausprobiert: Es klappt soweit zufriedenstellend.

Nun meine Bitte:
Schaut euch mal mein VI an und sagt mir eure Meinung. Sind da grobe Schnitzer drin? Oder "kann man's so lassen"?
Ich programmiere erst seit einiger Zeit in LabVIEW und bin über eure Erfahrungen allgemein sehr dankbar.

Zum VI:
Es erzeugt den besagten Takt mittels einfachem Toggeln. Die einstellbare Zeit ist die Umschaltzeit. Stellt man 500ms ein, bekommt man also einen (brauchbaren) Sekundentakt. Der wird mit dem Boolschen Element am Panel angezeigt.

Die Zeit kann mit meinem Lösungsversuch auch mal flexibel "mittendrin" während der Laufzeit geändert werden.
Aus diesem Grund habe ich -keine- klassische Wartezeit eingesetzt (Das "Metronom" oder die "Armbanduhr"), da ichs absichtlich mal anders lösen will.
Anders heißt hier: Vergleich der internen Systemzeit inklusive Unterlaufschutz. Damit das mit der negativen Differenz auch klappen kann, habe ich die Typenumwandlungen drin.
Werde zur Übermittlung der Taktzeiten später mal Queues verwenden, damit mans von einem anderen VI aus fernsteuern kann.

Dieses VI läuft als Unter-VI in einem Hauptprogramm. Es wird halt im Hauptprogramm in der "freien Fläche" (in keiner Schleife) eingefügt, und läuft dann von selbst (im Hintergrund) und sorgt so für die ständig laufende Takterzeugung.

Schaut es euch mal an und schreibt mir eure Meinungen obs was taugt!

Vielen Dank!
LabViewer12
Hallo LabViewer,

Zitat:Damit das mit der negativen Differenz auch klappen kann, habe ich die Typenumwandlungen drin.
Das ist ein Problem: der Timerwert kann auch größer als 2^31 werden und deine Umwandlung nach I32 wird dann scheitern!
Schnelle Lösung: arbeite mit I64, das kann alle U32-Werte abbilden!

- Das Bit "Boolesch" würde ich in einem Schieberegister halten, dann entfällt die lokale Variable.
- Das Metronom liefert dir auch einen Timer-Wert, damit kannst du die zusätzliche Zeit-Abfrage in der Schleife wegfallen lassen.
- Im TRUE-Case fragst du nochmal die aktuelle Zeit ab: nimm doch einfach den Wert, der schon vor dem Case bestimmt wurde!
Okay, Danke für deine Antwort!

Zitat:Das ist ein Problem: der Timerwert kann auch größer als 2^31 werden und deine Umwandlung nach I32 wird dann scheitern!
Schnelle Lösung: arbeite mit I64, das kann alle U32-Werte abbilden!

Sorry, hatte damals einfach nicht mehr draufgeguckt, denn der Timerwert war vom Typ U32 und das war so verlockendBig Grin
Die Typenumwandlungen sind nun auf I64 umgestellt. Das sollte nun laufen.
Habs mal im Einzelschrittmodus durchgespielt ("Highlight-Modus") mit einem Eingabefeld anstelle des Timer-Werts.
Allen Anschein nach geht es, auch mit den Unterläufen.

Deine anderen Empfehlungen (bis aufs Metronom) hab ich umgesetzt und als VI nochmal angehängt.

Danke!

Gruß,
Stefan
Referenz-URLs