LabVIEWForum.de - Ereignisabhängiger Zähler, der die Anzahl von Ereignissen mitzählt

LabVIEWForum.de

Normale Version: Ereignisabhängiger Zähler, der die Anzahl von Ereignissen mitzählt
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi Leute,

ich habe ein Problem damit Werte in einen Array einzutragen. Mein Programm macht mit einer Kamera ein Bild, wenn ein gewisses Ereignis stattfindet, beispielsweise drückt jemand einen Knopf (also völlig Zeitunabhängig). Mit dem Bild veranstaltet mein Programm dann irgendwas und gibt hinterher einen skalaren Wert heraus. Diesen Wert möchte ich dann in einen Array eintragen. Natürlich soll der erste Wert, der nach dem Programmstart erzeugt wird in den Array an der Stelle 0 eingetragen werden, der zweite an Stelle 1, der dritte an Stelle 2 usw. Wie lang der Array sein soll ist bekannt und kann daher ohne Probleme vorher initialisiert werden.

Ich hatte mir überlegt einen Zähler einzubauen, der in diesem Fall bei -1 anfängt und sollte das Ereignis stattfinden um 1 hochzählt. Das Ergebnis dieses Zählers soll dann in meinem angehängten Programm, dass den Sachverhalt hoffentlich vereinfacht darstellt, an den index-0-Eingang von "Replace Array Subset" angelegt werden. Alle meine bisherigen Versuche sind gescheitert. Z.B. gibt es ja in for-Schleifen einen fortlaufenden Zähler. Aber die Schleife wartet ja mit dem Zählen und Eintragen nicht auf den nächsten Wert. Und eine While-Schleife fängt nach der Abbruch-Bedingung wieder bei 0 an zu zählen. Event- und Case-Structures haben keinen fortlaufenden Zähler.

Für die Frage, was ich mit dem Array machen will: Das ganze soll in meinem Programm an zwei Stellen passieren, also mit zwei Werten, sodass ich hinterher zwei Arrays habe. Diese möchte ich dann einem Graphen darstellen. Der eine Array als X- der andere als Y-Wert. (Aber das kann ich schon Wink).

Grüße, bienee
(19.08.2011 13:05 )bienee schrieb: [ -> ]Hi Leute,

ich habe ein Problem damit Werte in einen Array einzutragen. Mein Programm macht mit einer Kamera ein Bild, wenn ein gewisses Ereignis stattfindet, beispielsweise drückt jemand einen Knopf (also völlig Zeitunabhängig). Mit dem Bild veranstaltet mein Programm dann irgendwas und gibt hinterher einen skalaren Wert heraus. Diesen Wert möchte ich dann in einen Array eintragen. Natürlich soll der erste Wert, der nach dem Programmstart erzeugt wird in den Array an der Stelle 0 eingetragen werden, der zweite an Stelle 1, der dritte an Stelle 2 usw. Wie lang der Array sein soll ist bekannt und kann daher ohne Probleme vorher initialisiert werden.

Ich hatte mir überlegt einen Zähler einzubauen, der in diesem Fall bei -1 anfängt und sollte das Ereignis stattfinden um 1 hochzählt. Das Ergebnis dieses Zählers soll dann in meinem angehängten Programm, dass den Sachverhalt hoffentlich vereinfacht darstellt, an den index-0-Eingang von "Replace Array Subset" angelegt werden. Alle meine bisherigen Versuche sind gescheitert. Z.B. gibt es ja in for-Schleifen einen fortlaufenden Zähler. Aber die Schleife wartet ja mit dem Zählen und Eintragen nicht auf den nächsten Wert. Und eine While-Schleife fängt nach der Abbruch-Bedingung wieder bei 0 an zu zählen. Event- und Case-Structures haben keinen fortlaufenden Zähler.

Für die Frage, was ich mit dem Array machen will: Das ganze soll in meinem Programm an zwei Stellen passieren, also mit zwei Werten, sodass ich hinterher zwei Arrays habe. Diese möchte ich dann einem Graphen darstellen. Der eine Array als X- der andere als Y-Wert. (Aber das kann ich schon Wink).

Grüße, bienee

Hallo bienee

Ich würde in deinem Fall zu einer Funktionalen Globalen Variable raten, damit lassen sich Probleme dieser Art sehr gut beheben.

Hier ein Beispiel:

[attachment=35380]

Hoffe das VI funktioniert auch nach dem runterspeichern auf Version 8.2 noch^^

Gruss Marc
funktioniert wunderbar, danke!
Ok....hat an sich zwar funktioniert, allerdings macht sich die Initialisierung unglaublich schlecht in meinem Programm. Mein Programm soll im Fall von True mit der Kamera ein Bild aufnehmen und im Fall von False nichts machen. Um das beizubehalten habe ich die Initialisierung in den False-Case implementiert. Um nun die Enumvariable zu umgehen und damit er die Initialisierung nur am Anfang genau einmal macht, hab ich mir überlegt das Ganze über einen Vergleich mit dem Zähler einer While-Schleife zu lösen. Er soll eben, wenn der Index der While-Schleife auf 0 steht die Initialisierung machen und sobald der Zähler drüber geht, False ausgeben und damit die Initialisierung überspringen. Damit das Ergebnis des Vergleichs aber aus der Schleife herauskommt, muss die Schleife unterbrochen werden, was den Zähler aber wieder auf Null setzt.
Hallo bienee,

schon mal die Funktion "First Call?" benutzt?

Außerdem gibt es eine extra "=0"-Vergleichsfunktion. Und wozu die Endlosschleife (Continue on TRUE)?

- Wie willst du mit dieser Mini-Schleife irgendwas zählen?
- Nimm ein Schieberegister zum Zählen!
- THINK DATAFLOW!
Hallo bienee,
(26.08.2011 09:33 )GerdW schrieb: [ -> ]schon mal die Funktion "First Call?" benutzt?
Nein, noch nichts von gehört. Vllt. liegt es ja am 'Run Continously-Mode', aber das Problem ist auch hier, dass er die Schleife verlassen muss, um das True weiterzugeben. Und das tut er nur, wenn die Stop-Bedingung erfüllt wurde. Beim nächsten Programmdurchlauf ist es dann wieder das erste mal, dass die Schleife ausgeführt wird und ich erhalte wieder ein True. Ohne die Schleife habe ich genau dasselbe Problem mit 'First Call?'.

(26.08.2011 09:33 )GerdW schrieb: [ -> ]Außerdem gibt es eine extra "=0"-Vergleichsfunktion. Und wozu die Endlosschleife (Continue on TRUE)?
Die Endlosschleife sollte eigentlich dazu dienen, dass er nicht jedes mal wieder bei 0 anfängt zu zählen. Ist natürlich schlecht umgesetzt, aber das ist eben ein Teil meines Problems Sad.

(26.08.2011 09:33 )GerdW schrieb: [ -> ]- Wie willst du mit dieser Mini-Schleife irgendwas zählen?
- Nimm ein Schieberegister zum Zählen!
- THINK DATAFLOW!
Zählen an sich will ich ja eigentlich nichts. War eigentlich quasi ein Ersatz für die 'First Call?'-Funktion, die ich bis eben noch nicht kannte. Und ok...ich glaube jetzt habe ich die Benutzung von Schieberegistern endlich verstanden.
Hallo bienee,

Zitat:Vllt. liegt es ja am 'Run Continously-Mode'
Wall
Plastischer Vergleich:
Schreibst du Texte in Word auch immer, indem du für jedes einzelne Wort das Officepaket neu startest und beendest?

Der RunCont-Modus ist nur zum Testen kleiner Routinen gut und gehört aus der Menüleiste verbannt!
(26.08.2011 10:16 )GerdW schrieb: [ -> ]Hallo bienee,

Zitat:Vllt. liegt es ja am 'Run Continously-Mode'
Wall
Plastischer Vergleich:
Schreibst du Texte in Word auch immer, indem du für jedes einzelne Wort das Officepaket neu startest und beendest?

Der RunCont-Modus ist nur zum Testen kleiner Routinen gut und gehört aus der Menüleiste verbannt!

Mach ich natürlich nicht Big Grin. Bisher hat er aber trotzdem gut geholfen. Unter diesem Gesichtspunkt gebe ich aber zu, dass er Anfänger erstmal auf die falsche Fährte lockt.
Ok...das heißt ich muss eine While Schleife um mein komplettes Programm legen und nur den normalen Start-Knopf drücken. Denn andere Dinge in meinem Programm soll er ja öfter als einmal ausführen (z.B. das Lesen des COM-Ports). Hab ich das jetzt so richtig verstanden?
Hallo bienee,

Zitat:Hab ich das jetzt so richtig verstanden?
Ich hoffe mal "ja". Smile
Referenz-URLs