整理不完全微分PID控制程序.docx
- 文档编号:29650641
- 上传时间:2023-07-25
- 格式:DOCX
- 页数:11
- 大小:17.04KB
整理不完全微分PID控制程序.docx
《整理不完全微分PID控制程序.docx》由会员分享,可在线阅读,更多相关《整理不完全微分PID控制程序.docx(11页珍藏版)》请在冰豆网上搜索。
整理不完全微分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(30
if(Temp>80)Label27->Color=clRed;
if(Temp<30)Image1->Canvas->Pen->Color=clFuchsia;
if(30
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(30
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);//输出数字量
(7)列出安全对策措施建议的依据、原则、内容。
int__stdcall(*AC6611_DA)(int,unsignedlong);//DA输出
(5)为保障评价对象建成或实施后能安全运行,应从评价对象的总图布置、功能分布、工艺流程、设施、设备、装置等方面提出安全技术对策措施;从评价对象的组织机构设置、人员管理、物料管理、应急救援管理等方面提出安全管理对策措施;从保证评价对象安全运行的需要提出其他安全对策措施。
对策措施的建议应有针对性、技术可行性和经济合理性,可分为应采纳和宜采纳两种类型。
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
1.环境总经济价值的构成int__stdcall(*AC6611_AD_CHN)(int,unsignedlong);//设置通道0-15
int__stdcall(*AC6611_ADS)(int,unsignedlong*);//直接采样,返回AD数值0-4095
(1)规划和建设项目环境影响评价。
float__stdcall(*AC6611_ADToVoltage)(intAD,intmode);//转换成实际电压的数据mode=0,1,2对应转换为5V,10,+-5V
[答疑编号502334050102]
价值=支付意愿=市场价格×消费量+消费者剩余
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理 不完全 微分 PID 控制程序