一级倒立摆C语言程序1.docx
- 文档编号:2368354
- 上传时间:2023-05-03
- 格式:DOCX
- 页数:14
- 大小:16.26KB
一级倒立摆C语言程序1.docx
《一级倒立摆C语言程序1.docx》由会员分享,可在线阅读,更多相关《一级倒立摆C语言程序1.docx(14页珍藏版)》请在冰点文库上搜索。
一级倒立摆C语言程序1
附件1
C语言程序:
//wwwqView.cpp:
implementationoftheCWwwqViewclass
//
#include"stdafx.h"
#include"wwwq.h"
#include"wwwqDoc.h"
#include"wwwqView.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
#include"math.h"
/////////////////////////////////////////////////////////////////////////////
//CWwwqView
IMPLEMENT_DYNCREATE(CWwwqView,CView)
BEGIN_MESSAGE_MAP(CWwwqView,CView)
//{{AFX_MSG_MAP(CWwwqView)
ON_COMMAND(IDM_WEI_ZHI_PID,OnWeiZhiPid)
ON_COMMAND(IDM_ZENG_LIANG_PID,OnZengLiangPid)
//}}AFX_MSG_MAP
//Standardprintingcommands
ON_COMMAND(ID_FILE_PRINT,CView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT,CView:
:
OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW,CView:
:
OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CWwwqViewconstruction/destruction
CWwwqView:
:
CWwwqView()
{
//TODO:
addconstructioncodehere
}
CWwwqView:
:
~CWwwqView()
{
}
BOOLCWwwqView:
:
PreCreateWindow(CREATESTRUCT&cs)
{
//TODO:
ModifytheWindowclassorstylesherebymodifying
//theCREATESTRUCTcs
returnCView:
:
PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
//CWwwqViewdrawing
voidCWwwqView:
:
OnDraw(CDC*pDC)
{
CWwwqDoc*pDoc=GetDocument();
ASSERT_VALID(pDoc);
//TODO:
adddrawcodefornativedatahere
}
/////////////////////////////////////////////////////////////////////////////
//CWwwqViewprinting
BOOLCWwwqView:
:
OnPreparePrinting(CPrintInfo*pInfo)
{
//defaultpreparation
returnDoPreparePrinting(pInfo);
}
voidCWwwqView:
:
OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addextrainitializationbeforeprinting
}
voidCWwwqView:
:
OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)
{
//TODO:
addcleanupafterprinting
}
/////////////////////////////////////////////////////////////////////////////
//CWwwqViewdiagnostics
#ifdef_DEBUG
voidCWwwqView:
:
AssertValid()const
{
CView:
:
AssertValid();
}
voidCWwwqView:
:
Dump(CDumpContext&dc)const
{
CView:
:
Dump(dc);
}
CWwwqDoc*CWwwqView:
:
GetDocument()//non-debugversionisinline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWwwqDoc)));
return(CWwwqDoc*)m_pDocument;
}
#endif//_DEBUG
/////////////////////////////////////////////////////////////////////////////
//CWwwqViewmessagehandlers
voidCWwwqView:
:
PIDInitZengLiang(structPIDZengLiang*pp)
{
memset(pp,0,sizeof(structPIDZengLiang));
}
voidCWwwqView:
:
PIDInitWeiZhi(structPIDWeiZhi*pp)
{
memset(pp,0,sizeof(structPIDWeiZhi));
}
doubleCWwwqView:
:
PIDCalcZengLiang(structPIDZengLiang*pp,doubleNextPoint)
{
pp->ek=(0.0-NextPoint);
doublea=pp->P*(pp->ek-pp->ek_1);
doubleb=pp->I*(pp->ek);
doublec=pp->D*(pp->ek-2.0*pp->ek_1+pp->ek_2);
pp->ek_2=pp->ek_1;
pp->ek_1=pp->ek;
doubleu=a+b+c;
returnu;
}
voidCWwwqView:
:
SDMainZengLiang(CDC*pDC)
{
PIDInitZengLiang(&m_pidZengLiang);
m_pidZengLiang.exp=0;
m_pidZengLiang.P=50;
m_pidZengLiang.I=30;
m_pidZengLiang.D=1;
M=2;
m=0.1;
g=9.8;
a0=0;
V=0;
sita=-90.0;
doublet=0;
deltaT=0.01;
doubleoldSita=sita;
doubleu=0;
doubleoldu=u;
PIDResult=0;
pDC->MoveTo(100,50);
pDC->LineTo(100,600);
pDC->MoveTo(100,500);
pDC->LineTo(650,500);
pDC->MoveTo(106,58);
pDC->LineTo(100,50);
pDC->LineTo(94,58);
pDC->MoveTo(642,506);
pDC->LineTo(650,500);
pDC->LineTo(642,494);
pDC->MoveTo(700,50);
pDC->LineTo(700,600);
pDC->MoveTo(700,500);
pDC->LineTo(1250,500);
pDC->MoveTo(706,58);
pDC->LineTo(700,50);
pDC->LineTo(694,58);
pDC->MoveTo(1242,506);
pDC->LineTo(1250,500);
pDC->LineTo(1242,494);
while
(1)
{
u=PIDCalcZengLiang(&m_pidZengLiang,sita);
doubledeltaSita=2.0*u/(M*g+2.0*m*g);
sita=sita+deltaSita*deltaT;
CPenpen1(PS_SOLID,1,RGB(0,0,0));
pDC->SelectObject(&pen1);
for(intj=100;j<650;j+=50)
{
pDC->MoveTo(j,495);
pDC->LineTo(j,505);
CStringstr;
str.Format("%d",(j-100)/50);
pDC->TextOut(j,510,str);
pDC->TextOut(650,510,"t/s");
}
for(intq=100;q<=600;q+=50)
{
pDC->MoveTo(95,q);
pDC->LineTo(105,q);
CStringstr;
str.Format("%d",(500-q));
pDC->TextOut(75,q,str);
pDC->TextOut(75,50,"θ");
}
CPenpen2(PS_SOLID,1,RGB(0,0,255));
pDC->SelectObject(&pen2);
pDC->MoveTo(100+(int)(t*50),500-(int)(oldSita));
t=t+deltaT;
pDC->LineTo(100+(int)(t*50),500-(int)(sita));
if(t<0.03)
{
continue;
}
CPenpen3(PS_SOLID,1,RGB(0,0,0));
pDC->SelectObject(&pen3);
for(intcc=700;cc<1250;cc+=50)
{
pDC->MoveTo(cc,495);
pDC->LineTo(cc,505);
CStringstr;
str.Format("%d",(cc-700)/50);
pDC->TextOut(cc,510,str);
pDC->TextOut(1250,510,"t/s");
}
for(intdd=100;dd<=600;dd+=50)
{
pDC->MoveTo(695,dd);
pDC->LineTo(705,dd);
CStringstr;
str.Format("%d",(500-dd)*5);
pDC->TextOut(675,dd,str);
pDC->TextOut(690,50,"u");
}
CPenpen4(PS_SOLID,1,RGB(0,0,255));
pDC->SelectObject(&pen4);
pDC->MoveTo(700+(int)((t-deltaT)*50),500-(int)(oldu*0.2));
pDC->LineTo(700+(int)(t*50),500-(int)(u*0.2));
oldu=u;
oldSita=sita;
if(t>10)
{
break;
}
}
}
voidCWwwqView:
:
SDMainWeiZhi(CDC*pDC)
{
PIDInitWeiZhi(&m_pidWeiZhi);
m_pidWeiZhi.exp=0;
m_pidWeiZhi.P=30;
m_pidWeiZhi.I=0.3;
m_pidWeiZhi.D=0.2;
doubleM=2;
doublem=0.1;
doubleg=9.8;
doublesita=-90.0;
doublet=0;
doubledeltaT=0.01;
doubleoldSita=sita;
doubleu=0;
doubleoldu=u;
PIDResult=0;
pDC->MoveTo(100,50);
pDC->LineTo(100,600);
pDC->MoveTo(100,500);
pDC->LineTo(650,500);
pDC->MoveTo(106,58);
pDC->LineTo(100,50);
pDC->LineTo(94,58);
pDC->MoveTo(642,506);
pDC->LineTo(650,500);
pDC->LineTo(642,494);
pDC->MoveTo(700,50);
pDC->LineTo(700,600);
pDC->MoveTo(700,500);
pDC->LineTo(1250,500);
pDC->MoveTo(706,58);
pDC->LineTo(700,50);
pDC->LineTo(694,58);
pDC->MoveTo(1242,506);
pDC->LineTo(1250,500);
pDC->LineTo(1242,494);
while
(1)
{
CPenpen5(PS_SOLID,1,RGB(0,0,0));
pDC->SelectObject(&pen5);
doubleu=PIDCalcWeiZhi(&m_pidWeiZhi,sita);
doubledeltaSita=2.0*u/(M*g+2.0*m*g);
sita=sita+deltaSita*deltaT;
for(intj=100;j<650;j+=50)
{
pDC->MoveTo(j,495);
pDC->LineTo(j,505);
CStringstr;
str.Format("%d",(j-100)/50);
pDC->TextOut(j,510,str);
pDC->TextOut(650,510,"t/s");
}
for(intq=100;q<=600;q+=50)
{
pDC->MoveTo(95,q);
pDC->LineTo(105,q);
CStringstr;
str.Format("%d",(500-q));
pDC->TextOut(75,q,str);
pDC->TextOut(75,50,"Sita");
}
CPenpen6(PS_SOLID,1,RGB(255,0,0));
pDC->SelectObject(&pen6);
pDC->MoveTo(100+(int)(t*50),500-(int)(oldSita));
t=t+deltaT;
pDC->LineTo(100+(int)(t*50),500-(int)(sita));
if(t<0.03)
{
continue;
}
CPenpen7(PS_SOLID,1,RGB(0,0,0));
pDC->SelectObject(&pen7);
for(intcc=700;cc<1250;cc+=50)
{
pDC->MoveTo(cc,495);
pDC->LineTo(cc,505);
CStringstr;
str.Format("%d",(cc-700)/50);
pDC->TextOut(cc,510,str);
pDC->TextOut(1250,510,"t/s");
}
for(intdd=100;dd<=600;dd+=50)
{
pDC->MoveTo(695,dd);
pDC->LineTo(705,dd);
CStringstr;
str.Format("%d",(500-dd)*5);
pDC->TextOut(675,dd,str);
pDC->TextOut(690,50,"u");
}
CPenpen8(PS_SOLID,1,RGB(255,0,0));
pDC->SelectObject(&pen8);
pDC->MoveTo(700+(int)((t-deltaT)*50),500-(int)(oldu*0.2));
pDC->LineTo(700+(int)(t*50),500-(int)(u*0.2));
oldu=u;
oldSita=sita;
if(t>10)
{
break;
}
}
}
doubleCWwwqView:
:
PIDCalcWeiZhi(structPIDWeiZhi*pp,doubleNextPoint)
{
doubleu=0;
pp->ek=pp->exp-NextPoint;
pp->ek_Sum=pp->ek_Sum+pp->ek;
pp->ek_Dot=pp->ek-pp->ek_1;
doublea=pp->P*pp->ek;
doubleb=pp->I*pp->ek_Sum;
doublec=pp->D*pp->ek_Dot;
pp->ek_1=pp->ek;
returnu=a+b+c;
}
voidCWwwqView:
:
OnWeiZhiPid()
{
//TODO:
Addyourcommandhandlercodehere
CDC*pDC=GetDC();
SDMainWeiZhi(pDC);
}
voidCWwwqView:
:
OnZengLiangPid()
{
//TODO:
Addyourcommandhandlercodehere
CDC*pDC=GetDC();
SDMainZengLiang(pDC);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一级 倒立 语言 程序