blocks.c

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <math.h>
00003 
00004 #include "machine.h"
00005 #include "../../elementaries_functions/includes/elementaries_functions.h"
00006 #include "scicos.h"
00007  
00008 /*------------------------------------------------
00009  *     Scicos block simulator 
00010  *     A set of elementary blocks 
00011  *------------------------------------------------*/
00012 
00013 #define Abs(x) ( (x) > 0) ? (x) : -(x)
00014 #define Min(x,y)        (((x)<(y))?(x):(y))
00015 #define Max(x,y)        (((x)>(y))?(x):(y))
00016 
00017 typedef  void (scicos0_block) __PARAMS((ARGS_scicos0));
00018 extern scicos0_block F2C(absblk), F2C(andlog), F2C(bidon), F2C(gain);
00019 extern scicos0_block F2C(cdummy), F2C(dband), F2C(cosblk);
00020 
00021 /*------------------------------------------------
00022  *     Scicos block simulator 
00023  *     returns Absolute value of the input 
00024  *------------------------------------------------*/
00025 
00026 
00027 void C2F(absblk)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00028         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00029      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00030      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00031 {
00032   int i;
00033   for (i = 0 ; i <  *nu ; ++i ) y[i] = Abs(u[i]);
00034 } 
00035 
00036 
00037 /*------------------------------------------------
00038  *     Scicos block simulator 
00039  *     Logical and block
00040  *     if event input exists synchronuously, output is 1 else -1
00041  *------------------------------------------------*/
00042 
00043 void C2F(andlog)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00044         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00045      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00046      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00047 {
00048   if ( *flag == 1)  y[0] = ( *nevprt != 3 ) ? -1.00 :  1.00; 
00049 }
00050 
00051 
00052 /*------------------------------------------------
00053  *     Scicos block simulator 
00054  *     does nothing 
00055  *------------------------------------------------*/
00056 
00057 void C2F(bidon)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00058         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00059      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00060      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00061 {
00062 }
00063 
00064 
00065 
00066 /*------------------------------------------------
00067  *     Scicos block simulator 
00068  *     input to output Gain
00069  *     rpar=gain matrix
00070  *------------------------------------------------*/
00071 
00072 void C2F(gain)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00073         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00074      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00075      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00076 {
00077   integer un=1;
00078   C2F(dmmul)(rpar,ny,u,nu,y,ny,ny,nu,&un);
00079 }
00080 
00081 /*------------------------------------------------
00082  *     Scicos block simulator 
00083  *     Dummy state space x'=sin(t)
00084  *------------------------------------------------*/
00085 
00086 void C2F(cdummy)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00087         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00088      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00089      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00090 {
00091   if ( *flag == 0 ) xd[0]=sin(*t);
00092 }
00093 
00094 /*------------------------------------------------
00095  *     Scicos block simulator 
00096  *     Dead Band, 
00097  *     if u(i)<0 ,y(i)=min(0,u+DB(i)/2) 
00098  *     else       y(i)=max(0,u-DB(i)/2) 
00099  *     DB(i)=rpar(i) 
00100  *------------------------------------------------*/
00101 
00102 void C2F(dband)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00103         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00104      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00105      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00106 {
00107   int i;
00108   
00109   for ( i=0 ; i < *nu ; i++ ) 
00110     {
00111       if ( u[i] < 0 ) 
00112         y[i] = Min(0.00,u[i]+rpar[i]/2.00);
00113       else  
00114         y[i] = Max(0.00,u[i]-rpar[i]/2.00);
00115     }
00116 }
00117 
00118 
00119 /*------------------------------------------------
00120  *     Scicos block simulator 
00121  *     
00122  *------------------------------------------------*/
00123 
00124 void C2F(cosblk)(flag, nevprt, t, xd, x, nx, z, nz, tvec, 
00125         ntvec, rpar, nrpar, ipar, nipar, u, nu, y, ny)
00126      integer *flag, *nevprt,*nx,*nz,*nrpar, *ipar, *nipar,*ntvec,*nu,*ny;
00127      double *t, *xd, *x, *z, *tvec, *rpar, *u, *y;
00128 {
00129 
00130   int i;
00131   for ( i=0; i < *nu ; i++)     y[i]= cos(u[i]);
00132 }

Generated on Sun Mar 4 15:03:59 2007 for Scilab [trunk] by  doxygen 1.5.1