# Mitsubishi MC

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

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

## Conexión {#connection}

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

La cabecera del dispositivo muestra el endpoint ya compuesto, por ejemplo `mcp://192.168.0.20:5007`. Este controlador no tiene campos de intervalo de sondeo: sus tags se leen una vez por segundo. El lado del autómata necesita una conexión del protocolo MC (SLMP), TCP y binaria, en el puerto elegido: [Preparar el autómata](#prepare-the-plc) dice dónde se crea.

## Preparar el autómata {#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 encenderla.

| 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 responde con caracteres ASCII, o no responde, 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 por defecto 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, responde 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.

## Direccionamiento {#addressing}

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

| Campo | Significado | Valores aceptados | Por defecto |
| --- | --- | --- | --- |
| **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 se transfieren en cada 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 de minúsculas y gana el código que coincide más largo, así que `SD100` es el registro especial 100, y no el relé de paso `S`. El número es **hexadecimal** en los dispositivos que Mitsubishi numera en hexadecimal (X, Y, B, W, SB, SW, DX, DY) y decimal en todos los demás (`X1F` es la entrada 0x1F). Códigos de dispositivo aceptados:

| Código | Dispositivo | Numeración |
| --- | --- | --- |
| `M` | relé interno | decimal |
| `SM` | relé especial | decimal |
| `L` | relé de enclavamiento | decimal |
| `F` | anunciador | decimal |
| `V` | relé de flanco | decimal |
| `S` | relé de paso | decimal |
| `X` | entrada | hexadecimal |
| `Y` | salida | hexadecimal |
| `B` | relé de enlace | hexadecimal |
| `SB` | relé 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 de í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 subyacente 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 ya compuesta mientras se edita.

## Tipos de dato {#data-types}

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

| Tipo de dato | Longitud de lectura automática | Notas |
| --- | --- | --- |
| Boolean | 1 byte | en un dispositivo de bit, el relé concreto 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 valor simple IEEE |
| String | 16 bytes | 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 descodifican 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** hasta cubrir el texto guardado. La **Longitud de lectura** cuenta bytes y el protocolo transfiere palabras enteras de 16 bits, así que una longitud impar se redondea hacia arriba hasta la palabra que lleva su último byte.

Los dispositivos de bit, los que el controlador lee de relé en relé, son `X`, `Y`, `M`, `L`, `F`, `V`, `B`, `S`, `TS`, `TC`, `SS`, `SC`, `CS`, `CC`, `SB`, `DX` y `DY`. Ahí un tag Boolean responde por la dirección que se 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: un `D100` con `0x0100` se lee como verdadero.

Una lectura que el autómata 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.

## Escrituras {#writes}

Se pueden escribir los tags cuyo **Acceso** es Lectura y escritura o Solo escritura, sobre la misma dirección de dispositivo que usa la lectura. Una escritura Boolean en un dispositivo de bit pone o quita el único relé nombrado y no toca ninguno de sus vecinos. Todo lo demás se escribe en palabras enteras de 16 bits: dos palabras en Int32 y en Float, una palabra en un Boolean sobre dispositivo de palabra, y en String toda la **Longitud de lectura** del tag, con los bytes UTF-8 del texto delante y ceros detrás, redondeada hacia arriba hasta la última palabra. Un texto más corto escrito sobre uno más largo sustituye, por tanto, el valor entero, y del antiguo no sobrevive nada. Un texto que no cabe en la longitud declarada se rechaza nombrando la longitud en el diario técnico, nunca se recorta a la medida. Un tag nuevo nace como Solo lectura.

Una escritura que el autómata rechaza vuelve 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 autómata](#prepare-the-plc)).

## Descubrimiento {#discovery}

En este controlador, el protocolo MC no tiene descubrimiento por difusión, así que el Connector no muestra ningún botón Descubrir. Añada el dispositivo y sus direcciones a mano.

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

- El sondeo está fijado en un segundo para todos los tags de este controlador; los campos habituales de intervalo de sondeo no se muestran.
- El controlador solo habla la trama 3E binaria, nunca ASCII: una conexión configurada en código ASCII no lee nada (consulte [Preparar el autómata](#prepare-the-plc)).
- Un autómata inalcanzable no cuesta nada en el arranque: el dispositivo sigue reintentando en segundo plano y sus tags se leen con mala calidad hasta que la conexión aterriza.
- La conexión TCP tiene 5 segundos para abrirse, y cada petición 10 segundos para recibir respuesta. Un autómata que acepta la conexión y no responde 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 responde nada a una petición binaria, o un equipo que no habla el protocolo MC en ese puerto.
