pr2

15
UNIVERSIDAD DE GUANAJUATO DICIS M. EN I. J.ANTONIO ALVAREZ JAIME CONTROL CONTINUO PRACTICA 2: CONOCIENDO SCILAB Y XCOS PEDRO ALEJANDRO BARRON GARCIA Objetivo: Que el alumno se familiarice con el entorno matemático de Scilab y Xcos , que tenga en cuenta que hay más programas y no solamente Matlab. Comenzando a utilizar XCOS. Ejecute Scilab. Escriba XCOS() en la línea de comando, no olvide los paréntesis, o seleccione Applications-> Xcos en el menú. Una ventana de trabajo es mostrada. Aquí se crean los diagramas de bloques. En el menú de la ventana de trabajo, seleccione Edit->Palettes. Un submenú con los bloques disponibles es mostrado en la figura siguiente. Seleccione Sources “Fuentes” (por ejemplo) y un número de posibles fuentes son mostradas. Sources = bloques que crean salidas de entrada a un sistema, Sinks = Presentación de señales de salida (Scope etc.), otros bloques adicionales

Upload: ramon-vargas

Post on 10-Aug-2015

25 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: PR2

UNIVERSIDAD DE GUANAJUATO DICIS

M. EN I. J.ANTONIO ALVAREZ JAIME CONTROL CONTINUO

PRACTICA 2: CONOCIENDO SCILAB Y XCOS PEDRO ALEJANDRO BARRON GARCIA

Objetivo: Que el alumno se familiarice con el entorno matemático de Scilab y Xcos , que tenga en cuenta que hay más programas y no solamente Matlab. Comenzando a utilizar XCOS.

Ejecute Scilab.

Escriba XCOS() en la línea de comando, no olvide los paréntesis, o seleccione Applications-> Xcos en el menú. Una ventana de trabajo es mostrada. Aquí se crean los diagramas de bloques.

En el menú de la ventana de trabajo, seleccione Edit->Palettes. Un submenú con los bloques

disponibles es mostrado en la figura siguiente.

Seleccione Sources “Fuentes” (por ejemplo) y un número de posibles fuentes son mostradas. Sources = bloques que crean salidas de entrada a un sistema, Sinks = Presentación de señales de salida (Scope etc.), otros bloques adicionales

Page 2: PR2

Un buen camino para aprender Xcos es trabajar con el programa, construyendo algunos sistemas simples y explorando los bloques. Realizar los ejemplos después de que serán comentados a detalle. Ejemplo 1 El primer ejemplo es trivial y solo es realizado para mostrar el manejo general de Xcos. Uno puede seguir siempre estos 5 pasos:

1. Definir el problema (el sistema a ser simulado). 2. Crear un diagrama de bloques que represente al sistema. 3. Determinar los parámetros de los bloques. 4. Determinar los parámetros de simulación. 5. Correr el programa.

El problema

Crear una señal sinusoidal con una amplitud de 1 y frecuencia angular de 1 rad/seg Amplifique la señal, digamos, 8 veces. Grafique el resultado.

Crear el diagrama de bloques como se muestra a continuación: Ejecutar Scilab, después Xcos. En Xcos, seleccione Edit->Palettes->Sources (nosotros queremos crear una señal). Seleccione y arrastre los iconos.

Un generador de funciones de 'Sources' Un bloque de ganancias de 'Linear' Un osciloscopio (o graficador) de 'Sinks' Un reloj (generador de pulsos de reloj) de 'Events' Dibuje lineas para conectar los bloques como se muestra en la figura.

Page 3: PR2

Determine los parámetros del bloque. Pulse el bloque y llene los datos. En este ejemplo serán:

The sine generator: Magnitude (Amplitud) = 1 Frequency = 1 rad/seg, NOTA: rad/ seg, a menudo cuando hablamos de frecuencia nos

referimos a HZ. Si piensas en frecuencia en Hz, recuerda poner ω = 2*π*f, Scicos requiere valores de frecuencia angular (rad/seg). Si ω = 1, entonces f = 0.159, y en 10 segundos tendrás 1.59 periodos.

Phase = 0 radianes. Gain = 8 The Clock:

Period 0.01 Init time 0

Scope: Output window number: 1, nosotros solo tenemos una ventana Output window position: no modificar aquí Output window size: no modificar aquí Ymin = -15; Ymax = 15 Refresh period: 10, por ejemplo el diagrama es regraficado después de 10 segundos y empieza

en 10 seg., se ejecuta hasta 20 segundos, etc., si el tiempo de simulación es mayor a 10 segundos. Normalmente el 'Refresh period' es puesto del mismo valor del que el 'Simulation time' ( puesto en 'simulation setup').

Buffersize: 2, no modificar. Accept herited events 0/1: 0.

Determine los parámetros de simulación. Cuando los parámetros de los bloques estén bien, la simulación de parámetros esta lista. Selecione Simulate -> Setup. Hay siete parámetros. Por problemas simples como aquí, uno solo necesita cuidar 'Final integration time'. Seleccione 'Final integration time' en 10 seg. (el mismo valor que en 'Refresh period' para el osciloscopio).

Page 4: PR2

Resultados obtenidos

Ejecutando el programa. Seleccione Simulate -> Run, el resultado es:

Para clarificar el significado de 'Refresh period' y 'Final integration time' (en simulate-setup) incrementemos el 'Final integration time' a 14 segundos y mantenga 'Refresh period' para el osciloscopio a 10 seg. Por los primeros 10 seg., la curva es dibujada como en el diagrama 1. Después de 10 seg. El diagrama es borrado y remplazado por el diagrama 2 donde el tiempo empieza en 10 seg. Y va hasta 20 seg. (refresh

Page 5: PR2

period 10 seg). Desde 'Final integration time' son 14 seg., la simulación empieza ahí, y el diagrama 2 es el resultado final. Normalmente el 'refresh period' para osciloscopio y 'Final integration time' es puesto al mismo valor. Algunas notas de ayuda:

Cuando guardamos un archivo de Xcos debemos adicionar la extensión '.cos' al nombre del archivo, de otra manera el archivo no será salvado correctamente.

Si por ejemplo deseas mover un bloque, entonces usa el botón izquierdo del ratón en el bloque, seleccione move, y entonces mueva el bloque a la posición deseada.

Si tu quieres poner poner tu propia etiqueta en el bloque, selecciona 'identification' ( not label ), entonces ponga su propia etiqueta en el bloque. Algunas veces trabaja diferente WXP, W2K y WME/W98.

NOTE: no olvide poner 'Final integration time' para un valor razonable. El valor inicial es 100000 seg., en caso de que necesites hacer una 'emergency'.

No olvide que Scicos espera valores de ángulo en radianes (no en grados) y radianes/segundo (no Hz).

Si usted usa varios osciloscopios (vea el siguiente ejemplo) cada osciloscopio debe tener su propio 'Output window number', 1, 2...,

Ejemplo 2 Este ejemplo ilustra un integrador, Scope y Mscope. En Scope, múltiples señales pueden ser dibujadas superpuestas usando un Mux, en Mscope cada señal tiene su propia sub gráfica. El diagrama de bloques y

el resultado se muestra como sigue: Comentario: Aquí, una señal sinusoidal es la entrada a un integrador. Tanto la señal original como la que sale del integrador es comparada en una gráfica. Asuma que la señal sinusoidal tiene una amplitud de 1 y la frecuencia es 1Hz. Si nosotros queremos ver, digamos, 5 periodos, entonces el tiempo de simulación debería ser 5 seg. En este caso simple, la salida puede se fácilmente predecible. Parámetros del Bloque:

1. Sinusoid generator (Generador de onda sinusoidal) Magnitude = 1 unit (unidad no especificada) Frecuency ω = 6.28 rad/sec, esto corresponde a una frecuencia de 1 Hz. Phase = 0 rad ( no hay desplazamiento de fase)

Page 6: PR2

2. Integrator (Integrador)

Initial state = 0 3. Mux (Multiplexor)

Number of input ports = 2 (nosotros queremos ver dos señales) 4. Clock (Reloj)

Period = 0.05, este corresponde a el tiempo en el cual la salida es muestreada (esta es colocada en ‘simulation setup’)

Init time = 0

5. Mscope

Input port size = 1 1 (dos gráficas con un espacio entre ellas, nosotros queremos dos gráficas)

Drawing colors = default

Output window number = 1. NOTE: queremos dos ventanas, la siguiente ventana para el osciloscopio tendrá el numero 2, esto no es automático.

Output window position = [ ], default ok.

Output window size = default

Ymin vector = [-1 -1]. Aquí nosotros sabemos que las amplitudes son siempre <=. Para problemas reales generalmente este valor generalmente no se conoce.

Ymax vector = [1 1].

Refresh period = 5. Queremos simular 5 seg. para obtener 5 periodos, ponga Refresh en el mismo valor de “Final integration time” en “Simulate->Setup”, 5 seg.

Buffer size = 2, el valor por omisión esta bien. .

Accept herited events = 0. 6. Scope

Color = 1 3 5 … Default ok. Esto significa la primera curva es negra, la siguiente es verde, etc.

Output window = 2. Recuerde que queremos dos ventanas.

Output window position [ ].

Output window size = default.

Ymin = -1

Ymax = 2

Refresh period 5

Buffersize 2

Accept herited events 0/1. 0, no cambiar (default) Parámetros de simulación. El ‘Final integration time’ es puesto en 5 seg., es el mismo que ‘Refresh period’ para los osciloscopios.

Page 7: PR2

Ejemplo 3 Este ejemplo muestra un sistema simple en lazo cerrado, un integrador con retroalimentación ( un filtro pasa bajas de primer orden) en tres versiones.

La primera versión muestra el bloque ‘sum’

La segunda versión muestra el bloque ‘Bigsum’ el cual es mas flexible.

La tercera versión muestra el mismo sistema con una señal sinusoidal de entrada. Las respuestas transitoria y estacionaria son mostradas.

1ª. Versión Bloques:

1 ‘Const’ de ‘Sources’

1 ‘Sum’ de ‘Linear’

1 ‘Gainblk’ de ‘Linear’

1 ‘Mux’ de ‘Branching’

1 ‘Scope’ de ‘Sinks’

1 ‘Clock’ de ‘Sources’ Parámetros de los Bloques:

1. Const Constant = 1, la entrada es un impulso unitario

2. Sum

‘linklines’ son dibujadas a el bloque de suma para la suma. 3. Integral

Initial state = 0 4. Gainblk

Gain = 2 5. Mux

Number of input ports = 2 Queremos graficar la entrada y la salida en el mismo diagrama.

Page 8: PR2

6. Scope

Color = 1 3 5 … El valor por omisión esta bien. Esto significa la primera curva es negra, la siguiente es verde, etc.

Output window number = 1. Recuerde que solo necesitamos una ventana.

Output window position [ ].

Output window size = default.

Ymin = 0

Ymax = 1

Refresh period 5. Deberá ser el mismo que ‘total integration time’ en ‘simulation setup’

Para el resto use los valores dados.

7. Clock

Period = 0.01. Para que se vea bonita la salida el periodo debe ser mayor a 0.1 ( la constante de tiempo mínima = 0.5 seg.).

Unit time = 0. 8. Bigsom

Inputports sing/gain: [1; 1], Las ganancias pueden ser amplificadas con un signo. Aquí la ganancia es 1 para la entrada y -1 para la retroalimentación.

Bloques:

1 ‘Const’ de ‘Sources’

1 ‘Bigsum’ de ‘Linear’. Este bloque puede amplificar señales.

1 ‘Gainblk’ de ‘Linear’ con ganancia de 2.

1 ‘Mux’ de ‘Branching’

1 ‘Scope’ de ‘Sinks’

1 ‘Clock’ de ‘Sources’ Parámetros de simulación: Selecciona ‘Simulate->Setup’ en el cuadro de dialogo. Poner el ‘Final integration time’ en 5 seg., lo mismo para ’Refresh period’ para el osciloscopio. Comentarios. La entrada es un escalón unitario, por ejemplo una constante igual a 1. La salida es la señal del integrador (‘1/s’). Si la salida es y puede ser expresada como y=1- exp[-t over 0.5] donde 0.5 es la constante de tiempo. Cuando t ha crecido hasta t = 0.5, la curva tiene un 63% de su valor final. La versión tres es casi lo mismo que las dos anteriores, la única diferencia es la entrada sinusoidal. Parámetros de los bloques:

El generador de onda sinusoidal tiene Magnitud (amplitude = 1), Frecuencia (angular) = 5 rad/seg y la fase de 0.

El osciloscopio 1 que se encuentra después del multiplexor posee ymin = -0.2, ymax = 1 y ‘Refresh’ = 10 seg., lo mismo en ‘Final integration time’ en ‘Simulate->setup’. El osciloscopio muestra las entradas y salidas en la misma gráfica.

El osciloscopio 2 tiene ymin = -0.2 y ymax = 0.4 y muestra la solo la salida. Los valores para ymin y ymaxno son tan obvios, a menudo se deben hacer algunos intentos para hacerlo bien. Sin embargo en este caso, la salida puede ser fácilmente calculada.

Comentarios Si la salida es una onda sinusoidal con amplitud 1 y frecuencia angular de 1 rad/seg entonces la salida y se convierte en: Y=5/26*exp(-t) + 1/sqrt(26)*sin(5*t- atan(5))

Page 9: PR2

Problema: Resolver la ecuación diferencial: y’’’’ + y‘’’ + y’’ + 0.5y’ + 0.1y = 0.1 Todas las condiciones iniciales = 0. Para resolver ecuaciones diferenciales ordinarias, puede ser usado el comando ‘ode’. Los algoritmos usados en la función ‘ode’ generalmente requieren ser escritos en forma matricial, normalmente como un arreglo de ecuaciones de primer orden. Los pasos siguientes ilustran un camino fácil para la resolución.

1. Resuelva para la derivada de orden mayor, esto es, escribir la ecuación como: y’’’’ = - y‘’’ - y’’ - 0.5y’ - 0.1y + 0.1

2. Asuma por un momento que y’’’’ es conocida. Entonces, si es integrada cuatro veces, la variable de

salida es obtenida, es decir la solución.

La figura muestra gráficamente el planteamiento en Scicos 3. Ahora se introducen variables intermedias entre los integradores y también para la variable final,

y(1)… y(4) 4. La relación entre estas variables intermedias es: dy(1)/dt = y(2), dy(2)/dt = y(3), dy(3)/dt = y(4). Si

observas a la derivada de y(4), que debería ser dy(4)/dt, es solo la suma de los términos en la ecuación del paso 1.

5. Finalmente, introduzca nombres pequeños para las derivadas, por ejemplo dy(1)/dt = yprim(1), etc. 6. Ahora puedes definir la siguiente Función en Scilab para la función ‘ode’.

Function [yprim]=diffeq(t,y) yprim(1)=y(2); yprim(2)=y(3); yprim(3)=y(4); yprim(4)=-y(4)- -y(3)-0.5*-y(2)-0.1*-y(1)+0.01; end function

7. También se necesitara una variable independiente, podríamos tomar un tiempo t : t = 0:0.1:501. Esto significa que el programa evalúa la función de 0 a 501 en intervalos de 0.1.

8. Todos los integradores también necesitan valores iniciales. Estos también se deben dar en forma matricial (aquí un vector).

Page 10: PR2

El siguiente código debe ser escrito en el editor de archivos de Scilab.

Page 11: PR2

Reporte sus resultados.

Xcos Ejemplo 1 Resolver la ecuación diferencial y’’’’ + y’’’ + y’’ + 0.5y’ + 0.1y = 0.1, todas las condiciones iniciales son igual a cero. Vea el mismo ejemplo de Scilab.

Resolver para el término de mayor orden. y’’’’ = y’’’ - y’’ - 0.5y’ - 0.1y + 0.1 Asuma por un momento que y’’’’ es conocida. Entonces, si es integrada cuatro veces, la variable de

Page 12: PR2

salida y es obtenida. El diferencial de mayor orden es mostrado entre los bloques 8 y 1. Integre y'''' hasta y y con las con cuatro integradores 1, 2, 3 y 4. Desde que asumimos que y'''' es conocida, y''', y'', y' y y es también conocida. Pero y'''' es la ecuación de arriba, de aquí las entradas al bloque suma son creadas. El termino constante 0.1 es creado en el bloque 7 y es considerado como un impulso unitario. Las salidas y''', y'', y' y y son capturadas en el osciloscopio de múltiples canales 12. Como una opción, los valores también son capturados en una tabla con el bloque de multiplexado 9

y escritos en un archivo con el bloque de escritura en código ascii. Uno puede, por ejemplo querer hacer gráficas detalladas con gnuplot.

Los integradores 1 a 4 tienen valores iniciales iguales a cero desde que fueron asignados. NOTE que los integradores tienen limites superiores e inferiores. No olvide incrementar estos limites para la primera ejecución.

La función escalón (bloque 7) tiene un starting time predeterminado (step time) 1. NOTE, no olvide cambiar este valor a cero si tu esperas una respuesta “normal” para un tiempo = 0.

Los bloques de ganancia 5 y 6 no son estrictamente necesarios tu puedes poner ganancias en el bloque de sumas. Estos están incluidos por razones educacionales y para hacer mas claro el ejercicio.

El reloj, bloque 11 tienen unidades de tiempo puestas en cero y la periodo puesto en 0.1. NOTE no te que esto no tiene nada que ver con la exactitud de la solución, esto es solo el tiempo de muestreo.

El Mscope (milti-osciloscopio), tiene sus input ports sizes = 1 1 1 1, uno para cada entrada. Los limites superior e inferior son colocados cuando el programa es ejecutado. El refresh period es el mismo que el final integration time.

El archivo que genera el bloque 10 (write to output) es una opción útil para escribir archivos de texto que pueden ser directamente exportados a otros programas por ejemplo gnuplot. Es el equivalente de Scicos para la instrucción 'fprintfMat' de Scilab. Le tienes que dar un nombre y colocar todas las entradas a un multiplexor (Mux).

Page 13: PR2

Ejemplo 2 Ecuaciones diferenciales no lineales simples. Un bloque con masa = M se mueve contra una superficie rugosa, el coeficiente de fricción es f. La resistencia de fuerza constante es f*M*g donde g es la constante de gravedad, y K es el coeficiente del resorte. Gráfica el movimiento del bloque si es jalado 1m a la derecha y soltado a su posición original.

La ecuación es y'' = -y -0.15*sing(y'), en este caso no existen entradas externas, pero las condiciones iniciales par ala posición son puestas a 1 (en el integrador 2). El final integración time es puesto como 9.4, el Mscope refresh time es puesto a 10. El clock tiene un periodo de 0.01 y init time = 0.

Page 14: PR2
Page 15: PR2

Comentarios

El phase plane muestra las condiciones iniciales, y = 1 y y' = 0, por ejemplo si el bloque es movido a la derecha y se suelta al reposo. La velocidad es cero pero la aceleración es negativa por eso el bloque comienza a moverse a la izquierda.

Esto significa que la fuerza de fricción constante que sale del bloque suma debe ser positiva para este caso.

En el primer punto de cambio, cuando y' se hace positiva, la fricción cambia de signo. NOTA, si el final integración time es más grande de lo físicamente posible, Xcos no se traba, pero si queda en un ciclado infinito. Y el programa se debe de tener de forma manual, por lo tanto se debe tener cuidado. Conclusiones Pedro Alejandro Barrón García En esta práctica tardamos un poco más de tiempo en desarrollarla ya que este software era nuevo para nosotros y no conocíamos algunos comandos, una vez ya trabajando con el descubrimos que es muy similar a Matlab tanto en sus comandos como en las pantallas y también a la hora de correr nuestro código así como los diagramas de bloques. Estos últimos nos costaron más trabajo ya que no encontrábamos los bloques ideales y no conocíamos como modificar sus entradas después de leer algunos tutoriales nos dimos cuenta que es mas fácil de lo que parece.