You are on page 1of 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 matemtico de Scilab y Xcos , que tenga en cuenta que hay ms programas y no solamente Matlab. Comenzando a utilizar XCOS.

Ejecute Scilab. Escriba XCOS() en la lnea de comando, no olvide los parntesis, 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 nmero de posibles fuentes son mostradas. Sources = bloques que crean salidas de entrada a un sistema, Sinks = Presentacin de seales de salida (Scope etc.), otros bloques adicionales

Un buen camino para aprender Xcos es trabajar con el programa, construyendo algunos sistemas simples y explorando los bloques. Realizar los ejemplos despus de que sern 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 parmetros de los bloques. 4. Determinar los parmetros de simulacin. 5. Correr el programa. El problema Crear una seal sinusoidal con una amplitud de 1 y frecuencia angular de 1 rad/seg Amplifique la seal, digamos, 8 veces. Grafique el resultado. Crear el diagrama de bloques como se muestra a continuacin: Ejecutar Scilab, despus Xcos. En Xcos, seleccione Edit->Palettes->Sources (nosotros queremos crear una seal). 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.

Determine los parmetros del bloque. Pulse el bloque y llene los datos. En este ejemplo sern: 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 tendrs 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 despus de 10 segundos y empieza en 10 seg., se ejecuta hasta 20 segundos, etc., si el tiempo de simulacin 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 parmetros de simulacin. Cuando los parmetros de los bloques estn bien, la simulacin de parmetros esta lista. Selecione Simulate -> Setup. Hay siete parmetros. 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).

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. Despus 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

period 10 seg). Desde 'Final integration time' son 14 seg., la simulacin 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 extensin '.cos' al nombre del archivo, de otra manera el archivo no ser salvado correctamente. Si por ejemplo deseas mover un bloque, entonces usa el botn izquierdo del ratn en el bloque, seleccione move, y entonces mueva el bloque a la posicin 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, mltiples seales pueden ser dibujadas superpuestas usando un Mux, en Mscope cada seal tiene su propia sub grfica. El diagrama de bloques y

el resultado se muestra como sigue: Comentario: Aqu, una seal sinusoidal es la entrada a un integrador. Tanto la seal original como la que sale del integrador es comparada en una grfica. Asuma que la seal sinusoidal tiene una amplitud de 1 y la frecuencia es 1Hz. Si nosotros queremos ver, digamos, 5 periodos, entonces el tiempo de simulacin debera ser 5 seg. En este caso simple, la salida puede se fcilmente predecible. Parmetros 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)

2. Integrator (Integrador) Initial state = 0 3. Mux (Multiplexor) Number of input ports = 2 (nosotros queremos ver dos seales) 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 grficas con un espacio entre ellas, nosotros queremos dos grficas) Drawing colors = default Output window number = 1. NOTE: queremos dos ventanas, la siguiente ventana para el osciloscopio tendr el numero 2, esto no es automtico. 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 omisin 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) Parmetros de simulacin. El Final integration time es puesto en 5 seg., es el mismo que Refresh period para los osciloscopios.

Ejemplo 3 Este ejemplo muestra un sistema simple en lazo cerrado, un integrador con retroalimentacin ( un filtro pasa bajas de primer orden) en tres versiones. La primera versin muestra el bloque sum La segunda versin muestra el bloque Bigsum el cual es mas flexible. La tercera versin muestra el mismo sistema con una seal sinusoidal de entrada. Las respuestas transitoria y estacionaria son mostradas.

1. Versin 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 Parmetros 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.

6. Scope Color = 1 3 5 El valor por omisin 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 mnima = 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 retroalimentacin. Bloques: 1 Const de Sources 1 Bigsum de Linear. Este bloque puede amplificar seales. 1 Gainblk de Linear con ganancia de 2. 1 Mux de Branching 1 Scope de Sinks 1 Clock de Sources Parmetros de simulacin: 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 escaln unitario, por ejemplo una constante igual a 1. La salida es la seal 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 versin tres es casi lo mismo que las dos anteriores, la nica diferencia es la entrada sinusoidal. Parmetros 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 despus 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 grfica. 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 fcilmente 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))

Problema: Resolver la ecuacin 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 funcin ode generalmente requieren ser escritos en forma matricial, normalmente como un arreglo de ecuaciones de primer orden. Los pasos siguientes ilustran un camino fcil para la resolucin. 1. Resuelva para la derivada de orden mayor, esto es, escribir la ecuacin 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 solucin. La figura muestra grficamente el planteamiento en Scicos Ahora se introducen variables intermedias entre los integradores y tambin para la variable final, y(1) y(4) La relacin 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 debera ser dy(4)/dt, es solo la suma de los trminos en la ecuacin del paso 1. Finalmente, introduzca nombres pequeos para las derivadas, por ejemplo dy(1)/dt = yprim(1), etc. Ahora puedes definir la siguiente Funcin en Scilab para la funcin 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 Tambin se necesitara una variable independiente, podramos tomar un tiempo t : t = 0:0.1:501. Esto significa que el programa evala la funcin de 0 a 501 en intervalos de 0.1. Todos los integradores tambin necesitan valores iniciales. Estos tambin se deben dar en forma matricial (aqu un vector).

3. 4.

5. 6.

7. 8.

El siguiente cdigo debe ser escrito en el editor de archivos de Scilab.

Reporte sus resultados.

Xcos Ejemplo 1 Resolver la ecuacin 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 trmino 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

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 tambin conocida. Pero y'''' es la ecuacin 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 mltiples canales 12. Como una opcin, los valores tambin son capturados en una tabla con el bloque de multiplexado 9 y escritos en un archivo con el bloque de escritura en cdigo ascii. Uno puede, por ejemplo querer hacer grficas 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 ejecucin. La funcin escaln (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 estn 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 solucin, 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 opcin til para escribir archivos de texto que pueden ser directamente exportados a otros programas por ejemplo gnuplot. Es el equivalente de Scicos para la instruccin 'fprintfMat' de Scilab. Le tienes que dar un nombre y colocar todas las entradas a un multiplexor (Mux).

Ejemplo 2 Ecuaciones diferenciales no lineales simples. Un bloque con masa = M se mueve contra una superficie rugosa, el coeficiente de friccin 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. Grfica el movimiento del bloque si es jalado 1m a la derecha y soltado a su posicin original.

La ecuacin es y'' = -y -0.15*sing(y'), en este caso no existen entradas externas, pero las condiciones iniciales par ala posicin son puestas a 1 (en el integrador 2). El final integracin 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.

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 aceleracin es negativa por eso el bloque comienza a moverse a la izquierda. Esto significa que la fuerza de friccin constante que sale del bloque suma debe ser positiva para este caso. En el primer punto de cambio, cuando y' se hace positiva, la friccin cambia de signo. NOTA, si el final integracin time es ms grande de lo fsicamente 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 Barrn Garca En esta prctica tardamos un poco ms de tiempo en desarrollarla ya que este software era nuevo para nosotros y no conocamos algunos comandos, una vez ya trabajando con el descubrimos que es muy similar a Matlab tanto en sus comandos como en las pantallas y tambin a la hora de correr nuestro cdigo as como los diagramas de bloques. Estos ltimos nos costaron ms trabajo ya que no encontrbamos los bloques ideales y no conocamos como modificar sus entradas despus de leer algunos tutoriales nos dimos cuenta que es mas fcil de lo que parece.

You might also like