Rockwell EtherNet/IP
Conectar autómatas Allen-Bradley Logix por EtherNet/IP (CIP): nombres de tag del autómata, desplazamientos en bytes, tipos atómicos CIP y descubrimiento por red.
El controlador Rockwell EtherNet/IP habla con autómatas Allen-Bradley / Rockwell Logix (ControlLogix, CompactLogix) por EtherNet/IP con direccionamiento de tags CIP. Los valores se direccionan por el nombre del tag del autómata declarado en el proyecto Logix: no hay ningún mapa de registros por medio. Añada un dispositivo bajo el controlador Rockwell EtherNet/IP en el Connector; el panel muestra solo los campos que usa este protocolo.
Conexión
| Campo | Significado | Por defecto |
|---|---|---|
| Host o IP | Dirección IP o nombre de host del puerto Ethernet del autómata. | vacío |
| Ranura | En qué posición del chasis está asentado el autómata, contando desde 0. | 0 |
| Intervalo de sondeo (ms) | Periodo de lectura para todo el dispositivo, para los tags que no lo sustituyen. | 1.000 |
No hay campo de puerto: EtherNet/IP usa su puerto TCP estándar, el 44818. La ruta CIP es el bus del chasis más la Ranura, así que un autómata asentado en cualquier punto del chasis es alcanzable; un autómata descubierto arranca en la ranura 0 y el campo es donde se corrige. No hay campo de bastidor: una ruta CIP no lleva ningún número de bastidor. Las peticiones agotan su tiempo de espera a los 10 segundos. La cabecera del dispositivo muestra el punto de conexión ya compuesto, por ejemplo eip://192.168.0.10:0, donde el número que sigue a la dirección es la ranura.
Cada tag puede fijar su propio Intervalo de sondeo (ms); un valor de 0 en el tag recae en el intervalo del dispositivo.
Direccionamiento
Un tag Rockwell se direcciona con dos campos de la tarjeta Origen del tag:
| Campo | Significado | Valores aceptados | Por defecto |
|---|---|---|---|
| Tag del autómata | El nombre del tag tal como está declarado en el autómata. Obligatorio. | texto libre | vacío |
| Desplazamiento en el tag (bytes, bits para BOOL) | Dónde se sitúa el valor dentro de los datos de ese tag: un desplazamiento en bytes, o un desplazamiento en bits para los tags Boolean. | 0 a 255 | 0 |
El controlador abre el tag del autómata que se ha nombrado y saca el valor de su búfer de datos en el desplazamiento indicado. Para un tag atómico sencillo, el desplazamiento se queda en 0. El desplazamiento es lo que permite que un mismo tag del autómata sirva a varios canales: un DINT al principio de una estructura está en el desplazamiento 0, el REAL que hay cuatro bytes después está en el desplazamiento 4, y en un tag Boolean el desplazamiento cuenta bits en vez de bytes.
| Para leer | Tag del autómata | Desplazamiento | Tipo de dato |
|---|---|---|---|
Un DINT Counter de alcance del autómata |
Counter |
0 | Int32 |
Un DINT de alcance de programa en Main |
Program:Main.Counter |
0 | Int32 |
Un elemento de matriz REAL Temps[2] |
Temps[2] |
0 | Float |
El segundo DINT dentro de la estructura Recipe |
Recipe |
4 | Int32 |
El bit 3 de los datos de Flags |
Flags |
3 | Boolean |
El nombre llega entero al autómata, puntos incluidos, y una lectura y una escritura del mismo tag aterrizan en el mismo sitio. Eso es lo que hace que funcione un nombre de alcance de programa como Program:Main.Counter. Una ruta de miembro con puntos (MyUdt.Member) la resuelve el autómata cuando el autómata publica ese miembro por su nombre; donde no lo hace, nombre el tag base de alcance del autómata y llegue dentro de él con el desplazamiento en bytes, que siempre funciona. La línea de solo lectura Dirección de origen (bus) de la tarjeta Origen muestra la dirección ya compuesta mientras se edita.
Tipos de dato
Todo tipo atómico CIP está disponible como Tipo de dato de un tag:
| Tipo de dato | Tipo CIP | Tamaño |
|---|---|---|
| Boolean | BOOL | 1 bit en el desplazamiento de bit |
| SByte | SINT | 1 byte |
| Byte | USINT | 1 byte |
| Int16 | INT | 2 bytes |
| UInt16 | UINT | 2 bytes |
| Int32 | DINT | 4 bytes |
| UInt32 | UDINT | 4 bytes |
| Int64 | LINT | 8 bytes |
| UInt64 | ULINT | 8 bytes |
| Float | REAL | 4 bytes |
| Double | LREAL | 8 bytes |
Las estructuras y los UDT no se admiten: solo se pueden leer o escribir los tipos atómicos de arriba, que es la razón por la que existe el desplazamiento en bytes, para alcanzar los miembros que hay dentro de ellos. String falta a propósito del selector: un STRING de Logix no es un tipo atómico, sino una estructura formada por una longitud y una matriz de 82 bytes, y el controlador no puede ni leerlo ni escribirlo. El orden de bytes en el bus es el little-endian propio de CIP y se gestiona automáticamente; no hay opción de orden de bytes.
Escrituras
Se pueden escribir los tags cuyo Acceso es Lectura y escritura o Solo escritura. Una escritura lee el tag del autómata, cambia los bytes direccionados (o el bit direccionado en Boolean) y lo vuelve a escribir. Un tag nuevo nace como Solo lectura.
Descubrimiento
El botón Descubrir del Connector difunde una petición CIP List Identity por todas las redes en las que está este equipo y sigue escuchando hasta que pasan 10 segundos sin ninguna respuesta nueva. La exploración nombra esas redes mientras corre, así que un resultado de cero dice adónde fue de verdad la pregunta: una estación con adaptadores virtuales para máquinas, para WSL o para una VPN suele tener más redes de las que el operador espera, y los candidatos pueden llegar por cualquiera de ellas.
Las interfaces que no pueden llevar la petición se saltan: todo lo que no está levantado, los adaptadores de loopback y de túnel, y una dirección que la interfaz se dio a sí misma porque nadie respondió al DHCP (169.254.x.x). Solo una respuesta que sea la contestación de identidad propia de un autómata se convierte en un dispositivo candidato, nombrado con eip:// más su dirección; cualquier otra cosa que responda en el puerto de EtherNet/IP se ignora y se dice así en el diario técnico. Para cada candidato, la exploración lee después la lista de tags de alcance del autómata y ofrece sus tags atómicos como canales candidatos, cada uno con desplazamiento 0.
El descubrimiento descarta lo que el controlador no puede sondear: los tags de estructura y de UDT (los STRING de Logix incluidos) se tiran, y las entradas Program:, Task: y Map: se saltan. Un autómata que está en una red en la que este equipo no está no responde a la difusión; añádalo a mano.
Conviene saber
- Toda petición al autómata agota su tiempo de espera a los 10 segundos, y la ventana de escucha del descubrimiento se cierra tras 10 segundos de silencio.
- El controlador abre cada tag del autómata una sola vez y lo mantiene abierto mientras el equipo siga conectado, así que un autómata con decenas de tags se lee sobre las sesiones que ya tiene, en lugar de abrir y cerrar una por cada lectura. Una lectura que falla suelta su tag, y la siguiente lo abre de nuevo por el nombre.
- Cambiar el nombre de un tag en el proyecto Logix rompe el canal en silencio; el tag se lee entonces con mala calidad hasta que el nombre configurado vuelve a coincidir.