用C语言编写通用PID功能块 点击:11563 | 回复:450



gongkongedit

    
  • 精华:1099帖
  • 求助:0帖
  • 帖子:14392帖 | 54470回
  • 年度积分:0
  • 历史总积分:622
  • 注册:2008年9月08日
发表于:2003-10-09 20:25:00
楼主
我自己用C语言个通用的PID功能块。效果很不错。再进一步修改。可以达到GE FANUC,SIMENS ,ROCKWELL ,TRICONEX ,OMRON,MIDICON,YOKOGAVA,HONEYWELL,FOXBORO,ABB等一些PLC与DCS 的PID 的同样效果。 欢迎索取源代码。 如有疑问:请联系E_mail: havii@163.com



shiny

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 94回
  • 年度积分:0
  • 历史总积分:340
  • 注册:2003年6月14日
发表于:2005-09-15 14:41:00
421楼
请在这里公开一部分代码吧!!! 让我们理解一下!

peggy

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 2回
  • 年度积分:0
  • 历史总积分:59
  • 注册:2005年10月04日
发表于:2005-10-04 18:08:00
422楼
peggytone@yahoo.com.cn 请给我一份,谢谢!

新学徒工

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 134回
  • 年度积分:0
  • 历史总积分:198
  • 注册:2004年2月16日
发表于:2005-10-06 06:15:00
423楼
请给我一份吧,非常感谢!leifuli059@163.com

飘12

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 8回
  • 年度积分:0
  • 历史总积分:27
  • 注册:2004年6月30日
发表于:2005-10-09 16:37:00
424楼
能给我一份么/ wycauto@sina.com 谢谢

zhiqiang

  • 精华:0帖
  • 求助:0帖
  • 帖子:6帖 | 172回
  • 年度积分:0
  • 历史总积分:270
  • 注册:2005年4月05日
发表于:2005-10-10 21:45:00
425楼
给我一份,谢谢!zzf2008beijing@163.com

ajiangs

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:9
  • 注册:2005年10月11日
发表于:2005-10-11 16:38:00
426楼
给我一份,谢谢ajiangs@yahoo.com

韶峰

  • 精华:0帖
  • 求助:0帖
  • 帖子:3帖 | 31回
  • 年度积分:0
  • 历史总积分:44
  • 注册:2003年12月19日
发表于:2005-10-12 08:41:00
427楼
我也要一份,谢谢 weipeng654@sina.com

henry2008

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:4
  • 注册:2006年1月15日
发表于:2006-01-15 10:35:00
428楼
很好!

havii

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 15回
  • 年度积分:0
  • 历史总积分:104
  • 注册:2002年10月29日
发表于:2006-01-25 09:56:00
429楼
#include <string.h>
  #include <stdio.h>
  /*====================================================================================================
   PID Function
   
   The PID (比例、积分、微分) function is used in mainly
   control applications. PIDCalc performs one iteration of the PID
   algorithm.
  
   While the PID function works, main is just a dummy program showing
   a typical usage.
  =====================================================================================================*/
  
  typedef struct PID {
  
   double SetPoint; // 设定目标 Desired value
  
   double Proportion; // 比例常数 Proportional Const
   double Integral; // 积分常数 Integral Const
   double Derivative; // 微分常数 Derivative Const
  
   double LastError; // Error[-1]
   double PrevError; // Error[-2]
   double SumError; // Sums of Errors
  
  } PID;
  
  /*====================================================================================================
   PID计算部分
  =====================================================================================================*/
  
  double PIDCalc( PID *pp, double NextPoint )
  {
   double dError,
   Error;
  
   Error = pp->SetPoint - NextPoint; // 偏差
   pp->SumError += Error; // 积分
   dError = pp->LastError - pp->PrevError; // 当前微分
   pp->PrevError = pp->LastError;
   pp->LastError = Error;
   return (pp->Proportion * Error // 比例项
   + pp->Integral * pp->SumError // 积分项
   + pp->Derivative * dError // 微分项
   );
  }
  
  /*====================================================================================================
   Initialize PID Structure
  =====================================================================================================*/
  
  void PIDInit (PID *pp)
  {
   memset ( pp,0,sizeof(PID));
  }
  
  /*====================================================================================================
   Main Program
  =====================================================================================================*/
  
  double sensor (void) // Dummy Sensor Function
  {
   return 100.0;
  }
  
  void actuator(double rDelta) // Dummy Actuator Function
  {}
  
  void main(void)
  {
   PID sPID; // PID Control Structure
   double rOut; // PID Response (Output)
   double rIn; // PID Feedback (Input)
  
   PIDInit ( &sPID ); // Initialize Structure
   sPID.Proportion = 0.5; // Set PID Coefficients
   sPID.Integral = 0.5;
   sPID.Derivative = 0.0;
   sPID.SetPoint = 100.0; // Set PID Setpoint
  
   for (;;) { // Mock Up of PID Processing
  
   rIn = sensor (); // Read Input
   rOut = PIDCalc ( &sPID,rIn ); // Perform PID Interation
   actuator ( rOut ); // Effect Needed Changes
   }
  }

suren

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 6回
  • 年度积分:0
  • 历史总积分:73
  • 注册:2006年11月09日
发表于:2007-04-09 19:08:00
430楼
非常感谢给我一份吧,
long_314159@163.com

SML

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:56
  • 注册:2006年10月17日
发表于:2007-04-22 10:05:00
431楼
这么长时间了才看到这贴子,不知现在还能否给俺一份呢
不胜感激zhzj2006@163.com

xptan

  • 精华:0帖
  • 求助:0帖
  • 帖子:2帖 | 1回
  • 年度积分:0
  • 历史总积分:7
  • 注册:2005年10月11日
发表于:2007-04-28 10:25:00
432楼
希望您能看到帖子给我一份,我正在做PID这方面的控制,如能寄给我对我有很大的帮助,谢谢
xptan@163.com

club

  • 精华:0帖
  • 求助:0帖
  • 帖子:47帖 | 739回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2007-04-28 10:47:00
433楼
yshijing981120@126.COM

austin0531

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 2回
  • 年度积分:0
  • 历史总积分:2
  • 注册:2007年5月12日
发表于:2007-05-12 15:58:00
434楼
austin0531@163.com
谢谢了

ZSQzsq

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 4回
  • 年度积分:0
  • 历史总积分:10
  • 注册:2001年10月26日
发表于:2007-05-12 21:48:00
435楼
能给我发吗 谢谢啊 zsq720806@sohu.com

wgs766

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年7月15日
发表于:2007-07-15 10:05:00
436楼
麻烦您给我发一份,它对于我的工作有很大帮助。
  谢谢!

wgs766

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 3回
  • 年度积分:0
  • 历史总积分:3
  • 注册:2007年7月15日
发表于:2007-07-15 10:08:00
437楼
请您无论如何都要给我一份,它对于我的工作很有帮助。万分感谢!wgs766@yahoo.com.cn

离家的孩子

  • 精华:0帖
  • 求助:0帖
  • 帖子:4帖 | 104回
  • 年度积分:0
  • 历史总积分:249
  • 注册:2005年6月22日
发表于:2007-07-15 10:41:00
438楼
是吗,楼主很强啊!

kele1023

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 31回
  • 年度积分:0
  • 历史总积分:252
  • 注册:2003年11月13日
发表于:2008-03-12 12:34:00
439楼
 给我一份,谢谢 nieyinzhuang@sohu.com

d462381900

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2008-11-01 11:07:40
440楼

热门招聘
相关主题

官方公众号

智造工程师