Introducción al RSLogix 5000
Esta deberia haber sido la primera practica, una pequeña introducción al RSLogix 5000 y a la organización de un proyecto, como esta estructurado. Voy a ir actualizandola y añadiendo contenido poco a poco, para visualizar la descripción de cada uno de los apartados haz un click de ratón, sobre cada uno de los directorios.








Controller RSLogix5000
1.-Controller RSLogix5000 (Boton derecho -> Propiedades) Aqui vamos a acceder a las propiedades de nuestra CPU que mas adelante analizaremos.
Controller Tags Dentro de este apartado es donde vamos a declarar las variables que serán de ambito global, aquí son llamadas tags de Controlador. Todas la variables que declaremos aquí serán accesibles desde cualquier programa, Tarea o evento que desarrollemos en nuestro proyecto.
Hay 4 tipos de Tags que podemos crear, de tipo Base,Alias,Producidas y Consumidas. La primera de ellas Base podriamos decir que es el tipo que usamos por defecto al crear un nuevo Tag.
Las del tipo Alias, son variables que apuntan a otra variable, y como bien dice su descripción un alias para hacer referencia a la misma variable, estas normalmente son usadas cuando nos referimos a las entradas/salidas de nuestro controlador.
Las del tipo Producidas y Consumidas son las variables que declaramos cuando queremos intercambiar información entro dos o mas Controladores, ya sea en el mismo BlackPlane, o en una red ControlNet, Ethernet/IP. Se puede ver un ejemplo en la siguiente practica

Una vez ya hemos definido el tipo de tag que va a ser, tenemos que seleccionar el tipo de datos, aqui podemos usar los que ya vienen definidos por defecto, o podemos hacer uso de los que hayamos definido nosotros mismo, se verá en el apartado Data Types.
En caso de que tengamos en el mismo BackPlane dos controladores, deberemos seleccionar en Scope (Ambito) a que Controlador hace referencia.
External Acces: Como será la variable, de lectura, escritura o lectura y escritura. En Style vamos a seleccionar el formato de visualizaón, ya sea Decimal, Hexadecimal etc...
Con esto ya hemos hecho una breve descripción a la hora de declarar una variable de Controlador y sus caracteristicas.
Controller Fault Handler Este directorio por defecto esta vacio, y es donde declararemos un nuevo Programa que se ejecutara en caso de que se produzca un fallo en nuestro Controlador. Para que se ejecute tiene que ser un fallo de los llamados mayores. Tipos de Fallos
Power-Up Handler Al igual que el anterior, este directorio por defecto esta vacio, en el caso de que nos interese ejecutar un programa tras una perdida de tensión de nuestro Controlador y esté en modo Run, el programa que hayamos definido será el que se ejecutará.
La siguiente imagen muestra un pequeño ejemplo de la declaración de un programa para Controller Fault Handler y Power-Up Handler.
Una vez que ya tenemos creado nuestros programas, nos falta un último paso para realizar su configuración, tenemos que ir a las propiedades del Controlador y en la pestaña Advanced, deberemos de especificar el programa que nos interese para ambos posibles casos.


Tasks
Dentro del apartado Task (Tareas) es donde vamos a definir como bien dice su nombre las tareas que se van a ejecutar, por defecto al crear un nuevo proyecto está la MainTask que es la tarea que se ejecutara ciclicamente y a su vez contiene el MainProgram donde escribiremos nuestro programa.
En los viejos Controladores existia la posibilidad de crear 32 tareas periodicas o 1 MainTask (Ejecucion ciclica) y 31 Periodicas Tareas ya sean de Evento o Ciclicas, que a su vez podian contener cada uno de ellas 32 Programas, en los nuevos si mal no recuerdo es posible crear hasta 100 programas y se pueden crear hasta 100 Tareas.
A su vez, cada vez que declaramos una nueva tarea o ya sea la principal tenemos la opción de utilizar la programación basada en Phases , que a su vez este tipo de modelo es referente a:
• U.S. standard ISA S88.01-1995 and its IEC equivalent IEC 61512-1-1998, commonly
referred to as S88
• PackML, which was previously under the supervision of OMAC but is now a working
group within ISA
Muy resumido seria las fases por la que pasa una parte de un proceso y los estados del mismo, es decir esta Running, Holding, Stopping, Restarting etc.. Para pasar de un estado a otro son las transiciones que se producen, estas transiciones requieren del uso de instrucciones como PSC, POVR,PCMD etc... (No lo he usado nunca, no puedo entrar en mas detalles, si mas adelante realizo una prueba para comprobar su funcionamiento lo actualizaré con un ejemplo)
Nos vamos a centrar en el MainProgram que es el principal, aquí es donde declararemos una rutina que será la principal y desde donde llamares a las demas que esten dentro del mismo programa, he mencionado que puede haber de 32 a 100 programas en un Tarea, dependiendo del Controlador.
Al declarar una nueva tarea, automaticamente se genera el archivo Program Tags, donde declararemos las variables de ambito local a la tarea que la creo, estas variables solo son accesibles desde dentro de la tarea, si tenemos dos tareas independientes puede haber una variable con el mismo nombre, pero cada una de ellas es de ambito especifico a su tarea.
Una vez que tenemos la MainTask que es la tarea ciclica, podemos declarar otras tareas periodicas, ya sean ciclicas o de evento.
Las tareas de evento que se accionan por un trigger son las llamadas processor input interrupt (PII), last tareas Cíclicas son las selectable timed interrupt (STI).
Vamos a ver una imagen de cada una de las tareas que podemos declarar.


Motion
En fase de Actualización ...
Add-on Instruction
Dentro del Directorio Add-On Instruction es donde vamos a crear nuestras propias funciones, al igual que creamos nuestros propios tipo de datos, aqui definimos las funciones para realizar en nuestro programa algo especifico, y que a su vez posteriormente vamos a poder reutilizar en el mismo u otros proyectos.
Como acabamos de mencionar un Add-on es una función, al crear una nueva, le asignamos el nombre que nos interese, seguidamente se nos abre su editor para realizar la configuración

La definicion de un Add-On consta de varias partes, la primera de ellas seria la general, donde se especifica nombre, una descripción de la misma, el lenguaje de programación que vamos a emplear, y a medida que se vayan realizando modificaciones sobre la misma, un cambio en la revisión.

Una vez cumplimentado esta primera parte, vamos a pasar a la pestaña Parameters, aqui es donde vamos a definir los parametros de entrada, salida o entrada y salida, para los tipos de entrada y salida estan limitados a tipo de datos simples, si nos interesa como es este ejemplo utilizar el tipo de datos String, especificamos que sea de entrada/salida

Habiendo especificado los parametos que vamos a utilizar, la siguiente pestaña hace referencia a las variables internas que vayamos a necesitar, estas variables son a nivel local de la función, no serán accesibles desde fuera de la misma.
En mi ejemplo voy a declarar una variable del tipo entero que sera una variable indice para recorrer un array.

La pestaña Scan Modes es para configurar como se ejecutara nuestra función, por defecto el bit EnableIn esta a true, y se ejecutara nuestro código cuando se cumplan las condiciones en la llamada a la función, pero existe la posibilidad de configurar la ejecución es Prescan, Postscan o EnableInFalse. En este ejemplo lo dejamos por defecto, pero es bueno conocer las otras posibilidades.
Las siguiente pestaña es Signature, hace referencia a firmar la función con un Identificador único para proteger la función de modificaciones, mas adelante un capitulo dedicado a ello.
Las siguientes pestañas harán referencia a la creación de la función (Change History) y una ayuda del funcionamiento de la función que debemos de cumplimentar, al igual que como utilizarla en los lenguajes de programación.
Pero siguiendo con el ejemplo, ya tenemos creada nuestra propia Add-On, automaticamente, en el Directorio DataTypes se nos genera un nuevo archivo con el nombre de nuestra función.

Una vez hemos definido toda la información necesaria y el modo de ejecutarse de nuestra función, podemos pasar editar el código, aqui es muy sencillo, simplemente pasando un indice vamos a recuperar los valores de un Array que esta compuesto de nuestra estructura de datos definidos en el ejemplo de Data Types

Hasta el momento, hemos creado nuestra nuestra propia función, ahora vamos ha hacer uso de ella, en el programa que nos interese, simplemente tenemos que insertarla. Pero antes o despues de ello, tenemos que crear una nueva variable que sea del tipo de datos de nuestra Add-On, vamos a ver el ejemplo:

Ahora vamos a ver como quedaria la función, y los parametros que le vamos a pasar, los parametros que son definidos como InOut, se pasan directamente en la propia función, sin embargo los parametros de entrada y salida hay que pasarselos anteriormente o posteriormente, mi parametro de entrada era Indice, pasandole el número de indice me devolvera los datos que tengo en el Array, vamos a comprobarlo desde el monitor de Tags, donde podemos forzarlos.


DataTypes
Dentro del Directorio Data Types es donde vamos a definir nuestro propios tipos de Datos, llamado como UDT (User Data Types).
Por defecto ya hay configurado una serie de tipos de datos, BOOL,INT,DINT,REAL,STRING y otros mas complejos. Con todos estos nosotros podemos crearnos los que nos interese para nuestro programa. Un ejemplo seria crear un tipo de datos, llamado Ingrediente, el cual va a contener el nombre, el peso y el porcentaje, sobre el directorio, botón derecho new Data Types.

Ahora a su vez, podriamos definir otro tipo de datos que contenga el que nosotros acabamos de definir y crear nuestra propia estructura de datos, ahora vamos a crear otro llamado Receta que va a contener tres ingredientes.

Hasta aqui, hemos definido una serie de tipo de datos, pero no hemos creado ninguna variable de estos tipos, vamos a suponer que nos interesa crear una array de nuestra estructura y creamos a nivel de controlador una array de 10 elementos del tipo Receta, llamado Recipes.

-La siguiente imagen muestra el array que acabamos de definir del tipo de datos que hemos definido, valga la redundancia.


Trends
En fase de Actualización ...
I/O Configuration
Dentro del Directorio I/O Configuration es donde vamos a configurar nuestro Hardware, cuando creamos un nuevo proyecto uno de los parametros que tenemos que especificar es que tipo de Controlador vamos a utilizar, dependiendo del tipo de Controlador, cuando vayamos a configurar el hardware, tendremos unas tarjetas u otras.
Un claro ejemplo de esto se puede observar cuando configuramos un proyecto para trabajar con SoftLogix 1ª Imagen y otro con un ControlLogix 2ª Imagen.


A la hora de configurarlo simplemente se trata de especificar el tipo de tarjeta que tenemos y el número de slot donde esta ubicada, independientemente de esto, luego entraria la configuración de cada tarjeta en sus propiedades.