Test5.vi (Größe: 253,53 KB / Downloads: 282)
Test5.vi (Größe: 253,53 KB / Downloads: 282)
Hallo alle miteinander!
Ich habe folgendes Problem:
Ich habe eine digitale Zählerkarte im Einsatz, an der Drehgeber angeschlossen sind. Die Karte ist von einem Fremdhersteller, also nicht von National Instruments. Bei der Karte handelt es sich um eine APCI-1710 von Addi-Data.com. Grundsätzlich wird LabVIEW natürlich unterstützt.
Meine Aufgabe ist es eine Messwerterfassung nach zu programmieren, die es bei uns schon für Delphi gibt. Die verwendeten Bibliotheken für Delphi sind natürlich auch unter LabVIEW vorhanden, so sieht es auf den ersten Blick nach einer Abschreibübung aus.
Meine Programmierung in LabVIEW sieht nun folgendermaßen aus:
Initialisierung der Messkarte und der darauf verwendeten Module.
( 2 Inkrementalzähler für die Drehgeber; 1 Timer als Zeitbasis um, die Messzeit zu erfassen; 1 Zähler, der nach eine bestimmten Anzahl von Impulsen von Geber 1, einen Interrupt auslöst. Darauf hin sollen die aktuellen Messwerte und die Zeit von der Karte in den Speicher des Rechners (bei mir Arrays) gelesen werden.)
While Schleife.
(Hier wartet das Modul für die Interruptauswertung auf einen Interrupt und speichert dann die Daten in die Arrays die Messdaten)
Deinitialisierung der Messkarte und der Module
In der While Schleife liegt nun mein Problem. Verwende ich keinen Timer, dann ist die Prozessorauslastung enorm hoch. Verwende ich einen Timer, dann sieht es so aus, als ob das Interrupt Modul nur einmal mit der Schleife ausgeführt wird und damit nur einen anstehenden Interrupt verarbeitet. Kommen jetzt sehr viele Interruptauslösungen herein, schafft es der Rechner nicht, sie alle abzuarbeiten. Es staut sich quasi. Und wenn keine neuen Daten mehr hereinkommen, also keine Interrupts mehr ausgelöst werden, arbeitet der Rechner immer noch die alten Interruptauslösungen ab, obwohl ja eigentlich keine neuen Daten mehr im Speicher der Karte vorhanden sind. Ich hoffe das war verständlich.
Der Delphiprogrammierer meinte nun Folgendes:
Das Intrruptmodul sollte aus der While Schlife herausgenommen werden und parallel zur Schleife aktiviert sein. Wird ein Interrupt ausgelöst, dann hat dieser Vorrang vor der While Schleife und wird abgearbeitet (Daten speichern), während die Schleife getoppt wird. (Vorher wurde der Interrupt ja erst nach einem Schleifendurchgang bearbeitet) D. h., die Schleife könnte ja dann auch mit einem großzügigen Timer ausgestattet sein (10 ms oder 100 ms).
Leider fällt mir keine Lösung ein dies so zu realisieren und ich hoffe jemand kann mir da weiter helfen.
Ich hänge mal meine Datei mit an. Beim Öffnen gibt es eine Fehlermeldung, dass bestimmte Bibliotheken nicht gefunden werden, was klar ist, da bei euch die Messkarte nicht installiert ist. Aber die Struktur und der Aufbau des Programmes sollten erkennbar sein. Falls dieses Programm anders aussehen sollte, als ihr das gewohnt seid, ich habe mich bei der Programmierung durch Beispiele vom Messkartenhersteller anleiten lassen.
Schönen Gruß aus Dresden.