LabVIEWForum.de - Signal einlesen und verzögert ausgeben

LabVIEWForum.de

Normale Version: Signal einlesen und verzögert ausgeben
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

Ich lese in Labview ein rechtecksignal ein ( Frequenz ändert sich, aber amplitude bleibt immer gleich zwischen 0 und 10V).

Ich hab bisher immer ausgelesn wenn er über 2V und dann unter 2V spring und dies dann je nach der eingestellten Zeit("Phasenverzug") verspätet diese 10V Spannung ausgegeben. Ansonten halt immer 0.
Ich hab das über das Messen der Zeit realisiert, also z.B alle 5ms geprüft ob ein Spannungssprung war oder nicht. Das hab ich mit dem "Wait" gemacht, wo man nicht unter 1ms gehen kann. Jetzt ist das Prgramm aber zu langsam.

Das müsste doch auch irgendwie über Vektoren funktionier...mit einer Historie oder so... kann mir da jemand helfen ?


Zu meinem bisherigen Programm:

Bei der realen Verwendunng wird nur der Regeler "Phasenverzug" verwendet. Alle anderen Bauelemente habe ich benötigt um mir ein veränderliches Rechtecksignal generieren zu können.
PS:Hoffe das keine Fehler entstant als ich es für eine altere Version abgespeichert hab.



Lg Hubert
---nur das Programm als 2014version angefügt ----
Hallo Hubert,

herzlich willkommen im Forum!

Zitat:Zu meinem bisherigen Programm:
Als ich das VI öffnete und das FP sah, dachte ich noch: "Sieht doch gut aus!".
Als ich das BD sah, kam spontan :facepalm:…

Ist dieses VI überhaupt mal fehlerfrei gelaufen? (Stichwort: Race conditions)

Bitte ALLE lokalen Variablen erst durch Drähte ersetzen und dann in Schieberegistern speichern!
Dann VI nochmal testen…

Wenn du von "Vektoren" schreibst: meinst du einfache 1D-Arrays?
Zitat:Jetzt ist das Prgramm aber zu langsam.
Definiere "zu langsam"!
Definiere die gewünschte Iterationszeit!
Danke, alleine komm ich da nämlich nicht mehr weiter :/


Ja bei mir laufts fehlerfrei.
Zu den vielen Lokalen Variable... da kann ich ja nicht alle ersetzen da ich einen Wert einmal lese (Change to Read) und einmal diesen überschreibe(Change to write).

Zu langsam.
Mein System basiert auf der Zeit. Das heißt es wartet eine "definierte" Zeit. Somit weiß ich zwar wann das Signal gestiegen ist...andererseits soll es aber nie warten und so schnell wie möglich sein...ca alle 0.05ms. (Es soll damit die Zündung eines 4Takt Motors gesteuert werden)

Ja ich denke da an die Arrays. Habe aber noch nie damit geabeitet und bin daher mit den Blöcke die es da gibt ziemlich überfordert.


...Wie ich das Gedanklich lösen würde:

Man misst laufend die Dauer zwischen einer fallender Steigender Fankeund einer steigenden Flanke -->T(niedrig)
und die die Dauer zwischen steigender und fallender Flanke --> T(hoch)
Bei der letzten fallenden Flanke soll "T(neidrig) - Verzug " gewartet werden und dann für die Zeit T(hoch) 10V ausgegeben werden.


...anstatt der Dauer oder Zeit wie ich geschrieben habe müsste das ja auch mit der anzahl der Messwerte funktionieren....


Hoff ihr wisst einigermaßen was ich da meine Smile
Hallo Hubert,

Zitat:ca alle 0.05ms. (Es soll damit die Zündung eines 4Takt Motors gesteuert werden)
Dann besorg dir mal ein RT-Target mit FPGA-Option. Da kannst du nämlich wirklich im 50µs-Takt arbeiten!
Unter Windows wird dir dein 4Takt-Motor nämlich des öfteren mal Fehlzündungen machen, wenn Windows mal wieder den Virenscanner vorlässt oder auf der Festplatte rumrödeln muss…

Zitat:Zu den vielen Lokalen Variable... da kann ich ja nicht alle ersetzen da ich einen Wert einmal lese (Change to Read) und einmal diesen überschreibe(Change to write).
Doch, das geht. Mit Draht und Schieberegistern!
Beispiel:
[attachment=57055]
Und so bitte bei allen lokalen Variablen vorgehen!

Was mir besonders bitter aufstößt: du liest 4mal aus einer lokalen Variablen "Messpunkte" - du hättest zumindest auf eine lokale Variable reduzieren und stattdessen mehr Draht verwenden können! Und nebenbei ergeben sich durch den parallelen Schreibzugriff auch noch RaceConditions - deshalb meine Frage, ob dein VI überhaupt (immer) fehlerfrei lief!
Ganz wichtig: THINK DATAFLOW!

Zitat:Ja ich denke da an die Arrays. Habe aber noch nie damit geabeitet und bin daher mit den Blöcke die es da gibt ziemlich überfordert.
Wenn du mit einer Funktion in LabVIEW noch nicht gearbeitet hast, gilt (wie in jeder anderen Programmierumgebung auch):
1. Hilfe lesen
2. Tutorials anschauen
3. BeispielVIs anschauen
4. mit den Funktionen herumspielen, um sie zu verstehen
Mach das mal, ist super einfach!

Zitat:Bei der letzten fallenden Flanke soll "T(neidrig) - Verzug " gewartet werden
Was ist die "letzte" fallende Flanke bei einem rotierenden Motor? Woran erkennt man die letzte Flanke?
Referenz-URLs