Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
Für meine Studienarbeit soll ich eine Regelung mit LabVIEW umsetzen, da der zu regelnde Prozess ziemlich schnell ist (ca. 1 ms Zeitkonstanten) habe ich überprüft, was man mit LabVIEW für Geschwindigkeiten hinbekommt. Folgendes Problen: Ich habe zwei VIs, mit dem einen Lese ich kont. ein und speichere die Werte in einer lvm-File. Im anderen gebe ich einen einstellbaren Konstanten Wert über analog aus, über einen Trigger merke ich mir die "Sprungzeit".
Die Ausgabe erledigt die NI9263, Einlesen die NI9215, beide stecken im NI-9172. Nun schleiße ich den Ausgang direkt zur Eingangskarte und messe, wann sich was tut. In der File kann ich dann nachrechen, wieviel Zeit zwischen erzeugtem Sprung und gemessenem Sprung liegen.
Nun die böse Überraschung: Ohne irgendwelche Berechnung liegt die Verzögerung bei über 1 Sekunde. Ist das normal (lahmer 1Ghz Rechner), brauche ich für fixe Anwendungen irgendwelche Spezialaddons oder läßt sich durch geschicke Einstellungen beim Einlesen/Ausgeben viel Zeit sparen?
naja ohne den Sourcecode zu sehen ist das natürlich so eine Sache ! Wenn du einem Windows Rechner arbeitest ist es sowieso Essig mit Echtzeit da dir das Betriebssystem zuviel reinpfuscht.
Aber über eine Sekunde hört sich schon ein wenig viel an.
Da beide Karten 100kS/s haben sollte das ganze doch wesentlich fixer gehen. Wenn der Sprung lange genug anliegt das die Eingangskarte zum messen kommt (Nyquist).
Hast du dir dein Sprungsignal schonmal mit einem Ozi angeschaut ?
Wie schreibst du in das File ? Beendest du zuerts die Messung und schreibst dann die Werte aus einem Fifo in das File oder schreibts du während der Messung ins File ?
greetz Chris
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety
Benjamin Franklin
26.06.2009, 10:58 (Dieser Beitrag wurde zuletzt bearbeitet: 26.06.2009 10:58 von IoInBlack.)
Ich habe noch etwas an den Dateien rumgebastelt (Samplerate angepasst, Graphen rausgenommen...) und komme nun auf immer ca. 200ms. Mal mehr mal weniger. Anbei der Quelltext, ich schreibe mit WriteSingle. Der Sprung liegt von ner bestimmten Zeit, die ich durch den Vergleich ermittle bis zum Ende der Messung an (Vergleich wird nicht im Frontpanel angezeigt, könnt ja Geschwindigkeit kosten ;-)).
Die Messung mache ich mit den anderen beiden Files (nicht gleichzeitig, nur zum Test das eine bzw. das andere). Je mit 500Hz, 10 Samples to read und 10 Samples pro Kanal. Timeout bei 1 bis 10, ändert eh nix. Auch fixere Frequenzen, weniger Samples usw. bringen nichts. Nur die Reduzierung des Timeout auf 0 gibt mir seltsame Zeiten (negativ, Sprünge in der Zeitabfolge), ich denke also der Rechner ist zu lahm...
Achso: mit dem oszi angucken bringt nicht viel, dann habe ich keine vergleichszeit.
hast du mal geschaut wie lange das in datei schreiben alleine dauert ?
Ich würde die Daten in ein Array schreiben und dann erst nach abschluss der Messung in die Messdatendatei schreiben.
Schreiben/lesen einer Datei ist immer etwas zeitaufwendig.
Wenn du 500 Hz samplerate hast und 10 Samples aufnimmst (1/500 = 2ms ) sollte die ganze Sache 20ms dauern. Der rest wird wohl das in Datei schreiben sein.
greetz chris
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety
Danke für den Hinweis, ich habe das Dateischreiben komplett rausgenommen und durch einen Trigger ersetzt. So komme ich im besten Fall auf 50ms, allerdings auch nur, wenn ich eine zeitgesteuerte Schleife mit 50ms Verzögerung nehme. Bei weniger Verzögerung erhöht sich der Lag wieder :-( Muss mal ne besserer Rechner her.
Wie realisiere ich das ganze mit dem Array? Habe eins initialisert, aber wie schreibe ich die Messwerte dort rein und vor allem: wie schreibe ich das Array am Ende der Messung in eine Datei?
1. Array shiften (Array Konstante ausserhalb der schleife an ein Shiftregister anschließen, Array initialisieren wird hier nicht funktionieren da du ja nicht weist wie groß das Array wird)
2. Array mit Build Array in der Schleife aubauen.
3. Anschließend mit For-Schleife und selben express VI in File schreiben, oder mit Array to Spreadsheet String direkt mit Write to Textfile Schreiben (dann kannst es sogar mit excel einlesen, und es geht schneller)
greetz Christian
Those who would give up essential Liberty, to purchase a little temporary Safety, deserve neither Liberty nor Safety