示例#1
0
/*--------------------------------------------------------------------------*/
SCICOS_BLOCKS_IMPEXP void constraint_c(scicos_block *block, int flag)
{
    double *y = NULL, *y2 = NULL, *u = NULL;
    int i = 0;
    int* property = GetXpropPtrs(block);

    switch (flag)
    {
        case 4  :
        {
            for (i = 0; i < NX; i++)
            {
                property[i] = -1;    /* xproperties*/
            }
            break;
        }

        case 7  :
        {
            for (i = 0; i < NX; i++)
            {
                property[i] = block->ipar[i];
            }
            break;
        }

        case 0  :  /* the workspace is used to store discrete counter value */
        {
            u = GetRealInPortPtrs(block, 1);
            for (i = 0; i < NX; i++)
            {
                block->res[i] = u[i];
            }
            break;
        }

        case 1  :
        {
            y = GetRealOutPortPtrs(block, 1);
            for (i = 0; i < NX; i++)
            {
                y[i] = block->x[i];
            }

            if (GetNout(block) == 2)
            {
                y2 = GetRealOutPortPtrs(block, 2);
                for (i = 0; i < NX; i++)
                {
                    y2[i] = block->xd[i];
                }
            }
            break;
        }

        default :
            break;
    }
}
示例#2
0
/*--------------------------------------------------------------------------*/
SCICOS_BLOCKS_IMPEXP void logic(scicos_block *block, int flag)
{
    char *u = NULL, *y = NULL;
    char inp, num;
    int i  = 0, nin = 0, nout = 0, mo = 0;
    char *opar = NULL;
    nin = GetNin(block);
    nout = GetNout(block);
    opar = Getint8OparPtrs(block, 1);
    mo = GetOparSize(block, 1, 1);
    if (flag == 1)
    {
        num = 0;
        for (i = 0; i < nin; i++)
        {
            u = Getint8InPortPtrs(block, i + 1);
            inp = *u;
            if (inp > 0)
            {
                inp = 1;
            }
            else
            {
                inp = 0;
            }
            inp = inp << i;
            num = num + inp;
        }
        for (i = 0; i < nout; i++)
        {
            y = Getint8OutPortPtrs(block, i + 1);
            *y = *(opar + num + i * mo);
        }
    }
    if (flag == 6)
    {
        u = Getint8InPortPtrs(block, 1);
        for (i = 0; i < nout; i++)
        {
            y = Getint8OutPortPtrs(block, i + 1);
            *y = *u;
        }
    }
}
static int inout(scicos_block *block)
{
  struct FlagTestDev * comdev = (struct FlagTestDev *) (*block->work);
  int i;    
     if (get_scicos_time()==comdev->time){
	    comdev->step++;
     } else {
	    comdev->time=get_scicos_time();
	    comdev->step=1;
     }
     printf("Flag 1: update output, step=%d, t=%f\n",comdev->step,comdev->time);

     if (GetNin(block)>0){
         double *u1 = GetRealInPortPtrs(block,1);
         comdev->data=u1[0];
     }
     if (GetNout(block)>0){
         double *y1 = GetRealOutPortPtrs(block,1);
         y1[0]=comdev->data;
     }

  return 0;
}