ReceiveData
Interface
VAR_INPUT
pPrefix : POINTER TO BYTE;
LenPrefix : BYTE;
pSuffix : POINTER TO BYTE;
LenSuffix : BYTE;
pReceiveData : POINTER TO BYTE;
SizeReceiveData : DINT;
Timeout : TIME;
Reset :BOOL;
END_VAR
VAR_OUTPUT
DataReceived : BOOL;
busy : BOOL;
Error : ComError_t;
RxTimeout : BOOL;
LenReceiveData : UDINT;
END_VAR
VAR_IN_OUT
RXbuffer : ComBuffer;
END_VAR
Beschreibung
ReceiveData empfängt Daten beliebigen Typs von der mit der Eingangsvariablen RxBuffer korrespondierenden Schnittstelle und speichert sie in der Variablen ReceiveData. Anfang und Ende des Datenstromes werden über verschiedene miteinander kombinierbare Mechanismen erkannt:
- Präfix
- Wird in der Eingangsvariablen Präfix eine Variable übergeben, so müssen die ersten Zeichen der empfangenen Daten mit diesem Präfix übereinstimmen. Andere Zeichen werden verworfen. Wird kein Präfix übergeben (Null), so beginnen die Empfangsdaten mit dem ersten empfangenen Zeichen.
- Suffix
Wird eine Eingangsvariable Suffix übergeben, so werden die Eingangsdaten solange gelesen, bis das Ende der Empfangsdaten mit dem Suffix übereinstimmt. Erreichen die empfangenen Daten dabei die Maximallänge SizeReceiveData, so wird ein Fehler COMERROR_DATASIZEOVERRUN generiert. - Blockgröße
Wird kein Suffix angegeben, so werden bis zu SizeReceiveData Zeichen empfangen. - Timeout
Wird ein Timeout an den Baustein übergeben, so werden solange Zeichen empfangen, bis nach einem Zeichen eine entsprechend große Zeitlücke folgt. Die Empfangsdaten bestehen aus den bis dahin empfangenes Zeichen. Ist Timeout 0, dann werden bis zu SizeReceiveData Zeichen ohne Zeitüberwachung empfangen.
Sobald der Ausgang DataReceived TRUE wird, stehen in der Variablen ReceiveData die empfangenen Daten bereit. Die Anzahl der empfangenen Zeichen wird in LenReceiveData angegeben.
pPrefix
pPrefix ist die Adresse einer beliebigen Datenstruktur, die mit ADR(Variablenname) an den Baustein übergeben wird. LenPrefix gibt die Anzahl der Datenbytes des Präfixes an.
LenPrefix
LenPrefix gibt die Anzahl der Datenbytes des Präfixes an.
pSuffix
pSuffix ist die Adresse einer beliebigen Datenstruktur, die mit ADR(Variablenname) an den Baustein übergeben wird.
LenSuffix
LenSuffix gibt die Anzahl der Datenbytes des Suffixes an.
pReceiveData
pReceiveData ist die Adresse der Empfangsdaten und wird mit ADR(Empfangsdaten) ermittelt. Die empfangenen Daten werden in der Variablen auf die pReceiveData zeigt abgelegt.
SizeReceiveData
SizeReceiveData wird mit SIZEOF(Empfangsdaten) ermittelt und gibt die maximale Größe der Empfangdaten an.
Timeout
Timeout definiert die maximale Zeitlücke zwischen zwei empfangenen Zeichen. Die Timeoutüberwachung wird nach dem ersten Zeichen wirksam. Somit kann mit Timeout nicht überwacht werden, ob ein erwartetes Telegramm eintrifft oder nicht. Diese Überwachung erfolgt extern.
Reset
Durch Setzen des Eingangs Reset wird der Baustein aus dem Empfangszustand in den Grundzustand zurückgesetzt. Das Zurücksetzen ist nur in Ausnahmefällen notwendig, wenn zum Beispiel die erwarteten Daten nicht empfangen werden konnten und der Baustein Busy bleibt.
DataReceived
DataReceived wird TRUE sobald die Empfangsdaten gültig sind. Der Ausgang ist für genau einen Zyklus TRUE, sodass die empfangenen Daten sofort ausgewertet werden müssen.
Busy
Busy wird ab dem ersten empfangenen Zeichen TRUE und wird FALSE sobald die Daten empfangen wurden oder ein Fehler aufgetreten ist.
Error
Error gibt im Fehlerfall einen Fehlercode aus. Der Fehlercode ist durch den Datentype ComError_t definiert und wird dadurch zur Laufzeit in Textform angezeigt.
RxTimeout
RxTimeout wird TRUE wenn die maximale Zeitlücke zwischen zwei empfangenen Zeichen überschritten wird. Der Datenempfang wird dadurch abgebrochen und die bis dahin empfangenes Zeichen liegen bereit. Wenn ohne Suffix gearbeitet wird, so ist die Timeout-Erkennung kein Fehler, sondern kennzeichnet das normale Ende der Empfangsdaten. Wird jedoch ein Suffix verwendet, so konnte dieses nicht empfangen werden.
LenReceiveData
LenReceiveData gibt die tatsächliche Anzahl der empfangenen Datenbytes an und kann kleiner oder gleich SizeReceiveData sein.
RxBuffer
RxBuffer ist der Empfangsdatenpuffer, der mit der verwendeten Schnittstelle korrespondiert.