Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
16.12.2008, 17:54 (Dieser Beitrag wurde zuletzt bearbeitet: 17.12.2008 10:30 von jg.)
Hallo, ich bin LabVIEW-Neuling. Ich habe folgendes Problem:
Ich möchte in Abhängigkeit von 4 Lichtschranken (Digitale Signale), verschiedene Programme starten. Die Signale der Lichtschranken werden über den DAQ-Assistenten digital erfasst und anschließend in einem Digitalen Signalverlaufsgraphen dargestellt. Das klappt ganz gut.
Jetzt möchte ich wie gesagt in Abhängigkeit von den 4 verschiedenen Signalen verschiedene Schleifen starten. Übertrage ich mir dafür am besten die Werte in ein Array oder in einzelne Variablen? Und wie funktioniert das? Anbei habe ich mal eine Datei hinzugefügt, mit der ich die Daten einlese und in einem Graphen darstelle. Wie müsste ich die Signale dann abgreifen / speichern, um wie gesagt in Abhängigkeit von diesen eine oder mehrere Schleifen zu starten?
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Datenerfassung / Array / Variable
Du kannst das 2D-Array und die daraus resultierenden 1D-Arrays mit der Funktion "Index Array" zerlegen und dann, je nachdem ob Du "T" oder "F" hast, einen Case pro Lichtschranke ausführen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Hallo, ist das Array dein ein 2-D-Array? Ich dachte eigentlich das es ein 1-D-Array ist.
Das mit der Funktion "Array indizieren" habe ich heute schonmal versucht. Leider wusste ich nicht ob es geklappt hat, weil ich nicht die passende Funktion gefunden hab, die mir den Inhalt des Arrays dargestellt hat.
Wie kann ich ein einzelnes Feld im Array für die Bedingung des Case nutzen? Ich kenne das nur aus der C-Programmierung, das man gezielt sagt, dass das Element in der 1. Spalte/1.Zeile gleich 1 sein soll. Wie spreche ich das in LabVIEW gezielt an?
Danke für die schnellen Antworten. Vielleicht weißt du auch noch ein gutes Buch, indem sowas erklärt steht.
' schrieb:Hallo, ist das Array dein ein 2-D-Array? Ich dachte eigentlich das es ein 1-D-Array ist.
Es ist ein 2D-Array: die eine Dimension ist die Anzahl der digitalen Eingänge. Die andere Dimension ist die Anzahl der Samples.
Zitat:Wie kann ich ein einzelnes Feld im Array für die Bedingung des Case nutzen? Ich kenne das nur aus der C-Programmierung, das man gezielt sagt, dass das Element in der 1. Spalte/1.Zeile gleich 1 sein soll. Wie spreche ich das in LabVIEW gezielt an?
Du kannst das Element Array indizieren nach unten aufziehen (wie vieles in LV), sodass zwei Index-Eingänge vorhanden sind. Pro Dimension ein Index-Eingang. Den Ausgang kannst du dann entweder direkt auf eine Case-Sequenz (selektor-Eingang) geben oder sonstwie weiter verarbeiten (z.B. mit = 1).
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
@IchSelbst: Wenn ich das richtig verstanden hab, werden dann alle digitalen Eingänge in eine Dimension geschrieben. Wie kann ich mir dann einen einzelnen Eingang abgreifen, um ihn dann auf eine Case-Bedingung zu geben? Ein Beispiel wäre sehr hilfreich.
Kann ich mir denn auch irgendwie jeden Eingang auf eine Variable schreiben? Und die Variable dann später wieder als Bedingung für die Case-Schleife benutzen? (wie bei der C-Programmierung. Ich lege einen Eingang auf eine Variable und kann ihn dann später wieder abfragen/anzeigen lassen/als Bedingung für eine If-Schleife nehmen). Ein Beispiel wäre wieder nicht schlecht.
' schrieb:Wie kann ich mir dann einen einzelnen Eingang abgreifen, um ihn dann auf eine Case-Bedingung zu geben? Ein Beispiel wäre sehr hilfreich.
Mit einem Beispiel kann ich leider nicht dienen, hier hab ich kein LV.
Zitat:Kann ich mir denn auch irgendwie jeden Eingang auf eine Variable schreiben? Und die Variable dann später wieder als Bedingung für die Case-Schleife benutzen?
Ja, klar. Einfach am Ausgang des Elementes Array Indizieren ein Anzeigeelement erzeugen (Cursor an Ausgang halten, Kontextmenü öffen ...).
Zitat:(wie bei der C-Programmierung. Ich lege einen Eingang auf eine Variable und kann ihn dann später wieder abfragen/anzeigen lassen/als Bedingung für eine If-Schleife nehmen).
Alles (naja, vieles, aber sehr vieles), was du in C machen kannst, kannst du auch in LV machen.
Zitat:Ein Beispiel wäre wieder nicht schlecht.
Wie gesagt, hab hier leider (oder Gott sei dank ) kein LV. Musst du warten bis heute Abend.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Danke für die schnelle Antwort. Ich werde das gleich mal versuchen umzusetzen und mich bei Erfolg nochmal melden. Ansonsten würde ich bis heute Abend warten und wäre für ein Beispiel sehr dankbar.
Hallo, ich habe mal versucht ein einzelnes Element in einem Array anzusprechen. Aber leider funktioniert dies nicht. Dafür habe folgendes Programm mit LV 8.5 geschrieben.
Ich lese die Daten von den Lichtschranken mit dem DAQ-Assistenten digital aus und lasse sie mir mit dem Digitalen Signalverlaufsgraphen darstellen. Parallel dazu indiziere ich ein Array und möchte nun, wenn Lichtschranke_1 auf "on" eine Zeit laufen lassen. Wenn die Lichtschranke_1 nicht auf "on" ist, soll eine andere Zeit laufen und dargestellt werden. Leider läuft dauernd die Zeit, die bei deaktivierter Lichtschranke laufen sollte, obwohl meine Lichtschranke "on" ist und dies mir auch im Digitalen Signalverlaufsgraphen dargestellt wird.
Ich denke das liegt daran, dass ich nicht in der Lage bin, das Element im Array anzusprechen, welches für die Lichtschranke_1 zuständig ist. Oder wo könnte das Problem liegen?
' schrieb:Hallo, ich habe mal versucht ein einzelnes Element in einem Array anzusprechen. Aber leider funktioniert dies nicht. Dafür habe folgendes Programm mit LV 8.5 geschrieben.
Ich sehe gerade, du verwendest DAQ-Assi und Signalverlauf, und auch noch digital. Sowas mach ich nicht. Viel zu schwierig.
Ich kuck mirs trotzdem an. Dauer nur etwas länger.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Zumindest den DAQ-Assi hab ich mal weg gemacht. Den Digitalen Signalverlauf hab ich halt noch dagelassen.
Ich hab dir mal eine Überführung der Daten aus dem Digitalen Signalverlauf in ein normales Boolsches 2D-Array gemacht. Jetzt kannst du auf jedes Bit des Eingangports der DAQ-Karte zugreifen. Ob es andere Methoden gibt, auf ein einzelnes Bit zuzugreifen, weiß ich nicht.
Ich verwende für solche Sachen immer das, was im anderen Case steht: 2D-Array of U8 anstelle Signalverlauf.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).