?? pid.cpp
字號:
// PID.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "PID.h"
#include "PIDDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPIDApp
BEGIN_MESSAGE_MAP(CPIDApp, CWinApp)
//{{AFX_MSG_MAP(CPIDApp)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPIDApp construction
CPIDApp::CPIDApp()
{
// TODO: add construction code here,
// Place all significant initialization in InitInstance
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CPIDApp object
CPIDApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CPIDApp initialization
BOOL CPIDApp::InitInstance()
{
AfxEnableControlContainer();
// Standard initialization
// If you are not using these features and wish to reduce the size
// of your final executable, you should remove from the following
// the specific initialization routines you do not need.
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
CPIDDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
// TODO: Place code here to handle when the dialog is
// dismissed with OK
}
else if (nResponse == IDCANCEL)
{
// TODO: Place code here to handle when the dialog is
// dismissed with Cancel
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
//////////////////////////////////////////////////////////////////////
// PID Class
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
PID::PID()
{
PidInit();
}
PID::~PID()
{
}
float PID::ControlMode(float f_Pv) //正反作用實現(xiàn)
{
switch(n_Control)
{
case 0:
return f_Pv-f_Sv; //反作用
break;
case 1:
return f_Sv-f_Pv;
break;
default:
return 1.0;
break;
}
}
void PID::NormalPID(float f_Pv,float &f_Mv) //常規(guī)控制算法實現(xiàn)
{
float q0,q1,q2;
q0=f_Kp*(1+f_Ts/f_Ti+f_Td/f_Ts);
q1=-f_Kp*(1+2*f_Td/f_Ts);
q2=f_Kp*f_Td/f_Ts;
e0=ControlMode(f_Pv);
uk=uk+q0*e0+q1*e1+q2*e2;
e2=e1;
e1=e0;
f_Mv=uk;
}
void PID::PidInit() //PID內(nèi)部參數(shù)初始化
{
e0=0;
e1=0;
e2=0;
uk=0;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -