scieee AI-readable full text Open interactive document viewer

Aplicación para el control de una carga programable para una máquina de inducción usando un PLC

Becerra Pérez, Javier

Abstract

El objeto de este proyecto es la creación y configuración de una herramienta digital basada en MATLAB y sus librerías de comunicaciones industriales OPC DA para el control de un controlador lógico programable SIEMENS S7-300 para la generación de cargas programadas para una máquina de inducción del laboratorio de Ingeniería de Sistemas y Automática de la Escuela Técnica Superior de Ingeniería de la Universidad de Sevilla.

Full text

aEquation Chapter 1 Section 1 Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de la Telecomunicación Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Dpto. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Autor: Javier Becerra Pérez Tutores: Daniel Rodríguez Ramírez Sevilla, 2022 Manuel Garrido Satue iii Trabajo Fin de Grado Grado en Ingeniería de las Tecnologías de Telecomunicación Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Autor: Javier Becerra Pérez Tutores: Daniel Rodríguez Ramírez Profesor titular Manuel Garrido Satue Profesor sustituto interino Dpto. Ingeniería de Sistemas y Automática Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2022 v Trabajo Fin de Grado: Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Autor: Javier Becerra Pérez Tutores: Daniel Rodríguez Ramírez Manuel Garrido Satue El tribunal nombrado para juzgar el Proyecto arriba indicado, compuesto por los siguientes miembros: Presidente: Vocales: Secretario: Acuerdan otorgarle la calificación de: Sevilla, 2022 El Secretario del Tribunal vii A mi familia A mis profesores ix Agradecimientos A mis padres, Antonio y Carmen, por su infatigable afán de darnos a sus hijos la mejor educación personal y académica. Por brindarme la oportunidad de hacer esto posible con vuestro esfuerzo y por vuestra infinita paciencia. Sin vosotros esto no hubiera sido posible. A mi hermana Irene, por permitirme aprender de su experiencia para que mi camino fuese más ameno. A mi familia, por el constante apoyo que he recibido siempre. A mis amigos y compañeros, por el apoyo, por las largas jornadas de estudio, por las risas, por los buenos ratos que hemos pasado y por los no tan buenos. En especial a Ángel, Pablo y Edgar, por ser uno de los pilares fundamentales y a todos mis compañeros de la Escuela. A Kivi. Gracias a todos. Javier Becerra Pérez Alumno del grado de Ingeniería de las Tecnologías de Telecomunicación Sevilla, 2022 ÍNDICE DE TABLAS Tabla 2-1. Características técnicas CPU 313C-5BG04 12 Tabla 2-2. Características técnicas CPU 313C-2 DP 6CF03-0AB0 14 Tabla 2-3. Configuración de entradas analógicas del módulo de expansión SM331 15 Tabla 2-4. Configuración de salidas analógicas del módulo de expansión SM332 16 Tabla 2-5. Datasheet del procesador de comunicaciones CP 343-1 Lean 17 Tabla 3-1. Direccionamiento de entradas y salidas analógicas del PLC1. 28 Tabla 3-2. Direccionamiento de entradas del módulo SM331. 29 Tabla 3-3. Direccionamiento de salidas del módulo SM332. 30 Tabla 4-1. Parámetros de entrada del bloque de función CONT_C. 39 Tabla 4-2. Parámetros de salida del bloque de función CONT_C. 42 Tabla 4-3. Bits de marcas de ciclo. 50 xvii ÍNDICE DE FIGURAS Figura 2-1. Diagrama del sistema. 11 Figura 2-2. CPU SIEMENS 313-5BG04-0AB0 13 Figura 2-3. CPU SIEMENS 313-2 DP 6CF03-0AB0 14 Figura 2-4. Procesador de comunicaciones CP 343-1 Lean 17 Figura 2-5. Fuente de alimentación 6EP1 331-1SL11 24V – 2A 18 Figura 2-6. Icono del software STEP 7. 18 Figura 2-7. Icono del software KEPServerEX. 18 Figura 2-8. Icono del software MATLAB. 19 Figura 2-9. Diagrama de montaje sobre los carriles DIN. 19 Figura 2-10. Esquema eléctrico de conexión de los módulos de E/S. 20 Figura 2-11. Diagrama de conexión SIMATIC NET - PC. 21 Figura 3-1. Ventana de creación de nuevo proyecto en STEP7. 22 Figura 3-2. Ventana de proyectos de usuario en STEP7. 23 Figura 3-3. Ventana principal de proyecto en STEP7. 23 Figura 3-4. Menu de proyecto en STEP7. 24 Figura 3-5. Vista componentes de proyecto en STEP7. 24 Figura 3-6. Ventana de configuración hardware en STEP7. 25 Figura 3-7. Ventana de propiedades del módulo CP-343 en STEP7. 25 Figura 3-8. Ventana de configuración hardware en STEP7. 26 Figura 3-9. Ventana de configuración hardware en STEP7. 27 Figura 3-10. Ventana de propiedades de E/S analógicas en STEP7. 27 Figura 3-11. Ventana de configuración hardware del PLC2 en STEP7. 28 Figura 3-12. Ventana de configuración de entradas analógicas del PLC2 en STEP7. 29 Figura 3-13. Ventana de configuración de salidas analógicas del PLC2 en STEP7.. 30 Figura 3-14. PC ADAPTER USB to MPI/DP/PPI - AMSAMOTION 31 Figura 3-15. Ventana de ajuste de interface PG/PC en STEP7. 31 Figura 3-16. Icono de carga de programa en PLC en STEP7. 32 Figura 3-17. Ventana 1 del wizard de configuración de canal de KEPServerEX. 32 Figura 3-18. Ventana 2 del wizard de configuración de canal de KEPServerEX. 33 Figura 3-19. Ventana 3 del wizard de configuración de canal de KEPServerEX. 33 Figura 3-20. Ventana 4 del wizard de configuración de canal de KEPServerEX. 34 Figura 3-21. Ventana 5 del wizard de configuración de canal de KEPServerEX. 35 Figura 4-1. Diagrama PID típico. 37 Figura 4-2. Ventana de bloques del proyecto en STEP7. 37 Figura 4-3. Ventana de creación de un bloque de organización en STEP7. 38 xix Figura 4-4. Ventana de OBs cíclicos en STEP7. 38 Figura 4-5. Diagrama de bloques de la función CONT_C. 39 Figura 4-6. Función CONT_C las librerías del programa. 44 Figura 4-7. Vista DB PID. 45 Figura 4-8. Vista función CONT_C en el OB35. 45 Figura 4-9. Bloque de función FC3 – MODO RAMPA. 48 Figura 4-10. Vista DB SP GRADUAL. 48 Figura 4-11. Vista de la llamada a la función MODO PROGRAMADO en el OB35. 49 Figura 4-12. Segmento 1 en el OB1. 50 Figura 4-13. Ventana de configuración de marcas de ciclo en STEP7. 51 Figura 4-14. Segmento 2 en el OB1. 51 Figura 4-15. Segmento 3 en el OB1. 51 Figura 4-16. Segmento 4 en el OB1. 52 Figura 4-17. Segmento 5 en el OB1. 52 Figura 4-18. Segmento 6 en el OB1. 53 Figura 4-19. Segmento 7 en el OB1. 53 Figura 4-20. Segmento 8 en el OB1. 54 Figura 4-21. Modelo general de un motor de corriente continua. 55 Figura 4-22. Llamada a la función MOTOR CC. 57 Figura 4-23. Segmento 1 del OB1 en el PLC2. 58 Figura 4-24. Segmento 2 del OB1 en el PLC2. 58 Figura 4-25. Segmento 3 del OB1 en el PLC2. 59 Figura 4-26. Segmento 4 del OB1 en el PLC2. 59 Figura 5-1. Desplegable de configuración del servidor OPC. 60 Figura 5-2. Icono de creación de nuevas etiquetas en KEPServerEX. 61 Figura 5-3. Ventana de creación de nuevas etiquetas en KEPServerEX. 61 Figura 5-4. Ventana de propiedades de nuevas etiquetas en KEPServerEX. 62 Figura 5-5. Icono de OPC Quick Client en KEPServerEX. 63 Figura 5-6. Ventana de visualización de tags en OPC Quick Client. 63 Figura 5-7. Diagrama de flujo de uso de la aplicación de control. 65 Figura 5-8. Ventana principal de la aplicación de control. 66 Figura 5-9. Ventana de configuración de cliente OPC de la aplicación de control. 67 Figura 5-10. Ventana principal de la aplicación de control sin conexión. 81 Figura 5-11. Ventana principal de la aplicación de control en modo escalón. 82 Figura 5-12. Ventana de la aplicación de control en modo escalón con tabla de datos. 83 Figura 5-13. Vista del archivo .mat exportado en MATLAB. 83 Figura 5-14. Ventana principal de la aplicación de control en modo rampa sin conexión. 84 Figura 5-15. Ventana principal de la aplicación de control en modo rampa. 85 Figura 5-16. Vista del archivo programa.mat exportado en MATLAB. 86 Figura 5-17. Seg. 3 del OB1 del PLC1 para configuración de tiempo de cambio de referencia. 86 Figura 5-18. Ventana principal de la aplicación de control en modo programado. 87 Figura 6-1. Tabla de datos obtenidos por la aplicación durante un ensayo. 88 xxi 1 1 INTRODUCCIÓN on el creciente desarrollo de la llamada Industria 4.0, la necesidad de crear sistemas industriales conectados ha demandado el desarrollo de tecnologías de comunicación que converjan los campos ITOT en las industrias, entendiéndose que todas las máquinas de campo necesitan estar conectadas a sistemas de adquisición de datos que faciliten su diagnóstico, compartan información sobre los procesos y permitan recolectar estos datos para su posterior tratamiento. El objeto de este proyecto es, haciendo uso del estándar de comunicaciones industriales OPC (OLE for Process Control), crear una plataforma de control para un controlador lógico programable S7-300 de SIEMENS sobre el entorno de creación de aplicaciones de MATLAB (AppDesigner). Esta aplicación sirve como interfaz hombre-máquina para realizar cambios de referencia sobre un motor de corriente continua encargado de generar cargas para un motor de inducción, oponiéndose a su giro. La aplicación consta de varios modos de funcionamiento que se detallarán en capítulos posteriores, así como todos los componentes del sistema, su guía de desarrollo e instalación, su puesta en marcha y, finalmente, el uso de la aplicación. C Cuando partas hacia Ítaca pide que tu camino sea largo y rico en aventuras y conocimiento. K. Kavafis, «Ítaca» Introducción 2 11 2 ARQUITECTURA DEL SISTEMA ntes de comenzar a definir la arquitectura del sistema máquina-aplicación, es necesario asentar la base teórica sobre la que se sustenta e introducir al lector en las tecnologías utilizadas. A continuación, se desarrollarán estos conceptos y después, entraremos en mayor profundidad. 2.1. Descripción general del sistema A continuación, se describe la arquitectura del sistema completo formado desde los dispositivos de campo hasta la aplicación de usuario. Figura 2-1. Diagrama del sistema. En la Figura 2-1 se observa el diagrama del sistema completo, formado por: A No es el conocimiento, sino el acto de aprendizaje; y no la posesión, sino el acto de llegar a ella, lo que concede el mayor disfrute. Carl Friedrich Gauss. Arquitectura del sistema 18 18 Figura 2-5. Fuente de alimentación 6EP1 331-1SL11 24V – 2A 2.3. Descripción del software Para este proyecto será necesario utilizar los siguientes paquetes de software. 2.3.2 Siemens STEP 7 STEP 7 es un software de programación de controladores lógicos programables (PLC) de la gama SIMATIC- S7 300/400. En este proyecto, este software ha sido utilizado para configurar ambos PLCs, sus módulos de expansión y su procesador de comunicaciones, así como todas las funciones implementadas para el control y simulación del motor de corriente continua. Figura 2-6. Icono del software STEP 7. 2.3.3 Kepware KEPServerEX v6.4 KepServerEX es el software encargado de la comunicación entre el PLC1 y la tarjeta de red del PC a través de sus drivers de comunicaciones sobre TCP/IP y aloja el servidor OPC para nuestra aplicación. En este software será necesario crear todos los tags OPC que vayamos a leer desde el cliente OPC. Figura 2-7. Icono del software KEPServerEX. 19 19 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 2.3.4 MATLAB App Designer 2020b La aplicación de control, configuración y adquisición de datos de este proyecto ha sido diseñada utilizando App Designer. App Designer permite crear aplicaciones con interfaz de usuario programada con código orientado a objetos que es ejecutado sobre un entorno MATLAB, brindándo la posibilidad de crear una aplicación independiente con MATLAB Compiler y Simulink Compiler. Figura 2-8. Icono del software MATLAB. 2.4. Conexionado del hardware A continuación se detallan todas las conexiones del montaje completo: Los componentes del sistema anteriormente mencionados en el apartado 2.2 han sido montados sobre dos carriles DIN1F 2 . Figura 2-9. Diagrama de montaje sobre los carriles DIN. *Tarjeta de E/S incorporada en la CPU. 2 Carril DIN: Perfil metálico normalizada con dimensiones 35 mm x 7.5 mm (EN 50022, BS 5584, DIN 46277-3, NFC 63015, DIN 3) comúnmente utilizado para el montaje de elementos eléctricos de protección y mando en armarios eléctricos industriales y viviendas. Arquitectura del sistema 20 20 Figura 2-10. Esquema eléctrico de conexión de los módulos de E/S. 21 21 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Como se puede observar en la Figura 2-10, los módulos de expansión SM331 y SM332 necesitan ser alimentados externamente. En esta parte del proyecto, hemos de hacer especial incapié en que un fallo a la hora de realizar este cableado puede llevar a la inutilización de cualquiera de los módulos de expansión de E/S o incluso, la CPU. Con esto tendremos conectados el controlador con el modelo simulado del motor de corriente continua. A continuación, conectaremos un cable ethernet desde el puerto 1 del procesador de comunicaciones SIMATIC NET hasta la tarjeta de red del PC donde se alojará el servidor OPC y la aplicación de control y configuración. Figura 2-11. Diagrama de conexión SIMATIC NET - PC. Con esto habremos completado la configuración hardware del sistema. En el próximo capítulo de este proyecto se detallará la configuración de ambos PLCs, sus módulos de expansión de E/S, procesador de comunicaciones y el servidor OPC. Configuración del hardware 22 22 3 CONFIGURACIÓN DEL HARDWARE ste capítulo está dedicado a explicar detalladamente cómo se ha llevado a cabo la configuración del hardware descrito anteriormente, así como la configuración del servidor OPC de KEPServerEX. 3.2. Configuración de equipos SIEMENS con STEP7. En primera instancia, iniciaremos STEP7 (Simatic Manager) y crearemos un nuevo proyecto. Para ello, una vez iniciada la aplicación, nos dirigiremos a la pestaña Archivo -> Nuevo. Figura 3-1. Ventana de creación de nuevo proyecto en STEP7. Esta acción nos abrirá una nueva ventana Nuevo Proyecto, donde tendremos que indicar la ubicación (ruta) donde se alojará nuestros archivos de proyecto y el nombre que le queramos poner. E No quiero creer, quiero saber. Carl Sagan 23 23 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 3-2. Ventana de proyectos de usuario en STEP7. Una vez completados los campos necesarios, pulsaremos el botón Aceptar. Con esto, habremos creado nuestro proyecto y ya podemos comenzar a realizar la configuración del hardware. Figura 3-3. Ventana principal de proyecto en STEP7. Para comenzar, tendremos que añadir en nuestro proyecto el hardware que vamos a utilizar. Para ello, haremos click derecho sobre Proyecto_Ejemplo y esto abrirá un menú desplegable con las siguientes opciones: Configuración del hardware 24 24 Figura 3-4. Menu de proyecto en STEP7. Una vez desplegado el menú, haremos click en Insertar nuevo objeto -> SIMATIC 300. A continuación, observaremos que se ha añadido una nueva entrada con nombre SIMATIC 300(1) en la lista de objetos del proyecto. Figura 3-5. Vista componentes de proyecto en STEP7. Para configurar el hardware del rack, haremos doble click sobre SIMATIC 300(1)->Hardware y se abrirá una nueva ventada de configuración hardware HW Config. En esta nueva ventana añadiremos en primer lugar un Perfil de soporte, y posteriormente iremos añadiendo el PLC1 con todos sus módulos de expansión de E/S y el procesador de comunicaciones. Para añadir el Perfil de soporte desplegaremos en el menú de la derecha, SIMATIC 300 ->BASTIDOR 300 -> Perfil soporte y bastará con arrastrar el elemento deseado hasta la sub-ventana en blanco. Después de hacer esto, aparecerá una tabla enumerada correspondiente al Perfil de soporte y a cada slot disponible. 25 25 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 3-6. Ventana de configuración hardware en STEP7. Una vez añadido el Perfil de soporte, iremos arrastrando en la posición correspondiente el PLC1 (CPU-300 -> CPU 313C -> 6ES7 313-5BG04-0AB0 -> V3.3) en el slot 2 (primer slot disponible para la CPU) y el procesador de comunicaciones (CP-300 -> Industrial Ethernet -> CP 343-1 Lean -> 6GK7 343-1CX10-0XE0 -> V3.0). La posición que ocupe cada dispositivo en el perfil virtual debe corresponder con la posición (o slot) que ocupen físicamente. Al arrastrar el procesador de comunicaciones CP 343-1 Lean (SIMATIC NET), aparecerá una nueva ventana de propiedades de la interfaz ethernet del módulo. Figura 3-7. Ventana de propiedades del módulo CP-343 en STEP7. Configuración del hardware 26 26 En este caso, asignaremos a esta interfaz la dirección IP: 192.168.1.90 . Antes de cerrar esta ventana, será necesario añadir la interfaz a una subred. Crearemos una subred ethernet haciendo click en el botón Nueva, le asignaremos un nombre y cerraremos ambas ventanas pulsando Aceptar. Figura 3-8. Ventana de configuración hardware en STEP7. Una vez añadidos el PLC1 y el procesador de comunicaciones, configuraremos las entradas y salidas analógicas integradas en este PLC. Para ello, haremos doble click en la fila correspondiente al slot 2.3 y se abrirá una nueva ventana de configuración. 27 27 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 3-9. Ventana de configuración hardware en STEP7. En esta nueva ventana podremos configurar el rango de direcciones que emplearemos para direccionar las entradas/salidas analógicas, el tipo de entrada a usar (tensión/corriente) y su rango de trabajo, y esta misma configuración para las salidas. Figura 3-10. Ventana de propiedades de E/S analógicas en STEP7. Configuración del hardware 34 34 Como el propio wizard indica, podemos indicar el adaptador de red que hará uso del enlace o podemos dejar la opción Default, que permitirá al sistema operativo hacer automáticamente esta selección. En este caso se ha seleccionado esta última opción. Al pulsar Siguiente, pasaremos a la ventana de configuración del driver de comunicación. Figura 3-20. Ventana 4 del wizard de configuración de canal de KEPServerEX. Dado que para nuestra aplicación buscamos tener la máxima tasa de refresco estable posible de las variables, usaremos como método de optimización Write Only Latest Value for All Tags. El duty cycle (ratio de nº de lecturas por cada escritura) se ha establecido en un valor igual a 10. Como nuestra aplicación tendrá mayor número de lecturas que de escrituras, este valor no nos afectará, de acuerdo con la documentación de KEPServer – Write Optimizations. La siguiente ventana nos llevará a la configuración a usar cuando se produzca un valor inválido en notación de coma flotante. Para evitar errores en el controlador, seleccionaremos la opción Replace with Zero, lo que hará que si hay que enviar un dato inválido, se reemplazará por 0. Al pulsar siguiente, pasaremos a la ventana de resumen de la configuración y pulsaremos Finalizar para validar la configuración y establecer la comunicación. 35 35 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 3-21. Ventana 5 del wizard de configuración de canal de KEPServerEX. La configuración de las variables a intercambiar entre cliente y servidor OPC las veremos en próximos capítulos. Programación de PLCs para control y simulación del sistema 36 36 4 PROGRAMACIÓN DE PLCS PARA CONTROL Y SIMULACIÓN DEL SISTEMA n este capítulo vamos a describir cómo se han programado los PLCs involucrados en el sistema, tanto para el control del motor, como para la simulación de este, creando un sistema basado en la técnica HDL (Hardware-in-the-Loop). Definición (Hardware-in-the-Loop): Se define una simulación Hardware-in-the-Loop (HIL) como una técnica utilizada para el desarrollo y pruebas de sistemas controlados que sustituye el sistema real por un sistema simulado de mismas características. 4.1. Funcionalidades de la aplicación de control En primer lugar y antes de entrar en detalle sobre la programación de los PLCs, explicaremos cuáles son las principales funcionalidades o modos de control que necesita nuestro sistema. La aplicación de control tendrá tres modos de funcionamiento que se detallan a continuación: 1. Modo escalón manual: Con este modo de funcionamiento, el usuario de la aplicación podrá cambiar la referencia (o set point) de par producido por el motor de continua. El cambio de referencia se hace en forma de escalón. 2. Modo rampa manual: El usuario podrá cambiar desde una referencia origen (actual) hasta una referencia de par producido objetivo de manera gradual en un tiempo determinado de cambio. Para esto, el controlador calculará la pendiente entre la referencia origen y la referencia destino para cumplir ese cambio de referencia en el tiempo indicado, aplicando automáticamente saltos de referencia graduales internamente. 3. Modo programado: Con este modo de funcionamiento, el usuario podrá programar a través de un fichero .mat los cambios de referencia deseados, de manera que el controlador se encargará de ir realizando estos cambios de manera automática en un intervalo de tiempo determinado. Los modos de funcionamiento indicados anteriormente sólo se encargan de realizar cambios de referencia de manera manual o automática al controlador. E El conocimiento es poder. Francis Bacon 37 37 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. El PLC1 ejecutará un algoritmo de control PID (Proporcional, integral y derivativo) que será el encargado de controlar el motor de corriente continua y recibirá los cambios de referencias de la aplicación. Figura 4-1. Diagrama PID típico. 4.2. Bloque de función de regulación continua (CONT_C) Para empezar a programar el controlador el primer paso será, una vez abierto STEP7, crear un OB2F 3 cíclico. Los OB cíclicos son bloques de organización de instrucciones que se ejecutan cíclicamente en el PLC cada t unidades de tiempo. A continuación se detallarán los pasos a seguir para la creación de un OB Cíclico: Nos situamos en la ventana principal de nuestro proyecto y en la parte izquierda de la ventana, desplegaremos el menú SIMATIC 300(1) -> Programa S7(1) -> Bloques, llegando a una ventana similar a la mostrada en la siguiente figura: Figura 4-2. Ventana de bloques del proyecto en STEP7. En esta ventana aparecerán toda la información del programa actual que contenga el PLC. Haciendo click derecho debajo del listado podremos añadir nuevos bloques a nuestro programa. Insertaremos un OB haciendo click en Insertar nuevo objeto -> Bloque de organización. 3 OB: Organization Block Programación de PLCs para control y simulación del sistema 38 38 Figura 4-3. Ventana de creación de un bloque de organización en STEP7. En nuestro caso, utilizaremos el OB35. Este OB no se ha elegido arbitrariamente, si no que por el contrario, es uno de los cuatro OB cíclicos de los que dispone la CPU. Para ver los OB cíclicos de los que dispone la CPU utilizada, haremos click derecho sobre el nombre de esta, mostraremos las Propiedades del objeto y nos moveremos hasta la pestaña de Alarmas cíclicas. Figura 4-4. Ventana de OBs cíclicos en STEP7. En la Figura 30 podemos ver el listado de OBs cíclicos de la CPU, además de editar su tiempo de ciclo de ejecución. Como se ha comentado, hemos usado el OB35 que se ejecuta cada 150 ms. Este bloque de organización contendrá tres bloques de función correspondientes al algoritmo de control, al modo rampa y al modo programado. En este apartado nos centraremos en explicar el bloque de función CONT_C. 39 39 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 4-5. Diagrama de bloques de la función CONT_C. Este bloque de función contiene el algoritmo de control proporcionado por SIEMENS para realizar controles tipo P, PI, PD y PID. Nuestra tarea será, una vez añadido este bloque de función (FB41) al OB35, configurarlo correctamente. El bloque tiene los siguientes argumentos de entrada y salida: Tabla 4-1. Parámetros de entrada del bloque de función CONT_C. Parámetro Tipo de datos Por defecto Descripción COM_RST BOOL FALSE Rearranque completo El bloque tiene una rutina de inicialización que se procesa cuando está activada la entrada "COM_RST". MAN_ON BOOL TRUE Conectar a modo manual Si está activada la entrada "Conectar a modo manual", está interrumpido el lazo de regulación. Como valor manipulado se fuerza un valor manual. PVPER_ON BOOL FALSE Conectar valor real de periferia. Si debe leerse el valor real de la periferia, debe interconectarse la entrada PV_PER con la periferia y activarse la entrada "Conectar valor real de periferia". Programación de PLCs para control y simulación del sistema 40 40 P_SEL BOOL TRUE Conectar acción P En el algoritmo PID pueden conectarse y desconectarse individualmente las acciones PID. La acción P está conectada si está activada la entrada "Conectar acción P". I_SEL BOOL TRUE Conectar acción I En el algoritmo PID pueden conectarse y desconectarse individualmente las acciones PID. La acción I está conectada si está activada la entrada "Conectar acción I". INT_HOLD BOOL FALSE Congelar acción I La salida del integrador puede congelarse. Para ello se ha de activar la entrada "Congelar acción I". I_ITL_ON BOOL FALSE Inicializar acción I La salida del integrador puede inicializarse a la entrada I_ITLVAL. Para ello se ha de activar la entrada "Inicializar acción I". D_SEL BOOL FALSE Conectar acción D En el algoritmo PID pueden conectarse y desconectarse individualmente las acciones PID. La acción D está conectada si está activada la entrada "Conectar acción D". CYCLE TIME T#1s Tiempo de muestreo El tiempo entre las llamadas del bloque debe ser constante. La entrada "Tiempo de muestreo" indica el tiempo entre las llamadas del bloque. SP_INT REAL 0.0 Consigna interna La entrada "Consigna interna" sirve para ajustar un valor de consigna. PV_IN REAL 0.0 Entrada de valor real En la entrada "Entrada de valor real" puede parametrizarse un valor de puesta en servicio, o interconectarse un valor real externo en formato en coma flotante. PV_PER WORD W#16#0000 Valor real de periferia El valor real en formato de periferia se interconecta con el regulador en la entrada "Valor real de periferia". MAN REAL 0.0 Valor manual La entrada "Valor manual" sirve para establecer un valor manual mediante función de manejo/visualización (interfaz hombre máquina) 41 41 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. GAIN REAL 2.0 Ganancia proporcional La entrada "Ganancia proporcional" indica la ganancia del regulador. TI TIME T#20s RESET TIME / Tiempo de acción integral La entrada "Tiempo de acción integral" determina el comportamiento temporal del integrador. TD TIME T#10s Tiempo de diferenciación (acción derivativa) La entrada "Tiempo de diferenciación" determina el comportamiento temporal del diferenciador. TM_LAG TIME T#2s Tiempo de retardo de la acción D El algoritmo de la acción D contiene un retardo que puede parametrizarse en la entrada "Tiempo de retardo de la acción D". DEADB_W REAL 0.0 Ancho de zona muerta La diferencia de regulación se conduce por una zona muerta. La entrada "Ancho de zona muerta" determina el tamaño de la zona muerta. LMN_HLM REAL 100.0 Límite superior del valor manipulado El valor manipulado tiene siempre un límite superior y uno inferior. La entrada "Límite superior del valor manipulado" indica la limitación superior. LMN_LLM REAL 0.0 Límite inferior del valor manipulado El valor manipulado tiene siempre un límite superior y uno inferior. La entrada "Límite inferior del valor manipulado" indica la limitación inferior. PV_FAC REAL 1.0 Factor de valor real La entrada "Factor de valor real" se multiplica por el valor real. La entrada sirve para la adaptación del margen de valor real. PV_OFF REAL 0.0 Offset del valor real La entrada "Offset del valor real" se suma con el valor real. La entrada sirve para la adaptación del margen de valor real. LMN_FAC REAL 1.0 Factor del valor manipulado La entrada "Factor del valor manipulado" se multiplica por el valor manipulado. La entrada sirve para la adaptación del margen de valor manipulado. Programación de PLCs para control y simulación del sistema 42 42 LMN_OFF REAL 0.0 Offset del valor manipulado La entrada "Offset del valor manipulado" se suma al valor manipulado. La entrada sirve para la adaptación del margen de valor manipulado. I_ITLVAL REAL 0.0 Valor de inicialización de la acción I La salida del integrador puede ponerse en la salida I_ITL_ON. En la entrada "Valor de inicialización de la acción I" está el valor de inicialización. DISV REAL 0.0 Magnitud perturbadora Para control anticipativo de la magnitud perturbadora, ésta se conecta en la entrada "Magnitud perturbadora". Tabla 4-2. Parámetros de salida del bloque de función CONT_C. Parámetro Tipo de datos Por defecto Descripción LMN REAL 0.0 Valor manipulado En la salida "Valor manipulado" se saca en formato en coma flotante el valor manipulado que actúa efectivamente. LMN_PER WORD W#16#0000 Valor manipulado periferia El valor manipulado en formato de periferia se interconecta con el regulador en la salida "Valor manipulado periferia". QLMN_HLM BOOL FALSE Alcanzado el límite superior del valor manipulado El valor manipulado tiene siempre un límite superior y un límite inferior. La salida "Alcanzada limitación superior del valor manipulado" indica la superación de la limitación superior. QLMN_LLM BOOL FALSE Alcanzado el límite inferior del valor manipulado El valor manipulado tiene siempre un límite superior y un límite inferior. La salida "Alcanzado el límite inferior del valor manipulado" indica la superación de la limitación inferior. LMN_P REAL 0.0 Acción P La salida "Acción P" contiene la componente proporcional de la magnitud manipulada. LMN_I REAL 0.0 Acción I La salida "Acción I" contiene la componente integral de la magnitud manipulada. 43 43 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. LMN_D REAL 0.0 Acción D La salida "Acción D" contiene la componente diferencial de la magnitud manipulada. PV REAL 0.0 Valor real Por la salida "Valor real" se emite el valor real que actúa efectivamente. ER REAL 0.0 Error de regulación Por la salida "Error de regulación" se emite la diferencia o error de regulación que actúa efectivamente. Para añadir este bloque de función al OB35, se ha creado un nuevo segmento KOP3F 4 (lenguaje de contactos o LADDER) y buscamos el FB41 (CONT_C) en Librerías -> Standard Library -> PID Control Blocks -> FB41 CONT_C ICONT. Bastará con arrastrar el FB deseado hasta nuestro segmento ladder y este se añadirá al programa. 4 KOP: Abreviatura del alemán Kontaktplan, en español Diagrama de Escalera (conocido como LD o LADDER). Programación de PLCs para control y simulación del sistema 50 50 4.5. Bloque de organización principal El bloque de organización principal del programa (OB1) contiene el resto de operaciones a realizar por el programa, como son incrementar el valor del puntero de la función modo programa, evitar su desbordamiento y escalar las entradas y salidas analógicas. A continuación se detalla cada segmento ladder del programa principal: 4.5.2 Segmento 1 Figura 4-12. Segmento 1 en el OB1. El contacto M50.0 es una marca de ciclo configurada del PLC, es decir, se ha configurado para se active automáticamente dando un pulso cada 0.1 segundos (f = 10 Hz). Las marcas cíclicas son 8 señales digitales que podemos activar en nuestro PLC y que nos proporcionan las siguientes salidas: Tabla 4-3. Bits de marcas de ciclo. Bit de marca Duración del período (s) Frecuencia (Hz) 0 0,1 10 1 0,2 5 2 0,4 2,5 3 0,5 2 4 0,8 1,25 5 1,0 1 6 1,6 0,625 7 2,0 0,5 Para configurar la palabra de memoria reservada para las marcas de ciclo, lo haremos desde la configuración de la CPU, en el apartado de Ciclo/Marca de ciclo como se muestra a continuación: 51 51 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 4-13. Ventana de configuración de marcas de ciclo en STEP7. 4.5.3 Segmento 2 Figura 4-14. Segmento 2 en el OB1. El segmento 2 mueve cada 0.1s el valor de MD66 hasta DB7.DBD4. La doble palabra de memoria MD66 contiene el valor escalado de 0 a 100 de la entrada analógica correspondiente al PAR PRODUCIDO por el motor de corriente continua. 4.5.4 Segmento 3 Figura 4-15. Segmento 3 en el OB1. Programación de PLCs para control y simulación del sistema 52 52 El segmento 3 genera un pulso en M101.1 cada PT segundos. El bit M101.1 se utilizará como variable de incremento del índice que recorre el array del modo programado. Este segmento solo se ejecutará si el bit ENABLE MODO PROGRAMADO está activo, es decir, el sistema funciona en modo programado. 4.5.5 Segmento 4 Figura 4-16. Segmento 4 en el OB1. El segmento 4 realiza dos operaciones. •Función contaje ascendente (CTU): La variable de incremento del contador es la marca M101.1 vista en el segmento 3. La salida de este contador (CV) es una variable de tipo INT (de 1 a 50) que apunta al PUNTERO REF (MW103) utilizado para recorrer el array del modo programado. •Función comparación (CMP ==I): Si la variable PUNTERO REF (MW103) es igual a 50 (tamaño del array de referencias), se activará la marca M102.3 y se reiniciará el índice de contaje (PUNTERO REF). Esto hace que el modo programado se pueda ejecutar cíclicamente y no se produzcan errores por acceso del índice fuera del array. 4.5.6 Segmento 5 Figura 4-17. Segmento 5 en el OB1. 53 53 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. El segmento 5 escala la entrada analógica PIW752 a valores tipo REAL de entre 0.0 y 100.0. El valor REAL de salida de la función de escalado es movido a la variable MD66 como PAR PRODUCIDO (ELECTROMAGNÉTICO) “TE_MOTORCC”. Esta entrada analógica está conectada a una de las salidas analógicas del PLC2, encargado de simular el comportamiento del motor de corriente continua. 4.5.7 Segmento 6 Figura 4-18. Segmento 6 en el OB1. El segmento 6 escala la entrada analógica PIW754 a valores tipo REAL de entre 0.0 y 100.0. El valor REAL de salida de la función de escalado es movido a la variable MD76 como INTENSIDAD DE ARMADURA “I_MOTORCC”. Esta entrada analógica está conectada a una de las salidas analógicas del PLC2, encargado de simular el comportamiento del motor de corriente continua. 4.5.8 Segmento 7 Figura 4-19. Segmento 7 en el OB1. Programación de PLCs para control y simulación del sistema 54 54 El segmento 7 escala la entrada analógica PIW756 a valores tipo REAL de entre 0.0 y 100.0. El valor REAL de salida de la función de escalado es movido a la variable MD86 como VELOCIDAD ANGULAR DEL EJE “W_MOTORCC”. Esta entrada analógica está conectada a una de las salidas analógicas del PLC2, encargado de simular el comportamiento del motor de corriente continua. 4.5.9 Segmento 8 Figura 4-20. Segmento 8 en el OB1. El segmento 8 desescala valores tipo REAL de entre 0.0 y 100.0 de la salida de la acción de control del bloque de función de control continuo (CONT_C) a valores del rango de salida en tensión de PQW752. Esta salida analógica está conectada a una de las entradas analógicas del PLC2, encargado de simular el comportamiento del motor de corriente continua. Con esto, concluímos la configuración del PLC1 (controlador del motor de corriente continua). 55 55 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 4.6. Modelo para simulación del motor de corriente continua A continuación, se mostrará el modelo del motor de corriente continua utilizado para la simulación del sistema. Figura 4-21. Modelo general de un motor de corriente continua. El modelo lineal del motor de corriente se describe por las siguientes ecuaciones: 𝑉𝑘(𝑡)=𝑅𝑖(𝑡)+ 𝐿 𝑑𝑖(𝑡) 𝑑𝑡 + 𝑉𝑐𝑒𝑚 (1) 𝑇𝑚(𝑡)= 𝐽 · 𝑑𝜔(𝑡) 𝑑𝑡 + 𝐵 · 𝜔(𝑡) (2) 𝑉𝑐𝑒𝑚(𝑡)=𝐾𝑎 · 𝜔(𝑡) (3) 𝑇𝑚(𝑡)=𝐾𝑚 · 𝑖(𝑡) (4) Discretizando el modelo y despejando, llegaremos a las ecuaciones a usar en el simulador del motor de corriente continua: 𝑖 = 𝐿𝑎·𝑖 ∆𝑡 − 𝑉𝑐𝑒𝑚 + 𝑉𝑘 𝑅𝑎+ 𝐿𝑎 ∆𝑡 (5) 𝜔 = 𝑇𝑒 − 𝑇𝑒𝑥𝑡 +𝐾𝑗 ∆𝑡·𝜔 𝐾𝑗 ∆𝑡 + 𝐾𝐵 (6) 𝑉𝑐𝑒𝑚 = 𝐾𝐵 · 𝜔 (7) 𝑇𝑒 =𝐾𝑒 · 𝑖 (8) Donde, -Vk es la tensión inducida al motor de corriente continua. -i es la intensidad de armadura. -Vcem es la tensión contraelectromotriz. -Te es el par producido por el motor de corriente continua. -Text es el par externo ejercido por el motor de inducción sobre el motor de corriente continua. -ω es la velocidad angular del eje. -DeltaT es el tiempo de integración. Programación de PLCs para control y simulación del sistema 56 56 -Ra es la resistencia modelo. -La es la inductancia modelo. -Ke es la constante de torque expresada en N·m/A. -Kb es la constante de fuerza contraelectromotriz expresada en V·s. -B es el coeficiente de fricción expresado en N·m·s. -J es el momento de inercia expresado en Kg/m^2. 4.7. Función SCL de simulación del motor de corriente continua La función SIM_CC ha sido programada en un bloque SCL y se encarga de simular el comportamiento del motor de corriente continua a partir de las ecuaciones vistas anteriormente. Esta función se ejecuta en un OB cíclico. Código 4.2 Función MODO_PROGRAMA en SCL. FUNCTION_BLOCK FB1 VAR_INPUT K_RA : REAL; //Resistencia modelo K_LA : REAL; //Inductancia modelo K_KE : REAL; //Constante de torque N*m/A K_KB : REAL; //Constante de fuerza contraelectromotriz V*s K_B : REAL; //Coeficiente de fricción N*m*s K_J : REAL; //Momento de incercia Kg/m2 TEXT_K : REAL ; //Par externo ejercido por el motor de induccion sobre el motor de cc. V_K : REAL; //Tension inducida DELTA_T : REAL; //Tiempo de integración END_VAR VAR_OUTPUT VCEM_K : REAL; //Tensión contraelectromotriz TE_K : REAL; //Par producido W_K : REAL; //Velocidad angular del eje I_K : REAL; //Intensidad de armadura END_VAR VAR_TEMP END_VAR 57 57 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. I_K := ((K_LA*I_K/DELTA_T) - VCEM_K + V_K)/(K_RA + (K_LA/DELTA_T)); W_K := (TE_K - TEXT_K + (K_J/DELTA_T)*W_K)/((K_J/DELTA_T) + K_B); VCEM_K := K_KB * W_K; TE_K := K_KE*I_K ; END_FUNCTION_BLOCK En este bloque de función se ha implementado el modelo discretizado del sistema lineal del motor de corriente continua. Este bloque será llamado desde el OB35 del programa del PLC2, como se muestra a continuación: Figura 4-22. Llamada a la función MOTOR CC. Este OB se ejecuta cíclicamente cada 100 ms. Los resultados de esta función serán observados a través de la aplicación de usuario que se mostrarán en próximos capítulos de este proyecto. 4.8. Bloque de organización principal del PLC2 El OB1 del programa del PLC2 contiene únicamente el escalado y desescalado de las entradas/salidas analógicas. A continuación se muestra este programa: Programación de PLCs para control y simulación del sistema 58 58 4.8.2 Segmento 1 Figura 4-23. Segmento 1 del OB1 en el PLC2. El segmento 1 desescala valores tipo REAL de entre 0.0 y 100.0 de la salida de par producido de la función SIM_CC a valores del rango de salida en tensión de PQW288. Esta salida analógica está conectada a una de las entradas analógicas del PLC1, encargado del control del sistema simulado del motor de corriente continua. 4.8.3 Segmento 2 Figura 4-24. Segmento 2 del OB1 en el PLC2. El segmento 2 desescala valores tipo REAL de entre 0.0 y 100.0 de la salida intensidad de la armadura de la función SIM_CC a valores del rango de salida en tensión de PQW290. Esta salida analógica está conectada a una de las entradas analógicas del PLC1, encargado del control del sistema simulado del motor de corriente continua. 59 59 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 4.8.4 Segmento 3 Figura 4-25. Segmento 3 del OB1 en el PLC2. El segmento 3 desescala valores tipo REAL de entre 0.0 y 100.0 de la salida de velocidad angular del eje de la función SIM_CC a valores del rango de salida en tensión de PQW292. Esta salida analógica está conectada a una de las entradas analógicas del PLC1, encargado del control del sistema simulado del motor de corriente continua. 4.8.5 Segmento 4 Figura 4-26. Segmento 4 del OB1 en el PLC2. El segmento 4 escala la entrada analógica PIW214 a valores tipo REAL de entre 0.0 y 240.0. El valor REAL de salida de la función de escalado es movido a la variable “PARAMETROS MOTORCC”.V_K Esta entrada analógica está conectada a una de las salidas analógicas del PLC1, encargado del control del sistema simulado del motor de corriente continua. Aplicación de configuración y adquisición de datos 66 66 5.2.4 Pantalla principal de la aplicación En la siguiente figura se muestra la pantalla principal de la aplicación. Esta pantalla muestra los siguientes elementos: Figura 5-8. Ventana principal de la aplicación de control. 1) Información de la conexión: El display Estado muestra el estado de la conexión del cliente OPC. El display Servidor muestra el nombre que identifica al servidor configurado. 2) Estado de la simulación: Muestra si se está ejecutando o no el programa. 3) Selector de modo: Permite conmutar entre el modo escalón, modo rampa o modo programa. 4) Información de par: Mostrada en dos campos, un campo de entrada de datos Referencia de par y un segundo campo que muestra el Par real producido por el motor de corriente continua. 5) Ajuste de PID: Pestaña de ajustes del controlador. Los valores introducidos en esta ventana son cargados al iniciar la comunicación OPC en el controlador. 1 2 3 4 5 6 7 8 9 10 11 67 67 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 6) Gráfica: En esta gráfica se mostrarán dinámicamente los valores de par referencia y par real durante la ejecución del programa. 7) Tabla de datos: Al pulsar el botón 8) MOSTRAR LECTURA EN LA TABLA, se mostrarán los valores adquiridos durante la ejecución del programa. Esta tabla muestra una marca temporal que indica cuándo se recibió el dato, el valor de par real, el valor de par referencia y la velocidad angular del eje para ese instante expresada en rad/s. 8) Botón MOSTRAR LECTURA EN TABLA: Permite mostrar los datos obtenidos hasta el momento de la pulsación en la tabla. 9) Botón GUARDAR VALORES POR DEFECTO: Al pulsar este botón se guardarán todos los valores actuales de los campos de configuración y se establecerán dichos valores como por defecto para ser cargados al iniciar la aplicación. 10) Modo rampa: Esta ventana solo aparece si se activa el modo rampa. Nos permite introducir el valor destino de referencia y el tiempo de rampa, calcular la pendiente de la recta de cambio de referencia y enviar los datos al PLC. 11) Barra superior: Formada por tres campos desplegables. a. Adquisición de datos: Desde esta pestaña podremos iniciar la comunicación OPC y detener la comunicación OPC. b. Configuración: Contiene el botón Parámetros de OPC. Al pulsar este botón se abre una ventana emergente que permite configurar la dirección del host y la ID del servidor OPC. Figura 5-9. Ventana de configuración de cliente OPC de la aplicación de control. c. Exportar datos: Permite ejecutar el algoritmo de exportación de los datos adquiridos en formato .mat o .xlsx. Los ficheros creados en la exportación se generan en el directorio principal de la aplicación con nombre con formato “XX-MES-AÑO.mat”. Aplicación de configuración y adquisición de datos 68 68 5.3. Programación de la aplicación A la hora de programar aplicaciones en App Designer podremos hacer distinción entre dos partes fundamentales de este proceso. Por un lado, diseñar la interfaz visual de la aplicación y por otro, programarla desde la vista de código. Dado que diseñar la interfaz visual es un proceso trivial arrastrándo componentes de librería a la pantalla de la aplicación, nos centraremos en la vista de código y cómo ha sido programada. Las aplicaciones de App Designer son programadas con lenguaje orientado a objetos y parte de este código se genera automáticamente al introducir un nuevo elemento gráfico. 5.3.2 Atributos de componentes de la aplicación A lo largo del desarrollo de esta aplicación se han creado varios atributos de la clase app con el fin de utilizarlos de manera que sean accesibles desde cualquier parte de la aplicación y varias funciones puedan modificarlos. Estos atributos se listan a continuación y son accesibles utilizando la sintáxis app.[nombre_atributo]: Código 5.3.1 Atributos de app creados por el usuario. properties (Access = public) % Atributos públicos sim = 0; % Atributo de bucle de ejecucion de la app enable = 0; % Atributo de modo de funcionamiento de la app update = 0; % Atributo para boton Enviar a PLC end properties (Access = private) % Atributos privados tabla_ref % Atributo con referencias para modo programado grap_x = [] % Atributo eje x de la gráfica grap_y = [] % Atributo eje y de la gráfica grap_y2 = [] % Atributo 2 eje y de la gráfica timestamp_hora = [] % Atributo de hora de la marca temporal timestamp_min = [] % Atributo de minutos de la marca temporal timestamp_seg = [] % Atributo de segundos de la marca temporal ref = [] % Atributo de valor de referencia i_armadura = [] % Atributo de valor de la intensidad de armadura w_eje = [] % Atributo de valor de la velocidad angular DialogApp % Atributo ventana emergente configuracion OPC main_host = "" % Atributo Host OPC main_server_id = "" % Atributo Server ID OPC grupo_config % Atributo de grupo OPC para R/W de configuracion grupo_adq % Atributo de grupo OPC para R/W de adquisicion datos end 69 69 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 5.3.3 Funciones de componentes de la aplicación En esta aplicación se han creado dos funciones principales asociadas a componentes de la aplicación. •Función runOPC: encargada de la lectura y escritura de las variables OPC durante el ciclo de comunicación con el servidor. oEl intercambio de información entre cliente y servidor se da en un bucle de ilimitadas iteracciones mientras se cumpla la condición de comunicación activa app.sim = true. oLa función ejecutará un bucle de lectura/escritura según el modo de funcionamiento seleccionado. Código 5.3.2 Función runOPC. function runOPC(app,~,~,item2,item3,item6,item7,item8,item9,item10,item11,item12,item14, item15,item17,item18,item19,item21,item22, item30) app.sim = 1; app.sim_status.Value = "Simulación: STOP"; %Escritura INICIAL de TAGs switch(app.enable) case 0 write(item14,0); write(item22,0); write(item10,app.checkP.Value); %P ON write(item11,app.checkI.Value); %I ON write(item12,app.checkD.Value); %D ON write(item7,app.KpEditField.Value); %Kp write(item8,app.TiEditField.Value); %Ti write(item9,app.TdEditField.Value); %Td write(item3,app.pid_deadband.Value); write(item30,app.tabla_ref.PROGRAMA); write(item4,app.pid_limite_sup.Value); %Limite Superior write(item5,app.pid_limite_inf.Value); %Limite Inferior write(item6,app.pid_retardo_control.Value); %Retardo Control case 1 write(item14,1); %Rampa ON write(item22,0); write(item10,app.checkP.Value); %P ON write(item11,app.checkI.Value); %I ON write(item12,app.checkD.Value); %D ON write(item7,app.KpEditField.Value); %Kp write(item8,app.TiEditField.Value); %Ti write(item9,app.TdEditField.Value); %Td Aplicación de configuración y adquisición de datos 70 70 % item15 = additem(app.grupo, 'SiemensTIA.CPU300.GRADUAL_SP_UPDATE'); % item16 = additem(app.grupo, 'SiemensTIA.CPU300.GRADUAL_SP_ORIGEN'); % item17 = additem(app.grupo, 'SiemensTIA.CPU300.GRADUAL_SP_DESTINO'); % item18 = additem(app.grupo, 'SiemensTIA.CPU300.GRADUAL_SALTO_SP'); case 2 write(item14,0); write(item22,1); write(item10,app.checkP.Value); %P ON write(item11,app.checkI.Value); %I ON write(item12,app.checkD.Value); %D ON write(item7,app.KpEditField.Value); %Kp write(item8,app.TiEditField.Value); %Ti write(item9,app.TdEditField.Value); %Td write(item3,app.pid_deadband.Value); write(item30,app.tabla_ref.PROGRAMA); write(item6,app.pid_retardo_control.Value); end tic switch(app.enable) case 0 while(app.sim) app.sim_status.Value = "Simulación: RUNNING"; write(item19,app.par_referencia.Value); par_refer = app.par_referencia.Value; datosPLC = read(app.grupo_adq,'cache'); par_producido = double(datosPLC(1).Value); app.par_real.Value = par_producido; app.referencia_min.Value = par_producido; app.grap_x(end+1,1) = toc; app.grap_y(end+1,1) = par_producido; %app.i_armadura(end+1,1) = double(datosPLC(6).Value); app.w_eje(end+1,1) = double(datosPLC(6).Value); app.timestamp_hora(end+1,1) = datosPLC(1).TimeStamp(1,4); app.timestamp_min(end+1,1) = datosPLC(1).TimeStamp(1,5); app.timestamp_seg(end+1,1) = datosPLC(1).TimeStamp(1,6); app.grap_y2(1,end+1) = par_refer; app.ref(end+1,1) = par_refer; plot(app.grafica, app.grap_x, app.grap_y,app.grap_x, app.grap_y2); pause(0.2) 71 71 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. end case 1 while(app.sim) if(app.update == 1) write(item15,1); write(item18,app.salto_referencia.Value); app.update = 0; write(item15,0); end app.sim_status.Value = "Simulación: RUNNING"; write(item17,app.par_referencia.Value); par_refer = app.par_referencia.Value; datosPLC = read(app.grupo_adq,'cache'); par_producido = double(datosPLC(1).Value); app.par_real.Value = par_producido; app.referencia_min.Value = par_producido; app.grap_x(end+1,1) = toc; app.grap_y(end+1,1)= par_producido; %%app.i_armadura(end+1,1) = double(datosPLC(6).Value); app.w_eje(end+1,1) = double(datosPLC(6).Value); app.timestamp_hora(end+1,1) = datosPLC(1).TimeStamp(1,4); app.timestamp_min(end+1,1) = datosPLC(1).TimeStamp(1,5); app.timestamp_seg(end+1,1) = datosPLC(1).TimeStamp(1,6); app.grap_y2(1,end+1) = par_ref; app.ref(end+1,1) = par_refer; plot(app.grafica, app.grap_x, app.grap_y,app.grap_x, app.grap_y2); pause(0.2) end case 2 while(app.sim) app.sim_status.Value = "Simulación: RUNNING"; datosPLC = read(app.grupo_adq,'cache'); app.par_referencia.Value = double(datosPLC(5).Value); par_producido = double(datosPLC(1).Value); app.par_real.Value = par_producido; app.referencia_min.Value = par_producido; app.grap_x(end+1,1) = toc; app.grap_y(end+1,1) = par_producido; %app.i_armadura(end+1,1) = double(datosPLC(6).Value); Aplicación de configuración y adquisición de datos 72 72 app.w_eje(end+1,1) = double(datosPLC(6).Value); app.timestamp_hora(end+1,1) = datosPLC(1).TimeStamp(1,4); app.timestamp_min(end+1,1) = datosPLC(1).TimeStamp(1,5); app.timestamp_seg(end+1,1) = datosPLC(1).TimeStamp(1,6); app.grap_y2(1,end+1) = app.par_referencia.Value; app.ref(end+1,1) = app.par_referencia.Value; plot(app.grafica, app.grap_x, app.grap_y,app.grap_x, app.grap_y2); pause(0.2) end end app.sim_status.Value = "Simulación: STOP"; end La función recibe como argumentos todos los items correspondientes a los objetos de los TAGs OPC. Estos items han creados en la función startupFcn(app), que se ejecuta al lanzar la aplicación. •Función updateConfig: encargada guardar la configuración del host, el ID del servidor y los valores de configuración del controlador en el fichero save.mat de configuración por defecto. Código 5.3.3 Función updateConfig. function updateConfig(app,confighost,configserverid) app.main_host = confighost; % Leemos valor host actual app.main_server_id = configserverid; % Leemos valor server_id actual Host = app.main_host; ServerID = app.main_server_id; Kp = app.KpEditField.Value; % Leemos valor Kp actual Ti = app.TiEditField.Value; % Leemos valor Ti actual Td = app.TdEditField.Value; % Leemos valor Td actual % Guardamos los valores en el archivo save.mat save('save.mat','Kp','Ti','Td','Host','ServerID'); end 73 73 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 5.3.4 Funciones asociadas a eventos. A continuación, se detallan las funciones asociadas a eventos del programa. Estas funciones se ejecutan cuando ocurre un determinado evento, como puede ser el inicio de la aplicación, la pulsación de un determinado botón, el cambio de valor de un campo de entrada, etc… •Función startupFcn: encargada inicializar los campos de los displays a partir de los valores leídos del fichero de configuración save.mat. Código 5.3.4 Función startupFcn. function startupFcn(app) app.EstadoConexion.Value = "Estado: No conectado al controlador." ; app.IDServer.Value = "Servidor: Esperando a establecer conexión"; memoria = load('save.mat'); %Cargamos los valores por defecto app.tabla_ref = load('programa.mat'); app.main_host = memoria.Host; app.main_server_id = memoria.ServerID; app.KpEditField.Value = memoria.Kp; app.TiEditField.Value = memoria.Ti; app.TdEditField.Value = memoria.Td; app.connection_status.Color = [1.00,0.00,0.00] ; % Indicador conx. app.sim = 0; app.panel_rampa.Visible = 0; app.panel_negro.Visible = 0; end •Función run_comSelected: encargada de establecer la conexión entre el cliente OPC de MATLAB y el servidor OPC KEPServerEX. oSe ejecuta cuando se pulsa el botón de inicio de comunicación OPC. oUna vez establecida la comunicación, se crean dos grupos de lectura/escritura de variables, lo que optimiza la lectura y mejora los tiempos. Estos grupos con GRUPO_CONFIGURACIÓN (app.grupo_config) y GRUPO_ADQUISICIÓN (app.grupo_adq). oPosteriormente se crean los items para cada variable y se añaden al grupo pertinente. oPor último, se llamará a la función runOPC y, una vez finalizado el bucle de intercambio de datos, el cliente se desconecta del servidor. Código 5.3.5 Función run_comSelected. function run_comSelected(app, event) da = opcda(string(app.main_host), string(app.main_server_id)); connect(da); Aplicación de configuración y adquisición de datos 74 74 estado_conn = da.Status; %Lectura del estado de la conexion con el servidor OPC if(estado_conn == "connected") estado_conn_esp = "Estado: Conectado al controlador."; app.connection_status.Color = [0.00,1.00,0.00] ; else estado_conn_esp = "Estado: Desconectado del controlador."; app.connection_status.Color = [1.00,0.00,0.00] ; end app.EstadoConexion.Value = estado_conn_esp; app.IDServer.Value = "Servidor: " + da.ServerID; app.grupo_config = addgroup(da,'GRUPO_CONFIGURACION'); app.grupo_adq = addgroup(da,'GRUPO_ADQUISICION'); %% Definimos las variables a leer dentro del GRUPO CONFIGURACION item3 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_DEAD_BAND'); item4 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_LIM_SUP'); item5 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_LIM_INF'); item6 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_RETARDO_CONTROL'); item7 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_KP'); item8 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_TI'); item9 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_TD'); item10 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_P_ON'); item11 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_I_ON'); item12 = additem(app.grupo_config, 'SiemensTIA.CPU300.PID_D_ON'); item14 = additem(app.grupo_config, 'SiemensTIA.CPU300.MODO_RAMPA'); item22 = additem(app.grupo_config, 'SiemensTIA.CPU300.MODO_PROGRAMADO'); item30 = additem(app.grupo_config, 75 75 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 'SiemensTIA.CPU300.TABLA_REF'); item2 = additem(app.grupo_adq, 'SiemensTIA.CPU300.MOTORCC_TE'); item15 = additem(app.grupo_adq, 'SiemensTIA.CPU300.GRADUAL_SP_UPDATE'); item17 = additem(app.grupo_adq, 'SiemensTIA.CPU300.GRADUAL_SP_DESTINO'); item18 = additem(app.grupo_adq, 'SiemensTIA.CPU300.GRADUAL_SALTO_SP'); item19 = additem(app.grupo_adq, 'SiemensTIA.CPU300.GRADUAL_SP_SALIDA'); %item20 = additem(app.grupo_adq, 'SiemensTIA.CPU300.MOTORCC_I'); item21 = additem(app.grupo_adq, 'SiemensTIA.CPU300.MOTORCC_W'); %Ejecutamos el proceso de intercambio de datos runOPC(app,app.grupo_config,app.grupo_adq,item2,item3,item4,item5,item6,item7,it em8,item9,item10,item11,item12,item14,item15,item17,item18,item19,item21,item22, item30); app.connection_status.Color = [1.00,0.00,0.00] ; %Cerramos la conexión disconnect(da); •Función stop_comSelected: encargada de asignar app.sim = 0 para detener el bucle de comunicación. oSe ejecuta cuando se pulsa el botón de detención de comunicación OPC. Código 5.3.6 Función stop_comSelected. function stop_comSelected(app, event) app.sim = 0; end •Función checkDValueChanged: encargada de habilitar/deshabilitar el campo Td en pantalla. oSe ejecuta al pulsar la checkbox de Td. Código 5.3.7 Función checkDValueChanged. function checkDValueChanged(app, event) value = app.checkD.Value; if(value) Aplicación de configuración y adquisición de datos 82 82 Figura 5-11. Ventana principal de la aplicación de control en modo escalón. Observamos que los indicadores de conexión han cambiado y la conexión se encuentra activa. Si pulsamos el botón Mostrar lectura en la tabla aparecerán los valores obtenidos en la comunicación, como se muestra a continuación. 83 83 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 5-12. Ventana de la aplicación de control en modo escalón con tabla de datos. Una vez se quiera finalizar la comunicación, bastará con hacer click en Adquisición de datos -> Comunicación OPC -> Detener y acto seguido se detendrá la comunicación. A continuación, podremos exportar los datos obtenidos por ejemplo, en formato .mat, haciendo click en Exportar datos -> Guardar en .xlsx y hecho esto, se habrá generado en directorio de instalación de la aplicación un archivo con la fecha de exportación y extensión .mat. Figura 5-13. Vista del archivo .mat exportado en MATLAB. Aplicación de configuración y adquisición de datos 84 84 5.5. Ejecución en modo rampa A continuación se muestra un ejemplo de ejecución del programa en modo rampa con los pasos seguidos: 1) Iniciamos la aplicación y ajustamos el controlador con los parámetros deseados. Figura 5-14. Ventana principal de la aplicación de control en modo rampa sin conexión. 1) Una vez ajustado el controlador, iniciamos la conexión OPC haciendo click en Adquisición de datos -> Comunicación OPC -> Iniciar. 85 85 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 5-15. Ventana principal de la aplicación de control en modo rampa. Obsérvese que ha aparecido una nueva ventana de MODO RAMPA ACTIVO que nos servirá para ir ajustando la rampa en función de lo que necesitemos. Una vez se quiera finalizar la comunicación, bastará con hacer click en Adquisición de datos -> Comunicación OPC -> Detener y acto seguido se detendrá la comunicación. 5.6. Ejecución en modo programado Para trabajar en modo programado, es indispensable inicialmente modificar el fichero programa.mat situado en el directorio principal de la aplicación. Este fichero contiene una columna de 51 elementos tipo double y cada uno de estos elementos, será un valor de referencia que podemos programar. Este fichero posteriormente es cargado por nuestro programa y transmitido al inicio como una variable tipo array a nuestro controlador, que irá recorriendo dicho array secuencialmente y aplicando los cambios de frecuencia cada intervalo de tiempo. Aplicación de configuración y adquisición de datos 86 86 Figura 5-16. Vista del archivo programa.mat exportado en MATLAB. El tiempo entre cambios de referencia actual es de 10 segundos (T#10S), pudiendo ser modificado cambiando el valor de la variable de entrada PT del generador de pulsos de contaje en el segmento 3 del OB1 del PLC1. Figura 5-17. Seg. 3 del OB1 del PLC1 para configuración de tiempo de cambio de referencia. Para modificar el fichero .mat, será necesario abrirlo con MATLAB como veremos a continuación. A la hora de insertar los valores de referencia, se recomienda dejar siempre los primeros valores a 0 por motivos de pérdida al iniciar la comunicación y también, el último valor del array. Una vez modificado el fichero, bastará con iniciar la aplicación en modo programado y el controlador irá ejecutando los cambios de referencia automáticamente. Una vez recorridos todos los elementos del array, el controlador empezará de nuevo por el primer índice, haciendo que el programa se ejecute cíclicamente. 87 87 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. Figura 5-18. Ventana principal de la aplicación de control en modo programado. Una vez se quiera finalizar la comunicación, bastará con hacer click en Adquisición de datos -> Comunicación OPC -> Detener y acto seguido se detendrá la comunicación. Resultados obtenidos y futuras líneas de trabajo 88 88 6 RESULTADOS OBTENIDOS Y FUTURAS LÍNEAS DE TRABAJO omo resultado de este proyecto, se han conseguido establecer las bases y realizar las primeras pruebas de un sistema de control para la bancada de ensayos del laboratorio de Ingeniería de Sistemas y Automática de la Escuela Técnica Superior de Ingeniería de la Universidad de Sevilla, sirviendo este proyecto como punto de partida para futuros trabajos en esta bancada. 6.2. Resultados Como resultados de este proyecto se han logrado configurar dos controladores lógicos programables SIEMENS S7-300 y su periferia para realizar simulaciones de un motor de corriente continua y su control usando funciones de control continuo. Además, se ha creado una comunicación OPC entre el PLC encargado del control del motor de corriente continua y una aplicación de usuario desarrollada para el control y la adquisión de datos de este sistema, permitiendo tener control del motor en tiempo cuasi-real y con capacidad de adquirir datos y almacenarlos para su posterior estudio. Figura 6-1. Tabla de datos obtenidos por la aplicación durante un ensayo. Experimentalmente, se ha obtenido una tasa de refresco de las variables OPC de entorno a los 0,2 segundos, por lo que se ha hecho especial incapié en optimizar los procesos de lectura/escritura de dichas variables. C Per áspera ad astra. - Séneca - 89 89 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC. 6.3. Futuras líneas de trabajo Como futuras líneas de trabajo, se propone la sustitución del PLC2 por el motor real de corriente continua, así como el diseño e instalación de un armario de control donde situar el controlador y demás elementos de la bancada de ensayos. Referencias 90 90 REFERENCIAS [1] Bordóns Alba, Ruiz Arahal, M., & Limón Marruedo, D. (2007). Teoría de sistemas. Universidad de Sevilla, Departamento de Ingeniería de Sistemas y Automática. [2] Díaz Cárdenas, A. (2017). Diseño e implementación de una carga electrónica, basada en motor de DC para una bancada de ensayos de accionamientos multifásicos. Trabajo Fin de Máster. Universidad de Sevilla, Departamento de Ingeniería de Sistemas y Automática. [3] Siemens Industry (2006) SIMATIC. Programar en STEP 7. (Edición 03/2006). https://cache.industry.siemens.com/dl/files/056/18652056/att_70833/v1/S7prv54_s.pdf [4]Diaz.I. (s.f.) Modelado de un motor CC. Área de Ingeniería de Sistemas y Automática, Escuela Politécnica Superior de Ingeniería de Gijón. Universidad de Oviedo. http://isa.uniovi.es/~idiaz/ADSTel/Practicas/ModeladoMotorCC.html [5] Kepware KEPServerEX (2022) KEPServerEX Manual. https://www.kepware.com/getattachment/e1943820-ef3c-4932-b055-4ef2a80ab863/kepserverex-manual.pdf 91 91 Aplicación para el control de una carga programable para una máquina de inducción usando un PLC.