LabVIEWForum.de - Problem mit Ereigniszählung

LabVIEWForum.de

Normale Version: Problem mit Ereigniszählung
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich bin noch ein relativer Anänger im Umgang mit LabVIEW.
Mein Ziel ist Ereignisse zu detektieren und auszuwerten. Die Ereignisse werden von einer Gabellichtschranke erfasst und an die Messkarte (Measurement Computing USB 4301) übertragen. Jetzt zu meinem Problem: lese ich die Counter von einem definierten Startpunkt (zweite Lichtschranke mit genau einem periodischen Signal dient als Start / Endwert) bis zu einem ebenfalls definierten Endpunkt aus, variiert der Counterwert. Das heißt obwohl 24 Ereignisse vorhanden sind werden weniger erfasst manchmal auch 24. Die Ereignisse werden von der Lichtschranke noch richtig erfasst, das habe ich schon überprüft. Ich denke das es an meinem programm liegen könnte.
Ein weiteres Problem ist, dass das Programm in unregelmäßigen abständen abstürzt (als Fehlermeldung kopmmt nur "keine Rückmeldung")

Ich würde mich feuen, wenn ihr mal einen Blick über das Programm werfen könntet.

Vielen Dank im Voraus.

LabVIEW: 8.2
ich erklär nur nochmal kurz mein Ziel:

Programm welches in bestimmten Abständen die Counter ausliest.
Zählen der Ereignisse über einen definierten Zeitraum. Derzeit triggert eine zweite Lichtschranke über einen zweiten Counter den Zählzeitraum; zwischen x Signalen (Startet bei erstem Signal und Endet bei x)
Vergleichen der Werte mit vorherigem Speicherwert und falls der neue geringer ist speichern.


Die zweite Zählung in meinem Programm dient nur zum Verhindern das falsche Werte gespeichert werden ( mein programm holt sich ja ab und ann falsche ergebnisse aus dem Counter).

Kann es daran liegen das ein zweiter Counter zum triggern eines Zählintervalls ungeeignet ist?

Habe auch schon geschaut ob evtl. der speicher voll läuft, wegen meinem anderem Problem, den Programmabstürzen. Dies ist nicht der Fall
Hallo,

ich hab nur mal kurz drübergeschaut und ehrlich gesagt nicht die Zeit gehabt dein ganzes Programm zu analysieren, da es ja doch (für eine Hilfestellung) schon recht groß ist und auch sehr unübersichtlich. Da aber bisher keiner geantwortet hat, schreib ich halt doch ein paar Zeilen, die dir aber vermutlich nur bedingt weiterhelfen.

- Einmal stellt sich die Frage, wo deine Vi's der Counteransteuerung herkommen. Sind diese vom Hersteller mitgeliefert? Eventuell steuerst du hier etwas falsch an, gibt es Probleme.

- An deinem Vi sieht man gleich, dass du neu in LabVIEW bist. Du versucht den zeitlichen Ablauf mit Hilfe von massiven Einsatz von Sequenzen zu realisieren. In 99% der Fälle brauchst du diese aber nicht. Der Flußverlauf entlang den Drähten alleine genügt schon um zeitliche Abläufe zu steuern. Zuviele Sequenzen reduzieren die Übersichtlichkeit und oft auch den Ablauf des Programms stark. Such doch einmal im Forum nach "State Machine" oder bemühe den Example Finder in LabVIEW um dich ein wenig in LabVIEW typische Programmierstile einzuarbeiten.

Grüße
hallo,
danke für die schnelle antwort.

die counteransteuerungen wurden vom hersteller mitgliefert; hab da nichts dran geändert.

ich werde das programm versuchen übersichtlicher zu gestalten.
so habe mal alles unwesentliche entfernt und das restprogramm so weit vereinfacht wie es mir möglich war.

das auslesen des counters bei einem definierten startpunkt befindet im subvi des programms.

leider schwanken die so ermittelten werte noch immer stark (dies darf aber nicht sein).

würde mich freuen, wenn ihr mir noch weitere hinweise zur lösung des problems geben könntet

Grüße
Guten Morgen,

ich habe dir mal die Stellen markiert, die mir auf die schnelle aufgefallen sind:

- Dein Init.vi habe ich noch der letzten Sequenz entledigt um dir zu zeigen, dass du auch hier komplett darauf verzichten kannst. Die Verdrahtung regelt die zeitliche Abfolge von alleine.

1. Beide SubVis stehen ohne Anbindung in der Schleife. Du kannst in diesem Fall nie sagen, welches zuerst ausgeführt wird. Wenn ich das Recht sehe, wird so entweder zuerst der Counter ausgelesen und dann resetet, oder zuerst resetet und dann ausgelesen. Das sollte doch einen Unterschied machen. Im übrigen finde ich diese mitgelieferten SubVis schwach, da hier der Anschluss / Ausgang für Fehlercluster fehlt.

2. Wofür ein Shiftregister, wenn du es nie verwendest?
3. Das "=" ist problematisch. Hier gehört auf jeden Fall ein ">=" hin. Mit = kann es dir passieren, dass der Fall nie eintritt (weil genau dieser Count übersprungen wird) und damit dein Programm ewig festhängt.

Grüße
Offtopic2
' schrieb:Im übrigen finde ich diese mitgelieferten SubVis schwach, da hier der Anschluss / Ausgang für Fehlercluster fehlt.
Ich gebe ja zu, dass eine diplomatische Ausdrucksweise - hier: Im übigen finde ich es schwach - das Zusammenleben erleichert. Hier möchte ich aber sagen: Was waren das denn für Programmierer? Was ist das denn für eine Firma? Wenn deren Hardware ist wie die Software, gehört denen beides um die Ohren gehauen! Was soll denn eine gestapelte Sequenz auch noch mit Sequenzvariable, wo doch in diesem allereinfachsten Fall ja bereits ein Datenfluss (siehe Sequenzvariable) besteht! Da muss ich mich ja über die mitgelieferte Software mehr aufregen als über die Anweder ebendieser!
Hallo,
ich danke euch für eure hilfe habe das programm jetzt verbessert....und es läuft stabiler.

grüße
Referenz-URLs