软件综合设计报告

时间:2024.3.11

软件综合设计(分散)报告

姓名:丘瑶瑶

班级:自动化1001

学号:100900404

目录

一.设计目的…………………………….3

二.设计内容………………………….....3

三.设计思想

1.数字PID及其算法…………………………………….3

2.离散控制系统的数学描述…………………………….5

四.界面简介……………………………6

五.各模块程序介绍及调试结果

1.程序介绍……………………………………………….7

2.调试结果展示…………………………………………11

3.调试中遇到的问题……………………………………14

六.心得体会…………………………14

七.程序代码…………………………15

一.设计目的

通过本课程设计实习,使学生在下列方面有所了解和提高:

1、 掌握Visual Basic进行程序设计的基本思路和方法

2、 能利用Visual Basic编程实现简单的任务

3、 结合控制系统理论用VB进行计算机控制仿真

二.设计内容

1、 对一阶系统实现PID算法控制并进行仿真,具体功能如下:

1) 基本要求:实现PID算法和一阶系统差分方程仿真,PID算法中的四个参数和一阶系统的参数都可以通过菜单进行设定,系统对阶越函数的响应以图形方式实时显示在窗口中。

2) 附加功能:将系统的时间响应数据保存到数据库中,具体应包括下列属性:时间,输出值。将系统的历史响应重现。使用Teechart控件作为显示输出。

三.设计思想

1、数字PID及其算法

在模拟系统中,PID算法的时域表达式为

(1) 式中

P(t):调节器的输出信号

e(t):调节器的偏差信号,等于给定值与测量值之差

:调节器的比例系数

:调节器的积分时间

:调节器的微分时间

计算机控制是一种采样控制,只能根据采样时刻的偏差来计算控制量。因此,在计算机控制系统中,必须对上进行离散化处理,用数字形式的差分方程代替连续系统的微分方程,此时积分项和微分项可用求和及增量式表示:

(2)

(3)

将式(2)、(3)代入式(1),则可得到离散的PID表达式:

(4)

式中:采样周期。若使系统的精度足够高,则T应该尽量小。

:第k次采样时的偏差值;

:第(k-1)次采样时的偏差值;

k:采样序号,

:第k次采样时调节器的输出

由于(4)的输出值与阀门开度的位置一一对应,因此,通常(4)称为位置型PID的位置控制算式。

由(4)可以看出,要想计算,不仅需要本次与上次的偏差信号,而且还要在积分项中把历次的偏差信号进行相加,即,这样,不仅计算繁琐,而且为保存还要占用很多内存。为此,作如下改动。

根据递推原理,可写出(k-1)次的PID输出表达式:

(5)

用式(5)减去(4),可得:

(6)

式中:积分系数

:微分系数

式(6)称为增量式PID控制算式。

增量型PID算法的算式为:

(7)

所以:

2.离散控制系统的数学描述

设系统为一阶惯性环节,系统的传递函数为:

其微分方程为:

(9)

差分方程和微分方程在形式上有一定的相似之处,设时间间隔T足够小,当时,可有:

于是式(9)可写成:

经整理后,得:

(10)

在T足够小的条件下,微分方程(9)可以近似成差分方程(10),T值越小,则近似得越好。

四.界面简介

1.TeeChar控件的使用

TeeChar是第三方插入控件,用来绘画图形。点击就可在工程界面显示一个如上图所示的TeeChar界面

2.参数设定.yy

可在参数设定.yy模块中输入PID参数KP、KI、KD以及一阶系统参数T、T1,按“SURE”键则可将参数导入工程。

3.查询状态模块

在查询状态模块中的“起始时间”、“终止时间”输入图像显示的范围。

五.各模块程序介绍及调试结果

1)各模块程序介绍

1.离散PID表达式:将其用VB语言表示为:

Private Function PIDCalc(ByRef pp As PID, ByVal NextPoint As Double) ;ByRef是引用参数,ByVal是传递值。

Dim dError As Double

Dim Error As Double ;定义dError、Error两个变量为Double型

Error = pp.SetPoint - NextPoint '偏差

pp.SumError = Error + pp.SumError '积分

dError = pp.LastError - pp.PrevError '当前微分

pp.PrevError = pp.LastError

pp.LastError = Error

PIDCalc = pp.Proportion * Error + pp.Integral * pp.SumError + pp.Derivative * dError

End Function

2.离散控制系统的数学描述

设系统为一阶惯性环节,则将其离散化为

用VB语言描述如下,其中u=x(nT),c=y(nT)

Private Function OneLevel(ByRef c As Double, ByVal u As Double, ByRef Param As OneLevelSys)

c = Param.T / Param.T1 * u - (Param.T / Param.T1 - 1) * c

OneLevel = c

End Function

设置了显示3D和非3D效果,以及是否显示背景色。通过下列语句实现

Private Sub Check1_Click()

TChart1.Aspect.View3D = Check1.Value

End Sub

Private Sub Check2_Click()

TChart1.Panel.Gradient.Visible = Check2.Value

End Sub

初始参数设定:

Private Sub Form_Load()

sPID.Proportion = 168

sPID.Integral = 0.5

sPID.Derivative = 0.5

sPID.SetPoint = 30

SysPar.T = 0.0002

SysPar.T1 = 35

End Sub

3.PID参数设定

Private Sub OKButton_Click()

sPID.Proportion = Val(Form1.Text2.Text)

sPID.Integral = Val(Form1.Text3.Text)

sPID.Derivative = Val(Form1.Text5.Text)

sPID.SetPoint = 30

SysPar.T1 = Val(Form1.Text6.Text)

SysPar.T = Val(Form1.Text7.Text)

'Form1.TChart1.Series(0).Clear

Form1.Cls

End Sub

4.时域模拟模块:将程序写入数据库,

Private Sub simulate_Click()

Dim i As Integer

Dim c As Double

Dim u As Double

Dim sOUT(20000) As Double

Dim rOUT As Double

Dim rIn As Double

'将数据库清空

Data1.Recordset.MoveFirst

Do While Not Data1.Recordset.EOF

Data1.Recordset.Delete

Data1.Recordset.MoveNext

Loop

c = 0

u = 0

For i = 1 To 20000 Step 1

u = PIDCalc(sPID, c)

sOUT(i - 1) = OneLevel(c, u, SysPar)

'写入数据库

Data1.Recordset.AddNew

Data1.Recordset.Fields("time") = i

Data1.Recordset.Fields("value") = sOUT(i - 1)

Data1.Recordset.Update

Next i

'Add Series at runtime

TChart1.AddSeries (scLine)

TChart1.Series(0).Clear

'TChart1.Axis.Left.SetMinMax 1, 20000

'TChart1.Axis.Top.SetMinMax 1, 40

5. '绘制系统的时间响应

'Form1.Circle (0, 0), 20, vbRed

For i = 1 To 20000 Step 1

If i Mod 20 = 0 Then

TChart1.AutoRepaint = True

TChart1.Series(0).Add sOUT(i - 1), i, vbBlue

TChart1.AutoRepaint = True

TChart1.Repaint

End If

'TChart1.Visible = false

Text1.Text = i

Text4.Text = sOUT(i - 1)

Text1.Refresh

Text4.Refresh

Call Sleep(0.01)

Next i

End Sub

6.查询模块数据保存于数据库

Private Sub OKButton1_Click()

Dim i As Integer

Dim j As Integer

Dim start As Integer

Dim endpoi As Integer

Dim sOUT(20000) As Double

start = Val(Text8.Text)

endpoi = Val(Text9.Text)

Form1.Cls

Form1.Data1.Recordset.MoveFirst

For i = 1 To start Step 1

Form1.Data1.Recordset.MoveNext

Next i

For i = 1 To (endpoi - start) Step 1

'读出数据库

sOUT(i) = Form1.Data1.Recordset.Fields("value")

Form1.Data1.Recordset.MoveNext

Next i

'Add Series at runtime

Form1.TChart1.AddSeries (scLine)

Form1.TChart1.Series(0).Clear

7. '绘制系统的时间响应

'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.TChart1.Series(0).Add sOUT(i - 1), j, vbBlue

Form1.TChart1.AutoRepaint = True

Form1.TChart1.Repaint

End If

'TChart1.Repaint

'TChart1.Visible = True

Form1.Text1.Text = j

Form1.Text4.Text = sOUT(i - 1)

Form1.Text1.Refresh

Form1.Text4.Refresh

Call Sleep(0.01)

Next i

End Sub

8.定义模块

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Type OneLevelSys

T As Double

T1 As Double

End Type

Public Type PID

SetPoint As Double '设定目标

Proportion As Double '比例常数

Integral As Double '积分常数

Derivative As Double '微分常数

LastError As Double 'Error[-1]

PrevError As Double 'Error[-2]

SumError As Double 'Sums of Errors

End Type

Public sPID As PID

Public SysPar As OneLevelSys

2)调试结果:

程序运行界面如下:

设定参数如下,进行时域模拟:

模拟结果如下:

查询10000瘩20000的结果:

设定参数,时域模拟:

模拟结果如下:

查询100到10000的结果

3)调试中遇到的问题:

由于初次使用VB软件,在调试中遇到很多问题,比如说simulink模块命名的重复性,在end模块后添加注释的时候没有加“’”

,名字定义和模块程序中的不符合,插入TeeChar空间的时候属性设置不正确。

六.心得体会

在没有任何基础的情况下,能把VB的基本功能以及基本的语法弄清楚,感觉收获已经很大了。在程序运行和调试的时候遇到很多问题都无从下手,后来通过翻阅书籍、上网百度和同学讨论将问题解决了。软件综合设计这门课设没有安排课程,也没有安排时间,在紧凑的时间中将其功能以及程序读懂,以及会编写基础的VB程序,这已经是这次课程设计中最大的收获了。

七.程序代码:

Private Function PIDCalc(ByRef pp As PID, ByVal NextPoint As Double)

Dim dError As Double

Dim Error As Double

Error = pp.SetPoint - NextPoint '偏差

pp.SumError = Error + pp.SumError '积分

dError = pp.LastError - pp.PrevError '当前微分

pp.PrevError = pp.LastError

pp.LastError = Error

PIDCalc = pp.Proportion * Error + pp.Integral * pp.SumError + pp.Derivative * dError

End Function

Private Function OneLevel(ByRef c As Double, ByVal u As Double, ByRef Param As OneLevelSys)

c = Param.T / Param.T1 * u - (Param.T / Param.T1 - 1) * c

OneLevel = c

End Function

Private Sub CancelButton_Click()

Form1.Hide

Form1.Cls

End Sub

Private Sub Cancelbutton2_Click()

Form1.Cls

End Sub

Private Sub Check1_Click()

TChart1.Aspect.View3D = Check1.Value

End Sub

Private Sub Check2_Click()

TChart1.Panel.Gradient.Visible = Check2.Value

End Sub

Private Sub Form_Load()

sPID.Proportion = 200

sPID.Integral = 1

sPID.Derivative = 1

sPID.SetPoint = 30

SysPar.T = 0.0003

SysPar.T1 = 50

End Sub

Private Sub OKButton_Click()

sPID.Proportion = Val(Form1.Text2.Text)

sPID.Integral = Val(Form1.Text3.Text)

sPID.Derivative = Val(Form1.Text5.Text)

sPID.SetPoint = 30

SysPar.T1 = Val(Form1.Text6.Text)

SysPar.T = Val(Form1.Text7.Text)

'Form1.TChart1.Series(0).Clear

Form1.Cls

End Sub

Private Sub OKButton1_Click()

Dim i As Integer

Dim j As Integer

Dim start As Integer

Dim endpoi As Integer

Dim sOUT(20000) As Double

start = Val(Text8.Text)

endpoi = Val(Text9.Text)

Form1.Cls

Form1.Data1.Recordset.MoveFirst

For i = 1 To start Step 1

Form1.Data1.Recordset.MoveNext

Next i

For i = 1 To (endpoi - start) Step 1

'读出数据库

sOUT(i) = Form1.Data1.Recordset.Fields("value")

Form1.Data1.Recordset.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.TChart1.Series(0).Add sOUT(i - 1), j, vbBlue

Form1.TChart1.AutoRepaint = True

Form1.TChart1.Repaint

End If

'TChart1.Repaint

'TChart1.Visible = True

Form1.Text1.Text = j

Form1.Text4.Text = sOUT(i - 1)

Form1.Text1.Refresh

Form1.Text4.Refresh

Call Sleep(0.01)

Next i

End Sub

Private Sub simulate_Click()

Dim i As Integer

Dim c As Double

Dim u As Double

Dim sOUT(20000) As Double

Dim rOUT As Double

Dim rIn As Double

'将数据库清空

Data1.Recordset.MoveFirst

Do While Not Data1.Recordset.EOF

Data1.Recordset.Delete

Data1.Recordset.MoveNext

Loop

c = 0

u = 0

For i = 1 To 20000 Step 1

u = PIDCalc(sPID, c)

sOUT(i - 1) = OneLevel(c, u, SysPar)

'写入数据库

Data1.Recordset.AddNew

Data1.Recordset.Fields("time") = i

Data1.Recordset.Fields("value") = sOUT(i - 1)

Data1.Recordset.Update

Next i

'Add Series at runtime

TChart1.AddSeries (scLine)

TChart1.Series(0).Clear

'TChart1.Axis.Left.SetMinMax 1, 20000

'TChart1.Axis.Top.SetMinMax 1, 40

'绘制系统的时间响应

'Form1.Circle (0, 0), 20, vbRed

For i = 1 To 20000 Step 1

If i Mod 20 = 0 Then

TChart1.AutoRepaint = True

TChart1.Series(0).Add sOUT(i - 1), i, vbYellow

TChart1.AutoRepaint = True

TChart1.Repaint

End If

'TChart1.Visible = false

Text1.Text = i

Text4.Text = sOUT(i - 1)

Text1.Refresh

Text4.Refresh

Call Sleep(0.01)

Next i

End Sub

更多相关推荐:
软件详细设计报告文档模板

软件详细设计报告文档模板1.引言1.1编写目的说明编写详细设计方案的主要目的。说明书编制的目的是说明一个软件系统各个层次中的每个程序(每个模块或子程序)和数据库系统的设计考虑,为程序员编码提供依据。如果一个软件…

软件详细设计报告

软件详细设计报告11编写目的2支撑环境222开发工具中间件以及数据库接口32114预期读者和阅读建议125多种支撑环境开发要点4词汇表51引言引言是对这份软件系统详细设计报告的概览是为了帮助阅读者了解这份文档如...

软件毕业设计报告

BBS系统设计报告学生姓名指导教师专业学院20xx年11月24日摘要BBS论坛系统是采用java语言进行设计实现的采用Tomcat作为后台服务器以SQLServer作为数据服务器使用接口实现类实体类JSP进行逻...

软件工程课程设计报告 之 总结性报告

总结性报告1.时间飞Q20xx项目从拟定好课题起,经过问题定义,可行性研究,需求分析,概要设计,详细设计,主要编程,分布测试,总体测试,到整体装配完成历时一个半月。2.人员主程序员(组长):王昌帅辅程序员:司吉…

软件详细设计报告

计算机学院实验中心----Android手机客户端学生姓名:**指导老师:**专业:计算机科学与技术102在移动互联网发展迅猛的今天,在Android完全开源及拥有庞大用户群的环境下,迫切需要为计算机学院实验中…

软件设计报告

通达学院20xx20xx学年第二学期软件设计实验报告专业Delphi软件设计学生班级110023学生学号11002314学生姓名孙敏杰指导教师汪胡青网络聊天室一实验操作利用Delphi自带的TCPCLIENT组...

软件设计报告

编号密级阶段标记页数编写校对审核标审批准北京国科环宇空间技术有限公司20xx年6月8日目录1时序板软件设计32时序板软件模块设计321数据接收发送模块详细设计3211I2C模块初始化3212I2C发送数据单片机...

软件详细设计报告

基于android手持设备的景区导览系统编写审核批准受控状态发布版次11编号日期20xx0907日期日期是日期变更记录签字确认目录1引言411编写目的412项目风险413文档约定414预期读者和阅读建议415参...

软件设计综述报告

软件设计综述报告软件设计包括一套原理概念和实践明确软件设计目标是软件设计的第一步软件设计目标明确了最终的软件系统应该拥有的质量属性软件设计的目标涉及性能可靠性成本维护等多个方面的目标11软件设计的目标软件设计的...

软件综合课程设计报告

软件综合课程设计报告前言题目名称航空公司管理信息系统班级学生学号学生姓名总成绩优良中及格20xx年12月30日不及格1问题描述一个正常营运的航空公司需要管理所拥有的飞机航线的设置客户的信息等更重要的还要提供票务...

大整数计算器软件设计报告

软件课程设计报告MFC实现大整数运算计算器学生姓名学号院系专业班级通信工程指导教师姓名完成时间20xx年11月18一需求分析1设计背景在MFC实现大整数运算计算器设计中本人使用的编译平台是VS20xx用到了MF...

半导体器件物理软件设计报告

软件设计报告20xx20xx学年第二学期课程名称实习时间指导单位半导体物理器件仿真20xx42720xx513电子科学与工程学院指导教师XXX学生姓名学院系XX电子科学与工程班级学号专业BXXXXXXXX微电子...

软件设计报告(32篇)