我遇到了关于 Xcos c_block 使用的问题。我开发了一个带有以下 C 代码的 c_block:
#include <machine.h>
#include <math.h>
void Ramp(flag,nevprt,t,xd,x,nx,z,nz,tvec,
ntvec,rpar,nrpar,ipar,nipar
,u1,nu1,y1,ny1)
double *t,xd[],x[],z[],tvec[];
int *flag,*nevprt,*nx,*nz,*ntvec,*nrpar,ipar[],*nipar,*nu1,*ny1;
double rpar[],u1[],y1[];
/* modify below this line */
{
static double target = 0;
static double inputDelta = 0;
static double out = 0;
if(u1[0] != target)
{
target = u1[0];
if(target - y1[0] < 0)
{
inputDelta = y1[0] - target;
}
else
{
inputDelta = target - y1[0];
}
}
if(target > y1[0])
{
out += inputDelta*rpar[2]/rpar[0];
if(out > target)
{
out = target;
}
}
else if(target < y1[0])
{
out -= inputDelta*rpar[2]/rpar[1];
if(out < target)
{
out = target;
}
}
y1[0] = out;
}
包含此块的 Xcos 模拟工作:
我的问题是我需要在一个 Xcos 模拟中拥有这个块的多个实例(每个实例都有不同的参数集)。我试图制作这个块的几个副本,并为每个副本设置不同的参数值。这种幼稚的方法导致所有实例的错误行为(所有实例都给出完全相同的输出,但该输出不对应于任何一组参数)。
我的问题是是否有可能在一个模拟中拥有一个 c_block 的多个实例?如果是这样,任何人都可以给我一个建议如何做到这一点?