18.12.2010, 16:33
(Dieser Beitrag wurde zuletzt bearbeitet: 18.12.2010 16:34 von Herby07.)
Beitrag #1
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
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 ?
Vielen Dank,
Herby
|
|
|
19.12.2010, 02:14
Beitrag #2
|
Kasi
LVF-Stammgast
Beiträge: 342
Registriert seit: Dec 2010
6 - 2009
2005
DE_EN
79194
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
Hallo Herby,
"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)
|
|
|
19.12.2010, 10:28
Beitrag #3
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
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 !!
--------------------------------------------------------------------------
|
|
|
19.12.2010, 12:04
Beitrag #4
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
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 ?
Vielen Dank,
Herby
|
|
|
19.12.2010, 12:28
Beitrag #5
|
Y-P
☻ᴥᴥᴥ☻ᴥᴥᴥ☻
Beiträge: 12.612
Registriert seit: Feb 2006
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 !!
--------------------------------------------------------------------------
|
|
|
19.12.2010, 12:37
Beitrag #6
|
Kasi
LVF-Stammgast
Beiträge: 342
Registriert seit: Dec 2010
6 - 2009
2005
DE_EN
79194
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
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)
|
|
|
19.12.2010, 12:39
Beitrag #7
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
Hallo Markus,
vielen Dank !
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 ?
Herby
|
|
|
19.12.2010, 12:48
Beitrag #8
|
Herby07
LVF-Gelegenheitsschreiber
Beiträge: 54
Registriert seit: Mar 2010
2011
2010
kA
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
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 ?
Herby
|
|
|
19.12.2010, 13:03
Beitrag #9
|
Kasi
LVF-Stammgast
Beiträge: 342
Registriert seit: Dec 2010
6 - 2009
2005
DE_EN
79194
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
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)
|
|
|
19.12.2010, 13:10
|
jg
CLA & CLED
Beiträge: 15.864
Registriert seit: Jun 2005
20xx / 8.x
1999
EN
Franken...
Deutschland
|
Erste Schritte mit der ser. Schnittstelle
Visa-öffnen wird bei Bedarf "intern" erledigt, deshalb klappt das auch mit "nur" Seriell-Konfigurieren.
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!
Einführende Links zu LabVIEW, s. GerdWs Signatur.
|
|
|
| |