# Mitsubishi MC

> Conectar PLC Mitsubishi MELSEC con el protocolo MC (trama 3E): códigos de dispositivo, numeración decimal y hexadecimal, y longitudes de lectura.

El driver **Mitsubishi MC** habla con PLC Mitsubishi MELSEC con el protocolo MC, usando
la trama binaria 3E sobre TCP, la trama que hablan las series Q, L e iQ. Usted direcciona
los valores con la notación de dispositivo MELSEC de siempre: un código de dispositivo
más un número, como `D100` o `M50`. Agregue un dispositivo bajo el driver Mitsubishi MC
en el [Connector](connector); el panel muestra solo los campos que usa este protocolo.

## Conexión {#connection}

| Campo | Significado | Valor inicial |
| --- | --- | --- |
| **Host o IP** | Dirección IP o nombre de host de la interfaz Ethernet del PLC. | vacío |
| **Puerto** | Puerto TCP de la conexión del protocolo MC, de 1 a 65535. Un campo vacío muestra 5007 en gris y al dispositivo se le marca por él, que es también como se lee un dispositivo guardado con 0. | 5007 |

El encabezado del dispositivo muestra el endpoint armado, por ejemplo
`mcp://192.168.0.20:5007`. Este driver no tiene campos de intervalo de sondeo: sus tags
se leen una vez por segundo. Del lado del PLC hace falta una conexión del protocolo MC
(SLMP), TCP y binaria, en el puerto elegido: [Preparar el PLC](#prepare-the-plc) dice dónde
se crea.

## Preparar el PLC {#prepare-the-plc}

Una CPU MELSEC solo sirve el protocolo MC en una conexión que crea su proyecto, y rechaza una
escritura mientras está en RUN salvo que su puerto Ethernet la permita. Los ajustes se hacen en
la herramienta de ingeniería y se escriben en la CPU con sus parámetros (**Online > Write to
PLC**); la CPU los lee al arrancar, así que después hay que reiniciarla o apagarla y prenderla.

| Ajuste | GX Works3 (iQ-R, iQ-F) | GX Works2 (Q, L) | Sin él |
| --- | --- | --- | --- |
| Una conexión MC, TCP, en el **Puerto** del dispositivo | **Module Parameter > Ethernet Port > Basic Settings > External Device Configuration**: arrastre un **SLMP Connection Module** a la tabla, con Protocol TCP y el puerto del dispositivo como **Port No.** | **PLC Parameter > Built-in Ethernet Port Setting > Open Setting**: una línea con Protocol TCP, **Open System** MC Protocol y el puerto del dispositivo como **Host Station Port No.** | La CPU rechaza la conexión en ese puerto y el dispositivo sigue desconectado. |
| **Communication Data Code** en binario | **Module Parameter > Ethernet Port > Basic Settings**: **Binary**. | **PLC Parameter > Built-in Ethernet Port Setting**: **Binary Code**. | La CPU contesta con caracteres ASCII, o no contesta, y ningún tag se lee. |
| Escritura en RUN permitida | iQ-R: **Module Parameter > Ethernet Port > Basic Settings**, **Enable/Disable Online Change** en **Enable All (SLMP)**. | **PLC Parameter > Built-in Ethernet Port Setting**, **Enable online change (FTP, MC Protocol)** marcado. | La CPU lee con normalidad y rechaza toda escritura mientras está en RUN, con el código de fin 0x0055. |

Una CPU Q o L reserva para sí los puertos 5000 a 5009, así que su conexión MC no puede tomar el
5007, el valor predeterminado del dispositivo: dele otro puerto, por ejemplo el 5010, y escríbalo
en el **Puerto** del dispositivo. GX Works2 puede mostrar **Host Station Port No.** en
hexadecimal, donde 5010 es 1392. El código de datos es uno para todo el puerto Ethernet: otro
programa que hable con la CPU en ASCII por ese puerto también tiene que pasar a binario.

Cuando la CPU rechaza el puerto, contesta en ASCII o rechaza una escritura en RUN, la página del
dispositivo dice qué ajuste es, con estos pasos y el puerto que marca el dispositivo, en un aviso
que desaparece solo en cuanto la CPU acepta. Para una escritura rechazada en RUN nombra los tags
cuyas escrituras se rechazaron. El diario técnico y el agente leen los mismos pasos.

## El direccionamiento {#addressing}

Un tag de Mitsubishi se direcciona con dos campos de la tarjeta Fuente del tag:

| Campo | Significado | Valores aceptados | Valor inicial |
| --- | --- | --- | --- |
| **Dirección del dispositivo** | Código de dispositivo MELSEC más número, por ejemplo `D100`. Obligatorio. | texto libre | vacío |
| **Longitud de lectura (bytes, en blanco = automático)** | Cuántos bytes transferir por lectura. En blanco, la lectura se dimensiona a partir del tipo de dato. | 1 en adelante, o en blanco | en blanco |

La dirección no distingue mayúsculas y gana el código coincidente más largo, así que
`SD100` es el registro especial 100, no el relevador de paso `S`. El número es
**hexadecimal** para los dispositivos que Mitsubishi numera en hexadecimal (X, Y, B, W,
SB, SW, DX, DY) y decimal para todos los demás (`X1F` es la entrada 0x1F). Los códigos de
dispositivo aceptados:

| Código | Dispositivo | Numeración |
| --- | --- | --- |
| `M` | relevador interno | decimal |
| `SM` | relevador especial | decimal |
| `L` | relevador de enganche | decimal |
| `F` | anunciador | decimal |
| `V` | relevador de flanco | decimal |
| `S` | relevador de paso | decimal |
| `X` | entrada | hexadecimal |
| `Y` | salida | hexadecimal |
| `B` | relevador de enlace | hexadecimal |
| `SB` | relevador de enlace especial | hexadecimal |
| `DX` | entrada directa | hexadecimal |
| `DY` | salida directa | hexadecimal |
| `D` | registro de datos | decimal |
| `SD` | registro especial | decimal |
| `R` | registro de archivo | decimal |
| `ZR` | registro de archivo extendido | decimal |
| `W` | registro de enlace | hexadecimal |
| `SW` | registro de enlace especial | hexadecimal |
| `Z` | registro índice | decimal |
| `TC` / `TS` / `TN` | bobina / contacto / valor actual de temporizador | decimal |
| `SC` / `SS` / `SN` | bobina / contacto / valor actual de temporizador retentivo | decimal |
| `CC` / `CS` / `CN` | bobina / contacto / valor actual de contador | decimal |

La biblioteca MC de base acepta además los códigos `TT`, `TM`, `CT`, `CM` y `A`. La
línea de solo lectura **Dirección de origen (bus)** de la tarjeta Fuente muestra la
dirección armada conforme usted edita.

## Los tipos de dato {#data-types}

El selector de **Tipo de dato** ofrece los cuatro tipos que el driver sabe transportar:

| Tipo de dato | Longitud de lectura automática | Notas |
| --- | --- | --- |
| Boolean | 1 byte | en un dispositivo de bit, el único relevador nombrado; en un dispositivo de palabra, cualquier palabra distinta de cero |
| Int32 | 4 bytes | dos palabras consecutivas de 16 bits, por ejemplo `D100`+`D101` |
| Float | 4 bytes | dos palabras consecutivas con un IEEE de precisión simple |
| String | 16 bytes | el texto hasta el primer NUL del búfer de lectura |

Los datos de palabra llegan en el orden little-endian nativo de MELSEC y se decodifican
automáticamente; no hay opción de orden de bytes. Un valor de 32 bits ocupa dos
dispositivos de palabra consecutivos. Para un String de más de 16 caracteres, suba la
**Longitud de lectura** para que cubra el texto guardado. La **Longitud de lectura** es
un conteo de bytes y el protocolo transfiere palabras enteras de 16 bits, así que una
longitud impar se redondea hacia arriba a la palabra que lleva su último byte.

Los dispositivos de bit, los que el driver lee un relevador a la vez, son `X`, `Y`, `M`,
`L`, `F`, `V`, `B`, `S`, `TS`, `TC`, `SS`, `SC`, `CS`, `CC`, `SB`, `DX` y `DY`. Ahí un tag
booleano contesta por la dirección que usted escribió y por ninguna otra. Cualquier otro
código es un dispositivo de palabra, incluidos el valor actual de un temporizador o de un
contador (`TN`, `SN`, `CN`) y los registros de enlace (`W`, `SW`), y ahí decide la palabra
entera: `D100` con `0x0100` se lee como verdadero.

Una lectura que el PLC rechaza, como la de una dirección más allá del final de su rango,
deja ese tag sin valor, y su error nombra el código de fin y lo que el manual dice que
significa, por ejemplo
`end code 0xC056 (the request goes past the last address of the device)`. Todos los
demás tags del dispositivo siguen leyendo.

## Las escrituras {#writes}

Los tags cuyo **Acceso** es Lectura y escritura o Solo escritura se pueden escribir,
en la misma dirección de dispositivo que usa la lectura. Una escritura booleana sobre un
dispositivo de bit pone o borra el único relevador nombrado y no toca a ninguno de sus
vecinos. Todo lo demás se escribe como palabras enteras de 16 bits: dos palabras para
Int32 y Float, una palabra para un booleano sobre un dispositivo de palabra, y para
String toda la **Longitud de lectura** del tag, con los bytes UTF-8 del texto al frente y
ceros detrás, redondeada hacia arriba hasta la última palabra. Por eso un texto más corto
escrito sobre uno más largo reemplaza el valor entero y no sobrevive nada del anterior.
Un texto que no cabe en la longitud declarada se rechaza, con la longitud nombrada en el
diario técnico, nunca se recorta para que quepa. Un tag nuevo arranca como Solo lectura.

Una escritura que el PLC rechaza regresa rechazada y nombra el código de fin y su
significado de la misma forma. Una escritura rechazada porque la CPU está en RUN (código de
fin 0x0055) la dice además la página del dispositivo, con el ajuste que la permite (consulte
[Preparar el PLC](#prepare-the-plc)).

## El descubrimiento {#discovery}

En este driver el protocolo MC no tiene descubrimiento por difusión, así que el Connector
no muestra botón Descubrir. Agregue el dispositivo y sus direcciones a mano.

## Bueno saber {#good-to-know}

- El sondeo es fijo de un segundo para todos los tags de este driver; los campos
  habituales de intervalo de sondeo no se muestran.
- El driver solo habla la trama 3E binaria, nunca ASCII: una conexión configurada en código
  ASCII no lee nada (consulte [Preparar el PLC](#prepare-the-plc)).
- Un PLC inalcanzable no cuesta nada al arrancar: el dispositivo sigue reintentando en
  segundo plano y sus tags se leen con mala calidad hasta que la conexión llega.
- La conexión TCP tiene 5 segundos para abrirse, y cada petición 10 segundos para recibir
  respuesta. Un PLC que acepta la conexión y no contesta a tiempo se desconecta y se reintenta
  como uno inalcanzable; su error nombra el puerto y las dos razones habituales: una CPU Q o L
  con el puerto en código ASCII, que no contesta nada a una petición binaria, o un equipo que no
  habla el protocolo MC en ese puerto.
