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!
Hallo zusammen. Ich sitze seit mehreren Monaten an einer Aufgabe und langsam habe ich es satt. Bitte um Hilfeee!
Ein Prüfstand wird duch ein Software gesteuert (LV7.1, Programmierer nicht mehr da, kein Doku, soll verbessert werden!). In diesem Programm befinden sich mehrere Daq Assistenten für digitale und analoge; Input und Output.
Insgesamt ist das Programm bei der Datenerfassung zu langsam. Mir wurde in diesem Forum mal geraten die Daq-Assis zu ersetzen. Ich habe nun vorerst zwei digitale Ausgänge (die einfach jeweils einen Schalter umlegen) durch Daq-Mx ersetzt. Es funktioniert auch. Kann man bestimmte Daq-Mx darin zusammenfügen um das zweimalige initialisieren in jedem Schleifendurchlauf zu vermeiden?
Erklärung: Es heist, dass die Daq-Assis in der While-Schleife in jedem Durchlauf initialisiert werden. Daher Umwandlung in Daq-mx und eventl. zusammenfügen. Wenn das nähmlich klappt, kann ich alle daq-assis rausschmeisen. Meine Gedanke jedenfalls..............falls es machbar ist............
Was du auf jeden Fall machen kannst, ist den Create und den Start einer jeden der beiden Tasks links aus der While-Schleife hinauslegen und den Stopp jeder Task rechts aus der While-Schleife hinauslegen. Die Task-Variablen (also den Wire) ziehst du dann durch die While-Schleife durch und das Ausgabeelement schließt du hier an.
Du kannst auch im MAX eine Task erstellen mit zwei Ausgangspins. Dann brauchst du nur eine Task im LV-Programm.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Weiterer Tip: Ändere die Instanz vom DAQmx Write VI:
Dann sparst du dir nach Screenshot unnötige Umwandlung ins Dynamic Data Format.
Und natürlich kannst du die beiden DigitalLines auch zu einem Task zusammenfassen. Das würde ich aber nur machen, wenn du wirklich immer beide Lines "gleichzeitig" schaltest. Dazu kannst du z.B. 2 Create Channel VIs hintereinanderschalten. Du musst dann natürlich eine andere Instanz beim Write VI auswählen.
Ich empfehle auch mal einen Blick auf die Bsps. im NI-Examplefinder zu DAQmx.
Gruß, Jens
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
vielen Dank "IchSelbst" und "Jens G",
ich werde eure Ratschläge zum Herzen nehmen.
@Jens G: "Ändere die Instanz vom DAQmx Write VI"
eeeeee, was meinst du genau!
@IchSelbst Create und den Start einer jeden der beiden Tasks links aus der While-Schleife hinauslegen und den Stopp jeder Task rechts aus der While-Schleife hinauslegen
Welche Vorteil würde das bringen?
Das könnte ich realisieren, aber Frage: Das Programm muss immer gestartet bleiben. Zwischendurch wird der Schalter betätigt. Hat das ein Nachteil.
d.h. während das Programm läuft, kann es sein, dass der Hauptschalter ausgeschaltet und nach einer Zeit eingeschaltet wird. Muss der "Stopp" sich dann nicht in der While-Schleife befinden.
Geht mal bei dem Icon des VIs im Kontextmenü auf Sichtbar. Dort gibt es meherer Einträge. Einer geht sinngemäß in die Richtung "polymorphe Auswahl anzeigen".
Hinweis:
Viele Task-VIs sind polymorph. Je nach Task muss man auswählen (oder wird intuitiv automatisch gewählt), welche Instanz des VIs verwendet werden soll. Folge der Auswahl kann z.B. sein, dass der Dateneingang ein einzelner Wert ist oder ein 1D- oder auch ein 2D-Array. Der Typ des Dateneingangs am VI ändert sich also - der Name des VIs bleibt aber bestehen.
Zitat:Welche Vorteil würde das bringen?
Einen erheblichen Geschwindigkeitsvorteil.
Eine Task, aus der man eigentlich nur lesen(schreiben) will, muss nicht ständig geöffnet und geschlossen werden. Prinzipiell reicht einmal Öffnen etc. aus.
Zitat:Frage: Das Programm muss immer gestartet bleiben. Zwischendurch wird der Schalter betätigt. Hat das ein Nachteil.
Das hat - normalerweise - keinen Nachteil.
Zwischenfrage: Ist das der Schalter, der abgefragt werden soll? Oder der Hauptschalter?
Zitat:d.h. während das Programm läuft, kann es sein, dass der Hauptschalter ausgeschaltet und nach einer Zeit eingeschaltet wird. Muss der "Stopp" sich dann nicht in der While-Schleife befinden.
Der Stopp, der jetzt in der Schleife steht, ist ja ein Stopp für die Task. Ein Task-Stopp hat mit den eigenlichen IOs, die möglicherweise bei einem Hauptschalter-Aus nicht mehr vorhanden sind, nichts zu tun.
Wenn du jedoch meinst, ein Stopp-Signal ausgeben zu müssen, dann geht das anders als mit Stopp-Task.
Ob der Hauptschalter aus oder ein ist, ist für die Task irrelevant. Die Task an sich (respektive dein Programm) kann nicht feststellen, ob ein Eingang deswegen Low ist, weil der Hauptschalter aus ist oder weil keiner den entsprechenden Taster am Eingang gedrückt hat.
Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
31.10.2008, 14:14 (Dieser Beitrag wurde zuletzt bearbeitet: 31.10.2008 14:15 von Kvasir.)
' schrieb:Erklärung: Es heist, dass die Daq-Assis in der While-Schleife in jedem Durchlauf initialisiert werden. Daher Umwandlung in Daq-mx und eventl. zusammenfügen. Wenn das nähmlich klappt, kann ich alle daq-assis rausschmeisen. Meine Gedanke jedenfalls..............falls es machbar ist............
vielen Dank schon mal!
Zitat:@IchSelbst
Create und den Start einer jeden der beiden Tasks links aus der While-Schleife hinauslegen und den Stopp jeder Task rechts aus der While-Schleife hinauslegen
Welche Vorteil würde das bringen?
Das könnte ich realisieren, aber Frage: Das Programm muss immer gestartet bleiben. Zwischendurch wird der Schalter betätigt. Hat das ein Nachteil.
d.h. während das Programm läuft, kann es sein, dass der Hauptschalter ausgeschaltet und nach einer Zeit eingeschaltet wird. Muss der "Stopp" sich dann nicht in der While-Schleife befinden.
Genau das ist ja der Punkt, den du zuerst angesprochen hast. Die Assistenten initialisieren den Task bei jedem Durchlauf neu. Das machst du nun auch! Bei jedem Schleifendurchlauf erzeugst du den Tast, startest und stopst ihn.
Deine angesprochene Zeitersparnis ist genau die, dass du den Tast vor der Schleife erstellst, startest und (hinter der Schleife) stopst.
Grüße
A few weeks of developement and testing can save a WHOLE afternoon in the library!
Ok, ich glaube ich habe es kapiert. Die Kanäle braucht man nicht jedesmal zu initialisieren. Einmal aufgemacht, stehen sie zur Verfügung. Danke Kvasir, IchSelbst.
' schrieb:Zwischenfrage: Ist das der Schalter, der abgefragt werden soll? Oder der Hauptschalter?
Ich meine den Hauptschalter, der sich in meinem Programm befindet.
Wenn ich die Tasks Create, Start und Stopp aus der Schleife rausnehme, könnte ich also immer noch meinen Hauptschalter-"Button" bedienen, d.h Einschalten, Ausschalten und wieder einschalten ohne das Program erneut starten zu müssen. Der Kanal bleib bestehen. Korrekt? :-)
Neues aber ähnliches Problem:
So einen Daq-Assi mit einer einfachen digitalen Output konnte ich zwar in Daq-Mx konvertieren,
jedoch habe ich Probleme mit dem Daq-Assi der analoge Signale ausgibt. Kann mir jemand diesen einen Daq konvertieren?
Sie befindet sich eigentlich in meiner While-Schleife und gibt eine analoge Spannung an den E-Motor weiter. Die Spannung wird zuvor aus dem eingegebenen Drehzahl umgerechnet.
(Achtung: LabVIEW7.1, falls ihr noch die Möglichkeit habt. Im Notfall würde 8.2 gehen, dann muss ich selber das gleiche in 7.1 realisieren. Höhere kann ich mir gar nicht ansehen!)