RK512
VAR_INPUT
Send : BOOL; (* SEND command *)
Fetch : BOOL; (* FETCH command *)
DbAdr : POINTER TO BYTE; (* ADR(DB), SEND=source, FETCH=target *)
DbSize : UINT; (* SIZEOF(DB), size in byte for Send or Fetch *)
RemoteDbNr : BYTE; (* SEND=target, FETCH=source *)
NrOfBytes : UINT; (* number of bytes to send or fetch *)
ByteOffset : UINT; (* byte offset in remote DB *)
HighPriority : BOOL; (* 3964R priority *)
SwapWords : BOOL; (* swaps every two bytes in the data stream before/after transmission *)
TREA : TIME; (* Timeout for answer *)
END_VAR
VAR_OUTPUT
Busy : BOOL; (* FB is busy *)
(* send or fetch (active) mode *)
BusySendFetch : BOOL; (* FB is with SendFetchCommand busy *)
SendFetchSuccess : BOOL; (* Send or Fetch successfully finished *)
Error : BOOL; (* RK512 error *)
ErrorId : INT; (* RK512 error id *)
(* receive (passive) mode only *)
BusyReceive : BOOL; (* FB is busy with remote request *)
ReceiveSuccess : BOOL; (* DB has been received from the remote PLC *)
ReceivedDbNr : BYTE; (* Number of the DB that has been received *)
ErrorRx : BOOL; (* RK512 error. For receive mode only *)
ErrorIdRx : INT; (* RK512 error id. For receive mode only *)
Aux : RK512_Auxiliary_t; (* Additional errors for debugging *)
END_VAR
VAR_IN_OUT
TxBuffer : ComBuffer;
RxBuffer : ComBuffer;
END_VAR
Betriebsarten
Der Funktionsbaustein RK512 unterscheidet grundsätzlich zwei Betriebsarten, den passiven Betrieb und den aktiven Betrieb.
In der passiven Betriebsart wartet der Baustein auf Datentelegramme vom Kommunikationspartner und antwortet darauf. Der Kommunikationspartner kann Datenbausteine in die lokale Steuerung senden oder Daten von ihr holen. Damit der Funktionsbaustein RK512 Datenbausteine entgegennehmen oder die angeforderten Daten zurücksenden kann, muss er vorher für die passive Betriebsart mit DBconfig konfiguriert werden.
In der aktiven Betriebsart sendet der Funktionsbaustein RK512 Datenbausteine an den Kommunikationspartner (SEND) oder holt Datenbausteine von ihm ab (FETCH).
Solange der Funktionsbaustein nicht über seine Eingänge Send oder Fetch in den aktiven Betrieb wechselt, wartet er auf Telegramme vom Kommunikationspartner und wechselt gegebenenfalls automatisch in den passiven Betrieb. Beide Betriebsarten können gemischt werden. In diesem Fall versucht der Funktionsbaustein RK512 den Telegrammverkehr zu synchronisieren. Da ein Mischbetrieb zu Verzögerungen im Datenverkehr führen kann, sollte er wenn möglich vermieden werden.
Eine Instanz des Funktionsbausteins RK512 bedient genau eine serielle Schnittstelle. Es können nicht mehrere Instanzen zur selben Zeit den Datenverkehr über dieselbe serielle Schnittstelle abwickeln.
Eingangs- und Ausgangsparameter
Send
Mit einer positiven Flanke am Eingang Send werden Daten aus der Variablen am Eingang DbAdr an den Kommunikationspartner übertragen und dort im Datenbaustein mit der Nummer RemoteDbNr abgelegt. Send und Fetch können nicht gleichzeitig ausgeführt werden.
Fetch
Mit einer positiven Flanke am Eingang Fetch werden Daten aus dem Datenbaustein RemoteDbNr vom Kommunikationspartner angefordert und in der Variablen am Eingang DbAdr gespeichert. Send und Fetch können nicht gleichzeitig ausgeführt werden.
DbAdr
DbAdr ist die Speicheradresse einer SPS-Variablen, die mit der ADR-Funktion ermittelt wird.
z. B.: DbAdr := ADR( PLCvar );
Die SPS-Variable kann beliebigen Typs sein. Beispielsweise ist ein ARRAY OF WORD oder eine Datenstruktur STRUCT geeignet.
Mit einem Send-Kommando werden die Daten aus dieser Variablen an den Kommunikationspartner übertragen, mit einem Fetch-Kommando werden Daten geholt und in der Variablen gespeichert.
DbSize
DbSize ist die Größe der SPS-Variablen an DbAdr in Byte, die mit der SIZEOF-Funktion ermittelt wird.
z. B. DbSize := SIZEOF( PLCvar );
RemoteDbNr
RemoteDbNr enthält die Nummer des Datenbausteins beim Kommunikationspartner zu dem Daten gesendet werden bzw. aus dem Daten geholt werden.
NrOfBytes
NrOfBytes enthält die Anzahl der zu übertragenden Datenbytes. Die Anzahl kann kleiner oder gleich der Variablengröße DbSize sein.
ByteOffset
Der ByteOffset gibt an, ab welchem Datenbyte die Daten im Datenbaustein des Kommunikationspartners gespeichert, bzw. geholt werden.
HighPriority
Die Priorität bezieht sich auf das 3964R-Protokoll. Beide Kommunikationspartner sollten unterschiedliche Priorität haben. In dem Fall, dass beide Partner zur gleichen Zeit senden, kommt es zu einer Kollision. Diese Kollision wird dadurch aufgelöst, dass der Partner mit niedriger Priorität in den Empfangsmodus schaltet und der Partner mit hoher Priorität erneut sendet.
SwapWords
Datenbausteine sind normalerweise Wortweise organisiert. Je nachdem, wie die Datenwörter im Speicher abgelegt werden, ist es notwendig die Datenbytes der übertragenen Wörter zu tauschen. Ist SwapWords TRUE, werden in allen Datentelegrammen die Datenbytes eines Wortes getauscht.
TREA
Jedes Telegramm eines Kommunkationspartners wird mit einem Antworttelegramm quittiert. Diese Quittierung wird mit dem Timeout TREA zeitlich überwacht. TREA liegt z. B. bei 15 Sekunden.
Busy
Busy wird TRUE, sobald der Baustein in den aktiven oder passiven Betrieb wechselt, also seinen Ruhezustand verlässt. Solange Busy TRUE ist, kann er keine neues Kommandos annehmen.
BusySendFetch
BusySendFetch wird TRUE, sobald der Baustein durch eine positive Flanke am Send- oder Fetch-Eingang in den aktiven Betrieb wechselt. Nachdem BusySendFetch FALSE wird, ist die Übertragung abgeschlossen und entweder der Ausgang SendFetchSuccess oder Error ist gesetzt.
SendFetchSuccess
SendFetchSuccess signalisiert, dass eine mit Send oder Fetch eingeleitete Datenübertragung erfolgreich abgeschlossen wurde.
Error
Error wird TRUE, wenn bei einer bei einer durch Send oder Fetch eingeleiteten Datenübertragung ein Fehler auftritt.
BusyReceive
BusyReceive zeigt an, dass sich der Funktionsbaustein RK512 im Empfangsmodus, d. h. in der passiven Betriebsart befindet. Der Baustein wechselt automatisch in die passive Betriebsart, sobald im Ruhezustand (Busy gleich FALSE) ein Telegramm vom Kommunikationspartner empfangen wird. Mit fallender Flanke an BusyReceive wird entweder ReceiveSuccess oder ErrorRx gesetzt.
ReceiveSuccess
Nachdem ein Datenbaustein vom Kommunikationspartner erfolgreich empfangen wurde wird ReceiveSuccess TRUE. Dieses Signal betrifft nur den passiven Betrieb, ReceiveSuccess wird also nicht TRUE, wenn mit Fetch aktiv ein Datenbaustein vom Kommunikationspartner geholt wird.
ReceivedDbNr
Sobald ReceiveSuccess TRUE wird zeigt ReceivedDbNr die Nummer des empfangenen Datenbausteins an.
ErrorRx
Das Signal ErrorRx zeigt an, dass beim Datenempfang in der passiven Betriebsart ein Fehler aufgetreten ist
Aux
Aux ist eine Datenstruktur, die zusätzliche Fehlermeldungen zur Diagnose enthält.
TxBuffer
Der Sendedatenpuffer TxBuffer ist vom Typ COMbuffer. Dieser Puffer wird vom Baustein RK512 verwendet und wird vom Benutzer nicht geändert.
RxBuffer
Der Empfangsdatenpuffer RxBuffer ist vom Typ COMbuffer. Dieser Puffer wird vom Baustein RK512 verwendet und wird vom Benutzer nicht geändert.