LabVIEWForum.de
Serial Port Write - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+--- Thema: Serial Port Write (/Thread-Serial-Port-Write)



Serial Port Write - Labview-Beginner - 23.07.2008 12:55

Hallo Leute,

ich bin mal wieder auf der Fehlersuche und habe eine Frage zum "Serial Port Write".

Ich schicke ein paar Befehle an meinen Regler und nachdem alle Parameter übergeben sind lautet der letzte Befehl eben "Programm starten". In Form eines 1D Arrays über "Serial Port Write" an den Regler geschickt.

Jetzt habe ich nur das Problem, dass der Regler manchmal nicht reagiert.

So war meine Vermutung, dass LabVIEW schneller die Befehle an den Port senden will, als der Port mit der Übermittlung der Daten nachkommt.

Laut Beschreibung bin ich auf eine Dauer des Datenaustauschs von 900ms (so viel?!?) gestoßen. Also habe ich in jede Sequenz ein "Wait 1000ms" eingefügt.

Das hat das Problem stellenweise behoben.

Nur manchmal reagieren die Regler immer noch nicht. Dry


Zu meiner Überraschung habe ich dann in andere Programmteile geschaut wie z.B. Abbruch oder Stand By, die keine derartige Wartezeit inne haben und die Ausführung funktioniert tadellos. Huh


Natürlich ist es für euch wieder schwierig mir mit solch einer fragmentartigen Problemstellung zu helfen, aber ich dachte vielleicht ist es etwas gängiges was ich berücksichtigen muss: "Serial Port Write", meine PCI Karte...o.ä.


Cheers.


Serial Port Write - Labview-Beginner - 23.07.2008 14:51

Oke Leute,

also an der dem Serial Port bzw. meiner PCI Karte scheint es nicht zu hängen. Das klappt tadellos.

Vielmehr musste ich feststellen, dass LabVIEW scheinbar ein Element in einer Queue nicht weitergibt. Huh

Bei drücken von "OK Button Rampe" wird ja der "output array" in die Queue geschoben.

Nur leider wird er dann nicht in der obigen While Schleife herausgeholt.

Strange.

Muss ich da auf einen zeitlichen Abgleich achten? Hab doch extra das Metronom in die große Schleife gesetzt.

Cheers.


Serial Port Write - IchSelbst - 23.07.2008 15:09

' schrieb:Vielmehr musste ich feststellen, dass LabVIEW scheinbar ein Element in einer Queue nicht weitergibt.
Wie hast du das denn festgestellt?

Zitat:Nur leider wird er dann nicht in der obigen While Schleife herausgeholt.
Wie hast du das denn festgestellt?

Zitat:Muss ich da auf einen zeitlichen Abgleich achten?
Normalerweise nicht.

Bis du sicher, dass die kleine While-Schleife überhaupt noch läuft? Vielleicht wurde sie durch den Errorcluster(?) des rechten Queue-Elementes beendet?


Serial Port Write - Labview-Beginner - 23.07.2008 19:57

Ich habe mir die Programmausführung im Highlight Execution Modus angesehen.

Und zwar verfolge ich wie die Case Struktur in dem True Fall aufleuchtet und nach und nach die beteiligten Komponenten nicht mehr ausgegraut sind.

Und in der obigen While Schleife erkenne ich dann, dass das Element aus der Queueu herauskommt, dass da eben z.B. eine 6x13 aufleuchtet, sprich eine "6 kreuz 13 Matrix" wurde übergeben.

Nur ist das später nicht mehr der Fall. Da tut sich bei dem "Dequeue" nichts mehr. Dry

Zitat:Bis du sicher, dass die kleine While-Schleife überhaupt noch läuft? Vielleicht wurde sie durch den Errorcluster(?) des rechten Queue-Elementes beendet?

Also sicher bin ich mir als Laie natürlich nicht. Rolleyes

Aber die Errorbedingung kommt doch daher, dass ich die große While Schleife beende, und somit der Datenfluss hinaus kann. Sprich die Queues werden "zerstört" und somit meldet eine der obigen Dequeue Elemente einen Error.
Und diese Bedingung wird ja sonst nicht erbracht.

Gruß


Serial Port Write - IchSelbst - 23.07.2008 21:46

Die kleine While-Schleife bleibt stehen, weil du bei "Queue-Lesen" als Timeout -1 eingegeben hast. Solange also in der einen Queue nichts drinnen steht, wird auch die andere nicht ausgelesen.

Verwende den "Status der Queue"!


Serial Port Write - Labview-Beginner - 24.07.2008 11:48

Oke, danke.

Ich denke das Prinzip habe ich auch verstanden. Wenn in der anderen Queue gar kein Element ist, dann kommt es auch erst gar nicht zum "Dequeue Elment" und somit kann der Vorgang auch nicht hängen.


Jetzt nur rein interessehalber: Warum funktioniert es genau beim ersten Mal? Und danach manchmal....manchmal aber auch nicht?

Hängt das daran, dass man bei LabVIEW eben nicht sagen kann, welcher Vorgang in so einer Schleife zuerst abgearbeitet wird?

Cheers.


Serial Port Write - IchSelbst - 24.07.2008 14:56

' schrieb:Hängt das daran, dass man bei LabVIEW eben nicht sagen kann, welcher Vorgang in so einer Schleife zuerst abgearbeitet wird?
Im Prinzip liegt es daran - und auch wieder nicht.

Du musst dir folgendes vorstellen:
Alles, was in der While-Schleife steht, wird nacheinander ausgeführt, auch wenn keine explizite Sequenzierung vorhanden ist. Jetzt passiert folgendes: Die While-Schleife geht zuerst in das obere Queue-Lesen und wartet solange, bis hier was gelesen werden kann. Derweil wird das untere Queue-Lesen gar nicht beachtet! Kommt jetzt in das obere Queue-Lesen was rein (Tastendruck Array Senden), wird das Element ausgelesen und weiter bearbeitet. Danach wird in das untere Queue-Lesen verzweigt - und dafür das obere ignoriert! Wenn jetzt das "Array senden" kommt, wird das eben solange nicht bearbeitet, solange nicht zuvor was aus der unteren Queue gelesen wurde. Usw. Die beiden Queue stören sich also gegenseitig.

Eine Lösung ist die, die ich dir als Bild gepostet habe. Eine andere wäre, pro Queue eine While-Schleife, die dann mit dem Error-Cluster beendet wird.