# Mitsubishi MC

> Mitsubishi MELSEC-Steuerungen über das MC-Protokoll (3E-Rahmen) anbinden - Gerätecodes, dezimale und hexadezimale Nummerierung und Leselängen.

Der Treiber **Mitsubishi MC** spricht mit Mitsubishi MELSEC-Steuerungen über das
MC-Protokoll, mit dem binären 3E-Rahmen über TCP, dem Rahmen, den die Reihen Q, L und iQ
sprechen. Sie adressieren Werte in der vertrauten MELSEC-Schreibweise: ein Gerätecode und
eine Nummer, etwa `D100` oder `M50`. Legen Sie im [Connector](connector) ein Gerät unter
dem Treiber Mitsubishi MC an; der Bereich zeigt nur die Felder, die dieses Protokoll
verwendet.

## Verbindung {#connection}

| Feld | Bedeutung | Standard |
| --- | --- | --- |
| **Hostadresse** | IP-Adresse oder Hostname der Ethernet-Schnittstelle der Steuerung. | leer |
| **Port** | TCP-Port der Verbindung über das MC-Protokoll, 1 bis 65535. Ein leeres Feld zeigt 5007 grau, und das Gerät wird über diesen Port angewählt; ein mit 0 gespeichertes Gerät liest sich genauso. | 5007 |

Die Kopfzeile des Geräts zeigt den zusammengesetzten Endpunkt, zum Beispiel
`mcp://192.168.0.20:5007`. Für diesen Treiber gibt es keine Felder für das
Abfrageintervall: Seine Tags werden einmal je Sekunde gelesen. Auf der Seite der Steuerung
braucht es eine Verbindung über das MC-Protokoll (SLMP), TCP und binär, auf dem gewählten Port:
[Die Steuerung vorbereiten](#prepare-the-plc) sagt, wo sie angelegt wird.

## Die Steuerung vorbereiten {#prepare-the-plc}

Eine MELSEC-CPU bietet das MC-Protokoll nur auf einer Verbindung an, die ihr Projekt anlegt, und
lehnt ein Schreiben im RUN ab, solange ihr Ethernet-Port es nicht erlaubt. Die Einstellungen werden
im Engineering-Werkzeug vorgenommen und mit den Parametern in die CPU geschrieben (**Online > Write
to PLC**); die CPU liest sie beim Start, setzen Sie sie danach also zurück oder schalten Sie sie aus
und wieder ein.

| Einstellung | GX Works3 (iQ-R, iQ-F) | GX Works2 (Q, L) | Ohne sie |
| --- | --- | --- | --- |
| Eine MC-Verbindung, TCP, auf dem **Port** des Geräts | **Module Parameter > Ethernet Port > Basic Settings > External Device Configuration**: Ziehen Sie ein **SLMP Connection Module** in die Tabelle, mit Protocol TCP und dem Port des Geräts als **Port No.** | **PLC Parameter > Built-in Ethernet Port Setting > Open Setting**: eine Zeile mit Protocol TCP, **Open System** MC Protocol und dem Port des Geräts als **Host Station Port No.** | Die CPU lehnt die Verbindung auf diesem Port ab, und das Gerät bleibt offline. |
| **Communication Data Code** auf binär | **Module Parameter > Ethernet Port > Basic Settings**: **Binary**. | **PLC Parameter > Built-in Ethernet Port Setting**: **Binary Code**. | Die CPU antwortet in ASCII-Zeichen oder gar nicht, und kein Tag liest. |
| Schreiben im RUN erlaubt | iQ-R: **Module Parameter > Ethernet Port > Basic Settings**, **Enable/Disable Online Change** auf **Enable All (SLMP)**. | **PLC Parameter > Built-in Ethernet Port Setting**, **Enable online change (FTP, MC Protocol)** angehakt. | Die CPU liest normal und lehnt jedes Schreiben ab, solange sie im RUN ist, mit dem Endcode 0x0055. |

Eine CPU der Reihe Q oder L behält die Ports 5000 bis 5009 sich selbst vor, ihre MC-Verbindung kann
also nicht 5007 nehmen, den Standard des Geräts: Geben Sie ihr einen anderen Port, zum Beispiel
5010, und tragen Sie diesen im **Port** des Geräts ein. GX Works2 zeigt **Host Station Port No.**
unter Umständen hexadezimal, dort ist 5010 gleich 1392. Der Datencode gilt für den ganzen
Ethernet-Port: Ein anderes Programm, das auf diesem Port in ASCII mit der CPU spricht, muss ebenfalls
auf binär umgestellt werden.

Lehnt die CPU den Port ab, antwortet sie in ASCII oder lehnt sie ein Schreiben im RUN ab, sagt die
Seite des Geräts, welche Einstellung es ist, mit diesen Schritten und dem Port, den das Gerät wählt,
in einem Hinweis, der von selbst verschwindet, sobald die CPU annimmt. Für ein im RUN abgelehntes
Schreiben nennt er die Tags, deren Schreiben abgelehnt wurde. Das Journal und der Agent lesen
dieselben Schritte.

## Adressierung {#addressing}

Ein Mitsubishi-Tag wird über zwei Felder auf der Karte Quelle des Tags adressiert:

| Feld | Bedeutung | Angenommene Werte | Standard |
| --- | --- | --- | --- |
| **Geräteadresse** | MELSEC-Gerätecode und Nummer, z. B. `D100`. Pflichtfeld. | Freitext | leer |
| **Leselänge (Bytes, leer = automatisch)** | Wie viele Bytes je Lesevorgang übertragen werden. Leer bemisst den Lesevorgang nach dem Datentyp. | 1 und aufwärts, leer | leer |

Die Adresse achtet nicht auf Groß- und Kleinschreibung, und der längste passende Code
gewinnt, `SD100` ist also das Sonderregister 100 und nicht der Schrittmerker `S`. Die
Nummer ist **hexadezimal** bei den Geräten, die Mitsubishi hexadezimal nummeriert, also X,
Y, B, W, SB, SW, DX, DY, und dezimal bei allem anderen (`X1F` ist der Eingang 0x1F).
Angenommene Gerätecodes:

| Code | Gerät | Nummerierung |
| --- | --- | --- |
| `M` | Merker | dezimal |
| `SM` | Sondermerker | dezimal |
| `L` | Latch-Merker | dezimal |
| `F` | Störmelder | dezimal |
| `V` | Flankenmerker | dezimal |
| `S` | Schrittmerker | dezimal |
| `X` | Eingang | hexadezimal |
| `Y` | Ausgang | hexadezimal |
| `B` | Link-Merker | hexadezimal |
| `SB` | Sonder-Link-Merker | hexadezimal |
| `DX` | Direkteingang | hexadezimal |
| `DY` | Direktausgang | hexadezimal |
| `D` | Datenregister | dezimal |
| `SD` | Sonderregister | dezimal |
| `R` | Datei-Register | dezimal |
| `ZR` | erweitertes Datei-Register | dezimal |
| `W` | Link-Register | hexadezimal |
| `SW` | Sonder-Link-Register | hexadezimal |
| `Z` | Index-Register | dezimal |
| `TC` / `TS` / `TN` | Timer: Spule / Kontakt / aktueller Wert | dezimal |
| `SC` / `SS` / `SN` | remanenter Timer: Spule / Kontakt / aktueller Wert | dezimal |
| `CC` / `CS` / `CN` | Zähler: Spule / Kontakt / aktueller Wert | dezimal |

Die zugrunde liegende MC-Bibliothek nimmt außerdem die Codes `TT`, `TM`, `CT`, `CM` und
`A` an. Die Zeile **Quelladresse (Bus)** auf der Karte Quelle, die nur gelesen wird, zeigt
die zusammengesetzte Adresse, während Sie tippen.

## Datentypen {#data-types}

Die Auswahl **Datentyp** bietet die vier Typen an, die der Treiber überträgt:

| Datentyp | Automatische Leselänge | Hinweise |
| --- | --- | --- |
| Boolean | 1 Byte | an einem Bit-Gerät das eine genannte Relais; an einem Wort-Gerät jedes Wort ungleich null |
| Int32 | 4 Bytes | zwei aufeinanderfolgende 16-Bit-Wörter, z. B. `D100`+`D101` |
| Float | 4 Bytes | zwei aufeinanderfolgende Wörter mit einem IEEE-Wert einfacher Genauigkeit |
| String | 16 Bytes | Text bis zum ersten NUL des Lesepuffers |

Wortdaten kommen in der für MELSEC nativen Little-Endian-Reihenfolge an und werden
automatisch entschlüsselt; eine Wahl der Byte-Reihenfolge gibt es nicht. Ein 32-Bit-Wert
erstreckt sich über zwei aufeinanderfolgende Wort-Geräte. Für einen String, der länger als
16 Zeichen ist, erhöhen Sie **Leselänge**, bis sie den gespeicherten Text abdeckt.
**Leselänge** ist eine Anzahl Bytes, und das Protokoll überträgt ganze 16-Bit-Wörter, eine
ungerade Länge wird also auf das Wort aufgerundet, das ihr letztes Byte trägt.

Die Bit-Geräte, die der Treiber Relais für Relais liest, sind `X`, `Y`, `M`, `L`, `F`,
`V`, `B`, `S`, `TS`, `TC`, `SS`, `SC`, `CS`, `CC`, `SB`, `DX` und `DY`. Dort antwortet ein
Tag vom Typ Boolean für die Adresse, die Sie getippt haben, und für keine andere. Jeder
andere Code ist ein Wort-Gerät, auch der aktuelle Wert eines Timers oder eines Zählers
(`TN`, `SN`, `CN`) und die Link-Register (`W`, `SW`), und dort entscheidet das ganze Wort:
`D100` mit dem Inhalt `0x0100` liest wahr.

Ein Lesevorgang, den die Steuerung ablehnt, etwa eine Adresse hinter dem Ende ihres
Bereichs, lässt dieses Tag ohne Wert, und sein Fehler nennt den Endcode und was er laut
Handbuch bedeutet, zum Beispiel
`end code 0xC056 (the request goes past the last address of the device)`. Alle anderen
Tags des Geräts lesen weiter.

## Schreiben {#writes}

Tags, deren **Zugriff** Lesen und schreiben oder Nur schreiben ist, lassen sich schreiben, und
zwar auf dieselbe Geräteadresse, die der Lesevorgang verwendet. Ein Schreibvorgang auf
Boolean an einem Bit-Gerät setzt oder löscht das eine genannte Relais und rührt keinen
seiner Nachbarn an. Alles andere wird als ganze 16-Bit-Wörter geschrieben: zwei Wörter bei
Int32 und Float, ein Wort bei einem Boolean an einem Wort-Gerät und bei String die ganze
**Leselänge** des Tags, vorn die UTF-8-Bytes des Textes und dahinter Nullen, aufgerundet
auf das letzte Wort. Ein kürzerer Text über einem längeren ersetzt daher den ganzen Wert,
und vom alten überlebt nichts. Ein Text, der nicht in die erklärte Länge passt, wird
abgelehnt, mit der Länge benannt im Journal, und nie auf Maß gekürzt. Ein neues Tag beginnt
als Nur lesen.

Ein Schreibvorgang, den die Steuerung ablehnt, kommt abgelehnt zurück und nennt den
Endcode und seine Bedeutung auf dieselbe Weise. Ein Schreiben, das abgelehnt wird, weil die CPU
im RUN ist (Endcode 0x0055), sagt auch die Seite des Geräts, mit der Einstellung, die es erlaubt
(siehe [Die Steuerung vorbereiten](#prepare-the-plc)).

## Gerätesuche {#discovery}

Das MC-Protokoll kennt in diesem Treiber keine Suche über Rundruf, der Connector zeigt also
keine Schaltfläche Suchen. Legen Sie das Gerät und seine Adressen von Hand an.

## Gut zu wissen {#good-to-know}

- Das zyklische Lesen liegt bei diesem Treiber für jedes Tag fest bei einer Sekunde; die
  üblichen Felder für das Abfrageintervall werden nicht gezeigt.
- Der Treiber spricht nur den binären 3E-Rahmen, nie ASCII: Eine auf ASCII-Code eingestellte
  Verbindung liest nichts (siehe [Die Steuerung vorbereiten](#prepare-the-plc)).
- Eine nicht erreichbare Steuerung kostet beim Start nichts: Das Gerät versucht es im
  Hintergrund weiter, und seine Tags lesen schlechte Qualität, bis die Verbindung steht.
- Die TCP-Verbindung hat 5 Sekunden, um sich zu öffnen, und jede Anfrage 10 Sekunden, um
  beantwortet zu werden. Eine Steuerung, die die Verbindung annimmt und nicht rechtzeitig
  antwortet, wird getrennt und erneut versucht wie eine nicht erreichbare; ihr Fehler nennt den
  Port und die zwei üblichen Gründe: eine CPU der Reihe Q oder L, deren Port auf ASCII-Code
  eingestellt ist und die auf eine binäre Anfrage nichts antwortet, oder ein Gerät, das auf
  diesem Port nicht das MC-Protokoll spricht.
