Ignore:
Timestamp:
Feb 19, 2010, 7:08:11 PM (14 years ago)
Author:
Argimiro Resende Secchi
Message:

Starting checking new EML.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/gui/eml/controllers/PIDIncr.mso

    r684 r909  
    3737       
    3838        PID_Select      as Switcher     (Brief="Type of PID Incremental", Valid=["Ideal","Parallel","Series","Ideal_AWBT","Parallel_AWBT","Series_AWBT","Ideal_AW","Parallel_AW","Series_AW"], Default = "Ideal");
    39         Action                          as Switcher     (Brief="Controller action", Valid=["Direct","Reverse"], Default = "Reverse");
    40         Mode                    as Switcher     (Brief="Controller mode", Valid=["Automatic","Manual"], Default = "Automatic");
    41         Clip                            as Switcher     (Brief="Controller mode", Valid=["Clipped","Unclipped"], Default = "Clipped");
    42        
    43         alpha                   as positive                             (Brief="Derivative term filter constant", Default=1);
    44         beta                    as positive                             (Brief="Proportional term setPoint change filter");
    45         bias                    as control_signal       (Brief="Previous scaled bias", Default=0.5);
    46         derivTime       as time_sec                     (Brief="Derivative time constant");
    47         intTime         as time_sec                     (Brief="Integral time constant");
    48         gain                    as positive                             (Brief="Controller gain", Default=0.5);
    49         gamma           as positive                             (Brief="Derivative term SP change filter");
    50         tau                     as time_sec                     (Brief="Input filter time constant");
    51         tauSet          as time_sec                     (Brief="Input filter time constant");
    52         MinInput                as control_signal       (Default=-1000);
     39        Action          as Switcher     (Brief="Controller action", Valid=["Direct","Reverse"], Default = "Reverse");
     40        Mode            as Switcher     (Brief="Controller mode", Valid=["Automatic","Manual"], Default = "Automatic");
     41        Clip            as Switcher     (Brief="Controller mode", Valid=["Clipped","Unclipped"], Default = "Clipped");
     42       
     43        alpha           as positive             (Brief="Derivative term filter constant", Default=1);
     44        beta            as positive             (Brief="Proportional term setPoint change filter");
     45        bias            as control_signal       (Brief="Previous scaled bias", Default=0.5);
     46        derivTime       as time_sec             (Brief="Derivative time constant");
     47        intTime         as time_sec             (Brief="Integral time constant");
     48        gain            as positive             (Brief="Controller gain", Default=0.5);
     49        gamma           as positive             (Brief="Derivative term SP change filter");
     50        tau             as time_sec             (Brief="Input filter time constant");
     51        tauSet          as time_sec             (Brief="Input filter time constant");
     52        MinInput        as control_signal       (Default=0);
    5353        MaxInput        as control_signal       (Default=1000);
    54         MinOutput       as control_signal       (Default=-1000);
    55         MaxOutput       as control_signal       (Default=1000);
     54        MinOutput       as control_signal       (Default=0);
     55        MaxOutput       as control_signal       (Default=1);
    5656
    5757VARIABLES
    5858
    59 in              Input           as control_signal       (Protected=true, PosX=0, PosY=0.5);
    60 out     Output  as control_signal       (Protected=true, PosX=0.54, PosY=1);
    61         SetPoint                as control_signal;
     59in      Input           as control_signal       (Protected=true, PosX=0, PosY=0.5);
     60out     Output          as control_signal       (Protected=true, PosX=0.54, PosY=1);
     61        SetPoint        as control_signal;
    6262       
    6363#++++++++++++++++++++ PID Internal Variables ++++++++++++++++++++++++++++++++
    6464        PID_dderivTerm          as control_signal       (Brief="Derivative term",Unit='1/s', Default=0, Hidden=true);
    65         PID_dFilt                       as control_signal       (Brief="Derivative term filtered", Default=0.5,Unit='1/s', Hidden=true);
    66         PID_error                       as control_signal       (Brief="Error definition for proportional term",Unit='1/s', Hidden=true);
    67         PID_errorD                      as control_signal       (Brief="Error definition for derivative term",Unit='1/s', Hidden=true);
    68         PID_errorI                      as control_signal       (Brief="Error definition for integral term", Hidden=true);
    69         PID_inputFilt                   as control_signal       (Brief="Filtered input", Hidden=true);
     65        PID_dFilt               as control_signal       (Brief="Derivative term filtered", Default=0.5,Unit='1/s', Hidden=true);
     66        PID_error               as control_signal       (Brief="Error definition for proportional term",Unit='1/s', Hidden=true);
     67        PID_errorD              as control_signal       (Brief="Error definition for derivative term",Unit='1/s', Hidden=true);
     68        PID_errorI              as control_signal       (Brief="Error definition for integral term", Hidden=true);
     69        PID_inputFilt           as control_signal       (Brief="Filtered input", Hidden=true);
    7070        PID_dintTerm            as control_signal       (Brief="Integral term", Default=0,Unit='1/s', Hidden=true);
    71         PID_doutp                       as control_signal       (Brief="Sum of proportional, integral and derivative terms",Unit='1/s', Hidden=true);
    72         PID_outps                       as control_signal       (Brief="Variable outp scaled between -1 and 1", Hidden=true);
    73         PID_outp                        as control_signal       (Brief="Variable outp", Hidden=true);
     71        PID_doutp               as control_signal       (Brief="Sum of proportional, integral and derivative terms",Unit='1/s', Hidden=true);
     72        PID_outps               as control_signal       (Brief="Variable outp scaled between -1 and 1", Hidden=true, Default=0.5);
     73        PID_outp                as control_signal       (Brief="Variable outp", Hidden=true);
    7474        PID_dpropTerm           as control_signal       (Brief="Proportional term", Default=0,Unit='1/s', Hidden=true);
    7575        PID_setPointFilt        as control_signal       (Brief="Filtered setPoint", Default=0, Hidden=true);
    76         PID_input                       as control_signal       (Brief="Previous scaled input signal", Default=0.5, Hidden=true);
    77         PID_output                      as control_signal       (Brief="Scaled output signal", Default=0.5, Hidden=true);
     76        PID_input               as control_signal       (Brief="Previous scaled input signal", Default=0.5, Hidden=true);
     77        PID_output              as control_signal       (Brief="Scaled output signal", Default=0.5, Hidden=true);
    7878        PID_setPoint            as control_signal       (Brief="Scaled setPoint",Default=0.5, Hidden=true);
    79         PID_AWFactor            as Real                                 (Brief="Integral term multiplier used in anti-reset windup", Hidden=true);
    80         PID_action                      as Real                                 (Hidden=true);
     79        PID_AWFactor            as Real                         (Brief="Integral term multiplier used in anti-reset windup", Hidden=true);
     80        PID_action              as Real                         (Hidden=true);
    8181#++++++++++++++++++++ ++++++++++++++++++++++++++++++++++++++++++++++++
    8282
     
    8787
    8888"Output "
    89         Output = PID_output*(MaxOutput-MinOutput) +MinOutput;
     89        Output = PID_output*(MaxOutput - MinOutput) + MinOutput;
    9090       
    9191"Set Point "
    9292        PID_setPoint*(MaxInput - MinInput) = SetPoint - MinInput;
    9393
    94         if (tau < 1e-6) then
     94        if (tau < 1e-3*'s') then
    9595                "Input first order filter"
    9696                (tau + 1e-3*'s')*diff(PID_inputFilt)= PID_input - PID_inputFilt;
     
    100100        end
    101101
    102         if (tauSet < 1e-6) then
     102        if (tauSet < 1e-3*'s') then
    103103                "setPoint first order filter"
    104104                (tauSet + 1e-3*'s')*diff(PID_setPointFilt)= PID_setPoint - PID_setPointFilt;
     
    128128        PID_dpropTerm=PID_error; 
    129129       
    130         if (derivTime equal 0) then
     130        if (derivTime < 1e-3*'s') then
    131131                "Derivative term filter"       
    132132                alpha*(derivTime + 1e-3*'s')*diff(PID_dFilt) = PID_errorD - PID_dFilt;
     
    147147        switch Clip
    148148        case "Clipped":
    149                 #if abs(PID_outps)>1 then
    150                 #       "Calculate clipped output when it's saturated"
    151                 #       Ports.output=(sign(PID_outps)*1+1)/2;
    152                 #else
    153                 #       "Calculate clipped output when it's not saturated"
    154                 #       Ports.output=PID_outps;
    155                 #end
    156                 PID_output = max([0, PID_outp]);
     149                if abs(PID_outps)>1 then
     150                        "Calculate clipped output when saturated"
     151                        PID_output=(sign(PID_outps)+1)/2;
     152                else
     153                        "Calculate clipped output when not saturated"
     154                        PID_output=PID_outp;
     155                end
     156                #PID_output = max([0, PID_outp]);
    157157        case "Unclipped":
    158158                "Calculate unclipped output"
Note: See TracChangeset for help on using the changeset viewer.