# Mitsubishi MC

> Relier des automates Mitsubishi MELSEC par le protocole MC (trame 3E) : codes d'équipement, numérotation décimale et hexadécimale, et longueurs de lecture.

Le pilote **Mitsubishi MC** parle à des automates Mitsubishi MELSEC par le protocole
MC, avec la trame 3E binaire sur TCP, la trame que parlent les séries Q, L et
iQ. Vous adressez les valeurs avec la notation d'équipement MELSEC familière :
un code d'équipement suivi d'un numéro, comme `D100` ou `M50`. Ajoutez un équipement sous le
pilote Mitsubishi MC dans le [Connector](connector); le volet ne montre que les
champs que ce protocole emploie.

## Connexion {#connection}

| Champ | Sens | Par défaut |
| --- | --- | --- |
| **Hôte** | L'adresse IP ou le nom d'hôte de l'interface Ethernet de l'automate. | vide |
| **Port** | Le port TCP de la connexion en protocole MC, de 1 à 65535. Un champ vide affiche 5007 en gris et l'équipement est appelé sur ce port; un équipement enregistré avec 0 se lit de la même façon. | 5007 |

L'en-tête de l'équipement montre l'endpoint assemblé, par exemple
`mcp://192.168.0.20:5007`. Ce pilote n'a aucun champ d'intervalle de scrutation :
ses tags sont lus une fois par seconde. Du côté de l'automate, il faut une connexion en protocole
MC (SLMP), TCP et binaire, sur le port choisi : [Préparer l'automate](#prepare-the-plc) dit où elle
se crée.

## Préparer l'automate {#prepare-the-plc}

Une CPU MELSEC ne sert le protocole MC que sur une connexion que son projet crée, et refuse une
écriture tant qu'elle est en RUN, sauf si son port Ethernet l'autorise. Les réglages se font dans
l'outil d'ingénierie et s'écrivent dans la CPU avec ses paramètres (**Online > Write to PLC**); la
CPU les lit au démarrage, il faut donc ensuite la réinitialiser ou l'éteindre et la rallumer.

| Réglage | GX Works3 (iQ-R, iQ-F) | GX Works2 (Q, L) | Sans lui |
| --- | --- | --- | --- |
| Une connexion MC, TCP, sur le **Port** de l'équipement | **Module Parameter > Ethernet Port > Basic Settings > External Device Configuration** : faites glisser un **SLMP Connection Module** dans le tableau, avec Protocol TCP et le port de l'équipement comme **Port No.** | **PLC Parameter > Built-in Ethernet Port Setting > Open Setting** : une ligne avec Protocol TCP, **Open System** MC Protocol et le port de l'équipement comme **Host Station Port No.** | La CPU refuse la connexion sur ce port, et l'équipement reste hors ligne. |
| **Communication Data Code** en binaire | **Module Parameter > Ethernet Port > Basic Settings** : **Binary**. | **PLC Parameter > Built-in Ethernet Port Setting** : **Binary Code**. | La CPU répond en caractères ASCII, ou ne répond pas, et aucun tag ne se lit. |
| Écriture en RUN autorisée | iQ-R : **Module Parameter > Ethernet Port > Basic Settings**, **Enable/Disable Online Change** sur **Enable All (SLMP)**. | **PLC Parameter > Built-in Ethernet Port Setting**, **Enable online change (FTP, MC Protocol)** coché. | La CPU lit normalement et refuse chaque écriture tant qu'elle est en RUN, avec le code de fin 0x0055. |

Une CPU Q ou L se réserve les ports 5000 à 5009 : sa connexion MC ne peut donc pas prendre le 5007,
la valeur par défaut de l'équipement. Donnez-lui un autre port, 5010 par exemple, et saisissez
celui-ci dans le **Port** de l'équipement. GX Works2 peut afficher **Host Station Port No.** en
hexadécimal, où 5010 vaut 1392. Le code de données vaut pour tout le port Ethernet : un autre
programme qui parle à la CPU en ASCII sur ce port doit lui aussi passer en binaire.

Quand la CPU refuse le port, répond en ASCII ou refuse une écriture en RUN, la page de l'équipement
dit de quel réglage il s'agit, avec ces étapes et le port que compose l'équipement, dans un avis qui
disparaît de lui-même dès que la CPU accepte. Pour une écriture refusée en RUN, il nomme les tags
dont l'écriture a été refusée. Le journal technique et l'agent lisent les mêmes étapes.

## Adressage {#addressing}

Un tag Mitsubishi est adressé par deux champs de la carte Source de la valeur du tag :

| Champ | Sens | Valeurs acceptées | Par défaut |
| --- | --- | --- | --- |
| **Adresse d'équipement** | Le code d'équipement MELSEC suivi du numéro, par exemple `D100`. Obligatoire. | texte libre | vide |
| **Longueur de lecture (octets, vide = automatique)** | Combien d'octets transférer par lecture. Vide dimensionne la lecture d'après le type de donnée. | 1 et au-delà, ou vide | vide |

L'adresse ne tient pas compte de la casse et c'est le code le plus long qui l'emporte, si bien
que `SD100` est le registre spécial 100, et non le relais de pas `S`. Le numéro
est **hexadécimal** pour les équipements que Mitsubishi numérote en hexadécimal (X, Y, B, W,
SB, SW, DX, DY) et décimal pour tout le reste (`X1F` est l'entrée 0x1F).
Les codes d'équipement acceptés :

| Code | Équipement | Numérotation |
| --- | --- | --- |
| `M` | relais interne | décimale |
| `SM` | relais spécial | décimale |
| `L` | relais à verrouillage | décimale |
| `F` | annonciateur | décimale |
| `V` | relais de front | décimale |
| `S` | relais de pas | décimale |
| `X` | entrée | hexadécimale |
| `Y` | sortie | hexadécimale |
| `B` | relais de liaison | hexadécimale |
| `SB` | relais de liaison spécial | hexadécimale |
| `DX` | entrée directe | hexadécimale |
| `DY` | sortie directe | hexadécimale |
| `D` | registre de données | décimale |
| `SD` | registre spécial | décimale |
| `R` | registre de fichier | décimale |
| `ZR` | registre de fichier étendu | décimale |
| `W` | registre de liaison | hexadécimale |
| `SW` | registre de liaison spécial | hexadécimale |
| `Z` | registre d'index | décimale |
| `TC` / `TS` / `TN` | bobine / contact / valeur courante d'une temporisation | décimale |
| `SC` / `SS` / `SN` | bobine / contact / valeur courante d'une temporisation rémanente | décimale |
| `CC` / `CS` / `CN` | bobine / contact / valeur courante d'un compteur | décimale |

La bibliothèque MC sous-jacente accepte aussi les codes `TT`, `TM`, `CT`, `CM` et
`A`. La ligne en lecture seule **Adresse source (bus)** de la carte Source de la valeur montre l'adresse
assemblée au fil de vos modifications.

## Types de donnée {#data-types}

Le sélecteur de **Type de donnée** offre les quatre types que le pilote sait transporter :

| Type de donnée | Longueur de lecture automatique | Remarques |
| --- | --- | --- |
| Boolean | 1 octet | sur un équipement de bit, le seul relais nommé; sur un équipement de mot, tout mot non nul |
| Int32 | 4 octets | deux mots consécutifs de 16 bits, par exemple `D100` et `D101` |
| Float | 4 octets | deux mots consécutifs portant une simple précision IEEE |
| String | 16 octets | le texte jusqu'au premier octet nul du tampon de lecture |

Les données de mot arrivent dans l'ordre petit-boutiste natif de MELSEC et sont décodées
automatiquement; il n'y a pas d'option d'ordre des octets. Une valeur de 32 bits couvre deux
équipements de mot consécutifs. Pour un texte de plus de 16 caractères, relevez la
**longueur de lecture** pour couvrir le texte enregistré. La **longueur de lecture** est un
nombre d'octets et le protocole transfère des mots entiers de 16 bits : une longueur impaire est
donc arrondie au mot qui porte son dernier octet.

Les équipements de bit, ceux que le pilote lit un relais à la fois, sont `X`, `Y`, `M`,
`L`, `F`, `V`, `B`, `S`, `TS`, `TC`, `SS`, `SC`, `CS`, `CC`, `SB`, `DX` et `DY`. Un tag
booléen y répond pour l'adresse que vous avez tapée et pour rien d'autre. Tout autre code
est un équipement de mot, y compris la valeur courante d'une temporisation ou d'un
compteur (`TN`, `SN`, `CN`) et les registres de liaison (`W`, `SW`), et c'est alors le mot
entier qui décide : `D100` portant `0x0100` se lit vrai.

Une lecture que l'automate refuse, comme celle d'une adresse au-delà de la fin de
sa plage, laisse ce tag sans valeur, et son erreur nomme le code de fin et ce que le
manuel dit qu'il signifie, par exemple
`end code 0xC056 (the request goes past the last address of the device)`. Tous les
autres tags de l'équipement continuent de lire.

## Écritures {#writes}

Les tags dont l'**Accès** est Lecture et écriture ou Écriture seule peuvent être écrits, à la
même adresse d'équipement que celle qu'emploie la lecture. Une écriture booléenne sur un
équipement de bit pose ou efface le seul relais nommé et ne touche à aucun de ses voisins. Tout
le reste est écrit en mots entiers de 16 bits : deux mots pour un Int32 et un Float, un mot
pour un booléen sur un équipement de mot, et pour un texte toute la **longueur de lecture** du
tag, les octets UTF-8 du texte devant et des zéros derrière, arrondis au dernier mot. Un texte
plus court écrit par-dessus un plus long remplace donc toute la valeur et rien de l'ancien ne
survit. Un texte qui n'entre pas dans la longueur déclarée est refusé avec la longueur nommée
dans le journal, jamais rogné à la taille. Un nouveau tag démarre en Lecture seule.

Une écriture que l'automate refuse revient refusée et nomme le code de fin et son
sens de la même façon. Une écriture refusée parce que la CPU est en RUN (code de fin 0x0055)
est dite aussi sur la page de l'équipement, avec le réglage qui l'autorise (voir
[Préparer l'automate](#prepare-the-plc)).

## Découverte {#discovery}

Le protocole MC n'a pas de découverte par diffusion dans ce pilote : le Connector
ne montre donc aucun bouton Découvrir. Ajoutez l'équipement et ses adresses à la main.

## Bon à savoir {#good-to-know}

- La scrutation est fixée à une seconde pour chaque tag de ce pilote; les champs habituels
  d'intervalle de scrutation ne sont pas montrés.
- Le pilote ne parle que la trame 3E binaire, jamais l'ASCII : une connexion réglée en code
  ASCII ne lit rien (voir [Préparer l'automate](#prepare-the-plc)).
- Un automate injoignable ne coûte rien au démarrage : l'équipement continue de réessayer en
  arrière-plan et ses tags lisent une mauvaise qualité jusqu'à ce que la connexion aboutisse.
- La connexion TCP a 5 secondes pour s'ouvrir, et chaque requête 10 secondes pour recevoir sa
  réponse. Un automate qui accepte la connexion et ne répond pas à temps est déconnecté puis
  réessayé comme un automate injoignable; son erreur nomme le port et les deux raisons
  habituelles : une CPU Q ou L dont le port est réglé en code ASCII, qui ne répond rien à une
  requête binaire, ou un équipement qui ne parle pas le protocole MC sur ce port.
