《PID软件综合设计课程设计报告.doc》由会员分享,可在线阅读,更多相关《PID软件综合设计课程设计报告.doc(12页珍藏版)》请在三一办公上搜索。
1、目录一、设计目的2二、设计内容2三、设计原理2四、设计思想5五、程序结果6六、心得体会12一、设计目的通过本课程设计实习,使学生在下列方面有所了解和提高:1、 掌握Visual Basic进行程序设计的基本思路和方法2、 能利用Visual Basic编程实现简单的任务3、 结合控制系统理论用VB进行计算机控制仿真二、设计内容1、 对一阶系统实现PID算法控制并进行仿真,具体功能如下:1) 基本要求:实现PID算法和一阶系统差分方程仿真,PID算法中的四个参数和一阶系统的参数都可以通过菜单进行设定,系统对阶越函数的响应以图形方式实时显示在窗口中。2) 附加功能:将系统的时间响应数据保存到数据库
2、中,具体应包括下列属性:时间,输出值。将系统的历史响应重现。使用Teechart控件作为显示输出。2、 实现各种函数发生器并显示1) 基本要求:实现下列函数发生器,正玄函数、方波函数、锯齿函数、三角函数,函数的生成参数都可以通过菜单设定,并且将生成的函数以图形方式实时显示在窗口中。2) 附加功能:将系统的时间响应数据保存到数据库中,具体应包括下列属性:时间,输出值。将系统的历史响应重现。使用Teechart控件作为显示输出。三、设计原理1、数字PID及其算法在模拟系统中,PID算法的表达式为 (1)式中 P(t):调节器的输出信号e(t):调节器的偏差信号,等于测量值与给定值之差:调节器的比例
3、系数:调节器的积分时间:调节器的微分时间由于计算机控制是一种采样控制,只能根据采样时刻的偏差来计算控制量。因此,在计算机控制系统中,必须对式(1)进行离散化处理,用数字形式的差分方程代替连续系统的微分方程,此时积分项和微分项可用求和及增量式表示: (2) (3)将式(2)、(3)代入式(1),则可得到离散的PID表达式: (4)式中:采样周期,必须使T足够小,才能保证系统有一定的精度;:第k次采样时的偏差值;:第(k1)次采样时的偏差值;k:采样序号,:第k次采样时调节器的输出由于(4)的输出值与阀门开度的位置一一对应,因此,通常把(4)称为位置型PID的位置控制算式。由(4)可以看出,要想计
4、算,不仅需要本次与上次的偏差信号和,而且还要在积分项中把历次的偏差信号进行相加,即,这样,不仅计算繁琐,而且为保存还要占用很多内存。为此,作如下改动。根据递推原理,可写出(k-1)次的PID输出表达式: (5)用式(5)减去(4),可得:(6)式中 :积分系数:微分系数式(6)称为增量式PID控制算式。增量型PID算法的算式为: (7)设所以: (8)2、 离散控制系统的数学描述设系统为一阶惯性环节,系统的传递函数为:其微分方程为: (9)差分方程和微分方程在形式上有一定的相似之处,设时间间隔T足够小,当时,可有:于是式(9)可写成:经整理后,得: (10)在T足够小的条件下,微分方程(9)可
5、以近似成差分方程(10),T值越小,则近似得越好。 四设计思想为了实现用计算机模拟一阶系统,并实现理想PID算法控制功能进行对系统的仿真控制,可采用可开发图形界面程序软件VB,以及画图软件TEECHART,进行仿真,并建立数据库,将实时数据保存,并能够实现数据查询等附加功能。根据自动控制理论和工程数学知识和建模思想,已经得出一阶系统和理想PID算法差分方程表达式作为系统的模拟基础。接下来,应用VB编程,要求主要界面涉及用户的操作面板参数设定(即PID算法中的四个参数比例增益Kp、积分时间Ki、微分时间Kd,设定值sv,一阶系统参数静态增益K和时间常数T1)的对话框。可分成两个部分分别设定:由参
6、数设定中进入,首先是一阶系统Kp,Ki,Kd,Sv的选择,初始值分别设定为100,0.5,0,30.由窗体文件输入输出,对该四个对象,属性事件过程进行定义。具体设计过程如下: 第一步:界面设计 一共设计四个窗口,其中一个主界面,三个设定对话框。主界面Form1中包含菜单,Teechart图,对比图,实时坐标显示以及打印选项和数据库连接模块。用于显示一阶系统模拟Teechart图和对比图,菜单栏可以进入相关数据设定对话框以及实现查询退出功能。三个设定对话框,分别为:Module, Dialog1, Dialog2.分别为PID参数,一阶系统参数和查询时间段参数。分别作为相应数字设定的对话框。第二
7、步:编辑菜单 由前面的图象可见,一共四个菜单,设定参数菜单,时域模拟菜单,查询菜单以及退出菜单。 调出菜单编辑器,编辑如下:一. 设定参数菜单设定参数(第一层) parameter 一阶系统参数(第二层) parameter1 PID(第二层) parameter2二. 时域模拟菜单 时域模拟(第一层) timeseq三. 查询菜单 查询(第一层) history四. 退出菜单 退出(第一层) cancle 第三步:代码编辑 本设计一共使用了四个窗口和一个模块文件。 窗口文件分别为上面界面介绍的Form1.frm, Module.frm, Dialog1.frm, Dialog2.frm.模块
8、文件则为Form.bas。模块文件的作用即是变量声明,由于均使用了PUBLIC,所以都是全局变量,可以在窗口中任意调用。就模块文件中的声明的参数基本上是文件间传递的参数。五程序结果ModuleDeclare Sub Sleep Lib kernel32 (ByVal dwMilliseconds As Long) SLEEP延时函数的声明,在查询和主参数中均有CALL SLEEPPublic Type OneLevelSys一阶系统自定义结构 T As Double T1 As DoubleEnd Type Public Type PIDPID自定义结构 SetPoint As Double
9、设定目标 Proportion As Double 比例常数 Integral As Double 积分常数 Derivative As Double 微分常数 LastError As Double Error-1, E(k-1) PrevError As Double Error-2, E(k-2) SumError As Double Sums of ErrorsEnd TypePublic sPID As PID变量声明,PID参数值的传递Public SysPar As OneLevelSys变量声明,一阶系统参数值的传递。Dialog1Option ExplicitPrivate
10、Sub CancelButton_Click() Dialog.Hide Form1.ClsEnd SubPrivate Sub Frame2_DragDrop(Source As Control, X As Single, Y As Single)End SubPrivate Sub OKButton_Click() sPID.Proportion = Val(Dialog.Text1.Text) sPID.Integral = Val(Dialog.Text2.Text) sPID.Derivative = Val(Dialog.Text3.Text) sPID.SetPoint = 30
11、 SysPar.T1 = Val(Dialog.Text4.Text)SysPar.T = Val(Dialog.Text5.Text) Dialog.Hide Form1.Cls End SubDialog2Private Sub Form_Load()End SubPrivate Sub OKButton_Click() Dim i As Integer Dim j As Integer Dim start As Integer Dim endpoi As Integer Dim sOUT(25000) As Double start = Val(Text1.Text) endpoi =
12、Val(Text2.Text) Dialog1.Hide Form1.Cls 绘坐标系的x轴及箭头线 Form1.Line (-20, 0)-(350, 0), vbBlue Form1.Line (346, 1)-(350, 0), vbBlue Form1.Line -(346, -1), vbBlueForm1.ForeColor = vbBlue Form1.Print X 绘坐标轴的Y轴及箭头线 Form1.Line (0, -20)-(0, 60), vbBlue Form1.Line (1, 56)-(0, 60), vbBlue Form1.Line -(-1, 56), vb
13、Blue Form1.Print Y 指定位置显示原点O Form1.CurrentX = 1 Form1.CurrentY = -1 Form1.Print O Form1.Data1.Recordset.MoveFirst For i = 1 To start Step 1 Form1.Data1.Recordset.MoveNext Next i从数据库读出结果到sOUT数组 For i = 1 To (endpoi - start) Step 1 sOUT(i) = Form1.Data1.Recordset.Fields(value) 读出数据库 Form1.Data1.Record
14、set.MoveNext Next i Add Series at runtime Form1.TChart1.AddSeries (scLine) Form1.TChart1.Series(0).Clear 绘制系统的时间响应 Form1.Circle (0, 0), 20, vbRed For i = 1 To endpoi - start Step 1 j = i + start Form1.Line -(j / 60, sOUT(i - 1), vbBlack If i Mod 20 = 0 Then Form1.TChart1.AutoRepaint = False Form1.TC
15、hart1.Series(0).Add sOUT(i - 1), j, vbRed Form1.TChart1.AutoRepaint = True Form1.TChart1.Repaint End If TChart1.Repaint TChart1.Visible = True Call Sleep(0.01)Next iEnd SubFormDim ifstop As BooleanPrivate Sub Command2_Click() Dim i As Integer Dim c As Double Dim u As Double Dim sOUT(22000) As Double
16、 将数据库清空 Data1.Recordset.MoveFirst 数据库中的记录点移动到第一个 Do While Not Data1.Recordset.EOF 循环知道最后一条记录 Data1.Recordset.Delete Data1.Recordset.MoveNext 移动到下一条指令 Loop For i = 1 To 22000 Step 1 u = PIDCalc(sPID, c) 算出PID的值 sOUT(i - 1) = OneLevel(c, u, SysPar) Data1.Recordset.AddNew Data1.Recordset.Fields(time) =
17、 i Data1.Recordset.Fields(value) = sOUT(i - 1) Data1.Recordset.Update Next i Form1.ScaleMode = 0 Form1.ScaleLeft = -20 Form1.ScaleTop = 80 Form1.ScaleWidth = 400 Form1.ScaleHeight = -100 DrawWidth = 1 绘坐标系的x轴及箭头线Form1.Line (-20, 0)-(350, 0), vbBlue Form1.Line (346, 1)-(350, 0), vbBlue Form1.Line -(3
18、46, -1), vbBlue Form1.ForeColor = vbBlue Form1.Print X 绘坐标轴的Y轴及箭头线 Form1.Line (0, -20)-(0, 60), vbBlue Form1.Line (1, 56)-(0, 60), vbBlue Form1.Line -(-1, 56), vbBlue Form1.Print Y 指定位置显示原点O Form1.CurrentX = 1 Form1.CurrentY = -1 Form1.Print O Add Series at runtime TChart1.AddSeries (scLine) 绘制系统的时间
19、响应 Form1.Circle (0, 0), 20, vbRed For i = 1 To 22000 Step 1 Form1.Line -(i / 60, sOUT(i - 1), vbBlack If i Mod 20 = 0 Then TChart1.AutoRepaint = False TChart1.Series(0).Add sOUT(i - 1), i, vbRed TChart1.AutoRepaint = True TChart1.Repaint End If TChart1.Visible = True Call Sleep(0.01) Next iEnd SubPr
20、ivate Sub Command3_Click()Dialog1.ShowEnd SubPrivate Sub Form_Load()TChart1.Header.Text.Add PID控制阶跃函数响应 sPID.Proportion = 100 sPID.Integral = 0.5 sPID.Derivative = 0 sPID.SetPoint = 30 SysPar.T = 0.0003 SysPar.T1 = 60 TChart1.Aspect.View3D = FalseEnd SubPrivate Sub TChart1_Click()End SubPrivate Sub
21、Text1_Change()End Sub六、心得体会本次课程设计从总体来说,悲喜交加,从课程设计的内容上来说,我个人觉得还是很有难度的,第一要对自动控制原理方面的PID控制模型非常熟悉,第二要能够熟练运用VB编程语言实现程序设计,第三要对界面设计软件很熟练地操作并且完成的较好的话数据库方面的知识也是必不可少的。由此多方面的知识掌握情况在这一次的课程设计上都有所体现。我在自动控制和数据库方面的知识掌握的比较好,但对于vb程序的设计上我我几乎是一无所知,刚看完课程设计的要求,PID方面的内容脑子里很清晰,但如何用VB程序进行仿真模拟,却是一头雾水,没有任何思路,找来了一些参考资料翻来翻去也找不到
22、入手处,这次课设是我目前所做课设中最令我沮丧的一次。单从程序设计来说,我自己完成的并不理想,首先程序大部分都是请教的别人,自己独立编写出来的很少,操作调试运行也废了很大的周折,运行结果虽是在意料之中,但这并不能体现多少我个人的设计能力,因此在VB编程方面自己还有很多地方需要学习和进步,很大的上升空间也不是一件坏事,这次课设让我又发现了自己的一些不足,对单方面的知识掌握是远远不够的,对所学每门科目融会贯通的运用才有实际价值。很欣慰的是这次课设又使我认识到独立设计能力是非常的重要,其次更要注重锻炼自己的自学能力,在课程设计过程中会遇到很多意想不到的困扰,即使是很简单的知识漏洞,都会造成整个设计过程的终止,参考书与网络资源的选择与自我消化便显得至关重要。时间比较紧张,同时完成多份报告,倒也增强了自己的抗压能力。虽是最失败的一次的课设,但也是最有收获的一次,发现不足,总结经验虽是老生常谈,却也是我这次课设最形象的写照。