scilab.presentacion.060405

30
Scilab/Scicos una alternativa a Matlab/Simulink Prof. Víctor M. Alfaro Departamento de Automática Escuela de Ingeniería Eléctrica Universidad de Costa Rica Abril de 2006

Upload: marvin-roque

Post on 14-Aug-2015

93 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: scilab.presentacion.060405

Scilab/Scicos una alternativa a

Matlab/Simulink

Prof. Víctor M. AlfaroDepartamento de AutomáticaEscuela de Ingeniería EléctricaUniversidad de Costa Rica Abril de 2006

Page 2: scilab.presentacion.060405

Programas CACSD y de simulación dinámica

• Scilab/ScicosTM

• 1990• INRIA, ENPC• Consorcio Scilab (2003)• Software de distribución

gratuita INRIA, ENPC• http://scilab.org• Windows (9x/XP),

GNU/Linux, Mac OS X, Solaris

• Versión 4.0 (Febrero 2006)

• Matlab/Simulink®

• 1988• The Mathworks, Inc.• Comercial (varios miles

de US$, versión para estudiantes > US$100)

• http://www.mathworks.com• Windows 2000/XP,

Linux, Mac OS X• Release 2006a (Matlab

7.2/Simulink 6.4)

Page 3: scilab.presentacion.060405

Scilab/Scicos• Scilab

• Lenguage de programación de alto nivel

• Intérprete• Fundamentado en el

manejo de matrices• Herramientas

• Álgebra lineal• Control clásico• Control robusto• Modelos ARMA• Manejo de polinomios• Comunicaciones

• Gráficos 2D y 3D• Procesamiento de

señales• Lógica difusa• Identificación• Optimización no lineal• Otras ...

• Scicos• Simulación de sistemas

dinámicos híbridos• Interconexión de

bloques• Paletas de bloques

(entrada/salida, lineal/no lineal, ...

Page 4: scilab.presentacion.060405

Scilabinterfaz del usuario

Page 5: scilab.presentacion.060405

Scilabopciones del menú

Page 6: scilab.presentacion.060405

Scilabayuda en línea

Page 7: scilab.presentacion.060405

Scilabayuda en línea

Page 8: scilab.presentacion.060405

Scilabcaracterísticas de programación, ...

Nombres de variables (24 caracteres significativos)

Sensible a las mayúsculas, a, A, var, VAR, Var, VAr

Variables predefinidas: %i, %e, %pi, %t, %f

Objeto básico: matriz de dos dimensiones con elementos de punto flotante, precisión doble

Matrices entre [ ] , separador de columnas ; separador de filas ‘ traspuesta

//comentarios Operadores lógicos: ==,

>, < , >=, <=, ~= Lista de comandos: *.sce Ejecución de un “script”

--> exec(‘achivo.sce’); Funciones: *.sci “carga” de biblioteca de

funciones:getf(‘bl_fun.sci’)

los gráficos son sobrepuestos en la ventana activa

Page 9: scilab.presentacion.060405

Scilabvariables, vectores, matrices, polinomios, ...

-->help()-->clear-->a=2;-->b=4;-->c=a*b c = 8.-->d=[1,2,3];-->e=[4;5;6];-->d*e ans = 32.-->e*d ans =! 4. 8. 12. !! 5. 10. 15. !! 6. 12. 18. !

-->d d =! 1. 2. 3. !-->d' ans =! 1. !! 2. !! 3. !-->x=poly(0,'x');-->p=x^3+5*x^2+10*x+1;-->roots(p) ans =! - 0.1054418 !! - 2.4472791 + 1.8694208i !! - 2.4472791 - 1.8694208i !

Page 10: scilab.presentacion.060405

Scilabpolinomios, funciones de transferencia, ...

-->s=poly(0,'s');-->g1=2/((s+1)*(5*s+1));-->g2=5*(2*s+1)/(3*s+1)^3;-->g1*g2 ans =

10 + 20s ---------------------------------- 2 3 4 5 1 + 15s + 86s + 234s + 297s + 135s

-->syslin('c',g1*g2/(1+g1*g2)) ans = 0.0740741 + 0.1481481s ---------------------------------------------------------- 2 3 4 5 0.0814815 + 0.2592593s + 0.6370370s + 1.7333333s + 2.2s + s

Page 11: scilab.presentacion.060405

ScilabSciPad (editor)

--> exec('F:\scilab.test01.sce'); ans = - 2. 4.i - 4.i Scilab 4.0 Scicos Scilab 4.0/Scicos-->

Page 12: scilab.presentacion.060405

Scilabestructuras de control, flujo del programa

if <expre1> <inst1>elseif <expre2> <inst2>else <inst3>end

for <expre> <inst>end

while <expre> <inst>end

select varcase <expre1> <inst1>case <expre2> <inst2>else <inst3>end

Page 13: scilab.presentacion.060405

Scilabfunciones y cadenas de texto

//Funciones en Scilabclear//definición de la funciónfunction xfac = fac(x) if x <= 1 xfac=1 else xfac=x*fac(x-1) endendfunction//n=input('Introduzca un número');nf=fac(n);disp('El factorial de ' + string(n) + '

es ' + string(nf))

--> exec('scilab.test02.sce');Introduzca un número--> 5

El factorial de 5 es 120

-->

Page 14: scilab.presentacion.060405

Scilabmodelado, simulación (ecuac. diferenciales)

inLcL

Lc

VtiRtVdttdiL

tidttdVC

+−−=

=

)()()(

)()(

//Solución de ecuaciones diferen.cleart=0:0.05:8;//definición del modelofunction px = modelo(t,x) R=1.5,L=0.25,C=0.5,u=10 px(1)=1/C*x(2) px(2)=-1/L*x(1)-R/L*x(2)+1/L*uendfunction//llamado a la función odey=ode('rk',[0;0],0,t,modelo);plot2d(t',y'),xgrid(17)xtitle('Circuito RLC','tiempo

(segundos)','Variables de estado')

R

L

CVin

iL

Vc

inLc VuixVx === ,, 21

Page 15: scilab.presentacion.060405

Scilabgráficos de dos y tres dimensiones

• Ventanas• xset(‘window’,1)

• Sub-ventanas• subplot(2,3,2)

• Gráficos 2D• plot2d(t,y)• plot2d(x,y)

• Gráficos 3D• plot3d(x,y,z)

• Gráficos siempre sobre impuestos 0 1 2 3 4 5 6 7 8

0

1

2

3

4

5

6

7

8

9

10

Circuito RLC

tiempo (segundos)

Varia

bles d

e es

tado

Page 16: scilab.presentacion.060405

Scilabgráficos 2D

//Gráficos en Scilabclears=poly(0,'s');cv=[1,2,3,5,6];t=0:0.05:5;w=4;z=[0.1,0.2,0.4,0.6,0.8];//función de transferenciafor i=1:5 g=2/(s^2+2*z(i)*w*s+w^2); gs=syslin('c',g); y=csim('step',t,gs); plot2d(t,y,style=cv(i))endxgrid(17)xtitle('Repuesta sistema

subamortiguado','tiempo','y(t)')legends(['z = 0.1','z = 0.2','z =

0.4','z = 0.6','z = 0.8'],[1,2,3,5,6],opt=4) 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

0.00

0.05

0.10

0.15

0.20

0.25

Repuesta sistema subamortuiguado

tiempo

y(t)

z = 0.1

z = 0.2

z = 0.4

z = 0.6

z = 0.8

Page 17: scilab.presentacion.060405

Scilabsimulación (sistemas lineales)

//Simulación en Scilabcleart=0:0.05:5;s=poly(0,'s');z=0.25;w=4;//función de transferenciag=2/(s^2+2*z*w*s+w^2);gs=syslin('c',g);//respuesta al escalónsubplot(2,1,1)y=csim('step',t,gs);plot2d(t,y,style=2),xgrid(17)xtitle('Respuesta a un escalón','',

'y1(t)')//respuesta al impulsosubplot(2,1,2)y=csim('impulse',t,gs);plot2d(t,y,style=5),xgrid(17)xtitle('Respuesta al impulso','tiempo

(seg.)','yo(t)')

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.00.00

0.02

0.04

0.06

0.08

0.10

0.12

0.14

0.16

0.18

0.20

Respuesta a un escalón

y1(t)

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

-0.2

-0.1

0.0

0.1

0.2

0.3

0.4

Respuesta al impulso

tiempo (seg.)

yo(t)

Page 18: scilab.presentacion.060405

Scilabgráficos 3D

x=linspace(-%pi,%pi,40);y=x;

plot3d(x,y,sinh(x')*cos(y))

t=linspace(-20*%pi, 20*%pi, 2000);

param3d1(sin(t),t.*cos(t)/max(t),t/100)

-15

-10

-5

0

5

10

15

Z

-4-3

-2-1

01

23

4 X

-4-3

-2-1

01

23

4Y

-0.8

-0.4

0.0

0.4

0.8

Z

-1.0-0.8

-0.6-0.4

-0.20.0

0.20.4

0.60.8

1.0

X

-1.0-0.8

-0.6-0.4

-0.20.0

0.20.4

0.60.8

1.0

Y

Page 19: scilab.presentacion.060405

Scilabsistemas de control

• Raíces de polinomios• Funciones de

transferencia• Diagramas de

bloques• Modelos en variables

de estado (ABCD)• Conversión de

sistemas (FT a VE y viceversa)

• Gráficos• Respuesta al escalón

y al impulso (csim)• Diagrama de Bode• Diagrama de Nyquist • Gráfico de Evans

(lugar de las raíces)• Diagrama de Black

-cartilla de Nichols

Page 20: scilab.presentacion.060405

Scilabgráficos para control

Evans root locus

Real axis

Imag. axis

-25 -20 -15 -10 -5 0 5-15

-10

-5

0

5

10

15open loop poles

asymptotic directions

Magnitude

Hz

db

-210

-110

010

110

210

-140-120-100-80-60-40-200

20

Phase

Hz

degrees

-210

-110

010

110

210

-300-250-200-150-100-500

-1000

-0.453

-0.304 -0.203

-0.123

-0.053

0.011

0.075

0.1440.336

0.507

Nyquist plot

Re(h(2i*pi*f))

Im(h(2i*pi*f))

-0.5 0.0 0.5 1.0 1.5 2.0 2.5-1.5

-1.0

-0.5

0.0

0.5

1.0

1.5

0.01 0.21 0.45

0.74 1.2

1.7 2.2

2.9 3.7

5.2

8.2

14

22

38

70

1e+002

2.3db curve

-12-8-6-5-4-3-2-1.4-1-0.5

0.250.50.711.422.33456812

amplitude and phase contours of y/(1+y)

phase(y) - degree

magnitude(y) - db

-360 -288 -216 -144 -72 0-50.0

-38.8

-27.5

-16.3

-5.0

6.3

17.5

28.8

40.0

Page 21: scilab.presentacion.060405

Scilaboptimización (optim, leastsq, lsqrsolve)

//Mínimo de una funciónclear//función a optimizar (fx)//y su derivada (gx)function [fx,gx,vest]=fcost(x,vest) fx=x.^2-8*x+6 gx=2*x-8endfunction//estimación inicialvin=1;//llamado a la rutina de

optimización[vmin,xopt]=optim(fcost,vin);disp(‘El valor mínimo de la función

es'),disp(vmin)disp('y ocurre en x ='),disp(xopt)

--> exec(‘scilab.test08.sce');

El valor mínimo de la función es

- 10.

y ocurre en x =

4.

-->

Page 22: scilab.presentacion.060405

Scilabajuste de curvas (datafit)

clear//conjunto de pares de datosv=[1,2,3,4,5;1,1.25,3.25,3.75,4.25];...function z=fun2(p,v) z=v(2)-p(1)-p(2)*v(1)-p(3)*v(1).^2-

p(4)*v(1).^3endfunctionpo1=[1 1 1]';po2=[1 1 1 1]';[p1,err1]=datafit(fun1,v,po1)[p2,err2]=datafit(fun2,v,po2)...y1=p1(1)+p1(2)*x+p1(3)*x.^2;y2=p2(1)+p2(2)*x+p2(3)*x.^2+p2(4)*x.^3

;...Parámetros del polinomio de 3er orden[1.9501086,- 2.1132493,1.2411307,- 0.1458400]

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0

0

1

2

3

4

5

polinomio orden 2

polinomio orden 3

Page 23: scilab.presentacion.060405

Scilabinterfaz gráfica de usuario (GUI)

//interfaz gráficadestinos=['Alajuela','Heredia','Limón','

Puntarenas','Volcán Poás'];anuncio=['TRANSPORTES PURA

VIDA','Seleccione su destino'];resp=x_choose(destinos,anuncio);if resp > 0

disp('Buen viaje a '+ destinos(resp))

elsedisp('No seleccionó su destino')

end

-->exec('scilab.test11.sce');

Buen viaje a Limón

Page 24: scilab.presentacion.060405

Scicosinterfaz del usuario

Page 25: scilab.presentacion.060405

Scicospaletas de bloques

Page 26: scilab.presentacion.060405

Scicosdiagramas de bloques

Page 27: scilab.presentacion.060405

Comparación de la sintaxisScilab Matlab

//Programa en Scilabcleart=0:0.05:5;s=poly(0,'s');z=0.25;w=4;//función de transferenciag=32/(s^2+2*z*w*s+w^2);gs=syslin('c',g);//respuesta al escalónsubplot(2,1,1)y1=csim('step',t,gs);plot(t,y1,'b'),xgrid(17)xtitle('Respuesta a un escalón','','y1(t)')////respueta al impulsosubplot(2,1,2)yo=csim('impulse',t,gs);plot(t,yo,'r'),xgrid(17)xtitle('Respuesta al impulso','tiempo

(seg.)','yo(t)')

%Programa en Matlabcleart=0:0.05:5;s=tf('s');z=0.25;w=4;%%función de transferenciags=32/(s^2+2*z*w*s+w^2);%respuesta al escalónsubplot(2,1,1)y1=step(gs,t);plot(t,y1,'b'),grid ontitle('Respuesta a un

escalón'),ylabel('y1(t)')%respueta al impulsosubplot(2,1,2)yo=impulse(gs,t);plot(t,yo,'r'),grid ontitle('Respuesta al

impulso'),xlabel('tiempo (seg.)'),ylabel('yo(t)')

Page 28: scilab.presentacion.060405

Comparación de la respuestaScilab Matlab

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.00.0

0.5

1.0

1.5

2.0

2.5

3.0

Respuesta a un escalón

y1(t)

0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0-3

-2

-1

0

1

2

3

4

5

6

Respuesta al impulso

tiempo (seg.)

yo(t)

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 50

0.5

1

1.5

2

2.5

3Respuesta a un escalón

y1(t)

0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5-4

-2

0

2

4

6Respuesta al impulso

tiempo (seg.)

yo(t)

Page 29: scilab.presentacion.060405

Scilabinformación en Internet

Scilab: http://www.scilab.org Scicos: http://www.scicos.org EIE:

http://www.eie.ucr.ac.cr/software/scilab/ Scilab à l’Enpc (en frances):

http://cermics.enpc.fr/scilab_new/site/ Libro: Campbell, S.L., J-P. Chancellier y R.

Nikoukhah - Modeling and Simulation in Scilab/Scicos, Springer(2006) (Ver 3.1)

Page 30: scilab.presentacion.060405