ScilabTec_Xcos

Embed Size (px)

DESCRIPTION

project

Citation preview

  • 1Clment DAVID &Yann COLLETTE

    The Scilab Consortium

    XcosHybrid dynamic systems modeler and

    simulator

    16th june 2010

  • 2 Internal Scilab module

    Freely available with Scilab (free and open platform for numerical computation)

    PurposesHybrid dynamic systems modeler and simulator

    Using functional black-boxes and data/event links

    Xcos: Introduction

  • 3Xcos: Features

    Graphically model, compile, and simulate dynamical systemsCombine continuous and discrete-time behaviors in the same model

    Select model elements from Palettes of standard blocks

    Program new blocks in C, Fortran, or Scilab Language

    Use standardsHDF5 standard which has been chosen to guarantee data exchanges between Scilab and Xcos Editor

    A free Modelica compiler which enables the simulation of implicit diagrams

    A brand new graphical user interface based on JGraphX

  • 4Xcos: Overview

  • 5Xcos: Overview

  • 6Xcos: Overview

  • 7Xcos: Overview

  • 8Xcos: Overview

  • 9Xcos: Overview

  • 10

    Xcos: Overview

  • 11

    Xcos: Overview

  • 12

    Xcos: A simple block (1)

    Data links and data ports

    Data communication is handled by data ports and data links (in black)

    Event links and event ports (discrete time)Activation and control is performed through event ports and links (in red).

    Xcos blockInputs Outputs

    Controls

    Commands

  • 13

    Xcos: A simple block (2)

    An interface function (Scilab macro)

    Used to configure the block when editing the diagram

    A functional implementationUsed to simulate the block in the simulation engine

    Inputs Outputs

    Controls

    Commands

    parametersmanagement

    BLOCK.sci

    runtime evaluationfunction

    block.c

  • 14

    Xcos editor

    Scicos compiler

    Scilab ScicossimulatorCode

    generation

    Java-based diagram editor Ergonomic Run in parallel with Scilab interpreter Backward compatibility

    Xcos: the new editor

  • 15

    Xcos: Reusing Scilab quality process

    Available in nightly builds Integrated in Scilab roadmap Use Scilab development flow

    Git revision system Code review Automatic nightly validation

  • 16

    Demo time,

    any questions ?

    www.scilab.org

  • 17

    ScilabTec 2010

    Optimization of a PID regulator

  • 18

    Optimization of a PID regulator

    The content of the xcos context:

    if ~exists('w0') then w0 = 2*%pi*100; endif ~exists('K0') then K0 = 0.01; endif ~exists('m') then m = 0.5; endif ~exists('P') then P = 1; endif ~exists('I') then I = 1; endblock_output('values') = zeros(2000,2);block_output('times') = zeros(2000,1);

  • 19

    Optimization of a PID regulator

    importXcosDiagram('automatic_test.xcos');

    function y = f_pid(x)context.w0 = w0;context.m = m;context.K0 = K0;context.P = x(1)*Pfact;context.I = x(2)*Ifact;Info = scicos_simulate(scs_m,list(),context,flag='nw');y_error = mean(abs((block_output('values')(:,1) - block_output('values')(:,2))));y_diff = mean(abs(diff(block_output('values')(:,2))));y = 0.5*y_error + 0.5*1*y_diff; .

    endfunction

  • 20

    Optimization of a PID regulator

    Before optimization After optimization

  • 21

    Demo time,

    any questions ?

    www.scilab.org

  • 22

    ScilabTec 2010

    Programming new blocks

  • 23

    Definition of a new C blockGoal:Store N samples of the input in a bufferOuput the buffer as a vector output of size N

    Parameters:Padding value (real parameter - rpar)Buffer size (int parameter - ipar)

    We will first interface our block through a GENERIC block (In the user defined palette).

    00,51

    0,50

    -0,5-1

    -0,50

    0,51

    Buffer size

  • 24

    Definition of a new C blockThe simulation function side

    #include "scicos_block4.h"

    void buffer_vect_xcos(scicos_block *block, int flag){ int nsamples = GetIparPtrs(block)[0]; double padding_value = GetRparPtrs(block)[0];

    switch(flag) {

    case Initialization: GetWorkPtrs(block) = (double *)MALLOC(sizeof(double)*nsamples); for(int i=0;i

  • 25

    Definition of a new C blockThe interface function side (1/2)

    function [x,y,typ]=BUFFERVECT_c(job,arg1,arg2)...select jobcase 'plot' then standard_draw(arg1)case 'getinputs' then [x,y,typ] = standard_inputs(arg1)case 'getoutputs' then [x,y,typ] = standard_outputs(arg1)case 'getorigin' then [x,y] = standard_origin(arg1)case 'set' then

    case 'define' then

    endendfunction

    A

    B

  • 26

    Definition of a new C blockThe interface function side (2/2)

    case 'define' then buf_size = 1; pad_val = 0.0;

    model = scicos_model(); model.sim = list('buffer_vect',4); model.in = 1; model.in2 = 1; model.intyp = 1; model.outtyp = 1; model.out = buf_size; model.out2 = 1; model.evtin = 1; model.ipar = [buf_size]; model.rpar = [pad_val]; model.blocktype = 'd'; model.dep_ut = [%t %f];

    label = string([buf_size; pad_val]); ...end

    case 'set' then while %t do

    [ok,buf_size,pad_val,exprs] = scicos_getvalue('Set parameters Block',..

    ['Buffer size';'Padding value'], list('vec',1,'vec',1), label);

    if ~ok then break, end if (buf_size

  • 27

    The FFT scope

    Some more custom blocks

    Signal 1

    Signal 2

    This block is not yet available under Scilab.(Scilab 5.3)

  • 28

    External module hierarchyXcosMod

    builder.sceEtc

    XcosMod.startXcosMod.quit

    macroshelp

    en_USfr_FR

    sci_gatewayCCppFfortran

    srcCCppFortran

    testsunit_testsnonreg_tests

    Building the blocks and build the palette

    Loading macros, libs, gateways and adding the palette to xcos

    The interfacing functions of the blocks + others functions

    The simulation functions of the blocks + other functions

  • 29

    Palette loading process

    // Build xcos palette// =========================================================

    xpal = xcosPal("Buffer");xpal = xcosPalAddBlock(xpal, 'FFT_SCOPE', module_dir + '/macros/img/fft_scope.jpg');xpal = xcosPalAddBlock(xpal, 'PS_SCOPE', module_dir + '/macros/img/ps_scope.jpg');xpal = xcosPalAddBlock(xpal, 'VECTOR_SCOPE', module_dir + '/macros/img/vector_scope.jpg');xpal = xcosPalAddBlock(xpal, 'BUFFER_VECT', module_dir + '/macros/img/buffer_vect.jpg');xpal = xcosPalAddBlock(xpal, 'REAL_FFT', module_dir + '/macros/img/real_fft.jpg');xpal = xcosPalAddBlock(xpal, 'INVERSE_FFT', module_dir + '/macros/img/inverse_fft.jpg');xpal = xcosPalAddBlock(xpal, 'WINDOW_FUNC', module_dir + '/macros/img/window_func.jpg');

    xcosPalExport(xpal, module_dir + '/Buffer.xpal');

    // load palette// ======================================

    xcosPalAdd(module_dir + '/Buffer.xpal');

    A part of XcosMod/builder.sce

    A part of XcosMod/etc/XcosMod.start

  • 30

    Demo time,

    any questions ?

    www.scilab.org

  • 31

    Thanks for your attention,

    any questions ?

    www.scilab.org

    Diapo 1Diapo 2Diapo 3Diapo 4Diapo 5Diapo 6Diapo 7Diapo 8Diapo 9Diapo 10Diapo 11Diapo 12Diapo 13Diapo 14Diapo 15Diapo 16Diapo 17Diapo 18Diapo 19Diapo 20Diapo 21Diapo 22Diapo 23Diapo 24Diapo 25Diapo 26Diapo 27Diapo 28Diapo 29Diapo 30Diapo 31