一段VB编纂的代码转成C++语言求教
一段VB编写的代码转成C++语言求教
Const Ts = 0.5 '采样时间
Const L = 300 '仿真步数
pi = 3.14
d = 3 '对象滞后
Dim A(0 To 2) As Single
Dim B(0 To 1) As Single
Dim ek(-2 To -1) As Single 'e(k-1),e(k-2)
Dim u(-10 To L) As Single
Dim y(-20 To L) As Single
Dim yr(0 To L) As Single
Dim time(0 To L) As Single
A(0) = 1: A(1) = -1.6065: A(2) = 0.6065: na = 2 '对象参数
B(0) = 0.1065: B(1) = 0.0902: nb = 1
'控制器参数
kp = kp.Text
ki = ki.Text
kd = kd.Text
'********************** 实时控制 **********************
For k = 0 To L
time(k) = k * Ts
y(k) = 0 '采集实际输出
For I = 1 To na
y(k) = y(k) - A(I) * y(k - I)
Next I
For I = 0 To nb
y(k) = y(k) + B(I) * u(k - d - I)
Next I
yr(k) = 10 * Sgn(Sin(0.01 * 2 * pi * k * Ts)) '方波参考输入
e = yr(k) - y(k)
du = kp * (e - ek(-1)) + ki * e + kd * (e - 2 * ek(-1) + ek(-2)) '增量式PID控制律
u(k) = u(k - 1) + du
ek(-2) = ek(-1): ek(-1) = e '更新数据
Next k
如上代码是VB编写的,我想在VC里面写这段代码,但是老是报错,这是为什么啊 double Ts = 0.5; //采样时间
double pi;
int k,i;
int d = 3; //对象滞后
double A[2];
double B[1];
double LastError,PrevError;
double u[50];
double y[50];
double yr[50];
double time[50];
double e,du;
int na = 2,nb = 1; //对象参数
pi = 3.14;
A[0] = 1;
A[1] = -1.6065;
A[2] = 0.6065;
B[0] = 0.1065;
B[1] = 0.0902;
// UpdateData();
y[0]=0;
y[1]=0;
y[2]=0;
y[3]=0;
yr[0]=10;
yr[1]=10;
yr[2]=10;
yr[3]=10;
u[0]=0;
u[1]=0;
u[2]=0;
u[3]=0;
time[0]=0;
time[1]=Ts;
time[2]=2*Ts;
time[3]=3*Ts;
e=0;
PrevError=0;
LastError=0;
du=0;
for(k=4;k<50;k++)
{
time[k] = k*Ts;
// y[k]=0;
for(i=1;i<=na;i++)
{
y[k]=y[k]-A[i]*y[k-i];
}
for(i=0;i<=nb;i++)
{
y[k]=y[k]+B[i]*u[k-d-i];
}
yr[k]=10;
//yr[k]=10*(Sgn(sin(0.01*2*pi*k*Ts)));
e=yr[k]-y[k];
//du=kp*(e-PrevError)+ki*e+kd*(e-2*PrevError+LastError);
du=0.4*(e-PrevError);
u[k]=u[k-1]+du;
// LastError=PrevError;
PrevError=e;
}
------解决方案--------------------
double A[2];
double B[1];
要改为
double A[3];
double B[2];
Const Ts = 0.5 '采样时间
Const L = 300 '仿真步数
pi = 3.14
d = 3 '对象滞后
Dim A(0 To 2) As Single
Dim B(0 To 1) As Single
Dim ek(-2 To -1) As Single 'e(k-1),e(k-2)
Dim u(-10 To L) As Single
Dim y(-20 To L) As Single
Dim yr(0 To L) As Single
Dim time(0 To L) As Single
A(0) = 1: A(1) = -1.6065: A(2) = 0.6065: na = 2 '对象参数
B(0) = 0.1065: B(1) = 0.0902: nb = 1
'控制器参数
kp = kp.Text
ki = ki.Text
kd = kd.Text
'********************** 实时控制 **********************
For k = 0 To L
time(k) = k * Ts
y(k) = 0 '采集实际输出
For I = 1 To na
y(k) = y(k) - A(I) * y(k - I)
Next I
For I = 0 To nb
y(k) = y(k) + B(I) * u(k - d - I)
Next I
yr(k) = 10 * Sgn(Sin(0.01 * 2 * pi * k * Ts)) '方波参考输入
e = yr(k) - y(k)
du = kp * (e - ek(-1)) + ki * e + kd * (e - 2 * ek(-1) + ek(-2)) '增量式PID控制律
u(k) = u(k - 1) + du
ek(-2) = ek(-1): ek(-1) = e '更新数据
Next k
如上代码是VB编写的,我想在VC里面写这段代码,但是老是报错,这是为什么啊 double Ts = 0.5; //采样时间
double pi;
int k,i;
int d = 3; //对象滞后
double A[2];
double B[1];
double LastError,PrevError;
double u[50];
double y[50];
double yr[50];
double time[50];
double e,du;
int na = 2,nb = 1; //对象参数
pi = 3.14;
A[0] = 1;
A[1] = -1.6065;
A[2] = 0.6065;
B[0] = 0.1065;
B[1] = 0.0902;
// UpdateData();
y[0]=0;
y[1]=0;
y[2]=0;
y[3]=0;
yr[0]=10;
yr[1]=10;
yr[2]=10;
yr[3]=10;
u[0]=0;
u[1]=0;
u[2]=0;
u[3]=0;
time[0]=0;
time[1]=Ts;
time[2]=2*Ts;
time[3]=3*Ts;
e=0;
PrevError=0;
LastError=0;
du=0;
for(k=4;k<50;k++)
{
time[k] = k*Ts;
// y[k]=0;
for(i=1;i<=na;i++)
{
y[k]=y[k]-A[i]*y[k-i];
}
for(i=0;i<=nb;i++)
{
y[k]=y[k]+B[i]*u[k-d-i];
}
yr[k]=10;
//yr[k]=10*(Sgn(sin(0.01*2*pi*k*Ts)));
e=yr[k]-y[k];
//du=kp*(e-PrevError)+ki*e+kd*(e-2*PrevError+LastError);
du=0.4*(e-PrevError);
u[k]=u[k-1]+du;
// LastError=PrevError;
PrevError=e;
}
------解决方案--------------------
double A[2];
double B[1];
要改为
double A[3];
double B[2];