最近在论坛看到好多网友寻西门子PLC FB41的SCL源码,现在就将我从网上搜集(因原始出处好像不能访问了,时间久了我也忘记了,)的源码贴出来,此源程序来源于网络,不保证编译后与原版一致,仅供参考.源码我粗略看了一遍,好象是不完全微分PID,但由于使用的是位置式PID,所以里面还做了手自动的无扰动切换,但个人感觉无扰动切换还是增量PID好,无需做任何处理就直接支持.源码可以通过编译,内容如下:
FUNCTION_BLOCK ”CONT_C”
TITLE ='continuous PID controller'
最新论坛网站源码AUTHOR : MT
FAMILY : ICONT
NAME : CONT_C
VERSION : ’1.5'
KNOW_HOW_PROTECT
VAR_INPUT
    COM_RST :      BOOL := FALSE;  //完全重启动
    MAN_ON :        BOOL := TRUE;   //手动值打开
    PVPER_ON :      BOOL := FALSE;  //外设过程变量打开
    P_SEL :         BOOL := TRUE;   //比例作用打开
    I_SEL :         BOOL := TRUE;   //积分作用打开
    INT_HOLD :      BOOL := FALSE;  //积分作用保持
    I_ITL_ON :      BOOL := FALSE;  //积分作用初始化
    D_SEL :         BOOL := FALSE;  //微分作用打开
    CYCLE :         TIME := T#1S;   //采样时间
    SP_INT :        REAL := 0。0;    //内部设定值
    PV_IN :         REAL := 0.0;    //过程变量输入
    PV_PER :        WORD := W#16#0; //外设过程变量
    MAN :           REAL := 0.0;    //手动值
    GAIN :          REAL := 2。0;    //比例增益
    TI :            TIME := T#20S;  //积分复位时间
    TD :            TIME := T#10S;  //微分时间
    TM_LAG :        TIME := T#2S;   //微分作用时间延时
    DEADB_W :      REAL := 0.0;    //死区带宽
    LMN_HLM :      REAL := 100。0;  //积分值上限
    LMN_LLM :      REAL := 0.0;    //积分值下限
    PV_FAC :        REAL := 1。0;    //过程变量因子
    PV_OFF :        REAL := 0.0;    //过程变量偏移量
    LMN_FAC :      REAL := 1.0;    //调节值因子
    LMN_OFF :      REAL := 0。0;    //调节值偏移量
    I_ITLVAL :      REAL := 0.0;    //积分作用的初始化值
    DISV :          REAL := 0.0;    //干扰变量
END_VAR
VAR_OUTPUT
    LMN :           REAL := 0.0;    //调节值
    LMN_PER :      WORD := W#16#0; //外设调节值
    QLMN_HLM :      BOOL := FALSE;  //达到调节值上限
    QLMN_LLM :      BOOL := FALSE;  //达到调节值下限
    LMN_P :         REAL := 0.0;    //比例分量
    LMN_I :         REAL := 0。0;    //积分分量
    LMN_D :         REAL := 0。0;    //微分分量
    PV :            REAL := 0。0;    //
    ER :            REAL := 0.0;    //误差信号
END_VAR
VAR
    sInvAlt :      REAL := 0.0;    //上周期比例偏差值
    sIanteilAlt :   REAL := 0.0;    //上周期积分值
    sRestInt :      REAL := 0。0;    //上周期积分偏差量(浮点数计算偏差)
    sRestDif :      REAL := 0.0;    //上周期微分偏差量(浮点数计算偏差)
    sRueck :        REAL := 0。0;    //
    sLmn :          REAL := 0。0;    //上周期调节值
    sbArwHLmOn :    BOOL := FALSE;  //上周期达到调节值上限
    sbArwLLmOn :    BOOL := FALSE;  //上周期达到调节值下限
    sbILimOn :      BOOL := TRUE;   //备用-本程序没有使用该变量
END_VAR
VAR_TEMP
    rCycle :        REAL ;    //采样时间浮点值
    Iant :          REAL ;    //积分增量
    Diff :          REAL ;    //积分量
    Istwert :      REAL ;    //过程变量浮点值
    ErKp :          REAL ;    //偏差比例值
    rTi :           REAL ;    //积分时间浮点值
    rTd :           REAL ;    //微分时间浮点值
    rTmLag :        REAL ;    //微分作用时间延时浮点值
    Panteil :      REAL ;    //比例值
    Ianteil :      REAL ;    //积分值
    Danteil :      REAL ;    //微分值
    Verstaerk :     REAL ;    //
    RueckDiff :     REAL ;    //
    RueckAlt :      REAL ;    //上周期积分量
    dLmn :          REAL ;    //调节量
    gf :            REAL ;    //Hilfwert
    rVal :          REAL ;    //Real Hilfsvariable
END_VAR
    IF COM_RST THEN //PID初始化
        sIanteilAlt := I_ITLVAL ;
        LMN := 0。0 ;
        QLMN_HLM := FALSE ;
        QLMN_LLM := FALSE ;
        LMN_P := 0.0 ;
        LMN_I := 0.0 ;
        LMN_D := 0.0 ;
        LMN_PER := W#16#0 ;
        PV := 0.0 ;
        ER := 0.0 ;
        sInvAlt := 0。0 ;
        sRestInt := 0.0 ;

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。