信捷PLC自编的增量式PID程序
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
/*************************************************************************
FunctionBlockName: PID_1
Version: 1.0.0
Author:
UpdateTime: 2019-10-22 09:53:16
Comment:
**************************************************************************/
void PID_1( WORD W , BIT B )
{
float Set=FW[0];//SetSpeed;//定义设定值
float Actual=FW[2];//定义实际值
float err=FW[4];//定义偏差值
float err_last=FW[6];//定义上一个偏差值
float err_2last=FW[8];
float Perr;
float Derr;
float Kp=FW[10],Ki=FW[12],Kd=FW[14];//定义比例、积分、微分系数
float Value;
err=(Set-Actual)/Set;//偏差
FW[4]=err;
Perr=err-err_last;
Derr=err-2*err_last+err_2last;
if (abs(err)<FW[28])
Value=Kp*Perr+Ki*err*FW[24]+Kd*Derr;
else
Value=Kp*Perr+Ki*err+Kd*Derr;
FW[26]=Value;
FW[8]=err_last;
FW[6]=err;
W[20]=W[20]*(1+Value);
if (W[20]>W[16])
W[20]=W[16];
if (W[20]<W[18])
W[20]=W[18];
int yujian_Votage=W[610];
int SV=W[600];
int CV=W[614];
int Step=SHD[2079+W[922]];
float yujian_Current=FW[612];
float k_yujian;
float SSV;
float err;
if (yujian_Current!=0 & yujian_Votage!=0)
{
k_yujian=yujian_Votage/yujian_Current/10;
}
else
k_yujian=5;
FW[616]=k_yujian;
SSV=SV* k_yujian*10;
W[618]=SSV;
//W[614]=SSV;
if (W[614]>W[618])
W[614]=W[614]-SHD[2081];
else
W[614]=W[614]+SHD[2081];
if (W[614]>1500)
W[614]=1500;
if (W[614]<100)
W[614]=100;
W[640]=W[614];
B[780]=1;
else
B[780]=0;
}