计算机控制技术课程设计.docx
《计算机控制技术课程设计.docx》由会员分享,可在线阅读,更多相关《计算机控制技术课程设计.docx(23页珍藏版)》请在冰豆网上搜索。
![计算机控制技术课程设计.docx](https://file1.bdocx.com/fileroot1/2023-2/10/7922756c-ca38-4ea4-bac4-3f44384bdb9c/7922756c-ca38-4ea4-bac4-3f44384bdb9c1.gif)
计算机控制技术课程设计
xxxxx大学
学生实习(实训)总结报告
院(系):
_电气与信息工程学院专业班级:
_自动2010-01_
学生姓名:
____学号:
___
实习(实训)地点:
__校内I512__________
报告题目:
_积分分离PID温度控制系统___
报告日期:
2013年06月28日
指导教师评语:
_______________________________________
_____________________________________________________________________________________________________________________________________________________________________________________________________________
成绩(五级记分制):
_____________
指导教师(签字):
_____________________
目录
1实习内容及其要求1
2PCI-1711多功能过程通道卡2
2.1功能特点与技术指标2
2.2应用方法和步骤2
2.2.1软件硬件组成2
2.2.2安装方法2
3方案设计4
3.1加热器的过程特性4
3.2加热器温度控制系统的实现方案4
3.3PCI-1711和加热器接线图设计4
3.4控制程序的方案设计和模块划分5
4数据采集与输出程序设计6
4.1PCI1711数据采集与温度换算程序6
4.2控制量与D/A代码换算及输出程序6
5控制算法程序设计7
5.1曲线的程序实现7
5.2积分分离PID算法8
5.2.1数字PID位置控制算法8
5.2.2数字PID增量型控制算法8
5.3PID算法程序设计9
6控制程序的调试10
6.1主要调试内容10
6.2调试方法10
6.3调试步骤10
7PID参数的整定11
7.1PID各个参数的影响11
7.2整定结果与分析11
8技术小结13
参考文献…………………………………………………………………………14
附录…………………………………………………………………………………………15
1实习内容及其要求
实习目的:
通过实训,让学生了解计算机控制系统的基本组成,提出计算机控制系统的设计思路,初步学会计算机控制系统软硬件设计及调试的方法,具备技术实现能力;基本上能够处理实践过程中出现的问题并提出解决办法,进一步提高学生的计算机应用水平。
要求:
完成一个温度单回路控制系统的设计和调试过程。
主要内容:
通过温度或转速的设定值和反馈值,计算其偏差,并使用PID控制算法输出控制信号,整定PID参数,改进PID算法,使被控的温度达到设定值。
具体实训内容包括PCI-1711过程卡的接线和测试、数据采集程序设计、PID算法程序设计、控制输出程序设计、人机界面程序设计、PID参数整定、实训报告。
2PCI-1711多功能过程通道卡
研华PCI-1711/1731是一款用于PCI总线的功能强大的数据采集卡(DAS)。
该款数据采集卡采用独特电路设计并配有完整功能可用于数据采集和控制。
2.1功能特点与技术指标
PCI-171112-bit低功耗、多功能DAS卡„
可编程计数器/定时器
自动通道/增益切换
即插即用
灵活的输入类型和范围设置
板载FIFO(先入先出)内存
16通道单端A/D输入、成本节约型可选D/A输出
16个数字量输入通道和16个数字量输出通道
2通道D/A输出(仅适用于PCI-1711)
12-bitA/D转换,采样率从最高可达100KHz
2.2应用方法和步骤
2.2.1软件硬件组成
„驱动软件AdvantechDLLdrivers(包含在产品光盘中)
„接线电缆PCL-10168
„接线板PCLD-8710、ADAM-3968
„计算机:
个人计算机或带有PCI总线插槽的工作站
(运行Windows95/98/NT)
深度开发:
应用软件ActiveDAQ、GeniDAQ或其它第三方软件包
2.2.2安装方法
(1)安装PCI-1711的驱动程序,安装完成后需要运用PCI-1711(静态)测试程序对PCI-1711板卡的功能进行测试,以检查PCI-1711卡是否完好和正确。
测试软件采用研华提供的AdvantechDeviceManager进行输入输出通道检测。
(2)设置好PCI-1711的模拟输入范围及DA量程跳线器,关掉PC机电源,将PCI-1711插入主机的任何一个PCI插槽中并将外部的输入、输出线连好。
按照手册连接好我们要的输入输出量范围,然后接入端子板,就可以连接对象的进行采集和控制。
(3)编写程序,可以实现模拟量的输入输出。
图2.1板卡安装流程图
图2.2板卡测试
3方案设计
3.1加热器的过程特性
过程特性:
指被控过程输入量发生变化时,过程输出量的变化规律。
加热器的过程特性是带滞后的一介对象。
也就是它不能发生突变,温度不能再很短的时间升高一个比较大的值,也不能达到瞬间降温。
3.2加热器温度控制系统的实现方案
硬件连接好并测试硬件与电脑能正常的通信后,通过可视化程序设计。
利用PCI-1711板卡采集数据,通过总线送入PC,经过程序算法,得出控制量通过PCI-1711板卡送达加热器,从而达到控制的目的。
3.3PCI-1711和加热器接线图设计
实验室用的加热器是通过温度传感器,转换成了标准的工业标准(4mA—20mA)。
参照PCI-1711板卡手册,最大输入采样电压:
0V-10V。
输入参考电压可采用内部电压也可采用外部。
所以PCI-1711和加热器接线图要满足要求,可以做一个I/V变换在变送器的输出端串一个500欧的电阻,板卡采集的范围就在2—10V,这样在程序中做一个转换就能实现温度0度—100度的显示。
图3.1加热器接线图
3.4控制程序的方案设计和模块划分
控制程序可以分为A/D、PID、D/A、以及人机交互部分。
四大部分A/D进行数据采集。
图3.2控制方案框图
积分分离PID算法得出控制量,D/A输出加热器能接受的控制信号。
人机交互则是可以设置一个合理的温度,人能直接看到控制的结果。
4数据采集与输出程序设计
4.1PCI1711数据采集与温度换算程序
PCI-1711数据采集第一个步骤调用ActiveX控件,通过ActiveX控件掉用板卡的驱动函数使板卡正常工作。
通过温度检测变送器(TT)变送的值,通过I/V转化成2~10V电压信号,通过板卡的模拟量输入通道采集进入计算机,这样就实现了模拟量到计算机的过程。
当数据正确的采集进入计算机后,需要考虑的是采集数据量化问题,也就是标度变化问题,把电压标度转化成温度的标度,达到在界面上可视的效果。
//-----------------------------------反馈信号采集---------------------------
floatcaiyang_V=DAQAI1->RealInput(0);
PV_temp[0]=100.0/8*(caiyang_V-2);//电压到温度
PV=PV_temp[0];
Edit_PV->Text=FloatToStrF(PV,2,1,1);//界面显示PV值
4.2控制量与D/A代码换算及输出程序
由图3.2可知,通过当前值的采集读入内存,然后与设定值进行比较,然后利用积分分离PID算法,我们得出控制量。
然而控制量不能直接输出控制加热器,要把它转为0~5V的控制量,控制加热器温度的升降。
//----------------------U(k)控制信号输出-------------
floatOutput_V=5.0*Un/100;//U(k)温度标度转化成电压控制信号
Edit_MV->Text=FloatToStrF(Un,0,3,3);
MV_temp[0]=Un;
DAQAO1->Channel=0;//选择输出通道
DAQAO1->RealOutput(Output_V);//控制量的输出
5控制算法程序设计
一般PID控制算法根据偏差的比例(P),积分(I),微分(D)进行控制(简称PID控制),是控制系统中应用最广泛的一种控制规律。
实际运行的是经验和理论的分析都表明,这种控制规律对许多工业控制时,都能得到满意的结果,不过用计算机实现PID控制,不是简单的把模拟PID控制规律数字话,而是进一步与计算机的逻辑判断功能结合,使得PID控制规律数字话,而是进一步与计算机的逻辑判断功能结合,使得PID控制更加灵活,更能满足生产过程提出的要求。
积分分离PID控制算法:
在一般的PID控制中,当有较大的扰动或者是大幅度改变设定值时,由于此时有较大的偏差,以及系统有惯性和滞后,故在积分项的作用下,往往会产生较大的超调和长时间的波动。
特别对于温度、成分等变化缓慢的过程,这一现象更为严重。
因此,可采用积分分离措施,即偏差e(k)较大时,取消积分作用:
当偏差e(k)较小时才将积分作用投入。
当|e(k)|>β时,采用PD控制:
当|e(k)|≤β时,采用PID控制;
积分分离阈值β应根据具体对象及控制要求确定。
若β值过大,达不到积分分离的目的;若β的值过小,一旦被控量y(t)无法跳出各积分分离区,只进行PD控制,将会出现残差。
为了实现积分分离,编写程序时必须从数字PID差分方程式中分离出积分项,进行特殊处理。
5.1曲线的程序实现
在进行曲线的绘制时,我们需要将温度的设定曲线和程序中的采样程序结合起来才能够体现出程序的实时性,具体的程序如下:
for(inti=0;i<599;i++)//首先更新缓存数据
{
PV_temp[599-i]=PV_temp[598-i];
SP_temp[599-i]=SP_temp[598-i];
MV_temp[599-i]=MV_temp[598-i];
}
//--------------------------曲线的绘制----------------------------
Image1->Picture->LoadFromFile("BackGround.bmp");//每画一次图清理一次
Image1->Canvas->Pen->Color=clRed;//温度曲线SP的设置
Image1->Canvas->Pen->Width=2;
Image1->Canvas->MoveTo(0,300);
for(intk=0;k<600;k++)
{
Image1->Canvas->LineTo(k,300-3*SP_temp[k]);
}
Image1->Canvas->Pen->Color=clGreen;//控制器MV输出曲线的设置
Image1->Canvas->Pen->Width=2;
Image1->Canvas->MoveTo(0,300);
for(intk=0;k<600;k++)
{
Image1->Canvas->LineTo(k,300-3*MV_temp[k]);
}
Image1->Canvas->Pen->Color=clBlue;//温度变送器PV采样曲线的设置
Image1->Canvas->Pen->Width=2;
Image1->Canvas->MoveTo(0,300);
for(intk=0;k<600;k++)
{
Image1->Canvas->LineTo(k,300-3*PV_temp[k]);
}
5.2积分分离PID算法
积分分离PID算法是建立在普通PID算法的基础上的熟悉了解数字PID算法。
要知道在计算机控制系统中,PID控制规律的实现必须用数值逼近的方法。
用求和代替积分、后向差分代替微分,使模拟PID离散化变为差分方程。
5.2.1数字PID位置控制算法
为了计算方便必须进行近似操作
上式中T为采样周期;K为采样序号。
5.2.2数字PID增量型控制算法
由于位置式中要累加偏差e(i),不仅要占用较多的存储空间,而且不便于编写程序,为此可对位置PID方程进行改进。
5.3PID算法程序设计
由增量型数字PID控制算法的递推迭代式可设计积分分离PID算法。
具体程序如下:
//--------------算法开始--------------
E0=SP-PV;//当前偏差
E2=E1;
E1=E0;
k0=100.0/P;
k1=100.0*T/I/P;
k2=100.0*D/T/P;
if(fabs(Delta)>=fabs(E0))//积分切除控制
II=1;
elseII=0;
if(II==0)Un=k0*(E0-II*E1)+II*k1*E0+k2*(E0-2*E1+E2);
else{
DeltaU=k0*(E0-II*E1)+II*k1*E0+k2*(E0-2*E1+E2);
Un=Un+DeltaU;
}
if(Un>100)Un=100;//积分限幅
if(Un<0)Un=0;
//--------------算法结束-------------
6控制程序的调试
6.1主要调试内容
首先是要对测试通道数据的采集以及输出控制是否成功,如若没有成功,观察接线的通道和程序所写的通道是否对应。
如若成功则观察实时曲线和棒图是否能反映出当前的控制效果,观察给定一个设定值(SP)是否在测量值(PV)没有达到设定值时控制器Un能否给出反映。
如果有反映,观察控制效果有没有到达理想效果,如超调量太大,静差太大,或者是反映不够灵敏。
这时要对PID参数进行整定,整定过后对普通PID进行改进,可以使用普通PID控制,看效果是否能达到更好。
然后就是,当偏差e(k)>β时,观察切除积分和不切除积分对输出响应曲线的影响。
6.2调试方法
观察正常PID控制算法和切除积分项的PD算法响应曲线中MV变化。
6.3调试步骤
(1)对测试通道数据的采集以及输出控制,观察接线的通道和程序所写的通道是否对应。
(2)观察实时曲线和棒图是否能反映出当前的控制效果。
(3)观察控制效果有没有到达理想效果。
7PID参数的整定
7.1PID各个参数的影响
(1)比例调节的特点:
1、调节作用快,系统一出现偏差,调节器立即将偏差放大100/Kp倍输出;2、系统中还存在着余差。
K越大,过渡过程越平稳,但余差越大;K减小,余差将减小,但是不能完全消除余差,只能起到粗调的作用,但是K过小,过渡过程易振荡,K太小时,就可能出现发散振荡,系统将失去平衡。
(2)积分调节的特点:
积分调节作用的输出变化与输入偏差的积分成正比,积分的作用是能消除余差,不过同事也降低了系统的稳定性,Ti由大变小时,积分作用由弱到强,消除余差的能力由弱到强,只有消除偏差后,积分作用的输出才停止变化。
(3)微分调节的特点:
微分调节的输出是与被调量的变化率成正比,在引入微分作用后能全面提高控制质量,但是微分作用太强,会引起控制阀时而全开时而全关,这样的滞后现象就会很严重,系统的偏差会很大。
因此不能把TD取的太大,当TD由小到大变化时,微分作用由弱到强,对容量滞后有明显的作用,但是对纯滞后没有效果。
7.2整定结果与分析
分析:
在计算机控制系统中,某些系统为了避免积分饱和,可以采取积分切除的方法来较小因偏差累积所造成的滞后。
当|e(k)|≤β时,采用PID控制,曲线左半部分MV增长的斜率小于切除积分时,PD控制时MV变化的斜率,纯比例控制,斜率强于PID算法,但是纯比例控制是有差调节,有偏差存在。
当只有比例调节时,增大P的值MV变化越慢,系统要很长时间才能达到稳定;当比例调节太小的时候,会引起系统的太稳定产生震荡。
经过多次的反复调节当比例度P=10时效果最好,既能让系统快速响应也能在界面上明显观察到MV的变化趋势。
当在比例度P=10的基础上,继续对时间常数I进行调节,当适当的减小I的值会使系统的超调减小,减小系统震荡,I越小积分作用越好,达到的效果就越强,当积分时间过分小的时候会使系统控制严重滞后,影响系统的实时性。
经过反复调节当I=4时,调节效果最好,能够最快使PV值达到设定值SP,只产生较小的震荡。
总结:
标准PID算式,在没有整定好P、I、D参数之前,控制效果是不好的,通过对PID参数的整定后,再对其改进,改进效果才是最好的。
因此,经过整定,P=10,I=4,D=10。
8技术小结
在本次的计算机控制系统综合实训中,内容是关于积分分离PID温度控制系统的设计。
刚开始,我遇到的难题就是关于CB的编程和运用,但是经过老师的讲解和对程序的分析后,并且懂得将以前计算机控制技术课平时的4次实验的程序拿来借鉴,我大概掌握了CB一些简单组件的运用和编程。
对于PID控制,经过一学期的课程学习,我们知道PID控制是控制中应用最为广泛的一种控制规律。
实际运行的经验和理论的分析都表明,这种控制规律对许多工业过程进行控制时,都能得到满意的效果。
因此,不管控制对象是什么,只要我们知道偏差就能通过PID运算输出对控制器进行作用。
在本次实训中我更加深刻的体会到了平时上课所学到的知识点。
在做出了简单的PID控制了以后,我们又对PID控制进行一些改进,例如,使用积分分离的PID控制、带死区的PID控制、不完全微分的PID控制。
这些控制效果都在PID控制的效果上,又有了许多让人满意的效果。
尤其是在调节积分分离时,当时由于没有输出Un,仅仅输出△Un,使得MV几乎没有输出值,还有就是最开始没有对D/A有个准确的认识,对输出控制的幅值没有清楚的了解,使得控制输出的不准确,使得加热器已经很烫的情况下,界面显示还是40度左右,经过了这次对整个系统整合有了清楚认识,还有就是当初把Un转成电压输出时,误把DAQAO1->RealOutput(Output_V),写成了DAQAO1->RamOutput(Output_V),一直都没有检查出错,最终通过一点一点排查和分析,找到了这个错误,并予以改正,使得能够实现PID控制。
参考文献
[1]于海生.计算机控制技术.北京.机械工业出版社,2007.
[2]陆卫忠.C++Builder程序设计教程.2版.北京.科学出版社,2009.
[3]何钦铭.C语言程序设计.北京高等教育出版社.2008.
附录:
控制程序清单
//---------------------------------------------------------------------------
#include
#pragmahdrstop
#include"PID1.h"
//---------------------------------------------------------------------------
#pragmapackage(smart_init)
#pragmalink"DAQAILib_OCX"
#pragmalink"DAQAOLib_OCX"
#pragmalink"DAQAILib_OCX"
#pragmalink"DAQAOLib_OCX"
#pragmaresource"*.dfm"
TForm1*Form1;
floatSP_temp[600];
floatMV_temp[600];
floatPV_temp[600];
floatP=100.0,I=9999.9,D=0.0,T=1.0;
floatSP,PV,MV;
floatE0=0.0,E1=0.0,E2=0.0;
floatk0,k1,k2;
floatDeltaU=0.0,Un=0.0;
floatDelta=100.0;
intII=1;
//---------------------------------------------------------------------------
__fastcallTForm1:
:
TForm1(TComponent*Owner)
:
TForm(Owner)
{
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
FormCreate(TObject*Sender)
{
DAQAI1->Hide();
DAQAO1->Hide();
DAQAI1->OpenDevice();
DAQAO1->OpenDevice();
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
FormClose(TObject*Sender,TCloseAction&Action)
{
DAQAI1->CloseDevice();
DAQAO1->CloseDevice();
Application->Terminate();
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Button_ExitClick(TObject*Sender)
{
DAQAI1->CloseDevice();
DAQAO1->CloseDevice();
Application->Terminate();
}
//---------------------------------------------------------------------------
void__fastcallTForm1:
:
Timer1Timer(TObject*Sender)
{
//-----------------------------------反馈信号采集
floatcaiyang_V=DAQAI1->RealInput(0);
PV_temp[0]=100.0/8*(caiyang_V-2);//电压到温度
PV=PV_temp[0];
Edit_PV->Text=FloatToStrF(PV,2,1,1);//PV显示
//--------------算法开始--------------
E0=SP-PV;
E2=E1;
E1=E0;
k0=100.0/P;
k1=100.0*T/I/P;
k2=100.0*D/T/P;
if(fabs(Delta)>=fab