Document not found! Please try again

Introduction to Scilab 5.3 and Xcos

35 downloads 58304 Views 1MB Size Report
Standard rules common to languages as C or Pascal apply for Scilab .... Programming ... A GUI opens with the command xset() that allows to change the.
Introduction to Scilab 5.3 and Xcos Gianluca Antonelli Universit` a degli Studi di Cassino [email protected] http://webuser.unicas.it/lai/robotica http://www.docente.unicas.it/gianluca antonelli

Gianluca Antonelli

Scilab 5.3

License

Copyright (c) 2011 GIANLUCA ANTONELLI. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is available at www.gnu.org

Gianluca Antonelli

Scilab 5.3

Introduction The open source platform for numerical computation

Available at http://www.scilab.org

Gianluca Antonelli

Scilab 5.3

The others

Matlab Octave Freemat Scicoslab ...

Gianluca Antonelli

Scilab 5.3

Running Scilab

From Linux or Windows just selecting the application from the Graphical Menu From Linux also from the shell typing ./scilab from the correct path

Gianluca Antonelli

Scilab 5.3

Scilab command line

Scilab command line is denoted with the symbol -->

It accepts variables declaration, expressions, script and function calls Scilab scripts and functions are ASCII files To re-use a previous command type the up arrow ↑

Gianluca Antonelli

Scilab 5.3

Help

help opens a new window where browse for commands and search

keywords help name fun opens the help window directly at the page corresponding to the function name fun

An on-line help is available http://www.scilab.org/product/man/ A comparison between Matlab/Scilab function in http://www.scilab.org/product/dic-mat-sci/M2SCI doc.htm

Gianluca Antonelli

Scilab 5.3

Variables

A variable can be defined simply with the syntax --> name = i n s t r u c t i o n ;

The ; symbol prevents to print on screen the results Standard rules common to languages as C or Pascal apply for Scilab variables Names are case sensitive: a6=A To see the variable value just type its name on the prompt or use the tool browsevar()

Gianluca Antonelli

Scilab 5.3

Workspace

Variables and functions stay in the workspace commands of general use are who who_user clear load save diary b r o w s e v a r ()

Gianluca Antonelli

Scilab 5.3

Variable types

A specific set of operators is available for the corresponding type Common types are constant , polynomial , function , handle , string , boolean , list , rational , state - space , sparse , b o o l e a n sparse

The type of a variable can be obtained typeof ( v a r i a b l e _ n a m e )

Gianluca Antonelli

Scilab 5.3

Write protected variables

Certain variables √ are predefined and write-protected %i i = −1 immaginary unit %pi π = 3.1415927 . . . pi grek %e e = 2.718281 . . . number of Nepero %eps ε = 2.2 · 10−16 precision (machine dependent) %inf infinity %nan NotANumber %s s polynomial variable %z z polynomial variable %t true boolean variable %f false boolean variable

Gianluca Antonelli

Scilab 5.3

Matrices

To insert a matrix the syntaxes are --> A = [1 , 2 , 3; 4 , 5 , 6; 7 , 8 , 9]; --> A = [1 , 2 , 3 - - >4 5 6 - - >7 ,8 ,9] A = 1. 4. 7.

2. 5. 8.

3. 6. 9.

Gianluca Antonelli

Scilab 5.3

Scalars and vectors

Scalars and vectors are matrices! --> a =[1 3 5]; --> size ( a ) ans = 1.

3.

-->b =3; size ( b ) ans = 1.

1.

Gianluca Antonelli

Scilab 5.3

Incremental vectors

--> x =1:4 x = 1.

2.

3.

4.

--> x = 1 : 2 : 1 0 x = 1. 3.

5.

7.

9.

Also available linspace(x0,xf,npti) and logspace(...)

Gianluca Antonelli

Scilab 5.3

Accessing matrix elements

A(i,j) access the element in row i and column j A(2,4:6) select the columns from 4 to 6 of the second row B=A(1:3,4:6) assign to B the selected submatrix A(:,5) select the column 5 A([1 3],5) select a 1x2 vector of two elements: A(1,5) and A(3,5)

Gianluca Antonelli

Scilab 5.3

Matrix operations

A wide number of operations are available, in addition to the basic operations such as sum, product, transpose, matrix esponential, inverse, rank, kernel, etc. A library of operations are available under the Linear Algebra section of the help Some operations are also defined to be performed on the single elements of the matrix

Gianluca Antonelli

Scilab 5.3

Polynomial operations

Defining a variable as polynomial allows to access several specific operations --> my_pol = 3*% s ^2 + 2*% s my_pol = 2 2s + 3s --> roots ( my_pol ) ans = 0 - 0.6666667

Gianluca Antonelli

Scilab 5.3

Polynomial operations

Define a polynomial from the coefficient: poly Define a polynomial from its expression (previous example) Define a polynomial by operations on elementary polynomials Extract the coefficients of a polynomial: coeff Evaluate the polynomial in one single point: horner Symbolic substitution of the polynomial variable with another

Gianluca Antonelli

Scilab 5.3

Rational operations

Rational functions are the division between two polynomials Several commands defined to their use similar to the polynomial type

Gianluca Antonelli

Scilab 5.3

Script

It is a collection of commands saved in a single ASCII file whose extension is conventionally .sce It is executed typing --> exec ( ’ f i l e _ n a m e. sce ’) ;

Gianluca Antonelli

Scilab 5.3

Functions

A function is a piece of code returning an output given several inputs whose syntax is f u n c t i o n [ y1 ,... , ym ] = fun ( x1 ,... , xn ) commands endfunction

Several functions can be saved in a single ASCII file whose extension is conventionally .sci

Gianluca Antonelli

Scilab 5.3

Functions

User-defined functions are not available until not explicitely called by getf(’name file.sci’)

Loading, saving or clearing the variables causes Scilab to do the same to the functions! Functions see all the workspace Inputs are passed by reference if the function does not change their value otherwise by copy

Gianluca Antonelli

Scilab 5.3

Programming

Common programming constructions for, end while, end if, then, else, end select, case, else, end

Logical operators: & | ˜ & and | or ˜ not

Gianluca Antonelli

Scilab 5.3

Load/Save data

Data in the workspace can be saved in a binary file: save(’name file’)

Data previously saved can be loaded in the workspace: load(’name file’)

C and Fortran-like commands are available to save formatted data in ASCII files Data saved with older version of Matlab can also be loaded

Gianluca Antonelli

Scilab 5.3

Graphics

Graphics commands are executed on windows different from the main one (the Scilex window) To create a new graphic window xset ( ’ window ’ , num ) scf ( num )

General windows-related commands are clf ( num ) , xclear ( num ) , x s e l e c t () , xdel ( num )

Gianluca Antonelli

Scilab 5.3

Plot2d

The command plot2d draws bidimentional curves It uses the current graphic window superimposing the curves It creates a new graphic window if none is open Several drawing possibilities depending on the syntax plot2d ([ x ] ,y , < opt_args >)

Gianluca Antonelli

Scilab 5.3

Plot2d

plot2d(x,y) where x and y are vectors of the same size draws a curve with x data in the horizontal and y data in vertical axes plot2d(y) where y is a vector assumes x=1:n plot2d(x,y) where x is a vector and y is a matrix assumes the same horizontal data for the columns of y plot2d(x,y) where x and y are matrices draws each column of y versus the corresponding column of x

Gianluca Antonelli

Scilab 5.3

Plot2d

Let us draw a sinusoidal signal with ω = 5 and phase φ = π/4 for two periods --> w =5; f =% pi /4; tf =(4*% pi -% pi /4) / w ; --> t = l i n s p a c e (0 , tf ,100) ; plot2d (t , sin ( w * t + f ) )

Refer to the syntax to change colors, add symbols, add labels, title, etc.

Gianluca Antonelli

Scilab 5.3

Understanding a graphic window

The graphic window is an object containing several childs: figure, axis, curves In the previous example the relationship is given by Figure (1) - Axes (1) - C o m p u n d (1) - P o l y l i n e (1)

Gianluca Antonelli

Scilab 5.3

Modyfing the graphic properties

A GUI opens with the command xset() that allows to change the graphic context From the graphic window it is possible to browse the properties of the objects under the menu [edit] From a script/function it is possible to have an handle to an object and modyfing its parameters h = gcf () h = gca () h = gce ()

Gianluca Antonelli

Scilab 5.3

More axes on the same figure

The subplot(ijk) command divides the figure in a matrix of i rows and j columns and select the k element s u b p l o t (211) ; plot2d ( ya ) s u b p l o t (212) ; plot2d ( yb )

Gianluca Antonelli

Scilab 5.3

Exporting your figure

Several commands exist to export your figure such as xs2eps , xs2fig , xs2gif , xs2ppm , xs2ps

and, only for Windows, xs2bmp , xs2emf

Gianluca Antonelli

Scilab 5.3

Dynamic Systems

A powerful tool to the numerical study of Input-Output dynamic systems Input-State-Output dynamic systems Feedback analysis Feedback control design

Gianluca Antonelli

Scilab 5.3

Transfer function

--> s =% s ; --> num =1+ s ; den =( s +2) *( s +3) ; --> P = syslin ( ’c ’ , num , den ) P = 1 + s --------2 6 + 5s + s --> typeof ( P ) ans = rational

Gianluca Antonelli

Scilab 5.3

Transfer function

--> z =% z ; --> Pd = syslin ( ’d ’ ,1 ,z -0.5) Pd = 1 ------- 0.5 + z --> typeof ( Pd ) ans = rational

Gianluca Antonelli

Scilab 5.3

State space representation

--> A = [ -5 -1 -->

6

0];

--> B = [ -1; 1]; --> C = [ -1 0]; --> D =0; --> Sss = syslin ( ’c ’ ,A ,B ,C , D )

Gianluca Antonelli

Scilab 5.3

State space representation

Sss

= Sss (1)

! lss

- 5. 6.

A

B

C

( state - space system :) D

X0

dt

!

Sss (2) = A matrix = - 1. 0. Sss (3) = B matrix =

- 1. 1.

Gianluca Antonelli

Scilab 5.3

State space representation

- 1.

Sss (4) = C matrix = 0. Sss (5) = D matrix =

0. Sss (6) = X0 ( i n i t i a l state ) = 0. 0. Sss (7) = Time domain = c --> typeof ( Sss ) ans = state - space

Gianluca Antonelli

Scilab 5.3

Conversion ss to/from tf

Conversions are always possible tf2ss ss2tf

Conversions are subtles, refer to dynamic systems textbooks Affected by round-off errors See minss, minreal

Gianluca Antonelli

Scilab 5.3

Extract information from tf

The tf is a rational and all the corresponding functions can be applied: --> out = roots ( P . den ) out = - 2. - 3.

Gianluca Antonelli

Scilab 5.3

Extract information from ss

Extract, e.g., the dynamic matrix Sss . A

Extract all matrices [A ,B ,C , D ]= abcd ( Sss ) ;

Gianluca Antonelli

Scilab 5.3

Smart view of ss systems

--> s s p r i n t( Sss ) . | -5 -1 | | -1 | x = | 6 0 |x + | 1 |u y = | -1

0 |x

Gianluca Antonelli

Scilab 5.3

Pole-zero map - continuous time plzr(P);sgrid

Gianluca Antonelli

Scilab 5.3

Pole-zero map - discrete time plzr(P);zgrid

Gianluca Antonelli

Scilab 5.3

Root locus The basic command is evans(Stf)

Gianluca Antonelli

Scilab 5.3

Root locus Default points useless! use evans(Stf,kmax)

Gianluca Antonelli

Scilab 5.3

Root locus design

The basic operation needed to design with the root locus tool is to calculate the value of k that corresponds to a certain point in the locus: --> k = -1/ real ( horner ( Stf ,[1 ,% i ]* locate (1) ) ) locate returns the coordinates of a point in the graphic selected with the mouse horner computes a rational or polynomial in a given point

Gianluca Antonelli

Scilab 5.3

Nichols black(); chart()

Gianluca Antonelli

Scilab 5.3

Nichols

The curve is parametrized according to a constant range(!) Continuous time: [10−3 , 103 ] Hz Discrete time: [10−3, 0.5]

Better to use the whole syntax assigning frequency range: black ( sl , [ fmin , fmax ] [ , step ] [ , c o m m e n t s ])

Gianluca Antonelli

Scilab 5.3

Bode

bode(); gainplot()

Same considerations done for the Nichols diagram Better to use: bode ( sl , [ fmin , fmax ] [ , step ] [ , c o m m e n t s ])

Gianluca Antonelli

Scilab 5.3

Nyquist

nyquist(); m circle()

Same considerations done for the Nichols and Bode diagrams Better to use: n y q u i s t( sl , [ fmin , fmax ] [ , step ] [ , c o m m e n t s ])

Gianluca Antonelli

Scilab 5.3

Horner & Phasemag

horner() evaluates a polynomial/rational in a point

Evaluate F (jω) (in dB and deg) with ω = 5 --> F = syslin ( ’c ’ ,1 ,% s +2) ; --> out = horner (F ,5*% i ) out = 0.0689655 - 0.1724138i - - >[ phi , db ]= p h a s e m a g( out ) db = - 14.62398 phi = - 68.198591

Gianluca Antonelli

Scilab 5.3

A final bird’s-eye view

Stability margins (g margin, p margin) Continuous-discrete time conversion (cls2dls) Simple numerical simulation of dynamics systems Numerical resolution of differential equations (ode) Observability, controllability, Kalman filter Controller design commands

Gianluca Antonelli

Scilab 5.3

Xcos

Graphical dynamic system simulator Library of blocks Continuous/discrete time systems Add custom blocks in C/Fortran/Scilab Generate C code Real-time HIL tests Hard real-time executable

Gianluca Antonelli

Scilab 5.3

How it looks like

Gianluca Antonelli

Scilab 5.3

Run Xcos

Within the Scilab environment From the command prompt --> xcos Menu -> Applications -> Xcos

Gianluca Antonelli

Scilab 5.3

Continuous time on a PC?

Xcos emulates continuous-time dynamic systems via numerical algorithms (see discretization on textbooks) Conceptually similar to the differential vs difference equations

In alternative Xcos executes blocks when an activation input is given Activation signals are used also for discrete-time systems

Gianluca Antonelli

Scilab 5.3

What is a block?

A graphical function with (eventual) Input State Output Scalar/vectorial quantities Continuous/discrete time Activation inputs Activation outputs

Gianluca Antonelli

Scilab 5.3

What is a superblock?

Is a block containing other blocks Same concept as functions inside other functions Improve readability of the diagram

Gianluca Antonelli

Scilab 5.3

Palettes

A library of blocks

Gianluca Antonelli

Scilab 5.3

A basic diagram

Drag-and-drop a source. . . a transfer function and a scope

Gianluca Antonelli

Scilab 5.3

A basic diagram

the whole diagram

Gianluca Antonelli

Scilab 5.3

A basic diagram

Select all the parameters

Gianluca Antonelli

Scilab 5.3

A basic diagram

Run!

Gianluca Antonelli

Scilab 5.3

Blocks’ parameters

Avoid the use of constants in the blocks’ parameters Use variables instead: put all the variables in a file (var.sce) open Diagram -> Context and write exec(’var.sce’) use the variables in the blocks

In alternative global variables

Gianluca Antonelli

Scilab 5.3

Importing data

From proper blocks Reading from binary or formatted files From the workspace

Gianluca Antonelli

Scilab 5.3

Exporting data

To graphic windows (scope. . . ) To binary or formatted files To the workspace Specific graphic output for matrices

Gianluca Antonelli

Scilab 5.3

Beyond the simple diagram

The Debug block Creation of custom blocks Use of C functions Generation of code C from a Xcos diagram Batch simulation of diagrams

Gianluca Antonelli

Scilab 5.3