不完全微分PID控制程序.docx

上传人:b****7 文档编号:10429470 上传时间:2023-02-11 格式:DOCX 页数:10 大小:16.30KB
下载 相关 举报
不完全微分PID控制程序.docx_第1页
第1页 / 共10页
不完全微分PID控制程序.docx_第2页
第2页 / 共10页
不完全微分PID控制程序.docx_第3页
第3页 / 共10页
不完全微分PID控制程序.docx_第4页
第4页 / 共10页
不完全微分PID控制程序.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

不完全微分PID控制程序.docx

《不完全微分PID控制程序.docx》由会员分享,可在线阅读,更多相关《不完全微分PID控制程序.docx(10页珍藏版)》请在冰豆网上搜索。

不完全微分PID控制程序.docx

不完全微分PID控制程序

//---------------------------------------------------------------------------

#include

#pragmahdrstop

#include"Unit1.h"

//---------------------------------------------------------------------------

#pragmapackage(smart_init)

#pragmaresource"*.dfm"

floatSP=6.0,PV=0.0,MV=0.0,SP_T=0;

floatHS=10.0,LS=2.0,HL=7.5,LL=2.5;

floatP=0.5,I=10,D=5,T=1.0,Tf=1.0;

floatUk=0.0,Uk1=0.0,DeltaUk=0.0,DeltaUk1=1.0;

floatEk=0.0,Ek1=0.0,Ek2=0.0;

floata,q0,q1,q2;

intpvtrend[480];

intsptrend[480];

intmvtrend[480];

TForm1*Form1;

//---------------------------------------------------------------------------

__fastcallTForm1:

:

TForm1(TComponent*Owner)

:

TForm(Owner)

{

}

//---------------------------------------------------------------------------

void__fastcallTForm1:

:

FormCreate(TObject*Sender)

{

hDLL=LoadLibrary("ac6611.dll");

if(hDLL!

=NULL)Label1->Caption="AC6611.dllloadok!

";

(FARPROC&)AC6611_CreateDevice=GetProcAddress(hDLL,"AC6611_CreateDevice");//创建驱动句柄

(FARPROC&)AC6611_CloseDevice=GetProcAddress(hDLL,"AC6611_CloseDevice");//关闭驱动句柄

(FARPROC&)AC6611_DI=GetProcAddress(hDLL,"AC6611_DI");//数字量输入,port=0-1两个通道,8位数据由DiData返回

(FARPROC&)AC6611_DO=GetProcAddress(hDLL,"AC6611_DO");//数字量输出,port=0-1两个通道,8位数据由DoData输出

(FARPROC&)AC6611_DiBit=GetProcAddress(hDLL,"AC6611_DiBit");//数字量输入,port=0-1两个通道,指定位输入

(FARPROC&)AC6611_DoBit=GetProcAddress(hDLL,"AC6611_DoBit");//数字量输出,port=0-1两个通道,指定位输出

 

(FARPROC&)AC6611_DA=GetProcAddress(hDLL,"AC6611_DA");//DA输出,0-4095

(FARPROC&)AC6611_VoltageToDA=GetProcAddress(hDLL,"AC6611_VoltageToDA");

(FARPROC&)AC6611_AD=GetProcAddress(hDLL,"AC6611_AD");//通用AD采样

(FARPROC&)AC6611_AD_CHN=GetProcAddress(hDLL,"AC6611_AD_CHN");//设置AD通道0-15

(FARPROC&)AC6611_ADS=GetProcAddress(hDLL,"AC6611_ADS");//直接AD采样,为单通道AD采样设计

(FARPROC&)AC6611_ADToVoltage=GetProcAddress(hDLL,"AC6611_ADToVoltage");

hDevice=AC6611_CreateDevice(0,&ErrorOf6611);//创建驱动,选择第0块卡

if(hDevice!

=-1){

Label2->Caption="AC6611CardIsExist!

";

}else{

Label2->Caption="AC6611CardIsnotExist!

";

}

}

//---------------------------------------------------------------------------

void__fastcallTForm1:

:

Timer1Timer(TObject*Sender)

{

unsignedlongad;

unsignedlongda;

AC6611_AD(hDevice,5,&ad);//tongdao

PV=ad*(HS-LS)/4095.0;

Edit14->Text=FloatToStrF(PV,0,4,4);

PV=StrToFloat(Edit14->Text);

floatTemp=(PV-LS)*100/(HS-LS);

SP_T=(SP-LS)*100/(HS-LS);

Edit1->Text=FloatToStrF(Temp,0,4,4);

Ek=SP-PV;

DeltaUk=a*DeltaUk1+(1-a)*(q0*Ek+q1*Ek1+q2*Ek2);

Uk=Uk1+DeltaUk;

if(Uk>100.0)Uk=100.0;

if(Uk<0)Uk=0;

DeltaUk1=DeltaUk;

Uk1=Uk;

Ek2=Ek1;

Ek1=Ek;

da=(unsignedshortint)(Uk*4095.0/100.0);

AC6611_DA(hDevice,da);

MV=Uk;

Edit15->Text=FloatToStrF(MV,0,4,4);

for(inti=0;i<479;i++)

{

pvtrend[i]=pvtrend[i+1];

sptrend[i]=sptrend[i+1];

mvtrend[i]=mvtrend[i+1];

}

pvtrend[479]=300*PV/(HS-LS);

sptrend[479]=300*SP/(HS-LS);

mvtrend[479]=300*MV/100.0;

 

//绘制趋势曲线

Image1->Picture->LoadFromFile("qushi.bmp");

Image1->Canvas->Pen->Width=1;

Image1->Canvas->Pen->Color=clBlue;

Image1->Canvas->MoveTo(0,300);

for(inti=0;i<480;i++)

Image1->Canvas->LineTo(i,300-sptrend[i]);

 

if(Temp<30)Label27->Color=clFuchsia;

if(30Color=clBlack;

if(Temp>80)Label27->Color=clRed;

 

if(Temp<30)Image1->Canvas->Pen->Color=clFuchsia;

if(30Canvas->Pen->Color=clBlack;

if(Temp>80)Image1->Canvas->Pen->Color=clRed;

Image1->Canvas->MoveTo(0,300);

for(inti=0;i<480;i++)

Image1->Canvas->LineTo(i,300-pvtrend[i]);

Image1->Canvas->Pen->Color=clGreen;

Image1->Canvas->MoveTo(0,300);

for(inti=0;i<480;i++)

Image1->Canvas->LineTo(i,300-mvtrend[i]);

 

Image2->Picture->LoadFromFile("bangtu.bmp");

Image2->Canvas->Pen->Color=clRed;

Image2->Canvas->Pen->Width=5;

Image2->Canvas->MoveTo(35,294);

Image2->Canvas->LineTo(35,294-SP*288/(HS-LS));

if(Temp<30)Image2->Canvas->Pen->Color=clFuchsia;

if(30Canvas->Pen->Color=clBlack;

if(Temp>80)Image2->Canvas->Pen->Color=clBlack;

Image2->Canvas->MoveTo(55,294);

Image2->Canvas->LineTo(55,294-PV*288/(HS-LS));

Image2->Canvas->Pen->Color=clBlue;

Image2->Canvas->MoveTo(70,294);

Image2->Canvas->LineTo(70,294-MV*288/100.0);

}

//---------------------------------------------------------------------------

void__fastcallTForm1:

:

Button1Click(TObject*Sender)

{

HS=StrToFloat(Edit3->Text);

LS=StrToFloat(Edit4->Text);

HL=StrToFloat(Edit5->Text);

LL=StrToFloat(Edit6->Text);

P=StrToFloat(Edit8->Text);

I=StrToFloat(Edit9->Text);

D=StrToFloat(Edit10->Text);

Tf=StrToFloat(Edit12->Text);

q0=(100.0/P)*(1+T/I+D/T);

q1=-(100.0/P)*(1+2*D/T);

q2=(100.0/P)*D/T;

SP=StrToFloat(Edit13->Text);

}

//---------------------------------------------------------------------------

void__fastcallTForm1:

:

Button2Click(TObject*Sender)

{

Close();

}

//---------------------------------------------------------------------------

驱动加载程序:

//---------------------------------------------------------------------------

#ifndefUnit1H

#defineUnit1H

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

classTForm1:

publicTForm

{

__published:

//IDE-managedComponents

TTimer*Timer1;

TPageControl*PageControl1;

TTabSheet*TabSheet2;

TLabel*Label1;

TLabel*Label2;

TImage*Image1;

TLabel*Label4;

TLabel*Label5;

TLabel*Label6;

TLabel*Label7;

TLabel*Label8;

TLabel*Label9;

TLabel*Label10;

TLabel*Label11;

TLabel*Label12;

TLabel*Label13;

TLabel*Label14;

TLabel*Label15;

TLabel*Label17;

TLabel*Label18;

TLabel*Label19;

TLabel*Label21;

TLabel*Label22;

TLabel*Label23;

TLabel*Label24;

TLabel*Label26;

TLabel*Label27;

TLabel*Label29;

TImage*Image2;

TLabel*Label16;

TLabel*Label3;

TButton*Button1;

TEdit*Edit3;

TEdit*Edit4;

TEdit*Edit5;

TEdit*Edit6;

TEdit*Edit8;

TEdit*Edit9;

TEdit*Edit10;

TEdit*Edit12;

TEdit*Edit13;

TEdit*Edit14;

TEdit*Edit15;

TButton*Button2;

TEdit*Edit1;

TUpDown*UpDown1;

TTabSheet*TabSheet1;

TLabel*Label20;

TLabel*Label25;

TLabel*Label28;

TLabel*Label30;

TLabel*Label31;

TLabel*Label32;

void__fastcallFormCreate(TObject*Sender);

void__fastcallTimer1Timer(TObject*Sender);

void__fastcallButton1Click(TObject*Sender);

void__fastcallButton2Click(TObject*Sender);

private:

//Userdeclarations

public:

//Userdeclarations

__fastcallTForm1(TComponent*Owner);

};

//---------------------------------------------------------------------------

externPACKAGETForm1*Form1;

//---------------------------------------------------------------------------

#endif

//definethefunctionofDll

HINSTANCEhDLL;//DLL句柄

inthDevice;//驱动句柄--->暂定为全局变量,自定义时,可以自己传递参数

unsignedlongErrorOf6611;

int__stdcall(*AC6611_CreateDevice)(int,unsignedlong*);//创建驱动句柄

int__stdcall(*AC6611_CloseDevice)(int);//关闭驱动句柄

int__stdcall(*AC6611_DI)(int,int,unsignedchar*);//输入数字量

int__stdcall(*AC6611_DO)(int,int,unsignedchar);//输出数字量

int__stdcall(*AC6611_DiBit)(int,int,unsignedlong);//输入数字量

int__stdcall(*AC6611_DoBit)(int,int,unsignedlong,int);//输出数字量

int__stdcall(*AC6611_DA)(int,unsignedlong);//DA输出

int__stdcall(*AC6611_VoltageToDA)(floatVoltage,intmode);//DA电压转换函数,将电压转换成0-4095,mode=0,1对应0-10V,+-10V

int__stdcall(*AC6611_AD)(int,int,unsignedlong*);//自动作延时10uS,返回AD数值0-4095

int__stdcall(*AC6611_AD_CHN)(int,unsignedlong);//设置通道0-15

int__stdcall(*AC6611_ADS)(int,unsignedlong*);//直接采样,返回AD数值0-4095

float__stdcall(*AC6611_ADToVoltage)(intAD,intmode);//转换成实际电压的数据mode=0,1,2对应转换为5V,10,+-5V

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1