(18.07.2014 11:40 )amadeus schrieb: Ich hab in meinem Vi alles über den DAQ _ Assistenten gemacht. Nur kann ich da keinen Trigger einstellen oder den Counter auf implicit stellen, damit er alle Perioden zählt. ist es generell sinnvoller, gleich zu Beginn alles selbst aus den Bausteinen aufzubauen?
ich nehm den DAQ-Assistenten immer um mir ein Grundgerüst erstellen zu lassen, zerfledder das ganze dann und bau die Feinheiten ein. Der Assistent ist schon nicht schlecht, aber man kann den auch nie so allumfassend Programmieren, dass er auch die letzte Feinheit kennt. Außerdem ist es mMn auf jeden Fall erforderlich, dass man das, was der Assistent macht auch selber programmieren kann, sonst kommt sowieso nur Murks raus. Ohne Ahnung von der Technologie, die dahinter steckt, mit einem Assistenten zu dem richtigen Ergebnis zu kommen ist wie Lotto spielen, kann klappen, meistens klappts aber nicht.
(18.07.2014 11:40 )amadeus schrieb: Wahrscheinlich ist es auch schlecht, wenn ich die Nachlaufzeit über die Schleifendurchlaufzeit bestimme, sondern über die gemessenen Periodendauer aufsummiere. Dazu muss ich aber sicherstellen, dass auch alle detektiert werden.
dann brauchst du wieder einen kontinuierlichen Task, aber das ist mit dem Example-Finder auch kein Problem. Du kannst dich aber auf jeden Fall darauf verlassen, dass sowohl bei einem finiten, als auch bei einem kontinuierlichen DAQmx-Task der zeitliche Abstand zwischen 2 Samples im Array 1/Sample-Rate entspricht (also bei 1 kHz Sample-Rate ist der Abstand zwischen 2 Samples = 1 ms!!!) und das ist die genaueste Uhr, die dir in der Software zur Verfügung steht. Die Wait-Timer und ggf. auch Timed Loops im Source-Code sind alles nur Uhren, die mehr oder weniger trickreich in Software von der CPU-Zeit abgeleitet werden und das kann nie so genau sein wie ein Hardware-Timer!
Gerade wenn es beim Messen auch um Zeiten geht, ist es mMn absolut erfolderlich entweder einen kontinuierlichen DAQmx-Task oder einen finiten Task zu verwenden, nur so kann man sich sicher sein, dass bei einer SR von z.B. 1 kHz das 500. Sample genau 500 ms. Sekunden nach dem 1. Sample erfasst wurde! Und da du bei deiner Problemstellung einen Weg im Bezug zu einer Zeit setzen musst um daraus eine Geschwindigkeit zu ermitteln (v = ds/dt!) brauchst du hier auch eine genaue Zeit-Messung. Ok, dass die Zeit implizit in der Position des Samples im Rückgabe-Array steckt ist gerade für Anfänger erst mal nicht offensichtlich, aber genau darum sag ich's dir ja
(18.07.2014 11:40 )amadeus schrieb: Wenn ich danach nochmal eine Kennlinie aufnehmen will, sind die Werte noch in den Feedback nodes gespeichert, die ich benötige. Kann man die irgendwie löschen?
da weiß ich aber nicht, wie ich das am besten machen soll, da mir der DAQ-Assistent immer nur den aktuellen Wert anzeigt?
Schau mal in die LabVIEW Hilfe
- Feedback-Nodes und Shift-Register kann man von "aussen" und "innen" initialisieren. Von aussen geht automatisch wenn man was anklemmt, von innen geht z.B. über eine Case-Struktur, o.ä.
(18.07.2014 11:40 )amadeus schrieb: weiß ich aber nicht, wie ich das am besten machen soll, da mir der DAQ-Assistent immer nur den aktuellen Wert anzeigt?
Nehmen wir mal ein einfaches Beispiel: ein ungetriggerter continuierlicher Counter-Task, mit einer Sample-Rate von 1 kHz und einem konstanten Eingangs-Signal, das mit 10 kHz toggelt. Dafür erstellst du mit dem DAQ-Assistenten einen kontinuierlichen Flanken-Zähl-Task, der immer einen Block von 100 Samples am Stück ausliest. Damit die 100 Samples erfasst werden können muss der Task 100 ms lang samplen, erst dann spuckt er den Block mit 100 Werten taus.
Weil so ein kontinuierlicher Counter-Task (zumindest auf der 6259, die ich gerade da habe) eine externe Takt-Quelle für den Sample-Takt braucht nimmt man z.B. eine analoge Erfassung mit dazu, braucht man ja sowieso fast immer. Die beiden Tasks verknüpft man über den AI/StartTrigger, dann laufen sie auch beide synchron:
Wenn du das nachprogrammierst, dann musst du eigentlich nur noch in der While-Schleife die Daten aus dem Counter-Task auswerten und aus den Flanken eine Drehzahl bzw. Geschwindkgeit errechnen und dir was einfallen lassen wie du die Daten speicherst. Mit "last element" habe ich angedeutet, wie du an den jeweils neuesten Wert deiner Messwert-Erfassung kommst. Statt dem Flanken-Zähl-Task kannst du aber auch einen Encoder-Task nehmen, der dir dann auch gleich eine Drehzahl ausspucken kann, aber das überlass ich dir zum experimentieren
viele Grüße
cb