信捷PLC自编的增量式PID程序

13 篇文章 6 订阅
2 篇文章 0 订阅
/*************************************************************************
   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;      

    }

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值