[Scilab-users] Creating a C Function Block issue to compile&link

pepe peter.balazovic at yahoo.com
Wed Feb 6 10:06:29 CET 2013


Hello,

I am using example from tutorial there is a source for c file:

#include "C:\Program Files
(x86)\scilab-5.4.0\modules\scicos_blocks\includes\scicos_block4.h" 
#include <math.h> 
#include <stdio.h> 
#include <stdlib.h> 
 
#define r_IN(n, i)    ((GetRealInPortPtrs(blk, n+1))[(i)]) 
#define r_OUT(n, i)   ((GetRealOutPortPtrs(blk, n+1))[(i)]) 
 
// parameters 
#define Lhi     (GetRparPtrs(blk)[0])      // integrator high limit 
#define Llo     (GetRparPtrs(blk)[1])      // integrator low limit 
 
// inputs 
#define in      (r_IN(0,0))         // integrator input 
#define gainp   (r_IN(1,0))         // integrator gain when X > 0 
#define gainn   (r_IN(2,0))         // integrator gain when X <= 0 
 
// states 
#define X       (GetState(blk)[0])          // integrator state 
#define Xdot    (GetDerState(blk)[0])       // derivative of the integrator
output 
 
// outputs 
#define out     (r_OUT(0, 0))       // integrator output 
#define Igain   (r_OUT(1, 0))       // integrator gain 
 
// other constants 
#define surf0   (GetGPtrs(blk)[0]) 
#define surf1   (GetGPtrs(blk)[1]) 
#define surf2   (GetGPtrs(blk)[2]) 
#define mode0   (GetModePtrs(blk)[0]) 
 
 
// if X is greater than Lhi, then mode is 1 
// if X is between Lhi and zero, then mode is 2 
// if X is between zero and Llo, then mode is 3 
// if X is less than Llo, then mode is 4 
#define mode_xhzl    1 
#define mode_hxzl    2 
#define mode_hzxl    3 
#define mode_hzlx    4 

void lim_int(scicos_block *blk, int flag)  
  { 
  double gain = 0; 
 
  switch (flag) 
    { 
    case 0: 
      // compute the derivative of the continuous time state 
      if ((mode0 == mode_xhzl && in < 0) || mode0 == mode_hxzl) 
        gain = gainp; 
      else if ((mode0 == mode_hzlx && in > 0) || mode0 == mode_hzxl) 
        gain = gainn; 
      Xdot = gain * in; 
      break; 
 
    case 1:
      // compute the outputs of the block  
     if (X >= Lhi || X <= Llo) 
       Igain = 0; 
     else if (X > 0) 
       Igain = gainp; 
     else 
       Igain = gainn; 
     out = X; 
     break; 
 
   case 9: 
     // compute zero crossing surfaces and set modes 
     surf0 = X - Lhi; 
     surf1 = X; 
     surf2 = X - Llo; 
 
     if (get_phase_simulation() == 1) 
       { 
       if (surf0 >= 0) 
         mode0 = mode_xhzl; 
       else if (surf2 <= 0) 
         mode0 = mode_hzlx; 
       else if (surf1 > 0) 
         mode0 = mode_hxzl; 
       else 
         mode0 = mode_hzxl; 
       } 
     break; 
   } 
 }




--
View this message in context: http://mailinglists.scilab.org/Creating-a-C-Function-Block-issue-to-compile-link-tp4025872p4025875.html
Sent from the Scilab users - Mailing Lists Archives mailing list archive at Nabble.com.



More information about the users mailing list