ReceiveData
![ReceiveData 1:](Images/png/9007199340807307__de__Web.png)
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 empfangenen Zeichen. Ist Timeout 0, dann werden bis zu SizeReceiveData Zeichen ohne Zeitüberwachung empfangen. - Suffix und Timeout
Wird sowohl ein Suffix als auch ein Timeout übergeben, so werden die Eingangsdaten solange gelesen bis: - das Ende der Empfangsdaten mit dem Suffix übereinstimmt. (DataReceived=TRUE)
- die empfangenen Daten die Maximallänge SizeReceiveData erreichen. (DataReceived=TRUE, Error=COMERROR_DATASIZEOVERRUN)
- nach einem Zeichen eine entsprechend große Zeitlücke folgt. Die Empfangsdaten bestehen aus den bis dahin empfangenen Zeichen. (DataReceived=TRUE, RxTimeout=TRUE)
Sobald der Ausgang DataReceived TRUE wird, stehen in der Variablen ReceiveData die empfangenen Daten bereit. Die Anzahl der empfangenen Zeichen wird in LenReceiveData angegeben.
Eingänge
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
Name | Typ | Beschreibung |
---|---|---|
pPrefix | POINTER TO BYTE | 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 | BYTE | LenPrefix gibt die Anzahl der Datenbytes des Präfixes an. |
pSuffix | POINTER TO BYTE | pSuffix ist die Adresse einer beliebigen Datenstruktur, die mit ADR(Variablenname) an den Baustein übergeben wird. |
LenSuffix | BYTE | LenSuffix gibt die Anzahl der Datenbytes des Suffixes an. |
pReceiveData | POINTER TO BYTE | 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 | UDINT | SizeReceiveData wird mit SIZEOF(Empfangsdaten) ermittelt und gibt die maximale Größe der Empfangsdaten an. |
Timeout | TIME | 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
| BOOL | 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. |
Ein-/Ausgänge
VAR_IN_OUT
RXBuffer : ComBuffer;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
RxBuffer | Empfangsdatenpuffer der mit der verwendeten Schnittstelle korrespondiert. |
Ausgänge
VAR_OUTPUT
DataReceived : BOOL;
busy : BOOL;
Error : ComError_t;
RxTimeout : BOOL;
LenReceiveData : UDINT;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
DataReceived
| BOOL | 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 | BOOL | Busy wird ab dem ersten empfangenen Zeichen TRUE und wird FALSE sobald die Daten empfangen wurden oder ein Fehler oder ein Timeout aufgetreten ist. |
Error | Error gibt im Fehlerfall einen Fehlercode aus. | |
RxTimeout
| BOOL | RxTimeout wird TRUE wenn die maximale Zeitlücke zwischen zwei empfangenen Zeichen überschritten wird. Der Datenempfang wird dadurch abgebrochen und die bis dahin empfangenen 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. Der Timeout wird nicht als Fehler ausgegeben, sondern allein über diesen Ausgang signalisiert. In einem solchen Fall ist DataReceived dennoch TRUE und LenReceivedData gibt die Anzahl der bis zum Timeout empfangenen Daten an. Um nur gültige und vollständige Empfangsdaten (inkl. Suffix) auszuwerten, sollte eine Abfrage neben DataReceived=TRUE ebenso RxTimeout=FALSE und Error=COMERROR_NOERROR prüfen. |
LenReceiveData | UDINT | LenReceiveData gibt die tatsächliche Anzahl der empfangenen Datenbytes an und kann kleiner oder gleich SizeReceiveData sein. Wenn Prefix oder Suffix verwendet werden, so sind diese ebenfalls in den Empfangsdaten enthalten und LenReceiveData gibt somit die gesamte Anzahl der empfangenen Datenbytes inkl. Prefix und Suffix an. |
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4012 | PC oder CX (ARM, x86, x64) | Tc2_SerialCom |