Version 3
RECEIVE BUFFER (Puffername)
Parameter | Typ | Beschreibung | |
Puffername | Variable | Variable zum Empfangen von Daten |
Beschreibung
Der Befehl RECEIVE BUFFER liest die zuvor mit SET CHANNEL geöffnete serielle Schnittstelle. Sie hat einen Puffer, der mit Zeichen gefüllt wird bis ein Befehl den Puffer ausliest. RECEIVE BUFFER liest nur die bereits empfangenen Daten aus dem Puffer der seriellen Schnittstelle, setzt sie in die Variable Puffername und leert anschließend den seriellen Puffer. Gibt es keine Zeichen im Puffer, enthält Puffername nichts.
Hinweis: Dieser Befehl wurde in Version 2 im Zusammenhang mit ON SERIAL PORT CALL verwendet. Stattdessen sollten Sie mit RECEIVE PACKET die Daten in einem eigenen Prozess empfangen und auswerten.
Unter Windows:
Die Größe des seriellen Puffers unter Windows ist begrenzt. Wenn er voll ist und weiter neue Daten eingehen, ersetzen die neuen Zeichen die ältesten. Diese gehen verloren. Deshalb muss der Puffer schnell ausgelesen werden, wenn weiter neue Zeichen eingehen.
Auf Macintosh
Der serielle Puffer auf Macintosh ist 64 Zeichen groß. Ist diese Grenze erreicht und gehen weiter neue Daten ein, ersetzen die neuen Zeichen die ältesten. Diese gehen verloren. Deshalb muss der Puffer schnell ausgelesen werden, wenn weiter neue Zeichen eingehen.
Hinweis: Für MacOS gibt es 4D Plug-Ins, mit denen Sie die seriellen Puffer vergrößern können.
Wird bei SET CHANNEL das DTR- oder XON/XOFF-Protokoll angegeben, können keine Zeichen verloren gehen. Die Übertragung wird angehalten, bis wieder Platz im Puffer ist.
RECEIVE BUFFER nimmt alles, was im Puffer enthalten ist und gibt es sofort zurück. Im Gegensatz dazu wartet RECEIVE PACKET, bis ein bestimmtes Zeichen gefunden wird, oder eine vorgegebene Anzahl Zeichen im Puffer enthalten ist.
Eine serielle Datenübertragung können Sie unterbrechen:
Manuell durch gleichzeitiges Drücken der Strg-, Alt- und Umschalttaste bzw. auf Macintosh der Wahl-, Befehls- und Umschalttaste.
Automatisch mit dem Befehl SET TIMEOUT, der bei einer Zeitüberschreitung abbricht.
Die Unterbrechung generiert den Fehler -9994. Sie können ihn mit einer Methode ON ERR CALL abfangen.
Beispiel
Die Projektmethode LISTEN TO SERIAL PORT erhält über RECEIVE BUFFER Text aus der seriellen Schnittstelle und sammelt diesen in einer Interprozessvariablen:
` LISTEN TO SERIAL PORT While (<>IP_Listen_Serial_Port) RECEIVE BUFFER($vtBuffer) If ((Length($vtBuffer)+Length(<>vtBuffer))>MAXTEXTLEN) <>vtBuffer:="" End if <>vtBuffer:=<>vtBuffer+$Buffer End while
Diese Methode kann für einen lokalen Prozess als Prozessmethode ausgeführt werden:
` Starte Abfrage für serielle Schnittstelle SET CHANNEL (201; Speed 9600 + Data Bits 8 + Stop Bits One + Parity None) ` Öffne serielle Schnittstelle <>IP_Listen_Serial_Port:=True $vlSerialPID:=New process("LISTEN TO SERIAL PORT";16*1024;"$Serial Port Listener")
Ab hier kann jeder andere Prozess die Interprozessvariable <>vtBuffer lesen, um mit den Daten aus der seriellen Schnittstelle zu arbeiten.
Um die Abfrage für die serielle Schnittstelle zu beenden, schreiben Sie:
` Stoppe listening für serielle Schnittstelle
<>IP_Listen_Serial_Port:=False
Hinweis: Sie sollten die Interprozessvariable <>vtBuffer mit einer lokalen Semaphore schützen, um Konflikte mit anderen Prozessen zu vermeiden. Weitere Informationen dazu finden Sie unter der Funktion Semaphore.
Referenz
ON ERR CALL, RECEIVE PACKET, Semaphore, SET CHANNEL, Variablen.