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 befasse mich grade mit meinen Digital Outputs meiner Module.
Bisher habe ich immer den DAQ Assistenten genommen- ihr werdet mich dafür bestimmt steinigen, aber ohne ihn komm ich nur selten ans Ziel
Auf jeden Fall ist es beim Assistenten ja so, dass man bei 8 Outputs immer ein Array vorgegeben bekommt, dessen boolsche Werte man ändern kann. Eigentlich will ich aber unabhängig von den 7 anderen Werten einfach nur einem Wert ein True oder False zuweisen. Ich könnte nun ja 8x den Assistenten erzeugen mit je einem Output. Aber das muss doch sicher auch schön gehen, so zu sagen als VI wo ich vorn einfach eingeben kann, welchen Port (0-7) und welchen Zustand (I/0) der Port haben soll.
Ich hab durch die Umwandlungsfunktion was zurechtgefuscht, es funktioniert soweit, aber ob das so der Weg ist- ich bin mir da nicht ganz sicher ;D
Hallo Jens,
danke für deine Lösung. Ist zwar keine SubVI an die ich einfach nur weitergebe "Element x auf True", aber ich denke, das hier ist genau so gut
Was mach stutzig macht ist die Sache mit dem String Array wo alle lines drin stehen. Ich hatte das bei mir nur als Notlösung so gemacht. Aber scheinbar muss das so und geht nicht "schöner"?! Welchen Sinn hat die zweite Zeile wo überall Output drin steht? Kann ich dort auch die Beschreibung des Ports reinschreiben, sowas wie Ansteuerung Schütz 1, ... ?
Gruß Tobias
28.05.2015, 07:15 (Dieser Beitrag wurde zuletzt bearbeitet: 28.05.2015 07:31 von Lucki.)
(28.05.2015 06:38 )tobi45f schrieb: Was mach stutzig macht ist die Sache mit dem String Array wo alle lines drin stehen. Ich hatte das bei mir nur als Notlösung so gemacht. Aber scheinbar muss das so und geht nicht "schöner"?!
Ob Notlösung oder nicht, jedenfalls geht es auch anders, und zwar mit einem einfachen String und ohne for-Scheife. Und es gibt sogar eine Funktion, die das Array in den entsprechenden einfachen String konvertiert:
Das Array-Format hat allerdings auch seine Berechtigung, z.B. dann, wenn man bei Analog-IN für die Kanäle unterschiedliche Messbereiche definieren will.
Zitat:Welchen Sinn hat die zweite Zeile wo überall Output drin steht? Kann ich dort auch die Beschreibung des Ports reinschreiben, sowas wie Ansteuerung Schütz 1, ... ?
Du meinst wohl zweite Spalte, und das mußt Du dich schon selber fragen. Jens hat doch dieses 2D-Array nur aus Deinem VI kopiert, benutzt diese Spalte aber überhaupt nicht. Vielmehr entfernt er sie als Erstes aus dem Array.
Ok, dann bleibt das mit dem Array so erhalten.
jau, Spalte. Beim umwandeln hatte der einen String mit dem Digital Output erzeugt und ich hab es einfach wieder dran gemacht. Aber scheinbar ist das nicht weiter von Bedeutung :-)
Danke
(28.05.2015 06:38 )tobi45f schrieb: danke für deine Lösung. Ist zwar keine SubVI an die ich einfach nur weitergebe "Element x auf True", aber ich denke, das hier ist genau so gut
Du hättest gerne ein einzelnes SubVI? Bitte schön:
(28.05.2015 06:38 )tobi45f schrieb: Was mach stutzig macht ist die Sache mit dem String Array wo alle lines drin stehen. Ich hatte das bei mir nur als Notlösung so gemacht. Aber scheinbar muss das so und geht nicht "schöner"?! Welchen Sinn hat die zweite Zeile wo überall Output drin steht? Kann ich dort auch die Beschreibung des Ports reinschreiben, sowas wie Ansteuerung Schütz 1, ... ?
Die 2. Spalte kommt von dir! Denn Sinn musst du selber wissen. Zwecks String Array: s. Lucki. Dafür spricht auch, dass so schnell und übersichtlich Kanäle hinzugefügt/geändert oder gelöscht werden können.
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!
Danke Jens für die VI :-)
Als ich den Assistenten in den Code umgesetzt habe, da hat er mir einen String mit DigitalOutput erzeugt und ich hab das einfach in ein Array gepackt. Aber ok, habs verstanden
Womit ich mich grade beschäftige ist der Unterschied von Tasks und Channel. Hier im Forum in einem Thema gab es eine Anmerkung, man solle immer Tasks nutzen und speichern, um Fehlern vorzubeugen.
Ich habe grade also im MAX meine Tasks erstellt, wenn ich das richtig sehe, ist es nichts anderes als es über den DAQ Assistenten zu erstellen, nur mit dem Unterschied, dass ich es als Task immer wieder verwenden kann ohne (im Vergleich gesehen) den Assistenten neu zu erstellen? Habe ich das richtig verstanden? Müssten die Tasks nicht dann auch in meinem Projekt irgendwo auftauchen? Irgendwann hatte ich das zumindest schonmal ungewollt, dass ich im Projekt ein Task hatte...
In deiner ersten VI, Jens, hast du ja einen Task und Channel erstellt. Nun würde ich statt create Task einfach Start Task nehmen und halt den richtigen aussuchen?
Gruß Tobias
edit: ok ich hab es falsch verstanden. Es geht so nicht.. :-(
Ein Task ist die Zusammenfassung mehrerer Channels (inkl. möglichen Timing).
Von der Definition von Tasks im MAX halte ich persönlich nicht viel. Das ist viel zu starr und unflexibel. Lieber die Kanalnamen dynamisch zur Laufzeit erstellen, dann gibt es kein Problem, wenn z.B. die DAQ-Hardware oder die Belegung der Kanäle geändert wird.
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!
Hallo Jens,
ich muss wegen dieser VI nochmal stören.
An sich läuft das Ding wie gewünscht, Danke noch einmal.
Aber jetzt, wo ich die Digital Ins nutze bekomme ich ein Problem.
Das Modul hat 16 Inputs und 16 Outputs. Die einen über Port 0, die anderen Port 1 (falls das einen Unterschied macht, da es sich ja um ein Modul handelt).
Nun verwende ich in der VI eine Hauptschleife, in der meine Temperaturen, Analogwerte und eben die Digital Inputs von dem Modul eingelesen werden.
Über eine Queue gehe ich in eine andere Schleife um laufzeitunabhängig meine Digital Outputs zu schalten.
Nun kommt leider bei den Tasks ein Fehler
"Error 201105 occured at DAQmx Start Task.vi
Task Name _unnamed Task <45>"
Ich weiß nichtmals, warum unnamed und warum 45. Ich habe nur 16 in 16 out und alle haben einen Namen
Ich nehme an, dass der Fehler der ist, dass es sich um ein Modul handelt, das an zwei verschiedenen stellen Tasks erstellt und auch beendet. Die Frage ist, kann man überhaupt Input und Output zusammen erstellen?
An sich arbeitet er richtig trotz Fehler. Ich könnte diesen natürlich ignorieren aber richtig machen ist schon schöner
Gruß Tobias
PS: das mit den richtigen beenden von den Queues hab ich immernoch nicht verstanden also verstanden schon aber ich weiß nicht, wie ich es umsetzten kann
Wie soll man da was analysieren? Alle subVIs fehlen, keine Infos über die verwendete DAQ-Hardware, und das mit der Queue solltest du besser in dem Thread fragen, in dem es darum ging. Hier versteht das außer mit jetzt keiner...
Zum Taskname - das ist nicht zu verwechseln mit den Kanalnamen. Du kannst z.B. bei DAQmx Create Task einen Namen angeben
aber wenn da nichts angeschlossen ist, dann werden so Namen wie "Unnamed-45" erzeugt.
Gruß, Jens
P.S.: Was soll der unkonfigurierte DAQ-Assi in dem VI?
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!