# RK512

Das RK512-Protokoll dient zum Zugriff auf interne Speicherbereiche einer Siemens-SPS der Reihe S5.
Im OSI-Modell ist RK512 auf Schicht 4, der Transportschicht anzusiedeln (da einzelne Bereiche des Zielsystems adressiert werden). Unter RK512 läuft zumeist das 3964R-Protokoll (auf Schicht 2). Die Vermittlungsschicht (Layer 3) entfällt dabei, da es sich um eine Punkt-zu-Punkt-Kommunikation handelt und somit kein Zielsystem adressiert werden muss.

## Protokollablauf

Eine RK512-Transaktion besteht aus einem Befehlstelegramm und einem Reaktionstelegramm. Der Initiator der Transaktion steuert dabei die Datenübertragung zum oder vom Partnersystem. Dabei wird zwischen zwei Auftragsarten unterschieden: SEND (Datenübertragung zum Partnersystem) und FETCH (Anfrage an Partner und Datenübertragung zum Initiator).

## Telegrammaufbau

Ein SEND-Befehl und eine FETCH-Reaktion bestehen aus einem Telegrammkopf und folgenden Daten, während SEND-Reaktionen und FETCH-Befehle nur einen Telegrammkopf (ohne Daten) besitzen. Dabei unterscheidet sich der Telegrammkopf zwischen Befehl und Reaktion.

### Befehls-Telegrammkopf

Der Telegrammkopf eines Befehlstelegramms besteht aus 10 Bytes:
| Byte | Bedeutung |
| 1–2 | Telegrammkennung |
| 3 | Auftragsart |
| 4 | Datenbereich |
| 5–6 | Datenziel bzw. -quelle |
| 7–8 | Länge der Daten |
| 9 | Koordinierungsmerker |
| 10 | Koordinierungsmerkerbit (Bit 0–3) und CPU-Nummer (Bits 4–7) |
| (11-?) | (Daten beim SEND-Auftrag) |
Dabei bedeuten:
* Telegrammkennung
** 0x00 0x00: Starttelegramm
** 0xFF 0x00: (hex) Folgetelegramm, wenn mehr als 128 Bytes Daten übertragen werden
* Auftragsart
** 'A': SEND-Auftrag in Datenbaustein als Ziel
** 'O': SEND-Auftrag in erweiterten Datenbaustein als Ziel
** 'E': FETCH-Auftrag
* Datenbereich
** 'D': Datenbaustein
** 'X': erweiterter Datenbaustein
** 'E': Eingangsbytes
** 'A': Ausgangsbytes
** 'M': Merkerbytes
** 'P': Peripheriebytes
** 'Z': Zähler
** 'T': Timer
** 'S': Absolute Speicheradressen
** 'B': (Betriebs-)Systemadressen
* Datenziel/-quelle
** Bausteinnummer (Byte 5) und Offset (Byte 6)
** Byte-, Zähler- oder Timernummer
** Speicheradresse (in Big-Endian-Byte-Reihenfolge)
* Datenlänge
** Anzahl zu übertragender Bytes (Eingänge, Ausgänge, Merker, Peripherie) oder Worte
** in Big-Endian-Byte-Reihenfolge
* Koordinierungsmerker
** zeigt erfolgreiche Abarbeitung des Befehls an
** Angabe als Merkerbyte (Byte 9) und Bit in diesem Byte (Byte 10, Bits 0–3)
** Kein Koordinierungsmerker wird als Merker 255, Bit 15 dargestellt
* CPU-Nummer
** Nummer der CPU, auf die Zugegriffen wird
** Keine Angabe (Alle CPUs) wird dargestellt als 0 (wenn Koordinierungsmerker vorhanden) oder 0xF (ohne Koordinierungsmerker)

### Reaktions-Telegrammkopf

Der Telegrammkopf eines Reaktionstelegramms besteht aus 4 Bytes:
| Byte | Bedeutung |
| 1–2 | Telegrammkennung |
| 3 | Auftragsart |
| 4 | Status |
| (5-?) | (Daten beim FETCH-Auftrag) |
Dabei bedeuten:
* Telegrammkennung (Analog zum Befehl)
** 0x00 0x00: Starttelegramm
** 0xFF 0x00: (hex) Folgetelegramm, wenn mehr als 128 Bytes Daten übertragen werden
* Auftragsart
** 0x00: Antworttelegramm
* Status
** 0x00: Bearbeitung erfolgreich
** > 0x00: Fehlernummer

## Quellen

* SIMATIC S5 CP 544 Handbuch Kapitel 3.6: Protokolldefinition der Rechnerkopplung RK512