INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Ende der seriellen Übertragung (RS232)



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!

14.12.2006, 19:09
Beitrag #11

IchSelbst Offline
LVF-Guru
*****


Beiträge: 3.697
Registriert seit: Feb 2005

11, 14, 15, 17, 18
-
DE

97437
Deutschland
Ende der seriellen Übertragung (RS232)
' schrieb:Funktioniert es nicht einfach auch so, dass ich über VISA-Write einen Befehl an den Controller schicke, dann von mir aus 100 ms warte, bis der Controller alles verarbeitet hat und dann ein VISA-Read mache? Stehen dann nicht automatisch alle Daten (vorausgesetzt die 100 ms reichen) im VISA-Read-String? Blink
Jawohl, das wird genau so gehen.
Ist die Voraussetzung erfüllt, werden am Ende die erwartete Anzahl von Zeichen automatisch im VISA-Read-String stehen. (Nebenbei: Dafür hab' ich ja eine Programmiersprache/IDE wie LabVIEW, damit nach Möglichkeit alles automatisch geht. Das Problem und gerade bei einer RS232-DÜ ist aber eben, was tun, wenn ein Zeichen auf dem Kabel verloren geht. Die wenigsten arbeiten mit einem selbstsicheren Protokoll. Diese Tatsache - und weil eben eine RS232-DÜ sehr applikationsabhängig ist - widerspricht einer Automatisierung).

Zitat:Durch das Read wird dann doch der Controller-Puffer geleert und bei der nächsten Anfrage schreibt der Controller die nächsten Daten in den Puffer...., oder nicht?
Durch den Read wird nicht der Puffer im SIO-Controller geleert. Der muss geleert werden, sobald die Daten da sind. Vom SIO-Controller-Puffer werden die Daten in einen Zwischenpuffer gelegt. Von dort holt sie dann das VISA-Read ab. Würde man das nicht so machen, träte im folgenden ein Problem auf: Baudrate 115kBd (beachte: ca. 100µs pro Byte, das sind zwei Taskswitches in Win32/W2K), Win32 ist beschäftigt und verweigert der LV-Applikation, in der der VISA-Read-Befehl läuft, die Prozessorzeit für Ring Drei. Wenn dieser Zustand für z.B. 30ms (vergleiche 100µs) andauern würde, würden Daten verloren gehen. Der SIO-Empfang auf Controller-Ebene findet daher im Ring Null statt und ist interruptgesteuert. Dieser Interrupt (und das damit verbundene Controller-Auslesen und sichere Datenspeichern) funktioniert immer, egal was Win32 in Ring Drei treibt (Voraussetzung ist natürlich, dass alle anderen Systemtreiber den Ring Null nicht blockieren. Mir ist das aber noch nicht untergekommen).

Zitat:Oder gibt es dann einen VISA-Timeout, da nach den paar Bytes, die ich gelesen habe kein weiteres folgt?
Im Prinzip ja. Wenn du lesen willst, und es kommt nichts, dann kannst du so einstellen, dass eben ein Timeout eintritt. Was auch richtig und wichtig ist. Das Programm soll ja schließlich nicht hängenbleiben beim Warten auf Zeichen, die gar nicht kommen können, weil jemand auf das Kabel getreten ist und das dann ...

Zitat:Oder ist es so, dass LabVIEW, sobald der Controller-Puffer ausgelesen wurde, den Read-Befehl automatisch beendet?
Erstens: Nicht der Controller-Puffer, der interne Zwischenspeicher.
Zweitens: Der Read-Befehl wird in erster Linie nicht beendet in Abhängigkeit vom Füllungsgrad des Puffers - sondern von deinen Vorgaben. Wenn du sagst, "Lese 10 Zeichen ohne Timeout" wird der Read-Befehl solange warten, bis eben 10 Zeichen da sind - notfalls auch ewig. Wenn du sagt "Lese was da ist", wird er genau das tun. Dann hast du entweder keine Zeichen, eines, sieben oder auch 12345 Stück. Sinnvoll ist aber - weil eben einfach - zu sagen "Lese 10 Stück mit Timeout".

Zitat:Wenn das mit der Wartezeit nicht funktioniert,
Öhm, warum sollte das nicht funktionieren. Das geht eigentlich immer.

Zitat:wie funktioniert das dann mit der Abfrage der Byte-Anzahl? Schaut LabVIEW in dem Puffer des Controllers nach, ob da die gewünschte Byteanzahl vorhanden ist und wenn ja, leert sich der Puffer ganz einfach mit dem Read?
(Nicht des Controllers, des Zwischenspeichers.) Genau: der Puffer leer sich ganz einfach mit dem Read. Natürlich leer er sich nur soweit, wie der Read-Befehl Daten anfordert.

Zitat:Was genau meinst Du mit Parsen?
Ein Zeichen lesen. In Abhängigkeit dieses Zeichens weitere Zeichen lesen. Die Anzahl der weiteren Zeichen kann vom Wert des ersten Zeichens abhängen. Genauso der Typ der weiteren Zeichen (String oder Zahl). Parsen kommt natürlich nur dann in Frage, wenn du nicht genau weist, das du erwartest.

Zitat:Hättest Du mir evtl. auch irgendwo ein VI, wo man das sehen könnte?
Da muss ich erst noch mit mir ringen. Da müsste ich LV6 nach LV8.2 (neues wird nicht mehr in LV6 gemacht) konvertieren. Und von den Problemen mit der Konvertierung hast du ja bestimmt schon gehört (in LV8.2 gibt es z.B. keine Referenzen auf Cursor-Legende mehr). Und die vielen Globalen.

Jeder, der zur wahren Erkenntnis hindurchdringen will, muss den Berg Schwierigkeit alleine erklimmen (Helen Keller).
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
Antwort schreiben 


Nachrichten in diesem Thema
Ende der seriellen Übertragung (RS232) - IchSelbst - 14.12.2006 19:09

Möglicherweise verwandte Themen...
Themen Verfasser Antworten Views Letzter Beitrag
  Übertragung Messwerte Oszilloskop → LabView pv-student 2 6.755 19.02.2018 08:32
Letzter Beitrag: xxokiehxx
  VISA: I/O Fehler beim Auslesen einer seriellen Schnittstelle konne 5 7.616 19.07.2017 13:04
Letzter Beitrag: konne
  Alle seriellen Schnittstellen auslesen Exl 1 5.068 01.04.2017 16:41
Letzter Beitrag: GerdW
  Modul am seriellen Port ansprechen Charly82 2 5.921 22.05.2016 07:34
Letzter Beitrag: Charly82
  Daten von Seriellen Port in While-Schleife auswerten Bensch 4 6.267 26.10.2015 11:28
Letzter Beitrag: Bensch
  Problem bei seriellen Schnittstellen gammel 7 7.369 27.10.2014 13:01
Letzter Beitrag: gammel

Gehe zu: