⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demo_pid.lst

📁 OMRON CP1H的新功能试验程序
💻 LST
字号:
C51 COMPILER V6.12  DEMO_PID                                                               03/10/2008 11:08:08 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE DEMO_PID
OBJECT MODULE PLACED IN G:\PLC_DEMO\DEMO_PID.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE G:\PLC_DEMO\DEMO_PID.C DB SB OE

stmt level    source

   1              #include<string.h>
   2          /*====================================================================================================
   3               PID Function
   4               
   5               The PID (比例、积分、微分) function is used in mainly
   6               control applications. PIDCalc performs one iteration of the PID algorithm.
   7               While the PID function works, main is just a dummy program showing a typical usage.
   8          ==============================================================================*/
   9          
  10            typedef struct PID {
  11                    double SetPoint; // 设定目标 Desired value
  12                    double Proportion; // 比例常数 Proportional Const
  13                    double Integral; // 积分常数 Integral Const
  14                    double Derivative; // 微分常数 Derivative Const
  15                    double LastError; // Error[-1]
  16                    double PrevError; // Error[-2]
  17                    double SumError; // Sums of Errors
  18            } PID;
  19          
  20          /*===================================================================
  21                           PID计算部分
  22           ====================================================================*/
  23          double PIDCalc( PID *pp, double NextPoint )
  24             {
  25   1           double dError, Error;
  26   1           Error = pp->SetPoint - NextPoint; // 偏差
  27   1           pp->SumError += Error; // 积分
  28   1           dError = pp->LastError - pp->PrevError; // 当前微分
  29   1           pp->PrevError = pp->LastError;
  30   1           pp->LastError = Error;
  31   1           return (pp->Proportion * Error // 比例项
  32   1           + pp->Integral * pp->SumError // 积分项
  33   1           + pp->Derivative * dError // 微分项
  34   1           );
  35   1         }
  36          
  37          /*=====================================================
  38                      Initialize PID Structure
  39          ==================================================================*/
  40          void PIDInit (PID *pp)
  41               {
  42   1             memset ( pp,0,sizeof(PID));
  43   1           }
  44          /*===========================================================
  45                     Main Program
  46          ============================================================*/
  47          double sensor (void) // Dummy Sensor Function
  48             {
  49   1           return 100.0;
  50   1         }
  51          void actuator(double rDelta) // Dummy Actuator Function
  52             {rDelta=0;}
  53          
  54          void main(void)
  55              {
C51 COMPILER V6.12  DEMO_PID                                                               03/10/2008 11:08:08 PAGE 2   

  56   1            PID sPID; // PID Control Structure
  57   1            double rOut; // PID Response (Output)
  58   1            double rIn; // PID Feedback (Input)
  59   1      
  60   1            PIDInit ( &sPID ); // Initialize Structure
  61   1            sPID.Proportion = 0.5; // Set PID Coefficients
  62   1            sPID.Integral = 0.5;
  63   1            sPID.Derivative = 0.0;
  64   1            sPID.SetPoint = 100.0; // Set PID Setpoint
  65   1      
  66   1            for (;;) { // Mock Up of PID Processing
  67   2                      rIn = sensor (); // Read Input
  68   2                      rOut = PIDCalc ( &sPID,rIn ); // Perform PID Interation
  69   2                      actuator ( rOut ); // Effect Needed Changes
  70   2                     }
  71   1           }
C51 COMPILER V6.12  DEMO_PID                                                               03/10/2008 11:08:08 PAGE 3   

NAME                                    CLASS   MSPACE  TYPE    OFFSET  SIZE
====                                    =====   ======  ====    ======  ====


size_t . . . . . . . . . . . . . . . .  TYPEDEF  -----  U_INT    -----  2
sensor . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
main . . . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  sPID . . . . . . . . . . . . . . . .  AUTO     DATA   STRUCT   0000H  28
  rOut . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    001CH  4
  rIn. . . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0020H  4
_PIDCalc . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  pp . . . . . . . . . . . . . . . . .  AUTO     DATA   PTR      0000H  3
  NextPoint. . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0003H  4
  dError . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    0007H  4
  Error. . . . . . . . . . . . . . . .  AUTO     DATA   FLOAT    000BH  4
_actuator. . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  rDelta . . . . . . . . . . . . . . .  * REG *  DATA   FLOAT    0004H  4
_PIDInit . . . . . . . . . . . . . . .  PUBLIC   CODE   PROC     0000H  -----
  pp . . . . . . . . . . . . . . . . .  * REG *  DATA   PTR      0001H  3
PID. . . . . . . . . . . . . . . . . .  TYPEDEF  -----  STRUCT   -----  28
  SetPoint . . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0000H  4
  Proportion . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0004H  4
  Integral . . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0008H  4
  Derivative . . . . . . . . . . . . .  MEMBER   -----  FLOAT    000CH  4
  LastError. . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0010H  4
  PrevError. . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0014H  4
  SumError . . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0018H  4
PID. . . . . . . . . . . . . . . . . .  * TAG *  -----  STRUCT   -----  28
  SetPoint . . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0000H  4
  Proportion . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0004H  4
  Integral . . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0008H  4
  Derivative . . . . . . . . . . . . .  MEMBER   -----  FLOAT    000CH  4
  LastError. . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0010H  4
  PrevError. . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0014H  4
  SumError . . . . . . . . . . . . . .  MEMBER   -----  FLOAT    0018H  4


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    361    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      51
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -