Introducción
Esta debería haber sido la primera práctica: una pequeña introducción a RSLogix 5000 y a la organización interna de un proyecto. La idea es ver cómo está estructurado, qué significa cada carpeta del árbol y dónde se configuran los elementos principales.
En el proyecto original, cada directorio se podía pulsar para mostrar su descripción. En esta versión queda organizado como artículo normal para que sea más fácil de leer, ampliar y consultar desde móvil.
Estructura del proyecto
El árbol del proyecto permite acceder a la configuración del controlador, las tareas, los programas, las instrucciones Add-On, los tipos de datos, las tendencias y la configuración de entradas y salidas.
Controller y Controller Tags
En Controller, con botón derecho y Properties, accedemos a las propiedades de la CPU. Desde ahí se configuran parámetros generales del controlador que conviene revisar antes de empezar a programar.
Dentro de Controller Tags se declaran las variables de ámbito global. Todas las variables creadas aquí serán accesibles desde cualquier programa, tarea o evento del proyecto.
Hay cuatro tipos habituales de tags:
- Base: el tipo normal que usamos al crear un tag nuevo.
- Alias: una referencia a otra variable, muy usada para nombrar entradas y salidas físicas con nombres más claros.
- Produced: variable producida para intercambiar datos con otro controlador.
- Consumed: variable consumida desde otro controlador.
Los tags Produced y Consumed se utilizan cuando queremos intercambiar información entre dos o más controladores, ya sea en el mismo backplane o a través de redes como ControlNet o EtherNet/IP. Hay un ejemplo relacionado en la práctica de intercambio de datos entre controladores.
Una vez definido el tipo de tag, debemos seleccionar el tipo de dato. Podemos usar tipos estándar o tipos definidos por nosotros en Data Types.
Si tenemos dos controladores en el mismo backplane, el campo Scope indica a qué controlador hace referencia la variable. En External Access se define si la variable será de lectura, escritura o lectura/escritura. En Style seleccionamos el formato de visualización: decimal, hexadecimal, etc.
Controller Fault Handler es el directorio donde podemos declarar un programa que se ejecute cuando se produzca un fallo mayor en el controlador. Power-Up Handler permite ejecutar un programa después de una pérdida de tensión si el controlador vuelve en modo Run.
Después de crear esos programas, queda un último paso: entrar en las propiedades del controlador y, en la pestaña Advanced, seleccionar el programa que se ejecutará para cada caso.
Tasks
En Tasks se definen las tareas que se ejecutarán en el controlador. Al crear un proyecto aparece por defecto MainTask, que se ejecuta cíclicamente y contiene MainProgram, donde normalmente empezamos a escribir el programa.
En controladores antiguos se podía trabajar con una MainTask y varias tareas periódicas o de evento. En controladores más modernos aumentan los límites de tareas y programas disponibles, pero la idea general se mantiene: organizar la ejecución del código según la necesidad del proceso.
También existe la opción de usar programación basada en Phases, relacionada con modelos como ISA S88, IEC 61512 y PackML. De forma resumida, una fase representa una parte del proceso y sus estados: Running, Holding, Stopping, Restarting, etc. Para pasar de un estado a otro se usan transiciones e instrucciones específicas como PSC, POVR o PCMD.
Al declarar una nueva tarea, se genera el archivo Program Tags, donde se declaran variables de ámbito local al programa. Estas variables solo son accesibles dentro de ese programa. Dos programas distintos pueden tener variables con el mismo nombre sin interferir entre sí.
Las tareas de evento disparadas por una condición se conocen como processor input interrupt (PII). Las tareas cíclicas temporizadas se conocen como selectable timed interrupt (STI).
Add-On Instruction
En Add-On Instruction podemos crear nuestras propias instrucciones reutilizables. Es una forma de encapsular lógica específica para usarla dentro del mismo proyecto o en otros proyectos futuros.
Al crear una Add-On Instruction se le asigna un nombre y se abre su editor de configuración. La definición incluye información general, descripción, lenguaje de programación, revisión y parámetros.
En la pestaña Parameters definimos los parámetros de entrada, salida o entrada/salida. Para los parámetros de entrada y salida se suelen usar tipos simples. Si necesitamos trabajar con un tipo como STRING, podemos definirlo como entrada/salida.
La siguiente pestaña permite declarar variables internas. Son variables locales de la instrucción y no serán accesibles desde fuera. En este ejemplo se declara una variable entera que se usará como índice para recorrer un array.
La pestaña Scan Modes define cómo se ejecutará la instrucción. Por defecto, EnableIn está a true y el código se ejecuta cuando se cumplen las condiciones de llamada. También existen modos como Prescan, Postscan o EnableInFalse.
La pestaña Signature permite firmar la instrucción con un identificador único para protegerla frente a modificaciones. Las pestañas restantes se usan para historial de cambios y ayuda de la instrucción.
Después de crear la Add-On, RSLogix 5000 genera automáticamente un nuevo tipo de dato dentro de Data Types con el nombre de la instrucción.
Una vez definida la instrucción, podemos editar su código. En este ejemplo, pasando un índice se recuperan valores de un array compuesto por una estructura definida previamente en Data Types.
Para usar la instrucción en un programa, primero creamos una variable del tipo de dato de nuestra Add-On y después insertamos la instrucción en la rutina correspondiente.
Si la estructura de datos está correctamente rellenada, al pasar el índice a la función nos devolverá los datos esperados. Es un ejemplo sencillo, pero sirve para entender cómo se crean y reutilizan las Add-On Instructions.
Data Types
En Data Types definimos nuestros propios tipos de datos, conocidos como UDT o User Defined Data Types.
Por defecto existen tipos como BOOL, INT, DINT, REAL, STRING y otros más complejos. A partir de ellos podemos crear estructuras adaptadas a nuestro proceso. Un ejemplo sería crear un tipo llamado Ingrediente, con nombre, peso y porcentaje.
También podemos crear un tipo que contenga otros tipos definidos por nosotros. Por ejemplo, un tipo Receta que contenga tres ingredientes.
Hasta aquí hemos definido tipos de datos, pero no variables. Si queremos guardar varias recetas, podemos crear a nivel de controlador un array de 10 elementos del tipo Receta, llamado Recipes.
La siguiente imagen muestra el array definido con el tipo de dato creado anteriormente.
I/O Configuration
En I/O Configuration se configura el hardware del sistema. Al crear un proyecto indicamos qué tipo de controlador vamos a utilizar y, según ese controlador, tendremos disponibles unas tarjetas u otras.
Un ejemplo claro se ve al comparar un proyecto para SoftLogix con otro para ControlLogix. La configuración de hardware cambia según la plataforma.
La configuración consiste en indicar el tipo de tarjeta y el número de slot donde está ubicada. Después, cada módulo tendrá sus propias propiedades de configuración.
Artículos relacionados