Я столкнулся с проблемой использования Xcos c_block. Я разработал c_block со следующим кодом C:
#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 в одной симуляции? Если да, то может ли кто-нибудь дать мне совет, как это сделать?