?? demo_pid.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 + -