注册名:

密码:

个人注册

企业注册

商务申请

商务管理平台

企业管理平台

个人管理平台

我的工控博客

中国工控网www.chinakong.com

首页 | 新闻中心 | 工控论坛 | 经验视点 | 工控商务 | 电气手册 | 工控博客 | 招聘求职 | 网上调查 | 企业中心 | 供求信息 | 资料中心 | 工控书店

所在位置:工控论坛 -- PLC论坛 -- PLC论坛(非专题) -- PLC应用

中国工控网搜索:

 登陆:密码:  注册  密码

搜索:

发表人:wwjwwj1 发表时间:2007/5/3 21:36:00  

 

 本栏论题: 标准的PID处理例程  [6453]

    标准的PID处理例程
   
   
    /*====================================================================================================
    这是从网上找来的一个比较典型的PID处理程序,在使用单片机作为控制cpu时,请稍作简化,具体的PID
    参数必须由具体对象通过实验确定。由于单片机的处理速度和ram资源的限制,一般不采用浮点数运算,
    而将所有参数全部用整数,运算到最后再除以一个2的N次方数据(相当于移位),作类似定点数运算,可
    大大提高运算速度,根据控制精度的不同要求,当精度要求很高时,注意保留移位引起的“余数”,做好余
    数补偿。这个程序只是一般常用pid算法的基本架构,没有包含输入输出处理部分。
    =====================================================================================================*/
    #i nclude <string.h>
    #i nclude <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
    }
    }
   
   
   

以下是关于《标准的PID处理例程》论题的回复(共11篇)

回复人:zhye234 

 回复时间:2007/6/25 15:36:00

支持(1099) | 反对(1174)

 

    s7200的pid程序有吗?

回复人:marui1026 

 回复时间:2007/8/26 11:10:00

支持(1105) | 反对(1154)

 

    请问你实际操作过吗?

回复人:ycl_mumu 

 回复时间:2007/9/10 10:26:00

支持(2200) | 反对(1071)

 

    大哥,給出一堆程序誰能看懂啊。能不能說其編程思路,這樣大家自己就可以編寫了。

回复人:donghp 

 回复时间:2007/10/9 12:18:00

支持(1023) | 反对(1091)

 

    PLC200里就可以自己编

回复人:xj2007 

 回复时间:2008/1/5 12:04:00

支持(1409) | 反对(1228)

 

    请问你实际操作过吗?

回复人:xyyb 

 回复时间:2008/12/13 23:07:00

支持(1028) | 反对(1020)

 

    请问你实际操作过吗?

回复人:131291561 

 回复时间:2009/11/29 23:15:00

支持(959) | 反对(1035)

 

    可以这样么?

回复人:306017210 

 回复时间:2010/4/28 13:39:00

支持(888) | 反对(959)

 

    看看,

回复人:只爱小贝 

 回复时间:2011/3/13 23:15:00

支持(1189) | 反对(1250)

 

    可以参考一下

回复人:hjh2688 

 回复时间:2011/4/27 13:54:00

支持(975) | 反对(1000)

 

    谁用过?有现场使用过吗?

回复人:nianyou 

 回复时间:2012/5/7 17:38:00

支持(1132) | 反对(1217)

 

    试一试

如果要回复本栏论题,请首先中国工控网www.chinakong.com

·如果你已经是中国工控网www.chinakong.com成员,请直接登录。

·如果你还不是中国工控网www.chinakong.com成员,请首先注册,注册为免费!

注册名:

密  码:

           注册中国工控网www.chinakong.com
           忘记密码

关闭该窗口

关于我们     免责声明     服务项目     广告联系     友情链接     联系方式     意见反馈     设为首页     加入收藏

 ©2023-2025 中国工控网(www.chinakong.com) 版权所有 豫ICP备17046657号

管理员信箱:chinakong98@163.com  服务热线:13525974529

洛阳博德工控自动化技术有限公司

中国    洛阳