RK512

RK512 1:

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.

RK512 2: 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.: 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

UINT

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

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.

RK512 3: Ein-/Ausgänge

VAR_IN_OUT
  TxBuffer         : ComBuffer;
  RxBuffer         : ComBuffer;
END_VAR

Name

Typ

Beschreibung

TxBuffer

ComBuffer

Der Sendedatenpuffer TxBuffer wird vom Baustein RK512 verwendet und wird vom Benutzer nicht geändert.

RxBuffer

ComBuffer

Der Empfangsdatenpuffer RxBuffer wird vom Baustein RK512 verwendet und wird vom Benutzer nicht geändert.

RK512 4: 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.
z. B.: DbAdr := ADR( PLCvar );
Die SPS-Variable kann beliebigen Typs sein. Beispielsweise ist ein ARRAY OF WORD oder eine Datenstruktur STRUCT geeignet.

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.

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