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!
18.12.2010, 16:33 (Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2010 16:34 von Herby07.)
Hallo zusammen,
nach längerer Pause beschäftige ich mich nun wieder erstmalig mit der ser. Kommunikation über einen COM-Port.
Bei den ersten Schritten komm ich schon nicht weiter:
Welche VISA-Funktion nehme ich zum Öffnen/Konfigurieren des seriellen Ports ?
Es gibt ja einmal ´VISA öffnen´ und einmal ´VISA: Seriellen Port konfigurieren`.
Ist beim letzteren schon das Öffnen mit enthalten oder muß hierbei auch der Port noch geöffnet werden ?
Ich habe Beispiele gesehen, in denen nur ´VISA: seriellen Port konfigurieren" benutzt wird, aber auch Beispiel, in denen auch noch zusätzlich ´VISA öffnen´benutzt wird.
Kann mir da jemand weiter helfen ?
"Visa: seriellen Port konfigurieren" ist das VI, welches du benötigst. Oder du hängst einfach direkt nen Eigenschaftsknoten an die Visa-Leitung und suchst dir dort alles Notwendige selbst zusammen. Das Öffnen der Visa-Session wird mit dem Aufruf des VIs oder des Knotens implizit direkt mitgemacht. Das explizite Öffnen und Schließen der Visa-Ressource mittels VIs ist nur in Spezialfällen nötig. Meiner Meinung nach jedenfalls
Grüße,
Kasi
If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Erste Schritte mit der ser. Schnittstelle
Ich mache grundsätzlich immer "Konfigurieren", dann "Öffnen", dann "Schreiben", dann "Lesen" (nach einer kurzen Wartezeit), dann "Schließen", wobei Konfigurieren, Öffnen und Schließen außerhalb einer evtl. vorhandenen Schleife liegen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
Hallo Kasi, hallo Markus,
vielen Dank für die Antworten.
Leider weiß ich jetzt nicht, wie es grundsätzlich abläuft: beides scheint richtig zu sein und auch zu funktionieren: im NI-Beispiel "Basic Serial Write and Read.vi" wird nur konfiguiert und nicht noch zusätzlich geöffnet.
In anderen Beispielen wird beides gemacht.
Ich werde es also einmal so oder so versuchen.
Dann habe ich noch eine weitere Frage: im gerade genannten NI-Beispiel werden die Schnittstellen-Daten mit der VISA-Lesen-Funktion eingelesen. Die Bedienung dieser Funktion ist mir klar, aber in dem Beispiel befindet sich im Empfangsteil ein für mich noch "geheimnisvoller Kasten" mit der Bezeichnung: "Instr / Bytes at Port".
Wozu benötige ich den denn ?
Developer Suite Core -> LabVIEW 2015 Prof.
2006
EN
71083
Deutschland
Erste Schritte mit der ser. Schnittstelle
Hallo,
da werden immer genau so viele Bytes an Daten ausgelesen, die im Moment auch zur Verfügung stehen. Sind im Puffer also z.B. 10 Byte Daten, dann kommt aus Bytes at Port die Zahl 10. Schließt man das an Byte Count (am VISA Read) an, dann werden genau 10 Bytes ausgelesen.
Gruß Markus
-------------------------------------------------------------------------- Bitte stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort !!
--------------------------------------------------------------------------
mir hat diese Angabe am Anfang auch Kopfzerbrechen gemacht, speziell wenn ich nicht wusste, wieviele Bytes ich erwarte. Die meisten seriellen Geräte beenden ihre Kommunikation über ein Abschlußzeichen wie Carriage Return oder Line Feed. Sollte das bei deinem Gerät auch der Fall sein, so kannst du diesen sog. "Terminator" beim konfigurieren angeben (als ascii-code) und aktivieren. Danach gibst du dem Lesen-VI als Byte-Zahl mehr, als du maximal erwartest. Die Lese-Routine bricht dann automatisch erfolgreich ab, wenn vor erreichen des Byte-Limits der Terminator gelesen wird. Damit fällt auch der Eigenschaftsknoten "Bytes at Port" komplett weg, der dir im ungünstigsten Fall zu wenige Bytes liefert, weil das Gerät noch nicht seine komplette Antwort gesendet hat.
If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)
D.h. also: wenn ich bei "VISA Lesen" unter "Byte-Anzahl" z.B. fest 25 (Byte) eintrage, dann wartet diese Funktion auch wirklich so lange, bis die 25 Bytes empfangen wurden und schreibt sie erst dann komplett in den Lesepuffer.
Durch die "Trick-Konstruktion" im Beispiel erreiche ich dann, daß jedes empfangene Byte sofort in den Lesepuffer geschrieben und von dort aus weiter verarbeitet werden kann.
Ist das so richtig ?
Hallo Kasi,
mit einem Terminator kann ich leider nicht arbeiten, denn ich möchte Roh-Messwerte, immer zwei Byte (16 Bit Meßwert) übertragen.
Wenn dann zufälliger Weise in den Messwerten der Terminater-Code auftaucht, bricht ja das Einlesen zu früh ab.
Das Messwert-Telegramm ist z.B. immer 20 Byte lang (10 Messwerte).
Dann trag ich also den Wert ´20´ bei Byte-Anzahl im VISA: Lesen ein ?
exakt. und für 20 bytes ist der default-timeout von....10(?) sekunden mehr als ausreichend.
...
ich bin mir gerade nicht sicher, aber ich glaube, wenn die antwort exakt genauso lang ist, wie die angeforderten bytes, kommt dann eine sehr verwirrende warnung aus dem fehlerausgang, dass die antwort genauso lang ist wie angefordert, was bedeuten KÖNNTE, dass noch mehr Bytes verfügbar sind. Was natürlich nicht stimmt. Nur so zu Info, FALLS du dir den Fehlercluster ansiehst und FALLS du diese Warnung siehst... das ist normal und kein Fehlverhalten.
If you're havin' serial communication problems I feel bad for you, son, I got 99 problems but a baud ain't one! (except if using USB2serial converters, then I experience serialous problems)