SlideShare una empresa de Scribd logo
1 de 8
Descargar para leer sin conexión
MANEJADOR ETHERNET/IP PARA LOS PLC CONTROLLOGIX EN EL PROYECTO SCADA PDVSA. 
Rafael Trujillo Codorníu1, Antonio Cedeño Pozo2, Luis E. García Hernández3, Yasmany Pérez Pérez 4 
1 Instituto Superior Minero Metalúrgico, Las Coloradas s/n, Moa, Holguín, rafaeltc@uci.cu 
2 Universidad de Ciencias Informáticas, Carr. San Antonio de los Baños, km 2,5. acedeno@estudiantes.uci.cu 
3 Universidad de Ciencias Informáticas, Carr. San Antonio de los Baños, km 2,5. legarcia@estudiantes.uci.cu 
4 Universidad de Ciencias Informáticas, Carr. San Antonio de los Baños, km 2,5. yyperez@estudiantes.uci.cu 
Abstract ⎯ The Allen-Bradley ControlLogix line of programmable logic controllers (PLCs) offers several interfaces: Ethernet, ControlNet, DeviceNet, RS-232 and others. The ControlLogix Ethernet interface module 1756- ENET uses EtherNet/IP, the Industrial Ethernet Protocol. A Open Source Driver for the PDVSA´s Supervisory and Industrial Control System (SCADA) has been developed that utilizes this EtherNet/IP protocol. Features, performance, and design decisions of this driver are presented. 
Index Terms ⎯ Ethernet Industrial Protocol, Ethernet/Ip, ControlLogix, SCADA, Driver. 
INTRODUCCIÓN 
Muchos subsistemas de la empresa petrolera Venezolana PDVSA son controlados con PLCs Allen Bradley de la línea ControlLogix [1]. Para integrar estos PLC al SCADA que se desarrolla en la mencionada empresa era necesario el diseño de un manejador que garantizara el acceso en lectura y escritura a los datos de estos controladores desde el SCADA a través del Protocolo EtherNet / Ip. 
EtherNet/IP (Ethernet/Industrial Protocol) [3] es un protocolo de red en niveles para aplicaciones de automatización industrial. Basado en los protocolos estándar TCP/IP, utiliza los ya bastante conocidos hardware y software Ethernet para establecer un nivel de protocolo para configurar, acceder y controlar dispositivos de automatización industrial. Ethernet/IP clasifica los nodos de acuerdo a los tipos de dispositivos preestablecidos, con sus actuaciones específicas. El protocolo de red Ethernet/IP está basado en el Protocolo de Control e Información (Control and Information Protocol - CIP) utilizado en DeviceNet™ y ControlNet™. Basados en esos protocolos, Ethernet/IP ofrece un sistema integrado completo, enterizo, desde la planta industrial hasta la red central de la empresa. 
EtherNet/IP permite que los dispositivos de control intercambien información crítica con requerimientos estrictos de tiempo ([6], [7]). Entre los dispositivos que pueden interconectarse con EtherNet/IP se encuentran sensores, actuadores y, en general, dispositivos simples de entrada / salida, dispositivos de alta complejidad tales como robots, controladores lógicos programables y otros. Esta particularidad lo hace muy atractivo para enlazar, bajo un mismo protocolo, todos los eslabones del proceso, desde el SCADA hasta los dispositivos más simples (ver Figura 1). 
FIGURA. 1
Ethernet/IP es un protocolo de red en niveles, apropiado al ambiente industrial. Es el producto acabado de cuatro organizaciones que aunaron esfuerzos en su desarrollo y divulgación para aplicaciones de automatización industrial: La Open DeviceNet Vendor Association (ODVA), la Industrial Open Ethernet Association (IOANA), la Control Net International (CI) y la Industrial Ethernet Association (IEA). Estas mismas organizaciones se están esforzando para atender a las demandas de conectividad física que el ambiente severo de pie de fábrica exige. Ya se reportan más de 1 millón de nodos instalados en el mundo con este protocolo [8]. 
EtherNet/IP usa el protocolo CIP (Control and Information Protocol). El CIP es un protocolo que abarca las capas de red, transporte y aplicación del modelo OSI y es compartido también por ControlNet y por DeviceNet, solo que estos últimos utilizan diferentes medios físicos y consecuentemente diferentes capas de enlace. EtherNet/IP hace uso de la tecnología estándar de Ethernet y TCP para transportar los paquetes de comunicación CIP. El resultado es una capa abierta de comunicación por encima de los altamente populares protocolos Ethernet y TCP/IP. 
EtherNet/IP proporciona además un modelo productor / consumidor para el intercambio de información de control crítica en el tiempo. El modelo productor / consumidor permite el intercambio de información entre un dispositivo emisor y varios dispositivos receptores (o consumidores) sin la necesidad de que se envíe el mismo bloque de datos varias veces a diferentes destinos. Para EtherNet/IP, esto se logra haciendo uso de la capa de red y de transporte CIP conjuntamente con la tecnología IP “multicast”. De esta manera muchos dispositivos EtherNet/IP pueden recibir la misma información producida por otro dispositivo. 
El protocolo de Control e Información (CIP) es un protocolo “peer to peer” orientado a objetos que proporciona conexiones entre dispositivos industriales y dispositivos de alto nivel (controladores). CIP es independiente del medio físico y de la capa de enlace de datos. 
CIP define un esquema orientado a conexión para facilitar todas las comunicaciones. Una conexión CIP proporciona un camino entre múltiples “usuarios finales” Los “usuarios finales” de una conexión son aplicaciones que requieren compartir datos. A la transmisión asociada a una conexión en particular se le asigna un identificador cuando se establece la conexión (CID). 
EtherNet / IP proporciona un protocolo que puede encapsular el protocolo CIP, o incluso otros protocolos en tramas Ethernet. 
El protocolo de encapsulación define un puerto TCP reservado que debe ser soportado por todos los dispositivos EtherNet/IP. Todos los dispositivos EtherNet/IP deben aceptar, como mínimo, dos conexiones TCP en el puerto 0xAF12. 
De igual forma el protocolo de encapsulación define un puerto UDP reservado que debe ser soportado por todos los dispositivos EtherNet/IP. Todos los dispositivos EtherNet/IP deben aceptar paquetes UDP por el puerto 0xAF12. Como UDP, a diferencia de TCP, no tiene la posibilidad de reordenar los paquetes, siempre que se usa UDP para enviar mensajes encapsulados, el mensaje completo debe contenerse en un paquete simple de UDP. 
Todos los mensajes encapsulados, enviados vía TCP, o vía UDP al puerto 0xAF12, deben estar compuestos por una cabecera de longitud fija de 24 bytes seguida de una porción opcional de datos. La longitud total del mensaje encapsulado (incluyendo la cabecera) está limitada a 65535 bytes. 
Tanto la capa de protocolo a que se refiere el presente documento, como el manejador que se expone, usan el llamado protocolo industrial abierto, que es un dialecto de Ethernet / IP creado por Allen Bradley. Este dialecto permite acceder a los valores de las variables a través de nombres simbólicos o “tags” que cumplen determinadas reglas sintácticas y semánticas. 
PROTOCOLO INDUSTRIAL ABIERTO 
El protocolo industrial abierto es una extensión de CIP realizada por Allen Bradley para acceder a la información de los dispositivos de una manera simple, a través de nombres simbólicos. Esta extensión se encapsula por el mecanismo anteriormente explicado, en paquetes IP. Es compatible con, al menos los siguientes controladores: ControlLogix, PLC2, PLC5, SLC500, Micrologix, FlexLogix y otros. 
Los sistemas de control de la familia de controladores programables Logix de Allen Bradley han evolucionado enormemente sobre sus predecesores. Dentro de los aspectos más importantes de su evolución se encuentra su forma de programación. En este sentido, uno de los avances más importante es el direccionamiento basado en nombres o tags. 
Tradicionalmente, los controladores eran programados mediante posiciones de memoria. Es decir, cada instrucción estaba asociada a una posición de memoria dentro del mapa de memoria del controlador, la cual podía ser una variable física (una entrada o una salida a campo) o bien una variable interna. Las posiciones de memoria se caracterizaban por tener nomenclatura propia que no podía asociarse a una variable de proceso (por ejemplo MD159 o MW10). Una buena forma de programación obligaba a definir un nombre o "tag" asociado a cada variable de proceso de modo tal que se corresponda con una posición de memoria en el controlador. Teniendo este vínculo, era posible comprender la programación. 
Una vez terminada la lógica de control, el software de programación generaba dos archivos. El primero contenía el algoritmo de control propiamente dicho con las instrucciones direccionadas mediante posiciones de memoria (lo llamaremos archivo fuente) y el segundo contenía los nombres de las variables asociadas a cada posición de memoria (lo llamaremos archivo referencial). Ambos
archivos eran necesarios para poder visualizar el código de control tal como había sido programado originalmente. 
Por otro lado, esta forma de programación obligaba a tener definida la ingeniería de conexionado y cableado antes de empezar a programar. Es decir, se debía conocer exactamente el lugar en los módulos de entradas y salidas donde se conectarían las señales de campo. También era necesario definir si la arquitectura de control sería centralizada o distribuida. Sólo después de tener terminada dicha ingeniería, el programador tendría la información necesaria para comenzar el desarrollo de la lógica de control. 
La programación mediante posiciones de memoria fue muy utilizada en el pasado cuando las herramientas de software no estaban muy desarrolladas (muchas de ellas comenzaron trabajando bajo el sistema operativo DOS) y la memoria de los controladores era pequeña, costosa y de baja integración. Los nuevos desarrollos han potenciado las herramientas de programación y los controladores han incrementado significativamente la cantidad de memoria, producto de su reducción de costo y gran capacidad de integración. 
En virtud de ello nace la programación basada en “tags”. La misma resuelve todos los problemas antes planteados y potencia la forma de programar como nunca antes. 
Los controladores de la familia Logix de Allen Bradley ([2]) no utilizan posiciones de memoria para elaborar su estrategia de control. La programación se hace directamente utilizando el nombre de la variable o “tag”. Es decir, una instrucción se referencia sólo con el tag de la variable asociada a ella. Los tags son nativos al procesador y de ese modo se descargan al mismo, no existiendo la necesidad de que el software compile el programa y lo traduzca a un lenguaje propio del controlador. Así, ya no existen dos archivos generados por el software de programación (uno con el código fuente y otro con los tags) sino que se genera uno solo, el cual se descarga en el controlador Logix directamente. De este modo, al conectarse mediante una PC a un equipo Logix, se adquiere el código de control completo tal como fuera creado (incluyendo los tags correspondientes) sin necesidad de un archivo referencial de respaldo en la PC. 
Esta arquitectura es extremadamente flexible y permite a los desarrolladores de sistemas de control diseñar sus sistemas sin estar constreñidos por los requerimientos de organización de la memoria que se encuentran en los PLC clásicos. La naturaleza de los dispositivos permite crear datos dentro del controlador estructurados de acuerdo a las necesidades de la aplicación. A diferencia de los protocolos clásicos (como Modbus) en que el usuario tiene acceso a un conjunto fijo de registros o de bits, la extensión de ControlLogix trata la memoria de manera mucho más dinámica, Su versatilidad permite al usuario seleccionar el nombre de las variables, los tipos de datos, crear estructuras complejas e incluso arreglos, de manera parecida a como los programadores de PC esperan manejar la memoria. 
Hay un precio, no obstante, por esta flexibilidad y ese precio es la complejidad de la comunicación. En los PLC clásicos donde los datos se arreglan convenientemente en una lista consecutiva de registros o de bits, la obtención de un gran volumen de datos es simplemente cuestión de especificar el punto de comienzo en la memoria y la longitud del segmento a leer. Con los procesadores ControlLogix, esto deja de ser así, precisamente debido a las amplias posibilidades en la organización interna de la memoria que los mismos presentan. Para lograr tasas adecuadas de recuperación de la información se necesitan diferentes esquemas de optimización, los cuales se expondran en el punto “Decisiones de diseño”. 
Estructura de los tags 
Para facilitar la comprensión de algunas de las decisiones de diseño exponemos brevemente la conformación de los Tags en el protocolo Industrial Abierto. 
Los “tags” son nombres simbólicos por los cuales se accede a la información del PLC. Estos son identificadores con no más de 40 caracteres de longitud. Los tags tienen un alcance. De acuerdo a su alcance se clasifican en tags del controlador (o sea globales) a los cuales se pueden acceder directamente y tags del programa (locales) a los cuales no se puede acceder desde un dispositivo externo. Cada tag tiene un tipo de dato que define la organización interna del dato y las posibles operaciones sobre el mismo. Se soportan tipos atómicos tales como bit, byte, palabras de 16 bits, de 32 bits y tipos estructurados. La siguiente tabla identifica los principales tipos de datos simples predefinidos: 
TABLA I 
LECTURA DE 200 ARREGLOS DE 200 ENTEROS. 
Dato Almacenado 
Tipo Correspondiente 
Bit 
BOOL 
Arreglo de Bits 
BOOL ARRAY 
Entero de 8 bits 
SINT 
Entero de 16 bits 
INT 
Entero de 32 bits 
DINT 
Flotante de 32 bits 
REAL 
Las estructuras son agrupaciones de diferentes tipos de datos que funcionan como una unidad simple y sirven a un propósito específico. El acceso a un miembro de la estructura se logra utilizando el operador miembro (.). La sintaxis es: 
TagEstructurado.miembro 
Dependiendo de las necesidades de la aplicación se pueden crear estructuras adicionales. 
Los arreglos son secuencias de elementos que tienen el mismo tipo de dato y que pueden accederse a partir de su posición dentro del arreglo. Para diferenciar los elementos de un arreglo se utilizan índices detrás del nombre del
arreglo y encerrados por corchetes ([2]). Se pueden crear arreglos unidimensionales, bidimensionales o tridimensionales. El primer elemento de un arreglo siempre es el elemento con índice cero. 
Un miembro de una estructura puede ser un arreglo y a su vez un arreglo puede ser un arreglo de un tipo complejo, como una estructura, de manera que los siguientes tags son posibles: 
Motor[4].eje.temperatura 
Pozo.Muestras[7] 
Estos tags deben interpretarse de la siguiente manera; en el primer caso tenemos un tag (Motor) de tipo arreglo unidimensional. El tipo de cada elemento del arreglo es una estructura que tiene un miembro cuyo identificador es eje, que a su vez es de tipo estructura también y tiene un miembro llamado temperatura. Por tanto Motor[4].eje.temperatura se refiere al miembro temperatura de la estructura referida por el miembro eje de la estructura Motor[4]. 
En el segundo caso el arreglo Muestras es un miembro de la estructura referenciada por el tag Pozo. 
DECISIONES DE DISEÑO 
Como se mencionó anteriormente en los PLC clásicos (por ejemplo con el protocolo Modbus) donde los datos se arreglan convenientemente en una lista consecutiva de registros o de bits, la obtención de un gran volumen de datos en una transacción simple es relativamente sencilla. Con el protocolo extendido Ethernet IP de ControlLogix, esto deja de ser así, precisamente debido a las amplias posibilidades en la organización interna de la memoria que los mismos presentan. Para lograr tasas adecuadas de recuperación de la información se necesitan diferentes esquemas de optimización, que se exponen a continuación: 
Conexiones persistentes 
En todas de las bibliotecas de código abierto consultadas (ver, por ejemplo, [4] y [5]), se usa el esquema de establecer totalmente la conexión al dispositivo en cada operación de lectura y liberar la conexión al finalizar la operación. Este comportamiento presenta varias ventajas, entre ellas; mantiene menos recursos del dispositivo ocupados, la lógica de programación es más simple puesto que no requiere el envío de latidos periódicos para mantener la conexión activa y tiene un rendimiento aceptable para aplicaciones pequeñas. 
Con el objeto de comprobar cual era la penalidad de abrir y cerrar las conexiones en cada operación se efectuaron varias pruebas con un PLC Prosoft de Allen Bradley , dos de las cuales se muestran en las Tablas 2 y 3. 
En la primera prueba, cuyos resultados se muestran en la Tabla 2, se leyó del dispositivo un arreglo de 200 enteros de manera consecutiva (200 veces) y se midió el tiempo empleado en toda la transacción, usando el esquema de conexiones persistentes (es decir sin abrir y cerrar las conexiones en cada operación) y usando el esquema de conexiones volátiles. La prueba se repitió 3 veces para evitar que condiciones aleatorias en la red usada afectara los resultados. 
En la segunda prueba, cuyos resultados se muestran en la Tabla 3, se compararon las lecturas de arreglos de 400 BOOL. 
Los resultados arrojan una diferencia estable y significativa entre ambos esquemas del orden de 4 a 1, lo cual indica que la apertura y cierre de la conexión TCP y la creación y destrucción del objeto CIP conexión, en el PLC, es una operación costosa y que si bien el esquema de conexiones volátiles es admisible para pequeñas aplicaciones (admite mas de 40 peticiones de lectura por segundo) , para la operación de un SCADA es inadmisible. 
TABLA 2 
LECTURA DE 200 ARREGLOS DE 200 ENTEROS. 
Modelo 
Repetición 
Tiempo (ms) 
CON CONEXIÓN PERSISTENTE 
I 
II 
III 
2227 
2316 
2198 
SIN CONEXIÓN PERSISTENTE 
I 
II 
III 
9014 
8780 
8823 
TABLA 3 
LECTURA DE 200 ARREGLOS DE 400 BOOL. 
Modelo 
Repetición 
Tiempo (ms) 
CON CONEXIÓN PERSISTENTE 
I 
II 
III 
2218 
2187 
2245 
SIN CONEXIÓN PERSISTENTE 
I 
II 
III 
8659 
8713 
8801 
Lectura de arreglos. Densidad de los paquetes 
Una de las maneras clásicas de optimizar las lecturas es tratar de recuperar la mayor cantidad de valores en una transacción simple. En virtud de que mediante el protocolo podemos obtener los elementos de un arreglo (siempre y cuando el tamaño total del mensaje no exceda 488 bytes) si necesitáramos leer en un instante de tiempo los tags Temp[1] y Temp[9] podríamos optar por hacerlo en una transacción leyendo los 9 elementos del arreglo a partir de Temp[1]. Por supuesto que en este caso estamos forzando al PLC a entregarnos información no útil (los valores Temp[2], Temp[3], ..., Temp[8] ), lo cual también tiene un costo. El concepto de densidad de un paquete o bloque de registros refleja la proporción de datos útiles, con respecto al total, en
el paquete solicitado. Una densidad muy baja en los paquetes podría tener un impacto negativo en el rendimiento al incrementar innecesariamente la cantidad de datos a transferir y ocupar el CPU del PLC en transferencias innecesarias. Por otra parte obligar el uso de densidades muy altas puede provocar fragmentación en las solicitudes lo que también puede disminuir el rendimiento. 
Para poder decidir cual es la densidad óptima en el protocolo se decidieron efectuar pruebas que permitieran definir el costo de la lectura de un arreglo con respecto al costo de un elemento simple. 
Los resultados de las pruebas se muestran en las Tablas 4 y 5. En el primer caso se compara la lectura de un tag entero con respecto a un arreglo de 200 enteros. La operación se repite 200 veces y se mide el tiempo total resultante. La prueba se repite 3 veces para eliminar la influencia de factores aleatorios que puedan afectar la misma. 
TABLA 4 
LECTURA DE 200 TAGS 
Modelo 
Repetición 
Tiempo (ms) 
TAG SIMPLE ENTERO 
I 
II 
III 
2127 
2116 
2158 
TAG ARREGLO DE 200 ENTEROS 
I 
II 
III 
2216 
2325 
2188 
De igual modo se valoró la lectura de un arreglo de 400 BOOL con respecto a un tag simple de tipo BOOL. 
TABLA 5 
LECTURA DE 200 TAGS 
Modelo 
Repetición 
Tiempo (ms) 
TAG SIMPLE BOOL 
I 
II 
III 
2172 
2164 
2198 
TAG ARREGLO DE 400 BOOL 
I 
II 
III 
2239 
2178 
2254 
Como se aprecia en los resultados no existen diferencias estadísticamente significativas entre la lectura de tags simples y de arreglos. Por tanto se tomó la decisión, para el manejador, de no exigir una densidad mínima en los paquetes. Si se necesitan, en un instante dado, dos elementos de un arreglo con índices i y j el manejador procederá a leer el segmento completo desde i hasta j, siempre y cuando el segmento en cuestión no ocupe un número de bytes que exceda el máximo admitido por el protocolo (generalmente 488 bytes). Si la “distancia” entre los dos elementos provoca un segmento de longitud mayor a 488 bytes se procede a fragmentar la solicitud de lectura en 2 solicitudes. 
La implementación del mecanismo de optimización se basa en la asociación, a cada tag, de un nuevo tag que denominamos tag Base. El tag Base de una variable es un tag que se obtiene del tag de la variable de acuerdo a las siguientes reglas: 
• Si el tag termina con una referencia a un miembro de una estructura o es un tag simple el tag Base coincide simplemente con el tag. 
• Si el tag de la variable termina en una referencia a un elemento de un arreglo, el tagBase se obtiene sustituyendo el último índice del arreglo por el valor cero. 
Las variables que tengan el mismo tag Base se diferenciarán entre si, obviamente, por el último índice en la referencia al arreglo. Al ser elementos de un mismo arreglo tienen un mismo tipo de dato simple . Supongamos que las variables que comparten un mismo tag Base dTT son y sean los índices correspondientes. Sea el mayor de los índices e el menor de ellos. Entonces las variables serán asignadas a un mismo bloque de encuesta para lectura y recuperadas en un solo mensaje si y sólo si el producto de la diferencia nvvv,,,21Kniii,,,21Kmaximininvvv,,,21K)(minmaxii− por la cantidad de bytes que ocupa el tipo de dato es menor que 488. Adicionalmente si la operación es de escritura se exige que los índices de las variables sean consecutivos (ver el punto “Escritura de arreglos”), a excepción de los arreglos de bits, en que se admiten salidas de datos no consecutivos. dT 
En la tabla siguiente se muestran algunos ejemplos de tags y sus correspondientes tag Base. 
TABLA 6 
RELACIÓN ENTRE LOS TAGS Y LOS TAGS BASE 
Tags 
Tag Base 
Temp1 
Temp1 
Temp1.value 
Temp1.value 
Temp1[3] 
Temp1[0] 
Temp1[3].Value 
Temp1[3].Value 
Temp1[3].Data[4] 
Temp1[3].Data[0] 
Temp1[3].Data[5,2] 
Temp1[3].Data[5,0] 
De igual manera se evaluó el costo de escrituras de tags simples con respecto a escrituras de arreglos. Las pruebas son similares a las expuestas anteriormente y se muestran en la Tabla 7. 
TABLA 7 
ESCRITURA DE 200 TAGS 
Modelo 
Repetición 
Tiempo (ms) 
TAG SIMPLE ENTERO 
I 
II 
III 
2571 
2463 
2499 
TAG ARREGLO DE 200 ENTEROS 
I 
II 
III 
2639 
2558 
2584
Como se aprecia no hay diferencias estadísticamente significativas entre los tiempos de respuesta a solicitudes de escritura simple o escritura múltiple. 
Escritura de arreglos 
Como se concluyó en al punto anterior, la estrategia que se implementó en el manejador EtherNet/IP es la de combinar las solicitudes de lectura de elementos de un arreglo en una transferencia única desde el menor índice solicitado hasta el mayor. Esta estrategia lleva a una reducción significativa de los tiempos de transferencia pero su aplicación en la operación de escritura puede tener efectos colaterales: la escritura de paquetes cuya densidad no sea cero modifica valores de variables que pueden haber cambiado desde el último acceso que se hizo a las mismas y cuya alteración era innecesaria. Por ejemplo supongamos que se desean modificar las variables Temp[1] y Temp[3]. Supongamos que, extrapolando la estrategia usada en la lectura, se decide realizar la escritura en un solo bloque, desde la variable Temp[1] hasta Temp[3]. Esto compromete a modificar de manera correcta Temp[2]. Para ello, una variante posible es depositar el último valor conocido. Pero esto puede ser incorrecto si se considera que ese valor pudo haber sido modificado por otras fuentes (por ejemplo un HMI) sin que el cambio fuera conocido por el SCADA. Es por ello que la estrategia usada para las escrituras es exigir que la densidad de los paquetes sea de 100%. Esto quiere decir que los paquetes de escritura serán fragmentados hasta que cada fragmento quede sin “salidas falsas”. 
Una excepción a esta regla la constituyen los llamados arreglos de bits. Las variables booleanas en ControlLogix pueden organizarse en arreglos de bits, en cuyo caso en un entero de 32 bits del PLC se almacenan 32 valores BOOL. Si BoolEx es una arreglo de bits, el intento de leer exclusivamente BoolEx[2], falla, es necesario leer toda la palabra en que ese elemento está contenido, o sea hay que leer obligatoriamente un entero de 32 bits a partir de BoolEx[0] y luego determinar el valor de BoolEx[2] haciendo un AND lógico con la máscara correspondiente. 
En escritura el procedimiento es análogo. No existe manera de cambiar el valor de BoolEx[2] sin modificar los valores de los restantes bits. La opción de enviar los últimos valores conocidos en los restantes bits puede provocar efectos colaterales como los mencionados anteriormente. Por ello, en este caso específico, la estrategia que usa el manejador consiste en efectuar una lectura previa del arreglo de bits, modificar los valores necesarios y luego escribir el bloque completo. Observe que esta estrategia no elimina el problema del efecto colateral, ya que mientras se lee el arreglo de bits y se manipula, otro dispositivo puede modificar uno de esos bits sin que el SCADA se entere de esos cambios y dar por tanto una ”salida falsa” . Sin embargo la probabilidad de que esto ocurra es mucho más pequeña y es prácticamente la única estrategia posible. 
Podemos ilustrar el esquema que usa el manejador Ethernet / IP para la escritura de arreglos de bits con el siguiente ejemplo: Supongamos se necesita modificar los valores BoolEx[40], BoolEx[70] y BoolEx[90]. El manejador lee el bloque de enteros de 32 bits más pequeño que contiene esos 3 bits. En el caso mencionado sería el bloque de bits desde el bit 32 hasta el 96. Luego el manejador modifica los tres bits necesarios y efectúa una operación de salida. 
Arreglos multidimensionales y estructuras 
En la versión actual del manejador no es posible obtener información sobre las dimensiones de los tipos estructurados o sobre los límites de los arreglos. Esto compromete la estrategia de optimización. Por ejemplo supongamos que tenemos un arreglo bidimensional AuxData que contiene una matriz de 3x3 valores enteros. El PLC organiza internamente los valores por filas, es decir en el orden: 
[0,0]; [0,1]; [0,2]; [1,0]; [1,1]; [1,2]; [2,0]; [2,1]; [2,2] 
Supongamos además que, en un instante dado, se desean leer los valores A[0, 1] y A[1, 0]. Observe que la “distancia” entre ambos elementos es de solo 2 elementos y por tanto es posible leer ambos valores en una transacción única ordenando leer 3 valores del arreglo a partir de AuxData[0, 1]. Sin embargo para hacer eso el manejador debe “conocer” que el rango de variación del primer subíndice es de 0 a 2. Sin esta información es imposible calcular la distancia entre los dos elementos del arreglo. Como la versión actual del manejador no obtiene la información de tipo de los tipos complejos la optimización en este caso es imposible y el sistema decide fragmentar la solicitud en dos solicitudes, una para el elemento AuxData[0, 1] y otra para el elemento AuxData[1, 0]. Observe, sin embargo, que si los elementos a leer, fueran AuxData[0,0] y AuxData[0,2], el sistema reconoce adecuadamente que es posible obtenerlos en una sola transacción ya que no necesita conocer el rango de variación del primer índice para calcular la distancia. 
De esta manera, una regla práctica que puede incrementar el rendimiento del manejador es agrupar las variables que se leen con un período similar en arreglos unidimensionales y disminuir el uso de arreglos multidimensionales. 
IMPLEMENTACIÓN DEL PROTOCOLO. 
La biblioteca del Protocolo EtherNet/IP se desarrolló en dos capas fundamentales; una capa se encarga de implementar el protocolo de encapsulación Ethernet. La otra implementa la capa CIP que es encapsulada en paquetes Ethernet. . Los principales comandos que ofrece la capa de encapsulación Ethernet implementada son:
• Comando RegisterSession. Se encarga de registrar la sesión TCP en el dispositivo. 
• Comando SendRRData. Permite el envío de los datos encapsulados que usan los mensajes explícitos (o no conectados) hacia el dispositivo. Estos mensajes son procesados por el Ruteador presente en todos los dispositivos Ethernet/IP y posteriormente enviados al objeto correspondiente. 
• Comando SendUnitData. Permite el envío de los datos encapsulados que usan los mensajes conectados hacia el dispositivo. Estos mensajes van dirigidos directamente a las aplicaciones u objetos con las cuales se concretó la conexión CIP. 
• Comando UnRegisterSession. Cierra la sesión TCP abierta anteriormente con el comando RegisterSession. 
Encima de esta capa de encapsulación se encuentra la capa de control CIP que se encarga de todo el control de los datos del dispositivo. Los dispositivos son modelados por CIP como una colección de objetos. Cada clase a la que pertenecen los objetos ofrece servicios y posee atributos y comportamiento. Algunos de los servicios comunes implementados son: 
• Servicio GetAttributesAll. Retorna el contenido de todos los atributos de una clase CIP u objeto. 
• Servicio SetAttributesAll. Modifica los valores de todos los atributos de una clase CIP u objeto. 
• Servicio GetAttributeSingle. Retorna el contenido de un atributo específico de un objeto CIP. 
• Servicio SetAttributeSingle. Modifica el contenido de un atributo especifico de un objeto CIP. 
• Servicio MultipleServicePacket. Solicita varios servicios a la vez empaquetados, estos servicios son ejecutados independientemente en el dispositivo y los resultados de dichos servicios son enviados de vuelta empaquetados previamente. 
La capa CIP permite la comunicación entre el SCADA y la(s) aplicación(es) productora(s) en el dispositivo usando mensajes conectados, así como la comunicación usando mensajes explícitos o “desconectados”. Para que la comunicación del SCADA con un dispositivo se lleve a cabo el protocolo debe ser capaz de generar las direcciones de las variables de forma que el dispositivo las entienda correctamente. Para esto se implementaron todos los segmentos de una dirección, permitiendo así cubrir el esquema de direccionamiento presente en las extensiones del protocolo CIP basado en tags. 
Los segmentos que pueden componer una dirección y están implementados en el protocolo son: 
• Port Segment. Indica el puerto por el que se accedera al dispositivo. 
• Logical Segment. Utilizado para definir una dirección particular a un objeto. 
• Network Segment. Usado para especificar parámetros de red que pueden ser requeridos para transmitir un mensaje al dispositivo a través de la red. 
• Symbolic Segment. Contiene un mensaje simbólico en forma de cadena textual. 
• Data Segment. Este es el segmento que permite el envío de datos entre las aplicaciones. 
Conjuntamente con los servicios comunes esta implementación del protocolo cuenta además con los servicios de la extensión Logix para dispositivos Ethernet/IP. 
PARÁMETROS DE CONFIGURACIÓN. 
La interfaz genérica de comunicación con los dispositivos del proyecto SCADA PDVSA [9] permite la configuración “en caliente” de los manejadores y de los dispositivos. Para ello ofrece funciones que permiten recuperar y establecer los parámetros de configuración de los mismos. 
En la siguiente tabla se muestran los parámetros de configuración más importantes de los dispositivos Ethernet/Ip así como sus valores por defecto. 
TABLA 8 
PARÁMETROS DE CONFIGURACIÓN DEL DISPOSITIVO 
Nombre del Parámetro 
Descripción 
PlcPath 
Permite especificar donde se encuentra el dispositivo con el cual se hará la conexión. El formato de la cadena es el siguiente: IP (dirección IP del PLC), Slot y Backplane. 
Valor por defecto: "192.168.11.155,1,0" 
IpConnectionTimeOut 
Establece la cantidad de milisegundos que se esperará para establecer la conexión en cada intento. Una vez vencido este tiempo sin lograr la conexión se reportará un error. 
Valor por defecto: 1000 
IpReceiveTimeOut 
Establece la cantidad de milisegundos por los que se esperará una respuesta del dispositivo antes de abortar la espera y declarar la transacción fallida. 
Valor por defecto: 1000 
RetriesCount 
Define la cantidad de veces en que una transacción se intentará repetir en caso de falla. 
Valor por defecto: 3 
PlcType 
Define el tipo de interfaz con que se efectuará el acceso. Es un tipo enumerado con la siguiente declaración: 
enum PlcType 
{ 
PLC5, 
SLC500, 
LGX 
}; 
Valor por defecto: LGX 
CONCLUSIONES 
El manejador implementado para el SCADA PDVSA ofrece un mecanismo configurable y adaptable para la comunicación del SCADA con dispositivos EtherNet/Ip que soporten el Protocolo Industrial Abierto. Con las optimizaciones realizadas es posible captar hasta 16,000 tags analógicos por segundo y hasta 34,000 tags boleanos por segundo de acuerdo a las pruebas realizadas. Esto satisface
plenamente los requerimientos de un sistema de supervisión industrial. 
El desarrollo de futuras versiones de este manejador debe incluir: 
• Navegar por los dispositivos asociados al manejador usando la capacidad del protocolo EtherNet/Ip de “rastrear” las identidades de los dispositivos conectados a la red. 
• Navegar por el espacio de variables de cada dispositivo. 
• Recuperar información de tipo de los arreglos multidimensionales y de los tags estructurados en general, con el objetivo de refinar los mecanismos de optimización abordados en “Decisiones de Diseño” 
. 
AGRADECIMIENTOS 
Este trabajo ha sido patrocinado de manera directa o indirecta por: 
• Petróleos de Venezuela S.A. (PDVSA) 
• Universidad de Ciencias Informáticas (UCI). 
• Grupo de Desarrollo “EROS”, SerCoNi. 
Los autores expresan su agradecimiento a todas las personas de las instituciones mencionadas que han posibilitado la realización de este trabajo. 
REFERENCIAS 
[1] Rockwell Automation,, “ControlLogix Selection Guide”, Publication 1756-SG001A-US-P from http://www.ab.com, July 2000. 
[2] Rockwell Automation, “Logix5000 Data Access”, Pub.1756- RM005A-EN-E from http://www.ab.com, March 2000. 
[3] Open DeviceNet Vendor Assoc., “EtherNet/IP Specification, Preliminary Release 8”, http://www.odva.org, March 2001. 
[4] Stéphane Jeanne, “Ethernet/IP Library for Linux (TuxEip)”, 2006, from http://s.jeanne@tuxplc.net 
[5] Gage Ron “CELL Programmers Guide”, Jun. 2001 from http://freshmeat.net/projects/cell/ 
[6] Skeie, T. Johannessen, S. Holmeide, O., “Timeliness of real-time IP communication in switched industrial Ethernet networks”, IEEE Transactions on Industrial Informatics, ISSN: 1551-3203, Volume 2, Feb. 2006 
[7] Oka Minoru, Suganuma Hiromu, “Ethernet-Based Open Industrial Protocol-Its Implementation and Evaluation”, Omron Tech, ISSN:0474-1315, Volume.42;No.2, 2002. 
[8] Davies, S, “Industrial ethernet - The fundamentals of ethernet/IP”, : Computing & Control Engineering Journal, ISSN: 0956-3385, Volume 18, Feb.-March 2007. 
[9] Trujillo Rafael, “Especificación de la interfaz genérica con el SCADA”, versión 4.1, Entregable según Anexo 13 del convenio Marco PDVSA ALBET, Nov. 2007 
[10] Christopher Kohlhoff, “Networking Library Proposal for TR2”, Sept. 2006, from http://asio.sourceforge.net

Más contenido relacionado

La actualidad más candente

La actualidad más candente (17)

Exposicion proyectos en electronica 2013
Exposicion proyectos en electronica 2013Exposicion proyectos en electronica 2013
Exposicion proyectos en electronica 2013
 
Funcionamiento Interno
Funcionamiento InternoFuncionamiento Interno
Funcionamiento Interno
 
Hart
HartHart
Hart
 
Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5Creando un SCADA con Python y HTML5
Creando un SCADA con Python y HTML5
 
Protocolos de comunicación de red
Protocolos  de comunicación  de redProtocolos  de comunicación  de red
Protocolos de comunicación de red
 
Redes informaticas
Redes informaticasRedes informaticas
Redes informaticas
 
Se5611 t3 extra_camacho
Se5611 t3 extra_camachoSe5611 t3 extra_camacho
Se5611 t3 extra_camacho
 
Protocolos de comunicación de red
Protocolos  de comunicación  de redProtocolos  de comunicación  de red
Protocolos de comunicación de red
 
Fundamentos del tcp
Fundamentos del tcpFundamentos del tcp
Fundamentos del tcp
 
Presentacion de modalidad
Presentacion de modalidadPresentacion de modalidad
Presentacion de modalidad
 
Direcciones ip
  Direcciones ip  Direcciones ip
Direcciones ip
 
TALLER # 11 MODELO TCP/IP
TALLER # 11 MODELO TCP/IPTALLER # 11 MODELO TCP/IP
TALLER # 11 MODELO TCP/IP
 
Itn instructor ppt_chapter6
Itn instructor ppt_chapter6Itn instructor ppt_chapter6
Itn instructor ppt_chapter6
 
Protocolos de internet
Protocolos de internetProtocolos de internet
Protocolos de internet
 
Vip genial conceptos de red 127145558 capa-de-transport-e
Vip genial conceptos de red 127145558 capa-de-transport-eVip genial conceptos de red 127145558 capa-de-transport-e
Vip genial conceptos de red 127145558 capa-de-transport-e
 
Proyinv5 aprogrameq3
Proyinv5 aprogrameq3Proyinv5 aprogrameq3
Proyinv5 aprogrameq3
 
Proxy java
Proxy javaProxy java
Proxy java
 

Similar a Articulo EthernetIP

Paper practica2
Paper practica2Paper practica2
Paper practica2
carensil
 
01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx
01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx
01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx
MiriamGmez39
 
Almacenamiento y Respaldo
Almacenamiento y RespaldoAlmacenamiento y Respaldo
Almacenamiento y Respaldo
carcordoz
 
Tarea bus de_campo[1]
Tarea bus de_campo[1]Tarea bus de_campo[1]
Tarea bus de_campo[1]
jotikaus
 
Topografia de red
Topografia de redTopografia de red
Topografia de red
Claire1-2
 
Estudio de los sistemas de comunicación industrial basado.pptx
Estudio de los sistemas de comunicación industrial basado.pptxEstudio de los sistemas de comunicación industrial basado.pptx
Estudio de los sistemas de comunicación industrial basado.pptx
RonaldoRomero7
 
Domótica Hacia el hogar digital
Domótica Hacia el hogar digitalDomótica Hacia el hogar digital
Domótica Hacia el hogar digital
John Jairo
 
Protocolo de internet
Protocolo de internetProtocolo de internet
Protocolo de internet
lizbeth
 

Similar a Articulo EthernetIP (20)

Paper practica2
Paper practica2Paper practica2
Paper practica2
 
01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx
01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx
01.PRESENTACIÓN COMUNICACIÓN INDUSTRIAL.pptx
 
Protocolo de comunicación Modbus TCP/IP mediantearduino y factory IO
Protocolo de comunicación Modbus TCP/IP mediantearduino y factory IOProtocolo de comunicación Modbus TCP/IP mediantearduino y factory IO
Protocolo de comunicación Modbus TCP/IP mediantearduino y factory IO
 
Protocolo tcp esteban
Protocolo tcp estebanProtocolo tcp esteban
Protocolo tcp esteban
 
Almacenamiento y Respaldo
Almacenamiento y RespaldoAlmacenamiento y Respaldo
Almacenamiento y Respaldo
 
Tarea bus de_campo[1]
Tarea bus de_campo[1]Tarea bus de_campo[1]
Tarea bus de_campo[1]
 
Protocolo De Seguridad Y De Red
Protocolo De Seguridad Y De RedProtocolo De Seguridad Y De Red
Protocolo De Seguridad Y De Red
 
PROTOCOLO PROFINET
PROTOCOLO PROFINETPROTOCOLO PROFINET
PROTOCOLO PROFINET
 
Modelo de Referencia TCP/IP
Modelo de Referencia TCP/IPModelo de Referencia TCP/IP
Modelo de Referencia TCP/IP
 
Topografia de red
Topografia de redTopografia de red
Topografia de red
 
Estudio de los sistemas de comunicación industrial basado.pptx
Estudio de los sistemas de comunicación industrial basado.pptxEstudio de los sistemas de comunicación industrial basado.pptx
Estudio de los sistemas de comunicación industrial basado.pptx
 
Domótica Hacia el hogar digital
Domótica Hacia el hogar digitalDomótica Hacia el hogar digital
Domótica Hacia el hogar digital
 
Protocolo de internet
Protocolo de internetProtocolo de internet
Protocolo de internet
 
D resumenes
D resumenesD resumenes
D resumenes
 
Modelo tcp ip
Modelo tcp ipModelo tcp ip
Modelo tcp ip
 
Curso redes-control-device-net
Curso redes-control-device-netCurso redes-control-device-net
Curso redes-control-device-net
 
Modelo de referencias osi
Modelo de referencias osiModelo de referencias osi
Modelo de referencias osi
 
Osi
OsiOsi
Osi
 
Protocolos de red
Protocolos de redProtocolos de red
Protocolos de red
 
Protocolos de red
Protocolos de redProtocolos de red
Protocolos de red
 

Articulo EthernetIP

  • 1. MANEJADOR ETHERNET/IP PARA LOS PLC CONTROLLOGIX EN EL PROYECTO SCADA PDVSA. Rafael Trujillo Codorníu1, Antonio Cedeño Pozo2, Luis E. García Hernández3, Yasmany Pérez Pérez 4 1 Instituto Superior Minero Metalúrgico, Las Coloradas s/n, Moa, Holguín, rafaeltc@uci.cu 2 Universidad de Ciencias Informáticas, Carr. San Antonio de los Baños, km 2,5. acedeno@estudiantes.uci.cu 3 Universidad de Ciencias Informáticas, Carr. San Antonio de los Baños, km 2,5. legarcia@estudiantes.uci.cu 4 Universidad de Ciencias Informáticas, Carr. San Antonio de los Baños, km 2,5. yyperez@estudiantes.uci.cu Abstract ⎯ The Allen-Bradley ControlLogix line of programmable logic controllers (PLCs) offers several interfaces: Ethernet, ControlNet, DeviceNet, RS-232 and others. The ControlLogix Ethernet interface module 1756- ENET uses EtherNet/IP, the Industrial Ethernet Protocol. A Open Source Driver for the PDVSA´s Supervisory and Industrial Control System (SCADA) has been developed that utilizes this EtherNet/IP protocol. Features, performance, and design decisions of this driver are presented. Index Terms ⎯ Ethernet Industrial Protocol, Ethernet/Ip, ControlLogix, SCADA, Driver. INTRODUCCIÓN Muchos subsistemas de la empresa petrolera Venezolana PDVSA son controlados con PLCs Allen Bradley de la línea ControlLogix [1]. Para integrar estos PLC al SCADA que se desarrolla en la mencionada empresa era necesario el diseño de un manejador que garantizara el acceso en lectura y escritura a los datos de estos controladores desde el SCADA a través del Protocolo EtherNet / Ip. EtherNet/IP (Ethernet/Industrial Protocol) [3] es un protocolo de red en niveles para aplicaciones de automatización industrial. Basado en los protocolos estándar TCP/IP, utiliza los ya bastante conocidos hardware y software Ethernet para establecer un nivel de protocolo para configurar, acceder y controlar dispositivos de automatización industrial. Ethernet/IP clasifica los nodos de acuerdo a los tipos de dispositivos preestablecidos, con sus actuaciones específicas. El protocolo de red Ethernet/IP está basado en el Protocolo de Control e Información (Control and Information Protocol - CIP) utilizado en DeviceNet™ y ControlNet™. Basados en esos protocolos, Ethernet/IP ofrece un sistema integrado completo, enterizo, desde la planta industrial hasta la red central de la empresa. EtherNet/IP permite que los dispositivos de control intercambien información crítica con requerimientos estrictos de tiempo ([6], [7]). Entre los dispositivos que pueden interconectarse con EtherNet/IP se encuentran sensores, actuadores y, en general, dispositivos simples de entrada / salida, dispositivos de alta complejidad tales como robots, controladores lógicos programables y otros. Esta particularidad lo hace muy atractivo para enlazar, bajo un mismo protocolo, todos los eslabones del proceso, desde el SCADA hasta los dispositivos más simples (ver Figura 1). FIGURA. 1
  • 2. Ethernet/IP es un protocolo de red en niveles, apropiado al ambiente industrial. Es el producto acabado de cuatro organizaciones que aunaron esfuerzos en su desarrollo y divulgación para aplicaciones de automatización industrial: La Open DeviceNet Vendor Association (ODVA), la Industrial Open Ethernet Association (IOANA), la Control Net International (CI) y la Industrial Ethernet Association (IEA). Estas mismas organizaciones se están esforzando para atender a las demandas de conectividad física que el ambiente severo de pie de fábrica exige. Ya se reportan más de 1 millón de nodos instalados en el mundo con este protocolo [8]. EtherNet/IP usa el protocolo CIP (Control and Information Protocol). El CIP es un protocolo que abarca las capas de red, transporte y aplicación del modelo OSI y es compartido también por ControlNet y por DeviceNet, solo que estos últimos utilizan diferentes medios físicos y consecuentemente diferentes capas de enlace. EtherNet/IP hace uso de la tecnología estándar de Ethernet y TCP para transportar los paquetes de comunicación CIP. El resultado es una capa abierta de comunicación por encima de los altamente populares protocolos Ethernet y TCP/IP. EtherNet/IP proporciona además un modelo productor / consumidor para el intercambio de información de control crítica en el tiempo. El modelo productor / consumidor permite el intercambio de información entre un dispositivo emisor y varios dispositivos receptores (o consumidores) sin la necesidad de que se envíe el mismo bloque de datos varias veces a diferentes destinos. Para EtherNet/IP, esto se logra haciendo uso de la capa de red y de transporte CIP conjuntamente con la tecnología IP “multicast”. De esta manera muchos dispositivos EtherNet/IP pueden recibir la misma información producida por otro dispositivo. El protocolo de Control e Información (CIP) es un protocolo “peer to peer” orientado a objetos que proporciona conexiones entre dispositivos industriales y dispositivos de alto nivel (controladores). CIP es independiente del medio físico y de la capa de enlace de datos. CIP define un esquema orientado a conexión para facilitar todas las comunicaciones. Una conexión CIP proporciona un camino entre múltiples “usuarios finales” Los “usuarios finales” de una conexión son aplicaciones que requieren compartir datos. A la transmisión asociada a una conexión en particular se le asigna un identificador cuando se establece la conexión (CID). EtherNet / IP proporciona un protocolo que puede encapsular el protocolo CIP, o incluso otros protocolos en tramas Ethernet. El protocolo de encapsulación define un puerto TCP reservado que debe ser soportado por todos los dispositivos EtherNet/IP. Todos los dispositivos EtherNet/IP deben aceptar, como mínimo, dos conexiones TCP en el puerto 0xAF12. De igual forma el protocolo de encapsulación define un puerto UDP reservado que debe ser soportado por todos los dispositivos EtherNet/IP. Todos los dispositivos EtherNet/IP deben aceptar paquetes UDP por el puerto 0xAF12. Como UDP, a diferencia de TCP, no tiene la posibilidad de reordenar los paquetes, siempre que se usa UDP para enviar mensajes encapsulados, el mensaje completo debe contenerse en un paquete simple de UDP. Todos los mensajes encapsulados, enviados vía TCP, o vía UDP al puerto 0xAF12, deben estar compuestos por una cabecera de longitud fija de 24 bytes seguida de una porción opcional de datos. La longitud total del mensaje encapsulado (incluyendo la cabecera) está limitada a 65535 bytes. Tanto la capa de protocolo a que se refiere el presente documento, como el manejador que se expone, usan el llamado protocolo industrial abierto, que es un dialecto de Ethernet / IP creado por Allen Bradley. Este dialecto permite acceder a los valores de las variables a través de nombres simbólicos o “tags” que cumplen determinadas reglas sintácticas y semánticas. PROTOCOLO INDUSTRIAL ABIERTO El protocolo industrial abierto es una extensión de CIP realizada por Allen Bradley para acceder a la información de los dispositivos de una manera simple, a través de nombres simbólicos. Esta extensión se encapsula por el mecanismo anteriormente explicado, en paquetes IP. Es compatible con, al menos los siguientes controladores: ControlLogix, PLC2, PLC5, SLC500, Micrologix, FlexLogix y otros. Los sistemas de control de la familia de controladores programables Logix de Allen Bradley han evolucionado enormemente sobre sus predecesores. Dentro de los aspectos más importantes de su evolución se encuentra su forma de programación. En este sentido, uno de los avances más importante es el direccionamiento basado en nombres o tags. Tradicionalmente, los controladores eran programados mediante posiciones de memoria. Es decir, cada instrucción estaba asociada a una posición de memoria dentro del mapa de memoria del controlador, la cual podía ser una variable física (una entrada o una salida a campo) o bien una variable interna. Las posiciones de memoria se caracterizaban por tener nomenclatura propia que no podía asociarse a una variable de proceso (por ejemplo MD159 o MW10). Una buena forma de programación obligaba a definir un nombre o "tag" asociado a cada variable de proceso de modo tal que se corresponda con una posición de memoria en el controlador. Teniendo este vínculo, era posible comprender la programación. Una vez terminada la lógica de control, el software de programación generaba dos archivos. El primero contenía el algoritmo de control propiamente dicho con las instrucciones direccionadas mediante posiciones de memoria (lo llamaremos archivo fuente) y el segundo contenía los nombres de las variables asociadas a cada posición de memoria (lo llamaremos archivo referencial). Ambos
  • 3. archivos eran necesarios para poder visualizar el código de control tal como había sido programado originalmente. Por otro lado, esta forma de programación obligaba a tener definida la ingeniería de conexionado y cableado antes de empezar a programar. Es decir, se debía conocer exactamente el lugar en los módulos de entradas y salidas donde se conectarían las señales de campo. También era necesario definir si la arquitectura de control sería centralizada o distribuida. Sólo después de tener terminada dicha ingeniería, el programador tendría la información necesaria para comenzar el desarrollo de la lógica de control. La programación mediante posiciones de memoria fue muy utilizada en el pasado cuando las herramientas de software no estaban muy desarrolladas (muchas de ellas comenzaron trabajando bajo el sistema operativo DOS) y la memoria de los controladores era pequeña, costosa y de baja integración. Los nuevos desarrollos han potenciado las herramientas de programación y los controladores han incrementado significativamente la cantidad de memoria, producto de su reducción de costo y gran capacidad de integración. En virtud de ello nace la programación basada en “tags”. La misma resuelve todos los problemas antes planteados y potencia la forma de programar como nunca antes. Los controladores de la familia Logix de Allen Bradley ([2]) no utilizan posiciones de memoria para elaborar su estrategia de control. La programación se hace directamente utilizando el nombre de la variable o “tag”. Es decir, una instrucción se referencia sólo con el tag de la variable asociada a ella. Los tags son nativos al procesador y de ese modo se descargan al mismo, no existiendo la necesidad de que el software compile el programa y lo traduzca a un lenguaje propio del controlador. Así, ya no existen dos archivos generados por el software de programación (uno con el código fuente y otro con los tags) sino que se genera uno solo, el cual se descarga en el controlador Logix directamente. De este modo, al conectarse mediante una PC a un equipo Logix, se adquiere el código de control completo tal como fuera creado (incluyendo los tags correspondientes) sin necesidad de un archivo referencial de respaldo en la PC. Esta arquitectura es extremadamente flexible y permite a los desarrolladores de sistemas de control diseñar sus sistemas sin estar constreñidos por los requerimientos de organización de la memoria que se encuentran en los PLC clásicos. La naturaleza de los dispositivos permite crear datos dentro del controlador estructurados de acuerdo a las necesidades de la aplicación. A diferencia de los protocolos clásicos (como Modbus) en que el usuario tiene acceso a un conjunto fijo de registros o de bits, la extensión de ControlLogix trata la memoria de manera mucho más dinámica, Su versatilidad permite al usuario seleccionar el nombre de las variables, los tipos de datos, crear estructuras complejas e incluso arreglos, de manera parecida a como los programadores de PC esperan manejar la memoria. Hay un precio, no obstante, por esta flexibilidad y ese precio es la complejidad de la comunicación. En los PLC clásicos donde los datos se arreglan convenientemente en una lista consecutiva de registros o de bits, la obtención de un gran volumen de datos es simplemente cuestión de especificar el punto de comienzo en la memoria y la longitud del segmento a leer. Con los procesadores ControlLogix, esto deja de ser así, precisamente debido a las amplias posibilidades en la organización interna de la memoria que los mismos presentan. Para lograr tasas adecuadas de recuperación de la información se necesitan diferentes esquemas de optimización, los cuales se expondran en el punto “Decisiones de diseño”. Estructura de los tags Para facilitar la comprensión de algunas de las decisiones de diseño exponemos brevemente la conformación de los Tags en el protocolo Industrial Abierto. Los “tags” son nombres simbólicos por los cuales se accede a la información del PLC. Estos son identificadores con no más de 40 caracteres de longitud. Los tags tienen un alcance. De acuerdo a su alcance se clasifican en tags del controlador (o sea globales) a los cuales se pueden acceder directamente y tags del programa (locales) a los cuales no se puede acceder desde un dispositivo externo. Cada tag tiene un tipo de dato que define la organización interna del dato y las posibles operaciones sobre el mismo. Se soportan tipos atómicos tales como bit, byte, palabras de 16 bits, de 32 bits y tipos estructurados. La siguiente tabla identifica los principales tipos de datos simples predefinidos: TABLA I LECTURA DE 200 ARREGLOS DE 200 ENTEROS. Dato Almacenado Tipo Correspondiente Bit BOOL Arreglo de Bits BOOL ARRAY Entero de 8 bits SINT Entero de 16 bits INT Entero de 32 bits DINT Flotante de 32 bits REAL Las estructuras son agrupaciones de diferentes tipos de datos que funcionan como una unidad simple y sirven a un propósito específico. El acceso a un miembro de la estructura se logra utilizando el operador miembro (.). La sintaxis es: TagEstructurado.miembro Dependiendo de las necesidades de la aplicación se pueden crear estructuras adicionales. Los arreglos son secuencias de elementos que tienen el mismo tipo de dato y que pueden accederse a partir de su posición dentro del arreglo. Para diferenciar los elementos de un arreglo se utilizan índices detrás del nombre del
  • 4. arreglo y encerrados por corchetes ([2]). Se pueden crear arreglos unidimensionales, bidimensionales o tridimensionales. El primer elemento de un arreglo siempre es el elemento con índice cero. Un miembro de una estructura puede ser un arreglo y a su vez un arreglo puede ser un arreglo de un tipo complejo, como una estructura, de manera que los siguientes tags son posibles: Motor[4].eje.temperatura Pozo.Muestras[7] Estos tags deben interpretarse de la siguiente manera; en el primer caso tenemos un tag (Motor) de tipo arreglo unidimensional. El tipo de cada elemento del arreglo es una estructura que tiene un miembro cuyo identificador es eje, que a su vez es de tipo estructura también y tiene un miembro llamado temperatura. Por tanto Motor[4].eje.temperatura se refiere al miembro temperatura de la estructura referida por el miembro eje de la estructura Motor[4]. En el segundo caso el arreglo Muestras es un miembro de la estructura referenciada por el tag Pozo. DECISIONES DE DISEÑO Como se mencionó anteriormente en los PLC clásicos (por ejemplo con el protocolo Modbus) donde los datos se arreglan convenientemente en una lista consecutiva de registros o de bits, la obtención de un gran volumen de datos en una transacción simple es relativamente sencilla. Con el protocolo extendido Ethernet IP de ControlLogix, esto deja de ser así, precisamente debido a las amplias posibilidades en la organización interna de la memoria que los mismos presentan. Para lograr tasas adecuadas de recuperación de la información se necesitan diferentes esquemas de optimización, que se exponen a continuación: Conexiones persistentes En todas de las bibliotecas de código abierto consultadas (ver, por ejemplo, [4] y [5]), se usa el esquema de establecer totalmente la conexión al dispositivo en cada operación de lectura y liberar la conexión al finalizar la operación. Este comportamiento presenta varias ventajas, entre ellas; mantiene menos recursos del dispositivo ocupados, la lógica de programación es más simple puesto que no requiere el envío de latidos periódicos para mantener la conexión activa y tiene un rendimiento aceptable para aplicaciones pequeñas. Con el objeto de comprobar cual era la penalidad de abrir y cerrar las conexiones en cada operación se efectuaron varias pruebas con un PLC Prosoft de Allen Bradley , dos de las cuales se muestran en las Tablas 2 y 3. En la primera prueba, cuyos resultados se muestran en la Tabla 2, se leyó del dispositivo un arreglo de 200 enteros de manera consecutiva (200 veces) y se midió el tiempo empleado en toda la transacción, usando el esquema de conexiones persistentes (es decir sin abrir y cerrar las conexiones en cada operación) y usando el esquema de conexiones volátiles. La prueba se repitió 3 veces para evitar que condiciones aleatorias en la red usada afectara los resultados. En la segunda prueba, cuyos resultados se muestran en la Tabla 3, se compararon las lecturas de arreglos de 400 BOOL. Los resultados arrojan una diferencia estable y significativa entre ambos esquemas del orden de 4 a 1, lo cual indica que la apertura y cierre de la conexión TCP y la creación y destrucción del objeto CIP conexión, en el PLC, es una operación costosa y que si bien el esquema de conexiones volátiles es admisible para pequeñas aplicaciones (admite mas de 40 peticiones de lectura por segundo) , para la operación de un SCADA es inadmisible. TABLA 2 LECTURA DE 200 ARREGLOS DE 200 ENTEROS. Modelo Repetición Tiempo (ms) CON CONEXIÓN PERSISTENTE I II III 2227 2316 2198 SIN CONEXIÓN PERSISTENTE I II III 9014 8780 8823 TABLA 3 LECTURA DE 200 ARREGLOS DE 400 BOOL. Modelo Repetición Tiempo (ms) CON CONEXIÓN PERSISTENTE I II III 2218 2187 2245 SIN CONEXIÓN PERSISTENTE I II III 8659 8713 8801 Lectura de arreglos. Densidad de los paquetes Una de las maneras clásicas de optimizar las lecturas es tratar de recuperar la mayor cantidad de valores en una transacción simple. En virtud de que mediante el protocolo podemos obtener los elementos de un arreglo (siempre y cuando el tamaño total del mensaje no exceda 488 bytes) si necesitáramos leer en un instante de tiempo los tags Temp[1] y Temp[9] podríamos optar por hacerlo en una transacción leyendo los 9 elementos del arreglo a partir de Temp[1]. Por supuesto que en este caso estamos forzando al PLC a entregarnos información no útil (los valores Temp[2], Temp[3], ..., Temp[8] ), lo cual también tiene un costo. El concepto de densidad de un paquete o bloque de registros refleja la proporción de datos útiles, con respecto al total, en
  • 5. el paquete solicitado. Una densidad muy baja en los paquetes podría tener un impacto negativo en el rendimiento al incrementar innecesariamente la cantidad de datos a transferir y ocupar el CPU del PLC en transferencias innecesarias. Por otra parte obligar el uso de densidades muy altas puede provocar fragmentación en las solicitudes lo que también puede disminuir el rendimiento. Para poder decidir cual es la densidad óptima en el protocolo se decidieron efectuar pruebas que permitieran definir el costo de la lectura de un arreglo con respecto al costo de un elemento simple. Los resultados de las pruebas se muestran en las Tablas 4 y 5. En el primer caso se compara la lectura de un tag entero con respecto a un arreglo de 200 enteros. La operación se repite 200 veces y se mide el tiempo total resultante. La prueba se repite 3 veces para eliminar la influencia de factores aleatorios que puedan afectar la misma. TABLA 4 LECTURA DE 200 TAGS Modelo Repetición Tiempo (ms) TAG SIMPLE ENTERO I II III 2127 2116 2158 TAG ARREGLO DE 200 ENTEROS I II III 2216 2325 2188 De igual modo se valoró la lectura de un arreglo de 400 BOOL con respecto a un tag simple de tipo BOOL. TABLA 5 LECTURA DE 200 TAGS Modelo Repetición Tiempo (ms) TAG SIMPLE BOOL I II III 2172 2164 2198 TAG ARREGLO DE 400 BOOL I II III 2239 2178 2254 Como se aprecia en los resultados no existen diferencias estadísticamente significativas entre la lectura de tags simples y de arreglos. Por tanto se tomó la decisión, para el manejador, de no exigir una densidad mínima en los paquetes. Si se necesitan, en un instante dado, dos elementos de un arreglo con índices i y j el manejador procederá a leer el segmento completo desde i hasta j, siempre y cuando el segmento en cuestión no ocupe un número de bytes que exceda el máximo admitido por el protocolo (generalmente 488 bytes). Si la “distancia” entre los dos elementos provoca un segmento de longitud mayor a 488 bytes se procede a fragmentar la solicitud de lectura en 2 solicitudes. La implementación del mecanismo de optimización se basa en la asociación, a cada tag, de un nuevo tag que denominamos tag Base. El tag Base de una variable es un tag que se obtiene del tag de la variable de acuerdo a las siguientes reglas: • Si el tag termina con una referencia a un miembro de una estructura o es un tag simple el tag Base coincide simplemente con el tag. • Si el tag de la variable termina en una referencia a un elemento de un arreglo, el tagBase se obtiene sustituyendo el último índice del arreglo por el valor cero. Las variables que tengan el mismo tag Base se diferenciarán entre si, obviamente, por el último índice en la referencia al arreglo. Al ser elementos de un mismo arreglo tienen un mismo tipo de dato simple . Supongamos que las variables que comparten un mismo tag Base dTT son y sean los índices correspondientes. Sea el mayor de los índices e el menor de ellos. Entonces las variables serán asignadas a un mismo bloque de encuesta para lectura y recuperadas en un solo mensaje si y sólo si el producto de la diferencia nvvv,,,21Kniii,,,21Kmaximininvvv,,,21K)(minmaxii− por la cantidad de bytes que ocupa el tipo de dato es menor que 488. Adicionalmente si la operación es de escritura se exige que los índices de las variables sean consecutivos (ver el punto “Escritura de arreglos”), a excepción de los arreglos de bits, en que se admiten salidas de datos no consecutivos. dT En la tabla siguiente se muestran algunos ejemplos de tags y sus correspondientes tag Base. TABLA 6 RELACIÓN ENTRE LOS TAGS Y LOS TAGS BASE Tags Tag Base Temp1 Temp1 Temp1.value Temp1.value Temp1[3] Temp1[0] Temp1[3].Value Temp1[3].Value Temp1[3].Data[4] Temp1[3].Data[0] Temp1[3].Data[5,2] Temp1[3].Data[5,0] De igual manera se evaluó el costo de escrituras de tags simples con respecto a escrituras de arreglos. Las pruebas son similares a las expuestas anteriormente y se muestran en la Tabla 7. TABLA 7 ESCRITURA DE 200 TAGS Modelo Repetición Tiempo (ms) TAG SIMPLE ENTERO I II III 2571 2463 2499 TAG ARREGLO DE 200 ENTEROS I II III 2639 2558 2584
  • 6. Como se aprecia no hay diferencias estadísticamente significativas entre los tiempos de respuesta a solicitudes de escritura simple o escritura múltiple. Escritura de arreglos Como se concluyó en al punto anterior, la estrategia que se implementó en el manejador EtherNet/IP es la de combinar las solicitudes de lectura de elementos de un arreglo en una transferencia única desde el menor índice solicitado hasta el mayor. Esta estrategia lleva a una reducción significativa de los tiempos de transferencia pero su aplicación en la operación de escritura puede tener efectos colaterales: la escritura de paquetes cuya densidad no sea cero modifica valores de variables que pueden haber cambiado desde el último acceso que se hizo a las mismas y cuya alteración era innecesaria. Por ejemplo supongamos que se desean modificar las variables Temp[1] y Temp[3]. Supongamos que, extrapolando la estrategia usada en la lectura, se decide realizar la escritura en un solo bloque, desde la variable Temp[1] hasta Temp[3]. Esto compromete a modificar de manera correcta Temp[2]. Para ello, una variante posible es depositar el último valor conocido. Pero esto puede ser incorrecto si se considera que ese valor pudo haber sido modificado por otras fuentes (por ejemplo un HMI) sin que el cambio fuera conocido por el SCADA. Es por ello que la estrategia usada para las escrituras es exigir que la densidad de los paquetes sea de 100%. Esto quiere decir que los paquetes de escritura serán fragmentados hasta que cada fragmento quede sin “salidas falsas”. Una excepción a esta regla la constituyen los llamados arreglos de bits. Las variables booleanas en ControlLogix pueden organizarse en arreglos de bits, en cuyo caso en un entero de 32 bits del PLC se almacenan 32 valores BOOL. Si BoolEx es una arreglo de bits, el intento de leer exclusivamente BoolEx[2], falla, es necesario leer toda la palabra en que ese elemento está contenido, o sea hay que leer obligatoriamente un entero de 32 bits a partir de BoolEx[0] y luego determinar el valor de BoolEx[2] haciendo un AND lógico con la máscara correspondiente. En escritura el procedimiento es análogo. No existe manera de cambiar el valor de BoolEx[2] sin modificar los valores de los restantes bits. La opción de enviar los últimos valores conocidos en los restantes bits puede provocar efectos colaterales como los mencionados anteriormente. Por ello, en este caso específico, la estrategia que usa el manejador consiste en efectuar una lectura previa del arreglo de bits, modificar los valores necesarios y luego escribir el bloque completo. Observe que esta estrategia no elimina el problema del efecto colateral, ya que mientras se lee el arreglo de bits y se manipula, otro dispositivo puede modificar uno de esos bits sin que el SCADA se entere de esos cambios y dar por tanto una ”salida falsa” . Sin embargo la probabilidad de que esto ocurra es mucho más pequeña y es prácticamente la única estrategia posible. Podemos ilustrar el esquema que usa el manejador Ethernet / IP para la escritura de arreglos de bits con el siguiente ejemplo: Supongamos se necesita modificar los valores BoolEx[40], BoolEx[70] y BoolEx[90]. El manejador lee el bloque de enteros de 32 bits más pequeño que contiene esos 3 bits. En el caso mencionado sería el bloque de bits desde el bit 32 hasta el 96. Luego el manejador modifica los tres bits necesarios y efectúa una operación de salida. Arreglos multidimensionales y estructuras En la versión actual del manejador no es posible obtener información sobre las dimensiones de los tipos estructurados o sobre los límites de los arreglos. Esto compromete la estrategia de optimización. Por ejemplo supongamos que tenemos un arreglo bidimensional AuxData que contiene una matriz de 3x3 valores enteros. El PLC organiza internamente los valores por filas, es decir en el orden: [0,0]; [0,1]; [0,2]; [1,0]; [1,1]; [1,2]; [2,0]; [2,1]; [2,2] Supongamos además que, en un instante dado, se desean leer los valores A[0, 1] y A[1, 0]. Observe que la “distancia” entre ambos elementos es de solo 2 elementos y por tanto es posible leer ambos valores en una transacción única ordenando leer 3 valores del arreglo a partir de AuxData[0, 1]. Sin embargo para hacer eso el manejador debe “conocer” que el rango de variación del primer subíndice es de 0 a 2. Sin esta información es imposible calcular la distancia entre los dos elementos del arreglo. Como la versión actual del manejador no obtiene la información de tipo de los tipos complejos la optimización en este caso es imposible y el sistema decide fragmentar la solicitud en dos solicitudes, una para el elemento AuxData[0, 1] y otra para el elemento AuxData[1, 0]. Observe, sin embargo, que si los elementos a leer, fueran AuxData[0,0] y AuxData[0,2], el sistema reconoce adecuadamente que es posible obtenerlos en una sola transacción ya que no necesita conocer el rango de variación del primer índice para calcular la distancia. De esta manera, una regla práctica que puede incrementar el rendimiento del manejador es agrupar las variables que se leen con un período similar en arreglos unidimensionales y disminuir el uso de arreglos multidimensionales. IMPLEMENTACIÓN DEL PROTOCOLO. La biblioteca del Protocolo EtherNet/IP se desarrolló en dos capas fundamentales; una capa se encarga de implementar el protocolo de encapsulación Ethernet. La otra implementa la capa CIP que es encapsulada en paquetes Ethernet. . Los principales comandos que ofrece la capa de encapsulación Ethernet implementada son:
  • 7. • Comando RegisterSession. Se encarga de registrar la sesión TCP en el dispositivo. • Comando SendRRData. Permite el envío de los datos encapsulados que usan los mensajes explícitos (o no conectados) hacia el dispositivo. Estos mensajes son procesados por el Ruteador presente en todos los dispositivos Ethernet/IP y posteriormente enviados al objeto correspondiente. • Comando SendUnitData. Permite el envío de los datos encapsulados que usan los mensajes conectados hacia el dispositivo. Estos mensajes van dirigidos directamente a las aplicaciones u objetos con las cuales se concretó la conexión CIP. • Comando UnRegisterSession. Cierra la sesión TCP abierta anteriormente con el comando RegisterSession. Encima de esta capa de encapsulación se encuentra la capa de control CIP que se encarga de todo el control de los datos del dispositivo. Los dispositivos son modelados por CIP como una colección de objetos. Cada clase a la que pertenecen los objetos ofrece servicios y posee atributos y comportamiento. Algunos de los servicios comunes implementados son: • Servicio GetAttributesAll. Retorna el contenido de todos los atributos de una clase CIP u objeto. • Servicio SetAttributesAll. Modifica los valores de todos los atributos de una clase CIP u objeto. • Servicio GetAttributeSingle. Retorna el contenido de un atributo específico de un objeto CIP. • Servicio SetAttributeSingle. Modifica el contenido de un atributo especifico de un objeto CIP. • Servicio MultipleServicePacket. Solicita varios servicios a la vez empaquetados, estos servicios son ejecutados independientemente en el dispositivo y los resultados de dichos servicios son enviados de vuelta empaquetados previamente. La capa CIP permite la comunicación entre el SCADA y la(s) aplicación(es) productora(s) en el dispositivo usando mensajes conectados, así como la comunicación usando mensajes explícitos o “desconectados”. Para que la comunicación del SCADA con un dispositivo se lleve a cabo el protocolo debe ser capaz de generar las direcciones de las variables de forma que el dispositivo las entienda correctamente. Para esto se implementaron todos los segmentos de una dirección, permitiendo así cubrir el esquema de direccionamiento presente en las extensiones del protocolo CIP basado en tags. Los segmentos que pueden componer una dirección y están implementados en el protocolo son: • Port Segment. Indica el puerto por el que se accedera al dispositivo. • Logical Segment. Utilizado para definir una dirección particular a un objeto. • Network Segment. Usado para especificar parámetros de red que pueden ser requeridos para transmitir un mensaje al dispositivo a través de la red. • Symbolic Segment. Contiene un mensaje simbólico en forma de cadena textual. • Data Segment. Este es el segmento que permite el envío de datos entre las aplicaciones. Conjuntamente con los servicios comunes esta implementación del protocolo cuenta además con los servicios de la extensión Logix para dispositivos Ethernet/IP. PARÁMETROS DE CONFIGURACIÓN. La interfaz genérica de comunicación con los dispositivos del proyecto SCADA PDVSA [9] permite la configuración “en caliente” de los manejadores y de los dispositivos. Para ello ofrece funciones que permiten recuperar y establecer los parámetros de configuración de los mismos. En la siguiente tabla se muestran los parámetros de configuración más importantes de los dispositivos Ethernet/Ip así como sus valores por defecto. TABLA 8 PARÁMETROS DE CONFIGURACIÓN DEL DISPOSITIVO Nombre del Parámetro Descripción PlcPath Permite especificar donde se encuentra el dispositivo con el cual se hará la conexión. El formato de la cadena es el siguiente: IP (dirección IP del PLC), Slot y Backplane. Valor por defecto: "192.168.11.155,1,0" IpConnectionTimeOut Establece la cantidad de milisegundos que se esperará para establecer la conexión en cada intento. Una vez vencido este tiempo sin lograr la conexión se reportará un error. Valor por defecto: 1000 IpReceiveTimeOut Establece la cantidad de milisegundos por los que se esperará una respuesta del dispositivo antes de abortar la espera y declarar la transacción fallida. Valor por defecto: 1000 RetriesCount Define la cantidad de veces en que una transacción se intentará repetir en caso de falla. Valor por defecto: 3 PlcType Define el tipo de interfaz con que se efectuará el acceso. Es un tipo enumerado con la siguiente declaración: enum PlcType { PLC5, SLC500, LGX }; Valor por defecto: LGX CONCLUSIONES El manejador implementado para el SCADA PDVSA ofrece un mecanismo configurable y adaptable para la comunicación del SCADA con dispositivos EtherNet/Ip que soporten el Protocolo Industrial Abierto. Con las optimizaciones realizadas es posible captar hasta 16,000 tags analógicos por segundo y hasta 34,000 tags boleanos por segundo de acuerdo a las pruebas realizadas. Esto satisface
  • 8. plenamente los requerimientos de un sistema de supervisión industrial. El desarrollo de futuras versiones de este manejador debe incluir: • Navegar por los dispositivos asociados al manejador usando la capacidad del protocolo EtherNet/Ip de “rastrear” las identidades de los dispositivos conectados a la red. • Navegar por el espacio de variables de cada dispositivo. • Recuperar información de tipo de los arreglos multidimensionales y de los tags estructurados en general, con el objetivo de refinar los mecanismos de optimización abordados en “Decisiones de Diseño” . AGRADECIMIENTOS Este trabajo ha sido patrocinado de manera directa o indirecta por: • Petróleos de Venezuela S.A. (PDVSA) • Universidad de Ciencias Informáticas (UCI). • Grupo de Desarrollo “EROS”, SerCoNi. Los autores expresan su agradecimiento a todas las personas de las instituciones mencionadas que han posibilitado la realización de este trabajo. REFERENCIAS [1] Rockwell Automation,, “ControlLogix Selection Guide”, Publication 1756-SG001A-US-P from http://www.ab.com, July 2000. [2] Rockwell Automation, “Logix5000 Data Access”, Pub.1756- RM005A-EN-E from http://www.ab.com, March 2000. [3] Open DeviceNet Vendor Assoc., “EtherNet/IP Specification, Preliminary Release 8”, http://www.odva.org, March 2001. [4] Stéphane Jeanne, “Ethernet/IP Library for Linux (TuxEip)”, 2006, from http://s.jeanne@tuxplc.net [5] Gage Ron “CELL Programmers Guide”, Jun. 2001 from http://freshmeat.net/projects/cell/ [6] Skeie, T. Johannessen, S. Holmeide, O., “Timeliness of real-time IP communication in switched industrial Ethernet networks”, IEEE Transactions on Industrial Informatics, ISSN: 1551-3203, Volume 2, Feb. 2006 [7] Oka Minoru, Suganuma Hiromu, “Ethernet-Based Open Industrial Protocol-Its Implementation and Evaluation”, Omron Tech, ISSN:0474-1315, Volume.42;No.2, 2002. [8] Davies, S, “Industrial ethernet - The fundamentals of ethernet/IP”, : Computing & Control Engineering Journal, ISSN: 0956-3385, Volume 18, Feb.-March 2007. [9] Trujillo Rafael, “Especificación de la interfaz genérica con el SCADA”, versión 4.1, Entregable según Anexo 13 del convenio Marco PDVSA ALBET, Nov. 2007 [10] Christopher Kohlhoff, “Networking Library Proposal for TR2”, Sept. 2006, from http://asio.sourceforge.net