基于VisualBasic与Matlab的自动控制系统的设计.doc_第1页
基于VisualBasic与Matlab的自动控制系统的设计.doc_第2页
基于VisualBasic与Matlab的自动控制系统的设计.doc_第3页
基于VisualBasic与Matlab的自动控制系统的设计.doc_第4页
基于VisualBasic与Matlab的自动控制系统的设计.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于Visual Basic与Matlab的自动控制系统的设计1 引言 Visual Basic是一个可视化的程序设计语言,是一种非常方便的Windows应用程序开发平台。VB一方面继承了Basic语言简单易学的特点,另一方面在其编程环境中采用了面向对象的可视化设计工具、事件驱动的编程机制、动态数据驱动等先进的软件开发技术,为用户提供了一种所见即所得的可视化程序设计方法。 VB最有力的一面就是快速创建用户界面,把复杂而完善的Windows操作系统的使用融于易于学习和使用的高级语言中,因而受到广大工程技术人员的普遍欢迎。但是它的数值计算能力不是很强,而由美国MathWorks公司推向市场的MATLAB软件恰好弥补了这一缺陷。该软件是一种面向科学和工程计算的解释性语言,具有强大的数值分析、矩阵运算、信号处理和图形显示能力,为用户提供了一个强有力的科学及工程问题分析计算及程序设计的工具,可根据不同处理对象的需要,通过简单的编程,方便地完成相应的功能。但MATLAB编写可视化界面的能力较弱1。基于VB和MATLAB的上述特点,本文利用VB来设计界面作为主程序,调用由MATLAB编写的子程序,从而实现对自动控制系统中系统的稳定性的分析,还可以画出相应的Frequency图、Nichols图、Nyquist图、Bode图,进行自动控制系统的性能分析。作者在学习、使用VB和MATLAB的基础之上,熟练掌握了两个软件的界面设计和程序编程,在接口问题中,大量参阅了相关的书籍,加之自己的亲身实践,终于完成了本设计。本文的研究重点就是两个软件的接口链接。2 借助Active X部件Microsoft公司所有以COM为基础的技术统称为Active X技术。它是一种用于模块集成的新协议,是VB工具箱的扩充部分。Active X部件是一些遵循Active X规范编写的可执行代码,比如一个.exe、.dll或.ocx文件。它允许应用程序或组件控制另一个应用程序或组件的运行,它包括自动化服务器和自动化控制器。在程序中加入Active X部件后,它将成为开发和运行环境的一部分,并为应用程序提供新的功能。Active X部件保留了一些普通VB控制的属性、事件和方法。Active X部件特有的方法和属性大大地增强了程序设计者的能力和灵活性,Active X实际上是在调用一种部件,而无需要求该部件对应的程序正在运行,这会使得其功能更加强大。在VB中创建MATLAB的Active X对象后,就可以使用这个对象所包含的各种方法,实现对MATLAB的调用2。 在VB中创建MATLAB Active X的方法如下:Dim Matlab As Object Set Matlab = CreatObject(“Matlab.Application”) 在创建Matlab Active X对象后。就可以利用该对象所包含的各种方法实现对MATLAB的调用。常用的Matlab.Application方法有:2.1 BSTR Execute(in BSTR Command)方法 BSTR表示宽字符串类型,该方法接收字符串命令,将调用Matlab,执行一条由Command字符串所决定的一条Matlab命令,同时返回命令的执行情况,如将由“surf(peaks)”生成的图形显示在屏幕上,在VB的命令按钮中输入如下程序:Dim Matlab As ObjectDim Result As StringSet Matlab = CreateObject(Matlab.Application)Cmd=text1.text Result = matlab.execute(print -f1 -dbitmap e:bode.bmp)Picture1.Picture = LoadPicture(e:bode.bmp)2.2 Void GetFullMatrix方法 GetFullMatrix(in BSTR Name,in BSTR Workspace,in,out SAFEARRAY (double) *pr,in,out SAFEARRAY (double) *pi); GetFullMatrix方法是将Matlab中的一个矩阵变量传送到VB中的一个一维或二维数组中,其中Name指定了Matlab中的矩阵变量名,Workspace指定了该矩阵所在的Matlab所在的工作区,pr是VB是程序中的实部,pi是VB是程序中的虚部。2.3 Void PutFullMatrix方法PutFullMatrix(in BSTR Name,in BSTR Workspace,in,out SAFEARRAY (double) *pr,in,out SAFEARRAY (double) *pi);PutFullMatrix方法是将VB程序中的一个一维或二维数组传递到指定的Matlab空间,各参数的含义及调用的方法与GetFullMatrix方法类似。示例代码如下:Dim Matlab as object 声明对象Dim MReal1(5,5) As Double声明存放实部的Double型数组Dim MImag1(5,5) As Double声明存放虚部的Double型数组Set Matlab = CreatObject(“Matlab.Application”)初始化对象Matlab.Execute(“a=hilb(5)”)执行Matlab命令 Call Matlab. GetFullMatrix(“a”,“base”,Mreal1,MImag) 将结果分别存入实部、虚部数组2.4 Void Minimize Command Window()方法 该方法使Matlab的命令窗口最小化。2.5 Void Maximum Command Window()方法该方法使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.2 Nyquist稳定判据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 基于Visual Basic及MATLAB接口实现的自动控制系统 例如某控制系统的开环传递函数为: 本例设计的是利用VB来设计界面作为主程序,借助与Active X部件调用由MATLAB编写的子程序,画出相应的Frequency图、Nichols图、Nyquist图、Bode图、step图和rlocus图,并对自动控制系统的稳定性从频域和时域进行了分析。8.1 该系统的频域分析:用户界面设计如下:图8.1.1 Bode图图8.1.2 Nyquist图图8.1.3 Nichols图图8.1.4 Frequency图 在VB中编写的频域分析主程序如下:Private Sub Command1_Click()Dim matlab As ObjectDim result As StringSet matlab = CreateObject(matlab.application)Call matlab.minimizecommandwindowresult = matlab.execute(clear)result = matlab.execute( & Text1.Text & )result = matlab.execute(freqs(num,den,w)result = matlab.execute(print -f1 -dbitmap e: freqs.bmp)Picture1.Picture = LoadPicture(e: freqs.bmp)Call matlab.quitSet matlab = NothingEnd SubPrivate Sub Command2_Click()Dim matlab As ObjectDim result As StringSet matlab = CreateObject(matlab.application)Call matlab.minimizecommandwindowresult = matlab.execute(clear)result = matlab.execute( & Text1.Text & )result = matlab.execute(bode(num,den)result = matlab.execute(print -f1 -dbitmap e:bode.bmp)Picture1.Picture = LoadPicture(e:bode.bmp)Call matlab.quitSet matlab = NothingEnd SubPrivate Sub Command3_Click()Dim matlab As ObjectDim result As StringSet matlab = CreateObject(matlab.application)Call matlab.minimizecommandwindowresult = matlab.execute(clear)result = matlab.execute( & Text1.Text & )result = matlab.execute(nyquist(num,den)result = matlab.execute(print -f1 -dbitmap e: nyquist.bmp)Picture1.Picture = LoadPicture(e: nyquist.bmp)Call matlab.quitSet matlab = NothingEnd SubPrivate Sub Command5_Click()Unload MeEnd SubPrivate Sub Command7_Click()Dim matlab As ObjectDim result As StringSet matlab = CreateObject(matlab.application)Call matlab.minimizecommandwindowresult = matlab.execute(clear)result = matlab.execute( & Text1.Text & )result = matlab.execute(nichols(num,den)result = matlab.execute(print -f1 -dbitmap e: nichols.bmp)Picture1.Picture = LoadPicture(e: nichols.bmp)Call matlab.quitSet matlab = NothingEnd SubPrivate Sub Form_Load()Me.Left = 0Me.Top = 0Me.Width = Screen.WidthMe.Height = Screen.HeightEnd Sub在Matlab下编写的函数子程序如下:num=250;den=1 20 75 0 ;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.5 Bode图此系统开环传递函数的特征根全部位于虚轴左侧,即。由图中可以知道,在的频率范围内,未穿越线,故该系统闭环后是稳定的。利用Nyquist稳定判据进行分析:要判断闭环状态的稳定性,必须绘制出的幅相特性图,根据绘制幅相频率特性图的规则,特性曲线的起点在实轴上,终点是以进入原点。系统闭环稳定与否,主要取决于特性曲线与实轴的交点。 (8.1.1)由得。将代入得 (8.1.2)图8.1.6 幅相频率特性图 的幅相频率特性图如图6所示。由图知的幅相特性绕的转角为零。所以该系统闭环状态是稳定的6。8.2 该系统的时域分析:系统的step图如下:图8.2.1 step图在VB下编写的时域分析的程序: Private Sub Command1_Click()Dim matlab As ObjectDim result As StringSet matlab = CreateObject(matlab.application)Call matlab.minimizecommandwindowresult = matlab.execute(clear)result = matlab.execute( & Text1.Text & )result = matlab.execute(step(num,den)result = matlab.execute(print -f1 -dbitmap e:step.bmp)Picture1.Picture = LoadPicture(e:step.bmp)Call matlab.quitSet matlab = NothingEnd SubPrivate Sub Command2_Click()Unload MeEnd SubPrivate Sub Form_Load()Me.Left = 0Me.Top = 0Me.Width = Screen.WidthMe.Height = Screen.HeightEnd Sub 8.3 该系统根轨迹法的机辅分析:系统的rlocus图(根轨迹图)如下:图8.3.1 rlocus图从图中可以看出系统开环传递函数的所有特征根都在虚轴的左侧,故系统是稳定的。在VB下编写的根轨迹的程序: Private Sub Command1_Click()Dim matlab As ObjectDim result As StringSet matlab = CreateObject(matlab.application)Call matlab.minimizecommandwindowresult = matlab.execute(clear)result = matlab.execute( & Text1.Text & )result = matlab.execute(rlocus(num,den)result = matlab.execute(print -f1 -dbitmap e:rlocus.bmp)Picture1.Picture = LoadPicture(e:rlocus.bmp)Call matlab.quitSet matlab = NothingEnd SubPrivate Sub Command3_Click()Unload MeEnd SubPrivate Sub Form_Load()Me.Left = 0Me.Top = 0Me.Width = Screen.WidthMe.Height = Screen.HeightEnd Sub 9 结论通过对本文的完成,我不仅学会了使用Vasual Basic 6.0软件,用它进行设计用户界面和编写程序,而且对Matlab也有了更深刻的了解。本文对VB和Matlab的链接进行了总结并选择了作者本人比较擅长的以Active X部件为基础的链接方法,而且对自动控制系统的连续函数和离散函数进行了分类介绍,在最后还举例说明并分析了系统开环传递函数的稳定性,画出了系统的Bode图、Nyquist图、Frequency图、Nichols图来验证设计的链接的正确性。在探索VB和Matlab两个软件进

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论