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!
Ja perfekt. So klappt es jetzt, dass ich alle DOs auf Low oder High setzen kann.
Jetzt ist mein akutes Problem noch, dass ich versuche aus den HauptVI den STOP Knopf des PWM Erzeugungs VIs zu drücken, sodass das Main VI, das die tastverhältnisse berechnet weiterfeährt, aber die kontinuierliche PWM erzeugung gestoppt wird... so wie ich per Forumsuche und Google gesehebn habe, scheint das nicht ganz so einfach zu sein... ich werde mal versuchen das mit einer Globalen Variable zu machen... was meint ihr?
Ich muss doch nochmal auf das Low Schalten der Ausgänge zurück kommen: ich habe das mit einem DAQmx Write VI und einem Boolean Array versucht. Leider ist die Reaktion beim Stoppen absolut Random, manchmal alle auf High, dann wieder alle Low, dann mal alle bis auf einen low....
Hier mal das Blockschaltbild:
06.09.2013, 15:05 (Dieser Beitrag wurde zuletzt bearbeitet: 06.09.2013 15:09 von GerdW.)
mal überlegen:
Du definierst den DO-Task mit "1 channel for all lines" und benutzt U8-Werte, um die einzelnen Bits zu setzen. Jetzt versuchst du zum Schluß, mit einem 1D-Bool-Array zu arbeiten.
- Wieso machst du das?
- Wieso wunderst du dich nicht selbst darüber, dass du nun einen anderen Datentyp benutzt?
- Wieso denkst du, dass ein "1D-Bool-Array" auf die Aussage "1 channel for all lines" passt?
Zu deinem STOPP-Knopf:
Es gibt genügend Beispiele, die zeigen wie man Daten von einem VI zum anderen transportiert. Schon mal in den ExampleFinder geschaut? Stichworte (auch zur Suche im Forum): globale Variablen, FGVs, Queues, Melder, parallele Strukturen...
Also ok, jetzt, wenn ich es mir so ansehe, macht es natürlich keinen Sinn, einen task, der mit U8 Werten angesteuert wird, dann mit einem Array an Bool werten zu verändern. Problem war nur, dass mir nicht ganz klar war, wie die U8 Werte aussehen müssen, damit ich einzelne Lines damit ansteuern kann.
Danke für die Zurechtweisung.... ich bin leider erst langsam warm mit den DAQmx Funktionalitäten.
Jetzt eine Frage, die wieder auf Erfahrungswerte abzielt.
Ich habe jetzt das PWM-Programm soweit fertig und möchte es als funktionierendes Kern Programm abgeschlossen als VI in der restlichen Software nutzen: Es hat dann ja die 4 Eingänge mit den Duty Cycles und der Frequenz sowie die Ansteuerung des STOP Buttons über eine globale Variable.
Wenn ich jetzt noch parallel zur PWM Erzeugung Analogsignale einlesehen will, die mit in einem XY Graphen live angezeigt werden und dann nach dem Stoppen noch betrachtbar bleiben, wie gehe ich da am besten vor?
Einfach mit dem DAQ-Assistenten einen Task erstellen, der die Signale ab VI-Start einliest und darstellt oder ist das kein guter Stil?
09.09.2013, 12:23 (Dieser Beitrag wurde zuletzt bearbeitet: 09.09.2013 12:25 von GerdW.)
Zitat:Wenn ich jetzt noch parallel zur PWM Erzeugung Analogsignale einlesehen will, die mit in einem XY Graphen live angezeigt werden und dann nach dem Stoppen noch betrachtbar bleiben, wie gehe ich da am besten vor?
DAQmx-Task erstellen, abfragen und in einem Graphen darstellen. Ob die Daten "nach dem Stoppen" sichtbar bleiben, hast du selbst in der Hand - musst ja den Graphen nicht mit "leeren" Werten überschreiben...
Zitat:Einfach mit dem DAQ-Assistenten einen Task erstellen, der die Signale ab VI-Start einliest und darstellt oder ist das kein guter Stil?
Ich persönlich würde beim Wort "DAQ-Assistenten" nie von gutem Stil reden NI sieht das wohl anders...
Sagen wir es mal anders:
Du hast jetzt eine Routine, die die PWM-Kanäle behandelt. Jetzt brauchst du eine zweite, die sich um die AI kümmert. Kapselung von Funktionalität ist nie schlecht, man muss nur den Datenaustausch vernünftig definieren...
Zitat:mir nicht ganz klar war, wie die U8 Werte aussehen müssen, damit ich einzelne Lines damit ansteuern kann.
Jedes Bit in dem U8 steuert einen der 8 DOs. Lass dir den U8-Wert in Binärdarstellung (mit führenden Nullen) anzeigen...
So wie ich jetzt verstanden habe, muss ich doch dann DAQmx Write (Digital U8 1Chan 1 Samp) wählen und eine U8 Konstante mit dem Wert 0 an den data Eingang hängen. Ich habe jedoch immernoch die Problematik, dass die DOs beim beenden Zufallswerte ausgeben - Kann es daran liegen, dass oben der Task schon gecleart wurde? Es kann doch nicht so schwer sein, dass man einstellt, dass am Ende alle ports auf 0 gesetzt werden...
EDIT: Kann es damit zusammenhängen, dass ich den Task aufgegriffen habe und dieser noch die Einstellung der sample Clock innehat und dadurch nicht mit DAQmx Write (Digital U8 1Chan 1 Samp) rückgesetzt werden kann, sondern auch irgendwie wieder eingestellt werden muss, dass die es sich um keinen kontinuierlichen Ausgang handelt... ich hänge jetzt schon echt ne ganze Weil an dem Problem...gibts doch nicht.
Ich lade jetzt mal das Programm hoch, damit ihr es besser anschauen könnt. Ich komme einfach nicht drauf, wie ich das mit dem Ports auf LOW oder HIGh setzen nach dem Stoppen hinbekomme... das ist natürlich eine wichtige Anforderung an mein Programm, dass alle DOs beim Stoppen immer auf den selben Wert gesetzt werden....