LabVIEWForum.de
DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Datenerfassung (DAQ) (/Forum-Datenerfassung-DAQ)
+---- Thema: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen (/Thread-DAQmx-Encoder-Task-nur-einmal-bei-Z-Tic-auf-Null-setzen)



DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - cb - 09.03.2014 13:53

Hallo zusammen,

ich bin auf der Suche nach einer Lösung für folgende Problemstellung:

Ich messe mit einer NI PXI 6602, einem 2000 Stiche-Encoder und DAQmx auf einem PXI-System unter LV2011DS1 eine Winkel-Position. Momentan ist der Task so eingestellt, dass der Zähler-Stand der Winkelposition bei jedem Z-Tic ("Null-Spur") zu Null gesetzt wird, d.h. der Winkel zählt (je nach Drehrichtung) immer bis +- 360° und springt dann auf 0° zurück.

Das ist prinzipiell schon mal gut, da ich die Referenzierung über die Null-Spur auch brauche. Was ich aber nicht brauchen kann ist, dass der Winkel bei jedem Z-Zic auf 0 springt, der Zähler soll lediglich EIN MAL beim Eintreffen des ersten Z-Tics auf Null springen und von da an kontinuierlich den Winkel rauf oder runter zählen.

Andersrum ausgedrückt: ich will beim 1. Eintreffen des Z-Tics den physikalischen Winkel des Encoders mit von der 6602 gemessenen Winkel abgleichen, quasi wie so eine Art Referenzfahrt. Da der Task über Stunden laufen soll oder ggf. sogar von Morgens bis Abends und das ganze automatisch "nebenbei" passieren soll ist es keine Lösung den Task zu stoppen, den letzten bekannten Winkel zu übernehmen, den Task neu zu starten und den letzten gemessenen Winkel als Offset zu verrechnen.

Hat dafür jemand einen Tip oder eine Lösung?

Danke & viele Grüße
cb


RE: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - macmarvin - 10.03.2014 07:58

Wenn ich das richtig verstanden habe, willst Du einseits das genaue Rücksetzen des Zählers per HW und danach einen frei laufenden Zähler!?!
Vermutest du denn, das die 6602 die Flanken falsch zählt?
So als erste Idee ins Blaue... nimm einen DO Kanal und nimm den per ext. AND Gatter als Enable für dein Z-Signal(e). Wobei ich keine Ahnung habe, was DAQmx aus einem Winkeltask macht, falls der Counter wegen fehlenden Z überlaufen sollte.


RE: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - cb - 10.03.2014 08:32

der Counter Task zählt den Winkel als Double, der läuft so schnell nicht über, ausserdem läuft die Maschine vorwärts und rückwärts, da zählt er dann irgendwann wieder runter.

Nein, ich vermute nicht dass die 6602 falsch zählt, ich will nur dass der Winkel den der DAQmx-Task ausspuckt zu einer bestimmten physikalischen Winkelposition referenziert ist und das bei jedem Einschalten des Geräts. Und da eignet sich der Z-Zic nunmal hervorragend, weil er immer an der gleichen Winkelposition auftritt, so lange der Encoder nicht auf der Achse mechanisch verdreht wird.

Aber ich glaube ich hab schon eine Lösung, die werde ich nachher mal ausprobieren (erstmal muss ich zum Zahnarzt ... Wacko): ich nehme den Z-Tic als Arm-Start-Trigger für den Encoder-Task. Dann sollte der Counter erst mit dem Eintreffen des 1. Z-Tics mit dem Zählen beginnen und ich hätte genau den Effekt den ich haben will. Mal schaun ob's so funktioniert ...

Danke & Grüße
cb


RE: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - macmarvin - 10.03.2014 09:20

(10.03.2014 08:32 )cb schrieb:  der Counter Task zählt den Winkel als Double, der läuft so schnell nicht über, ausserdem läuft die Maschine vorwärts und rückwärts, da zählt er dann irgendwann wieder runter.

Der Counter auf der Karte hat nur 32bit und die können je nach Anwendung auch recht zügig erreicht werden, deshalb mein Hinweis, was DAQmx bei erwartetem aber ausbleibendem Z-Pulse macht.
Wenn's aber eher hin und her geht und nicht zu schnell, reicht es natürlich dicke.


RE: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - cb - 10.03.2014 12:25

(10.03.2014 09:20 )macmarvin schrieb:  Der Counter auf der Karte hat nur 32bit und die können je nach Anwendung auch recht zügig erreicht werden, deshalb mein Hinweis, was DAQmx bei erwartetem aber ausbleibendem Z-Pulse macht.
Wenn's aber eher hin und her geht und nicht zu schnell, reicht es natürlich dicke.

trozdem ein guter Hinweis, Danke! Um auf der sicheren Seite zu sein, werd ich dann den Zählerstand auslesen und den Überlauf selbst behandeln anstatt mich drauf zu verlassen dass die DAQmx-Skalierung das schon alles richtig machen wird ...

So wie ich mir das jetzt vorstelle wird der Z-Puls genau einmal nach dem Start des Tasks verwendet. Danach wird er zwar weiter "eintrudeln" aber nicht weiter beachtet, weil der Trigger für den Task ja schon gekommen ist. Ich werde hoffentlich heut Nachmittag rausfinden was passiert wenn der Task gestartet wurde und die Maschine noch für eine Minute oder länger still steht. Ggf. muss ich halt noch 'ne Fehler-Behandlung einbauen.

Bevor ich jetzt mit 'ner externen Elektronik anfange bestell ich lieber noch 'ne kleine FPGA-Karte, da kann ich das alles in Software abbacken und muss mir nicht einen abbrechen mit 'ner komplizierten API ...

Danke & Grüße
cb


RE: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - cb - 10.03.2014 14:29

Ok, hab's gelöst:

Ich benutze wie schon weiter oben beschrieben die Z-Spur am PFI38 (der NI PXI 6602, Counter 0) als Arm-Start Trigger:
[attachment=48887]

und beim Warten auf den 1. Z-Tic der das ganze startet fange ich den Fehler "-200284" ab der bedeutet, dass ich mehr Samples abgerufen habe als gesamplet wurden (was für mich übersetzt heisst: sind noch keine Samples da, frag später nochmal Wink ...)

[attachment=48888]

der Task läuft troz der Fehlermeldung weiter, man kann sie behandeln und dann einfach nochmal Daten auslesen, wunderbar Smile

Danke & Grüße
cb


RE: DAQmx Encoder Task nur einmal bei Z-Tic auf Null setzen - cb - 10.03.2014 14:49

Nachtrag: ich hab das mit dem Counter-Überlauf nochmal geprüft:

Mein Encoder hat 2048 Striche pro Umdrehung, ich werte mit X4 aus, macht einen Counter-Stand von 4 x 2048 = 8192 Inkrementen pro Umdrehung.

Der Maximal-Wert von U32 = 4294967295
Der Prüfstand dreht mit max. 3000 U/min

das macht 524288 Umdrehungen (mit X4 und 2048 Strichen) in eine Richtung bevor der Counter überläuft oder 2,91 Stunden bei 3000 U/min immer in die selbe Richtung. Da eine Prüfung max. 30 Minuten dauert werde ich wohl den Task bei jedem neuen Prüfling neu starten, dann bin ich auf der sicheren Seite ...

Und in's Handbuch muss rein, dass der Prüfstand nicht dauerlauffähig ist, damit keiner auf blöde Gedanken kommt und das Ding länger als 2,9 Stunden in eine Richtung laufen lässt. Aus dem Blickwinkel betrachtet war der Tip mit dem Überlauf durchaus sinnvoll, vielen Dank!

Grüße
cb