programa de supervisión y configuración para controladores
TRANSCRIPT
Universidad de Costa Rica Facultad de Ingeniería
Escuela de Ingeniería Eléctrica
IE – 0502 Proyecto Eléctrico
Programa de supervisión y configuración para controladores Foxboro® 716C
Por:
Roberto Herrera Matamoros
Ciudad Universitaria Rodrigo Facio Agosto de 2006
Programa de supervisión y configuración para controladores Foxboro® 716C
Por: Roberto Herrera Matamoros
Sometido a la Escuela de Ingeniería Eléctrica de la Facultad de Ingeniería
de la Universidad de Costa Rica como requisito parcial para optar por el grado de:
BACHILLER EN INGENIERÍA ELÉCTRICA
Aprobado por el Tribunal:
_________________________________ Ing. Víctor M. Alfaro
Profesor Guía
_________________________________ _________________________________ Ing. Geovanny Delgado Cascante Ing. Andrés Díaz Soto Profesor lector Profesor lector
iii
iii
DEDICATORIA
A Dios, quien me da las fuerzas cada día.
A mis padres, que me han dado su apoyo en todos mis años de estudio.
A Pao, por la paciencia y comprensión, pero sobre todo, por todos los sacrificios.
iv
iv
RECONOCIMIENTOS
Agradezco al profesor Víctor Alfaro por su disposición y disponibilidad para ayudar
y aclarar dudas a lo largo del desarrollo de todo el proyecto, así como tomarse el tiempo
necesario para leer cada uno de los avances del trabajo.
A Marco Chacón, Luis Diego Gómez y Alfonso Herrera por la ayuda invaluable y
desinteresada para la confección de las cajas de interconexión de los controladores.
También a Marco Chacón, Esteban Ortiz, Andrés Díaz y Lochi Yu por sus
sugerencias de cómo resolver mis dudas y mejorar el funcionamiento del programa en Perl.
Un agradecimiento especial además a Daniel Picado por brindarme la flexibilidad
en el trabajo necesaria para poder completar este proyecto satisfactoriamente.
Finalmente, agradezco a cada uno de mis compañeros y amigos que estuvieron a mi
lado dando muestras de apoyo y palabras de aliento todo el tiempo.
Muchas gracias a todos, esto no se pudo haber hecho sin ustedes.
v
v
ÍNDICE GENERAL
ÍNDICE DE FIGURAS................................................................................ viii ÍNDICE DE TABLAS.....................................................................................xi NOMENCLATURA..................................................................................... xiii RESUMEN......................................................................................................16
CAPÍTULO 1: Introducción .........................................................................17
1.1 Objetivos...............................................................................................................18 1.1.1 Objetivo general............................................................................................18 1.1.2 Objetivos específicos ....................................................................................18
1.2 Metodología ..........................................................................................................19 CAPÍTULO 2: Desarrollo teórico ................................................................21
2.1 Conceptos de Control Automático........................................................................21 2.1.1 Elementos de un sistema de control realimentado........................................21 2.1.2 Tipos de controladores..................................................................................23
2.2 El Controlador Digital Foxboro® 716C ...............................................................26 2.2.1 Especificaciones generales ...........................................................................26 2.2.2 Entradas y salidas..........................................................................................26 2.2.3 Interfaz de comunicación serial ....................................................................29 2.2.4 Características de control..............................................................................29 2.2.5 Características adicionales............................................................................31 2.2.6 Modo de configuración / operación ..............................................................32
2.3 Interfaz RS-485.....................................................................................................35 2.3.1 Especificaciones generales ...........................................................................35 2.3.2 Señales ..........................................................................................................36 2.3.3 Topología y redes..........................................................................................38 2.3.4 Puesta a tierra................................................................................................41 2.3.5 Efectos de líneas de transmisión y otras consideraciones.............................42 2.3.6 Enlace simplificado de baja potencia............................................................44 2.3.7 Cables............................................................................................................44
2.4 Protocolo de Comunicación..................................................................................46 2.4.1 Características deseables...............................................................................46 2.4.2 Protocolo MODBUS.....................................................................................46
vi
vi
2.4.3 Principio de protocolo maestro/esclavo........................................................47 2.4.4 Formato de mensajes MODBUS ..................................................................48 2.4.5 Diagramas de comunicación.........................................................................50 2.4.6 Detección de errores .....................................................................................54 2.4.7 Protocolo MODBUS aplicado al Foxboro® 716C .......................................56
CAPÍTULO 3: Familiarización con el controlador Foxboro® 716C en el Laboratorio de Control Automático ............................................................60
3.1 Descripción y configuración de los equipos .........................................................60 3.1.1 Procesos de caudal y temperatura Lab-Volt® 3522 .....................................60 3.1.2 Controlador Foxboro® 716C........................................................................62 3.1.3 Programa de control digital Lab-Volt LVPROSIM......................................63 3.1.4 Conexión de los equipos ...............................................................................64
3.2 Experimentos realizados en el laboratorio............................................................67 CAPÍTULO 4: Preparación inicial de la red RS-485 y pruebas de protocolo de comunicación ............................................................................69
4.1 Conexión del controlador Foxboro® 716C con la PC..........................................69 4.2 Pruebas de comunicación utilizando software de monitoreo de puerto serial. .....73
4.2.1 Pruebas para el puerto...................................................................................74 4.2.2 Pruebas de protocolo y comandos MODBUS ..............................................77
CAPÍTULO 5: Desarrollo del programa de supervisión y configuración82
5.1 Requerimientos del programa...............................................................................82 5.1.1 Requerimientos generales .............................................................................82 5.1.2 Ejemplos de programas con interfaz gráfica.................................................83
5.2 Elección del lenguaje de programación ................................................................86 5.3 Descripción de la interfaz gráfica .........................................................................88
5.3.1 Vista general de la interfaz ...........................................................................88 5.3.2 Control de conexión/desconexión.................................................................89 5.3.3 Tablero de operación y sintonización del controlador..................................90 5.3.4 Configuración de gráfico y registro ..............................................................92 5.3.5 Gráfico de tendencias....................................................................................93 5.3.6 Ventana de mensajes.....................................................................................94
5.4 Funcionamiento interno del programa..................................................................94 5.4.1 Interacción con interfaz gráfica ....................................................................94 5.4.2 Establecimiento de conexión ........................................................................95 5.4.3 Proceso de envío de mensajes.......................................................................98 5.4.4 Procesamiento adicional de mensajes.........................................................100 5.4.5 Ciclo de graficación y registro de variables................................................101 5.4.6 Detección y corrección de errores ..............................................................103
CAPÍTULO 6: Conclusiones y recomendaciones .....................................105
BIBLIOGRAFÍA..........................................................................................110
vii
vii
APÉNDICE A: Parámetros de configuración del Foxboro® 716C ........112
APÉNDICE B: Parámetros de operación del Foxboro® 716C ...............117
APÉNDICE C: Funciones del protocolo de comunicaciones del Foxboro® 716C [14]..........................................................................................................118
C.1 Función 1 y 2: Lectura de n bits .........................................................................118 C.2 Función 3 y 4: Lectura de n palabras..................................................................119 C.3 Función 5: Escritura de un bit.............................................................................120 C.4 Función 6: Escritura de una palabra ...................................................................121 C.5 Función 15: Escritura de n bits ...........................................................................122 C.6 Función 16: Escritura de n palabras....................................................................123 APÉNDICE D: Direcciones de memoria del Foxboro® 716C [14] ...........124
Apéndice E: Experimentos realizados en el Laboratorio de Control .....131
E.1 Experimento 1: Característica Estática del Proceso ...........................................131 E.1.1 Procedimiento .............................................................................................131 E.1.2 Resultados...................................................................................................132
E.2 Experimento 2: Característica Dinámica del Proceso.........................................134 E.2.1 Procedimiento .............................................................................................134 E.2.2 Resultados...................................................................................................137
E.3 Experimento 3: Parámetros últimos o críticos....................................................139 E.3.1 Procedimiento .............................................................................................139 E.3.2 Resultados...................................................................................................141
E.4 Experimento 4: Controlador Proporcional (P)....................................................143 E.4.1 Procedimiento .............................................................................................143 E.4.2 Resultados...................................................................................................145
E.5 Experimento 5: Controlador Proporcional Integral (PI) .....................................147 E.5.1 Procedimiento .............................................................................................147 E.5.2 Resultados...................................................................................................150
E.6 Experimento 6: Controlador Proporcional Integral Derivativo (PID) ................155 E.6.1 Procedimiento .............................................................................................155 E.6.2 Resultados...................................................................................................156
E.7 Experimento 7: Método de Sintonización de Ziegler y Nichols.........................159 E.7.1 Procedimiento .............................................................................................159 E.7.2 Resultados...................................................................................................161
E.8 Experimento 8: Sintonización mediante criterios integrales ..............................163 E.8.1 Procedimiento .............................................................................................163 E.8.2 Resultados...................................................................................................166
APÉNDICE F: Código fuente del programa.............................................170
APÉNDICE G: Manual de usuario del programa....................................202
viii
viii
ÍNDICE DE FIGURAS
Figura 2.1 Lazo de Control Realimentado [1]....................................................................21
Figura 2.2 Diagrama de bloques de un controlador PID ideal [1] .....................................24
Figura 2.3 Diagrama de bloques simplificado del controlador Foxboro® 716C .............26
Figura 2.4 Diagrama de la disposición de las terminales del Foxboro® 716C [13] ...........27
Figura 2.5 Algoritmo de auto-ajuste SMART del Foxboro® 716C [13]............................30
Figura 2.6 Interruptor del modo de configuración/operación del Foxboro® 716C [13] ....32
Figura 2.7 Panel frontal del controlador Foxboro® 716C [13] ..........................................34
Figura 2.8 Señal diferencial o balanceada en una interfaz RS-485 [9] ..............................37
Figura 2.9 Configuración de dos hilos (half duplex) para RS-485 [8] ...............................38
Figura 2.10 Configuración de cuatro hilos (full duplex) para RS-485 [8] .........................39
Figura 2.11 Diferentes topologías posibles para una red RS-485 [11] ...............................40
Figura 2.12 Conductor de señal común en una interfaz RS-485 [11] .................................41
Figura 2.13 Terminación de las líneas de transmisión de una red RS-485 [10] .................43
Figura 2.14 Velocidad de transmisión máximas permitida según la longitud de línea [9].45
Figura 2.15 Marco unitario de mensaje de protocolo MODBUS de línea serial [8]..........48
Figura 2.16 Formato de un byte en el protocolo MODBUS de línea serial . ..................49
Figura 2.17 Separación mínima entre marcos unitarios de mensajes MODBUS . ...........50
Figura 2.18 Separación mínima entre caracteres de un marco de mensaje MODBUS. ...50
Figura 2.19 Sintaxis de diagramas de estados de la comunicación MODBUS [8]. ...........51
Figura 2.20 Diagrama de Estados del maestro en la comunicación MODBUS [8]. ..........51
Figura 2.21 Diagrama de Estados del esclavo en la comunicación MODBUS. ...............53
Figura 2.22 Diagrama de flujo para el algoritmo de cálculo del CRC 16. .......................56
Figura 3.1 Diagrama esquemático de los procesos del Lab-Volt® 3522. ........................61
Figura 3.2 Conexiones para el control y monitoreo del proceso de temperatura .............65
ix
ix
Figura 3.3 Conexiones para el control y monitoreo del proceso de caudal ......................66
Figura 4.1 Convertidor RS-232/485 de Aten Technologies .............................................70
Figura 4.2 Adaptador DB-9 hembra a DB-25 macho para puerto serial ..........................70
Figura 4.3 Diagrama de conexión serial entre la PC y el controlador ..............................72
Figura 4.4 Software de monitoreo de puerto serial RealTerm..........................................74
Figura 4.5 Señal “A” al transmitir la cadena ASCII “RS” ...............................................75
Figura 4.5 Señal “A”, “B” y diferencial al transmitir la cadena ASCII “RS” ..................76
Figura 4.6 Captura del comando que pone el controlador en modo remoto.....................78
Figura 4.7 Petición y respuesta para la instrucción de modo remoto ...............................79
Figura 4.8 Petición errónea y respuesta de error vista en el RealTerm ............................81
Figura 4.9 Petición errónea y respuesta de error vista en el osciloscopio ........................81
Figura 5.1 Interfaz gráfica del software LVPROSIM de Lab-Volt® ...............................83
Figura 5.2 Interfaz gráfica del software GUNT RT 578.20..............................................85
Figura 5.3 Interfaz gráfica del programa realizado...........................................................89
Figura 5.4 Ventana del diálogo de configuración del controlador ...................................92
Figura 5.5 Flujo del proceso de conexión de los controladores........................................96
Figura 5.6 Flujo del proceso de desconexión de los controladores ..................................97
Figura 5.7 Flujo del proceso de envío de mensajes al controlador...................................98
Figura E.1 Resultados del experimento de la característica estática del proceso ...........133
Figura E.2 Condición de oscilación permanente del proceso de caudal.........................141
Figura E.3 Respuesta del proceso de caudal a un cambio escalón con Bp = 50% .........141
Figura E.4 Condición de oscilación permanente del proceso de temperatura ................142
Figura E.5 Respuesta del proceso térmico a un cambio escalón con Bp = 50% ............142
Figura E.6 Efecto de la variación de Bp en el proceso de caudal – Control P ...............145
Figura E.7 Efecto de la variación de Bp en el proceso de temperatura – Control P.......145
Figura E.8 Efecto de la variación de ti en el proceso de caudal – Control PI.................150
Figura E.9 Efecto de la variación de Bp en el proceso de caudal – Control PI...............151
Figura E.10 Efecto de la variación de ti en el proceso de temperatura – Control PI ......151
Figura E.11 Efecto de la variación de Bp en el proceso de temperatura – Control PI ....152
Figura E.12 Respuesta del proceso de temperatura con td =0 – Control PID .................157
x
x
Figura E.13 Respuesta del proceso de temperatura con td =2s – Control PID ...............157
Figura E.14 Respuesta del proceso de temperatura con td =5s – Control PID ...............158
Figura E.15 Respuesta del proceso - método sintonización de Ziegler y Nichols PI .....161
Figura E.16 Respuesta de proceso - método sintonización de Ziegler y Nichols PID ...162
Figura E.17 Respuesta de proceso para método de sintonización Rovira - ITAE..........167
Figura E.18 Respuesta de proceso para método de sintonización López - ITAE...........167
Figura E.19 Respuesta de proceso - método de sintonización Alfaro IAE Servo ..........168
Figura E.20 Respuesta de proceso - método de sintonización Alfaro IAE Regulador ...168
xi
xi
ÍNDICE DE TABLAS
Tabla 2.1 Configuración de puentes internos según el tipo de entrada analógica[13]........28
Tabla 2.2 Resumen de especificaciones de la EIA-485[7].................................................36
Tabla 2.3 Formato de la transmisión maestro-esclavo [14] ................................................57
Tabla 2.4 Formato de error devuelto por un esclavo[14]....................................................58
Tabla 2.5 Códigos de error devueltos en el protocolo de comunicación[14] .....................58
Tabla 3.1 Parámetros de configuración del controlador para el uso en el laboratorio......62
Tabla 4.1 Formato de la instrucción para ingresar al modo remoto del controlador ........78
Tabla 4.2 Error esperado para el direccionamiento erróneo.............................................80
Tabla 5.1 Código de colores utilizado en los gráficos de control del programa...............93
Tabla A.1 Parámetros del modo de configuración básica del Foxboro® 716C[13] .........112
Tabla A.2 Parámetros del modo de configuración avanzada del Foxboro® 716C[13] ....114
Tabla B.1 Parámetros del modo de operación del Foxboro® 716C[14]...........................117
Tabla C.1 Función 1 y 2: Lectura de n bits – Petición del Maestro................................118
Tabla C.2 Función 1 y 2: Lectura de n bits – Respuesta del esclavo..............................118
Tabla C.3 Función 3 y 4: Lectura de n palabras – Petición del Maestro ........................119
Tabla C.4 Función 3 y 4: Lectura de n palabras – Respuesta del esclavo ......................119
Tabla C.5 Función 5: Escritura de un bit – Petición del Maestro...................................120
Tabla C.6 Función 5: Escritura de un bit – Respuesta del esclavo.................................120
Tabla C.7 Función 6: Escritura de una palabra – Petición del Maestro..........................121
Tabla C.8 Función 6: Escritura de una palabra – Respuesta del esclavo........................121
Tabla C.9 Función 15: Escritura de n bits – Petición del Maestro .................................122
Tabla C.10 Función 15: Escritura de n bits – Respuesta del esclavo .............................122
Tabla C.11 Función 16: Escritura de n palabras – Petición del Maestro........................123
Tabla C.12 Función 16: Escritura de n palabras – Respuesta del esclavo......................123
Tabla D.1 Estados de bit y comandos para el dispositivo en modo de control ..............124
xii
xii
Tabla D.2 Estados de bit y comandos para el dispositivo en modo de configuración....125
Tabla D.3 Palabras para el dispositivo en modo de control............................................127
Tabla D.4 Palabras para el dispositivo en modo de configuración.................................128
Tabla A.1 Resultados de la característica estática del proceso de caudal.......................132
Tabla E.2 Modelos de primer y segundo orden más tiempo muerto– proceso de caudal........................................................................................................................................137
Tabla E.3 Modelos de primer y segundo orden más tiempo muerto – proceso térmico 138
Tabla E.4 Parámetros críticos de los procesos de caudal y temperatura ........................142
Tabla E.5 Modelos de la planta basados en los parámetros últimos...............................143
Tabla E.6 Resultados para el proceso de caudal – Control proporcional .......................146
Tabla E.7 Resultados para el proceso de temperatura – Control proporcional...............146
Tabla E.8 Resultados de la variación de ti en el proceso de caudal – Control PI ...........152
Tabla E.9 Resultados de la variación de Bp en el proceso de caudal – Control PI .........153
Tabla E.10 Resultados de la variación de ti en el proceso térmico – Control PI ...........153
Tabla E.11 Resultados de la variación de Bp en el proceso térmico – Control PI ..........153
Tabla E.12 Resultados de la variación de td en el proceso térmico – Control PID.........158
Tabla E.13 Resultados de la sintonización mediante el método de Ziegler y Nichols ...162
Tabla E.14 Cálculo de parámetros de control mediante criterios integrales ..................164
Tabla E.15 Resultados de la sintonización mediante criterios integrales .......................169
xiii
xiii
NOMENCLATURA
ASCII American Standard Code for Information Interchange. Código
numérico de 7 bits para representar los caracteres del alfabeto y otros
caracteres especiales.
Bit Dígito en sistema numeral binario. Unidad fundamental de información.
Byte Palabra binaria formada por varios bits, generalmente ocho.
Baud rate En telecomunicaciones, medida del número de cambios en el medio de
transmisión que ocurren por segundo en una señal modulada.
Bp Parámetro de banda proporcional del controlador automático
Buffer Área de almacenamiento temporal de datos transmitidos entre dos
dispositivos para compensar diferencias en envío o recepción.
CRC Método de detección de errores por chequeo de redundancia cíclica
DTE Data terminal equipment. En una comunicación serial, equipo que
convierte la información del usuario en señales para la transmisión.
DCE Data terminal equipment. En una comunicación serial, equipo que se
comunica con el DTE y que realiza las funciones de conversión de
señales y codificación al otro extremo de la línea de comunicación.
e(s) Señal de error en el lazo de control realimentado
EIA Alianza de Industrias Electrónicas.
Gc(s) Función de transferencia del controlador automático
Gp(s) Función de transferencia de la planta
GUI Graphical user interface. Interfaz gráfica de un software.
IAE Criterio de integral del error absoluto
ITAE Criterio de integral del tiempo por el error absoluto
KC Parámetro de ganancia del controlador automático
Kp Parámetro de ganancia de la planta
LSB Least significant bit. Bit menos significativo de una palabra binaria.
xiv
xiv
MODBUS Protocolo que permite una comunicación maestro-esclavo en gran
diversidad de arquitecturas de redes.
MSB Most significant bit. Bit más significativo de una palabra binaria.
Mp Sobrepaso máximo de la respuesta del sistema de control
OR Operador lógico.
PC Personal Computer. Computadora personal.
PDU Protocol data unit. Unidad básica en un mensaje de protocolo MODBUS
Perl Practical Extraction and Report Language. Lenguaje de programación.
PI Controlador proporcional integral
PID Controlador proporcional integral derivativo.
PLC Programador lógico programable.
r(s) Valor deseado del sistema de control
RS-232 Estándar de comunicación serial punto a punto.
RS-485 Estándar de comunicación serial multipunto que utiliza líneas
balanceadas.
RTS Request to send. Señal que forma parte del protocolo de control de flujo
de datos en la comunicación serial.
RTU Remote terminal unit. Modo de transmisión serial MODBUS.
SMART Algoritmo de auto-ajuste propietario de Foxboro®
STP Shielded twisted pair. Cable de par trenzado con pantalla.
t1.5 Tiempo igual a 1.5 veces la duración de emisión de un carácter (byte) en
el protocolo MODBUS
t3.5 Tiempo igual a 3.5 veces la duración de emisión de un carácter (byte) en
el protocolo MODBUS
ta2% Tiempo de asentamiento al 2% de la respuesta del sistema de control
Td Parámetro de tiempo derivativo del controlador automático
Ti Parámetro de tiempo integral del controlador automático
tm Tiempo muerto de la planta
xv
xv
tau (τ) Constante de tiempo de la planta
TIA Asociación de Industrias de Telecomunicación.
u(s) Salida del controlador automático
UART Universal asynchronous receiver transmitter. Circuito integrado en
computadoras que convierte los datos en paralelo a datos en serie o el
proceso inverso, con el fin de comunicarse con sistemas externos.
UL Unit load. Carga unitaria que se conecta a un bus de comunicaciones.
XOR OR exclusivo. Operador lógico.
y(s) Variable realimentada en el lazo de control.
z(s) Perturbación del lazo de control realimentado.
16
RESUMEN
El proyecto consistió en dos etapas principales. En la primera se realizó un
programa para manejar la conexión, configuración y sintonización de dos o más
controladores Foxboro 716® conectados a través una red RS-485, así como el registro y la
graficación de: variable realimentada y(t), salida de controlador u(t) y valor deseado r(t) de
varios esclavos a la vez. En la segunda se construyeron las cajas de conexión para los
controladores, con terminales de entrada, salidas, alimentación y conexión de red, para una
utilización sencilla y segura del dispositivo en el Laboratorio de Control Automático.
Para el desarrollo de la comunicación, se estudiaron los manuales del equipo, así
como las especificaciones para redes RS-485, y las normas del protocolo MODBUS.
Después se realizó la implementación física de la red entre la PC y el controlador y se
realizaron satisfactoriamente varias pruebas de comunicación. Luego, se desarrolló el
programa de supervisión y configuración utilizando el lenguaje Perl, con una interfaz
gráfica hecha con Perl/Tk. El programa permite la configuración de los parámetros de
control más importantes, así como el monitoreo de las variables principales y el registro de
datos en un archivo externo, con dos o más esclavos conectados a la vez.
En forma paralela, se construyeron las cajas de interconexión de los controladores,
siguiendo los requerimientos de seguridad incluidos en el manual del fabricante.
Finalmente, se preparó un manual de usuario del programa y el controlador, para
facilitar su uso en las prácticas del laboratorio.
17
CAPÍTULO 1: Introducción
La Escuela de Ingeniería Eléctrica de la Universidad de Costa Rica adquirió en el
año 2005 varios controladores PID digitales marca Foxboro®, modelo 716C para ser
utilizados como herramienta didáctica en las prácticas del Laboratorio de Control
Automático. Estos controladores son compactos y sencillos de utilizar; sin embargo, cada
vez que se necesita configurar el dispositivo, es necesario abrir su cubierta protectora para
acceder al selector de modo de funcionamiento: configuración u operación. Por otra parte,
el alambrado tanto de entradas y salidas, como de la alimentación se debe hacer por medio
de los terminales ubicados en la parte posterior del controlador, que igualmente podrían
deteriorarse por exceso de uso. Como estos controladores serán utilizados por estudiantes
en las prácticas de laboratorio, se debía evitar al máximo esta manipulación.
Para ello se recurrió a dos soluciones, las cuales dieron origen al presente proyecto.
La primera de ellas fue desarrollar un programa para la configuración y operación remota
de los controladores desde una computadora utilizando una red RS-485. La segunda fue
construir cajas de interconexión portátiles en donde se pudieran empotrar los controladores,
y que tuviera puertos de entrada y salida de una manera accesible, así como el cable de
alimentación de poder, y otras conexiones necesarias. Así, se podría aprovechar al máximo
la utilización de los controladores, alargando su vida útil.
18
1.1 Objetivos
1.1.1 Objetivo general
Desarrollar un programa de supervisión para dos o más controladores Foxboro®
716C conectados en red, que permita su sintonización y configuración desde una PC,
así como el despliegue gráfico de sus señales de entrada y salida.
1.1.2 Objetivos específicos
• Estudiar las características de control y comunicaciones del controlador PID digital
Foxboro® 716C.
• Analizar las características de otros programas supervisores y determinar las
características deseables para este tipo de programa.
• Seleccionar el lenguaje de programación adecuado para el desarrollo.
• Desarrollar un programa que permita la supervisión remota en línea, de dos o más
controladores Foxboro® 716C sobre una red RS-485.
• El programa debe permitir como mínimo: selección del modo de operación
(manual/automática), sintonización de sus parámetros (ganancia, tiempo integral,
tiempo derivativo, filtro, otros), ajuste del valor deseado, despliegue gráfico de la
variable medida, el valor deseado y la salida del controlador.
• Montar los controladores en cajas de interconexión portátiles, con terminales
disponibles para sus señales de entrada y salida, conexión a la red y alimentación.
• Preparar el Manual de Usuario del programa de supervisión y configuración.
19
1.2 Metodología
El desarrollo del presente proyecto se inició con una familiarización con el
funcionamiento de los controladores Foxboro® 716C. Para ello, se estudiaron los
manuales aportados por el fabricante, haciendo énfasis en las secciones referentes a la
configuración del dispositivo, a sus características de control, requerimientos de alambrado,
así como también el manual de protocolo de comunicaciones. Posteriormente, se trabajó
con el controlador de forma local (sin conexión serial) en el laboratorio, utilizando como
planta el equipo Lab-Volt® modelo 3522, el cual consta de un proceso de caudal y uno de
temperatura, y se realizaron varias de las prácticas del curso de laboratorio de control. Se
identificaron modelos para representar las plantas, se determinaron los parámetros de
sintonización del controlador PID Foxboro® 716C y se realizó el control. Esto permitió
familiarizarse con el funcionamiento del equipo.
Como siguiente paso, se establecieron los requerimientos mínimos que debe tener el
programa de configuración y supervisión. Para ello, se analizaron las funciones básicas que
presentan programas similares, tales como el GUNT RT 578.20 para el controlador ABB
Digitric 500, o el LVPROSIM, que es el que controla el equipo de Lab-Volt® descrito
anteriormente. Con base las características identificadas como necesarias para desarrollar
el programa propuesto, se procedió a la elección del lenguaje de programación adecuado
para la codificación.
20
Para que el programa fuera capaz de manejar el dispositivo de manera remota, fue
necesario estudiar tanto las especificaciones para la configuración de hardware para una red
RS-485, como las normas que rigen el protocolo de comunicaciones entre la PC y el equipo
remoto. Para ello se realizó una consulta bibliográfica que contempló tanto las normas
generales de los estándares respectivos, como ejemplos de aplicaciones prácticas, y
adecuando los conceptos para la implementación específica, según lo establecido en los
manuales de configuración y comunicación del Foxboro® 716C.
Una vez contemplados todos los aspectos anteriores, se procedió a implementar
físicamente la red entre el computador y un controlador, utilizando la conexión serial
provista por el fabricante. Inicialmente se desarrolló un programa de configuración
preliminar, el cual, de manera sencilla (sin el uso de una interfaz gráfica, incluso) permitió
realizar algunas de las funciones básicas de configuración y captura de datos, para
asegurarse del buen funcionamiento de la red en general, de la temporización y
procesamiento de los comandos de comunicación, entre otros aspectos, y de esa forma
determinar si era necesario hacer ajustes posteriores. Finalizada la etapa de desarrollo
preliminar, se completó el programa incorporándole el resto de su funcionalidad, que
permitía la configuración y supervisión mínima expuesta en los objetivos del proyecto.
En forma paralela, se construyeron las cajas de interconexión de los controladores.
Finalmente, una vez probado el programa, se confeccionó un manual de usuario
para que los estudiantes sean capaces de conectar los equipos de manera adecuada,
configurar los controladores, y utilizar los equipos como parte de sus prácticas,
supervisando y controlando distintas plantas y procesos utilizando el Foxboro® 716C.
21
CAPÍTULO 2: Desarrollo teórico
Previo al desarrollo del programa de configuración y supervisión se deben conocer
los principios básicos del control automático, los controladores PID, las características del
Foxboro® 716C, así como una serie de temas acerca del sistema de comunicación serial
que utiliza, para lograr una implementación correcta de acuerdo con los estándares
establecidos.
2.1 Conceptos de Control Automático
2.1.1 Elementos de un sistema de control realimentado Un sistema de control realimentado puede representarse por medio de un diagrama
de bloques como el que muestra la Figura 2.1:
Figura 2.1 Lazo de Control Realimentado [1]
En este sistema, pueden identificarse sus distintos componentes, los cuales son:
a) La planta (Gp(s)): Esta representa la función de transferencia de una planta o
un proceso industrial que va a ser controlado, que incluye el proceso en sí
junto con un sensor/transmisor y un elemento final de control. Este modelo
matemático puede obtenerse mediante métodos de identificación
experimentales de lazo abierto o cerrado, los cuales por lo general consisten
22
en excitar el proceso y registrar tanto las entradas como las salidas de la
planta, para luego obtener un modelo mediante técnicas ya desarrolladas.
b) El Controlador (Gc(s)): Es el último elemento del lazo de control, que se
encarga de mantener una variable dentro de los límites establecidos. Se
representa por la función de transferencia del controlador, la cual depende del
tipo de controlador que vaya a ser utilizado, como se verá más adelante.
También dependiendo del tipo de proceso, puede funcionar como regulador o
como servomecanismo, y su acción puede ser directa o inversa.
c) Señal realimentada (y(s)): Representa la medición que toma el sensor de la
variable controlada, es decir, la salida del proceso que debe controlarse. Esta
señal es enviada hacia el controlador por medio del transmisor para que se
calcule la señal de error.
d) Señal de error (e(s)): El error e(s) es la diferencia entre el valor deseado de la
variable controlada y su valor real. Con base en este valor, el controlador
calcula su salida, dependiendo del algoritmo que este tenga.
e) Entradas r(s) y z(s): Las entradas del sistema de control son el valor deseado
r(s) y la perturbación z(s). El valor deseado, es el que se desea que tenga la
variable controlada y(s). Las perturbaciones son también entradas al sistema
de control que tienden a desviar la variable controlada de su valor deseado.
f) Salida del controlador (u(s)): La señal de salida del controlador es recibida
por el elemento final de control, el cual se encarga de modificar la variable
manipulada m(s) para efectuar la acción de control.
23
2.1.2 Tipos de controladores
Existen muchos tipos de controladores que varían no sólo en su mecanismo de
operación (neumáticos, analógicos, digitales, PLC) sino también en sus modos de control.
El modo de control lo conforma la función de transferencia del controlador, la cual es la
expresión matemática con la que el controlador procesa la señal de error para calcular la
salida requerida para restablecer el equilibrio del sistema.
Los controladores de uso industrial están formados por la combinación de modos de
control proporcional, integral y derivativo.[1] De esta forma surgen los controladores de
tipo proporcional (P), proporcional-integral (PI), proporcional-derivativo (PD) y
proporcional-integral-derivativo (PID). En cada uno, existen hasta tres parámetros
fundamentales que se sintonizan para lograr la respuesta adecuada del lazo de control: la
ganancia Kc (o banda proporcional Bp), el tiempo integral Ti y el tiempo derivativo Td.
Todos los controladores P, PI y PD se representan respectivamente como:
cc K)s(G = (2.1.2-1)
⎟⎟⎠
⎞⎜⎜⎝
⎛+=
sT11K)s(Gi
cc (2.1.2-2)
( )sT1K)s(G dcc += (2.1.2-3)
Sin embargo, la falta de estandarización en el desarrollo de los primeros
controladores PID industriales provocó la existencia de diversas variaciones de estos. De
esta forma es común encontrar controladores con modo de control PID “ideal”, PID serie o
24
PID paralelo. En el PID ideal, cada modo actúa sobre el error por separado, tal y como lo
muestra la Figura 2.2:
Figura 2.2 Diagrama de bloques de un controlador PID ideal [1]
Y la función de transferencia es:
⎟⎟⎠
⎞⎜⎜⎝
⎛++= sT
sT11K)s(G di
cc (2.1.2-4)
No obstante, los primeros fabricantes de controladores industriales encontraron que
resultaba más sencillo construir un PID colocando un controlador PI en serie con un PD,
dando origen al PID serie, el cual se representa como:
⎟⎠⎞⎜
⎝⎛ ′+⎟⎟
⎠
⎞
⎜⎜
⎝
⎛
′+′= sT1sT
11K)s(G d
i
cc (2.1.2-5)
Por otra parte, está también el controlador PID paralelo, el cual tiene una ganancia
de ajuste independiente para cada modo de control:
⎟⎠⎞
⎜⎝⎛ ++= sK
sKK)s(G d
ipc (2.1.2-6)
25
Sin embargo, las ecuaciones (2.1.2-4) a (2.1.2-6) vistas anteriormente corresponden
a modelos teóricos, por lo que a la hora de la implementación real, requieren ciertas
modificaciones, principalmente por el hecho de que es imposible construir físicamente un
derivador puro. Una forma de corregir esto es incluir un filtro paso bajo con constante τf en
el modo derivativo, por lo que las ecuaciones de los PID ideal, serie y paralelo “realizables”
son:
⎟⎟⎠
⎞⎜⎜⎝
⎛τ+
++=s1
sTsT
11K)s(Gf
d
icc (2.1.2-7)
⎟⎟
⎠
⎞
⎜⎜
⎝
⎛
τ+
′+⎟
⎟
⎠
⎞
⎜⎜
⎝
⎛
′+′=s1
sT1
sT
11K)s(Gf
d
i
cc (2.1.2-8)
⎟⎟⎠
⎞⎜⎜⎝
⎛τ+
++=s1
sKs
KK)s(G
f
dipc (2.1.2-9)
También existe el controlador PID “industrial” que aplica el modo derivativo sobre
la señal realimentada en lugar de la señal del error. Su ecuación es:
⎟⎟
⎠
⎞
⎜⎜
⎝
⎛
τ+
′++⎟
⎟
⎠
⎞
⎜⎜
⎝
⎛
′+′= )t(yp1pT1
)t(rpT
11K)t(uf
d
i
c (2.1.2-10)
Asimismo existen otras variaciones más como los PID de dos grados de libertad, los
controladores PID universales, entre otros, cuya descripción puede encontrarse en artículos
y literatura de control automático, pero que se salen del alcance del presente trabajo.
26
2.2 El Controlador Digital Foxboro® 716C
2.2.1 Especificaciones generales El controlador Foxboro® 716C es un controlador digital que, a pesar de ser
compacto, ofrece gran variedad de opciones de configuración y operación, entre ellas la
comunicación con equipos de adquisición de datos. La Figura 2.3 presenta un diagrama de
bloques simplificado de este instrumento.
Figura 2.3 Diagrama de bloques simplificado del controlador Foxboro® 716C
A continuación se describirán brevemente las principales características del
controlador.[12][13]
2.2.2 Entradas y salidas En su parte posterior, el controlador Foxboro® 716C presenta un tablero con 15
terminales para las conexiones de entrada y salida del dispositivo, así como para su
alimentación eléctrica. La Figura 2.4 muestra la disposición de estas terminales:
27
Figura 2.4 Diagrama de la disposición de las terminales del Foxboro® 716C [13]
Alimentación AC (PWR Line - terminales 4 y 5):
La alimentación puede tener un valor nominal de 100 a 240 Vac. El neutro del
sistema debe conectarse forzosamente a la terminal 4. Se deben utilizar cables con calibre
mínimo de 16 AWG con aislamiento que resista al menos 75°C.
Entrada de medición (LINEAR - terminales 8,9,10):
Esta es una entrada “universal” analógica, ya que permite conectar termopares,
detectores de temperatura por resistencia (RTD), o entradas lineales de voltaje (0 a 5Vdc, 1
a 5 Vdc, 0 a 10Vdc, 2 a 10Vdc, 0 a 60 mV, 12 a 60 mV) o corriente (0 a 20 mA, 4 a 20
mA). Únicamente para los dos primeros casos se utilizan los tres terminales. Se
recomienda el uso de cables con pantalla, la cual debe aterrizarse únicamente en un
extremo del cable.
Para poder predeterminar el tipo de entrada analógica que se utilizará, el Foxboro®
716C requiere que se configuren unos “puentes” internos, según se indica en la Tabla 2.1.
28
Tabla 2.1 Configuración de puentes internos según el tipo de entrada analógica[13]
J106 Tipo de entrada
1-2 3-4 5-6 7-8 9-10 TC-RTD abierto cerrado abierto abierto abierto 60 mV abierto cerrado abierto abierto abierto
5 V cerrado abierto cerrado abierto abierto 10 V abierto abierto cerrado abierto abierto
20 mA abierto abierto abierto cerrado cerrado
Entrada lógicas (SP/SP2 - terminales 14 y 15):
El Foxboro® 716C viene equipado con una entrada de contacto lógico para poder
alternar entre el valor deseado principal (set point 1) y el secundario (set point 2). La
transferencia puede darse por medio de un interruptor externo con valor nominal de 0.5
mA, 5Vdc o mayor. Para poder reconocer un cambio, el contacto debe permanecer cerrado
más de 100 ms.
Salida lineal (OUT1- terminales 6 y 7):
La señal de salida analógica es opto-aislada configurable para 0 a 20 mA, o 4 a 20
mA. Esta puede programarse para servir tanto como salida de control (directa o inversa),
como también para retransmisión del valor medido, o del valor deseado. La retransmisión
puede hacer uso de un filtro digital con una constante de tiempo igual a la de la lectura.
Salidas de relé (OUT2 y OUT3 – terminales 1,2,3):
El controlador tiene además disponibles otras dos salidas de relé con un contacto de
valor nominal de 2 A a 250 Vac (con carga resistiva) y protegidas por varistor. Estas dos
salidas pueden configurarse para utilizarse como salidas de control (directa o inversa) o
como salida de alarma (de proceso, de banda o de desviación).
29
2.2.3 Interfaz de comunicación serial Además de las terminales ya mencionadas, el controlador posee tres más dedicadas
a la interfaz serial (RS 485 – terminales 11,12,13), para poder comunicarse con una PC y
ser configurado y controlado remotamente desde esta. Estas tres terminales son opto-
aisladas y conforman un sistema RS-485 de tres hilos (A/A’, B/B’,Común). Otras
características importantes son:
- Velocidad de transmisión configurable entre 600, 1200, 2400, 4800, 9600 o
19200 baudios.
- Longitud máxima de cable: 1,5 km (a 9600 baud)
- Máximo 32 unidades (esclavos) pueden conectarse a la PC (maestro)
- Dirección: configurable de 1 a 255
- Tipo de protocolo: MODBUS, JBUS o protocolo propietario de Foxboro®
La definición de estos conceptos, así como una explicación más profunda acerca de
las interfaces seriales RS-485, así como del protocolo de comunicación MODBUS, pueden
encontrarse en las secciones 2.3 y 2.4, respectivamente.
2.2.4 Características de control
El controlador Foxboro® 716C presenta un algoritmo de control proporcional
integral derivativo (PID), el cual se puede sintonizar manualmente o por medio del
algoritmo propietario de auto-ajuste denominado “SMART”. Este monitorea continuamente
el proceso y automáticamente ajusta los parámetros del PID según sea necesario. En el
arranque, SMART optimiza la llegada al valor deseado y reduce el sobrepaso; durante el
30
control, los parámetros se ajustan cuando hay perturbaciones o cambios en la carga o en el
valor deseado. La Figura 2.5 ilustra ambas condiciones.
Figura 2.5 Algoritmo de auto-ajuste SMART del Foxboro® 716C [13]
Sin embargo, los mecanismos de auto-ajuste no son siempre muy efectivos, por lo
que generalmente resulta mejor sintonizar manualmente el algoritmo PID. Algunas de las
características y opciones de control que presenta el dispositivo son:
- Tipo de control configurable entre PID, PI, P, auto-ajuste (SMART) o control
deshabilitado (trabajando como indicador únicamente).
- Modo de operación manual o automático.
- Banda proporcional: configurable de 1% a 200% del rango de entrada
- Tiempo derivativo: configurable de 1 segundo a 10 minutos en intervalos de 1
segundo, o apagado.
- Tiempo integral: configurable de 1 segundo a 20 minutos, en intervalos de 1
segundo, o apagado.
- Pre-carga integral: configurable para una salida de control entre 0 a 100% del
rango de salida.
31
- Histéresis (para encendido o apagado de acción de control): configurable entre
0.1% a 10.0% del rango de entrada.
- Opción de configurar dos puntos de operación distintos (valor deseado):
principal (SP) y auxiliar (SP2), transferibles por medio de un interruptor
externo.
- Configuración de funciones de rampa independientes aplicables a los aumentos
o disminuciones en el valor deseado, así como para arranques suaves.
- Salida de control (principal o secundarias) inversa o directa.
- Alarmas de proceso, banda o desviación configurables en las salidas de control
auxiliares, de acción directa o inversa, con restablecimiento automático o
manual.
- Retransmisión de valor deseado o valor medido por medio de la salida principal.
- Filtro digital para el valor mostrado o retransmitido (constante de tiempo de 4 s
para RTD o termopar, 2 s para entradas lineales).
- Tiempo de muestreo: 250 ms (entradas lineales) o 500 ms (RTD o termopar).
2.2.5 Características adicionales - Indicador con pantalla doble de LED de cuatro dígitos para mostrar el valor
deseado, la variable controlada y los valores de configuración.
- Teclado frontal para configuración y operación.
- Indicadores luminosos para indicar número de salidas utilizadas, número de
punto de operación, operación automática/manual, habilitación de manejo
32
remoto, habilitación de algoritmo de auto ajuste, unidades de temperatura, entre
otros.
- Bloqueo de seguridad para evitar modificación de parámetros durante la
operación.
2.2.6 Modo de configuración / operación Para alternar entre el modo de configuración u operación el controlador Foxboro®
716C presenta en su interior un interruptor (V01) tal y como lo muestra la Figura 2.6. La
posición abierta indica el modo de configuración, mientras que el cierre da lugar al modo
de operación. Según el modo en que se encuentre, las funciones que son accedidas por
medio del teclado frontal varían, así como la información desplegada por la pantalla.
Figura 2.6 Interruptor del modo de configuración/operación del Foxboro® 716C [13]
En ambos modos, las funciones de las teclas son las siguientes:
FUNC: Guarda el valor escogido y pasa al siguiente parámetro de configuración.
MAN: Regresa al parámetro anterior sin guardar el valor escogido.
/ : Aumenta/disminuye el valor del parámetro seleccionado.
33
Modo de Configuración:
Una vez que se ha colocado el interruptor V01 en la posición abierta, al encender el
controlador aparecerá la leyenda “COnF” en la pantalla, indicando que efectivamente el
dispositivo se encuentra en el modo de configuración.
Un listado exhaustivo de los parámetros de configuración disponibles en este modo,
así como los valores que se pueden seleccionar para cada uno de ellos se detallan en el
Apéndice A.
Modo de Operación:
Cuando el interruptor V01 se regresa a la posición cerrada, el dispositivo entrará en
el modo de operación. Al encenderse, la pantalla estará en el modo de despliegue normal,
con el valor medido en la parte superior y el valor deseado en la parte inferior.
Los indicadores luminosos de la parte frontal representan lo siguiente:
- REM: Se enciende al utilizar el punto de operación remoto (enlace serial)
- °C: Se enciende cuando la variable controlada está en grados Celsius.
- °F: Se enciende cuando la variable controlada está en grados Fahrenheit.
- SMRT: Parpadea durante el cálculo de auto ajuste. Se mantiene encendida
cuando el auto ajuste está activo.
- OUT 1: Parpadea con un ciclo de trabajo proporcional al valor de salida.
- OUT 2: Se enciende cuando la salida 2 está activa o la Alarma 1 está activa.
- OUT 3: Se enciende cuando la salida 3 está activa o la Alarma 2 está activa.
La Figura 2.7 muestra la apariencia de la pantalla, los botones y los indicadores
luminosos del panel frontal del controlador Foxboro® 716C.
34
Figura 2.7 Panel frontal del controlador Foxboro® 716C [13]
La tabla del Apéndice B muestra todos los parámetros de operación accesibles por
medio del teclado en este modo. Algunos de ellos podrían no aparecer, dependiendo de la
configuración que se haya establecido previamente.
Otras opciones disponibles durante el modo de operación son:
- Despliegue de la salida de control de acción inversa o directa: presionando la
tecla FUNC por tres segundos (r- inversa) y luego por otros tres segundos más
(d - directa). Se vuelve al modo normal al presionar la tecla por tres segundos
adicionales.
- Habilitar/deshabilitar de la salida de control: presionando simultáneamente las
teclas FUNC + durante cinco segundos deshabilita las salidas de control y el
dispositivo actúa únicamente como indicador. Para habilitar las salidas
nuevamente se repite el procedimiento.
- Función manual: el controlador puede ponerse en manual si se presiona la tecla
MAN por un segundo. El valor de la salida inversa se muestra en los dos dígitos
más significativos y el de la salida directa sale en los menos significativos. El
punto decimal entre ellos parpadea indicando que el modo manual está activo.
35
El valor deseado se puede modificar por medio de las teclas / . Para
regresar al modo automático se presiona el botón MAN por dos segundos.
- Acceso al valor deseado: cuando está en el modo normal, se puede modificar
este valor presionando alguna de las teclas / por 2 segundos. Una vez
ajustado el valor se activa después de dos segundos.
- Auto ajuste: ver Apéndice B.
2.3 Interfaz RS-485
2.3.1 Especificaciones generales La Recommended Standard 485, conocida simplemente como RS-485 es una norma
que define una interfaz de comunicación serial que no es tan comúnmente utilizada como la
RS-232; sin embargo, tiene un uso extensivo en las industrias para la transmisión de datos
multipunto debido a las ventajas que presenta frente a éste en cuanto a que permite una
comunicación bidireccional entre múltiples nodos con mayor velocidad de transmisión,
longitud de cables y rechazo de ruido, entre otros aspectos.
Alrededor de 1983, la EIA (Electronics Industries Alliance) definió el estándar RS-
485, pero posteriormente fue mejorado junto con la TIA (Telecommunications Industry
Association) para convertirlo en el estándar TIA/EIA-485-A en 1998, para asegurar una
uniformidad y compatibilidad entre diferentes fabricantes. El nombre TIA/EIA-485 o RS-
485 se usa comúnmente de manera indistinta. El estándar define principalmente las
características eléctricas de la línea, los emisores (drivers) y los receptores (receivers), pero
deja abierto las cuestiones referentes a las líneas de transmisión, topología y protocolo de
comunicaciones; no obstante, actualmente se pueden encontrar recomendaciones acerca de
36
ello en la documentación de gran cantidad de aplicaciones que utilizan este tipo de interfaz.
La tabla 2.1 muestra un resumen de las especificaciones de la EIA-485, tomado de las notas
de aplicación de la B&B Electronics:
Tabla 2.2 Resumen de especificaciones de la EIA-485[7]
2.3.2 Señales En una interfaz RS-232, se transmite una señal única de voltaje con respecto a señal
de tierra común. Esta señal de voltaje se alterna entre positiva y negativa cuando se están
enviando los datos, y es muy susceptible al ruido. En una interfaz RS-485, por el contrario,
se hace uso de una señal balanceada o diferencial para transmitir el flujo de información.
Esto es, que el emisor envía dos señales A y B que son complementarias (inversas) una de
otra, de tal forma que cuando la señal positiva sube por encima de un nivel de referencia, la
negativa reacciona yendo por debajo de este nivel. Para que el voltaje diferencial del
emisor sea válido, la diferencia entre señales debe ser de 1.5 a 6 V, ya sea negativo o
positivo. La región de -1.5 a +1.5 V se considera indeterminada.
37
El receptor, por su parte, compara las diferencias entre éstas dos líneas y no con
respecto a tierra, y de esta forma detecta el flujo binario. En un receptor, un voltaje
diferencial mayor a 200 mV o menor a -200 mV ya permite detectar un estado lógico en sus
terminales, e igualmente se considera aceptado un rango que va desde los 200 mV hasta los
6 V, para compensar la atenuación. Otra de las ventajas que presenta la interfaz RS-485, es
que tolera un voltaje de modo común que va desde los -7 V a los +12 V.
La Figura 2.8 ilustra en la parte superior cómo se definen cada una de las señales
individuales A y B, y en la parte inferior cómo se toma la señal diferencial.
Figura 2.8 Señal diferencial o balanceada en una interfaz RS-485 [9]
El estándar TIA/EIA-485, así como varias hojas de aplicación [6] describen la forma
en que el receptor define los dos estados lógicos de la línea:
- Si la señal de A es al menos 200 mV mayor que B, la salida es un alto lógico.
- Si la señal de B es al menos 200 mV mayor que A, la salida es un bajo lógico
- Para diferencias menores a 200 mV, la salida es indeterminada.
38
2.3.3 Topología y redes La forma más simple que se conoce de RS-485 es la que consiste en un maestro y
uno o varios esclavos colocados en cada extremo de un par de hilos trenzados (más el
conductor común) y que permite una comunicación de tipo half duplex. La información
puede fluir en ambas direcciones, ya que cada elemento puede ser emisor o receptor, pero
sólo puede hacerlo hacia una dirección y sólo un dispositivo puede transmitir a la vez. Sin
embargo, también es posible lograr una comunicación full duplex (simultáneamente en
ambos sentidos) si en lugar de usar una configuración de dos hilos se usa una de cuatro
hilos. La Figura 2.9 muestra una topología general de dos hilos (half duplex), mientras que
la Figura 2.10 muestra cómo sería la configuración para cuatro hilos (full duplex).
Figura 2.9 Configuración de dos hilos (half duplex) para RS-485 [8]
39
Figura 2.10 Configuración de cuatro hilos (full duplex) para RS-485 [8]
En las figuras se observan resistencias de pull-up y pull-down para polarizar las
líneas, así como resistencias en las terminaciones de las líneas.
Por otro lado, el estándar RS-485 permite que se puedan conectar hasta 32 cargas
unitarias 1 con una impedancia típica de entrada de 12 kΩ cada una. Si se utilizan
receptores con altas impedancias es posible lograr conectar hasta 256 nodos, aunque estos
operarán más lentamente que los comunes.
El estándar no define la forma en que deben ser conectados los elementos de la red.
Sin embargo, de acuerdo con la experiencia en la industria, se ha determinado que existen
algunas configuraciones que no son recomendables para trabajar con esta interfaz, debido a
las reflexiones que se podrían producir en la línea de transmisión. La Figura 2.11 muestra
algunas topologías que podrían ser implementadas para una red RS-485.
1 En inglés: Unit loads (UL)
40
Figura 2.11 Diferentes topologías posibles para una red RS-485 [11]
La primera de ellas es la de un bus con derivaciones; la segunda es un bus con
derivaciones en forma de estrella; la tercera es una configuración de estrella; la cuarta es
una configuración conocida como “daisy chain”2, y finalmente se encuentra una topología
de aro. De todas ellas, la más recomendable es la de daisy chain, ya que esta permite
manejar más fácilmente las reflexiones, seguida de una formación de bus, siempre y cuando
las derivaciones sean lo más cortas posibles. Todas las demás tienen tendencia a presentar
problemas en las líneas, especialmente para bitrates altos o grandes distancias.
A pesar de ello, si las velocidades de transmisión no son altas, o las líneas de
transmisión son relativamente cortas, se puede utilizar cualquier configuración sin grandes
eventualidades.
2 Configuración de hardware en la que los dispositivos se conectan en serie unos con otros.
41
2.3.4 Puesta a tierra A pesar de que la interfaz RS-485 half duplex es referida como una interfaz de dos
hilos, en realidad debe estar conformada por tres conductores. Aunque el receptor no
necesita de una señal de referencia para poder determinar los niveles lógicos, igual es
necesaria la presencia de un tercer hilo común en la red RS-485 debidamente aterrizado
para proveer un camino para la corriente de desbalance entre las líneas diferenciales. Sin
esta tierra común, el circuito puede trabajar bien, pero la energía proveniente del
desbalance podría disiparse en forma de radiación electromagnética.
Para cumplir con la especificación, la tierra del elemento transmisor debe ser la
misma que la de los elementos receptores, y el conductor de referencia debe aterrizarse en
un único punto de la red. La conexión entre las terminales comunes se puede hacer por
medio de un par trenzado extra, o por medio del la pantalla de un cable STP.
La Figura 2.12 muestra la forma en que se puede colocar el conductor de señal
común entre varios dispositivos RS-485.
Figura 2.12 Conductor de señal común en una interfaz RS-485 [11]
42
2.3.5 Efectos de líneas de transmisión y otras consideraciones La transmisión balanceada del RS-485 permite que los datos sean menos
susceptibles al ruido, ya que las perturbaciones afectan de manera similar a las señales
positivas y negativas, además de que usualmente se utiliza un par de cables trenzados para
transmitir mediante este sistema, lo cual ayuda a reducir este efecto. Estos son los
principales factores por las que una red RS-485 se puede extender hasta 4000 pies de
longitud (1.2 km) o transmitir a velocidades de hasta 10 Mbps, mientras que con RS-232
las distancias y razones de transmisión son muy limitadas.
Empero, las distancias grandes junto con las altas velocidad hacen que surjan otro
tipo de efectos típicos de una línea de transmisión, los cuales hay que tomar en
consideración a la hora de la implementación para poder contrarrestarlos. El primer gran
efecto que se mencionó en el apartado 2.3.3 son las reflexiones de las ondas. En un artículo
acerca de circuitos RS-485 [6], se explica que en una línea de transmisión no compensada,
ocurre una reflexión cuando la corriente inicial llega al receptor, y este solo es capaz de
absorber una fracción de esta, y el resto la refleja hacia el emisor. Con el cambio de
dirección de la corriente, se induce un voltaje en la línea, y el receptor inicialmente percibe
un voltaje mayor al transmitido originalmente. Cuando el voltaje reflejado llega
nuevamente al emisor, el cual tiene una impedancia menor al de la línea, este absorbe parte
de la reflexión y de nuevo repele el resto, provocando que el receptor observe un voltaje
reducido debido al nuevo cambio de polaridad en la reflexión. Esto ocurre varias veces
hasta que la línea llega a establecerse con un valor final de corriente. Las reflexiones
43
provocan que el receptor muchas veces malinterprete valores lógicos, provocando errores
en la comunicación.
Existen muchas maneras de combatir este efecto, pero la forma más sencilla y la
más comúnmente utilizada es la de es colocar resistores en las terminaciones de la línea de
transmisión con una impedancia igual a la impedancia característica de la línea. Para RS-
485, se utiliza con frecuencia un resistor de 120 Ω para tal efecto, tal y como se muestra en
la Figura 2.13, utilizando los resistores RT.
Figura 2.13 Terminación de las líneas de transmisión de una red RS-485 [10]
Por otra parte, cuando la línea está inactiva (ninguno de los nodos está
manejándola), el estado de ésta es desconocida. Para poder asegurar que se mantenga un
nivel correcto de voltaje en estos casos, se recomienda colocar resistencias para polarizar la
línea, poniendo una resistencia de pull-up hacia la fuente en la línea B y una de pull-down
en la línea A hacia tierra, tal y como mostraba la Figura 2.8. Este proceso es conocido
como idle-state biasing. El cálculo de las resistencias debe hacerse correctamente, ya que
la escogencia incorrecta puede resultar en baja inmunidad al ruido, o al contrario, en exceso
de carga para los emisores.
44
2.3.6 Enlace simplificado de baja potencia Las resistencias de terminación y de polarización mencionadas en la sección
anterior, son necesarias para aplicaciones de gran escala, pero tienen la desventaja de
incrementar el consumo de potencia del circuito. Para aplicaciones donde la línea es corta,
y las velocidades de transmisión son bajas, se pueden prescindir de estos elementos para
construir redes simples, de bajo costo y bajo consumo. Esto se debe a que en las líneas
cortas, las reflexiones desaparecen mucho antes de que el receptor esté listo para tomar los
datos. La regla general para determinar si una línea es corta, es si el tiempo de
levantamiento de su señal es mayor a cuatro veces el tiempo de propagación de una vía de
la línea (one-way delay)3. A mayores longitudes, los efectos de líneas de transmisión deben
ser considerados.
2.3.7 Cables
El medio de interconexión entre los dispositivos tampoco es especificado dentro del
estándar RS-485. Sin embargo, el medio más comúnmente utilizado es el de un par de
cables trenzados, debido a las ventajas que presenta en cuanto a inmunidad de ruido. Los
diseñadores generalmente prefieren utilizar cables trenzados de calibre 24 AWG, con una
impedancia característica de 100 o 120Ω.
Se dijo anteriormente que en una red RS-485 se puede transmitir a lo largo de
distancias de hasta 1.2 km, o con velocidades de hasta 10 Mbps. Sin embargo, estas dos
características no pueden darse simultáneamente. La Figura 2.14 presenta una curva
3 One-way delay: tiempo necesario para que una señal viaje desde el emisor hasta el receptor. Se calcula dividiendo la longitud del cable entre la velocidad de propagación del cable, provista por los fabricantes como un porcentaje de la velocidad de la luz.
45
empírica de razón de transmisión en función de la longitud de los cables, usando un par de
cables trenzados de 24 AWG con una capacitancia de 16 pF/ft, y con terminaciones de
100Ω.
Figura 2.14 Velocidad de transmisión máximas permitida según la longitud de línea [9]
No existe un consenso acerca de si es necesario utilizar cables blindados para la
conexión de redes RS-485, ya que algunos dicen que se requieren para prevenir la
introducción de ruido en el bus de comunicación y limitar las emisiones provenientes del
mismo[9], mientras que otros dicen que los receptores son suficientemente buenos para
tolerar malos niveles de ruido debido a las características de rechazo de modo común, y que
los cables blindados son más costosos y difíciles de manipular físicamente[11]. Sin
embargo, en todos los casos mencionan que la escogencia depende de la aplicación
específica.
46
2.4 Protocolo de Comunicación
2.4.1 Características deseables Como el estándar EIA-485 no define tampoco cuál es protocolo de comunicación
que debe usarse para la red, el diseñador puede darse la libertad de elegir el que le sea más
favorable. Sin embargo, en muchos de los casos se utiliza una configuración de maestro-
esclavo con un protocolo de comando-respuesta, donde un solo nodo envía los comandos y
el nodo accedido devuelve la respuesta. En los casos que se utiliza una configuración de
RS-485 de dos hilos, debe usarse una comunicación que no permita que el esclavo conteste
antes que el maestro se ponga en “tercer estado”, para que no haya colisión entre los datos
enviados y la respuesta.
En muchas ocasiones, los enlaces RS-485 utilizan protocolos que son soportados
por los UART provistos en las PC u otros dispositivos, entre ellos el protocolo MODBUS.
2.4.2 Protocolo MODBUS
El protocolo de comunicaciones MODBUS fue desarrollado por la empresa
Modicon4 para el uso de sus PLC. A pesar de ser un protocolo propietario, se mantuvo
publicado abiertamente, lo cual permitió el desarrollo de diversas variantes y mejoras, con
lo cual se ha llegado a convertir en un protocolo estándar para la industria de control, ya
que es utilizado para conectar casi cualquier dispositivo electrónico industrial.
Existen algunas variantes del MODBUS para distintas arquitecturas de red, sin
embargo, el Foxboro® 716C utiliza la forma de MODBUS a través de una línea serial,
4 Empresa fundada a fines de 1960, creadora del primer PLC producido comercialmente, que luego llegó a formar parte de Schneider Automation.
47
cuyas características se describen en el documento “MODBUS Over Serial Line:
Specifications & Implementation guide v1.0” [8], el cual está disponible en Internet. A
continuación se resumen sus características más sobresalientes, extraídas de ese estándar:
2.4.3 Principio de protocolo maestro/esclavo
El protocolo MODBUS por línea serial utiliza una configuración maestro/esclavo.
Sólo puede haber un maestro conectado a la red, con varios nodos esclavos conectados a
ella. Los esclavos nunca transmitirán información a menos que la comunicación sea
iniciada por el maestro, ni tampoco podrán comunicarse con otros esclavos. Solo puede
haber una transacción MODBUS al mismo tiempo.
El maestro puede iniciar un pedido a un esclavo de dos formas:
a) Modo unicast: El maestro accede un único nodo esclavo particular.
Después de procesar el pedido, el esclavo devuelve una respuesta al
maestro. La transacción es entonces de dos mensajes. Para ello cada
esclavo debe tener una dirección única (de 1 a 247 generalmente).
b) Modo broadcast: El maestro envía un pedido a todos los esclavos al
mismo tiempo. No se envía ninguna respuesta al maestro, por lo que
serán únicamente enviados comandos de escritura. Para ello existe una
dirección 0 reservada para identificar este direccionamiento múltiple
48
2.4.4 Formato de mensajes MODBUS En la comunicación serial MODBUS, existen dos tipos de modos de transmisión: el
modo RTU (Remote terminal unit) y el modo ASCII, los cuales definen diferentes formas
en la que la información es colocada en los campos del mensaje y cómo se decodifica. Sin
embargo, el modo RTU es el más utilizado, con contadas excepciones, por lo cual se hará
una descripción únicamente de los requerimientos para este modo.
Cada marco (frame) de comunicación, también conocido como unidad de dato de
protocolo (PDU5 por sus siglas en inglés) está compuesto por varios campos definidos tal y
como se muestra a continuación:
Dirección 1 byte
Código de Función 1 byte
Datos 0 a 252 bytes
CRC 2 bytes
PDU de MODBUS de línea serial
Figura 2.15 Marco unitario de mensaje de protocolo MODBUS de línea serial [8].
- En el campo de la dirección, el maestro indica la dirección única del esclavo (de
1 a 247 generalmente. Las direcciones 248 a 255 son generalmente reservadas).
Cuando el esclavo responde, pone su propia dirección en el campo para hacerle
saber al maestro quién le está respondiendo.
- El código de la función indica al servidor la operación por realizar.
- Los datos contienen parámetros de solicitud o de respuesta, según quien la emita
y dependen de la función particular.
49
- El campo de CRC es un campo de detección de error que utiliza un código de
redundancia cíclica calculado según el contenido del mensaje.
Cada byte en un mensaje contiene dos caracteres hexadecimales (8 bits), y cada
mensaje debe transmitirse como un hilo continuo de caracteres. Sin embargo, el formato de
cada byte es finalmente de un carácter asincrónico de 11 bits, ya que está compuesto por:
- Un bit de inicio
- 8 bits de datos, con el bit menos significativo enviado primero
- 1 bit de paridad (par o impar o ninguna)
- 1 bits de parada (o 2 bits de parada en caso que no se use paridad)
1 2 3 4 5 6 7 Bit
paridad 0 Bit
Inicio Bin
parada
Figura 2.16 Formato de un byte en el protocolo MODBUS de línea serial [8].
El elemento receptor debe ser capaz de detectar el inicio del mensaje, así como
saber cuando este ha sido completado. Para ello cada marco de mensaje debe ser separado
por un intervalo de silencio de al menos 3,5 veces la duración de un carácter, conocido
como t3.5. En caso de que esta temporización se incumpla, el receptor debe detectar un error
de mensaje parcial.
5 PDU: Protocol data unit
50
Figura 2.17 Separación mínima entre marcos unitarios de mensajes MODBUS [8].
De igual forma, si hay un intervalo de silencio mayor a 1.5 veces la duración de un
carácter (t1.5) el marco de mensaje se considera incompleto y es descartado por el receptor.
Figura 2.18 Separación mínima entre caracteres de un marco de mensaje MODBUS[8].
La duración de un carácter se define dependiendo del baud rate, o razón de baudio
la cual es una medida en telecomunicaciones del número de señales que se transmiten por
segundo.6 En el protocolo MODBUS, se permite típicamente utilizar un baud rate de 9600
ó 19200, aunque los fabricantes de dispositivos pueden opcionalmente utilizar otras
velocidades.
2.4.5 Diagramas de comunicación
Para comprender mejor el algoritmo de control en la comunicación serial
MODBUS, el estándar muestra un diagrama de estados del maestro y del esclavo, los
cuales siguen la siguiente notación:
6 Esta medida no se debe confundir con el data rate, o razón de datos, dada en bps, ya que cada señal puede estar compuesta por varios bits para hacer mejor uso del ancho de banda.
Estado ATrigger
[condición] / acción
Estado B
51
Figura 2.19 Sintaxis de diagramas de estados de la comunicación MODBUS [8].
Diagrama de estados del maestro:
El comportamiento del maestro en el protocolo MODBUS serial se puede
representar de la siguiente manera:
Figura 2.20 Diagrama de Estados del maestro en la comunicación MODBUS [8].
- El dispositivo se encuentra en “estado inactivo” al encenderse. El maestro sólo
puede enviar una petición si está en este estado, y no puede enviar dos
peticiones simultáneamente.
Inactivo
Esperando retardo
Esperando respuesta
Procesando respuesta
Procesando error
Solicitud enviada en modo broadcast
/ inicio de retardo de devolución
Expiración de retardo Solicitud enviada
a un esclavo / inicia contador de
tiempo de respuesta
Recepción de respuesta [Esclavo inesperado]
Expiración de tiempo de respuesta
Recepción de respuesta [Esclavo esperado] / detiene contador de respuesta
Fin de procesamiento de respuesta
Fin de procesamiento de error
Error de marco
52
- El contador de tiempo de respuesta en el modo unicast se utiliza para prevenir
que el maestro quede en un ciclo interminable en caso de que no se reciba
respuesta. El retardo debe ser suficiente para que el esclavo procese y devuelva
el valor pedido. Si el tiempo se agota, se genera un error y el maestro vuelve a
estado inactivo.
- Una vez que recibe una respuesta, el maestro la procesa para su verificación. Si
la respuesta proviene de un esclavo inesperado, la ignora y continúa contando.
Si hay un error en el marco, este es detectado.
- El error de marco surge del chequeo de paridad aplicado a cada carácter y al
chequeo de redundancia aplicado al marco completo. Esta detección de errores
se detallará en la Sección 2.4.6.
- Aunque en modo broadcast no se espera respuesta por parte de los esclavos,
igual el maestro espera un tiempo (retardo de devolución) para dar oportunidad
a los esclavos para que procesen el pedido antes de enviar una nueva petición.
Diagrama de estados del esclavo:
El comportamiento del esclavo en el protocolo MODBUS serial se puede
representar de la siguiente manera:
53
Figura 2.21 Diagrama de Estados del esclavo en la comunicación MODBUS[8].
- El dispositivo se encuentra en “estado inactivo” al encenderse. En este estado,
no hay solicitudes pendientes.
- Al recibir una solicitud, el paquete es revisado para verificar su validez. Pueden
encontrarse errores de formato, acciones inválidas, entre otras. En caso de error,
el esclavo debe enviar una respuesta al maestro. Excepción: si el error
detectado es un error de marco, no hay respuesta hacia el maestro.
- En el modo unicast, una vez completada la acción solicitada, la respuesta es
formateada y enviada al maestro.
Inactivo
Revisando solicitud
Procesando acción
requerida
Formato de Respuesta de
error
Recepción de una solicitud (del maestro)
Error en datos solicitados
Procesando respuesta
Revisión OK
Fin de procesamiento [modo unicast]
Error en procesamiento
Fin de procesamiento [modo broadcast]
Envío de respuesta de error
Respuesta normal enviada
Error en chequeo de marco, o marco
no asignado a este esclavo
54
2.4.6 Detección de errores
Todo sistema de comunicación efectivo debe contar con métodos para detectar, y en
algunos casos corregir, errores en transmisión de los datos, ya sea originados por un
mensaje erróneo enviado por el emisor, o por errores aleatorios ocasionados por alguna
perturbación que afecta la línea de comunicación.
En el caso del protocolo MODBUS, se cuenta con dos tipos distintos de detección
de errores: chequeos de paridad (aplicados a cada carácter) o chequeos de marco utilizando
métodos de redundancia cíclica, los cuales se aplican a un mensaje completo. Estos son
calculados por el emisor (maestro o esclavo) y se adjuntan al mensaje antes de su
transmisión.
Para el chequeo de paridad se puede utilizar paridad par, paridad impar, o incluso se
da la opción de no usar chequeo de paridad. Esta se aplicará entonces a cada carácter de 8
bits (en el caso de RTU). El emisor entonces adjunta a cada carácter el bit de paridad (tal
como se muestra en la Figura 2.16) y lo envía. El receptor, por su parte cuenta nuevamente
el número de 1’s que vienen en el byte y compara el valor de paridad, detectando un error si
no hay concordancia. Por esto es importante que todos los dispositivos en la red usen el
mismo tipo de paridad.
Para el chequeo de marco, el modo de transmisión RTU utiliza el método de
chequeo de redundancia cíclica de 16 bits (CRC 16). Con el CRC, se revisa el contenido
completo del mensaje (independiente de la paridad) y genera un valor de 16 bits
(implementado como 2 bytes de 8 bits cada uno) que se agrega al final del mensaje. El
55
elemento receptor también calcula nuevamente el CRC al recibir el mensaje, lo compara y
devuelve un error en caso de que no sean iguales. El algoritmo para generar un valor de
CRC 16, según el documento de MODBUS [8], es el siguiente:
1) Cargar un registro de 16 bits, llamado el registro CRC, con el número
hexadecimal 0hFFFF (todos los bits con valor de 1).
2) Aplicar un OR exclusivo (XOR) al primer byte de 8 bits del mensaje con la
parte baja del byte CRC, y colocar el resultado en el registro CRC.
3) Desplazar el registro CRC un bit hacia la derecha (hacia el LSB), poniendo en
cero el MSB.
4) Extraer y examinar el LSB.
a. Si el LSB es 0: Repetir el paso 3 (desplazamiento adicional)
b. Si el LSB es 1: Aplicar un XOR al registro CRC con el valor polinomial
0hA001 (1010 0000 0000 0001).
5) Repetir los pasos 3 y 4 hasta que se hayan realizado 8 desplazamientos. Una
vez completado esto, se debe haber procesado completamente un byte de 8
bits.
6) Repetir los pasos 2 a 5 para el siguiente byte del mensaje. Continuar esto
hasta que todos los bytes hayan sido procesados.
7) El contenido final del registro CRC es el “valor CRC”.
8) A la hora de transmitir el valor CRC en el mensaje, se debe enviar primero el
byte menos significativo, seguido por el byte más significativo.
La Figura 2.22 muestra al algoritmo anterior en forma de diagrama de flujo:
56
Figura 2.22 Diagrama de flujo para el algoritmo de cálculo del CRC 16[8].
2.4.7 Protocolo MODBUS aplicado al Foxboro® 716C
El controlador digital Foxboro® 716C puede utilizar un protocolo MODBUS,
JBUS, o incluso uno propietario de Foxboro®. Sin embargo, para el desarrollo del trabajo
se prefiere utilizar MODBUS, ya que es el que cuenta con la mayor documentación
disponible, aunque el JBUS difiere de este básicamente en la definición de las direcciones.
57
El controlador utiliza un protocolo half duplex con un maestro y varios esclavos
(hasta 31). El maestro puede enviar tanto peticiones en modo unicast como broadcast. La
velocidad de comunicación es configurable para trabajar con valores de baud rate de 600,
1200, 2400, 4800, 9600 o 19200 y la definición del formato de transmisión es conforme
con la sección 2.4.4.
Tabla 2.3 Formato de la transmisión maestro-esclavo [14]
Rango Byte Dirección de Esclavo 1 Código de Función 1 Datos n Chequeo de Error (CRC-16) 2
En la documentación del protocolo de comunicación del Foxboro® 716C se definen
las funciones que pueden utilizarse para realizar las distintas operaciones (ver Apéndice C),
así como también la tabla de direcciones de memoria que se deben acceder en cada caso
(ver Apéndice D). Cada una de estas funciones está descrita como un par de comandos: la
solicitud que debe ser enviada por el maestro y la respuesta esperada por parte del esclavo,
la cual es básicamente la misma, con ciertas modificaciones.
Sin embargo, hay ocasiones en las que el esclavo detecta errores en la solicitud del
maestro. Si el chequeo de error CRC 16 está mal, si el código de función no es
implementado, o si el buffer del receptor se satura, el esclavo no envía respuesta alguna. Si
el error es de otro tipo, el esclavo responde forzando el sétimo bit del byte del código de la
función a 1 y luego genera un código de error.
58
Tabla 2.4 Formato de error devuelto por un esclavo [14]
Rango Byte Dirección de Esclavo 1 Código de Función (+ 0h80) 1 Código de error 1 Chequeo de Error (CRC-16) 2
Tabla 2.5 Códigos de error devueltos en el protocolo de comunicación [14]
No. De Error Descripción 2 Dirección ilegal de dato 3 Valor ilegal de dato 9 Número ilegal de datos requeridos 10 El bit o palabra indicados no pueden modificarse 1xx Error en el parámetro de configuración “xx” 199 Error en la selección de la salida de control 2xx Error en la calibración de la entrada 255 Error en los parámetros de control
Notas acerca de la comunicación:
- Cada vez que la transferencia de información se realice usando 2 bytes (1
palabra de 16 bits), el primer byte es transmitido el es más significativo.
- Se utiliza el formato de complemento a dos para los números negativos.
- El esclavo comienza a enviar una respuesta de 2 a 700 ms después de detectar el
fin de una solicitud, el cual es detectado contando el número de bytes recibido.
- Cuando se envían números decimales, el punto decimal es eliminado.
- Para que un esclavo pueda comenzar a ser controlado desde el maestro, se debe
poner en 1 el bit de estado local/remoto que corresponde a la dirección 10 o 218
59
(MODBUS). El esclavo continúa en modo remoto hasta que la actividad en la
línea sea interrumpida por más de 3 segundos.
- Modo local: La comunicación maestro/esclavo se limita a la transferencia de
datos del esclavo al maestro, sin poder modificar ningún parámetro desde el
maestro, con la excepción del bit de estado local/remoto. Los parámetros sólo
se pueden modificar desde el teclado externo.
- Modo remoto: Los parámetros del esclavo sólo pueden ser modificados desde el
maestro.
60
CAPÍTULO 3: Familiarización con el controlador Foxboro®
716C en el Laboratorio de Control Automático
Para familiarizarse con el funcionamiento del Foxboro® 716C, se utilizó como
controlador del equipo Lab-Volt® 3522-0 utilizado en el curso IE-0432, “Laboratorio de
Control Automático” realizando con este las prácticas de laboratorio.[3] A continuación se
presentan los procedimientos utilizados y los resultados obtenidos en estas prácticas.
3.1 Descripción y configuración de los equipos
3.1.1 Procesos de caudal y temperatura Lab-Volt® 3522
Este equipo contiene dos diferentes procesos que pueden usarse de forma
independiente, uno de caudal y otro de temperatura.
El proceso de caudal consiste en un ducto con un ventilador de velocidad variable,
cuya acción se controla mediante un elemento de actuación de corriente (4 a 20 mA) o de
voltaje (0 a 5 V). El caudal de aire se mide usando un tubo de Venturi y un medidor de
presión diferencial. Un transmisor se encarga de enviar el valor medido hacia el exterior,
sea por medio de una señal de corriente (4 a 20 mA) o de voltaje (0 a 5 V). Además, el
tubo tiene una compuerta con apertura regulable para introducir perturbaciones al sistema.
El proceso de temperatura consta de una pieza metálica con un elemento calefactor,
que puede aumentar su temperatura por medio de un elemento de actuación de corriente (4
a 20 mA) o de voltaje (0 a 5 V). Para enfriar la pieza, se utiliza un disipador de calor junto
con el flujo de aire proveniente del mismo ventilador que utiliza el proceso de caudal. Un
sensor se encarga de medir el valor de la temperatura, y un transmisor de salida de voltaje
61
(0 a 5 V) o de corriente (4 a 20 mA) lleva la señal hasta el controlador. Los transmisores de
ambos procesos tienen ajuste de “cero” y “ámbito”, por lo que deben ser calibrados
adecuadamente antes de utilizarlos.
La guía del Laboratorio de Control Automático[13] provee un diagrama esquemático
del equipo, así como una descripción de las distintas partes:
Figura 3.1 Diagrama esquemático de los procesos del Lab-Volt® 3522.
1. Entrada de aire al ducto
2. Elemento calefactor, radiador y sensor de temperatura
3. Tubo Venturi y tomas de presión para la medición del caudal de aire
4. Compuerta para producir perturbaciones
5. Ventilador
6. Salida del ducto
7. Actuador del ventilador
62
8. Transmisor de caudal de aire en el ducto
9. Transmisor de temperatura de la pieza calentada
10.Actuador del elemento calefactor
3.1.2 Controlador Foxboro® 716C Las características de este controlador fueron ya mencionadas en el Capítulo 2.
Durante el desarrollo de estas prácticas se utilizó este instrumento como controlador de los
procesos de caudal y temperatura, pero usando en todo momento los modos de
configuración y operación manuales, ya que aún no se había desarrollado el programa de
configuración y supervisión remoto.
Los valores de configuración utilizados fueron los siguientes:
Tabla 3.1 Parámetros de configuración del controlador para el uso en el laboratorio
Descripción de parámetro Valor utilizado
Tipo de entrada Lineal: V [0,5 V]
Posición de punto decimal Una posición decimal
Valor inicial de escala (bajo) 0.0
Valor completo de escala (alto) 100
Acción de Salida 1 Salida de control de acción reversa
Tipo de Salida 1 Salida de tipo 4 a 20 mA
Función de salida 2 No usada
Función de salida 3 No usada
Punto de operación del arranque suave 0
Bloqueo de seguridad Desbloqueado
63
Tabla 3.1 Parámetros del controlador para el uso en el laboratorio (cont.)
Descripción de parámetro Valor utilizado
Acción de la salida de control principal Resultado del calculo PID
Valor desplegado de la salida principal Resultado del calculo PID
Función de auto ajuste (SMART AT) Protegida bajo el Bloqueo de seguridad
Valor máximo de la banda proporcional calculada por auto ajuste 30
Valor mínimo de la banda proporcional calculada por auto ajuste 1.0
Valor mínimo del tiempo integral calculado por auto ajuste 0.2
Función manual Habilitada
Estado del dispositivo al arranque Inicio en modo AUTO
Duración del time out en el modo de operación 30 segundos
Valor de Seguridad de la salida Sin valor de seguridad (por defecto)
Filtro digital en el valor desplegado No usa filtro
Tipo de acción de control El proceso es controlado por acción PID
3.1.3 Programa de control digital Lab-Volt LVPROSIM La planta Lab-Volt® 3522 viene acompañada de un software propietario llamado
LVPROSIM que no solo permite supervisar los procesos, sino que incorpora un controlador
PID si se desea realizar el control. La comunicación entre la planta y el programa se realiza
mediante una caja de interfaz de entradas y salidas que permite la lectura de hasta seis
señales analógicas (con rango de 0 a 5 V o de 0 a 15 V) o dos entradas digitales (TTL), y
que tiene dos salidas analógicas (0 a 5 V) y dos salidas digitales (TTL), y se comunica con
la PC por medio del puerto serial (RS-232).
Para realizar las prácticas utilizando el Foxboro® 716C como controlador externo,
se prescindió de las opciones de controlador LVPROSIM, pero sí se hizo uso de otras
64
características de este programa, como el registrador de tendencias y el generador de
funciones. El registrador de tendencias es una ventana que muestra gráficamente los
valores de las señales analógicas de las entradas y salidas de la caja de interfaz, por lo que
es útil para observar las señales de la variable controlada, la salida del controlador, la salida
del generador de funciones, entre otros. Además, presenta unos botones que permiten
guardar los valores medidos en un archivo de texto, para su posterior análisis. El generador
de funciones puede generar señales cuadradas, senoidales o triangulares con diferentes
valores de frecuencia y amplitud. Sin embargo, puede utilizarse también como una
estación de carga manual usando una onda cuadrada con frecuencia 0 Hz y desviación 0
(señal DC), para variar la velocidad del abanico introduciendo perturbaciones al proceso de
temperatura. La salida del generador de funciones generalmente se conecta internamente a
la salida 2 de la caja de interfaz.
Es importante mencionar que dependiendo de si se utiliza el proceso de caudal o el
de temperatura, hay que ajustar la constante de tiempo del filtro en la configuración de las
entradas analógicas así como el período de muestreo (500 ms para el proceso de
temperatura o 250 ms para el proceso de caudal) para que las señales sean capturadas
correctamente y para que la escala de tiempo del registrador de tendencias sea correcta.
3.1.4 Conexión de los equipos
Para llevar a cabo los experimentos y poder registrar tanto las señales de la variable
controlada como la salida del controlador, era necesario hacer una conexión entre la planta
Lab-Volt® 3522, el controlador Foxboro® 716C y la caja de interfaz de entradas y salidas
Lab-Volt® 9065. Sin embargo, la planta permite tanto entradas de voltaje (0 a 5 V) como
65
de corriente (4 a 20 mA); y el controlador entradas de voltaje (0 a 5 V) y corriente (4 a 20
mA), pero únicamente presenta una salida de corriente (0 a 20 mA ó 4 a 20 mA). La caja
de interfaz acepta solamente entradas de voltaje (0 a 5 V ó 0 a 15 V), por lo que había
cierto problema de incompatibilidad entre las entradas y salidas, lo cual requirió algunos
ajustes adicionales.
Figura 3.2 Conexiones para el control y monitoreo del proceso de temperatura
Para que la salida del controlador pudiera ser observada mediante el registrador de
funciones del LVPROSIM, se debía convertir la señal de corriente en una señal de voltaje
66
que la caja de interfaz pudiera reconocer. Para ello se hizo uso de una resistencia de 250 Ω
con tolerancia de 0.1% conectada entre la terminal positiva de la señal de salida del
controlador y tierra. De esta forma, el voltaje medido a través de esta resistencia variaría
de 1 a 5 V cuando la señal se movía entre los 4 y 20 mA.
Figura 3.3 Conexiones para el control y monitoreo del proceso de caudal
Estos valores de voltaje se daban al no tener carga conectada, pero al conectar este
nodo a las entradas de voltaje de la planta y de la interfaz, los valores de voltaje disminuían
visiblemente, debido a que las impedancias de entrada de la plata y de la interfaz no eran
suficientemente altas. Fue entonces que se decidió utilizar un amplificador operacional en
67
configuración de buffer (seguidor de voltaje) conectado a la terminal positiva de la
resistencia, para evitar caídas de tensión debidas a las bajas impedancias de entradas. Para
ello se utilizó un solo amplificador del integrado LM324, polarizándolo con 12 V dc por
medio de una fuente de voltaje externa.
De esta forma, las conexiones finales para utilizar el proceso de temperatura y el
proceso de caudal se presentan en las Figuras 3.2 y 3.3 respectivamente.
3.2 Experimentos realizados en el laboratorio
Como parte de la familiarización con el controlador, se realizaron los siguientes
experimentos:
1- Obtención de la característica estática de los procesos de caudal y temperatura
2- Obtención de la característica dinámica de los procesos de caudal y temperatura
3- Determinación de los parámetros últimos o críticos de ambos procesos
4- Operación del controlador en modo proporcional (P)
5- Operación del controlador en modo proporcional-integral (PI)
6- Operación del controlador en modo proporcional-integral-derivativo (PID)
7- Sintonización del controlador mediante el Método de Ziegler y Nichols
8- Sintonización del controlador mediante criterios integrales.
El detalle de los procedimientos seguidos en cada práctica y los resultados
obtenidos se presentan en el Apéndice E.
68
La idea de llevar a cabo las prácticas anteriores tenía tres propósitos fundamentales,
los cuales eran:
1) Determinar si era posible utilizar el controlador Foxboro® 716C como parte de las
prácticas del Laboratorio de Control Automático, y que este funcionara de manera
adecuada en cada caso, ya que este es el ambiente en donde se pretende utilizar en
un futuro.
2) Comprobar el tipo de algoritmo PID que tiene el controlador, ya que ni en toda la
documentación provista por el fabricante, ni en la información disponible en
Internet especificaba el tipo de algoritmo que seguía. Sin embargo, al configurar al
controlador por medio de métodos de sintonización específicos para controladores
PID ideales se observó que el comportamiento fue coherente con lo esperado,
además de que los resultados obtenidos fueron similares a los que obtuvieron otros
estudiantes del Laboratorio de Control Automático utilizando el controlador del
LVPROSIM, que si tiene un algoritmo PID-ideal.
3) Familiarizarse con la operación y configuración del controlador para así poder
observar cuales son las opciones más comúnmente utilizadas, y las funciones más
relevantes, para así poder decidir cuáles eran los parámetros que debían ser
incluidos en el programa de supervisión y configuración.
Una vez que se pudo observar el comportamiento del controlador PID bajo
configuración local, podía pasarse a la siguiente fase, la cual consistía en realizar el enlace
del controlador con la PC, para iniciar la comunicación remota.
69
CAPÍTULO 4: Preparación inicial de la red RS-485 y pruebas
de protocolo de comunicación
4.1 Conexión del controlador Foxboro® 716C con la PC
En el apartado 2.2.3 se mencionó que el controlador posee tres terminales que están
destinadas para utilizarse como interfaz serial RS-485 para que un computador pudiera
configurarlo y controlarlo de forma remota. Sin embargo, la mayoría de las computadoras,
incluyendo las que existen en el Laboratorio de Control Automático no están equipadas con
un puerto RS-485, sino que comúnmente tienen disponible un puerto serial RS-232 para
establecer la comunicación con distintos dispositivos.
Por lo tanto, era necesario adquirir una tarjeta de comunicaciones RS-485 para
instalarla en la PC que iba a utilizarse para comunicarse con el controlador, o como
segunda opción, adquirir un convertidor RS-232/RS-485. La segunda alternativa resultó
ser mejor, ya que al ser un componente de hardware externo, se presentaba mayor
portabilidad para el sistema, al no tener que depender de un solo computador para el
manejo de los controladores.
Con este fin, se consiguió el convertidor IC485SN marca Aten Technologies, el
cual presenta las siguientes características:
- Convertidor bi-direccional de RS-232 a RS-485.
- Funciona con interfaz RS-485 half duplex o full duplex.
- Terminales RS-485 de tipo tornillo o RJ-11.
- Puerto RS-232 de tipo DB-25 (25 pines).
70
- No requiere alimentación externa.
- Interruptor para seleccionar entre si el dispositivo trabaja en modo DCE o DTE
- Interruptor para habilitar el control del protocolo de la comunicación mediante
una señal RTS.
Figura 4.1 Convertidor RS-232/485 de Aten Technologies
Por otra parte, se debió utilizar un adaptador DB9 hembra a DB25 macho tal y
como el que muestra la Figura 4.2 para conectar el convertidor a la PC debido a que el
puerto serial de ésta era únicamente de 9 pines.
Figura 4.2 Adaptador DB-9 hembra a DB-25 macho para puerto serial
71
El cable que se utilizó para la conexión entre los dispositivos es un Belden 9501,
que consta de un par trenzado de conductores 24 AWG con pantalla y conductor de
drenaje. Con este tipo de cables, el conductor de drenaje puede utilizarse como el
conductor común de la interfaz RS-485, mientras que el par trenzado lleva las señales
complementarias A y B.
Para soportar tanto redes half duplex como full duplex, las salidas de las señales RS-
485 del convertidor RS-232/485 cuentan con cuatro terminales: T+ (1), T- (2), R- (3) y R+
(4). En el caso presente en que solamente se va a utilizar una configuración half duplex
multipunto, las terminales 1 y 4 se unen entre sí, así como 2 y 3. Según la convención para
RS-485, las terminales denominadas como positivas (1 y 4) corresponden a la señal B,
mientas que las negativas a la señal de A. En el Foxboro® 716C, estas señales
corresponden a las terminales 12 (B/B’) y 11 (A/A’), respectivamente.
Sin embargo, el convertidor IC485SN no cuenta con ninguna terminal para el
conductor común, lo cual es un requisito de la conexión de interfaces RS-485, tal y como
indica el estándar. Por lo tanto, como solución temporal, se conectó el conductor de
drenaje del par trenzado a la terminal 13 (C) del controlador por un lado, y a la carcasa del
puerto serial de la PC, del otro. De esta forma, se cumplía además con el requisito de que
el conductor común debe estar aterrizado en uno de sus extremos. Ya como solución
permanente se propone realizar una modificación interna al convertidor IC485SN, donde se
agregue un conductor que esté soldado al pin número 7 (aterrizado) del conector DB25 en
un extremo, y que pueda accederse por medio de un contacto adicional al puerto RJ al otro
extremo. Esto implicaría que la conexión entre el convertidor y los controladores se realice
72
utilizando el cable de par trenzado con terminales RJ-12, que tienen las mismas
dimensiones que las RJ-11, pero pueden conectar hasta seis conductores en lugar de cuatro.
La Figura 4.3 muestra en forma esquemática la manera en que finalmente se realizaría la
conexión entre la PC y un controlador Foxboro® 716, luego de haber realizado las
modificaciones necesarias al convertidor RS-232/485.
Figura 4.3 Diagrama de conexión serial entre la PC y el controlador
Cabe mencionar que, como las distancias entre la PC y los controladores se
pretende que sean relativamente cortas (menos de 5 m.) en esta red RS-485 los efectos de
líneas de transmisión son despreciables, por lo que puede utilizarse un enlace simplificado
de baja potencia, tal como lo establece la sección 2.3.6, en el cual no es necesario realizar la
polarización de las líneas, ni colocar resistencias en los extremos de estas. Por otro lado,
cuando se utilicen dos o más controladores en la red, solamente uno iría conectado
73
directamente al convertidor RS-485/232. Los demás se colocarían en serie con el primer
esclavo, para conformar la configuración de daisy chain.
4.2 Pruebas de comunicación utilizando software de monitoreo de
puerto serial.
Antes de llevar a cabo la comunicación por medio del programa que debía ser
desarrollado, se hicieron preliminarmente unas pruebas de comunicación serial utilizando
software de monitoreo de puertos ya existente, con el propósito de verificar el
funcionamiento adecuado del puerto, de la red de comunicación, y que el controlador
respondiera correctamente a los comandos enviados.
El programa seleccionado para las pruebas fue el RealTerm: Serial Capture
Program v1.99 (http://realterm.sourceforge.net), ya que poseía la ventaja de traer entre sus
opciones, la de concatenar cualquier mensaje enviado con un código CRC-16 Modbus
calculado por el programa mismo, ahorrando la necesidad de calcularlo cada vez que se
enviara un comando distinto.
El puerto serial fue configurado con las siguientes opciones:
- Puerto: COM1
- Baud rate: 9600
- Bits de datos: 8 bits
- Paridad: sin paridad.
- Bits de parada: 2
- Control de flujo: Ninguno
Esta configuración se resume como: 9600-8-N-2 (baud-bits-paridad-bits de parada)
74
La Figura 4.4 muestra la interfaz del software de RealTerm, con la configuración de
opciones de puerto en la parte inferior.
Figura 4.4 Software de monitoreo de puerto serial RealTerm
El programa fue utilizado para enviar y recibir las cadenas de datos. Por otra parte,
se utilizó un osciloscopio Tektronix® TDS 220 para capturar las señales que se transmitían
a través del enlace RS-485.
4.2.1 Pruebas para el puerto
Como primera prueba, simplemente se envió la cadena ASCII con los caracteres
“RS” para observar cómo eran transmitidos estos valores binarios, la configuración de bits
de inicio, paridad y parada, así como observar la duración de cada bit y el tiempo de
levantamiento de las señales.
75
Según la codificación ASCII, la R y S se representan como 1010010 y 1010011
respectivamente. Cuando se envía la información a través del puerto serial, los caracteres
se envían en el mismo orden en que fueron ingresados, pero cada carácter se invierte. Esto
es, primero se envía el LSB y de último el MSB. Además, el inicio de cada dato de 8 bits
se marca con un bit de inicio (en bajo) y se termina con un bit de parada (en alto). Como se
eligió no usar paridad, se utilizan entonces dos bits de parada.
En la Figura 4.5 se ilustra la captura del osciloscopio de la señal “A” del enlace RS-
485, tomando como referencia la tierra del circuito, donde se ilustra lo anterior. La escala
de tiempo es de 250 us/div, y la escala y vertical de 2V/div.
Figura 4.5 Señal “A” al transmitir la cadena ASCII “RS”
Se observa además que la señal “A” tiene un valor de alrededor de 4.3 V cuando se
transmite un 1 binario, y un valor de 710 mV cuando se transmite un 0, y que se mantiene
76
en un valor alto antes y después de cada transmisión. Por otra parte, cada bit tiene una
duración aproximada de 104.95 us, lo cual se acerca al valor teórico de 1/9600 (104.1667
us) dado por el valor del baud rate.
La Figura 4.6 muestra la señal “A” (arriba), la señal complementaria “B” (en
medio) y la señal diferencial “A-B” (abajo) que resultan al transmitir la cadena ASCII
“RS”. En este caso la escala vertical se cambió a 5V/div.
Figura 4.5 Señal “A”, “B” y diferencial al transmitir la cadena ASCII “RS”
Se observa ahora cómo efectivamente las señales “A” y “B” son de magnitud casi
idéntica, pero de valor opuesto. La señal diferencial resultante tiene un valor de 3.2 V en
alto y de -4.2 V en bajo, por lo que su amplitud es de alrededor de 7.4 V. Según la
referencia y la forma en que se tomó la señal diferencial (Señal A-Señal B), un valor de 1
77
binario se muestra como un voltaje positivo, mientras que un cero tiene un valor de voltaje
negativo.
Por otra parte, utilizando el osciloscopio se midió también el tiempo de
levantamiento de las señales en la red, obteniendo un valor aproximadamente de 150 ns.
Según la sección 2.3.6, para que una línea de red RS-485 se pudiera considerar corta y se
prescindiera del uso de la terminación y polarización de líneas, el tiempo de levantamiento
de las señales debía ser al menos cuatro veces mayor al tiempo de propagación en un
sentido de la línea (one-way delay). Según la hoja de fabricante del cable Belden 9501, la
velocidad de propagación es un 60% de la velocidad de la luz, por lo que, tomando el hecho
de que la longitud máxima de los cables a utilizar en la conexión será de 4 m, el one-way
delay tiene un valor de 22.2 ns, por lo cual se confirma la configuración utilizada para la
red cumple con los requisitos necesarios.
4.2.2 Pruebas de protocolo y comandos MODBUS La segunda prueba consistió en utilizar algunos comandos reales del protocolo para
determinar si eran interpretados correctamente por el controlador Foxboro® 716C y si este
respondía según lo esperado.
Para estos efectos, el comando elegido como ejemplo fue el que envía la instrucción
al controlador para ponerse en modo remoto, ya que de todas formas el controlador no
responde a instrucciones enviadas a través del puerto serial a menos que se encuentre en
este modo. Según la información de los Apéndices C y D, esta es una función de tipo 5
(escritura de un bit) y tiene el siguiente formato:
78
Tabla 4.1 Formato de la instrucción para ingresar al modo remoto del controlador
Campo Dato (hex) Dirección de Esclavo 017 Código de Función 05 Dirección de bit (byte alto) 00 Dirección de bit (byte bajo) 0A Dato (byte alto) FF Dato (byte alto) 00 CRC-16 (byte bajo) AC CRC-16 (byte alto) 38
La cadena de datos fue enviada nuevamente utilizando el software de RealTerm,
pero esta vez eligiendo que el formato de los mensajes enviados fuera hexadecimal
separado por espacios en lugar de ASCII. La Figura 4.6 muestra la señal diferencial vista
en el osciloscopio cuando se envía el mensaje anterior desde la computadora.
Figura 4.6 Captura del comando que pone el controlador en modo remoto
7 En este caso, las pruebas se hicieron con el controlador configurado con la dirección 1
79
Al realizar la prueba, se observó que efectivamente el controlador entraba en modo
remoto, ya que al momento de enviar el mensaje el indicador luminoso “REM” del panel
frontal comenzaba a parpadear. No obstante, según el protocolo de comunicaciones, el
esclavo también debía enviar una respuesta de 2 a 700 ms después de recibir la instrucción,
que para el caso de una Función 5 es realmente un eco del mensaje enviado. Lo anterior se
verificó en el osciloscopio tal y como lo muestra la Figura 4.7.
Figura 4.7 Petición y respuesta para la instrucción de modo remoto
Tal como se observa, la respuesta fue recibida alrededor de 3 ms después de haberse
detectado el fin de la petición. Por otra parte, la señal enviada desde controlador presenta
una amplitud mayor que la del comando proveniente de la PC, con un valor de voltaje pico-
pico de cerca de 9.5 V.
Finalmente, se quiso ver la reacción del esclavo cuando se enviaba un comando
incorrecto, para ver si efectivamente se recibía un código de error de vuelta. Es importante
80
recordar que únicamente hay una respuesta de error si la instrucción contiene una dirección
ilegal de dato o un valor de dato fuera de rango, si hay un número ilegal de datos requeridos
o si se intenta escribir una palabra o bit que no pueden ser modificados. En caso que de
que el CRC-16 o el código de función indicado no fueran correctos, o si el buffer del
receptor está saturado, el controlador ni siquiera respondería.
Según la Sección 2.4.7, el código de error tiene un formato tal y como muestra la
Tabla 2.4, donde el campo del código de función contiene el código de función enviado
sumado a un valor hexadecimal de 0h80, y en el campo de código de error presenta un
código de acuerdo con el tipo de error, según lo indicado en la Tabla 2.5.
Para probar, se envió nuevamente un mensaje similar al presentado en la Tabla 4.1,
pero en lugar de utilizar el valor de la dirección 0h0A se utilizó 0h20.8 El error esperado
era por tanto:
Tabla 4.2 Error esperado para el direccionamiento erróneo
Campo Valor (hex) Dirección de Esclavo 01 Código de Función (+ 0h80) 85 Código de error 02 CRC-16 (byte bajo) C3 CRC-16 (byte alto) 51
En la Figura 4.8 se observa una captura del programa RealTerm donde se observa el
envío del dato incorrecto y la correspondiente respuesta, y la Figura 4.9 muestra las señales
vistas en el osciloscopio.
8 El valor del CRC-16 en este caso también cambiaba a 0hF08D
81
Figura 4.8 Petición errónea y respuesta de error vista en el RealTerm
Figura 4.9 Petición errónea y respuesta de error vista en el osciloscopio
Ya observados estos comportamientos, se tenía mayor confianza para realizar la
comunicación desde el programa de configuración y supervisión que iba a desarrollarse.
82
CAPÍTULO 5: Desarrollo del programa de supervisión y
configuración
5.1 Requerimientos del programa
5.1.1 Requerimientos generales Según los objetivos del proyecto y la experiencia adquirida durante la realización de
los experimentos en el Laboratorio de Control Automático, se concluyó que el programa
debía cumplir con las siguientes características:
- Correr en Windows® XP y tener una interfaz gráfica amigable para el usuario.
- Permitir un cambio rápido entre los modos manual/automático del controlador.
- Configuración rápida de los parámetros de control principales: tiempo integral,
tiempo derivativo, banda proporcional y valor deseado.
- Opciones de configuración para parámetros adicionales, por ejemplo: filtro en el
valor desplegado, tipo de acción de control, valor deseado secundario, valor de
precarga integral.
- Visualización gráfica de la variable realimentada, valor deseado y salida del
controlador y registro de estos valores en un archivo para el análisis posterior.
- Permitir la conexión, desconexión, configuración y control de al menos dos
controladores funcionando de manera simultánea.
- Apegarse al comportamiento de un “maestro”, incluyendo la detección de
errores, según la definición del protocolo MODBUS.
83
5.1.2 Ejemplos de programas con interfaz gráfica Para determinar la forma en que el programa de interfaz gráfica debía interactuar
con el usuario y el controlador, se hizo un breve análisis de las características de otros
programas supervisores: el GUNT RT 578.20 para el controlador ABB Digitric 500 y el
software LVPROSIM para plantas Lab-Volt® 3522, que también actúa como controlador.
Ya en la sección 3.1.3 se habían mencionado ciertas características del programa
LVPROSIM, sin embargo no se hizo una presentación explícita de su interfaz, tal y como
aparece en la Figura 5.1.
Figura 5.1 Interfaz gráfica del software LVPROSIM de Lab-Volt®
Las diferentes partes que la componen son:
1
3
2
5
4
84
1) Plantilla frontal del controlador: contiene barras indicadoras e indicadores
digitales para apreciar el valor deseado, la variable controlada y la señal de
salida del controlador. Además posee un selector Automático/Manual para su
operación. Si el controlador está en operación manual, el valor de la salida del
controlador se puede modificar mediante el deslizamiento de la barra de salida o
cambiando su valor en la casilla indicadora.
2) Registrador de tendencias: Muestra gráficos de las entradas y salidas del
controlador y otras variables. Los botones en la parte inferior del registrador
permiten pausar o borrar el registro, así como reiniciar el reloj. También se
muestra la escala de tiempo del registro, la cual depende del periodo de muestro
seleccionado. Se puede elegir también si se guardan los datos en un archivo.
3) Visualizador de entradas: Permite visualizar los valores de las variables de
entradas por medio de barras indicadoras.
4) Visualizador de salidas: Permite observar los valores de la salida del
controlador, así como del generador de funciones, en caso de que sea utilizado.
5) Menú de opciones y configuración: Contiene los menús y diálogos de
configuración para que el usuario pueda establecer la comunicación, seleccionar
el período de muestreo, escoger las señales que serán desplegadas en el
registrador, configurar el tipo de entradas analógicas, escoger el tipo de acción
del controlador, introducir los parámetros del controlador y configurar y
accionar el generador de funciones, entre otros aspectos.
85
El programa GUNT RT 578.20, por su parte, presenta una interfaz con las
siguientes características:
Figura 5.2 Interfaz gráfica del software GUNT RT 578.20
Las diferentes partes que la componen son:
1) Registrador de variables: gráfico en función del tiempo del valor deseado, salida
del controlador y valor realimentado. Los valores actuales se presentan en el
extremo derecho. Con un botón se puede detener y reiniciar el registro. La
constante de tiempo, y las escalas x y y pueden ajustarse. Finalmente hay
también botones para borrar o imprimir el gráfico desplegado.
2
1
3
4
86
2) Selección del controlador y otros subprogramas: en este panel se presentan
varios botones para ejecutar funciones diversas. El primero de ellos permite
elegir entre tres modos predefinidos de control. El segundo permite acceder
opciones avanzadas de configuración del controlador. El tercero abre un
subprograma de análisis del gráfico de control y los últimos dos son para
obtener información del programa o cerrarlo, respectivamente.
3) Tablero de parámetros y variables de control: Permite modificar los valores de
valor deseado, salida del controlador y valor realimentado por medio de barras
de desplazamiento. Además contiene casillas numéricas para ingresar los
parámetros de control (ganancia, tiempo proporcional y tiempo integral). Estos
parámetros no son cambiados en el controlador hasta que no se presione el
botón de escritura, que se encuentra debajo. El botón de la parte inferior sirve
para cambiar entre los modos manual y automático. Este panel soporta hasta
dos lazos de control independientes.
4) Registro de valores medidos: Este bloque de funciones permite el registro
manual o continuo de datos en un archivo para el análisis posterior. La ruta del
archivo y el nombre del mismo pueden ser seleccionados por el usuario. Para el
registro automático se puede escoger el intervalo de muestreo.
5.2 Elección del lenguaje de programación
Según los requerimientos del programa y en el tipo de funciones que se debían
realizar, se eligió Perl como lenguaje de programación, dadas las siguientes ventajas:
87
1) Facilidad de aprendizaje: aparte de que ya se contaba con cierta
familiarización con el lenguaje, Perl es un lenguaje práctico, eficiente, flexible y
completo, lo cual permite que pueda ser asimilado en poco tiempo.
2) Disponibilidad de información: el intérprete de Perl es un software de código
abierto. Esta disponibilidad, unido a la gran versatilidad del lenguaje, han
logrado que Perl cuente con amplia popularidad, por lo que es fácil acceder por
medio de Internet gran cantidad de documentación, literatura o artículos que
resultan útiles para el programador, además de la gran cantidad de
documentación que viene con el programa en sí.
3) Módulos especiales: existen una gran colección de “módulos” para Perl
destinados a realizar tareas especiales que no vienen con la distribución estándar
del programa, pero que pueden obtenerse por Internet a través de CPAN
(Comprehensive Perl Archive Network - http://search.cpan.org/), el cual cuenta
con la contribución de más de 10000 autores. Dentro de esos módulos se
encuentra por ejemplo el Win32::SerialPort, para el manejo del puerto serial; el
Tk::Graph, que sirve para realizar gráficos dentro de interfaces gráficas y el
Time::HiRes para realizar operaciones con unidades de tiempo pequeñas. Los
módulos mencionados eran indispensables para poder realizar el programa
propuesto.
4) Facilidad para manejo de interfaces gráficas: dentro de los módulos nativos
de la distribución de Perl se encuentra “Tk”, el cual contiene una serie de
88
herramientas o widgets para la creación de interfaces gráficas mediante el uso de
programación orientada a objetos, el cual es bastante intuitivo y flexible, lo que
permite construir interfaces poderosas con codificación sencilla.
5) Portabilidad: Perl se encuentra disponible para la mayoría de los sistemas
operativos existentes y es relativamente transparente entre estos, por lo que con
algunas modificaciones, un programa escrito en Perl puede ser prácticamente
multiplataformas, esto es, que si se escribe en Windows® puede ser fácilmente
trasladado para correr en Linux, por ejemplo.
5.3 Descripción de la interfaz gráfica
5.3.1 Vista general de la interfaz
Basándose en las necesidades del programa, y rescatando aspectos importantes de
los programas antes mencionados, se realizó la interfaz gráfica para el programa utilizando
Perl/Tk, la cual se observa en la Figura 5.3. Los elementos que la componen son:
1) Control de conexión/desconexión
2) Tablero de operación y sintonización del controlador
3) Configuración de gráfico y registro
4) Gráfico de tendencias
5) Ventana de mensajes
89
En las secciones siguientes se describirán cada uno de estos bloques funcionales,
detallando sus elementos e interacción con el usuario.
Figura 5.3 Interfaz gráfica del programa realizado
5.3.2 Control de conexión/desconexión Sus elementos son: casilla de selección del esclavo, botón de conexión y botón de
desconexión. Los esclavos se van conectando de uno en uno, seleccionando la dirección
respectiva en la casilla y enviando el comando de conectar. En caso de que el esclavo
seleccionado no esté físicamente conectado a la red, el programa desplegará un error en la
ventaja de mensajes (5). La casilla de selección también sirve para indicar a cuál esclavo se
le enviarán los comandos a través del tablero de operación (2). Si se selecciona la dirección
de esclavo cero, entonces los comandos se enviarán en modo broadcast, es decir, a todos
1
2
3
4
5
90
los esclavos a la vez. La desconexión de los esclavos se puede ir haciendo igualmente de
uno a uno o todos a la vez, eligiendo la dirección de esclavo cero. El botón de desconexión
no se habilitará a menos de que el esclavo seleccionado se encuentre actualmente
conectado.
5.3.3 Tablero de operación y sintonización del controlador Este módulo es el que cuenta con mayor cantidad de elementos: interruptor de
selección de modo automático/manual, casillas de parámetros de control, botón de
configuración, botón de refrescamiento de parámetros de control, y botón de envío de
parámetros. Después de realizarse una conexión exitosa con algún esclavo, todos los
elementos del tablero se encuentran deshabilitados, a excepción del botón de
refrescamiento. De esta forma, al presionar este botón se habilitan el resto de elementos del
panel, se obtienen el modo y los valores actuales del controlador y se colocan en las casillas
correspondientes, además de ser desplegados en la ventana de mensajes (5). El interruptor
de selección de modo permite precisamente cambiar entre modo de operación automático o
manual. En el modo automático la casilla del valor de salida del controlador (“u(t)”) queda
deshabilitada. Los valores de las casillas de parámetros de control pueden editarse
utilizando las flechas al lado del cuadro, o editando directamente el texto que está en la
casilla. En caso de ingresarse algún carácter no numérico se desplegará un mensaje de
error (5). Los campos correspondientes al tiempo integral y tiempo derivativo contienen
dos casillas cada uno: la primera es para el valor en minutos y la segunda para segundos.
Una vez que se ingresen nuevos valores en las casillas, estos no se actualizarán en el
controlador sino hasta que se presione el botón de envío. Al hacerlo, el programa primero
91
verificará que todos los valores de las casillas estén dentro del rango correcto. De lo
contrario imprimirá un mensaje de error (5) y sustituirá los valores incorrectos con el valor
máximo o mínimo de la escala, en caso de que haya un valor encima o debajo del rango,
respectivamente. Si los valores son correctos y el envío se concluye exitosamente, las
variables se confirman en la ventana de mensajes (5). Una excepción de lo anterior es el
caso de la casilla de u(t) en modo manual, ya que el valor de la salida del controlador sí se
cambia directamente al editar el valor de la interfaz. Como se dijo en la sección previa, el
tablero del controlador envía comandos al esclavo cuya dirección aparezca en ese momento
en la casilla de direcciones (1). En caso de que se cambie la dirección de esclavo
nuevamente el panel se deshabilita hasta que se haga un nuevo refrescamiento de valores.
Si se elige la dirección cero (broadcast) la opción de refrescar se deshabilita, ya que en este
modo ningún esclavo puede contestar, pero sí se pueden enviar valores a todos los esclavos
al mismo tiempo.
El botón de configuración abre una nueva ventana (Figura 5.4) para modificar
parámetros adicionales en el controlador cuya dirección aparece en ese momento en la
casilla de direcciones (1), o en todos, si está en modo broadcast. Estos parámetros incluyen
el valor de precarga integral y el valor deseado secundario (SP2), el tipo de control (PID ó
PID) y la habilitación del filtro en la variable realimentada. Los dos primeros parámetros
pueden leerse o escribirse, mientras que los últimos son únicamente de lectura, ya que el
dispositivo no permite configurarlos de forma remota. Cuando se envían comandos para un
solo controlador, los botones de envío se habilitan hasta después de leer el valor actual,
92
mientras que en modo broadcast los botones de lectura no se encuentran deshabilitados,
pero no así los de envío.
Figura 5.4 Ventana del diálogo de configuración del controlador
5.3.4 Configuración de gráfico y registro Sus elementos son: botón de activación de registro, botón de desactivación de
registro, botón de borrado de gráfico y archivo, campo de ruta de archivo de registro, botón
de elección de nombre de archivo y botón para elección de ruta del mismo. Al abrir el
programa, el campo de la ruta de archivo indica la ruta predeterminada: “c:\temp\graph” y
el nombre de archivo predeterminado “Foxboro_data.csv”. Si los archivos o carpetas no
existen, se crearán, mientras que si ya existe el archivo los nuevos datos se anexarán a los
datos que actualmente se encuentren en el archivo, a menos que se presione el botón de
[Borrar]. Con los botones de ruta y nombre de archivo, [Ruta…] y [Archivo…] pueden
sustituirse los valores predeterminados con valores que el usuario desee. Inicialmente, los
botones de [Registro], [Detener] y [Borrar] se encuentran desactivados, a menos que haya
algún esclavo ya conectado. Una vez lograda la comunicación, puede iniciarse la
93
graficación y el registro de los valores presionando el botón de [Registro], con lo cual
aparecerá el gráfico en la ventana correspondiente (4). Una vez que se tomen los valores
necesarios, se detiene la graficación y el registro con el botón de [Detener]. Si se quieren
ver los valores resultantes, debe abrirse el archivo que se encuentra en la ruta que se haya
seleccionado anteriormente. En caso de que se quieran tomar nuevos valores, si se quiere
que estén en un archivo aparte debe seleccionarse un nuevo nombre o ruta de archivo y
después presionar nuevamente el botón de [Registro]. Si se quiere que los nuevos valores
se anexen al mismo archivo solamente se vuelve a presionar el botón de [Registro]. Si se
presiona el botón de [Borrar] se limpiará la ventana de gráfico, pero también se borrarán
todos los datos anteriores en el archivo actual.
5.3.5 Gráfico de tendencias En esta ventana se muestra un gráfico con las variables principales de control: valor
realimentado (y(t)), salida del controlador (u(t)) y valor deseado (r(t)), tanto para el esclavo
“principal”, como para un “secundario”. El esclavo “principal” será el que se conecte
primero, y el “secundario” el que lo siga. Las variables de los dos controladores pueden
distinguirse entre sí porque utilizan colores diferentes, tal y como muestra la Tabla 5.1:
Tabla 5.1 Código de colores utilizado en los gráficos de control del programa
Parámetro de control Principal Secundario
y(t) Rojo Café
u(t) Amarillo Blanco
r(t) Azul Naranja
94
El gráfico despliega a la vez hasta 200 muestras tomadas, luego de eso se
comenzará a desplazar hacia la izquierda, perdiendo de vista los valores anteriores.
5.3.6 Ventana de mensajes Tal y como se ha mencionado, esta ventana cumple únicamente una labor
informativa, desplegando mensajes al usuario cuando una operación se realiza
satisfactoriamente, dando los valores de control que son leídos o escritos al controlador, o
advirtiendo cuando ocurren errores de rango, o de comunicación. La ventana tiene una
barra de desplazamiento vertical, por lo que pueden observarse el historial de todos los
mensajes que han desplegado desde el momento en que se inició la sesión del programa.
5.4 Funcionamiento interno del programa
5.4.1 Interacción con interfaz gráfica Como todo programa escrito en Perl/Tk donde se dispone de una interfaz gráfica o
GUI para interactuar con el usuario, el presente programa es dirigido por “eventos”, lo cual
significa que su ciclo principal se encarga de llamar a distintas subrutinas respondiendo a
eventos externos como el presionar un botón, por ejemplo. Por tanto, la interacción con el
usuario es primordial para determinar el flujo de control del programa. Sin embargo,
también existen otros procesos que se continúan efectuando cíclicamente después de haber
realizado una acción y que deben detenerse por medio de otra acción específica. En las
siguientes secciones se explicarán los procesos más importantes dentro del flujo del
programa y cómo interactúan estos con las entradas provenientes desde el usuario.
95
5.4.2 Establecimiento de conexión Antes de poder comenzar a enviar o recibir comandos hacia o desde un esclavo,
primero debe establecerse una conexión con él para hacerlo entrar en modo remoto. Sin
embargo, el manual del controlador especifica que si un esclavo no recibe ningún comando
durante 3 segundos, vuelve a ponerse en modo local. Además, el programa debía permitir
que se manejara la conexión con dos o más controladores a la vez. Con todo ello, se
implementó en el programa el flujo de conexión y re-conexión de los esclavos tal y como
se aprecia en la Figura 5.5. El proceso se inicia cuando el usuario selecciona la dirección
de un esclavo y presiona el botón de conexión. Una vez que esto ocurre, la dirección del
esclavo pasa a formar parte de una lista que contiene las direcciones de los dispositivos
conectados y se le envía el comando para colocarlo en modo remoto (Función 5 MODBUS,
dirección 10, bit en alto). Una vez que se logra una conexión exitosa, se entra en un ciclo
automático donde cada 3 segundos se envía el comando de conexión a todos los esclavos
que se encuentren dentro de la lista, con un retardo de 10 ms entre cada uno, para dar
tiempo a que se estabilice el puerto. Si antes de los 3 segundos se envía cualquier otra
instrucción por la red, el contador se devuelve a cero y reinicia el conteo de los 3 segundos,
ya que el requisito es que se envíe cualquier instrucción durante este tiempo.
En caso de que se le envíe el comando a un esclavo que no esté físicamente
conectado, o en caso de que un esclavo se desconecte accidentalmente de la red, el
programa detectará el error de conexión, imprime un mensaje de error y eliminará ese
elemento de la lista de esclavos, para evitar que se vuelva a mandarle el comando. Si este
esclavo era el único que se había conectado, entonces se sale completamente del ciclo.
96
Figura 5.5 Flujo del proceso de conexión de los controladores
inicio
Bandera de conexión = 1
Activación de widgets
Agregar dirección a lista de direcciones
Iniciar timer de 3 s
Tomar elemento de la lista de direcciones
Enviar comando de conexión a ese esclavo
Esperar 10 ms
Conexión exitosa?
¿Más elementos en lista?
Esperar fin de timer
¿Timer agotado?
Enviar mensaje de error de conexión
Quitar elemento de la lista de
direcciones
¿Lista vacía?
Fin
Desactivar widgets
Bandera de conexión = 0
¿Otra instrucción?
Instrucción Desconexión
Apuntar siguiente elemento de lista
SI
NO
NO
SI
NO
SI
NO SI
SI
NO
SI
NO
97
De forma similar, si durante este tiempo se le envía el comando de desconexión a
alguno de los controladores, su dirección se saca de la lista, y si ya no quedan más
elementos en esta, entonces se termina también el proceso. El proceso completo de
desconexión se muestra en detalle en la Figura 5.6.
Figura 5.6 Flujo del proceso de desconexión de los controladores
La fase de “detener procesos pendientes” se refiere a que se detienen los ciclos de
registro, graficación, y conexión, si todavía estaban activos.
inicio
Detener procesos pendientes
Quitar dirección de lista de direcciones
Fin de timer de conexión
Enviar comando de conexión a ese esclavo
Esclavo está
conectado
¿Lista vacía?
Fin
Desactivar widgets
Bandera de conexión = 0
NO
NO
SI
SI
98
5.4.3 Proceso de envío de mensajes
Figura 5.7 Flujo del proceso de envío de mensajes al controlador
inicio
Leer datos del GUI
Formato de parámetros de mensaje (func..)
Agregar CRC-16
Convertir a ASCII
Enviar mensaje por el puerto serial
¿Mensaje recibido?
Procesamiento genérico
¿Varios esclavos?
¿Instrucción graficación?
NO
SI
Esperar mensaje I
Fin
¿Mensaje completo?
Esperar mensaje II
Broadcast?
Quitar elemento de la lista de
direcciones
¿Lista vacía?
Bandera de conexión = 0
Esperar 20 ms
Mensaje de error
Detener procesos pendientes
SI
NO
SI NO
SI
NO
NO
SI
SI
NO
Error
SI
NO
Error
Mensaje de error
Fin
SI
Verificación de datos
NO
Mensaje de error
99
El envío de los mensajes desde el programa hacia el controlador debía cumplir con
los requerimientos del protocolo MODBUS, tanto en el formato de los datos, como en el
diagrama de estados del maestro (Figura 2.20). El proceso es iniciado al recibir un evento
que proviene desde el GUI, y de esta se toma la información que va a ser enviada al
esclavo, según el comando elegido. Si la instrucción consiste en escribir valores de
parámetros de control que fueron ingresados por el usuario, hay primero una verificación
de los valores para no enviar valores incorrectos. En caso de error, se imprime una
advertencia, y el mensaje no se envía. En caso contrario, al mensaje por enviar se le da el
formato según el tipo de función MODBUS al cual corresponda (ver Apéndice C). Esto
incluye el cálculo y anexo del código de redundancia cíclica CRC-16 para la detección de
errores. Una vez que los datos están completos, la información se convierte en ASCII para
enviarla a través del puerto serial utilizando las capacidades del módulo Win32::SerialPort.
Inmediatamente después del envío, se procede a verificar que el esclavo haya
respondido adecuadamente, según lo establecido en el Apéndice C para cada tipo de
función y sabiendo el número de bytes esperado. Según el manual del controlador, la
respuesta puede ocurrir luego de 2 a 700 ms. Sin embargo, en el programa esto se dividió
en dos etapas de espera. En la etapa I hay un límite de tiempo de 100 ms. Si después de
este tiempo hay una respuesta, se procede con el procesamiento de esta. Si no, entonces se
pasa a una segunda etapa de espera de hasta 600 ms en caso de hablar con un solo
controlador, o de 100 ms más para el modo broadcast. Al agotarse el tiempo y no haber
aún respuesta (o si está incompleta), si se encontraba en modo broadcast entonces es
100
normal que no haya contestación, y por tanto se continúa con el flujo. En caso de que no,
entonces se detecta que hay un error de comunicación con el esclavo elegido, con lo cual se
pasa a un proceso de error similar al presentado en la Figura 5.6, donde su dirección se
elimina de la lista y en caso de ser el único esclavo, se detienen todos los procesos.
Si el mensaje recibido tiene una longitud igual a la esperada, entonces continúa con
un procesamiento “genérico”, donde básicamente se verifica que el esclavo que respondió
fue el adecuado, y donde se chequea que no hayan ocurrido errores de “marco”, realizando
nuevamente un cálculo de CRC-16 y comparándolo con el que fue recibido. En caso de
error, se imprime un mensaje de advertencia al usuario.
Finalmente, si hay varios esclavos conectados a la vez, se da un retardo de 20 ms
después de cada instrucción para que el puerto se estabilice, evitando errores de
comunicación inducidos. La excepción a esto ocurre cuando se están solicitando los datos
para la graficación y registro, ya que un retardo afectaría el período de muestreo.
5.4.4 Procesamiento adicional de mensajes En el punto anterior, se observó que el ciclo de envío de las intrucciones incluye un
procesamiento genérico de los mensajes recibidos. Sin embargo, cuando la instrucción
enviada corresponde a la Función 1 (lectura de n bits) o Función 3 (lectura de n palabras),
debe darse un proceso de interpretación suplementario de los datos obtenidos, para obtener
la información relevante que se solicitó.
Esta labor corresponde a dos funciones separadas (Process_Func_1 y
Process_Func_3) que, dependiendo del tipo de instrucción enviada, toman la cadena de
101
datos del puerto, le extraen la información no relevante (número de instrucción, dirección
de esclavo, CRC-16, etc.) y devuelven únicamente una cadena de valores cuyos elementos
(bits o palabras) están ordenados de igual forma en la cual aparecen en memoria, para
accederlas más fácilmente.
5.4.5 Ciclo de graficación y registro de variables El inicio de estos dos ciclos comienza al presionar el botón de [Registro] en el GUI.
Al hacerlo, el programa abrirá el archivo con el nombre y la ruta especificados por el
usuario. Si el archivo o ruta no existen, el programa los crea. Si el archivo se encuentra
abierto por otra aplicación, hay un mensaje de error y el ciclo termina. Después, se toma el
valor de hora actual, para utilizarlo como valor de referencia.
A partir de aquí se inician dos ciclos separados, uno para el registro y el otro para la
graficación. En el primero, cada aproximadamente ~250 ms se le envía al esclavo
principal, y luego al secundario, la orden de leer los valores de salida de controlador, valor
de referencia y variable realimentada. Una vez recibidos los datos son procesados tal y
como se menciona en 5.4.4 y los valores resultantes se imprimen en el archivo de registro
(junto con una variable de tiempo calculada con base en el valor de referencia) y se guardan
en la estructura de datos accedida por el ciclo de graficación. Si el valor realimentado está
fuera del rango, se sustituye con un mensaje de sobre o bajo rango en el archivo, y con un
valor máximo o mínimo en el arreglo de datos de graficación. También, el valor de la
variable salida del controlador del esclavo es refrescado en el GUI.
102
En el ciclo de graficación, simplemente cada 500 ms se toman los últimos valores
que fueron ingresados en la estructura de datos de graficación y son desplegados en la
ventana del gráfico. Ambos ciclos se terminan al presionar el botón de [Detener] o al
desconectarse todos los controladores. Los ciclos se representan en la Figura 5.8.
Figura 5.8 Flujo del proceso de registro y graficación
inicio
Toma ruta y archivo
Abrir archivo indicado
Hora de referencia
Valor de tiempo
Registro en archivo
Rango correcto
Solicitud de datos
Esperar 250 ms
Abierto por otro programa
Error Fin
Procesar datos
Ajustar valor
Refrescar estructura de datos / GUI
Más de un esclavo?
Esclavo 2 procesado
Registro detenido
Tomar ultimos valores de estructura
de datos
Actualizar gráfico
Fin
Esperar 500 ms
Registro detenido
SI
NO
SI
NO
NO
SI NO
SI
SI
SI
NO
Ciclo registro Ciclo graficación
NO
103
5.4.6 Detección y corrección de errores Ya se han mencionado algunos de los mecanismos de prevención de errores que
contiene el programa, pero ahora se hará un resumen de los más relevantes:
- Si se intenta establecer conexión un esclavo que no está conectado a la red, el
programa detectará que no hay respuesta y dará un mensaje de error. Lo mismo
ocurre si accidentalmente se desconecta alguno de los esclavos.
- No se puede enviar el comando de desconexión a un controlador que no se
encuentre conectado actualmente.
- El tablero del controlador en el GUI queda desactivado a menos que el
controlador esté conectado y los valores actuales hayan sido leídos.
- En la ventana de configuración de parámetros adicionales, no se pueden enviar
valores a menos que se hayan leído los valores actuales (excepción: modo
broadcast).
- En modo de operación automática, no se permite modificar el valor de la salida
del controlador.
- Si hay un error de marco o ha respondido un esclavo al que no se le haya
enviado algún comando, el programa despliega mensaje de error.
- En modo broadcast, no se espera respuesta alguna de ningún controlador cuando
se envía algún comando.
104
- Cuando hay errores de comunicación y se desconectan todos los esclavos, todos
los procesos cíclicos (graficación, conexión, etc.) son detenidos para evitar
continuar generando errores.
- Si se intenta abrir un archivo de registro que esté abierto en otro programa, por
ejemplo, Excel, el programa dará un mensaje de error y detiene el registro.
- En las casillas de valores de parámetros de control sólo se permite ingresar
números. Cualquier otro carácter genera un mensaje de error. Además antes de
enviar los valores se revisa que todos estén dentro de su rango válido y si no, se
corrigen.
- Si los valores de variable realimentada leídos desde en controlador están fuera
de rango, el programa lo detecta y en el archivo coloca un mensaje que así lo
indica, mientras que en el gráfico lo sustituye por un valor máximo o mínimo.
- Entre el envío de las instrucciones secuenciales hacia varios controladores, hay
ciertos retardos inducidos para dar tiempo a que se estabilice el puerto serial y
evitar así fallos de comunicación.
105
CAPÍTULO 6: Conclusiones y recomendaciones
Entre las principales conclusiones en encuentran:
- Se logró realizar un programa que permite la conexión, configuración y
sintonización de dos o más controladores, así como el registro y la graficación
de los valores de: variable realimentada y(t), salida de controlador u(t) y valor
deseado r(t) de hasta dos esclavos a la vez, por lo que se cumple con todos los
objetivos básicos del proyecto.
- La codificación del programa fue completamente realizada en Perl, utilizando
además algunos módulos adicionales que no vienen con la distribución estándar,
pero que se pueden obtener fácilmente a través de Internet. La elección de este
lenguaje fue adecuado, ya que se pudo lograr la funcionalidad que se quería
resultando así en un programa completo con un tamaño cerca de los 100 Kb.
- El programa fue diseñado para ser utilizado como una herramienta didáctica en
el Laboratorio de Control Automático, por lo que su funcionalidad está basada
en los requerimientos necesarios para llevar a cabo los experimentos del curso.
El programa no está pensado para utilizar el controlador como parte de un
equipo industrial.
- La interfaz gráfica del programa de supervisión y configuración no sólo resulta
ser amigable para el usuario, sino que además cuenta con autoprotección para
evitar errores por parte del mismo, habilitando o deshabilitando los controles
según la necesidad, y evaluando los rangos de los valores introducidos.
106
- El programa no sólamente muestra las variables de control ya mencionadas en
forma gráfica, sino que además las registra en un archivo con formato de valores
separados por comas, el cual el usuario puede modificar su nombre y ubicación,
y que puede luego abrir con un software de manejo de hojas electrónicas para su
revisión, análisis o despliegue posterior.
- A pesar de que el controlador Foxboro® 716C tiene habilitada la opción de ser
controlado y configurado a través de una red serial, fue evidente que el aparato
no está diseñado para un control tan intensivo o continuo de forma remota, sino
que más bien su funcionalidad es bastante rígida. Esto se demuestra por
ejemplo en el hecho de que si durante tres segundos no se envía ningún
comando remoto, la conexión se pierde, o que el controlador no envía
automáticamente los valores de las variables de control hacia el maestro, sino
que hay que hacer la solicitud contínuamente para obtenerlos, lo cual dificultó el
desarrollo del programa de control.
- A pesar de que el ciclo de despliegue gráfico y registro del programa está hecho
de tal forma de que el periodo de registro sea cercano a los 250 ms, el manejo
interno de los datos (realizado por parte de los módulos) puede causar que
gradualmente este tiempo de muestreo comience a incrementarse, hasta llegar a
un promedio de cerca de 380 ms cuando ya la ventana del gráfico está
completamente llena. Al separar los dos ciclos (despliegue y registro) y
hacerlos independientes, el tiempo final logró bajarse, pero aún se da una
dilación. En el programa realizado no se realiza una acumulación de valores,
107
sino que se va sobreescribiendo una única estructura de datos, pero es probable
que el módulo internamente vaya acumulando datos, causando el retardo
mencionado. Aún así, los datos obtenidos son correctos, pero el intervalo de
muestreo variable puede dificultar luego la tarea de identificación de procesos.
- Usualmente, una interfaz RS-485 requiere que se añandan resistencias de
terminación y polarización a la red para evitar los efectos de líneas de
transmisión. Sin embargo, al utilizarse líneas de tan corta longitud y
velocidades no muy altas de transmisión, se puede utilizar un enlace
simplificado, como en este caso.
- Se observó que la comunicación entre el maestro y el esclavo efectivamente se
apega al protocolo de comunicación MODBUS, tanto en el formato de los
mensajes, tiempos de respuesta, detección de errores, esquemas de
comunicación, modos de transmisión unicast o broadcast y utilización de
funciones de lectura y escritura de bits o palabras. El programa trabaja con
velocidad de 9600 baudios, sin paridad y con dos bits de parada.
- El convertidor comercial RS-232 a RS-485 no cumplía inicialmente con los
requisitos de las normas RS-485, debido a que no tenía conexión para un hilo
común. Por lo tanto, requirió de ciertas modificaciones internas para poder esta
conforme a las regulaciones, como la inclusión de una conexión a tierra, y la
adición de una terminal adicional para la conexión del conductor común.
108
Por otra parte, las recomendaciones que surgen después del trabajo son:
- El programa finalmente trabajó adecuadamente para cumplir con los objetivos
del proyecto. Sin embargo, posteriormente pueden realizarse mejoras al código
para incluir funcionalidad adicional, o para optimizar algunas situaciones
actuales. Entre ellas se encuentran:
o Buscar algún módulo alternativo de manejo de gráficos para la interfaz
gráfica de Perl/Tk que no sea Tk::Graph, para ver si se puede lograr la
eliminación del retardo del período de muestreo debido a la acumulación
de valores. Otra opción es utilizar los módulos GTK en lugar de
Perl/Tk, ya que provee un conjunto de herramientas más avanzadas.
o Incluir un botón que permita al usuario imprimir ya sea los gráficos
obtenidos, los datos de registro, o incluso los valores de configuración
actuales.
o Expandir la funcionalidad del gráfico de tendencias para que pueda
desplegar los valores de más de dos controladores a la vez. Además, que
el programa permita la elección de las variables que serán mostradas.
o Hacer uso de opciones adicionales que tiene el controlador que no fueron
incluidas dentro del presente programa porque no son elementos
indispensables, pero sí son deseables, entre ellos: utilización de las
salidas de relé para el control de alarmas de proceso, banda o desviación;
configuración de las alarmas, opciones de histéresis, activación del
algoritmo de autorregulación (SMART), entre otras.
109
o Buscar formas en que se pueda hacer que el código sea más compacto y
eficiente, eliminando redundancias, y simplificando la configuración de
los objetos en el GUI, utilizando cadenas de configuración múltiples en
lugar de dar el formato uno a uno, por ejemplo.
- Al estar escrito el programa el Perl, puede considerarse la posibilidad de realizar
una versión del programa para trabajar con el sistema operativo GNU/Linux, ya
que la conversión no requeriría de mucho trabajo. Lo que sí debe modificarse es
la sustitución del módulo Win32::SerialPort, ya que este está diseñado
específicamente para el manejo del puerto serial en ambiente Windows.
- Al igual que como al programa se le puede añadir funcionalidad para trabajar
con las salidas secundarias del controlador y la utilización de alarmas, a la caja
de conexiones se le pueden añadir los elementos necesarios para permitir estas
opciones adicionales.
- Utilizar una metodología más exhaustiva para confirmar el tipo de algoritmo de
control PID del Foxboro® 716C.
- Contactar al personal de servicio técnico del fabricante para resolver el
problema del porqué no pueden escribirse parámetros de configuración del
controlador de forma remota (tipo de acción de control o filtro del valor
desplegado, por ejemplo).
110
BIBLIOGRAFÍA
1. Alfaro, V. “Controladores PID”, Escuela de Ingeniería Eléctrica, Universidad de
Costa Rica, 2004.
2. Alfaro, V. “Identificación Experimental”, Escuela de Ingeniería Eléctrica,
Universidad de Costa Rica, 2004
3. Alfaro, V. “IE – 432 Laboratorio de control: Procesos de caudal y temperatura
(Lab-Volt Modelo 3522)”, Escuela de Ingeniería Eléctrica, Universidad de Costa
Rica, 2004
4. Alfaro, V. “Métodos de Sintonización”, Escuela de Ingeniería Eléctrica,
Universidad de Costa Rica, 2005
5. Axelson, J. “Serial Port Complete: Programming & Circuits for RS-232 and
RS-485 Links & Networks”, Lakeview Research, USA, 2001.
6. Axelson, J. “Designing RS-485 circuits”, Circuit Cellar Ink, USA, No. 107, Junio
1999.
7. B&B Electronics. “RS-422 and RS-485 Application Note”, http://www.bb-
elec.com.
8. Modicon Inc. “MODBUS over serial line: specification & implementation
guide (v1.0)”, http://www.modbus.org
9. National Semiconductor. “Ten ways to bulletproof RS-485 interfaces”,
http://www.national.com .
10. National Semiconductor. “Practical Limits of RS-485”, http://www.national.com .
111
11. Perrin, B. “The Art and Science of RS-485”, Circuit Cellar Ink, USA, No. 108,
Julio 1999.
12. The Foxboro Company. “PSS 2C-1B5 A. I/A Series® Model 716C 1/16 DIN
Temperature Controller: Product Specifications”, USA, February 1997.
13. The Foxboro Company. “MI 018-575. I/A Series® Model 716C 1/16 DIN
Temperature Controller: Installation, Configuration and Operation”, USA,
February 1997.
14. The Foxboro Company. “MI 018-579. I/A Series® Models 718TC and 716C
Controller: Serial Communication Guide”, USA, May 1997.
112
APÉNDICE A: Parámetros de configuración del Foxboro®
716C
Configuración básica:
A continuación se brinda un listado exhaustivo de las opciones que pueden
seleccionarse para cada parámetro, así como la dependencia que tienen con otros.
Tabla A.1 Parámetros del modo de configuración básica del Foxboro® 716C[13]
Código Descripción de parámetro Opciones Descripción de opción Dependencia Configuración de Comunicación Serial OFF Deshabilitado Ero Protocolo Propietario Foxboro nbUS Modbus
Ser1 Protocolo de Interfaz Serial
jbUS Jbus
-
1 a 95 Protocolo Foxboro únicamente Ser2 Dirección de enlace serial
1 a 255 Demás protocolos Ser1: ON
Ser3 Baud rate para enlace serial 600 a 19200 Baud rate Ser1: ON 7E 7 bits + paridad par 7O 7 bits + paridad impar 8E 8 bits + paridad par 8O 8 bits + paridad impar
Ser4 Formato de byte
8 8 bits sin paridad
Ser1: ON
Configuración de Entradas y rangos 0 Termopar tipo L [0,+400°C] 1 Termopar tipo L [0,+900°C] 2 Termopar tipo J [0,+400°C] 3 Termopar tipo J [0,+1000°C] 4 Termopar tipo K [0,+400°C] 5 Termopar tipo K [0,+1200°C] 6 Termopar tipo T [0,+400°C] 7 Termopar tipo N [0,+1400°C] 8 Termopar tipo R [0,+1760°C] 9 Termopar tipo S [0,+1760°C] 10 RTD tipo Pt100 [-199.9,+400 °C] 11 RTD tipo Pt100 [-200,+800 °C] 12 Lineal: mV [0,60 mV] 13 Lineal: mV [12,60 mV] 14 Lineal: mA [0,20 mA] 15 Lineal: mA [4,60 mA] 16 Lineal: V [0,5 V] 17 Lineal: V [1,5 V]
P1 Tipo de entrada
18 Lineal: V [0,10 V]
Si P1 = 0,2,4,9 o 15 => P36 = FLtr
113
19 Lineal: V [2,10 V] 20 Termopar tipo L [0,+1650°F] 21 Termopar tipo J [0,+1830°F] 22 Termopar tipo K [0,+2190°F] 23 Termopar tipo T [0,+750°F] 24 Termopar tipo N [0,+2550°C] 25 Termopar tipo R [0,+3200°C] 26 Termopar tipo S [0,+3200°C] 27 RTD tipo Pt100 [-199.9,+400 °F] 28 RTD tipo Pt100 [-330,+1470 °F] _ _ _ _ . No decimal _ _ _ . _ Una posición decimal _ _ . _ _ Dos posiciones decimales
P2 Posición de punto decimal
_ . _ _ _ Tres posiciones decimales
P1 : entrada lineal
-1999 a 4000 Entradas lineales
P3 Valor inicial de escala (bajo) Según P1 Entradas TC y RTD
P1. // rL: determinado
-1999 a 4000 Entradas lineales P4
Valor completo de escala (alto)
Según P1 Entradas TC y RTD
P1. // rH: determinado
Configuración de Salidas y Rangos de Alarma rEv Salida de control de acción reversa dir Salida de control de acción directa Pv.rt Retransmisión analógica de variable controlada
P5 Acción de Salida 1
Sp.rt Retransmisión analógica de valor deseado
-
0 - 20 Salida de tipo 0 a 20 mA P6 Tipo de Salida 1
4 - 20 Salida de tipo 4 a 20 mA -
P7 Retransmisión analógica - Valor inicial de escala
-1999 a 4000 Limite inferior de rango P5: Pv.Rt o SP.rt
P8 Retransmisión analógica - Valor final de escala
-1999 a 4000 Limite superior de rango P5: Pv.Rt o SP.rt
nonE No usada rEv Salida de control de acción reversa dir Salida de control de acción directa AL1.P Usada como salida de Alarma de proceso AL1.b Usada como salida de Alarma de banda
P9 Función de salida 2
AL1.d Usada como salida de Alarma de desviación
Si P9 = rEv => CY2 = 15s. // Si P9 = dir => CY2 = 10s (si P22 = Alr), 4s (si P22 = OIL), 2s (si
P22 = H2O)
H.A. Alarma alta (fuera de banda) con reset autom. L.A. Alarma baja (dentro de banda) con reset autom. H.L. Alarma alta (fuera de banda) con reset manual
P10 Modo de operación de Alarma 1
L.L. Alarma baja (dentro de banda) con reset manual
P9: AL1.P, AL1.b, AL1.d
nonE No usada rEv Salida de control de acción reversa dir Salida de control de acción directa AL2.P Usada como salida de Alarma de proceso AL2.b Usada como salida de Alarma de banda
P11 Función de salida 3
AL2.d Usada como salida de Alarma de desviación
Si P11 = rEv => CY3 = 15s. // Si
P11 = dir => CY3 = 10s (si P22 = Alr), 4s (si P22 = OIL), 2s (si P22 = H2O)
H.A. Alarma alta (fuera de banda) con reset autom. L.A. Alarma baja (dentro de banda) con reset autom. H.L. Alarma alta (fuera de banda) con reset manual
P12 Modo de operación de Alarma 1
L.L. Alarma baja (dentro de banda) con reset manual
P11: AL2.P, AL2.b, AL2.d
114
Configuración de Puntos de Operación de Alarma y Arranque suave
OPrt Punto de operación e histéresis de Alarma 2 pueden configurarse en el modo de operación
P13 Programabilidad de Punto de
operación de Alarma 2 y valor de histéresis
COnf Punto de operación e histéresis de Alarma 2 pueden configurarse en el modo de Configuración
P11: AL2.P, AL2.b, AL2.d
Según rango Para alarma de proceso
0 a 500 Para alarma de banda P14 Punto de operación de Alarma 2
-500 a 500 Para alarma de desviación
P11: AL2.P, AL2.b, AL2.d // P13: COnF
P15 Valor de histéresis de Alarma 2 0.1% a 10.0% Porcentaje del rango seleccionado en P3-P4 P11: AL2.P, AL2.b,
AL2.d // P13: COnF
P16 Punto de operación del arranque suave
Según rango
Valor en unidades de ingeniería para iniciar la función de "arranque suave" al inicio, dentro del rango de lectura
tOL diferente a InF
Configuración de Bloqueo de seguridad
0 Desbloqueado: Todos los parámetros pueden modificarse
1 Bloqueado: Ningún parámetro puede modificarse (a excepción del valor deseado y reset de alarma)
P17 Bloqueo de seguridad
2 a 9999 Contraseña para desbloquear el dispositivo
ver P30
Configuración avanzada:
Una vez en el modo de configuración, se selecciona el código 262 por medio de las
teclas / y se presiona el botón FUNC. De esta forma se pueden acceder las opciones
de configuración avanzada.
Tabla A.2 Parámetros del modo de configuración avanzada del Foxboro® 716C[13]
Código Descripción de parámetro Opciones Descripción de opción Dependencia Configuración de Acciones de Salidas y valores desplegados
norL La salida es el resultado del calculo PID P18 Acción de la salida de control
principal CnPL La salida es el complemento del calculo PID (100-PID)
P5,P9 o P1 = rEv o dir
norL El valor desplegado es el resultado del calculo PID
P19 Valor desplegado de la salida principal CnPL El valor desplegado es el complemento del
calculo PID (100-PID)
P5,P9 o P1 = rEv o dir
norL La salida es el resultado del calculo PID P20 Acción de la salida de control
secundaria CnPL La salida es el complemento del calculo PID (100-PID)
Si dos de P5,P9 o P1 = rEv o dir
P21 Valor desplegado de la salida secundaria norL El valor desplegado es el resultado del calculo
PID Si dos de P5,P9 o
P1 = rEv o dir
115
CnPL El valor desplegado es el complemento del calculo PID (100-PID)
AIr Aire (CY2/3 = 10s, rC = 1.00) OIL Aceite (CY2/3 = 4s, rC = 0.80) P22 Medio de enfriamiento H2O Agua (CY2/3 = 2s, rC = 0.40)
Afecta P9, P11, CY2/CY3 y rC
OFF Algoritmo de auto ajuste no calcula rC P23 Ganancia de enfriamiento relativa
calculada por el SMART AT ON Algoritmo de auto ajuste calcula rC
Únicamente para dos salidas de
control Configuración de Acciones de Alarma dir Directa (relé energizado en condición de alarma)
P24 Acción de Alarma 1 rEv Inversa (relé desenergizado)
P9: AL1.P, AL1.b, AL1.d
OFF Standby deshabilitado P25 Standby de Alarma 1
ON Standby habilitado P9: AL1.P, AL1.b,
AL1.d dir Directa (relé energizado en condición de alarma)
P26 Acción de Alarma 2 rEv Inversa (relé desenergizado)
P11: AL2.P, AL2.b, AL2.d
OFF Standby deshabilitado P27 Standby de Alarma 2
ON Standby habilitado P11: AL2.P, AL2.b,
AL2.d Configuración de Offset
-19.9 a 19.9 Rango para valores con un lugar decimal P28 Offset aplicado a la variable
controlada -199 a 199 Rango para valores con dps lugares decimales P1: entrada no
lineal
Configuración de Protección de Despliegue de Parámetros
OFF Los parámetros protegidos no pueden desplegarse P29 Mostrar parámetros protegidos
ON Los parámetros protegidos pueden desplegarse P17: No cero
Configuración de Auto ajuste con función de SMART
0 Auto ajuste deshabilitado
1 Auto ajuste no protegido por Bloqueo de seguridad P30 Función de auto ajuste (SMART
AT)
2 Auto ajuste protegido bajo el Bloqueo de seguridad
Únicamente si hay salidas de control
configuradas
P31 Valor máximo de la banda
proporcional calculada por auto ajuste
[Valor de P32,200%] Valor máximo del rango
P30: no cero, y con salidas de control
configuradas
P32 Valor mínimo de la banda
proporcional calculada por auto ajuste
[1.0%,P31] Valor mínimo del rango P30: no cero, y con salidas de control
configuradas
P33 Valor mínimo del tiempo integral calculado por auto ajuste
00.01 a 02.00 Valor en mm.ss
P30: no cero, y con salidas de control
configuradas
Configuración de Función Automática/Manual
OFF Función manual deshabilitada P34 Función manual
ON Función manual habilitada
Únicamente si hay salidas de control
configuradas
0 El instrumento inicia en modo AUTO
1 El instrumento inicia en modo MANUAL con la salida del controlador en 0%
P35 Estado del dispositivo al arranque
2 El instrumento inicia en el mismo modo en el que estaba antes de apagarse, pero si estaba en modo manual la salida el 0% al reiniciar
Únicamente si hay salidas de control
configuradas y P34 no es OFF
116
3
El instrumento inicia en el mismo modo en el que estaba antes de apagarse, pero si estaba en modo manual inicia con la misma salida que tenia antes
Configuración de "time out"
tn.10 10 segundos P36
Selección de la duración del time out usado por el instrumento
durante el modo de operación tn.30 30 segundos -
Configuración de Valor de Seguridad de Salida
0 No hay valor de seguridad (por defecto)
1 Valor de seguridad aplicado cuando se detecta una condición de sobre rango o sub rango
2 Valor de seguridad aplicado cuando se detecta una condición de sobre rango
P37 Condiciones para el Valor de Seguridad de la salida
3 Valor de seguridad aplicado cuando se detecta una condición de sub rango
Únicamente si hay salidas de control
configuradas
0.0 a 100.0% Para una salida de control únicamente
P38 Valor de Seguridad de Salida -100.0 a 100.0% Para dos salidas de control
Únicamente si hay salidas de control
configuradas y P37 no es cero
Configuración de Filtro Digital noFL. No usa filtro
P39 Filtro digital en el valor desplegado FLtr Filtro habilitado (4s para RTD/TC; 2s para
entrada lineal) -
noFL. No usa filtro P40 Filtro digital en el valor
retransmitido FLtr Filtro habilitado (4s para RTD/TC; 2s para entrada lineal)
-
Configuración de Acción de control
Pid El proceso es controlado por acción PID P41 Tipo de acción de control
Pi. El proceso es controlado por acción PI
Únicamente si hay salidas de control
configuradas
Configuración de Anti-windup P42 Anti-Reset-Windup -30% a 30% Porcentaje de la banda proporcional -
117
APÉNDICE B: Parámetros de operación del Foxboro® 716C
Tabla B.1 Parámetros del modo de operación del Foxboro® 716C[14]
Código Descripción de parámetro Opciones Descripción de opción Dependencia SP Valor deseado (punto operación) [rL,rH] En unidades de ingeniería rL,rH
ON SMART Habilitado Snrt Estado de auto ajuste SMART
OFF SMART Deshabilitado P30 (config)
ON Restablecer estado de alarma n.RSt Reset manual de alarmas
OFF No cambiar estado Alarmas
configuradas ON El instrumento está bloqueado
nnn Clave de bloqueo de protección OFF El instrumento no está
bloqueado P17
SP2 Valor deseado auxiliar [rL,rH] En unidades de ingeniería rL,rH AL1 Punto de operación de Alarma 1 Según P9 En unidades de ingeniería P9
HSA1 Histéresis de Alarma 1 % de P4-P3 Porcentaje de rango de escala P4,P3 AL2 Punto de operación de Alarma 2 Según P14 En unidades de ingeniería P14
HSA2 Histéresis de Alarma 2 Según P15 Porcentaje de rango de escala P15 Pb Valor de Banda Proporcional 1% a 200% Porcentaje de rango P4-P3 Control PI,PID
hYS Histéresis para acción de control de APAGADO/ENCENDIDO % de P4-P3 Porcentaje de rango de escala -
ti Tiempo integral 00.01 a 20.00 Unidades mm.ss Control PI,PID
td Tiempo derivativo 00.01 a 10.00 Unidades mm.ss Control PID
0 a 100% Para una salida de control 0 a -100% Enfriamiento IP Pre carga integral 0 a 100% Calentamiento
Salidas utilizadas
CY2* Tiempo de ciclo de salida 2 Según P22 En segundos P22 CY3* Tiempo de ciclo de salida 3 Según P22 En segundos P22 rC* Ganancia de enfriamiento relativa N/A Ganancia salida 2 P9
OLAP Banda muerta / traslape entre
salidas de calentamiento / enfriamiento
Según Pb % de la banda proporcional Pb
rL Límite inferior del valor deseado -100% a 100% En unidades de ingeniería Según P3
rH Límite superior del valor deseado -100% a 100% En unidades de ingeniería Según P4
Grd1 Rampa aplicada a un cambio positivo en el valor deseado N/A En unidades por minuto -
Grd2 Rampa aplicada a un cambio negativo en el valor deseado N/A En unidades por minuto -
OLH Limite superior de la salida N/A En % de la salida - tOL Duración del límite de la salida N/A En minutos -
0.1% a 25% % de la salida por segundo rnP Razón de levantamiento máxima
de la salida de control. InF (>25%) No hay rampa aplicada
-
118
APÉNDICE C: Funciones del protocolo de comunicaciones del
Foxboro® 716C [14]
C.1 Función 1 y 2: Lectura de n bits
Tabla C.1 Función 1 y 2: Lectura de n bits – Petición del Maestro
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (01-02) 1 Dirección de inicio de bit (byte alto) 1 Dirección de inicio de bit (byte bajo) 1 Número de bits (byte alto) 1 Número de bits (byte bajo) 1 Chequeo de Error (CRC-16) 2
Tabla C.2 Función 1 y 2: Lectura de n bits – Respuesta del esclavo
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (01-02) 1 Conteo de bytes (n) 1 Datos n Chequeo de Error (CRC-16) 2
- Estas funciones sirven para solicitar el valor de un cierto número de bits que
representan el estado de un esclavo (máximo 24 bits consecutivos a la vez).
- El campo de “datos” indica el bit solicitado. El bit solicitado con la dirección
más baja está en el bit menos significativo del primer byte; el siguiente en el bit
1 y así sucesivamente. Los bits necesarios para completar el último byte se
llenan con ceros.
119
C.2 Función 3 y 4: Lectura de n palabras
Tabla C.3 Función 3 y 4: Lectura de n palabras – Petición del Maestro
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (03-04) 1 Dirección de inicio de palabra (byte alto) 1 Dirección de inicio de palabra (byte bajo) 1 Número de palabras (byte alto) 1 Número de palabras (byte bajo) 1 Chequeo de Error (CRC-16) 2
Tabla C.4 Función 3 y 4: Lectura de n palabras – Respuesta del esclavo
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (03-04) 1 Conteo de bytes (n) 1 Datos n Chequeo de Error (CRC-16) 2
- Estas funciones sirven para leer un grupo de palabras de 16 bits consecutivas
que contienen valores de variables del esclavo (máximo 20 palabras a la vez).
- El campo de “datos” contiene las palabras solicitadas en el siguiente formato:
parte alta de la primera palabra, parte baja de la primera palabra, parte alta de la
segunda palabra, y así sucesivamente. El campo de datos contiene 0h8000 (hex)
para direcciones no usadas o para información no relevante para la
configuración actual
120
C.3 Función 5: Escritura de un bit
Tabla C.5 Función 5: Escritura de un bit – Petición del Maestro
Rango Byte Dirección de Esclavo (1 – 255)9 1 Código de Función (05) 1 Dirección de bit (byte alto) 1 Dirección de bit (byte bajo) 1 Dato 2 Chequeo de Error (CRC-16) 2
Tabla C.6 Función 5: Escritura de un bit – Respuesta del esclavo
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (05) 1 Dirección de bit (byte alto) 1 Dirección de bit (byte bajo) 1 Datos 2 Chequeo de Error (CRC-16) 2
- Comando para cambiar el estado de un bit del esclavo.
- El campo de datos debe ser 0h0 para poner un bit en cero o 0hFF00 (hex) para
ponerlo en uno.
9 Permite el uso de la dirección 0 para utilizar el modo broadcast.
121
C.4 Función 6: Escritura de una palabra
Tabla C.7 Función 6: Escritura de una palabra – Petición del Maestro
Rango Byte Dirección de Esclavo (1 – 255)10 1 Código de Función (06) 1 Dirección de palabra (byte alto) 1 Dirección de palabra (byte bajo) 1 Datos 2 Chequeo de Error (CRC-16) 2
Tabla C.8 Función 6: Escritura de una palabra – Respuesta del esclavo
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (06) 1 Dirección de palabra (byte alto) 1 Dirección de palabra (byte bajo) 1 Datos 2 Chequeo de Error (CRC-16) 2
- Comando para cambiar el valor de una palabra (16 bits) del esclavo.
- El campo de datos en 0h8000 (hex) se considera un valor de “no importa”. En
ese caso, el valor presente no se modificará.
10 Permite el uso de la dirección 0 para utilizar el modo broadcast.
122
C.5 Función 15: Escritura de n bits
Tabla C.9 Función 15: Escritura de n bits – Petición del Maestro
Rango Byte Dirección de Esclavo (1 – 255)11 1 Código de Función (15) 1 Dirección de inicio de bit (byte alto) 1 Dirección de inicio de bit (byte bajo) 1 Número de bits (byte alto) 1 Número de bits (byte bajo) 1 Contador de bytes (n) 1 Datos n Chequeo de Error (CRC-16) 2
Tabla C.10 Función 15: Escritura de n bits – Respuesta del esclavo
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (15) 1 Dirección de inicio de bit (byte alto) 1 Dirección de inicio de bit (byte bajo) 1 Número de bits (byte alto) 1 Número de bits (byte bajo) 1 Chequeo de Error (CRC-16) 2
- Comando que cambia el estado de un grupo consecutivo de bits (hasta 24 bits).
- El estado deseado de cada bit va dentro del campo de “datos” (1 = encendido, 0
= apagado).
- El estado impuesto para bits de sólo lectura es ignorado.
- El comando es procesado desde el primer bit y es ejecutado o no dependiendo
del estado actual del esclavo. Si hay un error, el comando es abortado.
11 Permite el uso de la dirección 0 para utilizar el modo broadcast.
123
C.6 Función 16: Escritura de n palabras
Tabla C.11 Función 16: Escritura de n palabras – Petición del Maestro
Rango Byte Dirección de Esclavo (1 – 255)12 1 Código de Función (16) 1 Dirección de inicio de palabra (byte alto) 1 Dirección de inicio de palabra (byte bajo) 1 Número de palabras (byte alto) 1 Número de palabras (byte bajo) 1 Contador de bytes (n) 1 Datos n Chequeo de Error (CRC-16) 2
Tabla C.12 Función 16: Escritura de n palabras – Respuesta del esclavo
Rango Byte Dirección de Esclavo (1 – 255) 1 Código de Función (16) 1 Dirección de inicio de palabra (byte alto) 1 Dirección de inicio de palabra (byte bajo) 1 Número de palabras (byte alto) 1 Número de palabras (byte bajo) 1 Chequeo de Error (CRC-16) 2
- Comando para escribir un grupo consecutivo de palabras (máximo 20)
- El dato impuesto para palabras de sólo lectura es ignorado.
- El comando es procesado iniciando desde la primera palabras y es ejecutado o
no dependiendo del estado actual del esclavo. Al primer error encontrado, el
esclavo aborta el comando y devuelve un error.
- El valor de 0h8000 (hex) se considera como un valor de “no importa”.
12 Permite el uso de la dirección 0 para utilizar el modo broadcast.
124
APÉNDICE D: Direcciones de memoria del Foxboro® 716C [14]
Tabla D.1 Estados de bit y comandos para el dispositivo en modo de control
125
Tabla D.2 Estados de bit y comandos para el dispositivo en modo de configuración
126
127
Tabla D.3 Palabras para el dispositivo en modo de control
128
Tabla D.4 Palabras para el dispositivo en modo de configuración
129
Notas:
1) Cuando hay un error de medición, el campo de “datos” contiene alguno de
los siguientes códigos de error: 30004 (0h7534) – debajo del rango, 30005
(0h7535) – encima del rango, 30014 (0h753E) – error en junta de
Referencia, 30050 (0h7562) – error en autocero interno.
2) La relación entre estos valores es la siguiente:13
13 Únicamente para dos salidas de control configuradas. Cuando el dispositivo está configurado con dos salidas de control, la salida principal es “rev” y la secundaria es “dir”.
130
1. Salida principal = PID + OLAP (si el bit en dirección 328 es 0)
2. Salida principal = 100.0 – (PID + OLAP) (si hay 1 en dirección 328)
3. Salida secundaria = (OLAP – PID) * rC (si hay 0 en dirección 330)
4. Salida secundaria = 100.0 - (OLAP – PID) * rC (si hay 1 en
dirección 330)
3) El valor 0h7FFF significa que la acción integral está excluida.
4) El valor transmitido es creado de la siguiente forma: (No. De revisión de
software) * 100 + código de identificación (29 para el 716C).
5) El valor deseado es usado para los algoritmos de PID y de SMART.
Cualquier cambio no está influenciado por el mecanismo de gradiente.
Además, el valor deseado no se guarda en la EEPROM, y se pierde al
apagar el aparato.
6) El valor de 0h7FFF significa que la transferencia del punto de operación se
da como un cambio de escalón.
7) El valor de 0h7FFF significa que la acción limitadora está siempre activa.
8) Al solicitar, siempre se envía el umbral activo (threshold). Durante el
establecimiento, si el dispositivo está en modo de control, se modifica el
umbral para la corrida actual, mientras que en modo de configuración se
modifica el parámetro P14.
9) El valor de 0h7FFF significa que no hay limitación de rampa impuesta.
10) El comando de escritura decimal se acepta sólo con entradas lineales.
11) Para más información, ver manual del fabricante (tablas adicionales).
131
Apéndice E: Experimentos realizados en el Laboratorio de
Control
E.1 Experimento 1: Característica Estática del Proceso14
La característica estática de un proceso se refiere a la relación entre la variable de
entrada (salida del controlador) y la señal realimentada (salida del transmisor), en estado
estacionario (condiciones de operación estable).
El objetivo de esta práctica consistió en obtener la característica estática del proceso
de caudal, para verificar el funcionamiento de controlador en modo manual y ver la
respuesta correspondiente del proceso.
E.1.1 Procedimiento 1- Se conectó el controlador, la planta y la interfaz de entradas y salidas tal y como
se describe en la Figura 3.3
2- Se encendió el controlador y se puso en modo manual con salida de 0%.
3- Se encendió el equipo didáctico Lab-Volt® 3522 (calibrado adecuadamente)
4- Se verificó que la compuerta para producir perturbaciones estuviera cerrada
5- Se incrementó en un 10% la salida del controlador, se esperó a que la respuesta
se estabilizara y se anotó el valor de la misma en la Tabla A.1. Se continuó
14 Antes de cada experimento, se realizó la calibración correspondiente de los transmisores, según lo descrito en el manual de laboratorio [3]
132
incrementando la salida del controlador en pasos del 10% hasta que alcanzó el
100%.
6- Se bajó nuevamente la salida del controlador a 0% y se esperó a que la respuesta
regresara a cero.
7- Se colocó la compuerta de perturbaciones al 50% y se repitieron los pasos 5 y 6
8- Se abrió la compuerta de perturbaciones al 100% y se repitieron los pasos 5 y 6
E.1.2 Resultados
Tabla A.1 Resultados de la característica estática del proceso de caudal
Señal salida controlador (%)
Salida proceso (%) compuerta cerrada
Salida proceso (%) compuerta al 50%
Salida proceso (%) compuerta abierta
0 0 0 0 10 8 6.7 4.1 20 15.8 13.8 10.5 30 22.9 20.5 16.6 40 31.5 28.6 23.6 50 41.1 37.9 32.1 60 51.8 48 40.6 70 63.2 58.4 51.1 80 76.3 70.7 62.2 90 88.8 82.5 72.3 100 99.8 92.6 79.4
133
Salida del proceso (%) en funcion de la senal de salida del controlador (%)
0
2 0
4 0
6 0
8 0
1 0 0
1 2 0
0 2 0 4 0 6 0 8 0 1 0 0 1 2 0
Sa lida c on t r ola dor (% )
Salid
a pr
oces
o (%
)
C om pu er t a c er r a da C om pu er t a a l 5 0 % C om pu er t a a b ier t a
Figura E.1 Resultados del experimento de la característica estática del proceso
Según los resultados se observó sí el proceso reacciona a los cambios en la salida
del controlador en modo manual, sólo que la linealidad de la curva de la característica
estática sí está sujeta a las perturbaciones que se pueden presentar en el sistema, ya que la
apertura de la compuerta influye de modo que hay mayor linealidad conforme la compuerta
se encuentra más cerrada. Asimismo, se aprecia que la variable controlada alcanza menor
magnitud, conforme la compuerta se encuentre más abierta.
Además, con base en la característica estática se puede deducir que la acción
requerida para el controlador es de tipo inversa, ya que si la salida aumenta, se requiere
134
bajar la velocidad del abanico, mientras que si la salida disminuyera el abanico deberá
aumentar la velocidad.
E.2 Experimento 2: Característica Dinámica del Proceso
Antes de poder determinar los parámetros de sintonización para un controlador, es
necesario obtener la característica dinámica de un proceso, lo cual comúnmente se hace
introduciendo un estímulo externo al proceso (escalón unitario, por ejemplo) y registrando
tanto su entrada, como su salida. Esto permite hacer luego uso de varios métodos
existentes de identificación de procesos, que permiten obtener una ecuación que lo modele.
E.2.1 Procedimiento
Proceso de caudal:
1- Se conectó el controlador, el equipo de adquisición y la planta tal y como se
describe en la Figura 3.3
2- Se encendió el controlador Foxboro® en modo manual con salida de 0%.
3- Se encendió el equipo didáctico Lab-Volt 3522
4- Se ejecutó el programa LVPROSIM, configurándolo adecuadamente para el
proceso de caudal y para registrar la variable controlada y la salida del
controlador.
5- Se verificó que la compuerta para producir perturbaciones estuviera cerrada
135
6- Se preparó el almacenamiento de las señales en un archivo y se inició el
registro.
7- Después de unos 10 s se cambió la salida del controlador a 50%15
8- Una vez que el proceso se estabilizó nuevamente (por unos 10 s) se terminó el
registro del archivo y se guardó.
9- Se guardaron datos nuevamente, pero esta vez cambiando la salida del
controlador a 0% y esperando que se estabilizara el proceso.
10- Se abrió la compuerta de perturbaciones al 50% y se repitieron los pasos 6 a 9.
11- Se abrió la compuerta de perturbaciones al 100% y se repitieron los pasos 6 a 9.
Proceso de temperatura:
2- Se conectó el controlador, el equipo de adquisición y la planta tal y como se
describe en la Figura No. 3.2, conectando además la salida del generador de
funciones a la entrada de control del proceso de caudal.
3- Se encendió el controlador Foxboro® en modo manual con salida de 0%.
4- Se ejecutó el programa LVPROSIM, bajo la operación como equipo didáctico,
configurándolo adecuadamente.
5- Se ajustó el generador de funciones para que tuviera amplitud cero, frecuencia
cero y desviación cero.
15 Nota: Como durante la operación manual el Foxboro® 716C cambia su valor de salida gradualmente, la salida no es un escalón exactamente, sino que es realmente una rampa.
136
6- Se repitieron los pasos 6 a 9 que se realizaron para el proceso de caudal.
7- Se aumentó la amplitud de la señal del generador de funciones a 50%.
8- Se repitió el paso 6 de este procedimiento.
9- Se aumentó la amplitud de la señal del generador de funciones a 100%.
10- Se repitió el paso 6 de este procedimiento guardando la información
correspondiente.
Los datos guardados en los archivos fueron procesados con el programa
ie432_procesos.m escrito en Matlab® por el Ing. Víctor Alfaro, el cual además de
identificar un modelo de la planta de primer y segundo orden más tiempo muerto usando el
método de “1/4 – 3/4 de Alfaro”[2] grafica la respuesta de la planta al escalón, la entrada de
la planta y la respuesta del modelo obtenido.
Los resultados obtenidos se presentarán seguidamente. Sin embargo, cabe destacar
que por hecho de usar el controlador de forma manual y no poder hacer cambios
escalonados en el valor deseado, los modelos obtenidos no fueron totalmente satisfactorios,
especialmente en el caso del proceso de caudal, al tener una reacción tan rápida ante los
valores deseados.
137
E.2.2 Resultados Tabla E.2 Modelos de primer y segundo orden más tiempo muerto– proceso de caudal
Condición de perturbación Tipo de escalón POMTM16 SOMTM
Positivo 62.611s
1s434.29889.0
2 =
+
1390s
1s059.3s386.29889.0
2
2
=
++
Compuerta cerrada
Negativo 93.2980s
1s99.29829.0
2 =
+
9.5680s
1s807.3s623.39829.0
2
2
=
++
Positivo 42.467s
1s473.29311.0
2 =
+
39.1130s
1s139.3s463.29311.0
2
2
=
++
Compuerta al 50%
Negativo 75.2930s
1s131.39389.0
2 =
+
23.5377s
1s974.3s948.39389.0
2
2
=
++
Positivo 5.536s
1s067.2e7099.0
2
1125.0
=
+
−
625s
1s623.2s725.17099.0
2
2
=
++
Compuerta al 100%
Negativo 38.2135s
1s656.27299.0
2 =
+
55.3621s
1s375.3s84.27299.0
2
2
=
++
Tal como se esperaba, los altos valores de s2 indican que los modelos obtenidos no
son muy fieles a la respuesta real del proceso. Sin embargo, en todos los casos el modelo
de primer orden se aproximaba mejor. Por otra parte, el efecto principal observable del
aumento de la magnitud de la perturbación es que el sistema disminuye su ganancia.
16 POMTM: Primer orden más tiempo muerto. SOMTM: Segundo orden más tiempo muerto.
138
Para el proceso de temperatura:
Tabla E.3 Modelos de primer y segundo orden más tiempo muerto – proceso térmico
Condición de perturbación Tipo de escalón POMTM SOMTM
Positivo 75.319s
1s24.43e968.1
2
s31.8
=
+
−
8.3226s
1s9.54s9.752968.1
2
2
=
++
Generador de funciones apagado
Negativo 262.368s
1s81.42e972.1
2
s61.8
=
+
−
8.2896s
1s34.54s1.738972.1
2
2
=
++
Positivo 9.112s
1s46.29e009.1
2
s15.7
=
+
−
7.604s
1s39.37s5.349009.1
2
2
=
++
Generador de funciones al 50%
Negativo 28.609s
1s48.19e01.1
2
s74.1
=
+
−
12.2209s
1s73.24s95.15201.1
2
2
=
++
Positivo 49.111s
1s29.22e6531.0
2
s7.11
=
+
−
312.108s
1s29.28s1.200e6531.0
2
2
55.4
=
++
−
Generador de funciones al 100%
Negativo 54.337s
1s745.12e6493.0
2
s639.0
=
+
−
97.996s
1s17.16s36.656493.0
2
2
=
++
Los modelos de primer orden obtenidos tienen una mejor bondad de ajuste con
respecto a los modelos del proceso de caudal. Sin embargo, aún las aproximaciones no son
del todo óptimas, posiblemente por el hecho de que el escalón aplicado no era instantáneo,
o a problemas del programa utilizado para el ajuste. No obstante, los modelos obtenidos
139
pueden utilizarse para calcular posteriormente los parámetros de sintonización óptimos para
los controladores, al menos de forma aproximada.
E.3 Experimento 3: Parámetros últimos o críticos
Otra forma de obtener la característica dinámica de un proceso es por medio de una
condición de oscilación mantenida, lo cual se puede hacer utilizando un controlador
puramente proporcional.
E.3.1 Procedimiento
Proceso de caudal:
1- Se conectó el controlador, el equipo de adquisición y la planta tal y como se
describe en la Figura 3.3
2- Se sintonizó el controlador como un controlador puramente proporcional, con
los siguientes parámetros:
a. Banda proporcional 50%
b. Tiempo integral 0 (Off)
c. Tiempo derivativo 0
d. Componente integral 0%
3- Se cambió el controlador a operación automática y se cambió el valor deseado a
un valor de 50%.
4- Si el sistema no era oscilatorio, se volvía a operación manual, con valor deseado
en 0%, y se reducía el valor de la banda proporcional.
140
5- De esta manera, por prueba y error, se fue cambiando el valor deseado del
controlador hasta que el sistema pasara el límite de estabilidad y comenzara a
oscilar de forma permanente.
6- Cuando la respuesta fue oscilatoria, se tomó nota de la banda proporcional del
controlador (banda proporcional límite) y el periodo de oscilación, observando
la señal del registrador del LVPROSIM.
7- Se tomó también el valor de la ganancia de la planta para un valor arbitrario de
banda proporcional del controlador.
Proceso de temperatura
1- Se conectó el controlador, el equipo de adquisición y la planta tal y como se
describe en la Figura No. 3.2, conectando además la salida 2 del equipo de
adquisición (generador de funciones) a la entrada de control del proceso de
caudal.
2- Se realizó el mismo procedimiento que para el proceso de caudal, sólo que
iniciando con los siguientes parámetros:
a. Banda proporcional 50%
b. Tiempo integral 0 (Off)
c. Tiempo derivativo 0
d. Componente integral 0%
141
3- Nuevamente se tomó nota de la banda proporcional límite y el periodo de
oscilación crítica, así como la ganancia de la planta para un valor de banda
proporcional arbitrario.
E.3.2 Resultados
Figura E.2 Condición de oscilación permanente del proceso de caudal
Figura E.3 Respuesta del proceso de caudal a un cambio escalón con Bp = 50%
142
Figura E.4 Condición de oscilación permanente del proceso de temperatura
Figura E.5 Respuesta del proceso térmico a un cambio escalón con Bp = 50%
Con los datos anteriores, siguiendo el método de Ziegler y Nichols[2], se obtuvieron
los siguientes parámetros:
Tabla E.4 Parámetros críticos de los procesos de caudal y temperatura
Proceso Kcu Bpu (%) Tu (s)
Caudal 6.66 15% 2.17
Temperatura 11.11 9% 23.25
143
Con base en la información última, también pueden obtenerse modelos de primer
orden más tiempo muerto de la planta, los cuales fueron:
Tabla E.5 Modelos de la planta basados en los parámetros últimos
Proceso Modelo Gp (s)
Caudal 1s19.2
e275.1 s438.0
+
−
Temperatura 1s84.46
e143.1 s104.6
+
−
E.4 Experimento 4: Controlador Proporcional (P)
En un controlador proporcional, el único parámetro que puede modificarse el la
ganancia Kc, o banda proporcional Bp, que en realidad se relacionan de la siguiente forma:
Bp100Kc = (E.4-1)
Este parámetro único afecta el funcionamiento del sistema de control en términos
del error permanente, estabilidad y rapidez. El objetivo de este experimento era observar
las variaciones en la respuesta del sistema a un escalón, a distintos valores de ganancia
proporcional del controlador.
E.4.1 Procedimiento Proceso de caudal:
144
1- Se conectó el controlador en modo manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.3
2- Se sintonizó el controlador con los siguientes parámetros:
a. Banda proporcional 100%
b. Tiempo integral 0 (Off)
c. Tiempo derivativo 0
d. Componente integral 0%
3- Se pasó el controlador a modo automático y después de 10 s, se cambió el valor
deseado del controlador a 50%, y se esperó a que se estabilizara la respuesta del
sistema, guardando los datos en un archivo para el análisis.
4- Se cambió el valor deseado a 0% y se regresó el controlador a modo manual.
5- Se cambió la Banda proporcional a 60% y se repitieron los pasos 3 a 4.
6- Se cambió la Banda proporcional a 30% y se repitieron los pasos 3 a 4.
Proceso de temperatura:
1- Se conectó el controlador en modo manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.2
2- Se repitieron los pasos 2 a 6 del proceso de caudal, pero con la diferencia de que
en el punto 5 se usa Bp = 50%, y en el punto 6 Bp = 20%.
145
E.4.2 Resultados
Figura E.6 Efecto de la variación de Bp en el proceso de caudal – Control P
Figura E.7 Efecto de la variación de Bp en el proceso de temperatura – Control P
146
Se observa que para distintos valores de banda proporcional, la respuesta varía
visiblemente. Una forma de medir estas diferencias, es tomar los valores de error
permanente, sobrepaso máximo y tiempo de asentamiento al 2% para cada uno de los
valores de ganancia del controlador. A continuación se presenta un resumen de los datos
obtenidos:
Tabla E.6 Resultados para el proceso de caudal – Control proporcional
Parámetro Bp = 30% Bp = 60% Bp = 100%
ep 12% 20.12% 27.18%
Mp 5.65% 2.4% n/a
ta2% (s) 7.7 3.88 3.2
Tabla E.7 Resultados para el proceso de temperatura – Control proporcional
Parámetro Bp = 30% Bp = 60% Bp = 100%
ep 5.11% 10.3% 16.9%
Mp 9.07% 2.68% n/a
ta2% (s) 63.1 61.5 58.1
Los datos muestran que conforme disminuye la ganancia proporcional (o aumenta la
banda proporcional), el sistema alcanza más rápidamente su valor final (disminución del
tiempo de asentamiento) el sobrepaso máximo disminuye indicando una menor condición
oscilatoria, y por tanto, un aumento de la estabilidad, pero esto a costa de un aumento del
error permanente del sistema.
147
E.5 Experimento 5: Controlador Proporcional Integral (PI)
El controlador PI puede ajustar tanto el valor de la banda proporcional como el del
tiempo integral. La interacción de estos dos factores incide de forma diferente en el
comportamiento dinámico del lazo de control, lo cual puede observarse al obtener la
respuesta del sistema de control a un cambio de escalón en el valor deseado, usando
combinaciones distintas de estos dos parámetros.
E.5.1 Procedimiento Proceso de caudal – variación de tiempo integral:
1- Se conectó el controlador en modo manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.3
2- Se sintonizó el controlador con los siguientes parámetros:
a. Banda proporcional 100%
b. Tiempo integral 3 s
c. Tiempo derivativo 0
d. Componente integral 0%
3- Se pasó el controlador a modo automático y después de aproximadamente 10 s,
se cambió el valor deseado del controlador a 50%, y se esperó a que se
estabilizara la respuesta del sistema, guardando los datos.
148
4- Se cambió el valor deseado a 0% y se regresó el controlador al modo manual.
5- Se cambió el tiempo integral a 2 segundos y se repitieron los pasos 3 a 4.
6- Se cambió el tiempo integral a 1 segundo y se repitieron los pasos 3 a 4.
Proceso de caudal – variación de banda proporcional:
7- Se sintonizó el controlador con los siguientes parámetros:
a. Banda proporcional 150%
b. Tiempo integral 1 s
c. Tiempo derivativo 0
d. Componente integral 0%
8- Se pasó el controlador a modo automático y después de aproximadamente 10 s,
se cambió el valor deseado del controlador a 50%, y se esperó a que se
estabilizara la respuesta del sistema, guardando los datos.
9- Se cambió el valor deseado a 0% y se regresó el controlador al modo manual.
10- Se cambió la banda proporcional a 100% y se repitieron los pasos 8 a 9.
11- Se cambió la banda proporcional a 75% y se repitieron los pasos 8 a 9.
Proceso de temperatura – variación de tiempo integral:
1- Se conectó el controlador en modo manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.3
149
2- Se sintonizó el controlador con los siguientes parámetros:
a. Banda proporcional 50%
b. Tiempo integral 18 s
c. Tiempo derivativo 0
d. Componente integral 0%
3- Se pasó el controlador a modo automático y después de aproximadamente 10 s,
se cambió el valor deseado del controlador a 50%, y se esperó a que se
estabilizara la respuesta del sistema, guardando los datos.
4- Se cambió el valor deseado a 0% y se regresó el controlador al modo manual.
5- Se cambió el tiempo integral a 12 segundos y se repitieron los pasos 3 a 4.
6- Se cambió el tiempo integral a 9 segundos y se repitieron los pasos 3 a 4.
Proceso de temperatura – variación de banda proporcional:
7- Se sintonizó el controlador con los siguientes parámetros:
a. Banda proporcional 100%
b. Tiempo integral 12 s
c. Tiempo derivativo 0
d. Componente integral 0%
150
8- Se pasó el controlador a modo automático y después de aproximadamente 10 s,
se cambió el valor deseado del controlador a 50%, y se esperó a que se
estabilizara la respuesta del sistema, guardando los datos.
9- Se cambió el valor deseado a 0% y se regresó el controlador al modo manual.
10- Se cambió la banda proporcional a 50% y se repitieron los pasos 8 a 9.
11- Se cambió la banda proporcional a 30% y se repitieron los pasos 8 a 9.
E.5.2 Resultados
0.00
10.00
20.00
30.00
40.00
50.00
60.00
0.00 10.00 20.00 30.00
tiempo (s)
%
ti = 3s
ti = 2s
ti = 1 s
Valor deseado (%)
Figura E.8 Efecto de la variación de ti en el proceso de caudal – Control PI
151
0
10
20
30
40
50
60
0.00 7 .50 15.00 22.50 30.00
tiempo (s)
%
BP = 7 5%
BP = 100%
BP = 150%
Valor deseado (%)
Figura E.9 Efecto de la variación de Bp en el proceso de caudal – Control PI
0.00
10.00
20.00
30.00
40.00
50.00
60.00
70.00
0.00 30.00 60.00 90.00 120.00 150.00 180.00 210.00
tiempo (s)
%
ti = 9s
ti = 12s
ti = 18s
valor deseado (%)
Figura E.10 Efecto de la variación de ti en el proceso de temperatura – Control PI
152
0
10
20
30
40
50
60
70
0.00 30.00 60.00 90.00 120.00 150.00 180.00 210.00 240.00
tiempo (s)
%
BP = 1 00%
BP = 5 0%
BP = 3 0%
V a lor desea do (%)
Figura E.11 Efecto de la variación de Bp en el proceso de temperatura – Control PI
Se observa que para distintas combinaciones de banda proporcional y tiempo integral,
la respuesta varía visiblemente. Nuevamente se toman los valores de error permanente,
sobrepaso máximo y tiempo de asentamiento al 2% para cada uno de los las combinaciones
de estos parámetros como medida de la variación de la respuesta. A continuación se
presenta un resumen de los datos obtenidos:
Tabla E.8 Resultados de la variación de ti en el proceso de caudal – Control PI
Parámetro ti = 1s ti = 2s ti = 3s
ep 1.66% 1.7% 1.82%
Mp n/a n/a n/a
ta2% (s) 16.3 14.3 22
153
Tabla E.9 Resultados de la variación de Bp en el proceso de caudal – Control PI
Parámetro Bp = 75% Bp = 100% Bp = 150%
ep 1.12% 1.35% 1.8%
Mp n/a n/a n/a
ta2% (s) 15.75 14.4 15
Tabla E.10 Resultados de la variación de ti en el proceso térmico – Control PI
Parámetro ti = 9s17 ti = 12s ti = 18s
ep n/a 0.8% 1.6%
Mp n/a 11.8% 9.6%
ta2% (s) n/a 207 158
Tabla E.11 Resultados de la variación de Bp en el proceso térmico – Control PI
Parámetro Bp = 30%18 Bp = 50% Bp = 100%
ep n/a 1.5% 2%
Mp n/a 10.65% 14.1%
ta2% (s) n/a 157.5 232.5
De los datos tabulados para el proceso de caudal, se observa que manteniendo el
valor de la banda proporcional constante, un valor menor de tiempo integral haría menor el
17 El sistema se volvió oscilatorio con este valor de ti
154
error permanente. No se puede concluir nada sobre el tiempo de asentamiento ya que los
valores obtenidos cambiaron de diferente manera al variar el tiempo integral, además de
que en ningún momento se dio un sobrepaso de la señal.
Asimismo, si se mantiene el tiempo integral constante, una disminución en el valor
de la banda proporcional llevará consigo una disminución del error permanente. No se
puede concluir nada sobre el tiempo de asentamiento ya que los valores obtenidos
cambiaron de diferente manera al variar la banda proporcional, ni tampoco hubo sobrepaso
máximo.
En el proceso de temperatura se observa que para un valor constante de banda
proporcional, si se disminuye el valor de la constante de tiempo integral, el error
permanente disminuye, trayendo consigo un aumento tanto en el tiempo de asentamiento
como en el sobrepaso máximo. Si el tiempo integral se disminuye aún más, el sistema
comienza a oscilar.
De manera análoga, al mantener constante el tiempo integral y variando el valor de
banda proporcional, si la banda disminuye, el error permanente también disminuye,
disminuyendo también el sobrepaso máximo. No se puede concluir nada sobre el tiempo de
asentamiento ya que los valores obtenidos cambiaron de diferente manera al variar la banda
proporcional. Nuevamente, si el valor de la banda proporcional disminuye aún más, el
sistema comienza a oscilar.
18 El sistema se volvió oscilatorio con este valor de Bp
155
E.6 Experimento 6: Controlador Proporcional Integral Derivativo
(PID)
En el controlador proporcional integral derivativo hay ya tres parámetros que se
pueden ajustar: la banda proporcional (o ganancia), el tiempo integral y el tiempo
derivativo. Para estos controladores, resulta más complejo la sintonización ya que existen
aún más combinaciones de valores cada una con diferente incidencia directa sobre las
características del comportamiento dinámico del lazo de control.
Para analizar la influencia del tiempo derivativo sobre estas características, se
obtuvo la respuesta del sistema de control del proceso térmico, a un cambio en el valor
deseado utilizando un controlador PI y luego un PID con varios valores de tiempo
derivativo.
E.6.1 Procedimiento
1- Se conectó el controlador en operación manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.2, además se
conectó la salida del generador de funciones a la entrada de control del abanico.
2- Se ajustó el generador de funciones para trabajar con onda cuadrada, frecuencia
cero, desviación cero y amplitud cero.
3- Se sintonizó el controlador PID con los siguientes parámetros:
a. Banda proporcional 50%
b. Tiempo integral 12 s
156
c. Tiempo derivativo 0
d. Componente integral 0%
4- Se pasó el controlador a operación automática y después de unos 10 segundos,
se cambió la el valor deseado a 50%.
5- Se esperó a que se estabilizara la respuesta y después de alrededor de 10
segundos se aumentó la amplitud del generador de funciones a 100%.
6- Se esperó unos 10 segundos después de estabilizarse el sistema y se disminuyó
nuevamente la amplitud del generador de funciones a 0%.
7- Una vez que el sistema se estabilizó finalmente, se guardaron los datos en un
archivo para el análisis. Se vuelve a poner el controlador en modo manual con
salida de 0%.
8- Se cambió el tiempo derivativo a 5 s y se repitieron los pasos 4 a 7
9- Se cambió el tiempo derivativo a 2 s y se repitieron los pasos 4 a 7
E.6.2 Resultados
157
0 . 0
2 0 . 0
4 0 . 0
6 0 . 0
8 0 . 0
1 0 0 . 0
0 .0 0 7 5 . 0 0 1 5 0 .0 0 2 2 5 .0 0 3 0 0 .0 0 3 7 5 .0 0 4 5 0 .0 0 5 2 5 .0 0
t iem po (s)
%
y (t )
r (t )
G en . Fu n c
Figura E.12 Respuesta del proceso de temperatura con td =0 – Control PID
0 .0
2 0 .0
4 0 .0
6 0 .0
8 0 .0
1 0 0 .0
0 .0 0 7 5 . 0 0 1 5 0 . 0 0 2 2 5 .0 0 3 0 0 .0 0 3 7 5 . 0 0 4 5 0 . 0 0
t iem po (s)
%
y ( t )
r (t )
G en . Fu n c
Figura E.13 Respuesta del proceso de temperatura con td =2s – Control PID
158
0.0
2 0.0
4 0.0
6 0.0
80.0
1 00.0
0.00 7 5.00 1 50.00 2 2 5.00 3 00.00 3 7 5.00 4 50.00
tiem po (s)
%
y ( t )
r ( t )
G en . Fu n c
Figura E.14 Respuesta del proceso de temperatura con td =5s – Control PID
Tabla E.12 Resultados de la variación de td en el proceso térmico – Control PID
Escalón en valor deseado Perturbación positiva Perturbación negativa ep Mp ta2% (s) ep Mp ta2% (s) ep Mp ta2% (s)
td=0 s 4.87% 10.2% 155.66 9.15% 14.27% 63.73 7.32% 8.9% 188.8 td=2 s 1.18% 8.47% 128.6 8.23% 13.8% 72 5.88% 8.23% 95.6 td=5 s 0% 8.24% 126.2 8.8% 12.35% 72.8 2.22% 8.5% 101.1
Se observa que al aumentar la acción derivativa, el sistema tiende a ser más estable,
más rápido (disminuye ta2%) y el sobrepaso máximo disminuye, con algunas excepciones.
El cambio del tiempo derivativo no debería tener ningún efecto sobre el error permanente;
sin embargo, se observa que con el aumento de td también fue disminuyendo el error. No
159
obstante, las gráficas no permiten medirlo con exactitud, por lo que los valores no son del
todo precisos.
E.7 Experimento 7: Método de Sintonización de Ziegler y Nichols
El método de Ziegler y Nichols fue el primer método de sintonización sistemático
en ser desarrollado. Este utiliza la información crítica del proceso para la sintonización de
controladores PI y PID. Entre las características del método están que el método está
optimizado para controladores funcionando como regulador, y que utiliza el criterio de
decaimiento de un cuarto.
Para este laboratorio se utilizó la información crítica del proceso térmico obtenida
en el experimento 3 y se sintonizaron los controladores PI y PID para analizar el
comportamiento dinámico del lazo de control ante cambios en la perturbación y el valor
deseado.
E.7.1 Procedimiento
1- Utilizando la información crítica determinada para el proceso térmico con la
velocidad mínima del abanico 19 , se calcularon los parámetros para un
controlador PI y un PID-Ideal empleando el método de Ziegler y Nichols.
2- Se conectó el controlador en operación manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.2, además se
conectó la salida del generador de funciones a la entrada de control del abanico.
160
3- Se ajustó el generador de funciones para trabajar con onda cuadrada, frecuencia
cero, desviación cero y amplitud cero.
4- Se sintonizó el controlador como PI con los siguientes parámetros:
a. Banda proporcional 20%
b. Tiempo integral 19 s
c. Tiempo derivativo 0
d. Componente integral 0%
5- Se pasó el controlador a operación automática y después de unos 10 segundos,
se cambió la el valor deseado a 50%.
6- Se esperó a que se estabilizara la respuesta y después de alrededor de 10
segundos se aumentó la amplitud del generador de funciones a 100%.
7- Se esperó unos 10 segundos después de estabilizarse el sistema y se disminuyó
nuevamente la amplitud del generador de funciones a 0%.
8- Una vez que el sistema se estabilizó finalmente, se guardaron los datos en un
archivo para el análisis. Se vuelve a poner el controlador en modo manual con
salida de 0%.
9- Se cambió el tiempo derivativo a 5 s y se repitieron los pasos 5 a 8
10- Se cambió el tiempo derivativo a 2 s y se repitieron los pasos 5 a 8
19 Resultados obtenidos en el Experimento 3
161
11- Se sintonizó el controlador como PID con los siguientes parámetros:
a. Banda proporcional 12% (valor máximo)
b. Tiempo integral 15 s
c. Tiempo derivativo 2 s
d. Componente integral 0%
12- Se repitieron los pasos 5 a 10 con los nuevos valores de sintonización.
E.7.2 Resultados
0
10
20
30
40
50
60
0 100 200 300
y(t)r(t)Gen. de func.
Figura E.15 Respuesta del proceso - método sintonización de Ziegler y Nichols PI
162
0
10
20
30
40
50
60
0.0 100.0 203.5 303.5 403.5
y(t)
r(t)
Salida analógica 2(Gen. de func.)
Figura E.16 Respuesta de proceso - método sintonización de Ziegler y Nichols PID
Tabla E.13 Resultados de la sintonización mediante el método de Ziegler y Nichols
Escalón en valor deseado Perturbación positiva Perturbación negativa Método sintonización Decaimiento Mp ta2%
(s) Decaimiento Mp ta2% (s) Decaimiento Mp ta2%
(s) Ziegler Nichols PI 29.41% 5.60% 97.5 18.75% 10.30% 24 10.53% 7.60% 36
Ziegler Nichols PID n/a20 n/a 19.5 13.00% 6.28% 17.4 10.00% 5.70% 24
En términos generales, los lazos de control se comportaron de la manera esperada
por cuanto trataron de hacer tender el valor de la variable controlada al especificado en la
referencia después de producida la perturbación con un decaimiento menor al 25%, pero se
ve que no tienen un comportamiento óptimo a la hora de funcionar como servomecanismos,
20 No se da un sobrepaso máximo y por lo tanto tampoco hay valor de decaimiento válido.
163
lo cual es evidente por ejemplo en el caso del controlador PI al haber un valor alto de
decaimiento y de tiempo de asentamiento.
Por otro lado, se observa que con la incorporación de la variable derivativa se
mejora tanto el decaimiento como los valores de sobrepaso máximo y de tiempo de
asentamiento. En cuanto al error permanente, se observa que en ambos casos el error
resulta muy cercano a cero.
E.8 Experimento 8: Sintonización mediante criterios integrales
Otros métodos de sintonización de controladores determinan los parámetros de
control de manera tal que la respuesta del lazo de control sea optimizada para alguna
función dependiente del error. Los parámetros del controlador se seleccionan de manera tal
que la función de costo establecida sea mínima. Algunos criterios usuales son la integral
del error absoluto (IAE) o la integral del tiempo por el error absoluto (ITAE) como función
de costo. Muchos de estos procedimientos de sintonización se basan en un modelo de
primer orden más tiempo muerto del proceso controlado, obtenido a partir una curva de
reacción. Existen métodos que optimizan el funcionamiento del controlador como
servomecanismos, como otros que son óptimos para reguladores.
El objetivo de este laboratorio fue comparar el desempeño de los lazos de control
del proceso térmico utilizando varios de estos métodos de sintonización, tanto para
funcionamiento como servomecanismo como para reguladores.
E.8.1 Procedimiento
164
1- Utilizando el modelo de primer orden más tiempo muerto identificado para el
proceso térmico con la velocidad mínima del abanico, a partir de la curva de
reacción, se calcularon los parámetros para un controlador PID-Ideal empleando
el método de López (criterio ITAE), el de Rovira (criterio ITAE) y el Alfaro
(criterio IAE para servomecanismo y regulador)[4]
Tabla E.14 Cálculo de parámetros de control mediante criterios integrales
Método / Parámetro Kc Bp (%) Ti (seg) Td (seg) Lopez ITAE 3.29 30.42 15.20 3.19 Rovira ITAE 1.99 50.19 56.31 2.88 Alfaro IAE Servo 2.06 48.61 46.28 3.13 Alfaro IAE Regulador 3.25 30.75 14.94 4.23
2- Se conectó el controlador en operación manual con salida de 0%, el equipo de
adquisición y la planta tal y como se describe en la Figura 3.2, además se
conectó la salida del generador de funciones a la entrada de control del abanico.
3- Se ajustó el generador de funciones para trabajar con onda cuadrada, frecuencia
cero, desviación cero y amplitud cero.
4- Se sintonizó el controlador como PI con los parámetros calculados por el
método de Rovira (ITAE):
a. Banda proporcional 50.2%
b. Tiempo integral 56 s
c. Tiempo derivativo 3 s
165
d. Componente integral 0%
5- Se pasó el controlador a operación automática y después de unos 10 segundos,
se cambió la el valor deseado a 50%.
6- Se esperó a que se estabilizara la respuesta y después de alrededor de 10
segundos se aumentó la amplitud del generador de funciones a 100%.
7- Se esperó unos 10 segundos después de estabilizarse el sistema y se disminuyó
nuevamente la amplitud del generador de funciones a 0%.
8- Una vez que el sistema se estabilizó finalmente, se guardaron los datos en un
archivo para el análisis. Se vuelve a poner el controlador en modo manual con
salida de 0%.
9- Se sintonizó el controlador como PI con los parámetros calculados por el
método de López (ITAE):
a. Banda proporcional 30.4%
b. Tiempo integral 15 s
c. Tiempo derivativo 3 s
d. Componente integral 0%
10- Se repitieron los pasos 5 a 8 con estos nuevos valores de sintonización
11- Se sintonizó el controlador como PI con los parámetros calculados por el
método de Alfaro para servomecanismos (IAE):
166
a. Banda proporcional 48.6%
b. Tiempo integral 46 s
c. Tiempo derivativo 3 s
d. Componente integral 0%
12- Se repitieron los pasos 5 a 8 con estos nuevos valores de sintonización
13- Se sintonizó el controlador como PI con los parámetros calculados por el
método de Alfaro para regulador (IAE):
a. Banda proporcional 30.7%
b. Tiempo integral 15 s
c. Tiempo derivativo 4 s
d. Componente integral 0%
14- Se repitieron los pasos 5 a 8 para estos nuevos valores de sintonización
E.8.2 Resultados
167
Rovira - ITAE
0.00
10.00
20.00
30.00
40.00
50.00
60.00
0.0 75.0 150.0 225.0 300.0 375.0 450.0
y(t)
r(t)Gen. de func.
Figura E.17 Respuesta de proceso para método de sintonización Rovira - ITAE
Lopez - ITAE
0.00
10.00
20.00
30.00
40.00
50.00
60.00
0.0 75.0 150.0 225.0 300.0 375.0
y(t)
r(t)Gen. de func.
Figura E.18 Respuesta de proceso para método de sintonización López - ITAE
168
Alfaro - Servo IAE
0.00
10.00
20.00
30.00
40.00
50.00
60.00
0.0 100.0 200.0 300.0 400.0
y(t)
r(t)Gen. de func.
Figura E.19 Respuesta de proceso - método de sintonización Alfaro IAE Servo
Alfaro - Regulador IAE
0.00
10.00
20.00
30.00
40.00
50.00
60.00
0.0 75.0 150.0 225.0 300.0
y(t)
r(t)Gen. de func.
Figura E.20 Respuesta de proceso - método de sintonización Alfaro IAE Regulador
El análisis del desempeño de los lazos de controla para cada uno de los métodos
utilizados se resume en la siguiente tabla:
169
Tabla E.15 Resultados de la sintonización mediante criterios integrales
Escalón en valor deseado Perturbación positiva Perturbación negativa Método sintonización ep (%) Mp (%) ta2% (s) ep (%) Mp (%) ta2% (s) ep (%) Mp (%) ta2% (s)
Rovira ITAE 0.85 n/a 33.3 1.7 13.1 150 0.77 9.39 121
López ITAE 0 3.1 66.8 0.58 10.9 58.3 0 7.1 88.2
Alfaro Servo IAE 0.7 n/a 34.5 0.6 13.46 133 0.8 9.1 107
Alfaro Regulador IAE 0.44 3.37 83.6 0.43 9.51 35 0.45 7.2 71.8
Se observa que los sistemas cuyos controladores fueron optimizados para funcionar
como servomecanismos (Rovira, Alfaro IAE Servo) presentan un mejor funcionamiento en
presencia de un cambio escalón en el valor deseado que aquellos sintonizados como
reguladores. Esto se refleja en que no ocurren sobrepasos (la variable controlada no oscila
antes de llegar al valor final), y que los sistemas alcanzan el valor deseado en menos de la
mitad del tiempo. Sin embargo, presentaron un error permanente mayor que los
reguladores, por el hecho de tener un tiempo integral mucho mayor que estos. Ahora, entre
los métodos de Rovira y de Alfaro IAE servo, se observa que el rendimiento de ambos
resulta muy similar, aunque el método de Alfaro presenta un error permanente menor.
A la hora de introducir perturbaciones al proceso, los sistemas con controladores
optimizados como reguladores respondieron más rápido y tuvieron menor sobrepaso y error
permanente en todos los casos. Comparando los métodos de López y de Alfaro IAE
Regulador, en la primer perturbación el método de Alfaro superó al de López en todos los
parámetros medidos, mientras que en la segunda perturbación presentó solamente un error
permanente mayor y un sobrepaso máximo muy similar, pero aún su tiempo de
asentamiento fue bastante mejor.
170
APÉNDICE F: Código fuente del programa
use Tk; use Tk::Graph; use Tk::LabFrame; use Tk::ROText; use strict; use Win32::SerialPort; use Time::HiRes qw(usleep gettimeofday tv_interval); ############################################################################################ # Variables de uso general ############################################################################################ my $ob; my $sl; my $pollmillisec = 180; my $registro_flag = 0; my %graph_data_hash; my $ref_hash = \%graph_data_hash; $graph_data_hash{"r2 (t)"}=""; $graph_data_hash{"u2 (t)"}=""; $graph_data_hash{"y2 (t)"}=""; my $data_path = "c:/temp/graph"; my $filename = "Foxboro_data.csv"; my $remote_timer; my $time_reference; my $time_variable; my $graph_timer; my $graph_window_timer; my $graph_instruct; my $refreshed_flag = 0; my $quick_out = 0; my $num_char_write = 8; my $num_char_read = 8; my $slave_address = 1; my $slave_address_spin = 1; my @slave_address_graph = (); my @slave_address_array = (); my $Options_window; my $Connect_flag = 0; my $null_word = 0x8000; my @Func_return; my @Msg_read_array; my $Msg_read; my @Processed_data; my $done = 1; my $Bp_value; my $IP_value; my $Ti_min_value; my $Ti_sec_value; my $Ti_value; my $Td_min_value;
171
my $Td_sec_value; my $Td_value; my $Ref_value; my $Ref_value_2; my $Out_value; my $auto_man_status = 0; my $CRC_reg; my $poly_value; ############################################################################################ # Configuracion puerto serial ############################################################################################ my $cfgfile = "COM1_test.cfg"; if (-e $cfgfile) # revisa si el archivo de configuracion existe { $ob = Win32::SerialPort->start ($cfgfile) or die "No puede iniciar archivo de configuracion $cfgfile: $!\n"; } else{ # si no existe, crea un archivo nuevo $ob = new Win32::SerialPort ("COM1") or die "No se puede crear archivo de configuracion $cfgfile: $!"; # propiedades del puerto serial $ob -> databits(8); $ob -> baudrate(9600); $ob -> parity("none"); $ob -> stopbits(2); $ob -> buffers(100000,100000); $ob -> write_settings or undef $ob; print "No puede cambiar los parametros del puerto serial $cfgfile: $!" unless ($ob); $ob -> save($cfgfile) or warn "No puede guardar archivo de configuracion $cfgfile: $!"; $ob -> close or die "failed to close"; $ob = Win32::SerialPort->start ($cfgfile) or die "Archivo de configuracion $cfgfile no encontrado: $!\n"; } # otros parametros de control de I/0 my $poll = 0; my $polltime = 200; # milliseconds my $maxpoll = 150; # 30 seconds my $msg = ""; my $send = ""; my $senttext = ""; $ob->user_msg(1); $ob->error_msg(1); $ob->lookclear; # empty buffer ############################################################################################ # SWITCH MEGA WIDGET - Para utilizar el widget de tipo interruptor en el GUI ############################################################################################ $Tk::SlideSwitch::VERSION = '1.1'; package Tk::SlideSwitch; use Tk::widgets qw/Label Scale/; use base qw/Tk::Frame/; Construct Tk::Widget 'SlideSwitch'; sub Populate {
172
my($self, $args) = @_; $self->SUPER::Populate($args); my $ll = $self->Label->pack(-side => 'left'); $sl = $self->Scale->pack(-side => 'left'); my $rl = $self->Label->pack(-side => 'left'); $self->ConfigSpecs( -command => [$sl, qw/command Command /], -from => [$sl, qw/from From 0/], -highlightthickness => [$sl, qw/highlightThickness HighlightThickness 0/], -length => [$sl, qw/length Length 30/], -llabel => [qw/METHOD llabel Llabel /], -orient => [$sl, qw/orient Orient horizontal/], -rlabel => [qw/METHOD rlabel Rlabel /], -showvalue => [$sl, qw/showValue ShowValue 0/], -sliderlength => [$sl, qw/sliderLength SliderLength 15/], -sliderrelief => [$sl, qw/sliderRelief SliderRelief raised/], -to => [$sl, qw/to To 1/], -troughcolor => [$sl, qw/troughColor TroughColor /], -width => [$sl, qw/width Width 8/], -variable => [$sl, qw/variable Variable /], 'DEFAULT' => [$ll, $rl], ); $self->{ll} = $ll; $self->{sl} = $sl; $self->{rl} = $rl; $self->bind('<Configure>' => sub { my ($self) = @_; my $orient = $self->cget(-orient); return if $orient eq 'horizontal'; my ($ll, $sl, $rl) = ($self->{ll}, $self->{sl}, $self->{rl}); $ll->packForget; $sl->packForget; $rl->packForget; $ll->pack; $sl->pack; $rl->pack; }); } # end Populate # Private methods and subroutines. sub llabel { my ($self, $args) = @_; $self->{ll}->configure(@$args); } # end llabel sub rlabel { my ($self, $args) = @_; $self->{rl}->configure(@$args); } # end rlabel 1; package main;
173
############################################################################################ # INICIO DE LA INTERFAZ GRAFICA ############################################################################################ my $mw = MainWindow->new(-title => "Programa de Configuracion y Supervision - Foxboro 716C"); $mw -> resizable(0,0); $mw -> minsize(800,600); my $frame1 = $mw->Frame(-borderwidth => 2, -relief => 'groove' )->pack(-fill => 'both', -expand => 1 ); my $frame2 = $mw->Frame(-borderwidth => 2, -relief => 'groove' )->pack(-fill => 'both', -expand => 1 ); my $frame3 = $mw->Frame(-borderwidth => 2, -relief => 'groove' )->pack(-fill => 'both', -expand => 1 ); my $frame4 = $mw->Frame(-borderwidth => 2, -relief => 'groove' )->pack(-fill => 'both', -expand => 1 ); my $frame5 = $frame4->Frame(-borderwidth => 2, -relief => 'groove' )->pack(-side => 'left', -fill => 'both', -expand => 1 ); my $frame6 = $frame4->Frame(-borderwidth => 2, -relief => 'groove' )->pack(-side => 'left', -fill => 'both', -expand => 1 ); my $lbl_slave_address = $frame1 ->Label(-text => "Direccion Esclavo" )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $spin_address = $frame1 -> Spinbox(-from => 0, -to => 255, -width => 5, -textvariable => 1, -state => 'readonly', -readonlybackground => 'white', -command => sub{ &refresh_slave_address; } )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $btn_connect_frm1 = $frame1 -> Button(-text => "Conectar", -command => sub {
174
$Connect_flag = 1; &widget_activate; $slave_address = $slave_address_spin; push (@slave_address_array,$slave_address); if ($slave_address == 0){ print_on_text_box("\nPoniendo a todos los esclavos en modo remoto\n"); } else{ print_on_text_box("\nPoniendo en modo remoto a esclavo $slave_address\n"); } &button_connect; } )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $btn_disconnect_frm1 = $frame1 -> Button(-text => "Desconectar", -command => sub { $slave_address = $slave_address_spin; # Revisa que sea una direccion de un esclavo conectado my $found_address = grep $_ == $slave_address,@slave_address_array; if ($found_address == 0 and $slave_address != 0){ print_on_text_box("\nERROR: Ese esclavo no se encuentra conectado\n"); return; } # Saca el valor de la direccion del esclavo del arreglo de direcciones de esclavos @slave_address_array = grep $_ != $slave_address,@slave_address_array; # Anuncia cual esclavo esta desconectando. Si esta en modo broadcast, desconecta todos. if ($slave_address == 0){ @slave_address_array = (); print_on_text_box("\nPoniendo a todos los esclavos en modo local\n"); } else{ print_on_text_box("\nPoniendo en modo local a esclavo $slave_address\n"); } # Envio de la instruccion al esclavo correspondiente (o todos si es BROADCAST) &Func_5(10,0x00,0x00); &initialize_widgets; # Secuencia de "limpieza" cuando se desconecta el ultimo de los controladores if (@slave_address_array == ()){ print_on_text_box("\nTodos los esclavos estan desconectados\n"); $Connect_flag = 0; $graph_timer -> cancel if ($registro_flag == 1); $graph_window_timer -> cancel if ($registro_flag == 1); $registro_flag = 0; close(data_FH); } } )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $graph = $frame2->Graph(
175
-type => 'Line', -foreground => "black", -borderwidth => 2, -titlecolor => '#435d8d', -legend => 1, -yformat => '%d%%', -ylabel => "%", -xformat => "%d", -xlabel => "# Muestras", -padding => [20,20,20,40], # Padding [top, right, buttom, left] -printvalue => '%s', -linewidth => 1, -shadow => '#435d8d', -dots => 0, -look => 200, #escala x -wire => "#d2e8e4", -max => 100, # eje y -ytick => 10, -xtick => 5, -config => { ".y (t)" => { -color => "red" }, ".u (t)" => { -color => "yellow" }, ".r (t)" => { -color => "blue" }, "y2 (t)" => { -color => "brown" }, "r2 (t)" => { -color => "orange" }, "u2 (t)" => { -color => "white" }, }, )->pack( -expand => 1, -fill => 'both'); my $btn_registroON = $frame3 -> Button(-text => "Registro", -command => sub{if (!$registro_flag){ $registro_flag = 1; if (!-d "$data_path") { `mkdir "$data_path"`; } my $opened = open(data_FH, ">> $data_path\\$filename"); if (! $opened){ print_on_text_box ("\nERROR!!: El archivo $filename se encuentra abierto en otra aplicacion Debe cerrarlo antes de poder iniciar el registro!\n"); return; } print_on_text_box ("\nInicia registro en archivo\n"); $time_reference = [gettimeofday]; update_graph_data($frame3, $pollmillisec); &update_graph; } } )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $btn_pausa = $frame3 -> Button(-text => "Detener", -command => sub{$registro_flag = 0; print_on_text_box ("\nDetiene registro en archivo\n");
176
close(data_FH); } )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $btn_erase = $frame3 -> Button(-text => "Borrar", -command => sub{close data_FH; open(data_FH, "+> $data_path\\$filename") or die; $graph->clear(); $time_reference = [gettimeofday]; print_on_text_box ("\nArchivo de datos borrado\n");} )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $entry_archive_path = $frame3 ->Entry(-text => "$data_path/$filename" )->pack(-side => 'left', -fill => 'x', -expand => 1, -padx => 5 ); my $btn_filename = $frame3 -> Button(-text => "Archivo...", -command => sub{ # muestra cuadro de dialogo para cambiar nombre de archivo my $Filename_popup = $mw->Toplevel(-title => "Nombre de archivo"); my $Label_filename = $Filename_popup->Label(-text => "Elija un nombre para el archivo de registro de datos" )->pack(-side => 'top', -padx => 5, -pady => 5, -fill => 'x'); my $Filename_popup_frame = $Filename_popup->Frame( )->pack(-side => 'bottom', -fill => 'x', -expand => 1, -pady => 5); my $Entry_filename = $Filename_popup->Entry( )->pack(-side => 'left', -padx => 5, -pady => 5, -fill => 'x', -expand => 1); my $Label_extension = $Filename_popup->Label(-text => ".csv " )->pack(-side => 'left',-anchor => 'w'); my $Button_Filename_cancel = $Filename_popup_frame->Button(-text => "Cancel", -width => 10, -command => sub{ $Filename_popup->withdraw() } )->pack(-side => 'left',-anchor => 'center',-expand => 1); my $Button_Filename_ok = $Filename_popup_frame->Button(-text => "OK", -width => 10, -command => sub{ $filename = ($Entry_filename -> get).".csv"; if (defined $data_path and $data_path ne '') {
177
$entry_archive_path -> configure(-text => "$data_path/$filename"); }$Filename_popup->withdraw(); } )->pack(-side => 'right',-anchor => 'center',-expand => 1); my $filename_edit = $filename; $filename_edit =~ s/.csv//; $Entry_filename->insert('end',$filename_edit); } )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $btn_browse = $frame3 -> Button(-text => "Ruta...", -command => [\&dir,$entry_archive_path] )->pack(-side => 'left', -padx => 5, -pady => 5, -anchor => 'c' ); my $lbl_controlador_conf = $frame5 -> Label(-text => "Opciones del Controlador" )->grid(-column => 2, -row => 0, -columnspan =>2, -sticky => 'ew' ); my $btn_configure = $frame5 -> Button(-text => "Mas opciones...", -width => 10, -command => sub{ # ELEMENTOS DE INTERFAZ PARA LA VENTANA DE CONFIGURACION $Options_window = $mw->Toplevel(-title => "Opciones de controlador"); $Options_window ->grab; $Options_window -> resizable(0,0); my $opt_frame1 = $Options_window->Frame(-borderwidth => 2,-relief => 'groove')->pack(-fill => 'both',-expand => 1); my $opt_frame2 = $Options_window->Frame(-borderwidth => 2,-relief => 'groove')->pack(-fill => 'both',-expand => 1); my $opt_frame3 = $Options_window->Frame(-borderwidth => 2,-relief => 'groove')->pack(-fill => 'both',-expand => 1); my $dir_text = "\nDireccion: $slave_address_spin"; $dir_text = "\nModo broadcast" if ($slave_address_spin == 0); my $lbl_header = $opt_frame1 -> Label(-text => "Opciones adicionales del controlador\n$dir_text",-justify => 'left')->pack(-expand => 1,-fill=>'both'); my $lbl_IP = $opt_frame2 -> Label(-text => "IP (%)")->grid(-padx => 5,-pady => 5,-column => 0,-row => 0); my $spin_IP = $opt_frame2 -> Spinbox(-from => 0, -to => 100, -width => 5, -increment => 0.1, -invalidcommand => sub { -invalidcommand => [\&msg_box_numeric,""], },
-validate => 'all',
178
-validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^(\d{1,3}\.\d{1,1})]/g; }, -textvariable => 0 )->grid(-padx => 5,-pady => 5,-column => 1,-row => 0); my $opt_IP_set_button = $opt_frame2 -> Button(-text =>"Enviar", -state =>'disabled', -width =>8, -command => sub{ $IP_value = $spin_IP ->get; &config_value_send(516,$IP_value,0,100,'word'); } )->grid(-padx => 5,-pady => 5,-column => 3,-row => 0,-sticky => "ew"); my $opt_IP_get_button = $opt_frame2 -> Button(-text =>"Leer", -width =>8, -command => sub{ &config_value_get(516,$spin_IP,$opt_IP_set_button,'word'); }, )->grid(-padx => 5,-pady => 5,-column => 2,-row => 0,-sticky => "ew"); my $lbl_Ref_2 = $opt_frame2 -> Label(-text => "r2 (t) (%)")->grid(-padx => 5,-pady => 5,-column => 0,-row => 1); my $spin_Ref_2 = $opt_frame2 -> Spinbox(-from => 0, -to => 100, -width => 5, -increment => 0.1, -invalidcommand => [\&msg_box_numeric,""], -validate => 'all', -validatecommand => sub {
my ($proposed) = @_; return not $proposed =~ m/[^(\d{1,3}\.\d{1,1})]/g; },
-textvariable => 0 )->grid(-padx => 5,-pady => 5,-column => 1,-row => 1); my $opt_Ref_2_set_button = $opt_frame2 -> Button(-text =>"Enviar", -width =>8, -state => 'disabled',
-command => sub{ $Ref_value_2 = $spin_Ref_2 ->get; &config_value_send(139,$Ref_value_2,0,100,'word'); } )->grid(-padx => 5,-pady => 5,-column => 3,-row => 1,-sticky => "ew"); my $opt_Ref_2_get_button = $opt_frame2 -> Button(-text =>"Leer", -width =>8, -command => sub{ &config_value_get(139,$spin_Ref_2,$opt_Ref_2_set_button,'word'); }, )->grid(-padx => 5,-pady => 5,-column => 2,-row => 1,-sticky => "ew"); my $lbl_filter = $opt_frame3->LabFrame(-label => 'Filtro en valor desplegado')->pack(); # Botones de seleccion para valor de filtro
179
my $opt_filter_value; foreach (qw(OFF ON)) { $lbl_filter->Radiobutton(-text => $_, -value => $_, -variable => \$opt_filter_value, )->pack(-side => 'left',-padx => 5,-pady => 5); } my $opt_filter_set_button = $lbl_filter -> Button(-text =>"Enviar", -width =>8, -state => 'disabled', -command => sub{ my $choice_val; if ($opt_filter_value == 'OFF'){
$choice_val = 0; } elsif ($opt_filter_value == 'ON'){
$choice_val = 1; } &config_value_send(214,$choice_val,"","",'bit'); } )->pack(-side => 'right',-padx => 5,-pady => 5); my $opt_filter_get_button = $lbl_filter -> Button(-text =>"Leer", -width =>8, -command => sub{ my $choice_val = config_value_get(214,$lbl_filter,$lbl_filter,'bit'); if ($choice_val == 0){
$opt_filter_value = 'OFF' } elsif ($choice_val == 1){
$opt_filter_value = 'ON' } }, )->pack(-side => 'right'); my $lbl_PID = $opt_frame3->LabFrame(-label => 'Tipo de Accion de Control')->pack(); # Botones de seleccion para valor de PID my $opt_pid_value; foreach (qw(PID PI)) {
$lbl_PID->Radiobutton(-text => $_, -value => $_, -variable => \$opt_pid_value, )->pack(-side => 'left',-padx => 5,-pady => 5); } my $opt_pid_set_button = $lbl_PID -> Button(-text =>"Enviar", -width =>8, -state => 'disabled', -command => sub{ my $choice_val; if ($opt_pid_value == 'PID'){
$choice_val = 0; } elsif ($opt_pid_value == 'PI'){
$choice_val = 1;
180
} &config_value_send(338,$choice_val,"","",'bit'); } )->pack(-side => 'right',-padx => 5,-pady => 5); my $opt_pid_get_button = $lbl_PID -> Button(-text =>"Leer", -width =>8, -command => sub{ my $choice_val = config_value_get(338,$lbl_PID,$lbl_PID,'bit'); if ($choice_val == 0){
$opt_pid_value = 'PID' } elsif ($choice_val == 1){
$opt_pid_value = 'PI' } }, )->pack(-side => 'right'); # Activacion o desactivacion de widgets en ventana de opciones if ($slave_address_spin == 0){ &enable_disable_widget(0,$opt_IP_get_button,$opt_Ref_2_get_button,$opt_filter_get_button); &enable_disable_widget(1,$opt_IP_set_button,$opt_Ref_2_set_button,$opt_filter_set_button); } } )->grid(-padx => 5, -pady => 5, -column => 0, -row => 5, -columnspan =>2, -sticky => "ew" ); my $lbl_Pb = $frame5 -> Label(-text => "Bp (%)" )->grid(-column => 0, -row => 2 ); my $spin_Pb = $frame5 -> Spinbox(-from => 1, -to => 200, -width => 10, -increment => 0.1, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros\n"], -validate => 'all', -validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^(\d{1,3}\.\d{1,1})]/g; }, )->grid(-padx => 5, -pady => 5, -column => 1, -row => 2, -columnspan =>2 ); my $lbl_Ti = $frame5 -> Label(-text => "Ti (mm_ss)" )->grid(-column => 0,
181
-row => 3); my $spin_Ti_min = $frame5 -> Spinbox(-from => 0, -to => 20, -width => 3, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros enteros\n"], -validate => 'all', -validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^\d]/g; }, -textvariable => 0 )->grid(-padx => 0, -pady => 5, -column => 1, -row => 3 ); my $spin_Ti_sec = $frame5 -> Spinbox(-from => 1, -to => 59, -width => 3, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros enteros\n"], -validate => 'all', -validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^\d]/g; }, -textvariable => 0 )->grid(-padx => 0, -pady => 5, -column => 2, -row => 3 ); my $lbl_Td = $frame5 -> Label(-text => "Td (mm_ss)" )->grid(-column => 0, -row => 4 ); my $spin_Td_min = $frame5 -> Spinbox(-from => 0, -to => 10, -width => 3, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros enteros\n"], -validate => 'all', -validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^\d]/g; }, -textvariable => 0 )->grid(-padx => 0, -pady => 5, -column => 1, -row => 4 ); my $spin_Td_sec = $frame5 -> Spinbox(-from => 0, -to => 59, -width => 3, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros enteros\n"], -validate => 'all', -validatecommand => sub {
182
my ($proposed) = @_; return not $proposed =~ m/[^\d]/g; }, -textvariable => 0 )->grid(-padx => 0, -pady => 5, -column => 2, -row => 4 ); my $lbl_Ref = $frame5 -> Label(-text => "r (t) (%)" )->grid(-column => 3, -row => 2, -padx => 2 ); my $spin_Ref = $frame5 -> Spinbox(-from => 0, -to => 100, -increment => 0.1, -width => 5, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros\n"], -validate => 'all', -validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^(\d\.\d{1})]/g; }, -textvariable => 0 )->grid(-padx => 5, -pady => 5, -column => 4, -row => 2 ); my $lbl_Out = $frame5 -> Label(-text => "u (t) (%)" )->grid(-column => 3, -row => 3, -padx => 5 ); my $spin_Out = $frame5 -> Spinbox(-from => 0, -to => 100, -width => 5, -invalidcommand => [\&print_on_text_box,"\nError: solo puede introducir numeros enteros\n"], -validate => 'all', -validatecommand => sub { my ($proposed) = @_; return not $proposed =~ m/[^\d]/g; }, -command => sub { $quick_out = 1; #para que no escriba todos los valores, sino solo la salida del controlador sub_spin_out(); $quick_out = 0; } )->grid(-padx => 5, -pady => 5, -column => 4, -row => 3 ); my $btn_refresh = $frame5 -> Button(-text => "Enviar", -command=> sub { $slave_address = $slave_address_spin;
183
# convertir valores obtenidos de la GUI en bytes de 8 bits # Valores: Valor deseado,Banda proporcional, tiempo integral, tiempo derivativo my $validate_OK = &validate_PID_params; if ($validate_OK == 1){ my @PID_params_array = ($Ref_value*10,$null_word,$null_word,$null_word,$Bp_value*10,$null_word,$Ti_value,$Td_value); my @PID_params_data = (); foreach (@PID_params_array){ my $PID_param_HI = (&high_low_byte($_))[1]; my $PID_param_LO = (&high_low_byte($_))[0]; push (@PID_params_data,$PID_param_HI,$PID_param_LO); } # Enviar valores para formatear segun funcion correspondiente &Func_16(1,8,@PID_params_data); } if ($auto_man_status == 1) { #Si esta en manual, actualizar tambien valor de salida &sub_spin_out(); } } )->grid(-padx => 5, -pady => 5, -column => 3, -row => 5, -columnspan =>2, -sticky => "ew" ); my $sl_auto_man = $frame5->SlideSwitch( -variable => $auto_man_status, -orient => 'horizontal', -command => sub { $slave_address = $slave_address_spin; if ($auto_man_status){ if ($Connect_flag){ &print_on_text_box("\nControlador en modo:AUTO\n"); &Func_5(1,0x00,0x00); foreach ($spin_Pb,$spin_Td_min,$spin_Ti_min,$spin_Td_sec,$spin_Ti_sec,$spin_Ref){ $_->configure(-state => 'normal') if ($refreshed_flag); } $spin_Out -> configure(-state => 'disabled') if ($refreshed_flag); } } else{ if ($Connect_flag){ &print_on_text_box("\nControlador en modo:MANUAL\n"); &Func_5(1,0xFF,0x00); $spin_Out -> configure(-state => 'normal') if ($refreshed_flag); } }
184
$auto_man_status = not($auto_man_status); }, -llabel => [-text => 'MANUAL', -foreground => 'blue'], -rlabel => [-text => 'AUTO', -foreground => 'blue'], -troughcolor => 'gray', -width => 20 )->grid(-column => 2,-row => 1,-columnspan =>2,-ipady => 8); my $btn_update = $frame5 -> Button(-text => "Refrescar", -width => 10, -command => sub{ $slave_address = $slave_address_spin; &button_refresh; } )->grid(-padx => 5, -pady => 3, -column => 2, -row => 5, -sticky => "ew"); my $text_box = $frame6-> Scrolled("ROText", -height => 10, -background => 'white', -scrollbars => "e" )->pack(-fill => 'both', -expand => 1 ); $text_box-> insert('end',"<< Bienvenido al Programa de Configuracion y Supervision del Foxboro 716C >>\n"); # arreglos de widgets que se pueden habilitar o deshabilitar my @control_widgets_en_des = ($spin_Pb,$spin_Ti_min,$spin_Ti_sec,$spin_Td_min,$spin_Out,$spin_Td_sec,$spin_Ref,$btn_refresh,$sl_auto_man); my @disconnected_widgets = ($btn_disconnect_frm1,$btn_registroON,$btn_pausa,$btn_erase,$btn_configure,$btn_update); &initialize_widgets; MainLoop(); ############################################################################################ # SUBFUNCIONES UTILIZADAS EN LA GUI ############################################################################################ # ------------------------------------------------------------------------------------------ # Subrutina que inicializa las widgets en modo deshabilitado hasta que se refresquen los valores # Entrada: n/a # Salida: bandera de deshabilitacion y arreglo de widgets sub initialize_widgets{ &enable_disable_widget(0,(@control_widgets_en_des,@disconnected_widgets)); &enable_disable_widget(1,($btn_connect_frm1)); } # ------------------------------------------------------------------------------------------ # Subrutina que activa los widgets despues de que se haya conectado el controlador
185
# Entrada: n/a # Salida: n/a sub widget_activate{ &enable_disable_widget(1,@disconnected_widgets); &enable_disable_widget(0,($btn_connect_frm1)); } # ------------------------------------------------------------------------------------------ # Subrutina que envia la funcion para conectarse al controlador # y repite la funcion cada 3 segundos, para evitar que regrese al modo local # Entrada: n/a # Salida: n/a sub button_connect{ if ($Connect_flag == 1){ $remote_timer = $btn_connect_frm1->after(3000, [\&button_connect]); } foreach (@slave_address_array){ $slave_address = $_; &Func_5(10,0xFF,0x00); # PRUEBA if (scalar @slave_address_array > 1){ # espera 10 milisegundos para que se estabilice el puerto my $timeout; $timeout = Win32::GetTickCount() + (10); while (Win32::GetTickCount() < $timeout){ } } } } # ------------------------------------------------------------------------------------------ # Subrutina que refresca valores de configuracion de controladores # y actualiza valores en la GUI # Entrada: n/a # Salida: bandera de habilitacion y arreglo de widgets sub button_refresh{ $refreshed_flag = 1; # Verificar si se encuentra en automatico o manual &Func_1(1,1); @Processed_data = Process_Func_1(@Func_return); # Dependiendo del valor leido coloca el switch en la posicion correspondiente if ($Processed_data[0] == 1){ $sl->set(0); } else { $sl->set(1); } # Enviar comando para leer palabras de memoria &Func_3(1,8); @Processed_data = Process_Func_3(@Func_return); # Procesamiento de datos obtenidos $Bp_value = sprintf("%3.1f",$Processed_data[4]/10); $Ti_value = $Processed_data[6]; $Ti_min_value = ($Ti_value-$Ti_value%60)/60; $Ti_sec_value = $Ti_value - $Ti_min_value*60; $Td_value = $Processed_data[7]; $Td_min_value = ($Td_value-$Td_value%60)/60; $Td_sec_value = $Td_value - $Td_min_value*60;
186
$Out_value = $Processed_data[1]/10; $Ref_value = sprintf("%3.1f",$Processed_data[0]/10); # Refrescar los datos del GUI $spin_Pb ->set($Bp_value); $spin_Ti_min ->set($Ti_min_value); $spin_Ti_sec ->set($Ti_sec_value); $spin_Td_min ->set($Td_min_value); $spin_Td_sec ->set($Td_sec_value); $spin_Out ->set($Out_value); $spin_Ref ->set($Ref_value); &print_on_text_box("\nValores de control leidos.\n\n\t u(t): \t$Out_value %\n\t Bp: \t$Bp_value %\n\t Ti: \t$Ti_min_value:$Ti_sec_value (mm:ss)\n\t Td: \t$Td_min_value:$Td_sec_value (mm:ss)\n\t r(t): \t$Ref_value %\n"); # Habilitar los botones de configuracion de valores de control &enable_disable_widget(1,@control_widgets_en_des); if ($auto_man_status == 0){ &enable_disable_widget(0,($spin_Out)); } } # ------------------------------------------------------------------------------------------ # Subrutina que habilita o deshabilita ciertos widgets de la interfaz # Entrada: valor de 1 o 0 (habilitar o deshabilitar), arreglo de widgets # Salida: n/a sub enable_disable_widget{ my $en_dis_command = shift; my @en_dis_array = @_; foreach (@en_dis_array){ if ($en_dis_command){ $_ -> configure(-state => 'normal'); } else { $_ -> configure(-state => 'disabled'); } } } # ------------------------------------------------------------------------------ # Subrutina para cambiar la ruta en la cual se guardara el archivo de resultados # Entrada: nombre de la ventana principal # Salida: cambia el texto en la etiqueta y la variable $data_path que contiene la ruta del archivo sub dir { my $w = shift; $data_path = $w->chooseDirectory; if (defined $data_path and $data_path ne '') { $entry_archive_path -> configure(-text => "$data_path/$filename"); } } # ------------------------------------------------------------------------------ # Subrutina que despliega ventana de mensaje de error cuando valor ingresando no es un numero # Entrada: n/a # Salida: n/a sub msg_box_numeric{ $Options_window->messageBox(-title => 'Error', -message => 'Error: Solo puede introducir numeros', -type => 'OK', -icon => 'error'); }
187
# ------------------------------------------------------------------------------ # Subrutina que despliega ventana de mensaje de error cuando valor esta fuera del rango # Entrada: Valor minimo, valor maximo # Salida: n/a sub msg_box_range{ my $minimum = shift @_; my $maximum = shift @_; $Options_window->messageBox(-title => 'Error', -message => "Error: El valor esta fuera del rango [$minimum,$maximum]", -type => 'OK', -icon => 'error'); } # ------------------------------------------------------------------------------ # Subrutina para actualizar la direccion del esclavo cada vez que se cambia este campo # Entrada: n/a # Salida: n/a sub refresh_slave_address{ $slave_address_spin = $spin_address -> get; &enable_disable_widget(0,@control_widgets_en_des); if (($slave_address_spin) == 0){ &enable_disable_widget(0,($btn_update)); &enable_disable_widget(1,@control_widgets_en_des) if ($Connect_flag == 1); print_on_text_box("\nATENCION: Direccionamiento en modo BROADCAST\n"); return; } my $found_address = grep $_ == ($slave_address_spin),@slave_address_array; if ($found_address == 0){ &enable_disable_widget(0,@disconnected_widgets); &enable_disable_widget(1,($btn_connect_frm1)); } else{ &enable_disable_widget(0,($btn_connect_frm1)); &enable_disable_widget(1,(@disconnected_widgets)); } } # ------------------------------------------------------------------------------ # Subrutina para actualizar la informacion del grafico (y en el archivo) # Entrada: n/a # Salida: impresion en el archivo de datos sub update_graph_data{ my $wid = shift or return undef; my $ms = shift or return undef; $time_variable = tv_interval ($time_reference, [gettimeofday]); print data_FH "$time_variable,"; @slave_address_graph = @slave_address_array; #Toma valores del PRIMER ESCLAVO ============ $slave_address = shift @slave_address_graph; $graph_instruct = 1; &Func_3(0,3); @Processed_data = Process_Func_3(@Func_return); # Valor de referencia:
188
my $graph_data_1 = $Processed_data[1]/10; # Salida del controlador PID my $graph_data_2 = $Processed_data[2]/10; # Para el caso de la variable realimentada: # En caso de que el valor leido este por encima o por debajo del rango # se sutituye por un valor maximo (105) o minimo (-5), respectivamente my $graph_data_3; if (($Processed_data[0]) == 30005){ $graph_data_3 = 100; print data_FH "$graph_data_1,$graph_data_2,Sobre rango,"; } elsif (($Processed_data[0]) == 30004 or ($Processed_data[0]) > 65500){ $graph_data_3 = 0; print data_FH "$graph_data_1,$graph_data_2,Bajo rango,"; } else{ $graph_data_3 = $Processed_data[0]/10; print data_FH "$graph_data_1,$graph_data_2,$graph_data_3,"; } $graph_data_hash{".r (t)"}=$graph_data_1; $graph_data_hash{".u (t)"}=$graph_data_2; $graph_data_hash{".y (t)"}=$graph_data_3; if (@slave_address_graph != ()){ #Toma valores del SEGUNDO ESCLAVO ============ $slave_address = shift @slave_address_graph; $graph_instruct = 1; &Func_3(0,3); @Processed_data = Process_Func_3(@Func_return); # Valor de referencia: my $graph_data_4 = $Processed_data[1]/10; # Salida del controlador PID my $graph_data_5 = $Processed_data[2]/10; # Para el caso de la variable realimentada: # En caso de que el valor leido este por encima o por debajo del rango # se sutituye por un valor maximo (105) o minimo (-5), respectivamente my $graph_data_6; if (($Processed_data[0]) == 30005){ $graph_data_6 = 100; print data_FH "$graph_data_4,$graph_data_5,Sobre rango\n"; } elsif (($Processed_data[0]) == 30004 or ($Processed_data[0]) > 65500){ $graph_data_6 = 0; print data_FH "$graph_data_4,$graph_data_5,Bajo rango\n"; } else{ $graph_data_6 = $Processed_data[0]/10; print data_FH "$graph_data_4,$graph_data_5,$graph_data_6\n"; } $graph_data_hash{"r2 (t)"}=$graph_data_4; $graph_data_hash{"u2 (t)"}=$graph_data_5; $graph_data_hash{"y2 (t)"}=$graph_data_6;
189
$spin_Out ->set($graph_data_5) if ($auto_man_status == 0 and $slave_address_spin == 2); } else{ print data_FH "\n"; if (exists($graph_data_hash{"r2 (t)"})){ $graph_data_hash{"r2 (t)"}=""; $graph_data_hash{"u2 (t)"}=""; $graph_data_hash{"y2 (t)"}=""; } } $spin_Out ->set($graph_data_2) if ($auto_man_status == 0 and $slave_address_spin == 1); if ($registro_flag ==1){ #si no se ha detenido el registro $graph_timer = $wid->after($ms, [\&update_graph_data => $wid, $ms ]); } } # ------------------------------------------------------------------------------ # Subrutina para actualizar la informacion del grafico en si # Entrada: n/a # Salida: impresion en pantalla sub update_graph{ if ($registro_flag ==1){ $graph->set($ref_hash); $graph_window_timer = $graph->after(500, [\&update_graph]); } } # ------------------------------------------------------------------------------ # Subrutina para imprimir un texto en ventana de mensajes del GUI # (imprime mensaje y hace scrolling hacia abajo # Entrada: string de mensaje # Salida: impresion en la ventana de texto sub print_on_text_box{ my $message_text_box = shift (@_); $text_box ->insert('end',$message_text_box); $text_box->yviewMoveto(1); #hace scroll hasta el final para mostrar el ultimo mensaje } close data_FH; # ------------------------------------------------------------------------------------------ # Subrutina utilizada en modo manual para validar el parametro de salida de controlador y enviarlo # al esclavo cada vez que se incrementa o disminuye el valor de este en la GUI. # Entrada: Valores leidos del GUI # Salida: premensaje formateado para escribir sub sub_spin_out{ my $validate_OK = &validate_PID_params; if ($validate_OK == 1){ # convertir valores obtenidos de la GUI en bytes de 8 bits # Valores: Salida del controlador my @PID_params_array = ($Out_value*10); my @PID_params_data = (); foreach (@PID_params_array){
190
my $PID_param_HI = (&high_low_byte($_))[1]; my $PID_param_LO = (&high_low_byte($_))[0]; push (@PID_params_data,$PID_param_HI,$PID_param_LO); } # Enviar valores para formatear segun funcion correspondiente $slave_address = $slave_address_spin; &Func_6(130,@PID_params_data); } } # ------------------------------------------------------------------------------------------ # Subrutina para validar los parametros del controlador cada vez que activa boton de actualizar # Entrada: n/a # Salida: n/a sub validate_PID_params{ # obtener todos los valores a ser escritos $Bp_value = ($spin_Pb -> get); #$IP_value = ($spin_IP -> get); $Ti_min_value = $spin_Ti_min -> get; $Ti_sec_value = $spin_Ti_sec -> get; $Ti_value = $Ti_min_value*60+$Ti_sec_value; $Td_min_value = $spin_Td_min -> get; $Td_sec_value = $spin_Td_sec -> get; $Td_value = $Td_min_value*60+$Td_sec_value; $Ref_value = ($spin_Ref -> get); # revisar todos los valores en general # en caso que se sobrepase valor maximo, se imprime error # y se pone el valor maximo en el campo correspondiente if ($Bp_value < 1 or $Bp_value > 200 or $Ti_min_value > 20 or $Ti_sec_value > 59 or ($Ti_sec_value < 1 and $Ti_min_value == 0) or ($Ti_sec_value > 0 and $Ti_min_value == 20) or ($Td_sec_value > 0 and $Td_min_value == 10) or $Td_min_value > 10 or $Td_sec_value > 59 or $Ref_value > 100 or $Ref_value_2 > 100 or $Out_value > 100){ # revisar valor de banda proporcional if ($Bp_value > 200) { &print_on_text_box("\nERROR: Valor de Bp no valido\n"); $spin_Pb -> set(200); $Bp_value = $spin_Pb -> get; } elsif ($Bp_value < 1) { &print_on_text_box("\nERROR: Valor de Bp no valido\n"); $spin_Pb -> set(1); $Bp_value = $spin_Pb -> get; } # revisar valor de Tiempo integral if ($Ti_min_value > 20) { &print_on_text_box("\nERROR: Valor de Ti no valido\n"); $spin_Ti_min -> set(20); $Ti_min_value = $spin_Ti_min -> get; } if ($Ti_sec_value > 59) { &print_on_text_box("\nERROR: Valor de Ti no valido\n"); $spin_Ti_sec -> set(59); $Ti_sec_value = $spin_Ti_sec -> get; } if ($Ti_sec_value < 1 and $Ti_min_value == 0) { &print_on_text_box("\nERROR: Valor de Ti no valido\n"); $spin_Ti_sec -> set(1); $Ti_sec_value = $spin_Ti_sec -> get; } if ($Ti_sec_value > 0 and $Ti_min_value == 20) { &print_on_text_box("\nERROR: Valor de Ti no valido\n");
191
$spin_Ti_min -> set(20); $Ti_min_value = $spin_Ti_min -> get; $spin_Ti_sec -> set(0); $Ti_sec_value = $spin_Ti_sec -> get } # revisar valor de Tiempo derivativo if ($Td_min_value > 10) { &print_on_text_box("\nERROR: Valor de Td no valido\n"); $spin_Td_min -> set(10); $Td_min_value = $spin_Td_min -> get; } if ($Td_sec_value > 59) { &print_on_text_box("\nERROR: Valor de Td no valido\n"); $spin_Td_sec -> set(59); $Td_sec_value = $spin_Td_sec -> get; } if ($Td_sec_value > 0 and $Td_min_value == 10) { &print_on_text_box("\nERROR: Valor de Td no valido\n"); $spin_Td_min -> set(10); $Td_min_value = $spin_Td_min -> get; $spin_Td_sec -> set(0); $Td_sec_value = $spin_Td_sec -> get } # revisar valor de referencia (SP) if ($Ref_value > 100) { &print_on_text_box("\nERROR: Valor de r(t) no valido\n"); $spin_Ref -> set(100); $Ref_value = $spin_Ref -> get; } return 0; } else{ if ($auto_man_status){ #en Manual unicamente $Out_value = ($spin_Out -> get); # revisar valor de salida if ($Out_value > 100) { &print_on_text_box("\nERROR: Valor de u(t) no valido\n"); $spin_Out -> set(100); $Out_value = $spin_Out -> get; return 0; } else{ &print_on_text_box("\n\nActualizando valores de control.\n"); &print_on_text_box("\n\t Bp: \t$Bp_value %\n\t Ti: \t$Ti_min_value:$Ti_sec_value (mm:ss)\n\t Td: \t$Td_min_value:$Td_sec_value (mm:ss)\n\t r(t): \t$Ref_value %\n\t u(t): \t$Out_value %\n") if (!$quick_out); &print_on_text_box("\n\t u(t): \t$Out_value %\n") if ($quick_out); } } else{ # en AUTO &print_on_text_box("\n\nActualizando valores de control.\n"); &print_on_text_box("\n\t Bp: \t$Bp_value %\n\t Ti: \t$Ti_min_value:$Ti_sec_value (mm:ss)\n\t Td: \t$Td_min_value:$Td_sec_value (mm:ss)\n\t r(t): \t$Ref_value %\n\t"); } return 1; } #} } # ------------------------------------------------------------------------------------------ # Subrutina que obtiene los parametros de configuracion adicional cuando se presiona el boton de lectura
192
# Entrada: direccion de parametro,parametro de configuracion,identificacion de widget,identificacion de boton de envio,tipo de dato # Salida: valor de configuracion leido sub config_value_get{ my $config_value_address = shift @_; my $widget_ID = shift @_; my $send_button_ID = shift @_; my $data_type = shift @_; my $config_value; if ($data_type eq 'word'){ $slave_address = $slave_address_spin; &Func_3($config_value_address,1); @Processed_data = Process_Func_3(@Func_return); $config_value = (shift @Processed_data)/10; $widget_ID -> set($config_value); $send_button_ID -> configure(-state => 'normal'); } elsif ($data_type eq 'bit') { $slave_address = $slave_address_spin; &Func_1($config_value_address,1); @Processed_data = Process_Func_1(@Func_return); $config_value = (shift @Processed_data); return $config_value; } } # ------------------------------------------------------------------------------------------ # Subrutina para formatear y validar los parametros de configuracion adicional cada vez que presiona el boton de envio # Entrada: direccion de parametro,parametro de configuracion,limite inferior,limite superior,tipo de dato # Salida: envio de comando por puerto serial (Func 6) sub config_value_send{ my $config_value_address = shift @_; my $config_value = shift @_; my $low_limit = shift @_; my $high_limit = shift @_; my $data_type = shift @_; if ($data_type eq 'word'){ if (($config_value < $low_limit) or ($config_value > $high_limit)){ &msg_box_range($low_limit,$high_limit); return; } my @PID_params_array = ($config_value*10); my @PID_params_data = (); foreach (@PID_params_array){ my $PID_param_HI = (&high_low_byte($_))[1]; my $PID_param_LO = (&high_low_byte($_))[0]; push (@PID_params_data,$PID_param_HI,$PID_param_LO); } $slave_address = $slave_address_spin; &Func_6($config_value_address,@PID_params_data); } elsif ($data_type eq 'bit'){ if ($config_value == 0){ &Func_5($config_value_address,0x00,0x00); }
193
elsif ($config_value == 1){ &Func_5($config_value_address,0xFF,0x00); } } } ############################################################################################ # SUBFUNCIONES UTILIZADAS EN LA GUI - FORMATO DE MENSAJE DE SALIDA ############################################################################################ # ------------------------------------------------------------------------------ # Funcion 1 Modbus <<Lectura de N bits>> # Entrada: Arreglo de parametros (DirInicio,NumBits) # Salida: Arreglo de premensaje para enviar a funcion send_message sub Func_1{ my @Func_arguments = @_; # Direccion del esclavo my $slave = $slave_address; # Codigo de Funcion my $code = 1; # Direccion de inicio de palabras en memoria (Parte alta y baja) my $mem_address = shift @Func_arguments; my $mem_address_HI = (&high_low_byte($mem_address))[1]; my $mem_address_LO = (&high_low_byte($mem_address))[0]; # Datos - 2 bytes que tienen estado de bit por modificar my $num_bits = shift @Func_arguments; my $num_of_bits_HI = (&high_low_byte($num_bits))[1]; my $num_of_bits_LO = (&high_low_byte($num_bits))[0]; # Arreglo de salida - premensaje my @Func_message = ($slave,$code,$mem_address_HI,$mem_address_LO,$num_of_bits_HI,$num_of_bits_LO); # Numero de bytes que se veran a la hora de leer del puerto $num_char_write = 8; if (($num_bits % 8) != 0){ $num_char_read = 5+(($num_bits-($num_bits % 8))/8)+1; } else{ $num_char_read = 5+($num_bits/8); } # Envia arreglo de salida a funcion de envio @Func_return = &send_message(@Func_message); return @Func_return; } # ------------------------------------------------------------------------------ # Funcion 3 Modbus <<Lectura de N palabras>> # Entrada: Arreglo de parametros (DirInicio,NumPalabras) # Salida: Arreglo de premensaje para enviar a funcion send_message sub Func_3{ my @Func_arguments = @_; # Direccion del esclavo my $slave = $slave_address; # Codigo de Funcion
194
my $code = 3; # Direccion de inicio de palabras en memoria (Parte alta y baja) my $mem_address = shift @Func_arguments; my $mem_address_HI = (&high_low_byte($mem_address))[1]; my $mem_address_LO = (&high_low_byte($mem_address))[0]; # Numero de palabras por ser leidas (Parte alta y baja) my $num_of_words = shift @Func_arguments; my $num_of_words_HI = (&high_low_byte($num_of_words))[1]; my $num_of_words_LO = (&high_low_byte($num_of_words))[0]; # Arreglo de salida - premensaje my @Func_message = ($slave,$code,$mem_address_HI,$mem_address_LO,$num_of_words_HI,$num_of_words_LO); # Numero de bytes que se veran a la hora de leer del puerto $num_char_write = 8; $num_char_read = 5+$num_of_words*2; # Envia arreglo de salida a funcion de envio @Func_return = &send_message(@Func_message); return @Func_return; } # ------------------------------------------------------------------------------ # Funcion que toma los valores del GUI y formatea segun los parametros de la # Funcion 5 Modbus <<Escritura de un bit>> # Entrada: Arreglo de parametros (DirInicio,Datos) # Salida: Arreglo de premensaje para enviar a funcion send_message sub Func_5{ my @Func_arguments = @_; # Direccion del esclavo my $slave = $slave_address; # Codigo de Funcion my $code = 5; # Direccion de inicio de palabras en memoria (Parte alta y baja) my $mem_address = shift @Func_arguments; my $mem_address_HI = (&high_low_byte($mem_address))[1]; my $mem_address_LO = (&high_low_byte($mem_address))[0]; # Datos - 2 bytes que tienen estado de bit por modificar my @data = @Func_arguments; # Arreglo de salida - premensaje my @Func_message = ($slave,$code,$mem_address_HI,$mem_address_LO,@data); # Numero de bytes que se veran a la hora de leer del puerto $num_char_write = 8; $num_char_read = 8; # Envia arreglo de salida a funcion de envio @Func_return = &send_message(@Func_message); $done = 1; return $done; } # ------------------------------------------------------------------------------ # Funcion que toma los valores del GUI y formatea segun los parametros de la # Funcion 6 Modbus <<Escritura de una palabra>> # Entrada: Arreglo de parametros (DirInicio,Datos) # Salida: Arreglo de premensaje para enviar a funcion send_message sub Func_6{
195
my @Func_arguments = @_; # Direccion del esclavo my $slave = $slave_address; # Codigo de Funcion my $code = 6; # Direccion de inicio de palabras en memoria (Parte alta y baja) my $mem_address = shift @Func_arguments; my $mem_address_HI = (&high_low_byte($mem_address))[1]; my $mem_address_LO = (&high_low_byte($mem_address))[0]; # Datos - 2 bytes que tienen estado de bit por modificar my @data = @Func_arguments; # Arreglo de salida - premensaje my @Func_message = ($slave,$code,$mem_address_HI,$mem_address_LO,@data); # Numero de bytes que se veran a la hora de leer del puerto $num_char_write = 8; $num_char_read = 8; # Envia arreglo de salida a funcion de envio @Func_return = &send_message(@Func_message); return @Func_return; } # ------------------------------------------------------------------------------ # Funcion que toma los valores del GUI y formatea segun los parametros de la # Funcion 15 Modbus <<Escritura de N bits>> # Entrada: Arreglo de parametros (DirInicio,NumBits,Datos) # Salida: Arreglo de premensaje para enviar a funcion send_message sub Func_15{ my @Func_arguments = @_; # Direccion del esclavo my $slave = $slave_address; # Codigo de Funcion my $code = 15; # Direccion de inicio de palabras en memoria (Parte alta y baja) my $mem_address = shift @Func_arguments; my $mem_address_HI = (&high_low_byte($mem_address))[1]; my $mem_address_LO = (&high_low_byte($mem_address))[0]; # Numero de palabras por ser leidas (Parte alta y baja) my $num_of_bits = shift @Func_arguments; my $num_of_bits_HI = (&high_low_byte($num_of_bits))[1]; my $num_of_bits_LO = (&high_low_byte($num_of_bits))[0]; # Numero total de bytes my $num_bytes; if ($num_of_bits % 8 == 0){ $num_bytes = ($num_of_bits)/8; } else{ $num_bytes = (($num_of_bits-($num_of_bits % 8))/8)+1; } # Datos - Palabras que van a escribirse my @data = @Func_arguments; # Arreglo de salida - premensaje my @Func_message = ($slave,$code,$mem_address_HI,$mem_address_LO,$num_of_bits_HI,$num_of_bits_LO,$num_bytes,@data); # Numero de bytes que se veran a la hora de leer del puerto
196
$num_char_write = 9 + $num_bytes; $num_char_read = 8; # Envia arreglo de salida a funcion de envio @Func_return = &send_message(@Func_message); return @Func_return; } # ------------------------------------------------------------------------------ # Funcion que toma los valores del GUI y formatea segun los parametros de la # Funcion 16 Modbus <<Escritura de N palabras>> # Entrada: Arreglo de parametros (DirInicio,NumPalabras,Datos) # Salida: Arreglo de premensaje para enviar a funcion send_message sub Func_16{ my @Func_arguments = @_; # Direccion del esclavo my $slave = $slave_address; # Codigo de Funcion my $code = 16; # Direccion de inicio de palabras en memoria (Parte alta y baja) my $mem_address = shift @Func_arguments; my $mem_address_HI = (&high_low_byte($mem_address))[1]; my $mem_address_LO = (&high_low_byte($mem_address))[0]; # Numero de palabras por ser leidas (Parte alta y baja) my $num_of_words = shift @Func_arguments; my $num_of_words_HI = (&high_low_byte($num_of_words))[1]; my $num_of_words_LO = (&high_low_byte($num_of_words))[0]; # Numero total de bytes my $num_bytes = $num_of_words*2; # Datos - Palabras que van a escribirse my @data = @Func_arguments; # Arreglo de salida - premensaje my @Func_message = ($slave,$code,$mem_address_HI,$mem_address_LO,$num_of_words_HI,$num_of_words_LO,$num_bytes,@data); # Numero de bytes que se veran a la hora de leer del puerto $num_char_write = 9+$num_bytes; $num_char_read = 8; # Envia arreglo de salida a funcion de envio @Func_return = &send_message(@Func_message); return @Func_return; } # ------------------------------------------------------------------------------ # Funcion que toma un arreglo de un pre-mensaje y le da formato para ser enviado # (agrega codigo CRC16 y convierte mensaje en un string ASCII) # Entrada: array de n elementos # Salida: sub send_message{ # Formacion del codigo de CRC-16 my @Byte_array = @_; my $CRC_16 = crc_16(@Byte_array); #calcula el CRC arreglo por enviarse my $low_CRC_16 = (&high_low_byte($CRC_16))[0]; #parte baja CRC16 my $high_CRC_16 = (&high_low_byte($CRC_16))[1]; #parte alta CRC16
197
@Byte_array = (@Byte_array,$low_CRC_16,$high_CRC_16); # se apenda el CRC16 al arreglo # El mensaje esta completo! # Convertir el mensaje en string ASCII (para modulo de SerialPort): #FOR DEBUG ONLY print_on_text_box("\nSending @Byte_array\n"); my $Msg_string = ""; foreach (@Byte_array){ $a = (unpack("H*", pack("N", $_))); #convierte de decimal a hex (numero) $a =~ s/^0.....//; #quita ceros innecesarios a la izquierda $a = pack("H*",$a); #convierte a simbolo hex $Msg_string = $Msg_string.$a; } ################################################################################# if ($Connect_flag == 1){ # COMANDO PARA ENVIAR!!! $ob->write($Msg_string); $remote_timer -> cancel if (defined $remote_timer); $ob -> lookclear; #if ($slave_address != 0){ # COMANDO PARA LEER #-------------------------------------------------------------- $ob ->read_interval(100); $ob ->read_const_time(100); my $gotit = ""; until ("" ne $gotit) { if ($slave_address != 0){ $gotit = $ob -> read($num_char_write+$num_char_read); # poll until data ready } else{ $gotit = $ob -> read($num_char_write); # poll until data ready } die "\nAborted without match\n" unless (defined $gotit); last if ($gotit); } $gotit = unpack("H*",$gotit); # Revisar tamaño de respuesta my $answer_length = (length ($gotit))/2; # FOR DEBUG ************* print_on_text_box("\n$gotit\n"); $Msg_string = $gotit; if ($answer_length != ($num_char_write+$num_char_read)){ print_on_text_box("\nEsperando respuesta..."); my $timeout; if ($slave_address == 0){ $timeout = Win32::GetTickCount() + (100); } else { $timeout = Win32::GetTickCount() + (600); } my $gotit_2; while (Win32::GetTickCount() < $timeout){ if ($slave_address != 0){ $gotit_2 = $ob -> read($num_char_read);
198
$gotit_2 = unpack("H*",$gotit_2); # FOR DEBUG ************* print_on_text_box("\n$gotit_2\n"); last if ($gotit_2 ne ""); } } if ($gotit_2 eq "" and ($slave_address != 0)){ print_on_text_box("\n\nERROR DE COMUNICACION CON EL CONTROLADOR!! (Direccion: $slave_address)\n"); print_on_text_box("Instruccion enviada: $gotit\n"); &initialize_widgets; $ob -> read(50); $ob -> lookclear; @slave_address_array = grep $_ != $slave_address,@slave_address_array; if (@slave_address_array == ()){ $Connect_flag = 0; $graph_timer -> cancel if ($registro_flag == 1); $registro_flag = 0; close(data_FH); } return; } else{ $Msg_string = $Msg_string = $gotit.$gotit_2; print_on_text_box(" OK\n"); } } # Ir a procedimiento de procesamiento de respuesta (generico) if ($Connect_flag == 1 and ($slave_address != 0)){ @Msg_read_array = Process_Func_generic($Msg_string); } $remote_timer = $btn_connect_frm1->after(3000, [\&button_connect]); } # end of if if ((scalar @slave_address_array > 1) and ($graph_instruct != 1)){ # espera 20 milisegundos para que se estabilice el puerto my $timeout; $timeout = Win32::GetTickCount() + (20); while (Win32::GetTickCount() < $timeout){ } } $graph_instruct = 0; return @Msg_read_array; } # ------------------------------------------------------------------------------ # Funcion para separar un byte de 16 bits en byte alto y byte bajo (8 bits) # Entrada: Byte de 16 bits # Salida: 2 bytes de 8 bits en un arreglo (MSB,LSB) sub high_low_byte{ my $complete_byte = @_[0]; return($complete_byte & 0x00FF,(($complete_byte & 0xFF00) >> 8)); } # ------------------------------------------------------------------------------ # Funcion para calcular el CRC-16 Modbus
199
# Entrada: Mensaje a ser enviado (arreglo de n bytes de 8 bits) # Salida: 2 bytes de 8 bits con codigo CRC-16 (LSB,MSB) sub crc_16{ my @Byte_chain = @_; $CRC_reg = 0xFFFF; #inicializar registro $poly_value = 0xA001; #constante foreach (@Byte_chain){ #calcula el valor de forma 'acumulativa' crc_calc($_,$CRC_reg); } my $Final_CRC = $CRC_reg; return $Final_CRC; #devuelve valor CRC } # ------------------------------------------------------------------------------ # Algoritmo de calculo de CRC-16 propiamente # Entrada: Byte de 8 bits de mensaje # Salida: 2 bytes de 8 bits con codigo CRC-16 (acumulado) sub crc_calc { my $byte = shift(@_); $CRC_reg = shift(@_); my $n = 0; #Comenzar con el algoritmo CRC16-Modbus $CRC_reg = $CRC_reg ^ $byte; until ($n > 7){ my $LSB_CRC_reg = $CRC_reg & 0x0001; $CRC_reg = $CRC_reg >> 1; if ($LSB_CRC_reg == 0x0001){ $CRC_reg = $CRC_reg ^ $poly_value; } $n = $n + 1; } return $CRC_reg; } # ------------------------------------------------------------------------------------------ # Funcion que procesa los valores leidos despues de enviar la Funcion 1 <<Lectura de N bits>>. # Entrada: Cadena de valores hexadecimales. # Salida: Arreglo de valores relevantes. sub Process_Func_1{ my @Array_to_process = @_; # Se descompone el arreglo en cada uno de los elementos y se extraen los datos leidos my $slave_dir = shift @Array_to_process; my $func_code = shift @Array_to_process; my $byte_count = shift @Array_to_process; my $CRC = (pop @Array_to_process).(pop @Array_to_process); #FOR DEBUG ************* print_on_text_box "\n$slave_dir,$func_code,$byte_count,@Array_to_process\n";
200
my @Array_data_only = (); # Descompone la informacion leida de memoria (solo datos) en un arreglo donde los elementos tienen el # mismo orden que las direcciones de memoria while (scalar (@Array_to_process) != 0){ my $data_bits = sprintf("%.8b",shift @Array_to_process); my @temp_array = split//, $data_bits; push (@Array_data_only,reverse @temp_array); } return @Array_data_only; } # ------------------------------------------------------------------------------------------ # Funcion que procesa los valores leidos despues de enviar la Funcion 3 <<Lectura de N palabras>>. # Entrada: Cadena de valores hexadecimales. # Salida: Arreglo de valores relevantes. sub Process_Func_3{ my @Array_to_process = @_; # Se descompone el arreglo en cada uno de los elementos y se extraen los datos leidos my $slave_dir = shift @Array_to_process; my $func_code = shift @Array_to_process; my $byte_count = shift @Array_to_process; my $CRC = (pop @Array_to_process).(pop @Array_to_process); # FOR DEBUG ************* print_on_text_box "\n$slave_dir,$func_code,$byte_count,@Array_to_process\n"; my @Array_data_only = (); while (scalar (@Array_to_process) != 0){ my $data_hi = shift @Array_to_process; my $data_lo = shift @Array_to_process; push (@Array_data_only,hex($data_hi.$data_lo)); } return @Array_data_only; } # ------------------------------------------------------------------------------------------ # Funcion que realiza el procesamiento generico de las respuestas leidas por el puerto serial # Segun protocolo MODBUS # Entrada: Cadena de valores hexadecimales. # Salida: Arreglo de valores relevantes - solo datos (eliminando el eco del comando enviado) sub Process_Func_generic{ @Msg_read_array = (); my @Msg_read_array_for_CRC = (); $Msg_read = shift @_; $Msg_read = substr($Msg_read,$num_char_write*2,$num_char_read*2); #FOR DEBUG ************* print_on_text_box "\nAnswer only: $Msg_read\n"; while (length($Msg_read) != 0){ push(@Msg_read_array,substr($Msg_read,0,2));
201
push(@Msg_read_array_for_CRC,hex(substr($Msg_read,0,2))); substr($Msg_read,0,2) = "" } # Revisar si la respuesta viene de esclavo correcto print_on_text_box "\nError: Respuesta de Esclavo inesperado. Obtenida: $Msg_read_array[0] Esperada:$slave_address \n" if ($Msg_read_array[0] != $slave_address); # Revisar si hay error de marco (Error en CRC)- - - - - - - - # 1) Tomar valores de CRC-16 leidos my $CRC_16_high_received = pop (@Msg_read_array_for_CRC); my $CRC_16_low_received = pop (@Msg_read_array_for_CRC); # 2) Recalcular CRC-16 con el resto del arreglo para ver si los valores son los correctos my $CRC_16 = crc_16(@Msg_read_array_for_CRC); my $low_CRC_16 = (&high_low_byte($CRC_16))[0]; #parte baja CRC16 my $high_CRC_16 = (&high_low_byte($CRC_16))[1]; #parte alta CRC16 # 3) Comparar valores recibidos con nuevo calculo print_on_text_box "\nError de Marco\n" if (($CRC_16_low_received != $low_CRC_16) or ($CRC_16_high_received != $high_CRC_16)); # - - - Fin revision CRC-16 return @Msg_read_array; }
202
APÉNDICE G: Manual de usuario del programa
Manual de Usuario
C O N T R O L A D O R F O X B O R O ® 7 1 6 C
Y P R O G R A M A D E S U P E R V I S I Ó N Y C O N F I G U R A C I Ó N “ F O X V I E W ”
Roberto Herrera Matamoros - A02057
I Semestre 2006
Tabla de Contenidos Introducción 204 El controlador Foxboro® 716C 205 1.1 Características Generales 205 1.2 Características de Control 206 1.3 Descripción de la caja de conexiones207 1.4 Carátula frontal del controlador 208 1.5 Selección de punto de operación 209 1.6 Alimentación y encendido / apagado 209 1.7 Conexión de entradas / salidas 210 1.8 Modos de configuración / operación 211 1.8.1 Modo de operación 211 1.8.2 Modo de configuración 213 1.9 Conexión de red para operación remota213 Operación remota del controlador
utilizando el programa FoxView 215 2.1 Requisitos para Instalación 215 2.2 Instrucciones de Instalación 216 2.3 Operación del programa 216 2.3.1 Control de conexión/desconexión 217 2.3.2 Tablero de operación y sintonización
del controlador 217 2.3.3 Configuración de gráfico y registro220 2.3.4 Gráfico de tendencias 221 2.3.5 Ventana de mensajes 222 2.4 Manejo de errores 223 Ejemplo de utilización 225 3.1 Conexión de dispositivos 225 3.2 Inicio de Programa 225 3.3 Estableciendo conexión 225 3.4 Sintonización del controlador 226
3.5 Registro de datos 226 3.6 Cambio de valores en el controlador 226 3.7 Finalización 226
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Introducción l objetivo principal del presente manual es el de familiarizar a los estudiantes del
Laboratorio de Control Automático con el funcionamiento del controlador PID
digital Foxboro® 716C, sus características principales de operación y opciones de
configuración para su uso en las prácticas de laboratorio, y del programa FoxView.
Primeramente se hace una descripción general del controlador y de los elementos que
componen su caja de interconexiones.
Posteriormente se explican los pasos necesarios para conectar el controlador con una PC y de
esta forma utilizar el programa FoxView para realizar la configuración, sintonización y
supervisión remota del controlador PID.
Este programa cuenta con una interfaz gráfica que le permite al usuario acceder fácilmente a
los parámetros del dispositivo, así como visualizar de forma gráfica las principales variables de
control del proceso, tanto para uno o varios controladores conectados a la vez.
En el manual se detallan las instrucciones de instalación del programa, la descripción de los
elementos de la interfaz gráfica, los procesos generales más importantes (sintonización,
graficación, etc.), la explicación de los mensajes de error que puedan presentarse al usuario,
entre otros.
Finalmente se incluye un ejemplo de su uso donde se observa el procedimiento necesario
para obtener la curva de reacción de un proceso utilizando el programa FoxView y el
controlador Foxboro® 716C.
En los anexos se incluye también información pertinente que puede ser revisada por el
usuario para una mayor familiarización con el equipo.
E
204
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Capítulo
1 El controlador Foxboro® 716C Descripción de sus características principales y opciones de configuración
l controlador Foxboro® 716C es un controlador digital que, a pesar de ser compacto, ofrece gran variedad de opciones de configuración y operación, entre ellas la comunicación con equipos de adquisición de datos.
1.1 Características Generales
E Entre los rasgos más distintivos a primera vista, se observan:
Indicador con pantalla doble de LED para mostrar el valor deseado, la variable controlada y los valores de
configuración.
Teclado frontal para configuración y operación (local).
Indicadores luminosos para indicar número de salidas utilizadas, número de punto de operación, operación automática/manual, habilitación de manejo remoto, habilitación de algoritmo de auto ajuste, unidades de temperatura, entre otros.
Sin embargo este controlador presenta también otras características importantes, como son:
Interfaz de comunicación serial: permite la conexión con una PC para una configuración, sintonización y supervisión remota.
Entrada “universal” de señales lineales, o utilización de termopar o RTD.
Previsión para el uso de alarmas de proceso, así como el control de salidas de relé.
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
1.2 Características de Control El controlador Foxboro® 716C presenta un algoritmo de control PID, el cual se
puede sintonizar manualmente o por medio del algoritmo propietario de auto-ajuste denominado “SMART”, que monitorea continuamente el proceso y automáticamente ajusta los parámetros del PID según sea necesario. Sin embargo, los mecanismos de auto-ajuste no son siempre muy efectivos, por lo que resulta más recomendable sintonizar manualmente el algoritmo PID.
Algunas de las características y opciones de control que presenta el dispositivo son:
Tipo de control configurable entre PID, PI, P, auto-ajuste (SMART) o control deshabilitado (trabajando como indicador únicamente).
Modo de operación manual o automático.
Banda proporcional: configurable de 1% a 200% del rango de entrada
Tiempo derivativo: configurable de 1 segundo a 10 minutos en intervalos de 1 segundo, o apagado.
Tiempo integral: configurable de 1 segundo a 20 minutos, en intervalos de 1 segundo, o apagado.
Pre-carga integral: configurable para una salida de control entre 0 a 100% del rango de salida.
Histéresis (para encendido o apagado de acción de control): configurable entre 0.1% a 10.0% del rango de entrada.
Opción de configurar dos puntos de operación distintos (valor deseado): principal (SP) y auxiliar (SP2), transferibles por medio de un interruptor externo.
Salida de control (principal o secundarias) inversa o directa.
Filtro digital para el valor mostrado o retransmitido (constante de tiempo de 4 s para RTD o termopar, 2 s para entradas lineales).
Tiempo de muestreo: 250 ms (entradas lineales) o 500 ms (RTD o termopar).
206
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
1.3 Descripción de la caja de conexiones El controlador Foxboro® 716C se encuentra montado en una caja de interconexiones que permite acceder fácilmente sus conexiones de entradas y salidas. Las siguientes figuras muestran diagramas esquemáticos del panel frontal y trasero de la caja de conexiones del controlador:
IN + IN -
OUT + OUT -
SP2
SP
2
FIGURA 1.1 Vista frontal de la caja de conexiones del Foxboro®716C
3
4
5
1
6 7
FIGURA 1.2 Vista trasera de la caja de conexiones del Foxboro®716C
Las partes son:
1) Carátula frontal del Controlador Foxboro® 716C
2) Interruptor de selección de punto de operación principal (SP) o secundario (SP2)
3) Terminales de conexión para señales de entrada y salida del controlador.
207
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
4) Interruptor de encendido/apagado.
5) Entrada del cable de alimentación AC.
6) Interruptor de selección de modo de configuración / operación.
7) Terminales de conexión para red serial (RS-485).
1.4 Carátula frontal del controlador En la parte frontal (1) se encuentra la pantalla con los valores de la señal de entrada del controlador (número superior), salida del controlador (número inferior), los indicadores luminosos y el teclado para operación y configuración local (sin conexión a PC).
FIGURA 1.3 Panel frontal del controlador Foxboro®716C
La descripción de los indicadores y función de los botones del teclado es la siguiente:
Botón Descripción Indicador Descripción
Disminuye el valor del parámetro seleccionado REM El instrumendo está siendo
controlado de forma remota.
Incrementa el valor del parámetro seleccionado °C / °F
Muestra las unidades de medición cuando se usa para control de procesos térmicos.
Muestra en secuencia todos los parámetros de configuración guardando el último valor ingresado.
OUT1 La salida principal de control está habilitada.
Vuelve al parámetro de configuración anterior sin guardar el valor ingresado. Si se presiona por un segundo, realiza el cambio entre el modo automático/manual.
OUT2/OUT3 Función de salidas auxiliares (alarmas, salida secundaria). No están siendo utilizadas actualmente.
Habilita / deshabilita la salida de control (cinco segundos) SP2
Parpadea lentamente cuado se utiliza el punto de operación secundario (SP2)
El controlador funciona en modo manual. MAN
208
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Nota
Cuando se trabaja con el controlador de forma remota (controlado desde la PC), el teclado permite navegar entre los valores de los parámetros de operación / configuración, pero únicamente para su visualización. Estos valores no podrán ser modificador con el teclado local.
1.5 Selección de punto de operación El controlador permite la configuración de dos valores de operación (valor deseado) distintos, ya sea por medio del teclado (modo local) o desde una PC (modo remoto).
Modo local: El punto de operación principal (SP) se puede modificar estando en modo de operación manteniendo presionada alguna de las teclas / durante dos segundos y luego aumentar o disminuir la cantidad hasta alcanzar el valor desado. Una vez ajustado el valor se activa después de dos segundos más. Para cambiar el punto de operación secundario (SP2), se presiona la tecla FUNC varias veces hasta que en la parte superior de la pantalla aparezca la palabra “SP2”. Otra vez se utilizan las teclas / para ajustar el valor, y este se guarda al presionar FUNC nuevamente.
Modo remoto: Ver capítulo 2 (operación remota).
Para alternar entre los valores principal y secundario (SP/SP2) se utiliza el interruptor localizado en la parte frontal de la caja de conexión del controlador (2).
1.6 Alimentación y encendido / apagado El controlador funciona con una alimentación nominal de 100 a 240 Vac. El cable de alimentación se conecta en la parte posterior de la caja de conexiones, en la terminal (5).
Después de conectar el cable, el controlador se apaga o se enciende utilizando el interruptor (I/O) (4) localizado también en
la parte trasera de la caja.
Advertencia
El controlador debe encenderse únicamente después de que se hayan realizado todas las demás conexiones (red, entradas y salidas, etc.)
209
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
1.7 Conexión de entradas / salidas La conexión de las señales de entrada (valor realimentado) y salida del controlador se realiza utilizando las terminales (3) localizadas en la parte frontal de la caja de conexiones del controlador. Para cada señal se tiene dos terminales (positiva y negativa).
La Figura 1.4 muestra un ejemplo de cómo se conectarían las señales de entrada y salida del controlador para trabajar con el proceso de caudal de una planta Lab-Volt® 3522.
FIGURA 1.4 Ejemplo de conexión de las entradas y salidas del controlador
Nota
El controlador puede configurarse para trabajar con señales de voltaje (0 a 5 V / 1 a 5 V / 0 a 10 V / 2 a 10 V / 0 a 60 mV / 12 a 60 mV) o de corriente (4 a 20 mA / 0 a 20 mA). También puede utilizar entradas de termopar o RTD. Por defecto, la entrada está configurada como una señal de corriente de 4 a 20 mA. Para modificar este valor debe entrar al modo de configuración del dispositivo (ver sección 1.8 “Modos de configuración / operación”) y además debe cambiar la posición de unos “puentes” que se encuentran en la parte interna del controlador (ver manual MI018-575).
La salida del controlador es únicamente de corriente (0 a 20 mA / 4 a 20 mA).
210
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
1.8 Modos de configuración / operación Para alternar entre el modo de configuración y el de operación, el controlador Foxboro® 716C posee un interruptor (6) en la parte posterior de la caja de conexiones tal y como lo muestra la Figura 1.2. Si la pantalla indica “Conf”, se ha seleccionado el modo de configuración, de lo contrario estará en modo de operación. Según el modo en que se encuentre, las funciones que son accedidas por
medio del teclado frontal varían, así como la información desplegada por la pantalla.
Advertencia
Para evitar daños en el controlador y errores durante la ejecución del programa de supervisión remota, el interruptor de modo de configuración y operación debe únicamente accionarse cuando el dispositivo se encuentra apagado. Además, para poder utilizar el programa de configuración remota, el controlador debe estar en modo de operación.
1.8.1 Modo de operación
Este es el modo en el que opera normalmente el controlador. Si no se ha presionado ninguna tecla, la pantalla muestra el valor de la señal de entrada del controlador (número superior), y el valor de la salida del controlador (número inferior).
Durante el funcionamiento puede cambiarse la operación manual a automática o viceversa, utilizando la tecla MAN (ver sección 1.4), alternar entre el punto de operación principal y secundario (ver sección 1.5), cambiar el valor del punto de operación (ver sección 1.5) y modificar los valores de los parámetros de operación y las variables de control.
Para realizar esto último, se presiona la tecla FUNC para navegar entre los distintos parámetros que pueden cambiarse. En la pantalla se verá el código del parámetro en la parte inferior, y el valor actual en la parte superior. Los valores pueden modificarse usando las teclas / y se guardan al presionar FUNC nuevamente. Si se presiona MAN se regresa al parámetro anterior, pero no se guarda el valor que fue modificado.
Nota
Si durante 10 segundos después de haber presionado la tecla FUNC o haber modificado algún parámetro no se realiza acción alguna, el controlador regresará a la pantalla normal, donde despliega los valores de entrada y salida únicamente.
211
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
La siguiente tabla muestra el significado de cada uno de los parámetros de operación que pueden modificarse desde el modo de operación (algunos pueden no aparecer, dependiendo de la configuración del controlador).
Código Descripción de parámetro Opciones Descripción de opción Dependencia SP Valor deseado (punto operación) [rL,rH] En unidades de ingeniería rL,rH
ON SMART Habilitado Snrt Estado de auto ajuste SMART
OFF SMART Deshabilitado P30 (config)
ON Restablecer estado de alarma n.RSt Reset manual de alarmas
OFF No cambiar estado Alarmas
configuradas
ON El instrumento está bloqueado nnn Clave de bloqueo de protección
OFF El instrumento no está bloqueado
P17
SP2 Valor deseado auxiliar [rL,rH] En unidades de ingeniería rL,rH AL1 Punto de operación de Alarma 1 Según P9 En unidades de ingeniería P9
HSA1 Histéresis de Alarma 1 % de P4-P3 Porcentaje de rango de escala P4,P3 AL2 Punto de operación de Alarma 2 Según P14 En unidades de ingeniería P14
HSA2 Histéresis de Alarma 2 Según P15 Porcentaje de rango de escala P15 Pb Valor de Banda Proporcional 1% a 200% Porcentaje de rango P4-P3 Control PI,PID
hYS Histéresis para acción de control de APAGADO/ENCENDIDO % de P4-P3 Porcentaje de rango de escala -
ti Tiempo integral 00.01 a 20.00 Unidades mm.ss Control PI,PID
td Tiempo derivativo 00.01 a 10.00 Unidades mm.ss Control PID
0 a 100% Para una salida de control 0 a -100% Enfriamiento IP Pre carga integral 0 a 100% Calentamiento
Salidas utilizadas
CY2* Tiempo de ciclo de salida 2 Según P22 En segundos P22 CY3* Tiempo de ciclo de salida 3 Según P22 En segundos P22 rC* Ganancia de enfriamiento relativa N/A Ganancia salida 2 P9
OLAP Banda muerta / traslape entre
salidas de calentamiento / enfriamiento
Según Pb % de la banda proporcional Pb
rL Límite inferior del valor deseado -100% a 100% En unidades de ingeniería Según P3
rH Límite superior del valor deseado -100% a 100% En unidades de ingeniería Según P4
Grd1 Rampa aplicada a un cambio positivo en el valor deseado N/A En unidades por minuto -
Grd2 Rampa aplicada a un cambio negativo en el valor deseado N/A En unidades por minuto -
OLH Limite superior de la salida N/A En % de la salida - tOL Duración del límite de la salida N/A En minutos -
0.1% a 25% % de la salida por segundo rnP Razón de levantamiento máxima
de la salida de control. InF (>25%)
- No hay rampa aplicada
Nota
Estos valores no pueden modificarse si se está trabajando de forma remota.
212
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
1.8.2 Modo de configuración
En este modo se tiene acceso a los valores de configuración del controlador Foxboro® 716C. La forma de navegar entre los parámetros y editarlos es idéntica al del modo de operación (ver sección 1.8.1).
El modo de configuración también tiene opciones de configuración avanzadas. Para ello se selecciona el código 262 con las teclas / y se presiona el botón FUNC.
En el Anexo A se presenta la lista completa y descripción de los parámetros de configuración (básica y avanzada).
Advertencia
Estos parámetros no deben ser modificados a menos que sea absolutamente necesario y debe hacerse bajo supervisión. Una configuración incorrecta de los parámetros (especialmente los marcados con asterisco en el Anexo A) puede resultar en una operación incorrecta del controlador o incluso puede causar que el programa de configuración y supervisión remota no funcione del todo. En las tablas A.1 y A.2 se indica en negrita cuáles son los parámetros recomendados por omisión.
1.9 Conexión de red para operación remota Además de las terminales ya mencionadas, el controlador posee otras (7) para poder comunicarse con una PC, y ser configurado y controlado remotamente desde esta por medio del puerto serial (RS 485).
FIGURA 1.5 Conexión de uno o varios controladores con una PC para la operación remota.
213
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
La Figura 1.5 muestra la forma en que se conecta una PC al controlador. Para ello debe utilizarse un adaptador de puerto serial de 9 a 25 pines conectado a un convertidor RS232 a RS485 para poder convertir las señales de la computadora en señales que serán interpretadas por el controlador. En esta red, la computadora actuará como “maestro” y los controladores serán los “esclavos”:
El convertidor 232/485 tiene una salida RJ12 (6 pines) en donde se conecta el cable que se comunica con la caja de conexiones del controlador. La caja a su vez tiene dos terminales de red RJ11. Esto es para que en una entre el cable que proviene del convertidor, y la otra es utilizada en caso de que se conecten dos esclavos a la vez, ya que esta red utiliza una configuración de esclavos en serie (daisy chain).
La configuración y supervisión remota se realiza desde la PC utilizando el programa FoxView el cual será descrito en el capítulo 2 de este manual.
Notas
En el cable de conexión que va desde el convertidor RS-232/485 al primer controlador, el extremo del cable que va conectado al convertidor está marcado con color negro.
El cable para conectar de un controlador a otro (para la configuración daisy chain) es más corto que el cable mencionado anteriormente.
214
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Capítulo
2 Operación remota del controlador utilizando el programa FoxView Este capítulo explica cómo utilizar el programa de configuración y supervisión remota para dos o más controladores Foxboro® 716C conectados en red.
l programa FoxView es un programa escrito en Perl que tiene una interfaz gráfica que permite al usuario configurar, sintonizar y monitorear a uno o varios controladores Foxboro® 716C conectados en una red RS-485.
2.1 Requisitos para Instalación
E Los siguientes son los requisitos mínimos que debe tener una PC para poder correr el programa FoxView:
Sistema operativo Windows® XP o Windows 2000.
128MB de memoria RAM
Puerto serial RS-232 (9 o 25 pines)
100 MB de memoria libre en el disco duro*
Internet Explorer 5.5 o superior**
El programa también requiere que se tenga instalado Perl 5.8 (o superior) en la computadora donde va a utilizarse. En caso de que no se encuentre instalado, puede obtenerse de Internet (http://www.activestate.com/Products/ActivePerl/) o instalarse desde el disco de instalación del programa FoxView (D:\Instaladores\Perl).
* En caso de que sea necesario instalar el Activestate Perl
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
2.2 Instrucciones de Instalación Ure
P
na vez que se haya terminado de instalar el ActiveState Perl debe ealizarse una instalación básica necesaria para que el programa se jecute adecuadamente.
ara ello, realice los siguientes pasos:
Asegúrese que no haya ningún otro programa abierto en ese momento
En el disco de instalación del programa abra la carpeta que se llama “Instaladores” y haga clic en el archivo denominado “Install.bat”.
Siga cualquier instrucción que le solicita el programa de instalación. Cuando la instalación haya terminado verá la leyenda “FIN DE LA INSTALACIÓN”. Cierre la ventana de comandos.
Para ejecutar el programa ábralo desde Inicio>Programas>Foxboro>FoxView.pl.
2.3 Operación del programa Al abrir el programa se observará la interfaz tal y como aparece en la Figura 2.1
1
2
3
4
5
216
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
FIGURA 2.1 Interfaz gráfica del usuario del programa FoxView.
Los elementos que la componen son:
1. Control de conexión/desconexión
2. Tablero de operación y sintonización del controlador
3. Configuración de gráfico y registro
4. Gráfico de tendencias
5. Ventana de mensajes
2.3.1 Control de conexión/desconexión
Sus elementos son: casilla de selección de dirección del esclavo, botón de conexión y botón de desconexión.
Los esclavos se van conectando de uno en uno, seleccionando la dirección respectiva en la casilla de direcciones y enviando el comando de conectar. En caso de que la conexión sea exitosa, comenzará a parpadear la luz de “REM” en el panel frontal del
controlador (ver sección 1.4).
La casilla de selección también sirve para indicar a cuál esclavo se le enviarán los comandos a través del tablero de operación y sintonización (2). Si se selecciona la dirección de esclavo cero, entonces los comandos se enviarán en modo “broadcast”, es
decir, a todos los esclavos a la vez.
En el Modo “Broadcast” se envían comandos a todos los esclavos a la vez.
La desconexión de los esclavos se puede ir haciendo igualmente de uno a uno o todos a la vez, eligiendo la dirección de esclavo cero.
Notas
Si se envía el comando de “conectar” a un esclavo que no está físicamente conectado a la red, el programa desplegará un error en la ventaja de mensajes (5).
El botón de desconexión no se habilitará a menos de que el esclavo seleccionado se encuentre actualmente conectado.
2.3.2 Tablero de operación y sintonización del controlador
Este módulo es el que cuenta con mayor cantidad de elementos: interruptor de selección de modo automático/manual, casillas de parámetros de control, botón de
217
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
configuración, botón de refrescamiento de parámetros de control, y botón de envío de parámetros.
FIGURA 2.2 Tablero de operación y sintonización del controlador
Después de establecerse una conexión exitosa con algún esclavo, todos los elementos del tablero se encuentran inicialmente deshabilitados, excepto el botón de “Refrescar”. Al presionar este botón se habilitan el resto de elementos del panel, se obtienen el
modo y los valores actuales del controlador y se colocan en las casillas correspondientes, además de ser desplegados en la ventana de mensajes (5).
En modo automático la casilla del valor de salida del controlador (“u(t)”) queda deshabilitada. El interruptor de selección de modo permite cambiar entre
modo de operación automático o manual.
Los valores de las casillas de parámetros de control pueden editarse utilizando las flechas al lado del cuadro, o editando directamente el texto que está en la casilla. En caso de ingresarse algún carácter no numérico se desplegará un mensaje de error (5).
Los campos correspondientes al tiempo integral y al tiempo derivativo contienen dos casillas cada uno: la primera es para el valor en minutos y la segunda para segundos.
Luego de ingresar nuevos valores en las casillas y presionar el botón de envío, el programa primero verificará que todos los valores de las casillas estén dentro del rango correcto. De lo contrario imprimirá un mensaje de error y sustituirá los valores incorrectos con el valor máximo o mínimo de la escala. Si los valores son correctos y el envío se concluye exitosamente, las variables se confirman en la ventana de mensajes.
Advertencia
Una vez que se ingresen nuevos valores en las casillas, estos no se actualizarán en el controlador sino hasta que se presione el botón de envío
218
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Una excepción de lo anterior es el caso de la casilla de u(t) en modo manual, ya que el valor de la salida del controlador sí se cambia directamente al editar el valor de la interfaz.
Como se dijo en la sección previa, el tablero del controlador envía comandos al esclavo cuya dirección aparezca en ese momento en la casilla de direcciones (1). En caso de que se cambie la dirección de esclavo nuevamente el tablero se deshabilita hasta que se haga un nuevo refrescamiento de valores. Si se elige la dirección cero (broadcast) la opción de refrescar se deshabilita, ya que en este modo ningún esclavo puede contestar, pero sí se pueden enviar valores a todos los esclavos al mismo tiempo.
El botón de configuración abre una nueva ventana (Figura 2.3) para modificar parámetros adicionales en el controlador cuya dirección aparece en ese momento en la casilla de direcciones (1), o en todos, si está en modo broadcast. Estos parámetros incluyen el valor de precarga integral y el valor deseado secundario (SP2), el tipo de control (PI ó PID), el tipo de acción de la salida (directa o inversa) y la habilitación del filtro en la variable realimentada.
FIGURA 2.3 Ventana del diálogo de configuración del controlador
Notas
Los dos primeros parámetros pueden leerse o escribirse, mientras que los últimos son únicamente de lectura, ya que el dispositivo no permite configurarlos de forma remota.
219
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Cuando se envían comandos para un solo controlador, los botones de envío se habilitan hasta después de leer el valor actual, mientras que en modo broadcast los botones de lectura no se encuentran deshabilitados, pero no así los de envío.
2.3.3 Configuración de gráfico y registro
Sus elementos son: botón de activación de registro, botón de desactivación de registro, botón de borrado de gráfico y archivo, campo de ruta de archivo de registro, botón de elección de nombre de archivo y botón para elección de ruta del mismo.
Notas
La ruta de archivo predeterminada es “c:\temp\graph” y el nombre de archivo predeterminado es “Foxboro_data.csv”.
Si el archivo anterior ya existe los nuevos datos se anexarán a los datos que se encuentren en el archivo, a menos que se presione el botón de [Borrar]
Inicialmente, los botones de [Registro], [Detener] y [Borrar] se encuentran desactivados, a menos que haya algún esclavo ya conectado.
Con los botones de ruta y nombre de archivo, [Ruta…] y [Archivo…] el usuario puede elegir la ubicación y el nombre del archivo de registro que desee.
Ya una vez qpuede iniciarseel botón de [Rcorrespondien
Una vez que
ue se ha logrado la comunicación con un esclavo, la graficación y el registro de los valores presionando egistro], con lo cual aparecerá el gráfico en la ventana te (4).
se tomen los valores necesarios, se detiene la graficación y el registro con el botón de [Detener]. Si se quieren ver los valores resultantes, debe abrirse el archivo que se encuentra en la ruta que se haya seleccionado anteriormente.
En caso de que se quieran tomar nuevos valores, si se quiere que estén en un archivo aparte debe seleccionarse un nuevo nombre o ruta de archivo y después presionar nuevamente el botón de [Registro]. Si se quiere que los nuevos valores se anexen al mismo archivo solamente se vuelve a presionar el botón de [Registro].
Advertencia
220
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Si se presiona el botón de [Borrar] se limpiará la ventana de gráfico, pero también se borrarán todos los datos anteriores en el archivo actual.
El programa dará un error si se intentan guardar datos en un archivo que se encuentre abierto desde otra aplicación.
2.3.4 Gráfico de tendencias
En esta ventana valor realimentado(r(t)), tanto para el
El esclavo “prin“secundario” el q
el gráfico de las variables principales de control: (y(t)), salida del controlador (u(t)) y valor deseado esclavo “principal”, como para un “secundario”.
cipal” será el que se conecte primero, y el ue lo siga. Las variables de los dos controladores
pueden distinguirse entre sí por su color, como muestra la Tabla 2.1:
TABLA 2.1 Código de colores utilizado en los gráficos de control del programa
Parámetro de control Principal Secundario
y(t) Rojo Café
u(t) Amarillo Blanco
r(t) Azul Naranja
Notas
Si se tienen conectados dos esclavos y se desconecta el “principal” durante el registro y graficación, entonces el “secundario” pasará a tomar el lugar de “principal”, tanto en el gráfico, como en el archivo de registro.
El gráfico despliega a la vez hasta 200 muestras tomadas, luego de eso se comenzará a desplazar hacia la izquierda, perdiendo de vista los valores anteriores.
221
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
2.3.5 Ventana de mensajes
Tal y como se ha labor informativaoperación se realizque son leídos oocurren errores debarra de desplaza
mencionado, esta ventana cumple únicamente una , desplegando mensajes al usuario cuando una a satisfactoriamente, dando los valores de control escritos al controlador, o advirtiendo cuando rango, o de comunicación. La ventana tiene una miento vertical, por lo que puede observarse el
historial de todos los mensajes que se han desplegado desde el momento en que se inició la sesión del programa.
222
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
2.4 Manejo de errores A continuación se presenta una lista de errores y fallas que pueden presentarse durante la ejecución del programa FoxView, así como las posibles causas y las soluciones sugeridas para corregirlo. En caso de que el error no se corrija, comuníquelo a su profesor o asistente de laboratorio.
TABLA 2.2 Posibles errores que pueden presentarse al usuario
Problema Causa Solución
No se encuentra instalado el ActiveState Perl o hubo un error de instalación del programa. El programa no puede iniciarse.
El código del programa ha sido modificado incorrectamente
Repita la instalación descrita en las secciones 2.1 y 2.2
La dirección de esclavo elegida no pertenece a un controlador que esté conectado en la red.
El cable de comunicación se ha desconectado.
El controlador se encuentra apagado o está en modo de configuración (COnf).
Revise que el controlador esté conectado a la red, encendido y en modo de operación. Se presenta el siguiente error:
ERROR DE COMUNICACION CON EL CONTROLADOR!! (Direccion: XX)
El código del programa ha sido modificado incorrectamente
Repita la instalación descrita en las secciones 2.1 y 2.2
No se han refrescado los valores actuales del controlador.
Enviar comando de “Refrescar”
El panel del controlador en la interfaz gráfica se encuentra deshabilitado. La dirección que aparece en la casilla de
direcciones no pertenece a la de algún controlador conectado en la red.
Conectar el esclavo o seleccionar una dirección válida.
Si el controlador se encuentra en modo Automático este valor no puede ser cambiado.
Cambie el modo a manual para cambiar u(t).
La casilla del parámetro de salida del controlador (u(t)) se encuentra deshabilitada.
Todos los controladores conectados actúan al mismo tiempo.
El botón de “refrescar” no se encuentra habilitado, aunque el controlador está conectado.
La comunicación está en modo Broadcast (la casilla de direcciones indica un cero)
Seleccionar sólo la dirección del controlador que se desea operar.
223
M A N U A L D E U S U A R I O C O N T R O L A D O R F O X B O R O ® 7 1 6 C Y P R O G R A M A F O X V I E W
Si se presiona el botón de BORRAR, no sólo se borra el gráfico de la pantalla, sino también el archivo de datos.
Cambie el nombre del archivo de datos antes de presionar el botón de borrar.
El archivo de datos se encuentra en blanco.
Ya no pueden enviarse comandos a un controlador previamente conectado
Si hay un error de comunicación, el programa desconecta automáticamente el controlador que da error.
Reconecte el controlador deseado.
Al iniciar la graficación, se presenta el siguiente mensaje:
“Error!!: El archivo se encuentra abierto en otra aplicación. Debe cerrarlo antes de poder iniciar el registro”
El archivo de registro (.csv) se encuentra abierto desde otra aplicación. (Excel, por ejemplo).
Cierre el archivo en la aplicación respectiva.
Al ingresar un valor en el panel del controlador, se presenta el mensaje:
“Error: solo puede introducir números”
En las casillas únicamente se puede ingresar números o puntos decimales. Si por error se ingresa otro carácter el programa dará el mensaje de error.
Corrija el valor ingresado.
Al ingresar y dar comando de envío, se presenta el siguiente mensaje:
“Error: El valor esta fuera del rango”
El valor ingresado está fuera del rango permitido para el parámetro. Corrija el valor ingresado.
Después de ingresar un valor en el panel del controlador y dar comando de envío, se presenta el mensaje:
“Error: Valor de (parámetro) no valido”
El valor ingresado está fuera del rango permitido para el parámetro. Corrija el valor ingresado.
Al enviar algún comando se recibe:
Error: Respuesta de Esclavo inesperado. Obtenida: xx Esperada: yy
Error de comunicación. Repita el comando enviado.
Al enviar algún comando se recibe: Error de comunicación. (Código de redundancia cíclica incorrecto) Repita el comando enviado.
Error de Marco
224
Capítulo
3 Ejemplo de utilización Este capítulo presenta un ejemplo paso a paso donde se utiliza el programa para obtener la curva de reacción de un proceso térmico.
3.1 Conexión de dispositivos Interconectar las salidas y entradas de la caja de conexiones del controlador con las de la
planta LabVolt® 3522 similar a como se muestra en la Figura 1.4. (Pero para el proceso térmico)
Conectar un controlador con la PC tal como se muestra en la Figura 1.5.
Conecte el cable de alimentación AC a la caja de conexiones y encienda el controlador. Asegúrse que el controlador esté en modo de operación.
Encienda la planta también. Asegúrese que la compuerta de perturbaciones esté completamente cerrada.
3.2 Inicio de Programa Abra el programa FoxView (ver sección 2.2)
Cambie el nombre del archivo de registro por “Curva_reaccion_temp”
3.3 Estableciendo conexión Elija la dirección correspondiente al esclavo (en este caso se utilizará el 1) en la casilla de
direcciones y presione el botón de “Conectar”.
225
Si la conexión fue satisfactoria, aparecerá el mensaje “Poniendo en modo remoto a esclavo 1” y comienza a parpadear la luz de REM en el panel frontal del controlador.
3.4 Sintonización del controlador 1. Seleccione la dirección 1 en la casilla de direcciones.
2. Presione el botón de “Refrescar” para obtener los valores actuales de los parámetros y habilitar el tablero de configuración.
3. Mover el interruptor de modo a “Manual”
4. Cambiar el valor de u(t) a 0 y presionar el botón de “Enviar”. Asegúrse de que el envío de valores es satisfactorio.
3.5 Registro de datos Se inicia el registro de los datos presionando el botón de “Registro”.
Si el registro inicia correctamente, comenzarán a aparecer valores en la ventana del gráfico de tendencias.
3.6 Cambio de valores en el controlador Después de 10 s de iniciar el registro, cambie la salida del controlador a 50%. (Antes puede
ser que deba seleccionar nuevamente la dirección 1 y refrescar los valores).
Espere que el proceso vuelva a estabilizarse y espere unos 10 s después de ello.
3.7 Finalización Presione el botón de “Detener” para detener el registro de valores.
Seleccione nuevamente la dirección 1 y envié el comando de “Desconectar”
226
Busque el archivo “Curva_reaccion_temp.csv” en la ruta que fue seleccionada inicialmente y ábralo con un programa de hojas electrónicas para ver los datos obtenidos y graficar la curva de reacción.
Imprima la curva obtenida (similar a la de la Figura 2.4) y utilice algún método de identificación manual de procesos para obtener el modelo del proceso.
0.00E+00
1.00E+01
2.00E+01
3.00E+01
4.00E+01
5.00E+01
6.00E+01
7.00E+01
8.00E+01
9.00E+01
0.00 50.00 100.00 150.00 200.00 250.00
y(t)
,u(t
)
y(t)
u(t)
FIGURA 2.4 Ejemplo de curva de reacción de un proceso térmico
227