Zeitgenaues Auslesen eines Counters - Druckversion +- LabVIEWForum.de (https://www.labviewforum.de) +-- Forum: LabVIEW (/Forum-LabVIEW) +--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein) +---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ) +---- Thema: Zeitgenaues Auslesen eines Counters (/Thread-Zeitgenaues-Auslesen-eines-Counters) |
Zeitgenaues Auslesen eines Counters - kirby - 31.05.2008 13:57 Hallo Forum, als LabVIEW-Neuling stehe ich vor folgender Aufgabe: Ich möchte an verschiedenen Positionen eines Motors einen Counter für eine benutzerspezifische Zeit auslesen. Der Ablauf eines solchen "Scan" ist demnach so: 1. Motor fährt Position an 2. Wenn Motor Position erreicht hat, starte die Zählung auf dem Counter für X Sekunden 3. Wenn Zählung beendet, lies den Zähler aus und schreibe Wert in Array 4./1. Motor fährt nächste Position an solange bis die Endposition erreicht ist. Die Zählung erfolgt über eine PCI-6602 mit BNC-2121. Die Ansteuerung des Motors habe ich mit den Hersteller-VIs im Griff, auch Schleifen und Entscheidungen sind kein Problem. Probleme habe ich beim Zählen für X Sekunden. Wenn möglich sollte der Timer der 6602 genutzt werden, da bereits kleine Unterschiede der Zählzeiten durch Verzögerungen im Programmablauf die Zählrate verfälschen würden. Ich habe weder bei DAQ noch bei DAQmx etwas gefunden, mit dem ich zeitgenau zählen könnte. Geht sowas überhaupt? Und falls ja, wie? Danke für Eure Tipps! Viele Grüße Kirby Zeitgenaues Auslesen eines Counters - Lucki - 31.05.2008 16:27 Verstehe nicht, was Du willst. Am Anfang schreibst Du, daß Du den Zähler an verschiedenen Positionen des Motors auslesen willst. Dann heißt es, daß der Zähler bei Erreichen das Position gestartet (resetet?) werden soll. Nein, er wird nicht einfach gestartet, sondern "für X Sekunden" gestartet. Was heißt das genau? Was passiert nach diesem Starten? Was passiert nach Ablauf der Zeit X? Und dient der Zähler überhaupt zum Messen von Zeiten, oder mehr zum Generieren von Wartezeiten, oder soll er irgendwie für beides herhalten? Am besten wäre eine klare Programmieranweisung in Form eines Flußdiagramms statt dieser mehrdeutigen Beschreibung. Nützlich ist auch ein Hinweis über die Größenordnung und geforderte Genauigkeit der zu erwartenden Zeiten, denn davon kann die Programmierweise entscheidend abhängen. Zeitgenaues Auslesen eines Counters - kirby - 31.05.2008 17:21 Dann versuche ich es, konkreter zu erklären: Nachdem der Motor seine Position erreicht hat, sollen die eingehenden Impulse für die Zeit von X Sekunden gezählt werden. Ziel ist die Messung der Impulsanzahl pro Zeit in Abhängigkeit der Motorposition. Dabei ist es schon relevant, ob man für 1,01 s oder 0,999 s zählt. Die Impulse stammen aus einem Photonendetektor für Röntgenstrahlung. Der Motor dient der Positionierung der Probe im Röntgenstrahl. Aus dem Verlauf von Impulsen pro Zeit gegen Position lassen sich Rückschlüsse auf die Eigenschaften der Probe schließen. Die physikalischen Details würden hier aber wohl zu weit führen. Bei Interesse gerne mehr... Das Problem könnte man aber auch ganz unabhängig von Motor und Positionierung betrachten: <blockquote>Nach seinem Start soll ein Counter für eine bestimmte Zeit zählen. Der Wert des Counters soll anschließend in LabVIEW zur Verfügung stehen.</blockquote> Das ist jetzt hoffentlich ein wenig verständlicher. Gruß, Kirby Zeitgenaues Auslesen eines Counters - Lucki - 31.05.2008 19:19 ' schrieb:Das ist jetzt hoffentlich ein wenig verständlicher.Da war das auch ein Mißverständnis von mir. Ich hatte mich darauf fixiert, daß Du irgendwelche Zeitparameter das Motorlaufs messen oder steuern willst, deshalb bekam ich keinen Sinn in Deine Erklärungen rein. Also Deine Karte ist dafür bestens geeignet. Ich selbst habe aber noch nie Flanken gezählt und kann Dir nur ganz ungefähr sagen wie es langgeht. Am Einfachsten ist es, den Flankenzähl-Task bereits im M&A-Explorer zu erstellen: (Rechte Maustaste, Datenumgebung, Neu..) Dort bekommst Du auch auf einem silbernem Tablett die externe Verschaltung präsentiert, also welche Pins der Karte Du wie verdrahten mußt. [attachment=12803] Das Messprinzip ist: Wenn Du N Samples mit N=10 und Rate=10 einstellst, dann werden die Impulse 1sec lang gezählt, und Du erhälst alle Zwischenergebnisse nach 0,1 0,2 ..1.0 sec als Array. Wenn Du nur 1 Ergebnis braucht, dann bin ich mir nicht sicher was dann passiert, das Bild oben ist da etwas komisch. Sichere Methode wäre, N=2 zu wählen und nur das letzte Ergebnis zu benutzen. Bei Erstellung der Aufgabe im Blockdiagramm muß nichts extra konfiguriert werden, das geschah schon im M&A-Explorer. Einfach mit der rechten Maustaste an den Tasg-Eingang gehe, Konstante erzeugen, dort nochmal mit der rechten Maustaste klicken und den Task auswählen: [attachment=12802] Mehr kann ich jetzt nicht sagen. Wie man z.B. immer wieder startet usw. das mußt Du selbt probieren. Es besteht auch die Möglichkeit, überm einen externen Pin den Task zu starten, wird aber nicht nötig sein. Viel Spaß damit Ludwig |