RK512
![RK512 1:](Images/png/9007199340855307__de__Web.png)
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.
Eingänge
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
Name | Typ | Beschreibung |
---|---|---|
Send | BOOL | 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 | BOOL | 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 | POINTER TO BYTE | DbAdr ist die Speicheradresse einer SPS-Variablen, die mit der ADR-Funktion ermittelt wird. z. B.: 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 | UINT | DbSize ist die Größe der SPS-Variablen an DbAdr in Byte, die mit der SIZEOF()-Funktion ermittelt wird. z. B.: |
RemoteDbNr | BYTE | RemoteDbNr enthält die Nummer des Datenbausteins beim Kommunikationspartner zu dem Daten gesendet werden bzw. aus dem Daten geholt werden. |
NrOfBytes | UINT | NrOfBytes enthält die Anzahl der zu übertragenden Datenbytes. Die Anzahl kann kleiner oder gleich der Variablengröße DbSize sein. |
ByteOffset | UINT | Der ByteOffset gibt an, ab welchem Datenbyte die Daten im Datenbaustein des Kommunikationspartners gespeichert, bzw. geholt werden. |
HighPriority | BOOL | 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 | BOOL | 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 | TIME | Jedes Telegramm eines Kommunikationspartners wird mit einem Antworttelegramm quittiert. Diese Quittierung wird mit dem Timeout TREA zeitlich überwacht. TREA liegt z. B. bei 15 Sekunden. |
Ein-/Ausgänge
VAR_IN_OUT
TxBuffer : ComBuffer;
RxBuffer : ComBuffer;
END_VAR
Name | Typ | Beschreibung |
---|---|---|
TxBuffer | Der Sendedatenpuffer | |
RxBuffer | Der Empfangsdatenpuffer |
Ausgänge
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 : RK512_Error_t; (* 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 : RK512_Error_t; (* RK512 error id. For receive mode only *)
Aux : RK512_Auxiliary_t; (* Additional errors for debugging *)
END_VAR
Name | Typ | Beschreibung |
---|---|---|
Busy | BOOL | Busy wird TRUE, sobald der Baustein in den aktiven oder passiven Betrieb wechselt, also seinen Ruhezustand verlässt. Solange Busy TRUE ist, kann er kein neues Kommandos annehmen. |
BusySendFetch | BOOL | 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 | BOOL | SendFetchSuccess signalisiert, dass eine mit Send oder Fetch eingeleitete Datenübertragung erfolgreich abgeschlossen wurde. |
Error | BOOL | Error wird TRUE, wenn bei einer bei einer durch Send oder Fetch eingeleiteten Datenübertragung ein Fehler auftritt. |
ErrorId | RK512_Error_t | ErrorId zeigt im Fehlerfall eine Fehlernummer an. |
BusyReceive | BOOL | 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 | BOOL | 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 | BYTE | Sobald ReceiveSuccess TRUE wird zeigt ReceivedDbNr die Nummer des empfangenen Datenbausteins an. |
ErrorRx | BOOL | Das Signal ErrorRx zeigt an, dass beim Datenempfang in der passiven Betriebsart ein Fehler aufgetreten ist. |
ErrorIdRx | RK512_Error_t | ErrorIdRx zeigt im Fehlerfall in der passiven Betriebsart die Fehlernummer an. |
Aux | RK512_Auxiliary_t | Aux ist eine Datenstruktur, die zusätzliche Fehlermeldungen zur Diagnose enthält. |
DBconfig() - Methode zur Datenbausteinkonfiguration
Der Funktionsbaustein RK512 arbeitet in zwei Betriebsarten. In der passiven Betriebsart empfängt er Daten und Anforderungstelegramme von einem Kommunikationspartner, der Datenbausteine über ihre Datenbausteinnummer adressiert. Nummerierte Datenbausteine sind in der IEC-1131 und damit auch in TwinCAT zunächst unbekannt. Datenbausteine sind in TwinCAT Variablen verschiedenen Typs, z. B. Arrays oder Datenstrukturen (STRUCT).
Zur Definition eines nummerierten Datenbausteins wird in einer Initialisierungsphase die Methode DBconfig des Funktionsbausteins RK512 mit allen notwendigen Parametern aufgerufen. Der Aufruf der Methode wird einmalig für jeden Datenbaustein durchgeführt, der vom Kommunikationspartner adressiert werden soll. Für die aktive Betriebsart (Send und Fetch) ist diese Konfiguration nicht notwendig.
In der aktiven Betriebsart können unabhängig von dieser Datenbausteinkonfiguration Variableninhalte zum Kommunikationspartner gesendet bzw. von diesem geholt werden. Die Datenbausteinnummer bezieht sich in der aktiven Betriebsart auf die Gegenstelle und muss nur dort bekannt sein.
Parameter
Name | Beschreibung |
---|---|
DbAdr | DbAdr ist die Speicheradresse einer SPS-Variablen, die als Datenbaustein definiert werden soll. Die Adresse wird mit der ADR-Funktion ermittelt. |
DbSize | DbSize ist die Größe der SPS-Variablen an DbAdr in Byte, die mit der SIZEOF-Funktion ermittelt wird. |
RemoteDbNr | RemoteDbNr enthält die Nummer des Datenbausteins beim Kommunikationspartner. |
TxBuffer | Der Sendedatenpuffer TxBuffer ist vom Typ COMbuffer. Dieser Parameter wird für die Konfiguration nicht benötigt, muss aber als IN_OUT-Parameter übergeben werden. |
RxBuffer | Der Empfangsdatenpuffer RxBuffer ist vom Typ COMbuffer. Dieser Parameter wird für die Konfiguration nicht benötigt, muss aber als IN_OUT-Parameter übergeben werden. |
Beispiel
VAR
(* declare some DB
(* the type of data doesn't matter but the
(* size shouldn't be larger than 128 bytes *)
DB1 : ARRAY[1..64] OF WORD; (* exemplary type of db *)
DB5 : ARRAY[1..64] OF WORD; (* exemplary type of db *)
DB10 : ARRAY[1..64] OF WORD; (* exemplary type of db *)
(* input and output data for the RK512 function block *)
RK512com : RK512;
initialized : BOOL;
END_VAR
IF NOT initialized THEN
RK512com.DBconfig( RemoteDbNr:=5, DbAdr:=ADR(DB5), DbSize:=SIZEOF(DB5), TxBuffer:=TxBuffer, RxBuffer:=RxBuffer );
RK512com.DBconfig( RemoteDbNr:=10, DbAdr:=ADR(DB10), DbSize:=SIZEOF(DB10), TxBuffer:=TxBuffer, RxBuffer:=RxBuffer );
initialized := TRUE;
END_IF
Durch die Initialisierung im Beispiel wird erreicht, dass der Kommunikationspartner die Datenbausteine 5 und 10 beschreiben und lesen darf. Jeder Zugriff auf einen anderen Datenbaustein wird mit einem Fehler abgewiesen.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4012 | PC oder CX (ARM, x86, x64) | Tc2_SerialCom |