Antologia de Control Automatico

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 75

DIRECCIÓN GENERAL DE EDUCACIÓN

TECNNOLÓGICA INDUSTRIAL

CENTRO NACIONAL DE ACTUALIZACIÓN


DOCENTE

CONTROL AUTOMÁTICO

Prof.: M. C. Ricardo Bautista


Departamento de control
CNAD
CONTROL AUTOMÁTICO

INDICE
INTRODUCCIÓN
Objetivo

1. Introducción a control de computadoras industriales……………………5


1.1 Tipos de PC industriales …………………………………………………..9
1.2 SCADA y GRAFCET …………………………………………………….12

2. Lenguaje C de programación…………………………………………….21
2.1 Sentencias…………………………………………………………………25
2.2 Funciones …………………………………………………………………37

3. Algoritmos de control ………………………………………………….…39


3.1 Controladores PID……………………………………………………..…40
3.2 Control de variables de estado…………………………………………49
3.3 Lógica difusa ……………………………………………………...58

4. Adquisición de datos ………………………………………………….…64


4.1 Muestreo……………………………………………………………….…66
4.2 Filtros digitales…………………………………………………………..68
4.3 Programas de control para servo sistemas ………………………….70

Antología elaborada por. M. en C. Bautista Quintero Ricardo 2


Departamento de control
CNAD
CONTROL AUTOMÁTICO

INTRODUCCIÓN

Actualmente, los sistemas de control de procesos son una combinación de


computadoras (incluyendo las personales), estaciones de trabajo, software
gráfico y diversos algoritmos de control, tarjetas de adquisición de señales
digitalizadas de propósito general y específico, redes de comunicación de datos,
etc. Existen infinidad de aplicaciones donde una computadora puede ser útil
como elemento de control y de monitoreo, en este contexto es que esta
antología aborda conceptos que permiten introducir al participante en los nuevos
esquemas de control, que ayudan a simplificar lo abstracto que resultan los
modelos matemáticos de procesos de transformación de materiales y/o
elaboración de productos.

En el sistema de control de procesos desarrollado, el corazón del sistema está


basado en una PC comercial de propósito general, siguiendo esto, el curso
mostrara con aplicaciones prácticas la forma de adquirir datos y desarrollar
algoritmos de control. También se mostraran las ventajas que se obtienen al
utilizar la comunicación por red entre computadoras de propósito general.

El resultado de la evolución de los sistemas de control industrial que buscan


incesantemente simplificar y eficientar los procesos para obtener mayores
rendimientos han logrado los siguientes aspectos:

• La energía necesaria para realizar un proceso se reduce gracias a la


eficiencia de los sistemas de control automático.
• El mantenimiento se convierte en un procedimiento más simple.
• Surgen normas de calidad que organizan el personal y los sistemas al
punto que los procedimientos son también automatizados.
• La información es primordial, organiza el personal, los tiempos de los
procesos y permite producir exactamente lo necesario en un justo medio
entre nivel de automatización y demanda de producto con la finalidad de
obtener ganancia máxima.

Otras ventajas de emplear una PC como elemento de control para los sistemas
de esta categoría industrial son los siguientes:

• A partir de un ambiente virtual usuarios externos pueden relacionarse con


un ambiente industrial real.

• Desde el punto de vista educativo, se puede lograr un entrenamiento de


los principios básicos de operación, reduciendo el nivel de abstracción
que existe inherentemente en la enseñanza de control automático a un
bajo costo por estudiante, al aprovechar la costosa infraestructura de red
instalada.
• Capacidad de monitorear y/o controlar a distancia las condiciones de un
proceso
Antología elaborada por. M. en C. Bautista Quintero Ricardo 3
Departamento de control
CNAD
CONTROL AUTOMÁTICO

Este curso se divide en tres bloques fundamentales:

1. Panorama de la PC en la industria
2. Lenguaje especifico de control
3. Aplicación de una estrategia de control a un sistema dinámico

En este orden se presentan con el propósito de introducir a los participantes con


el uso de la computadora como elemento de control. Se estudian las últimas
tendencias de cómo emplear los controles secuenciales combinados con
sistemas de control automático, resaltando los conceptos de control supervisorio
y de adquisición de datos (SCADA).

Para la segunda parte de este curso requiere de conocimientos generales de


programación en lenguaje C, debido a que esta parte del modulo se trata de
programar con funciones de salida y entrada de datos externos de una PC. Para
abordar estos contenidos se necesita estudiar las características del hardware
de puertos de la computadora. Se realizaran programas donde intervenga el uso
de dichos puertos y un conjunto de circuitos adaptados especialmente para los
puertos de la PC.

Como tercera parte de este módulo se dará un panorama general de tres


enfoques de control automático y posteriormente se centra la atención en la
información específica de uno de ellos, empleando un control a lazo cerrado de
un servo sistema, detallando lo necesario para que el participante sea capaz de
implementar un sistema de control automático aplicado a diferentes casos
industriales.

OBJETIVO

Emplear una computadora personal como elemento de control para sistemas


industriales, generando programas en lenguaje C que proporcionen salida a
puertos de señales digitales, esto con la finalidad que los participantes tengan la
capacidad de emplear estos elementos como medio de control y adquisición de
datos en un entorno industrial de tipo mecatrónico.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 4


Departamento de control
CNAD
CONTROL AUTOMÁTICO

1. INTRODUCCIÓN AL CONTROL DE COMPUTADORAS


INDUSTRIALES

Aunque el ordenador industrial, entendido como una máquina con gran


capacidad de cálculo y almacenamiento de información, físicamente ubicada en
el centro de control de la planta, y ejecutando programas bajo sistemas
operativos muy especializados que exigen un equipo específico de
programadores y administradores de sistemas, lleva ya tiempo presente en las
plantas industriales como elemento central de control y gestión de datos, sobre
todo en industrias primarias y de generación de energía (empresas químicas,
cementeras, centrales eléctricas, etc.), no es sino a partir de inicios de la década
de los años noventa que el pequeño ordenador personal, compatible con el
estándar IBM PC, entran claramente en la pequeña y mediana industria de
transformación, expandiéndose desde los ámbitos informáticos donde ya era
bien conocido desde la década anterior. Las razones para este retraso son
conocidas: existencia de sistemas operativos de uso general y, por lo tanto, poco
adaptados al medio industrial, rendimientos y velocidades inferiores a otras
alternativas específicas disponibles (estaciones de trabajo, «workstations»),
dudosa fiabilidad de funcionamiento, poca robustez mecánica, etc.

La creciente caída de precios, las mejoras de la fiabilidad del hardware por la


integración de funciones a nivel microelectrónico, la aparición de sistemas
operativos multitarea y/o multiproceso, la mejora de interfaz con usuario (uso de
ventanas gráficas tipo «Windows», pantallas táctiles, etc.) y la creciente
disponibilidad de aplicaciones industriales sobradamente comprobadas, están
invirtiendo la tendencia de crecimiento del parque de ordenadores PC, y ya
ahora los incrementos de máquinas industriales.

Las primeras computadoras industriales

• Incorporan una mayor solidez eléctrica y mecánica.

• Mejoran su modularidad mediante una oferta creciente de bastidores,


conectores y tarjetas funcionales (unidades centrales, expansiones,
interfaces E/S, etc.).

• Adquirieren mayor capacidad para soportar software específico, donde el


volumen de datos no es el requisito esencial, pero sí la facilidad de
interfaz con usuario y la rapidez de respuesta.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 5


Departamento de control
CNAD
CONTROL AUTOMÁTICO

1.1 Tipos de PC industriales

Dentro de la amplia gama industrial las computadoras industriales han ido


ganando terreno sobre los programadores lógicos programables, la comparativa
de estas tecnologías se muestra en la siguiente tabla. A continuación se muestra
un resumen de la comparativa de las ventajas y desventajas de usar PLC y una
PC industrial.

Aunque a finales de los años ochenta, con un mercado de autómatas maduro y


suficientemente experimentado y una implantación creciente de los PC en la
industria, fueron frecuentes las discusiones acerca de la oportunidad de instalar
uno u otro como elemento central de un sistema de control, la experiencia de los
últimos años ha ido definiendo un criterio con mayor precisión sobre los nichos
de aplicación de ambos dentro del entorno industrial.

Ello ha sido debido a las diferencias entre ambas máquinas, que las separan, en
cuanto a su aplicación, más de lo que las une su semejanza básica, a saber, su
carácter de sistemas programables construidos alrededor de un
microprocesador.

En cuanto a hardware, las PC están diseñadas como máquinas de propósito


general, estructuralmente endebles y muy sensibles a alteraciones
electromagnéticas en su entorno, pero muy eficientes en el almacenamiento de
información (gran capacidad de memoria) y en las interfaces con usuario
(pantallas, teclado, multimedia) y otros sistemas (conexiones punto a punto y en
red). La memoria del PC es grande y barata, permitiendo almacenar mucha
información que puede ser transferida a otras máquinas o ser procesada por el
propio PC. Además, y si resulta necesario, pueden incorporarse medios de
almacenamiento masivo de bajo costo.

El autómata, por su parte, resulta mucho más robusto, modular y adaptable a la


planta, con conexiones a ella bien resueltas (número y tipo de E/S, aislamientos
y protecciones). Sin embargo, inicialmente concebido como elemento de mando
local, resulta difícil su interfaz con el usuario y tiene mal resuelta la conexión a
redes, excepto si se trata de específicas de fabricante. Tampoco tiene resuelta
de forma estándar la conexión con medios externos de almacenamiento masivo.
La memoria del PLC es además un bien escaso que debe administrarse con
cuidado, y no contiene por ello, generalmente, más que el propio programa que
se está ejecutando junto con unos pocos datos y variables.

En cuanto al software, el PC resulta muy eficiente en el tratamiento de la


información por la versatilidad de sus sistemas operativos, la abundancia de
lenguajes de programación, la potencia de cálculo matemático (coma flotante,
notación científica, librerías de cálculo), la capacidad de gestión de datos
(tablas, menús, ficheros) y el empleo de lenguajes simbólicos de alto nivel. El
autómata, en cambio, concebido para ejecutar tareas concretas de

Antología elaborada por. M. en C. Bautista Quintero Ricardo 6


Departamento de control
CNAD
CONTROL AUTOMÁTICO

automatización, incorpora un sistema operativo rígido decidido por el fabricante


y sin posibilidad de actualización, gestiona un bajo volumen de información y
tiene limitados sus lenguajes de programación, el número y tipo de
instrucciones posibles. Por contra, los sistemas operativos de las PC se
adaptan mal al trabajo en tiempo real y son lentos en la gestión de los
adaptadores de E/S (aun siendo multitarea, el cuello de botella está en la
presencia de un único microprocesador, que limita el tratamiento a
monoproceso), mientras que los PLC, con un sistema operativo dedicado, bajo
volumen de datos, y posibilidad de trabajo en multitarea y multiproceso sobre
todo en sus gamas altas permiten respuestas muy rápidas para la mayor parte
de procesos, prácticamente en tiempo real si las variables involucradas son
de tipo discreto.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 7


Departamento de control
CNAD
CONTROL AUTOMÁTICO

En resumen se muestra las ventajas y desventajas del uso de un PLC y una PC


como elementos de control.

PLC PC
Hardware

Robustez mecánica Bien Mal


Susceptibilidad electrónica Muy bien Mal
Modularidad Regular Muy bien
Capacidad de memoria de programa auxiliar Muy mal Muy bien
Capacidad de ampliación de E/S Bien Mal

Software

Uso de sistemas operativos multitarea Bien Bien


Uso de subrutinas y priorización Regular Muy bien
Trabajo en tiempo real Bien Regular
Operaciones de punto flotante Muy mal Muy bien
Algoritmos especiales (PID, alarmas) Regular Muy bien
Gestión de datos Mal Muy bien
Programación on-line Bien Muy mal
Lenguajes de programación Regular Muy bien
Librerías normalizadas Mal Muy bien
Programación/depuración en simbólicos Regular Muy bien
Interfaz

Interfaz con usuario Mal Muy bien


Interfaz con señales de planta Muy bien Regular
Numero de I/O soportadas Bien Mal
Aislamiento y protección de I/O Muy bien Regular
Conexionado en red local propia Bien Bien
Conexionado en red comercial Mal Muy bien
Seguridad

De funcionamiento continuado Muy bien Regular


De tolerancia al fallo Bien Mal
De restauración del sistema Bien Mal
Mantenimiento Regular Bien

Antología elaborada por. M. en C. Bautista Quintero Ricardo 8


Departamento de control
CNAD
CONTROL AUTOMÁTICO

1.2 Sistemas SCADA

SCADA viene de las siglas de "Supervisory Control And Data Adquisition", es


decir: adquisición de datos y control de supervisión. Se trata de una aplicación
software especialmente diseñada para funcionar sobre ordenadores en el control
de producción, proporcionando comunicación con los dispositivos de campo
(controladores autónomos, autómatas programables, etc.) y controlando el
proceso de forma automática desde la pantalla del ordenador. Además, provee
de toda la información que se genera en el proceso productivo a diversos
usuarios, tanto del mismo nivel como de otros supervisores dentro de la
empresa: control de calidad, supervisión, mantenimiento, etc.

En este tipo de sistemas usualmente existe un ordenador, que efectúa tareas de


supervisión y gestión de alarmas, así como tratamiento de datos y control de
procesos. La comunicación se realiza mediante buses especiales o redes LAN.
Todo esto se ejecuta normalmente en tiempo real, y están diseñados para dar al
operador de planta la posibilidad de supervisar y controlar dichos procesos.
Los programas necesarios, y en su caso el hardware adicional que se necesite,
se denomina en general sistema SCADA.

Prestaciones. Un paquete SCADA debe estar en disposición de ofrecer las


siguientes prestaciones:

Posibilidad de crear paneles de alarma, que exigen la presencia del operador


para reconocer una parada o situación de alarma, con registro de incidencias.
Generación de históricos de señal de planta, que pueden ser volcados para su
proceso sobre una hoja de cálculo.

Ejecución de programas, que modifican la ley de control, o incluso anular o


modificar las tareas asociadas al autómata, bajo ciertas condiciones.
Posibilidad de programación numérica, que permite realizar cálculos aritméticos
de elevada resolución sobre la CPU del ordenador.

Con ellas, se pueden desarrollar aplicaciones para ordenadores (tipo PC, por
ejemplo), con captura de datos, análisis de señales, presentaciones en pantalla,
envío de resultados a disco e impresora, etc.

Además, todas estas acciones se llevan a cabo mediante un paquete de


funciones que incluye zonas de programación en un lenguaje de uso general
(como C, Pascal, o Basic), lo cual confiere una potencia muy elevada y una gran
versatilidad. Algunos SCADA ofrecen librerías de funciones para lenguajes de
uso general que permiten personalizar de manera muy amplia la aplicación que
desee realizarse con dicho SCADA.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 9


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Requisitos.

Un SCADA debe cumplir varios objetivos para que su instalación sea


perfectamente aprovechada:

Deben ser sistemas de arquitectura abierta, capaces de crecer o adaptarse


según las necesidades cambiantes de la empresa.

Deben comunicarse con total facilidad y de forma transparente al usuario con el


equipo de planta y con el resto de la empresa (redes locales y de gestión).

Deben ser programas sencillos de instalar, sin excesivas exigencias de


hardware, y fáciles de utilizar, con interfaces amigables con el usuario.

Módulos de un SCADA.

Los módulos o bloques software que permiten las actividades de adquisición,


supervisión y control son los siguientes:

Configuración: permite al usuario definir el entorno de trabajo de su SCADA,


adaptándolo a la aplicación particular que se desea desarrollar.

Interfaz gráfico del operador: proporciona al operador las funciones de control y


supervisión de la planta. El proceso se representa mediante sinópticos gráficos
almacenados en el ordenador de proceso y generados desde el editor
incorporado en el SCADA o importados desde otra aplicación durante la
configuración del paquete.

Módulo de proceso: ejecuta las acciones de mando pre programadas a partir de


los valores actuales de variables leídas.

Gestión y archivo de datos: se encarga del almacenamiento y procesado


ordenado de los datos, de forma que otra aplicación o dispositivo pueda tener
acceso a ellos.

Comunicaciones: se encarga de la transferencia de información entre la planta y


la arquitectura hardware que soporta el SCADA, y entre ésta y el resto de
elementos informáticos de gestión.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 10


Departamento de control
CNAD
CONTROL AUTOMÁTICO

1.3 GRAFCET

El GRAFCET nació como resultado de los trabajos de la AFCET, iniciados en la


década de los setenta. En principio se pretendía satisfacer la necesidad de
disponer de un método de descripción de procesos, con total independencia de
la tecnología, mediante un gráfico funcional que pudiera ser interpretado por no
especialistas en automatización. El gráfico funcional permite unificar la forma de
descripción del proceso para técnicos de distintos campos, desde el ingeniero de
organización o de producción, que define las necesidades del automatismo,
pasando por el de diseño, que debe implementar el sistema de control y los
accionamientos, hasta el técnico de mantenimiento, que debe cuidar de su
funcionalismo o introducir modificaciones en la fase de explotación.

A partir de 1977 y gracias a la colaboración entre AFCET y ADEPA (Agence


pour le Developpement de la Productique Appliquée) se crearon una serie de
útiles metodológicos, entre los que destaca el GEMMA (Guide d'Étude des
Modes de Marche et Arrét), para apoyar el GRAFCET como método no sólo
descriptivo, sino como herramienta de diseño. En 1982 el trabajo fue recogido
por un grupo de trabajo de AFNOR, organismo encargado de la normalización
en Francia, compuesto por miembros de UTE, CNOMO, UNM y de otros
organismos relacionados con la industria, la automatización y la enseñanza
culminado con la publicación de la Norma NF C03-1904. Esta norma fue también
adoptada por IEC en 1988, con el número IEC-848 y título «Établissement des
diagrammes fonctionneis pour systémes de commande»

En la actualidad, diversos autómatas programables incorporan algunas


instrucciones de programación que permiten introducir directamente el grafo de
GRAFCET. En otros casos se dispone de software capaz de compilar un grafo
GRAFCET al lenguaje de la máquina, permitiendo en ambos casos una gran
flexibilidad y rapidez de diseño, con ventajas sustanciales en las fases de
verificación, explotación o eventual modificación del automatismo. A pesar de
ello no debe confundirse el GRAFCET con un lenguaje de programación. El
gráfico funcional, complementado con los métodos del álgebra de Boole, permite
ir más allá de la simple descripción e interpretación gráfica de un proceso y se
ha convertido en una potente herramienta de diseño de sistemas lógicos, con
unas reglas bastante simples.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 11


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Diseño basado en GRAFCET

Los principios que inspiraron la creación del GRAFCET y en los que se basa su
aplicación son los siguientes:

a) Debe caracterizarse el funcionamiento del automatismo con total


independencia de los componentes con los que vaya a ser construido. Esto
equivale a centrar nuestro interés no tanto en la estructura física o en la
tecnología empleada para implementar el automatismo, sino en la «función» que
debe realizar.

b) El conjunto de un sistema automático se divide en dos partes: parte de


control (PC) y parte operativa (PO). La parte de control compren de todo aquello
que contribuye a la automatización del proceso y la par te operativa incluye el
resto del mismo. El conjunto está relacionado con el medio exterior a través de
un diálogo con el operador y comunicación con otros automatismos que operen
en el mismo contexto.

c) El elemento fundamental de un proceso es la «operación» (denominada


etapa en el lenguaje de GRAFCET), entendiendo como tal una acción
realizada por el automatismo. Obsérvese que en una primera aproximación
podemos dividir el proceso en unas pocas operaciones relativamente complejas
(por ejemplo: taladrar, roscar, cambiar herramienta, etc.), llamadas también
macroetapas.

Estas operaciones complejas podrán ser subdivididas a su vez en operaciones


más elementales a medida que avanzamos en el nivel de de talle. Por ejemplo,
una operación de taladrar puede subdividirse en otras más elementales como:
impulsar pieza, bloquear pieza, giro de broca, aproximación de broca, etc.

d) Debe dividirse el proceso en macroetapas y éstas en etapas más


elementales, hasta conseguir que las acciones a realizar en cada una de ellas
dependan sólo de relaciones combinacionales entre entradas y salidas. Cada
una de estas etapas elementales tendrá asociada una variable de estado.

e) Establecer un gráfico de evolución que indique la secuencia de operaciones


(secuencia de etapas) y las condiciones lógicas para pasar de una a otra
(denominadas condiciones de transición en el lenguaje de GRAFCET). Como
resultado de esta fase se obtienen las ecuaciones lógicas de las variables de
estado y, por tanto, queda resuelta la parte secuencial del automatismo.

f) Establecer para cada operación elemental (etapa) las relaciones lógicas


entre las entradas y salidas, utilizando eventualmente otras variables internas
combinacionales.

g) Finalmente, implementar el sistema utilizando tantos biestables como

Antología elaborada por. M. en C. Bautista Quintero Ricardo 12


Departamento de control
CNAD
CONTROL AUTOMÁTICO

variables de estado y cableando o programando las relaciones lógicas obtenidas


en las fases e y f.

Ejemplo:

Basándose en la figura siguiente desarrolle el control basado en GRAFCET para


resolver la siguiente secuencia, vea la figura siguiente para elaborar un
programa que alimente las piezas de un almacén y sean transportadas dando un
giro de 90 grados.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 13


Departamento de control
CNAD
CONTROL AUTOMÁTICO

El proceso del sistema entonces se presenta como una sucesión de etapas


indicando al lado las acciones de control y entre dichas acciones las condiciones
de transición.

Esta secuencia se traduce en accionamientos que se especifican con bloques


que dependen de los sensores, los que a continuación se muestran en forma
resumida.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 14


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Cuando se aplican las técnicas del GRAFCET a la solución de procesos


complejos, se empieza por representar un diagrama con las líneas principales a
ejecutar en el proceso, definiendo grandes bloques de acciones denominados
macroetapas y sin desarrollar los detalles del proceso.

El símbolo para representar una macroetapa es un cuadrado dividido en tres


partes. En una de las partes puede colocarse un número, en otra la identificación
de la macro y en la tercera una etiqueta.

Las macroetapas representan, pues, «tareas» y equivalen a lo que en ciertos


lenguajes se define como «macros».

Desde un punto de vista formal, una macroetapa no es más que un conjunto


posteriormente, en lo que se conoce como representación en detalle o
expansión de la macroetapa.

Dentro de las estructuras básicas de GRAFCET existen tres tipos que resuelven
la mayoría de los problemas secuenciales de la industrial:

• Secuencia Lineal
• Convergencia y divergencia “OR” (Subprocesos alternativos)
• Convergencia y divergencia “AND” (Subprocesos simultáneos)

La secuencia lineal es la estructura más simple posible dentro del GRAFCET y


consiste en una sucesión de etapas unidas consecutivamente por las líneas de
evolución y condiciones de transición, tal como se observo en el ejemplo del
alimentador de material.

Divergencia y convergencia OR

La divergencia y convergencia OR, a las que llamaremos conjuntamente


bifurcación en «O», forman una estructura en la que existen los siguientes
elementos:

1) Una divergencia OR, en la que se inician varios caminos o subprocesos


alternativos posibles.
2) Con una macro estructura lineal, aunque puede contener otras estructuras
más complejas.
3) Una serie o mas confluencias en OR de dichos caminos alternativos, de tal
forma que la macro estructura debe ser cerrada.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 15


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Divergencia y convergencia AND

La divergencia y convergencia AND, a las que llamaremos conjuntamente


bifurcación AND, forman una estructura en la que existen los siguientes
elementos:

1) Una divergencia AND en la que se inician varios caminos o subprocesos que


deben iniciarse simultáneamente cuando se cumpla una determinada
condición de transición común.

2) Una serie de caminos simultáneos con una macro estructura lineal, aunque
pueden contener otras estructuras más complejas. Una o más confluencias
AND de dichos caminos, de manera que la macro estructura debe ser global
mente cerrada.

Ejemplo:

Como se puede observar en la figura anterior existen tres estaciones para las
cuales existen tres procesos que se pueden resolver de manera independiente y
sólo existe una condición para iniciar este proceso la cual será mostrada por el
instructor empleando la divergencia AND.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 16


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Como se pudo apreciar el uso de GRAFCET permite al programador


desconcentrar una secuencia grande en pequeños trozos específicos de
codificación de tal manera que la programación de las secuencias tiende a ser
más simple.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 17


Departamento de control
CNAD
CONTROL AUTOMÁTICO

2. Lenguaje de programación C.

El lenguaje C fue inventado por Dennis Ritchie en 1972, cuando trabajaba junto
con Ken Thompson, en el diseño del sistema operativo UNIX.

El lenguaje C, deriva del lenguaje B de Thompson, el cual, a su vez, deriva del


lenguaje BCPL desarrollado por Martín Richards

Algunas características del lenguaje C, son las siguientes:

Es un lenguaje de propósito general. Este lenguaje se ha utilizado para el


desarrollo de aplicaciones tan dispares como: hojas de cálculos, gestores de
bases de datos, compiladores, sistemas operativos, etc.

Es un lenguaje de nivel medio. Este lenguaje permite programar a alto nivel


(pensando a nivel lógico y no en la máquina física) y a bajo nivel (con lo que se
puede obtener la máxima eficiencia y un control absoluto de cuanto sucede en
el interior del ordenador).

C, es un lenguaje portátil. Los programas escritos en este lenguaje son


fácilmente transportables a otros sistemas.

Es un lenguaje potente y eficiente. Usando C, un programador puede casi


alcanzar la eficiencia del código ensamblador junto con la estructura del Algol o
Pascal

Los pasos a seguir desde el momento que se comienza a escribir el programa C


hasta que se ejecuta son los siguientes:

1.- Escribirlo en un editor.


2.- Compilarlo en un compilador.
3.- Enlazarlo en un enlazador.
4.- Ejecutarlo.

En programación, la experiencia es el gran maestro. Por ello es conveniente


empezar a hacer programas en C, cuanto antes. A continuación se van a
presentar varios programas completos en C, muy sencillos para ir
familiarizándose en la programación de este lenguaje.

/*****************************************************/
Antología elaborada por. M. en C. Bautista Quintero Ricardo 18
Departamento de control
CNAD
CONTROL AUTOMÁTICO

/********* PRIMER PROGRAMA C ************/


/*****************************************************/

#include <stdio.h>"
main ()
{
printf ("Hola mundo");
}

Tipos de datos

Existen cinco tipos de datos básicos en C:

Tabla 2.1 Tipos de datos

Tipo Descripción Longitud en bytes Rango


char Carácter 1 0 a 255
int Entero 2 -32768 a 32767
float Flotante 4 -2147483648 a
2147483647
doubl flotante de doble 8 -
e precisión 9223372036854775808
a
9223372036854775807
void sin valor 0 -

La longitud en bytes, y por consiguiente, también el rango, de la tabla anterior,


dependen de cada tipo de procesador y de cada compilador de C. No obstante,
la información reseñada en la tabla es correcta para la mayoría de los
ordenadores.

A continuación se muestra un ejemplo del uso de los diferentes tipos de


variables:

#include <stdio.h>

void main (void)


{
int i = 1;
char c = 'c';
float f = 1.0;
double d = 1e-1;
printf (" i = %d\n c = %c\n f = %f\n d = %lf\n", i, c, f, d);
getch ();
}

Antología elaborada por. M. en C. Bautista Quintero Ricardo 19


Departamento de control
CNAD
CONTROL AUTOMÁTICO

La salida de este programa es:

i=1
c=c
f = 1.000000
d = 0.100000

Como se puede observar en el programa, se puede asignar un valor a una


variable en el momento de la declaración.

Tabla 2.2 tipos de variables y sus asignaciones

Tipo Longitud en bytes Rango


char 1 Caracteres ASCII
unsigned char 1 0 a 255
signed char 1 -128 a 127
int 2 -32768 a 32767
unsigned int 2 0 a 65535
signed int 2 Igual que int
short int 1 -128 a 127
unsigned short int 1 0 a 255
signed short int 1 Igual que short int
long int 4 -2147483648 a 2147483649
signed long int 4 -2147483648 a 2147483649
unsigned long int 4 0 a 4294967296
float 4 Aproximadamente 6 dígitos de
precisión
double 8 Aproximadamente 12 dígitos
de precisión
long double 16 Aproximadamente 24 dígitos
de precisión

Operadores

Los operadores en C se pueden dividir en cuatro grupos:"


a) Operadores aritméticos.
b) Operadores relacionales y lógicos.
c) Operadores a nivel de bits.
d) Operadores especiales.

Los operadores aritméticos realizan operaciones aritméticas. Son los siguientes:

Operador Acción

Antología elaborada por. M. en C. Bautista Quintero Ricardo 20


Departamento de control
CNAD
CONTROL AUTOMÁTICO

- Resta, también menos monario


+ Suma, también suma monario
* Multiplicación
/ División
% División en módulo
-- Decremento
++ Incremento

Tabla 2.3 Operadores aritméticos

Los operadores de incremento y decremento solo se pueden aplicar a variables,


no constantes. El de incremento añade 1 a su operando y el de decremento
resta 1. En otras palabras, ++x; o x++; es lo mismo que x = x + 1; y --x; o x--; es
lo mismo que x = x - 1;

Los operadores de incremento y decremento pueden preceder o seguir al


operando. Si el operador precede al operando, C lleva a cabo la operación antes
de utilizar el valor del operando. Si el operador sigue al operando, C utilizar su
valor antes de incrementarlo o decrementarlo. Esto se ve muy bien en los dos
ejemplos siguientes:

int x, y; int x, y;
x = 2; x = 2;
y = ++x; y = x++;
/* ahora x tiene el valor 3 /* ahora x tiene el valor 3
e y tiene el valor 3 */ e y tiene el valor 2 */

Los operadores del mismo nivel de precedencia son evaluados por el compilador
de izquierda a derecha. Se puede alterar el orden de evaluación utilizando
paréntesis.

Ejemplo:

void main (void)


{
int x1, x2, x3, x4, x5, x6;

/* Asignaciones */ /* Orden de asignaciones */

x1 = 2 + 3 * 4; /* x1 = 14; */
x2 = (2 + 3) * 4; /* x2 = 20; */
x3 = -4 - (-1); /* x3 = -3; */
x4 = 10 / 2 % 3; /* x4 = 2; */
x5 = ++x3 - x4; /* x3 = -2; x5 = -4; */
x6 = x3++ - x4; /* x6 = -4; x3 = -1; */
x1 = -x1; /* x1 = -14; */
x2 = (x1 + x2) / x3; /* x2 = -6; */
Antología elaborada por. M. en C. Bautista Quintero Ricardo 21
Departamento de control
CNAD
CONTROL AUTOMÁTICO

x3 = ((x1++) + (x2++)) - x3; /* x3 = -19; x1 = -13; x2 = -5; */


x4 = -(-(-x3)); /* x4 = 19; */
x5 = (x6 * x6 + x6 / x6); /* x5 = 17; */
x6 = (x1++) + (++x2) - (++x6); /* x2 = -4; x6 = -3; x6 = -14; x1 = -12; */
x1++; /* x1 = -11; */
--x2; /* x2 = -5; */
}

Operadores relacionales y lógicos

La palabra relacional se refiere a la relación entre unos valores y otros. La palabra lógico
se refiere a las formas en que esas relaciones pueden conectarse entre sí.
Los operadores se basan en la idea de cierto (true en inglés) y falso (false en inglés). En
C, cualquier valor distinto de cero es cierto, y el valor 0 es falso. Las expresiones que son
ciertas toman el valor de 1 y las que son falsas toman el valor de 0.

Los operadores son:

Operadores relacionales Operadores lógicos


Operador Acción Operador Acción
> Mayor que && Y
>= Mayor o igual que || O
< Menor que ! NO
<= Menor o igual que
== Igual
!= No igual

Tabla 2.4 Operadores aritméticos y lógicos

Ejemplo:
void main (void)
{
int x1, x2, x3, x4, x5, x6;"

/* Asignaciones */ /* Orden de asignaciones */

x1 = 10 < 12; /* x1 = 1; */
x2 = 10 > 12; /* x2 = 0; */
x3 = -1 && 5; /* x3 = 1; */
x4 = 0 || x3; /* x4 = 1; */
x5 = x1 >= x2 <= x3; /* x5 = 1; */
x6 = x1 == x2 || x3 != x4; /* x6 = 0; */
x1 = !x1; /* x1 = 0; */
x2 = ! (!x1 || x3 <= x3); /* x2 = 0; */
x3 = 1 && 0; /* x3 = 0; */
x4 = 1 || 0; /* x4 = 1; */
x5 = !(-10); /* x5 = 0; */
x6 = !!x4; /* x6 = 1; */
Antología elaborada por. M. en C. Bautista Quintero Ricardo 22
Departamento de control
CNAD
CONTROL AUTOMÁTICO

}
Operadores a nivel de bits

Estos operandos realizan operaciones sobre los bits de un byte o una palabra
(dos bytes). Solo se pueden utilizar con los tipos char e int. Estos operadores
son:
Operador Acción
& Y
| O
^ O exclusiva (XOR)
~ Complemento (NOT)
>> Desplazamiento a la derecha
<< Desplazamiento a la
izquierda

Signifiquemos que los operadores relacionales y lógicos siempre producen un


resultado que es 0 ó 1, mientras que las operaciones entre bits producen
cualquier valor arbitrario de acuerdo con la operación específica. En otras
palabras, las operaciones a nivel de bits pueden dar valores distintos de 0 ó 1,
pero los operadores lógicos siempre dan 0 ó 1.

2.1 Sentencias

C posee dos sentencias condicionales: if y switch. Estas dos sentencias


permiten hacer algoritmos con toma de decisión bajo argumentos de tipo
condición, es decir, bifurcar en un programa a partir de una o mas condiciones.
Existen dos tipos de sentencias como se mencionó, la primera es la if que
permite bifurcar bajo una sola condición. Mientras que la secuencia switch es
para multiples condiciones.

Sentencia if

if ( expresión )
sentencia
o

if (expresión)
sentencia_1
else sentencia_2

Si expresión es cierta se ejecuta la sentencia correspondiente al if. Si expresión


es falsa se

Antología elaborada por. M. en C. Bautista Quintero Ricardo 23


Departamento de control
CNAD
CONTROL AUTOMÁTICO

ejecuta la sentencia correspondiente al else si lo hay. En la segunda sintaxis se


ejecuta sentencia_1 o sentencia_2, pero nunca ambas.

Ejemplos:

if (contador < 50) if (x < y) if (ch == '\n')

Al ser la sentencia if una sentencia simple, la sentencias if se pueden anidar:


/*
A la variable numero_menor se le asigna la
variable con menor valor entre x, y, z
*/

if (x <= y)
if (x <= z)
numero_menor = x;
else
numero_menor = z;
else
if (y <= z)
numero_menor = y;
else
numero_menor = z;

El else siempre está asociado al if más cercano. Los dos siguientes ejemplos
son distintos:
/**** Ejemplo 1: ****/
if (n > 0)
if (a > b)
z = a;
else
z = b;

/**** Ejemplo 2: ****/


if (n > 0)
{
if (a > b)
z = a;
}
else
z = b;

Antología elaborada por. M. en C. Bautista Quintero Ricardo 24


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Sentencia switch

switch (expresión)
{
case expresión_constante_1:
sentencias_1
break;
case expresión_constante_2:
sentencias_2
break;
case expresión_constante_3:
sentencias_3
break;
.
.
.
default:
sentencias_n
}

Una expresión constante es una expresión en la que todos los operandos son
constantes.
El switch evalúa expresión. A continuación evalúa cada una de las expresiones
constantes hasta que encuentra una que coincida con expresión. Cuando la
encuentra ejecuta las sentencias correspondientes a ese case. Si no hay
ninguna expresión case que coincida con expresión, se ejecuta las sentencias
correspondientes al default.

Ejemplo:

switch (operando)
{
case 1:
x=x * y; break;
case 2:
x=x / y; break;
case 3:
x=x + y; break;
case 4:
x=x- y; break;
default:
printf ("ERROR");
}

Antología elaborada por. M. en C. Bautista Quintero Ricardo 25


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Observaciones

1) La sentencia default es opcional. Si fallan todas las comprobaciones de los


case y no hay default, no se ejecuta ninguna acción en el switch. Incluso el
default puede ir en cualquier posición y no obligatoriamente al final.
2) Las sentencias break en el switch son opcionales. El break hace que se
produzca una salida inmediata de la instrucción switch. Si no hay una sentencia
break en un case, al ejecutarse las sentencias que corresponden a ese case,
también se ejecutarían las sentencias correspondientes al siguiente case y así
sucesivamente hasta encontrar un break o llegar al final del switch. La sentencia
break puede ir en cualquier sitio, no forzosamente al final de las sentencias de
los case.

Sentencias iterativas

Los bucles o sentencias iterativas permiten que un conjunto de instrucciones


sea ejecutado hasta que se alcance una cierta condición. Las sentencias
iterativas son: while, for y do.

Sentencia while

Sintaxis

while (expresión) sentencia

Descripción

Se evalúa expresión. Si es cierta, se ejecuta sentencia y se vuelve a evaluar


expresión. El ciclo continúa hasta que expresión es falsa, momento en que la
ejecución continúa con lo que está después de sentencia.

Ejemplo:

While(conta<10)
{
gotoxy(10,10);
printf(“El contador es:%d”,conta);
conta++;
delay(300);
}

En este ejemplo el valor del contador se incrementa y despliega en la pantalla


mientras sea menor de 10. La función gotoxy manda poner la variable conta en
la posición 10, 10 y la función delay es un función de retardo y su argumento

Antología elaborada por. M. en C. Bautista Quintero Ricardo 26


Departamento de control
CNAD
CONTROL AUTOMÁTICO

esta dado en milisegundos, es decir, para este caso el retardo es de 0.3 de


segundo.

Sentencia for

for (expresión_1; expresión_2; expresión_3) sentencia

Descripción

En la sentencia for, a expresión_1 se le llama inicialización, a expresión_2 se le


llama condición, y a expresión_3 se le llama incremento.

Ejemplo:

#include <stdio.h>

void main (void)

{
int i;

for(i=0;i<100;i++)
{
printf(“Variable i=%d”,i);
}
}

Observación

La instrucción:
for (;;)
sentencia; es un bucle infinito. Sin embargo, aunque en este bucle no es posible
salir por la condición del for, se puede salir por otros medio (por ejemplo,
mediante la sentencia break.

Sentencia do

Sintaxis

do
sentencia
while (expresión);

Antología elaborada por. M. en C. Bautista Quintero Ricardo 27


Departamento de control
CNAD
CONTROL AUTOMÁTICO

En la instrucción do, primero se ejecuta sentencia y a continuación se evalúa


expresión. En caso de ser cierta, se ejecuta sentencia de nuevo y así
sucesivamente. La iteración termina cuando la expresión se convierte en falsa.

EJEMPLO: Imprime los 50 primeros números naturales

#include <stdio.h>

void main (void)


{
int i = 1;
do
{
printf ("%d ", i++);
} while (i <= 50);
}

Observación

Las llaves en el ejemplo anterior no son necesarias al tratarse de una sola


sentencia; pero en el caso de la sentencia do, es recomendable que siempre se
ponga las llaves para hacer el programa más legible (para el lector, no para el
compilador).

En esta lección se ha estudiado las mas importantes sentencias de control de


programa que posee el C. Entre ellas se incluyen los constructores de bucles
while, for y do, las sentencias condicionales if y switch.

Conjunto ordenado de variables (arrays)

Los arreglos ó conjuntos de datos ordenados (arrays) recolectan variables del


MISMO tipo, guardándolas en forma secuencial en la memoria. La cantidad
máxima de variables que pueden albergar está sólo limitada por la cantidad de
memoria disponible. El tipo de las variables involucradas puede ser cualquiera
de los ya vistos, con la única restricción de que todos los componentes de un
array deben ser del mismo tipo.

La declaración de un array se realiza según la siguiente sintaxis:


tipo de las variables nombre[ cantidad de elementos];

Por ejemplo:

int var1[10];
char nombre[50];

Antología elaborada por. M. en C. Bautista Quintero Ricardo 28


Departamento de control
CNAD
CONTROL AUTOMÁTICO

float numeros[200];
long double cantidades[25];

Si en el primer caso, se declara un array de 10 variables enteras, cada una de


ellas quedará individualizada por el subíndice que sigue al nombre del mismo es
decir:

var1[0], var1[1], etc, hasta var1[9].

Nótese que la CANTIDAD de elementos es 10, pero su numeración va de 0 a 9,


y no de 1 a 10. En resumen un array de N elementos tiene subíndices válidos
entre 0 y N - 1. Cualquier otro número usado como subíndice, traerá datos de
otras zonas de memoria, cuyo contenido no es conocido.

Se puede referenciar a cada elemento, en forma individual, tal como se ha hecho


con las variables anteriormente, por ejemplo:

var1[5] = 40;
contador = var1[3] + 7;
if(var1[0] >>= 37)

También es posible utilizar como subíndice expresiones aritméticas, valores


enteros retornados por funciones, etc. Así podría escribir:

printf(" %d ", var1[ ++i] );


var1[8] = var1[ i + j ];
...............................
int una_funcion(void);
var1[0] = var1[ una_funcion() ] * 15;

Por supuesto los subíndices resultantes de las operaciones tienen que estar
acotados a aquellos para los que el array fue declarado y ser enteros. La
inicialización de los arrays sigue las mismas reglas que vi para los otros tipos de
variables, es decir: Si se declaran como globales ( afuera del cuerpo de todas las
funciones ) cada uno de sus elementos será automáticamente inicializado a
cero. Si en cambio, su declaración es local a una función, no se realiza ninguna
inicialización, quedando a cargo del programa cargar los valores de inicio.

La inicialización de un array local, puede realizarse en su declaración, dando una


lista de valores iniciales:

int numero[8] = { 4, 7, 0, 0, 0, 9, 8, 7 };

Obsérvese que la lista está delimitada por llaves. Otra posibilidad, sólo válida
cuando se inicializan todos los elementos del array, es escribir:

Antología elaborada por. M. en C. Bautista Quintero Ricardo 29


Departamento de control
CNAD
CONTROL AUTOMÁTICO

int numero[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

Donde se obvia la declaración de la cantidad de elementos, ya que está implícita


en la lista de valores constantes. También se puede inicializar parcialmente un
array, por ejemplo:

int numero[10] = { 1, 1, 1 };

En éste caso los tres primeros elementos del mismo valdrán 1, y los restantes
cero en el caso que la declaración sea global, ó cualquier valor impredecible en
el caso de que sea local.

Conjunto ordenado de caracteres (strings)

Los strings son simplemente arrays de caracteres, con el agregado de un último


elemento constante: el caracter NULL ( ASCII == 0, simbolizado por la secuencia
de escape \0 ). Este agregado permite a las funciones que procesan a los
mismos determinar fácilmente la finalización de los datos. Podemos generar un
string, declarando:

char car_str[] = { 'A', 'B', 'C', 'D', 0 };


char car_str[] = { 'A', 'B', 'C', 'D', '\0' };

Ambas maneras son equivalentes. Sin embargo hay, en el lenguaje C, una forma
más compacta de declararlos:

char car_str[] = "ABCD";


char car_str[5] = "ABCD";
int texto[] = "renglon 1 \n renglon 2 \n "; /* ERROR */
unsigned char texto[] = "renglon 1 \n renglon 2 \n ";

Simplemente en la declaración del mismo se encierran los caracteres que lo


componen entre comillas. Obsérvese que en la segunda declaración, se ha
explicitado ( no es necesario ), la cantidad de elementos que tiene el string, y es
uno más que la cantidad de caracteres con que se inicializa, para dejar lugar al
NULL. Todas éstas declaraciones agregan automáticamente el NULL como
último elemento del array.

Un caso interesante es él de la tercer línea ( comentada como ERROR ), con el


fin de poder albergar al caracter "\n"20( ASCII 179 ) se intentó asignar el string a
un array de enteros, Esto no es permitido por el compilador, que lo rechaza
como una asignación inválida.

La razón de ello se verá más adelante cuando se analicen punteros, ya que el


string constante usado como rvalue es un puntero a char, y no a int. La solución

Antología elaborada por. M. en C. Bautista Quintero Ricardo 30


Departamento de control
CNAD
CONTROL AUTOMÁTICO

mas común para este caso es, declarar el array como unsigned char, con lo que
se lleva el alcance de sus elementos a 255. Para el caso de tener que albergar
en un string el caracter EOF ( -1 ) y al mismo tiempo caracteres con ASCII mayor
que 127, se podría definir el array como int, pero su inicialización se tendrá que
hacer obligatoriamente usando llaves, como se vio anteriormente. Se deduce
entonces, de lo antedicho que un string sigue siendo un array de caracteres, con
la salvedad del agregado de un terminador, por lo que las propiedades que se
estudiarán a continuación, se aplicaran indistintamente a ambos.

Arrays y strings como argumentos de funciones

Los arrays, como todos los otros tipos de variables, pueden ser pasados como
argumentos a las funciones. Vea esquemáticamente como sería la sintaxis:

double funcion_1(float numeros[10], char palabra[]); /*linea 1*/


main() /*linea 2*/
{
float numeros[10] = { 1.1, 2.2, 3.0 }; /*linea 3*/
char palabra[] = " Lenguaje C "; /*linea 4*/
double c; /*linea 5*/
c = funcion_1( numeros, palabra ) /*linea 6*/
}
double funcion_1( float numeros[10], char palabra[])/*linea 7*/

Es necesario analizar con mucho detenimiento, este último ejemplo. En la primer


línea se declara el prototipo de funcion_1() que recibe como argumentos dos
arrays, uno de 10 elementos del tipo float, y otro de caracteres de longitud
indeterminada.

En el primer caso la función necesitará saber de alguna manera cual es la


longitud del array numérico recibido, mientras que en el segundo, no hace falta,
ya que la función puede ser construida para que, por sí misma, detecte la
finalización del string por la presencia del caracter NULL. Se podría generalizar
más el programa declarando:

double funcion_1( double numeros[], int longitud_array, char palabra[]);

En donde, en la variable longitud_array se enviaría la cantidad de elementos de


numero[].En la tercer línea se declara el array numérico, inicializándose sólo los
tres primeros elementos, y en la cuarta línea se declara el string. En la séptima
línea se da la definición de la función, de acuerdo al prototipo escrito
anteriormente. Si al mirar con detenimiento la sexta línea, el llamado a la
función, se nota que los argumentos pasados sólo tienen el NOMBRE de ambos
arrays. Esta es la diferencia más importante entre este tipo de estructura de

Antología elaborada por. M. en C. Bautista Quintero Ricardo 31


Departamento de control
CNAD
CONTROL AUTOMÁTICO

datos y las variables simples vistas anteriormente, ya que los arrays son
pasados a las funciones por DIRECCION y no por valor.

En el lenguaje C se prefiere, para evitar el uso abusivo del stack, cuando hay
que enviar a una función una larga estructura de datos, en lugar de copiar a
todos ellos, cargar el stack sólo con la dirección de la posición de memoria
donde está ubicado el primero. El nombre de un array equivale sintácticamente a
la dirección del elemento cero así será:

numero == dirección de numero[0]


palabra == dirección de palabra[0]

Esto habilita a las funciones a que puedan acceder a los arrays directamente, allí
donde el programa los ha ubicado en la memoria, por lo que pueden
MODIFICARLOS EN FORMA PERMANENTE aunque no hayan sido declarados
como locales a la función misma ni globales al programa.

Es muy importante recordar este último concepto, a fin de evitar errores muy
comunes, en los primeros intentos de programación en C. Otra característica
importante de los arrays es que, su nombre ( ó dirección del primer elemento )
es una CONSTANTE y no una variable. El nombre de los arrays implican para el
compilador el lugar de memoria donde empieza la estructura de datos por lo que,
intentar cambiar su valor es tomado como un error, así si escribiera por ejemplo:

char titulo[] = "Primer titulo";


....................................
titulo = "subtitulo";

La primer sentencia es correcta, ya que esta inicializando al string, pero la


segunda produciría un error del tipo " LVALUE REQUERIDO ", es decir que el
compilador espera ver, del lado izquierdo de una expresión, a una variable y en
cambio se ha encontrado con una constante título (ó sea la dirección de
memoria donde está almacenada la P de "Primer título"). Esto al compilador le
suena similar a una expresión de la clase: 124 = j y se niega rotundamente a
compilarla.

Arrays multidimensionales.

Las estructuras de datos del tipo array pueden tener más de una dimensión, es
bastante común el uso de arrays "planos" ó matriciales de dos dimensiones, por
ejemplo:

int matriz[ número total de filas ] [ número total de columnas ];

Si declara:

Antología elaborada por. M. en C. Bautista Quintero Ricardo 32


Departamento de control
CNAD
CONTROL AUTOMÁTICO

int matriz[3][4];

Esquemáticamente la disposición "espacial" de los elementos seria:

columnas: 0 1 2 3

filas 0 [0][0] [0][1] [0][2] [0][3] matriz[0][]

1 [1][0] [1][1] [1][2] [1][3] matriz[1][]

2 [2][0] [2][1] [2][2] [2][3] matriz[2][]

Por supuesto, aunque menos usados, se pueden generar arrays de cualquier


número de dimensiones. Para inicializar arrays multidimensionales, se aplica
una técnica muy similar a la ya vista, por ejemplo para dar valores iniciales a un
array de caracteres de dos dimensiones, se escribirá:

char dia_de_la_semana[7][8] = {
"lunes", "martes", " miercoles",
"jueves", "viernes", "sábado",
"domingo"
};

En este caso el elemento [0][0] será la "l" de lunes, el [2][3] la "r" de miércoles,
el [5][2] la "b" de sábado, etc. Nótese que los elementos [0][5], [1][6], etc. están
inicializados con el caracter NULL y demás [0][6] y [0][7], etc. no han sido
inicializados. Si le parece que en este párrafo se nos escapó un error, está
equivocado, lo que ocurre es que se olvidó de contar los índices desde 0. Este
último ejemplo también podría verse como un array unidimensional de strings.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 33


Departamento de control
CNAD
CONTROL AUTOMÁTICO

2.2 Funciones de entrada y salida

Para poder mandar datos a los puertos de la computadora personal, existen


diversas instrucciones dentro del lenguaje “C”, como son las siguientes:

• inp Lee un byte de un puerto del hardware.


• outp Saca un byte a un puerto de hardware.

Declaración:

• int inp(unsigned portid);


• int outp(unsigned portid, int value);

Observaciones:

Las instrucciones inp y inpw son macros que leen del puerto de entrada
especificado por portid.

Las instrucciones outp y outpw son macros que escriben a la salida del puerto
especificado por portid.

inp Lee un byte


outp Saca el byte más bajo del dato.

Valor de Retorno:

inp Regresan el valor Leído


outp Regresan el parámetro "value".

Configuración de puertos de e/s

Para poder manipular los bits de los puertos de entrada y salida, usaremos la
estructura normal de programación de C.

Primero se verá el manejo de las instrucciones inp y outp, para el caso de leer
un puerto y sacar un dato por un puerto de salida.

Para el puerto paralelo de una PC se proporciona la información de cómo


acceder a los puertos y en el apéndice B se encuentran algunos programas que
serán útiles para el producto de aprendizaje de este curso.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 34


Departamento de control
CNAD
CONTROL AUTOMÁTICO

PORT_OUT (Registro de datos) dirección base


Nombre de Estado
Bit Pin DB25 Pin centronics
señal invertido
0 2 Data bit 0 No 2
1 3 Data bit 1 No 3
2 4 Data bit 2 No 4
3 5 Data bit 3 No 5
4 6 Data bit 4 No 6
5 7 Data bit 5 No 7
6 8 Data bit 6 No 8
7 9 Data bit 7 No 9

PORT_IN (Registro de estado) dirección base+1


Nombre de Estado
Bit Pin DB25 Pin centronics
señal invertido
3 15 nError No 32
4 13 Select No 13
5 12 PaperEnd No 12
6 10 nAck No 10
7 11 Busy Si 11

PORT_CTRL (Registro de control) dirección base +2


Nombre de Estado
Bit Pin DB25 Pin centronics
señal invertido
0 1 nStrobe Si 1
1 14 NAutoLF Si 14
2 16 NInit No 31
3 17 nSelectIn Si 36

NOTA IMPORTANTE: La tierra de estas señales es del pin 18 al 25 en DB25, del pin 19
al 30, 33 centronics 17 tierra al chasis

Antología elaborada por. M. en C. Bautista Quintero Ricardo 35


Departamento de control
CNAD
CONTROL AUTOMÁTICO

3. ALGORITMOS DE CONTROL

Dentro del contexto de control automático existe un elemento importante que


determina el desempeño y la estabilidad de un sistema, este es el algoritmo de
control, el cual es una serie de estrategias matemáticas o heurísticas que su
objetivo es regular una o varios estados de un sistema en un vector de estados
deseado, es decir, proporcionar la salida de control para que un sistema
desarrolle una dinámica deseada, por ejemplo: El primer trabajo significativo de
control automático fue el regulador centrífugo de James Watt para el control de
la velocidad de una máquina de vapor. En la siguiente figura se puede apreciar
de forma intuitiva la manera de cómo funcionaba el regulador de Watt. El
algoritmo de control fundamentalmente esta diseñado a partir de una parte
proporcional de la velocidad de un motor de vapor, a medida que la velocidad
aumenta un par de medias esferas huecas giran a mayor velocidad, lo cual
produce que baje una palanca proporcionalmente hacia una válvula de caudal,
proporcionando un cambio en la posición de un pistón que cierra o abre el flujo
de combustible, con esto a medida que aumenta la velocidad el flujo de
combustible cesa, con esto y graduando la retroalimentación es posible
proporcionar regulación de velocidad dentro de un rango.

Como se puede observar esta fue la primera idea operativa sobre control
automático, esto inicio una gran secuela de desarrollo e implementación de
sistemas de control a lazo cerrado, y dentro de estos desarrollos se inicio el
estudio de algoritmos de control de diversas formas, es decir, las “recetas” de
control implementadas fueron dando a la comunidad científica una guía de que
se debía aplicar para los diversos sistemas. A partir de esto se intensifico los
trabajos de cómo modelar matemáticamente los procesos y los diversos
controladores, con esto se logro dar resultados importantes la estabilidad y la
observabilidad de sistemas dinámicos con el fin de mantener reguladas una o
varias variables.
Antología elaborada por. M. en C. Bautista Quintero Ricardo 36
Departamento de control
CNAD
CONTROL AUTOMÁTICO

3.1 Controladores PID

Uno de los algoritmos mas empleados en la industria es el tipo PID. El uso de


controles PID ha demostrado su efectividad, sin embargo no se tienen pruebas
de estabilidad en robots de juntas flexibles y mucho menos métodos de
sintonización. La sintonización de estos controladores se ha basado en criterios
experimentales. Estos criterios no tienen un sustento formal.

This part will show you the characteristics of the each of proportional (P), the
integral (I), and the derivative (D) controls, and how to use them to obtain a
desired response. In this analysis, we will consider the following unity feedback
system:

e(t)
R
Controller Plant
Y

Plant: A system to be controlled


Controller: Provides the excitation for the plant; Designed to control the
overall system behavior

The three-term controller

The transfer function of the PID controller looks like the following:
K
KP + I + KDs
s
1. KP = Proportional gain
2. KI = Integral gain
3. KD = Derivative gain

First, let's take a look at how the PID controller works in a closed-loop system
using the schematic shown above. The variable (e) represents the tracking error,
the difference between the desired input value (R) and the actual output (Y). This
error signal (e) will be sent to the PID controller, and the controller computes both
the derivative and the integral of this error signal. The signal (u) just past the
controller is now equal to the proportional gain (Kp) times the magnitude of the
error plus the integral gain (Ki) times the integral of the error plus the derivative
gain (Kd) times the derivative of the error.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 37


Departamento de control
CNAD
CONTROL AUTOMÁTICO

de(t )
u = K P e(t ) + K I  e(t )dt + K D
dt

This signal (u) will be sent to the plant, and the new output (Y) will be obtained.
This new output (Y) will be sent back to the sensor again to find the new error
signal (e). The controller takes this new error signal and computes its derivative
and its integral again. This process goes on and on.

The characteristics of P, I, and D controllers

A proportional controller (Kp) will have the effect of reducing the rise time and will
reduce ,but never eliminate, the steady-state error. An integral control (Ki) will
have the effect of eliminating the steady-state error, but it may make the transient
response worse. A derivative control (Kd) will have the effect of increasing the
stability of the system, reducing the overshoot, and improving the transient
response. Effects of each of controllers Kp, Kd, and Ki on a closed-loop system
are summarized in the table shown below.

S-S
CL RESPONSE RISE TIME OVERSHOOT SETTLING TIME
ERROR
Kp Decrease Increase Small Change Decrease
Ki Decrease Increase Increase Eliminate
Small
Kd Small Change Decrease Decrease
Change

Note that these correlations may not be exactly accurate, because Kp, Ki, and Kd
are dependent of each other. In fact, changing one of these variables can change
the effect of the other two. For this reason, the table should only be used as a
reference when you are determining the values for Ki, Kp and Kd.

Example Problem

Suppose we have a simple mass, spring, and damper problem.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 38


Departamento de control
CNAD
CONTROL AUTOMÁTICO

The modeling equation of this system is

•• •
m x + b x + Kx = F (1)

Taking the Laplace transform of the modeling equation (1)

Ms 2 X ( s) + bsX (s) + kX ( s) = F (s)

The transfer function between the displacement X(s) and the input F(s) then
becomes

X ( s) 1
=
F ( s ) Ms + bs + k
2

Let

M = 1kg
b = 10 N.s/m
k = 20 N/m
F(s) = 1

Plug these values into the above transfer function:

X (s) 1
= 2
F ( s ) s + 10s + 20

The goal of this problem is to show you how each of Kp, Ki and Kd contributes to
obtain

Fast rise time


Minimum overshoot
No steady-state error

Open-loop step response


Let's first view the open-loop step response. Create a new m-file and add in the
following code:

num=1;
den=[1 10 20];
step(num,den)

Running this m-file in the Matlab command window should give you the plot
shown below.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 39


Departamento de control
CNAD
CONTROL AUTOMÁTICO

The DC gain of the plant transfer function is 1/20, so 0.05 is the final value of the
output to a unit step input. This corresponds to the steady-state error of 0.95,
quite large indeed. Furthermore, the rise time is about one second, and the
settling time is about 1.5 seconds. Let's design a controller that will reduce the
rise time, reduce the settling time, and eliminates the steady-state error.

Proportional control
From the table shown above, we see that the proportional controller (Kp) reduces
the rise time, increases the overshoot, and reduces the steady-state error. The
closed-loop transfer function of the above system with a proportional controller is:

X (s) KP
= 2
F ( s ) s + 10s + (20 + K P )

Let the proportional gain (Kp) equals 300 and change the m-file to the following:

Kp=300;
num=[Kp];
den=[1 10 20+Kp];

t=0:0.01:2;
step(num,den,t)

Antología elaborada por. M. en C. Bautista Quintero Ricardo 40


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Running this m-file in the Matlab command window should gives you the
following plot.

Note: The Matlab function called cloop can be used to obtain a closed-loop
transfer function directly from the open-loop transfer function (instead of obtaining
closed-loop transfer function by hand). The following m-file uses the cloop
command that should give you the identical plot as the one shown above.

num=1;
den=[1 10 20];

Kp=300;

[numCL,denCL]=cloop(Kp*num,den);
t=0:0.01:2;
step(numCL, denCL,t)

The above plot shows that the proportional controller reduced both the rise time
and the steady-state error, increased the overshoot, and decreased the settling
time by small amount.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 41


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Proportional-Derivative control

Now, let's take a look at a PD control. From the table shown above, we see that
the derivative controller (Kd) reduces both the overshoot and the settling time.
The closed-loop transfer function of the given system with a PD controller is:

X (s) KDs + KP
= 2
F ( s ) s + (10 + K D ) s + (20 + K P )

Let Kp equals to 300 as before and let Kd equals 10. Enter the following
commands into an m_file and run it in the Matlab command window.

Kp=300;
Kd=10;
num=[Kd Kp];
den=[1 10+Kd 20+Kp];

t=0:0.01:2;
step(num,den,t)

This plot shows that the derivative controller reduced both the overshoot and the
settling time, and had small effect on the rise time and the steady-state error.

Proportional-Integral control
Before going into a PID control, let's take a look at a PI control. From the table,
we see that an integral controller (Ki) decreases the rise time, increases both the

Antología elaborada por. M. en C. Bautista Quintero Ricardo 42


Departamento de control
CNAD
CONTROL AUTOMÁTICO

overshoot and the settling time, and eliminates the steady-state error. For the
given system, the closed-loop transfer function with a PI control is:

X (s) KPs + KI
= 3
F ( s ) s + 10s + (20 + K P ) s + K I
2

Let's reduce the Kp to 30, and let Ki equals to 70. Create an new m-file and enter
the following commands.

Kp=30;
Ki=70;
num=[Kp Ki];
den=[1 10 20+Kp Ki];

t=0:0.01:2;
step(num,den,t)

Run this m-file in the Matlab command window, and you should get the following
plot.

We have reduced the proportional gain (Kp) because the integral controller also
reduces the rise time and increases the overshoot as the proportional controller
does (double effect). The above response shows that the integral controller
eliminated the steady-state error.

Proportional-Integral-Derivative control

Antología elaborada por. M. en C. Bautista Quintero Ricardo 43


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Now, let's take a look at a PID controller. The closed-loop transfer function of the
given system with a PID controller is:

X ( s) KDs2 + KPs + KI
= 3
F ( s) s + (10 + K D ) s 2 + (20 + K P ) s + K I

After several trial and error runs, the gains Kp=350, Ki=300, and Kd=50 provided
the desired response. To confirm, enter the following commands to an m-file and
run it in the command window. You should get the following step response.

Kp=350;
Ki=300;
Kd=50;

num=[Kd Kp Ki];
den=[1 10+Kd 20+Kp Ki];

t=0:0.01:2;
step (num,den,t)

Now, we have obtained the system with no overshoot, fast rise time, and no

steady-state error.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 44


Departamento de control
CNAD
CONTROL AUTOMÁTICO

GENERAL TIPS FOR DESIGNING A PID CONTROLLER

When you are designing a PID controller for a given system, follow the steps
shown below to obtain a desired response.

1. Obtain an open-loop response and determine what needs to be improved


2. Add a proportional control to improve the rise time
3. Add a derivative control to improve the overshoot
4. Add an integral control to eliminate the steady-state error
5. Adjust each of Kp, Ki, and Kd until you obtain a desired overall response.
You can always refer to the table shown in this "PID Tutorial" page to find
out which controller controls what characteristics.

Lastly, please keep in mind that you do not need to implement all three
controllers (proportional, derivative, and integral) into a single system, if not
necessary. For example, if a PI controller gives a good enough response (like the
above example), then you don't need to implement derivative controller to the
system. Keep the controller as simple as possible.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 45


Departamento de control
CNAD
CONTROL AUTOMÁTICO

3.3 Control de variables de estado

Dentro de los algoritmos de control automático empleado para sistemas de


varias variables es el control de retroalimentación de variables de estado, esta
técnica es ampliamente usada en sistemas espaciales y de navegación de
aviones y proyectiles, esta parte pretende mostrar con un ejemplo la
potencialidad del uso de sistemas de este tipo y compararlos con el PID y el
control de lógica difusa de la siguiente sección.

Torque
Voltaje Fricción
u T viscosa
[v] [N F
m] [N y[rad]
m]

Motor Load

La ecuación del sistema es la siguiente:

d2y dy
J 2
+c = ku
dt dt

Donde el torque T es: T = k u [Nm]

La fricción F es: F = c w[Nm]

y la inercia J es:
dy
 =
dt

Transformando esta ecuación a Laplace:

Js2Y + csY = kU

Antología elaborada por. M. en C. Bautista Quintero Ricardo 46


Departamento de control
CNAD
CONTROL AUTOMÁTICO

La función de transferencia de la ecuación es:

k
U Y
Js + cs
2

Esta función de trasferencia relaciona la posición del eje del motor y el voltaje
aplicado a este.

Si hacemos un control de lazo cerrado del sistema anterior tenemos lo siguiente:

R
E g
U
1
b1 Y
s + a1 s

Donde R es el valor deseado de la posición.

Simplificando:
Y ( s) b1 g
G( s) = = 2
R( s ) s + a1 s + b1 g

Donde:

a1 = c , b1 = k
J J

Así como se controló solamente la posición en el anterior diagrama de bloques,


también es posible hacer un doble lazo del retroalimentación para mantener mas
estable al sistema, esto se consigue controlando velocidad y posición al mismo
tiempo. A continuación se muestra dicho sistema de doble lazo de control.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 47


Departamento de control
CNAD
CONTROL AUTOMÁTICO

E U 1 Y
b1
R s
g s + a1

-
-
f

La función de trasferencia queda:


Y ( s) b1 g
G( s ) = = 2
R( s ) s + ( a1 + b1 f )s + b1 g

Como se puede observar es un sistema de segundo orden en donde el


denominador de su función de trasferencia de manera general es la siguiente:

s 2 + 2n s +  n
2

Por lo tanto sus polos estan situados:


s = − n   2 − 1  n

Cuando 0 1 el sistema oscila

Antología elaborada por. M. en C. Bautista Quintero Ricardo 48


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Ver gráficas de la respuesta al escalón unitario


-4
x 10
7

Amplitud
deseada 4

0
0 0.2 0.4 0.6 0.8 1
Time (secs)

Cuando =1 El sistema tiene un factor de amortiguamiento crítico

-4
x 10
Amplitud 4
deseada

3.5

2.5

1.5

0.5

0
0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4
Time (secs)

Antología elaborada por. M. en C. Bautista Quintero Ricardo 49


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Cuando  1 Es exponencialmente amortiguado

-4
Amplitud x 10
deseada 4

3.5

2.5

1.5

0.5

0
0 0.2 0.4 0.6 0.8 1
Time (secs)

La conclusión que se ofrece de este análisis es la siguiente:

• Cuando retroalimentamos solo la posición angular podemos seleccionar la


ganancia pero no podemos situar los polos donde sea mas conveniente.
• Cuando se retroalimenta tanto al ángulo como la velocidad podemos
seleccionar la ganancia y la ubicación de los polos en los lugares
requeridos.

Esto es para los polos:

s = − n   2 −  n

A continuación se realizará la conversión de nuestro modelo matemático del


motor a ecuaciones de variables de estado.

Del sistema original se tiene:

Antología elaborada por. M. en C. Bautista Quintero Ricardo 50


Departamento de control
CNAD
CONTROL AUTOMÁTICO

d2y dy
J 2
+c = ku
dt dt

Las variables de estado son:


x1=y

x2=dy/dt

Por lo tanto el vector de estado es:

 x1 
x= 
 x2 

Y las ecuaciones que describen al sistema son:


.
x1 = x2
.
J x2 = −cx2 + ku
c
a1 =
J
k
b1 =
J

Entonces las ecuaciones de estado son:

d  x1  0 1   x1   0 
 x  = 0 − a   x  +  b  u
dt  2  1  2   1
Y el vector de salida es:
 x1 
y = 1 0  
 x2 

Una vez obtenido el modelo matemático en ecuaciones de variables de estado


se procederá al análisis en modo discreto, es decir, hacer la digitalización de las
ecuaciones de estado.

La transformación de las ecuaciones al espacio discreto es debida a que nuestro


controlador es la computadora, la cual requiere un mínimo tiempo de muestreo
para controlar y sensar todas las variables. Para evitar el error de estado estable

Antología elaborada por. M. en C. Bautista Quintero Ricardo 51


Departamento de control
CNAD
CONTROL AUTOMÁTICO

se requiere adicionar un estado interno llamado “compensador integral” el cual


nos elimina completamente el error de estado estable.

CONTROL ÓPTIMO

Para situar los polos del sistema de lazo cerrado en el lugar mas apropiado y
realiza un control mas eficiente, existen varios métodos útiles para este caso se
empleará el control óptimo, el que utiliza un función llamada “Función de
desempeño” la que representa la energía que el sistema emplea por lo tanto
esta función buscando el valor mínimo, lo que como resultado nos produce el
mínimo gasto de energía para mantener controlado el sistema.

De forma digital nuestro sistema se representa de la siguiente manera:

La condición inicial es la siguiente:


x ( k + 1) = Ax ( k ) + bu( k )
x ( 0) = x0
u( k ) = − k T x ( k )

La funcion de desempeño es:

1 

J=
2 k =0
{x ( k ) T Qx ( k ) + ru( k ) 2 }

El objetivo es conseguir el mínimo valor de los componentes del vector k para


que J sea mínima, por lo cual J es:

P = Q + AT PA − AT Pb(r + bT Pb) −1bT PA

1 T
J min = x0 Px0 k T = (r + bT Pb) −1bT PA
2

Antología elaborada por. M. en C. Bautista Quintero Ricardo 52


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Para obtener las ecuaciones del sistema completo se muestra una figura que
representa la dinámica del sistema:
y

ƒ
Æ J

( px , p y )

mg

F F

El centro de gravedad del péndulo es:

( px , p y )

Donde:
px = x + l sin  py = l cos

El momento de inercia es:


J

La energía cinética del péndulo es:

m 2 J
( p x + p y ) +  2
2

2 2

La energía total es:


Mc 2 m J
T= x + {( x + l cos  )2 + ( −l sin  )2} +  2
2 2 2
La energía potencial

U = mgl cos

La ecuación de Lagrange

Antología elaborada por. M. en C. Bautista Quintero Ricardo 53


Departamento de control
CNAD
CONTROL AUTOMÁTICO

d  T  T D U
 − + + = i
dt  qi  qi qi qi

Sustituyendo en el sistema:
x + ( J + ml 2 ) − mgl sin  +  = 0
ml cos
x + ml cos − ml2 sin  + x x = F
( Mc + m) 

Considerando que el ángulo para mantener en equilibrio el sistema es muy


pequeño se
Tiene la siguiente aproximación:

sin    , cos  1, 2 sin   0, x x  0,  = 0

El sistema total es representado de la siguiente manera considerando que el


ángulo no cambia mucho, obtenemos la ecuación 1:

( M c + m) x + ml = F
mlx + ( J + ml 2 ) − mgl = 0

Antología elaborada por. M. en C. Bautista Quintero Ricardo 54


Departamento de control
CNAD
CONTROL AUTOMÁTICO

INTRODUCTION TO FUZZY LOGIC

BOOLEAN LOGIC

FUZZY LOGIC

Antología elaborada por. M. en C. Bautista Quintero Ricardo 55


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Antología elaborada por. M. en C. Bautista Quintero Ricardo 56


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Antología elaborada por. M. en C. Bautista Quintero Ricardo 57


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Antología elaborada por. M. en C. Bautista Quintero Ricardo 58


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Antología elaborada por. M. en C. Bautista Quintero Ricardo 59


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Antología elaborada por. M. en C. Bautista Quintero Ricardo 60


Departamento de control
CNAD
CONTROL AUTOMÁTICO

4. ADQUISICIÓN DE DATOS

En esta última sección se estudiara el control especifico de un servomecanismo,


para lo cual se requiere hacer la adquisición de datos con la computadora, para
lo cual las variables analógicas tienen que ser digitalizadas a intervalos de
tiempo constante, con la finalidad de conocer no sólo las variables sino también
la evolución de dichas en el tiempo, es decir, sus derivadas.

Los temas son desarrollados en función de una aplicación de control y con esto
se habla sobre el muestreo, la necesidad de hacerlo a intervalos de tiempo
constantes y definidos por la dinámica del sistema.
Posteriormente se darán las guías para implementar filtros digitales los cuales
son auxiliares en la adquisición de los datos y la estimación de variables o
estados.
Por último en este capitulo se mostrará como realizar un control de lazo cerrado
y las consideraciones para que modele y caracterice.

Hoy en día, más y más compañías en la industria de la manufactura usan


computadoras personales en sus plantas y laboratorios para probar sus
productos, tomar mediciones y automatizar procesos. Al crear sistemas basados
en una PC, los usuarios están aprovechando las ventajas de las tecnologías de
la computación mas recientes como tarjetas de adquisición de datos (DAQ)
insertables, almacenamiento de datos a disco duro, ActiveX e Internet. A medida
que ingenieros y científicos adoptan la computadora para resolver un mayor
número de aplicaciones, estas se han vuelto más exigentes; tal es el caso de los
sistemas en tiempo real. Si bien es cierto que un sistema de adquisición de
datos y control en tiempo real no es fácil de lograr con una computadora
personal, lo ideal sería contar con las mismas ventajas que ofrece una PC
(interfaz gráfica, sistemas abiertos, conectividad, bajo costo) y la habilidad de
crear aplicaciones lo suficientemente confiables para desempañar el control de
un sistema crítico.

Control y adquisición de datos en Tiempo Real

"Tiempo Real" es uno de los términos mas comúnmente usados en la industria,


pero su definición es ambigua. La mayoría de los ingenieros están de acuerdo
en que Tiempo Real significa "con retrasos aceptables". El término Tiempo Real
duro comúnmente se utiliza para definir a un sistema que debe ejecutarse sin
falla y cumplir con los requerimientos de tiempo real en todo momento. El error
más común es pensar que Tiempo Real significa en realidad, rápido; cuando de
hecho, muchas aplicaciones de adquisición de datos y control tienen ciclos muy
lentos. Los controladores de temperatura, por ejemplo, comúnmente muestrean
Antología elaborada por. M. en C. Bautista Quintero Ricardo 61
Departamento de control
CNAD
CONTROL AUTOMÁTICO

y controlan la temperatura un par de veces por segundo. Así que para que el
controlador de temperatura sea estable, debe ejecutar los lazos de control en el
orden de un par por segundo. Es el grado de inseguridad con cada tiempo de
ciclo del lazo de control el que define los requerimientos de Tiempo Real de un
sistema.

Retos al crear un sistema de Tiempo Real

La tecnología Windows para desarrollar sistemas de Tiempo Real aún


representa retos. En sistemas operativos de Tiempo Real, las interrupciones y
eventos son jerarquizados y los eventos con la mayor prioridad se ejecutan
antes que los eventos de prioridad menor. En Windows NT/98/95 los drivers o
manejadores de dispositivos responden a interrupciones; aunque la tecnología
multihilo ha incrementado la confiabilidad y manejo de interrupciones, aún hay
situaciones cuando el driver no tiene prioridad sobre otros eventos menos
críticos. Puesto que Windows no puede garantizar que va a responder a un
evento siempre dentro de un mismo tiempo, a esto se le llama determinístico o
no determinístico.

Para resolver la respuesta no determinística de Windows, muchos lazos de


control se desarrollan en hardware especializado. Hoy en día existen
controladores para diferentes plataformas como VME, PCI o CompacPCI.
Algunos controladores son fijos o tienen poca flexibilidad de programación, otros
usan sistemas cerrados y patentados. Aprender nuevos sistemas operativos,
software propietario y hardware especializado toma tiempo y muchas veces es
difícil la integración a sistemas que no son de Tiempo Real.

Desarrollo de sistemas de tiempo real con tecnologías estándar


National Instruments, el líder en productos para medición y automatización
basadas en PC, ahora extiende su línea de hardware de adquisición de datos y
software LabVIEW para simplificar el desarrollo de sistemas de Tiempo Real.
Con LabVIEW RT y la Serie de hardware RT, usuarios pueden desarrollar
aplicaciones de Tiempo Real usando LabVIEW para programar, computadoras
con tecnología estándar como Microsoft Windows y hardware de alto
rendimiento para adquisición de datos.

Para crear fácilmente aplicaciones de adquisición de datos y control en Tiempo


Real, los usuarios desarrollan su aplicación usando el software LabVIEW RT y,
posteriormente, bajan el código para que se ejecute en el procesador de la
tarjeta inteligente de adquisición de datos de la Serie RT. De esta manera, los
usuarios pueden confiar en que el procesador independiente se enfocará en
ejecutar el Tiempo Real duro mientras que la PC con Windows maneja la interfaz

Antología elaborada por. M. en C. Bautista Quintero Ricardo 62


Departamento de control
CNAD
CONTROL AUTOMÁTICO

de usuario, el almacenamiento de datos y cualquier otra funcionalidad que no


sea crítica.

4.1 MUESTREO

Si una señal continua, S(t), tiene una banda de frecuencia tal que fm sea la
mayor frecuencia comprendida dentro de dicha banda, dicha señal podrá
reconstruirse sin distorsión a partir de muestras de la señal tomadas a una
frecuencia fs siendo fs > 2 fm.

En la siguiente figura se muestra un esquema simplificado del proceso de


muestreo:

Para cumplir los requerimientos que se le exigen entre los que se encuentran:

• Una elevada resistencia de aislamiento cuando los interruptores


(transistores) están desconectados.
• Una baja resistencia si los interruptores están conectados o
cerrados.
• Una elevada velocidad de conmutación entre los dos estados
de los interruptores.

En la siguiente figura se ofrece las formas de las tres señales principales:

S(t) señal a muestrear

d señal muestreadora

Sd(t) señal muestreada

Antología elaborada por. M. en C. Bautista Quintero Ricardo 63


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Desde el punto de vista de la cuantificación de la señal muestreada, lo ideal


sería que el tiempo en que el interruptor está cerrado, fuese prácticamente cero,
ya que de otro modo, la señal muestreada puede variar en dicho tiempo y hacer
imprecisa su cuantificación.

Debe tenerse en cuenta que para la reconstrucción de la señal original, a partir


de la muestreada, se emplea un filtro de paso bajo, el cual deberá tener una
función de transferencia como se indica en la figura siguiente:

Obsérvese que la respuesta del filtro, debe ser plana hasta una frecuencia, como
mínimo, igual a fm, para caer posteriormente de forma brusca a cero, antes de
que la frecuencia alcance el valor de fs-fm.

Mediante la aplicación del Teorema del Muestreo, se pueden transmitir varias


señales, por un mismo canal de comunicación. Para ello se muestrea
sucesivamente varias señales S1, S2, S3,.... y las señales muestreadas se

Antología elaborada por. M. en C. Bautista Quintero Ricardo 64


Departamento de control
CNAD
CONTROL AUTOMÁTICO

mandan por el canal de comunicación. A este sistema se le denomina


"multiplexado en el tiempo"

Al otro extremo del canal habrá que separar las distintas señales muestreadas
para hacerlas pasar después por el filtro paso bajo que las reconstruya.

En la figura anterior el multiplexor y el demultiplexor se han representado


mediante conmutadores rotativos sincronizados, los cuales, evidentemente no
son adecuados, dada la gran frecuencia de giro fs, necesaria en este sistema.
Para ello se emplean multiplexores y demultiplexores electrónicos.
En este sistema de transmisión de señales es imprescindible, el perfecto
sincronismo entre los dos extremos del canal.

4.2 Filtros digitales

La mayoría de las señales que un sistema digital como una PC puede adquirir
tiende a estar contaminada de señales indeseables que deben ser eliminadas
para su análisis, comprensión, tratamiento digital o simple manipulación
aritmética para un proceso de control.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 65


Departamento de control
CNAD
CONTROL AUTOMÁTICO

El término filtro digital se puede entender como cualquier procesamiento


realizado en una señal de entrada digital.

Un filtro digital es la implementación en hardware o software de una ecuación


diferencial.

Ventajas de los filtros digitales

• Alta inmunidad al ruido


• Alta precisión (limitada por los errores de redondeo en la aritmética
empleada) Fácil modificación de las características del filtro
• Muy bajo costo (y bajando)

Por estas razones, los filtros digitales están reemplazando rápidamente a los
filtros analógicos.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 66


Departamento de control
CNAD
CONTROL AUTOMÁTICO

Graficas en la frecuencia de los filtros

Antología elaborada por. M. en C. Bautista Quintero Ricardo 67


Departamento de control
CNAD
CONTROL AUTOMÁTICO

4.3 Programas de control para servosistemas

En esta primera parte se muestra el diseño del contador. Se emplean para


obtener las lecturas de dos codificadores incrementales (sensores de posición)
uno conectado al servomotor (posición del rotor q2)

El proceso de conteo se hace a través de un contador de 8 bits, lo que posibilita


contar 256 pulsos provenientes del codificador. Esto no es suficiente para llevar
la cuenta de ni siquiera una vuelta del servomotor, por lo que se hace una
combinación de circuito con programación en tiempo real para contar números
mayores a 256.

Los bits contados pasan por un circuito multiplexor para ser transferidos a la PC,
esto se hace para los dos contadores de los 2 codificadores: Los 16 bits
provenientes de los dos contadores se leen por nibbles, es decir, en cuatro
operaciones dentro de la rutina de interrupción. Este procedimiento se tratará
con mas detalle en el capítulo de programación. La adquisición de datos se limita
a leer las posiciones del servomotor, las velocidades de éstos son estimadas por
medio del programa. La finalidad de usar la interfase paralela de la PC así como
en el servo amplificador es evitar el uso de interfases costosas y montar el
experimento en cualquier PC portátil.

A continuación en la

Figura 0.1 se muestra un diagrama a bloques general de la tarjeta de adquisición


de datos.

Detección
giro Contador 1
A
PC

Mu
x

FIGURA 0.1 DIAGRAMA A BLOQUES DE LA TARJETA DE ADQUISICIÓN DE DATOS

Antología elaborada por. M. en C. Bautista Quintero Ricardo 68


Departamento de control
CNAD
CONTROL AUTOMÁTICO

CODIFICADOR DE PULSOS

El codificador de pulsos también es conocido como encoder, el cual es un disco


ranurado con un cierto número de perforaciones, las cuales definen la resolución
de éste. En general cuenta con por lo menos dos sensores ópticos que entregan
una serie de pulsos cuando el disco ranurado gira. El codificador está conectado
a un eje del servomotor, el cual es la entrada mecánica del codificador. Los
pulsos eléctricos son señales de colector abierto, con esto se facilita el
acoplamiento de señales a las diversas familias lógicas de circuitos, haciendo
compatible la señal con TTL, CMOS, etc.

Las dos señales entregadas por los sensores del codificador están desfasadas
90 grados entre sí, es decir, una de las señales cae en la mitad del ciclo en alto
de la otra, como se muestra en la

Figura 0.2. Tienen la característica de ser señales cuadradas y la frecuencia de


estas señales depende de la velocidad de giro del eje de movimiento que tiene el
encoder. En el caso donde el encoder esta montado al eje del servomotor la
frecuencia de las señales es directamente proporcional a la velocidad.

Fase A
Fase B

FIGURA 0.2 CODIFICADOR DE PULSOS (ENCODER)

Para controlar posición en este servo sistema se requiere conocer la dirección a


la que el motor gira, este requiere un tratamiento por medio de un circuito digital
que será descrito a continuación.

La razón de tener dos señales similares desfasadas 90 grados es distinguir la


dirección de giro del servomotor, es decir, la señal llamada fase A se adelanta
con respecto a la señal fase B cuando el servomotor gira en sentido de las
manecillas del reloj, pero cuando el motor gira en sentido anti-horario la señal de
la fase A se atrasa 90 grados con respecto a la fase B, con esto es fácil
implementar un circuito que determine cuál de las dos señales está adelantada
con respecto a la otra, para esto se propone un circuito construido con un flip-

Antología elaborada por. M. en C. Bautista Quintero Ricardo 69


Departamento de control
CNAD
CONTROL AUTOMÁTICO

flop tipo D, el cual se le conecta la señal de la fase A en la señal del clock y la


fase B a la entrada D.

La salida q del flip-flop se establece en 1 lógico cuando el servomotor gira en


sentido de las manecillas del reloj, y se establece en 0 lógico cuando lo hace en
sentido contrario a las manecillas del reloj. Esta señal se denominada la señal dir
y es utilizada para dirigir la dirección del contador ascendente-descendente que
es parte de la etapa siguiente.

La Figura 0.3 muestra el funcionamiento del discriminador de dirección.

R1
R2

4
2 . 2K
U6 A 2 . 2K
2

R
DIR Q
3
CL K FASE A
1 5
Q D FASE B
S

4 01 3
6

FIGURA 0.3 DETECTOR DE GIRO

CONTADOR DE PULSOS

El circuito contador esta construido con un CI 74HC191 que es un contador


binario ascendente-descendente de 4 bits.

La idea fundamental de este contador es llevar un registro de los pulsos


provenientes del encoder, de forma que el valor de la cuenta sea directamente
proporcional a la posición. Existe una relación directa entre número de pulsos y
grados, esto es función del número de ranuras del disco que tiene el codificador, T itle
y de la relación de engranes (en el caso de acoplar el codificador al eje del rotor Size Nu mb er

antes de la reducción de velocidad debida a los engranes) B


Da te: 2 4-May -20 01
File: C:\ric ard o\te sis\circ uito s\40 13
2 3 4 5
La relación es la siguiente:

360  pulsos
posición =
resolución  gear _ ratio

Donde:

pulsos: es el número de pulsos entregados por el encoder


gear_ratio: es la relación de engranes, es dato del fabricante y define la
reducción de velocidad entre el rotor y el eje de salida del
servomotor
resolución: es el número de ranuras del disco del encoder por revolución
Antología elaborada por. M. en C. Bautista Quintero Ricardo 70
Departamento de control
CNAD
CONTROL AUTOMÁTICO

Entonces la posición será dada en grados, también es importante considerar que


el número de pulsos puede ser positivo o negativo, esto depende del circuito
detector de giro de la sección anterior, entonces el contador llevará la cuenta
absoluta y total dentro del rango del contador.

El contador esta en una configuración cascada, ya que se requiere un contador


de 8 bits se colocan dos CI 74HC191 en sincronía, esto significa que la entrada
de reloj es conectada simultáneamente a los dos circuitos, así como la señal de
U / D 1. La carga paralela de este circuito de la

Figura 0.1 esta deshabilitada, la señal RC de salida del contador 1 se aplica a la


2 3 4 5

entrada CE del contador 2, esto es una señal de acarreo al segundo. Los dos
contadores en esta configuración se pueden contar pulsos entre 0 y 255,
siempre lleva el valor absoluto a pesar que el motor gire en sentido horario o
anti-horario.

Mediante el programa de la PC se puede ir acumulando los pulsos de tal manera


que se pueda conocer la posición en todo momento, incluso para valores
negativos de posición.

RE SE T

U4 U5
12 11 12 11
TC PL TC PL
13 5 13 5
D7 RC U/D RC U/D DIR
4 4
D6 CE CE
14 14
D5 CL K CL K CL K
D4
CT A7 7 9 CT A3 7 9
D3 Q3 P3 Q3 P3
CT A6 6 10 CT A2 6 10
D2 Q2 P2 Q2 P2
CT A5 2 1 CT A1 2 1
D1 Q1 P1 Q1 P1
CT A4 3 15 CT A0 3 15
D0 Q0 P0 Q0 P0
7 4HC1 91 7 4HC1 91

FIGURA 0.4 CIRCUITO CONTADOR BIDIRECCIONAL

MULTIPLEXOR DIGITAL

El procedimiento de conteo para el encoder (conectado al rotor ) es exactamente


el mismo para el encoder 2 (conectado al brazo), pero ahora se tienen 16 líneas
digitales que deben transferirse a la PC por un canal de sólo 4 líneas de entrada,
por lo tanto hay que usar un método para multiplexar estas 16 líneas
agrupándolas por nibbles. Para esto se hace lo siguiente: primero se utiliza dos

1
Señal para contar ascendente y descendente T itle
Antología elaborada por. M. en C. Bautista Quintero Ricardo 71Size
Departamento de control Nu mb er
B
CNAD Da te: 1 2-Ju n-2 00 1
File: C:\M is do cu me nto s\. . \co nta d
2 3 4 5
CONTROL AUTOMÁTICO

circuitos transceiver de tres estados los cuales se conectan en su entrada a las 8


líneas de salida de cada contador, después las 16 salidas de los tranceivers se
conecta en paralelo para formar un solo bus de 8 líneas, cada transceiver tiene
una señal de control de alta impedancia llamada E, ésta pone a las 8 líneas de
2
salida en un estado deshabilitado
3
(Hiz) cuando se establece
4
en 1 lógico es la 5

equivalencia eléctrica a desconectar el transceiver, entonces se escoge a la


señales E de los transceiver sean complementarias, con esto, se evitarán cortos
circuitos en las líneas de entrada y se podrán leer de forma secuencial cada
grupo de 8 líneas provenientes de la cuenta de cada uno de los encoders. Este
proceso se le llama multiplexar de 16 a 8.

Una vez hecho el proceso anterior se requiere hacer la multiplexación de 8 a 4


pero ahora se hace por medio del circuito 74HC157 el cual es un CI específico
para este propósito, cuenta con 8 líneas de entrada y 4 de salida, tiene una
señal de selección para transferir el nibble bajo o el alto, esta se llama A / B .

La Figura 0.5 muestra la conexión del circuito multiplexor.

U1
4 2 A0
n E rror 1Y 1A D0
3 A4
1B D1
7 5 A1
Sele ct 2Y 2A D2
6 A5
2B D3
9 11 A2
Pap erE n d 3Y 3A D4
10 A6
3B D5
12 14 A3
n Ack 4Y 4A D6
13 A7
4B D7
1
A/B
15
G
7 4HC1 57
U2 F
13 12
n Init

7 4HC1 4

FIGURA 0.5 MULTIPLEXOR DE 8 A 4

La señales E de los tranceivers que son complementarias y la señal A / B 2 son


usadas para determinar cuál de los 4 nibbles es transferido por el bus de entrada
a la PC. Esto se resume en la Tabla 0-1.

Bit 1 (pin 14) Bit 2 (pin 16) nInit Nibble leído


nAutoLF
1 0 Nibble alto de U9 Encoder
1 1 Nibble bajo de U9 conectado al
rotor (q2)
T itle
TABLA 0-1 BITS 1 Y 2 PARA SELECCIONAR DE DOS CONTADORES DE ENCODERS
Size Nu mb er
B

En el circuito final se tiene una línea para inicializar o dar reset a los 4 Da te:
File:
1 2-Ju n-2 00 1
C:\M is do cu me nto s\. .
2 contadores, esta línea es3 el bit 3 del puerto de control
4 del puerto paralelo, 5

2
Señal de habilitación de lectura
Antología elaborada por. M. en C. Bautista Quintero Ricardo 72
Departamento de control
CNAD
CONTROL AUTOMÁTICO

llamado nSelectn el cual es invertido como la señal de los bits 0 y 1. Por lo tanto
al escribir un 0 lógico las salidas q de los 4 contadores son 0.

Como lo muestra la Figura 0.6 es el diagrama completo del circuito de


1 2 3 4 5 6

adquisición de datos y control de un servosistema.

R1
D RC7 D
2K
U1 R2
13 1K
25
12 R3
RC6
24 2K
11 VCC R4
23 1K
10
22 R5
U4

20
RC5 U3 VCC
9 PB7 2K 1 3
21 U2 R6 IN- OSC/SYNC 1
2 16 2
8 PB6 PB0 2 VCC 18 1K IN+ V(REF) U5
D1 Q1 RC1 4 12
20 PB1 3 17 SNSE+ COL A MOTOR
D2 Q2 RC2 R7 5 13 1
7 PB5 PB2 4 16 R1 5 SNSE- COL B T1
D3 Q3 RC3 RC4 9 11 2
19 PB3 5 15 2K COMP EMIT A
D4 Q4 RC4 1 0K 15 14 2 N22 2 2 3
6 PB4 PB4 6 14 R8 V+IN EMIT B
6 10

GND
D5 Q5 RC5 1K RT SD 4
18 PB5 7 13 7
D6 Q6 RC6 CT 5
5 PB3 PB6 8 12
D7 Q7 RC7 R9
17 PB7 9 11 RC3 VCC POWER
D8 Q8 RC8
4 PB2 2K R1 6 LM3 52 4 DN(1 6)

8
16 1 R1 0 RS
GND

E1 C1 1 0K C2
3 PB1 19 2K 1K D1
E2 0 .0 1 UF 0 .0 0 1u F T2 DIODE
C 15 C
R1 1 TIP1 20
2 PB0 7 4HC5 4 1 RC2
14
10

1K R1 2
1
2K
DB2 5
R1 3
RC1
RB7 2K
R1 4
RB6 2K

C3 C4
33 pF 3 3p F
CR1 4 MHz
VCC

R2 4 VCC
1 0K
B B
14

U7
16 15
VDD

OSC1/CLKIN OSC2/CLKOUT
4 7
MCLR RB1
17 8
RA0 RB2
18 9
RA1 RB3
1 10
RA2 RB4
2 11
RA3 RB5
3 12
VSS

RA4 /T0CKI RB6 RB6


6 13
RB0 /INT RB7 RB7
VCC R1 9 R2 0 R2 1 R2 3
R2 2
PIC1 6C8 4 -0 4 /P(1 8 ) 1 0K 1 0K 1 0K 1 0K 1 0K
5

U6
4
3
2 VER 1 DIR SEPARADA
VCC
1
ENCODER R1 8
R1 7
1 0K
1 0K

A A

VCC Title

FIGURA 0.6 CIRCUITO COMPLETO DE LA TARJETA DE ADQUISICIÓN Size


B
Nu mber Rev isio n

Date: 3 -Mar-2 0 0 4 Sheet o f


File: C:\Clien t9 8\..\VELOCIDAD.s ch Drawn By:
1 2 3 4 5 6

A continuación en la se muestra la ubicación de los bits utilizados para leer 16


líneas de contadores en el puerto de entrada y las 3 líneas de habilitación
usadas como salidas del puerto de control.

Cabe aclarar que la distribución de los bits de entrada y de salida son los que
cualquier PC IBM o compatible. Este sistema tiene la posibilidad de ser portátil a
otra PC sin necesidad de emplear interfases adicionales.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 73


Departamento de control
CNAD
CONTROL AUTOMÁTICO

CONCLUSIONES

Este curso lleva mucha información de los diferentes enfoques de control


empleados en una PC, se marcan las principales diferencias entre el uso de
estos sistemas y los hechos con PLC, así como también se comentan las
ventajas al emplear algoritmos de control automático que fácilmente se
implementan a nivel didáctico, es decir, una computadora personal en la
actualidad esta disponible en las escuelas de enseñanza de control y
automatización, esto permite que los programas visuales permitan a los
estudiantes abstraerse con mayor en relación a 20 años antes, esto permite que
los industriales no inviertan tanto en capacitación, los procesos sean limpios,
eficientes y manteniendo un ahorro importante de energía, razones principales
de la creación de los sistemas de control automático.

La computadora personal ha sido el pilar para que se desarrollen a nivel


simulación muchos de los algoritmos de control del sector industrial, sin
embargo, cada vez hay mas computadoras industriales que realizan este control
directamente, cuentan con algoritmos adaptivos y cierta inteligencia que les
permite ser altamente eficientes y competitivos. De acuerdo al nivel de
integración que alcanzaran en pocos años los microprocesadores se puede
pensar en el futuro en maquinas con capacidades de procesamiento y
almacenamiento de datos que hagan mas simple la producción, para lo cual se
debe estar preparado con los recursos humanos para programar y operar estas
maquinas.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 74


Departamento de control
CNAD
CONTROL AUTOMÁTICO

BIBLIOGRAFIA

[1] Josep Balcells, José Luis Romeral


Autómatas programables
Alfaomega Marcombo

[2] Borland
C++ V. 3.0 User’s Guide
Borland

[3] George Ellis


Control Systems Design Guide
Using your computer to develop and diagnose
feedback controllers
Academic Press, Inc.

Antología elaborada por. M. en C. Bautista Quintero Ricardo 75


Departamento de control
CNAD

También podría gustarte