LabVIEWForum.de
Daten von Seriellen Port in While-Schleife auswerten - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: Instrument IO & VISA (/Forum-Instrument-IO-VISA)
+---- Thema: Daten von Seriellen Port in While-Schleife auswerten (/Thread-Daten-von-Seriellen-Port-in-While-Schleife-auswerten)



Daten von Seriellen Port in While-Schleife auswerten - Bensch - 23.10.2015 14:18

Moin,

ich möchte gerne einen Motorcontroller über LabVIEW und RS232 ansteuern. Bis jetzt gab es auch noch keine Probleme, die ich nicht über Google oder LabVIEW Beispiele selber lösen konnte. Allerdings stehe ich jetzt vor einem mir unverständlichem Problem. Aber kurz zu dem Projekt und wie ich mir den Ablauf geplant habe:

- Port wird geöffnet
- Kommunikation wird überprüft
- Motorcontroller wird initilisiert
- ab in die While-Schleife und den Status abfragen, da von dem ja die möglichen Aktionen abhängen
- dann kann eine Referenzfahrt (Der Motor treibt einen Schlitten auf einer Lineareinheit bis an den Endlagentaster) durchgeführt werden, was sich auch im Motorcontroller-Status niederschlägt, da es ein Bit gibt welches dann auf High gesetzt wird sobald eine Referenzfahrt erfolgreich ausgeführt wurde
- Sobald der MC referenziert wurde kann man in den Positionierbetrieb wechseln (welchen ich in diesem Beispiel noch nicht eingebaut habe)
- Wenn man das Programm beendet wird noch der Port geschloßen und das wars dann

Ich würde mir gerne den aktuellen Motorcontroller-Status anzeigen lassen, was auch alles funktioniert, allerdings nur im High-Light Modus, welchen ich zur Überprüfung immer benutze. Sobald ich im "normalem" Modus das Programm betreibe wird mir nichts angezeigt und ich habe auch den Eindruck dass die Auswertung der Statusabfrage am Anfang der While-Schleife überhaupt nicht arbeitet.

Das komische ist nun mein Statusauswerter: Hier wird die Antwort vom MC aufgedröhselt und die einzelnen Bits ausgewertet. Wie gesagt, mein Eindruck ist, dass der nur im High-Light Modus arbeitet oder ist das ein Anzeige Problem? Was dafür spricht dass die Auswertung gar nicht stattfindet ist: Im normalen Betrieb fährt der MC den Schlitten immer wieder gegen den Endlagentaster (wenn man den Referenzfahrtschalter gedrückt lässt), was jedoch durch die Abfrage des MC-Status verhindert werden sollte da der MC nach einmaliger Referenzfahrt den Status "referenziert" erhält und die Referenzfahrt dann geblockt sein sollte. Was wiederum im High-Light Modus funktioniert.

Bei der Suche im Forum bin ich leider auf nichts gestoßen was mir tatsächlich hilft, deshalb hoffe ich auf diesem Weg auf eine kleine Hilfestellung.

Achja, ich benutze übrigens LabVIEW 2014

Grüße und Danke im Vorraus
Ben


RE: Daten von Seriellen Port in While-Schleife auswerten - GerdW - 23.10.2015 14:24

Hallo Bensch,

Zitat:was auch alles funktioniert, allerdings nur im High-Light Modus
VI öffnen, Fehler sehen:
[attachment=54377]
Wenn TermChar aktiviert ist, dann bitte auch damit arbeiten! Und all die Threads zu Problemen mit der seriellen Schnittstelle lesen: in 99.9% der Fälle wird davon abgeraten, BytesAtPort zu nutzen! (Das gilt sowohl im MainVI als auch in den subVIs.)
(Den Empfangbuffer zu löschen, ist auch selten hilfreich.)

Tipp zum "Statusauswerter":
- die Konstanten am IndexArray sind unnötig
- es wäre hilfreich/schön/sinnvoll, die ganzen boolschen Outputs in einem typdefinierten Cluster zu vereinen und ihnen sinnvolle Namen zu geben…


RE: Daten von Seriellen Port in While-Schleife auswerten - Bensch - 23.10.2015 14:56

Hmm ok,

ich werde da nochmal einiges durcharbeiten müssen. Auch weil ich deine Antwort gerade nur bedingt verstehe. Trotzdem schon einmal danke dafür. Da ich mit dem Abschlußzeichen zwischendurch Probleme hatte und nach langem rumprobieren das in der Form funktioniert hat bin ich dabei geblieben. Und sorry, aber das mit dem High-Light Modus will einfach gerade nicht in meinen Kopf rein. We will see...

Ich werde mich hier noch einmal melden wenn es etwas neues gibt bei der Problematik.
Trotzdem erst einmal schönes Wochenende Smile


RE: Daten von Seriellen Port in While-Schleife auswerten - GerdW - 23.10.2015 17:06

Hallo Bensch,

Zitat:Und sorry, aber das mit dem High-Light Modus will einfach gerade nicht in meinen Kopf rein.
Du hast folgendes programmiert:
- du schreibst einen Befehl in den VISA-Ausgabebuffer
- direkt danach fragst du ab, wieviele Zeichen im VISA-Empfangsbuffer vorhanden sind und liest diese aus

Dummerweise beachtest aber nicht, dass
- das Schreiben in den Ausgabebuffer nicht gleichbedeutend damit ist, das dein externes Gerät diese Zeichen auch "sofort" (innerhalb µs) ausgeliefert bekommt (die Zeit, die nötig ist, kannst du dir über die Baudrate berechnen!)
- dass das Gerät auch noch Zeit zum Beantworten deiner Anfrage benötigt und auch noch Zeit zum Versand der Antwort
- dass der Empfangsbuffer deshalb entweder leer ist oder noch die Antwort auf den vorhergehenden Befehl enthält!

Wenn du dir jetzt dein Programm mit Highlight-Debugging anschaust, läuft alles VIEL langsamer ab: während das Highlight-Debugging noch mit dem Animieren des DATAFLOW beschäftigt ist, kann dein Gerät Daten empfangen, verarbeiten und beantworten! Und du wunderst dich, warum dein Programm in "Echtzeit" nicht funktioniert…

Zitat:Da ich mit dem Abschlußzeichen zwischendurch Probleme hatte
Welcher Art?
Was sagt das Manual deines Gerätes zum TermChar?


RE: Daten von Seriellen Port in While-Schleife auswerten - Bensch - 26.10.2015 11:28

Moin,

ja super danke. Blöder Fehler, aber bin ich irgendwie nicht selbst drauf gekommen. Danke dafür!

Das Problem mit dem Abschlißzeichen war nur, dass in der Dokumentation die ich zum Motorcontroller habe ein anderes als das verwendete Abschlußzeichen stand \n statt \r und ich über Putty herausfinden musste warum er die Befehle von Putty akzeptiert und die von LabVIEW nicht. Außerdem habe ich relativ lange gebraucht um zu checken, dass man wenn man Befehlskonstanten schreiben will, die noch per Rechtsklick auf "\"-Antwort umstellen muss. Naja, mühsam ernährt sich das Eichhörnchen. Dickes Danke nochmal für die Hilfe. War ich scheinbar zu blind in dem Moment da einfach noch eine Wartezeit einzubauen zumal ich das in den Befehlgebern ja schon gemacht hatte bzw. da schonmal drauf gekommen war. ^^

Wie gesagt, Danke und Ciao.