基于Visual Basic与Matlab的自动控制系统的设计.docx

上传人:b****9 文档编号:25194434 上传时间:2023-06-06 格式:DOCX 页数:22 大小:213.95KB
下载 相关 举报
基于Visual Basic与Matlab的自动控制系统的设计.docx_第1页
第1页 / 共22页
基于Visual Basic与Matlab的自动控制系统的设计.docx_第2页
第2页 / 共22页
基于Visual Basic与Matlab的自动控制系统的设计.docx_第3页
第3页 / 共22页
基于Visual Basic与Matlab的自动控制系统的设计.docx_第4页
第4页 / 共22页
基于Visual Basic与Matlab的自动控制系统的设计.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

基于Visual Basic与Matlab的自动控制系统的设计.docx

《基于Visual Basic与Matlab的自动控制系统的设计.docx》由会员分享,可在线阅读,更多相关《基于Visual Basic与Matlab的自动控制系统的设计.docx(22页珍藏版)》请在冰豆网上搜索。

基于Visual Basic与Matlab的自动控制系统的设计.docx

基于VisualBasic与Matlab的自动控制系统的设计

1引言

VisualBasic是一个可视化的程序设计语言,是一种非常方便的Windows应用程序开发平台。

VB一方面继承了Basic语言简单易学的特点,另一方面在其编程环境中采用了面向对象的可视化设计工具、事件驱动的编程机制、动态数据驱动等先进的软件开发技术,为用户提供了一种所见即所得的可视化程序设计方法。

VB最有力的一面就是快速创建用户界面,把复杂而完善的Windows操作系统的使用融于易于学习和使用的高级语言中,因而受到广大工程技术人员的普遍欢迎。

但是它的数值计算能力不是很强,而由美国MathWorks公司推向市场的MATLAB软件恰好弥补了这一缺陷。

该软件是一种面向科学和工程计算的解释性语言,具有强大的数值分析、矩阵运算、信号处理和图形显示能力,为用户提供了一个强有力的科学及工程问题分析计算及程序设计的工具,可根据不同处理对象的需要,通过简单的编程,方便地完成相应的功能。

但MATLAB编写可视化界面的能力较弱[1]。

基于VB和MATLAB的上述特点,本文利用VB来设计界面作为主程序,调用由MATLAB编写的子程序,从而实现对自动控制系统中系统的稳定性的分析,还可以画出相应的Frequency图、Nichols图、Nyquist图、Bode图,进行自动控制系统的性能分析。

作者在学习、使用VB和MATLAB的基础之上,熟练掌握了两个软件的界面设计和程序编程,在接口问题中,大量参阅了相关的书籍,加之自己的亲身实践,终于完成了本设计。

本文的研究重点就是两个软件的接口链接。

2借助ActiveX部件

Microsoft公司所有以COM为基础的技术统称为ActiveX技术。

它是一种用于模块集成的新协议,是VB工具箱的扩充部分。

ActiveX部件是一些遵循ActiveX规范编写的可执行代码,比如一个.exe、.dll或.ocx文件。

它允许应用程序或组件控制另一个应用程序或组件的运行,它包括自动化服务器和自动化控制器。

在程序中加入ActiveX部件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。

ActiveX部件保留了一些普通VB控制的属性、事件和方法。

ActiveX部件特有的方法和属性大大地增强了程序设计者的能力和灵活性,ActiveX实际上是在调用一种部件,而无需要求该部件对应的程序正在运行,这会使得其功能更加强大。

在VB中创建MATLAB的ActiveX对象后,就可以使用这个对象所包含的各种方法,实现对MATLAB的调用[2]。

在VB中创建MATLABActiveX的方法如下:

DimMatlabAsObject

SetMatlab=CreatObject(“Matlab.Application”)

在创建MatlabActiveX对象后。

就可以利用该对象所包含的各种方法实现对MATLAB的调用。

常用的Matlab.Application方法有:

2.1BSTRExecute(inBSTRCommand)方法

BSTR表示宽字符串类型,该方法接收字符串命令,将调用Matlab,执行一条由Command字符串所决定的一条Matlab命令,同时返回命令的执行情况,如将由“surf(peaks)”生成的图形显示在屏幕上,在VB的命令按钮中输入如下程序:

DimMatlabAsObject

DimResultAsString

SetMatlab=CreateObject("Matlab.Application")

Cmd=text1.text

Result=matlab.execute("print-f1-dbitmape:

\bode.bmp")

Picture1.Picture=LoadPicture("e:

\bode.bmp")

2.2VoidGetFullMatrix方法

GetFullMatrix([in]BSTRName,

[in]BSTRWorkspace,

[in,out]SAFEARRAY(double)*pr,

[in,out]SAFEARRAY(double)*pi);

GetFullMatrix方法是将Matlab中的一个矩阵变量传送到VB中的一个一维或二维数组中,其中Name指定了Matlab中的矩阵变量名,Workspace指定了该矩阵所在的Matlab所在的工作区,pr是VB是程序中的实部,pi是VB是程序中的虚部。

2.3VoidPutFullMatrix方法

PutFullMatrix([in]BSTRName,

[in]BSTRWorkspace,

[in,out]SAFEARRAY(double)*pr,

[in,out]SAFEARRAY(double)*pi);

PutFullMatrix方法是将VB程序中的一个一维或二维数组传递到指定的Matlab空间,各参数的含义及调用的方法与GetFullMatrix方法类似。

示例代码如下:

DimMatlabasobject

`声明对象

DimMReal1(5,5)AsDouble

`声明存放实部的Double型数组

DimMImag1(5,5)AsDouble

`声明存放虚部的Double型数组

SetMatlab=CreatObject(“Matlab.Application”)

`初始化对象

Matlab.Execute(“a=hilb(5)”)

`执行Matlab命令

CallMatlab.GetFullMatrix(“a”,“base”,Mreal1,MImag)

`将结果分别存入实部、虚部数组

2.4VoidMinimizeCommandWindow()方法

该方法使Matlab的命令窗口最小化。

2.5VoidMaximumCommandWindow()方法

该方法使Matlab的命令窗口最大化[3]。

3基于MATLAB的自动控制系统性能分析

自动控制理论是较成熟的经典的控制理论,其对控制系统常用的分析方法有时域法、根轨迹法、频域法等,各种方法综合的本质是一种“分析+图解”的方法,其最大的特点是依靠试探,即根据系统的一组性能指标,通过逐步试探和调整,以达到全部性能指标的要求。

一个控制系统的全部性质都取决于其闭环传递函数,如稳定性取决于其极点,稳定精度取决于其比例系数,动态性能既取决于其极点,又与零点有关。

闭环传递函数的零点和开环传递函数的零点相同,比例系数之间也有简单的关系,都不难确定。

唯有闭环传递函数的极点,即闭环特征方程的根,计算比较困难。

控制系统的这些基本性能在经典控制理论中主要通过时域响应曲线分析法、根轨迹法与频率响应法等对系统进行设计、分析,为此我们借助Matlab强大的专业绘图功能(如响应曲线、Bode图、Nyquist图、Frequency图、Nichols图等),对系统的各种性能进行分析

4控制系统模型

4.1传递函数模型

(4.1.1)

在MATLAB中,直接用分子/分母的系数表示,

则该系统的频率响应数据可由

(4.1.2)

得出。

4.2零极点增益模型

(4.2.1)

在MATLAB中,用[z,p,k]矢量组表示,

4.3状态空间模型

(4.2.2)

在MATLAB中,用(a,b,c,d)矩阵组表示[5]。

5自动控制系统函数的频域分析法

频域分析法又称频率法,它所研究的问题是自动控制系统控制过程的性能,即稳定性、快速性及稳定精度。

频域分析法能较简单迅速地判断出某个环节或参数对系统性能的影响,并能指明改进方法。

它研究的依据是系统的一种数学模型—频率特性,即在线性控制系统中,输入正弦信号时,其稳态输出随频率变化(

由0变到

)的特性。

5.1频率特性的表示方法

频率特性

是复数,它即可用实部、虚部来表示,也可用幅值和相角来表示,即

(5.1.1)

5.2Nyquist稳定判据

Nyquist稳定判据是利用系统的开环频率特性来判别闭环状态的稳定性。

系统开环频率特性和闭环特征式的关系式为:

(5.2.1)

上式的辅助函数的幅角变化关系可写为:

(5.2.2)

设开环特征方程的

个根,有

个在虚轴右侧,则有

(5.2.3)

如果系统闭环后是稳定的,闭环特征方程的

个根应均在虚轴左侧,则有

(5.2.4)

因此

(5.2.5)

上式用文字说明:

若开环系统不稳定,有

个虚轴右侧根,欲使构成的闭环系统稳定,则充要条件是:

由0变到无穷大时,向量

的幅角变化为

所以可得如下判据:

如果系统开环有

个特征根在S平面虚轴的右侧,当频率

由零变化到无穷大时,若开环幅相频率特性

逆时针绕

点的转角为

,则系统在闭环状态下是稳定的。

反之,系统闭环后是不稳定的,这就是Nyquist稳定判据。

6自动控制系统函数的时域分析法

所谓时域分析就是根据系统的时域响应来分析系统的稳定性、暂态性能和稳定精度。

时域分析法是一种直接分析方法,具有直观和准确的优点,并能提供系统时间响应的全部信息。

6.1系统的性能指标

控制系统的时间响应,从时间顺序上,可以划分为动态和稳态两个过程。

动态过程又称为暂态过程或过渡过程,是指系统从初始状态到接近最终状态的响应过程;稳态过程是指t趋于无穷时系统的输出状态。

动态和稳态两个过程的特点反映了系统的性能。

通常以阶跃响应来衡量系统性能的优点和定义性能指标。

各性能指标有:

上升时间

、峰值时间

、最大超调量

、调整时间

和稳态误差

以上各种性能指标中,上升时间

、峰值时间

均表征系统响应初始阶段的快慢;调整时间

表示系统过渡过程的持续时间,从总体上反映了系统的快速性;最大超调量

是反映系统响应过程的平稳性;稳态误差

则反映了系统复现输入信号的最终精度。

6.2线性系统的时间响应分析

连续时间系统在阶跃输入激励下的响应曲线图形,可用Matlab中的step()函数画出。

我做的用户界面及分析图在下面的应用举例中实现和使用。

7根轨迹法

7.1根轨迹法的概念

控制系统闭环传递函数的极点决定了系统的稳定性和动态响应的基本特征,而闭环零点则影响系统的动态响应的形态。

所以,对于闭环控制系统的响应来说,闭环函数的特征跟,即闭环极点是起主导作用的。

系统开环传递函数的某一参数变化时,闭环特征跟在S平面上移动的轨迹,称为根轨迹。

由于根轨迹是根据开环零、极点绘出来的,所以它能指出开环零、极点与系统闭环极点之间的关系。

利用根轨迹不仅能分析闭环系统的性能及参数变化对系统动态性能的影响,而且还可以根据对系统暂态特性的要求确定可变参数和调整开环零、极点位置以及改变它们的个数。

由于它是一种图解求根的方法,比较直观,避免了求高阶系统特征跟的麻烦。

7.2根轨迹方程

开环传递函数的特征方程式为:

(7.2.1)

上式也称为根轨迹方程。

当可变参数

从0变化到

时,由根轨迹方程可在S平面描绘出闭环系统的全部根轨迹。

根轨迹方程为一复数方程式,根据等号两边相角和幅值相等的条件,可得到绘制根轨迹的两个基本条件,即

幅值条件

(7.2.2)

相角条件

(7.2.3)

式中:

利用Matlab绘制系统的根轨迹图在后面的应用举例中实现[6]。

8基于VisualBasic及MATLAB接口实现的自动控制系统

例如某控制系统的开环传递函数为:

本例设计的是利用VB来设计界面作为主程序,借助与ActiveX部件调用由MATLAB编写的子程序,画出相应的Frequency图、Nichols图、Nyquist图、Bode图、step图和rlocus图,并对自动控制系统的稳定性从频域和时域进行了分析。

8.1该系统的频域分析:

用户界面设计如下:

 

图8.1.1Bode图

 

图8.1.2Nyquist图

 

图8.1.3Nichols图

 

图8.1.4Frequency图

在VB中编写的频域分析主程序如下:

PrivateSubCommand1_Click()

DimmatlabAsObject

DimresultAsString

Setmatlab=CreateObject("matlab.application")

Callmatlab.minimizecommandwindow

result=matlab.execute("clear")

result=matlab.execute(""&Text1.Text&"")

result=matlab.execute("freqs(num,den,w)")

result=matlab.execute("print-f1-dbitmape:

\freqs.bmp")

Picture1.Picture=LoadPicture("e:

\freqs.bmp")

Callmatlab.quit

Setmatlab=Nothing

EndSub

PrivateSubCommand2_Click()

DimmatlabAsObject

DimresultAsString

Setmatlab=CreateObject("matlab.application")

Callmatlab.minimizecommandwindow

result=matlab.execute("clear")

result=matlab.execute(""&Text1.Text&"")

result=matlab.execute("bode(num,den)")

result=matlab.execute("print-f1-dbitmape:

\bode.bmp")

Picture1.Picture=LoadPicture("e:

\bode.bmp")

Callmatlab.quit

Setmatlab=Nothing

EndSub

PrivateSubCommand3_Click()

DimmatlabAsObject

DimresultAsString

Setmatlab=CreateObject("matlab.application")

Callmatlab.minimizecommandwindow

result=matlab.execute("clear")

result=matlab.execute(""&Text1.Text&"")

result=matlab.execute("nyquist(num,den)")

result=matlab.execute("print-f1-dbitmape:

\nyquist.bmp")

Picture1.Picture=LoadPicture("e:

\nyquist.bmp")

Callmatlab.quit

Setmatlab=Nothing

EndSub

PrivateSubCommand5_Click()

UnloadMe

EndSub

PrivateSubCommand7_Click()

DimmatlabAsObject

DimresultAsString

Setmatlab=CreateObject("matlab.application")

Callmatlab.minimizecommandwindow

result=matlab.execute("clear")

result=matlab.execute(""&Text1.Text&"")

result=matlab.execute("nichols(num,den)")

result=matlab.execute("print-f1-dbitmape:

\nichols.bmp")

Picture1.Picture=LoadPicture("e:

\nichols.bmp")

Callmatlab.quit

Setmatlab=Nothing

EndSub

PrivateSubForm_Load()

Me.Left=0

Me.Top=0

Me.Width=Screen.Width

Me.Height=Screen.Height

EndSub

在Matlab下编写的函数子程序如下:

num=[250];

den=[120750];

w=0:

0.1:

100;

[m1,p1]=bode(num,den,w);

p1=p1-T*w'*180/pi;

subplot(211),semilogx(w,20*log10(m1));

subplot(212),semilogx(w,p1);

[x,y]=nyquist(num,den,w);

clg;plot(x,y);

[x1,y1]=freqz(num,den,sqrt(-1)*w);

[mag,pha]=nichols(num,den,w)[7];

利用Bode图进行分析:

图8.1.5Bode图

此系统开环传递函数的特征根全部位于虚轴左侧,即

由图中可以知道,在

的频率范围内,

未穿越

线,故该系统闭环后是稳定的。

利用Nyquist稳定判据进行分析:

要判断闭环状态的稳定性,必须绘制出

的幅相特性图,根据绘制幅相频率特性图的规则,特性曲线的起点

在实轴上,终点

是以

进入原点。

系统闭环稳定与否,主要取决于特性曲线与实轴的交点。

(8.1.1)

代入得

(8.1.2)

图8.1.6幅相频率特性图

的幅相频率特性图如图6所示。

由图知

的幅相特性绕

的转角为零。

所以该系统闭环状态是稳定的[6]。

8.2该系统的时域分析:

系统的step图如下:

图8.2.1step图

 

在VB下编写的时域分析的程序:

PrivateSubCommand1_Click()

DimmatlabAsObject

DimresultAsString

Setmatlab=CreateObject("matlab.application")

Callmatlab.minimizecommandwindow

result=matlab.execute("clear")

result=matlab.execute(""&Text1.Text&"")

result=matlab.execute("step(num,den)")

result=matlab.execute("print-f1-dbitmape:

\step.bmp")

Picture1.Picture=LoadPicture("e:

\step.bmp")

Callmatlab.quit

Setmatlab=Nothing

EndSub

PrivateSubCommand2_Click()

UnloadMe

EndSub

PrivateSubForm_Load()

Me.Left=0

Me.Top=0

Me.Width=Screen.Width

Me.Height=Screen.Height

EndSub

8.3该系统根轨迹法的机辅分析:

系统的rlocus图(根轨迹图)如下:

图8.3.1rlocus图

从图中可以看出系统开环传递函数的所有特征根都在虚轴的左侧,故系统是稳定的。

在VB下编写的根轨迹的程序:

PrivateSubCommand1_Click()

DimmatlabAsObject

DimresultAsString

Setmatlab=CreateObject("matlab.application")

Callmatlab.minimizecommandwindow

result=matlab.execute("clear")

result=matlab.execute(""&Text1.Text&"")

result=matlab.execute("rlocus(num,den)")

result=matlab.execute("print-f1-dbitmape:

\rlocus.bmp")

Picture1.Picture=LoadPicture("e:

\rlocus.bmp")

Callmatlab.quit

Setmatlab=Nothing

EndSub

PrivateSubCommand3_Click()

UnloadMe

EndSub

PrivateSubForm_Load()

Me.Left=0

Me.Top=0

Me.Width=Screen.Width

Me.Height=Screen.Height

EndSub

9结论

通过对本文的完成,我不仅学会了使用VasualBasic6.0软件,用它进行设计用户界面和编写程序,而且对Matlab也有了更深刻的了解。

本文对VB和Matlab的链接进行了总结并选择了作者本人比较擅长的以ActiveX部件为基础的链接方法,而且对自动控制系统的连续函数和离散函数进行了分类介绍,在最后还举例说明并分析了系统开环传递函数的稳定性,画出了系统的Bode图、Nyquist图、Frequency图、Nichols图来验证设计的链接的正确性。

在探索VB和Matlab两个软件进行接口链接的过程,其实是将Matlab具有强大的数值分析、矩阵运算、信号处理和图形显示能力,与可视化语言VB结合起来,充分发挥出两个软件的优势,编制出界面友好、计算及图形处理能力强大的软件,这将对解决工程实际应用问题有重要意义。

在对自动控制系统的设计中,我深刻体会到了学习一种软件并能熟练的掌握是多么不容易的一件事情啊!

 

谢辞

我要感谢我的导师张老师在论文选题以及研究方法上给予的悉心指导,导师广博的学识,如沐春风的教诲令我受益匪浅,感激她在我困惑时的指点迷津。

本次毕业设计已经接近尾声,作为一个本科生的毕业设计,由于经验的匮乏,难免有许多考虑不周全的地方,如果没有导师的督促指导,以及一起工作的同学们的支持,想要完成这个设计是难以想象的。

老师们的高深精湛的造诣与严谨求实的治学精神将永远激励着我。

在四年的大学生涯里,还得到众多老师的关心支持和帮助,在此,谨向老师们致以衷心的感谢和崇高的敬意!

 

参考文献

[1]沈建蓉,单贵.大学VB程序设计实践教程[M].上海:

复旦大学出版社,2006:

1~40.

[2]周竹生,陈灵君,张赛民.VB实现对MATLAB程序的调用[J].电脑开发与应用,2004,(5):

21~23.

[3]汤海红,张

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

当前位置:首页 > 工程科技 > 电子电路

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

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