Set backlash parameters | |
initial output | 0 |
gap | 1 |
use zero-crossing (0:no, 1:yes) | 1 |
#include "scicos_block.h" #include <math.h> #if WIN32 #define NULL 0 #endif void backlash(scicos_block *block,int flag) { double* rw,t; if (flag == 4){/* the workspace is used to store previous values */ if ((*block->work= scicos_malloc(sizeof(double)* 4))== NULL ) { set_block_error(-16); return; } rw=*block->work; t=get_scicos_time(); rw[0]=t; rw[1]=t; rw[2]=block->rpar[0]; rw[3]=block->rpar[0]; }else if (flag == 5){ scicos_free(*block->work); }else if (flag == 1) { rw=*block->work; t=get_scicos_time(); if(t>rw[1]) { rw[0]=rw[1]; rw[2]=rw[3]; } rw[1]=t; if(block->inptr[0][0]>rw[2]+block->rpar[1]/2){ rw[3]=block->inptr[0][0]-block->rpar[1]/2; } else if (block->inptr[0][0]<rw[2]-block->rpar[1]/2){ rw[3]=block->inptr[0][0]+block->rpar[1]/2; } else { rw[3]=rw[2]; } block->outptr[0][0]=rw[3]; } else if (flag == 9) { rw=*block->work; t=get_scicos_time(); if(t>rw[1]){ block->g[0] = block->inptr[0][0]-block->rpar[1]/2-rw[3]; block->g[1] = block->inptr[0][0]+block->rpar[1]/2-rw[3]; }else{ block->g[0] = block->inptr[0][0]-block->rpar[1]/2-rw[2]; block->g[1] = block->inptr[0][0]+block->rpar[1]/2-rw[2]; } } }