Ich möchte gern generell von Warteschleifen mit Polling abkommen und durch Ereignisse ersetzen.
Um so ein Konzept auch beim Abfragen von digitalen Ports zu erproben, habe ich mir dieses Beispiel ausgedacht:
Wenn sich ein Eingabewert an Port0/Leitung0 ändert, soll ein Ereignis (Gong) ausgelöst werden.
Habe Beispiele von NI herangezogen und variiert, aber es will bei mir überhaupt nicht funktionieren.
Kann mir jemand einen Rat geben, woran das liegt?
[
attachment=5396]
Hallo Lucki,
das kann ich irgendwie nicht ganz nachvollziehen.
Die Funktion "DAQmx Timing (Change Detection)" wird doch nur beim Programmstart einmal abgearbeitet.
Wie soll diese da später noch ein Ereignis auslösen?
Ich glaube Du bist auf der Suche nach echten Hardware-Ereignissen, diese sind meines Wissens aber nur mit einigen wenigen NI-Geräten möglich. So zumindest die Aussage eines NI-Mitarbeiters auf einem LabVIEW-Tag. Weitere Angaben hat er dann aber nicht gemacht, da er sich anscheinend auf diesem Gebiet auch nicht auskannte.
Grüße,
Marko
' schrieb:Ich glaube Du bist auf der Suche nach echten Hardware-Ereignissen, diese sind meines Wissens aber nur mit einigen wenigen NI-Geräten möglich. So zumindest die Aussage eines NI-Mitarbeiters auf einem LabVIEW-Tag.
Danke für die Antwort, das ist die Erklärung und jetzt weiß ich auch, wie es richtig gemacht werden muß.
Denn selbstverständlich wäre die hardwaremäßge Voraussetzung, daß eine Eingabe am DIO-Port einen Interrupt auslösen kann, und das ist offensichtlich bei bisher keiner Karte der Fall. Denn wenn es das gäbe, dann gäbe es sicher auch ein entsprechendes Beispiel-VI von NI - und das ist nicht der Fall.
Im Beispiel "Gen Event for Ext Signal.vi" wird für das Auslösen des Events der Zählereingang str0 (oder ctr1) verwendet. Und diese Eingänge können tatsächlich Interrupts auslösen. Und das ist also die Lösung: Man muß unbedingt einen diese Eingänge verwenden. Es spricht ja nichts dagegen, diese Leitungen außerdem mit einem DIO-Port zu verbinden, wenn diese Leitung zu einem Byte gehört, welches nach dem Interrupt als Ganzes eingelesen werden soll.
' schrieb:Ich möchte gern generell von Warteschleifen mit Polling abkommen und durch Ereignisse ersetzen.
Um so ein Konzept auch beim Abfragen von digitalen Ports zu erproben, habe ich mir dieses Beispiel ausgedacht:
Wenn sich ein Eingabewert an Port0/Leitung0 ändert, soll ein Ereignis (Gong) ausgelöst werden.
Habe Beispiele von NI herangezogen und variiert, aber es will bei mir überhaupt nicht funktionieren.
Kann mir jemand einen Rat geben, woran das liegt?
[attachment=31818:Aenderun...rkennung.png]
jau, nur bestimmte Messkarten unterstützten Events bei DIO Änderungen (manche [z.B. DIO 96] können noch nicht mal im Modus Continus betrieben werden) Ich vermute mal, du hast eine Messkarte erwischt, die Events nicht unterstützt ...
' schrieb:jau, nur bestimmte Messkarten unterstützten Events bei DIO Änderungen (manche [z.B. DIO 96] können noch nicht mal im Modus Continus betrieben werden) Ich vermute mal, du hast eine Messkarte erwischt, die Events nicht unterstützt ...
Ja, du hast offensichtlich recht, bei Karten der älteren E-Serie, mit denen ich es versucht habe, geht es wirklich nicht.
Die gute Nachricht:
Bei der neueren M-Serie, die man jetzt sowieso nur noch statt der E-Serie kaufen würde, ist die Interruptfähigkeit des DIO-Ports Standard.
Auszug aus dem Manual:
M Series devices support the following DIO features on Port 0:
• Up to 32 lines of DIO
• Direction and function of each terminal individually controllable
• Static digital input and output
• High-speed digital waveform generation
• High-speed digital waveform acquisition
• DI change detection trigger/interrupt
' schrieb:Bei der neueren M-Serie, die man jetzt sowieso nur noch statt der E-Serie kaufen würde, ist die Interruptfähigkeit des DIO-Ports Standard.
hihi, den mal tou:)gleich die BANF ausfüllen und dem Scheffe unterschieben;)und öfter mal was neues is ja auch schön