1194.机电系统动态性能的计算机仿真4.1概述机电系统计算机仿真是目前对复杂机电系统进行分析的重要手段与方法。在进行机电系统分析综合与设计工作过程中,除了需要进行理论分析外,还要对系统的特性进行实验研究。系统性能指标与参数是否达到预期的要求?它的经济性能如何?这些都需要在系统设计中给出明确的结论。对于那些在实际调试过程中存在很大风险或实验费用昂贵的系统,一般不允许对设计好的系统直接进行实验,然而没有经过实验研究是不能将设计好的系统直接放到生产实际中去的,因此就必须对其进行模拟实验研究。当然在有些情况下可以构造一套物理模拟装置来进行实验,但这种方法十分费时而且费用又高,而在有的情况下物理模拟几乎是不可能的。近年来随着计算机的迅速发展,采用计算机对机电系统进行数学仿真的方法已被人们采纳。所谓机电系统计算机仿真就是以机电系统的数学模型为基础,借助计算机对机电系统的动静态过程进行实验研究。这里讲的机电系统计算机仿真是指借助数字计算机实现对机电系统的仿真分析。这种实验研究的特点是:将实际系统的运动规律用数学表达式加以描述,它通常是一组常微分方程或差分方程,然后利用计算机来求解这一数学模型,以达到对系统进行分析研究的目的。对机电系统进行计算机仿真的基本过程包括:首先建立系统的数学模型,因为数学模型是系统仿真的基本依据,所以数学模型极为重要。然后根据系统的数学模型建立相应的仿真模型,一般需要通过一定的算法或数值积分方法对原系统的数学模型进行离散化处理,从而建立起相应的仿真模型,这是进行机电系统仿真分析的关键步骤;最后根据系统的仿真模型编制相应的仿真程序,在计算机上进行仿真实验研究并对仿真结果加以分析。机电系统计算机仿真的应用与发展已经过了近40年的历程,进入20世纪80年代以来,随着微型计算机技术以及软件技术的飞速发展与广泛应用,使得机电系统计算机仿真获得了实质性的发展,并使其走进广大的机电系统生产、设计、研究的第一线。目前在该领域应用最为广泛的软件包就是美国Mathworks公司开发的MATLAB语言软件。虽然它最初并非是为机电系统仿真与设计开发的,但是它的强大的矩阵运算功能与图形处理及绘制能力,以及在MATLAB平台上开发出来的各种工具箱,和面向结构图的SIMULINK系统分析环境,为机电系统计算机仿真提供了强有力的软件工具,从而为机电系统计算机仿真与辅助设计开辟新的方法与途径提供了充分的条件。考虑到部分读者不具备MATLAB基础知识,因此,在本书的附录一中对120MATLAB语言基础知识作了简单的介绍。4.2面向微分方程的连续系统仿真与MATLAB实现对于控制系统的最基本数学描述就是微分方程,因此有必要在介绍机电系统计算机仿真时对这种方法加以介绍。实际上在前面章节已经介绍了几种典型数值积分方法以及它们的MATLAB实现。数值积分的数学基础就是微分方程(状态方程),如果一个系统以微分方程的形式加以描述,就可以利用前面的知识对该系统进行仿真研究,有关这部分内容本章就不再加以讨论了。这里将介绍如何利用MATLAB中为用户所提供的常微分方程解函数ode和对微分方程进行求解计算,以及在面向微分方程的系统仿真研究中如何应用M函数。4.2.1基于ode函数的面向微分方程的系统仿真1.常微分方程解函数ode的基本格式(l)ode函数的基本分类。在MATLAB5.x中ode函数可以分为两类五种形式。一类是应用于非刚性微分方程求解,如ode45;另一类属于求解刚性微分方程的ode解函数,如ode23s.他们的具体形式如下:1ode45函数用于求解非刚性微分方程.它属于中阶龙格一库塔法;2ode23函数用于求解非刚性微分方程,它属于底阶龙格-库塔法;3ode113函数用于求解非刚性微分方程的变阶法;4ode15s函数用于求解刚性微分方程的变阶法;5ode23s函数用于求解刚性微分方程的低阶法。(2)ode函数的基本格式。上还这五种ode函数的格式基本上一样.这里主要以最常用的ode45函数为例加以介绍,其结果多数也可用于其他ode函数。ode45的基本格式主要有以下几种。①[t,y]=ode45('F',tspan,y0)其中:'F'是ode文件名字符串;tspan=[T0TFINAL]为一个向量,它指定了积分的启始时刻和结束时刻;y0为积分运算的初始条件。该函数对微分方程系统ytFy,从T0到TFINAL时间段进行积分。函数ytF,返回一个列向量。在解向量Y中的每一行与列向量T的返回时间相对应。为了在指定的时刻点T0,T1,…,TFINAL得到解,则使用tspan=[T0,T1,…,TFINAL]。②[t,y]=ode45('F',tspan,y0,options)121该函数的解如同前一格式,只是在这里用选项options中的参数来代替前一格式中的缺省值,options中的参数变量由函数odeset予以建立。最常使用的选项参数是标量相对容差'RelTol'(缺省值为1e-3)与绝对容差向量'AbsTol'(缺省的全部向量元素均为1e-6)。(3)odeset函数的基本格式。odeset函数用来建立或改变options选项结构,其基本格式为options=odeset('namel',valuel,'name2',value2,…)通过该odeset函数建立积分器选项options的结构,在options中所命名的属性具有指定值,对于任何未指定的属性均为缺省值。options=odeset(oldopts,'namel',valuel,…)通过该odeset函数改变现存选项结构oldopts。options=odeset(oldopt,newopts)通过该odeset函数将现有选项结构oldopts与新选项结构newopts结合在一起,新选项中的属性将覆盖对应原有属性。2.机电系统仿真的ode函数实现由ode函数可知,当已知系统由微分方程ytFy,加以描述时,并建立以'F'作为ODE文件名,则可应用[t,y]=ode45('F',tspan,y0)实现对系统的求解分析。这里所讲的ODE文件实际就是M函数文件,因此对于以高阶微分方程加以描述的系统,首先应将其写成一组一阶微分方程的形式,当然如果系统是以状态方程描述的,即可直接对其编写M函数文件。函数文件的特征就是文件第一行一定是以function开始,而且在函数文件中的变量均为局部变量,同时由函数文件构造的功能函数可以像MAT-LAB的其他函数一样进行调用。实际上在ode函数[t,y]=ode45('F',tspan,y0)中,对以'F'作为文件名的ODE文件就是这类函数文件。下面通过实例说明对系统仿真过程中的具体应用。例4-1之已知一三阶系统,其状态方程表达式为BUAXX其中182424109121094A,12482.B输入为u=100,试应用ode函数求解该系统。122解:由于该系统是以状态方程形式给出的,因此即可直接对其编写M函数文件。functionxd=rr(t,x)u=100;xd=[-14*x(1)+9*x(2)+10*x(3)+2.8*u;12*x(1)-9*x(2)+10*x(3)+4*u;24*x(1)-24*x(2)-18*x(3)+12*u];该函数文件对所研究系统的状态方程加以描述并形成rr.m文件以便在ode解函数中使用后即可利用ode解函数对系统进行求解分析。考虑状态的零初值条件,即图4-1系统状态曲线clearx0=[0;0;0];[t,x]=ode45('rr',[03],x0);plot(t,x)对其同样可存一M文件,如li32.m文件,这样即可在命令窗口执行该文件。在运行过程中它会自动调用相关rr函数文件,实现预定的工作,图4-1给出了相应的运行结果。根据ode函数用途可知,该函数应用于求解常微分方程,因此对于含有输出方程的系统状态空间表达式就不能直接利用ode函数求解系统输出响应。考虑到ode函数返回变量的向量格式,可以根据输出方程的具体要求,由状态变量的线性组合直接得到所要求的系统输出。利用ode函数可以方便地对以微分方程形式描述的系统进行仿真分析,然而ode解函数并非是万能的,在应用ode函数时对其进行干预一般是不方便的,因此在很多情况下,对以微分方程形式给出的系统,还必须采用前面所介绍的各种数值积分方法进行仿真分析。1234.2.2基于M函数的面向微分方程的系统仿真M函数是MATLAB中所特有的一类函数,前面介绍ode函数时已经使用了M函数。这里将介绍采用M函数建立描述系统的数学模型并在此基础上编制相应的程序。根据需要调用该M文件,实现所要求的运算。下面通过实例加以说明。例4-2已知系统状态方程为uxxxx0107814078140557202121...应用数值积分方法(预估校正梯形法)实现对系统状态的仿真研究。解:首先建立描述该系统数学模型的M函数文件,相应的程序如下。functiondf=rrl(X,u)A=[-0.5572-0.7814;0.78140];B=[1;0]U=20;df=A*X+B*u将该函数文件存盘取作rrl.m文件。然后根据预估校正梯形公式编制相应的程序。h=0.0l;t0=0;tf=15;X=[00]';X1=[00];T=(tf-t0)/hfori=l:TK1=rrl(X,1);X=X+h*K1K2=rrl(X,1);X=X+h*(K1+K2)/2X1=[X1;X'];endplot(X1)在该程序段中两次调用了rr1.m函数文件,在第一次调用rrl.m后,对各状态的计算将产生新值,因此K2就是经过预估计算所得到的相关值,从而即可应用梯形法实现对系统状态的仿真分析。图4-2给出了系统状态响应仿真曲线。124图4-2系统状态响应4.3面向传递函数的连续系统仿真一个控制系统的动态模型经常是一传递函数的形式给出,特别是当给出开环传递函数,在进行系统仿真时就要将开环传递函数转换为开环状态方程,再由开环状态方程求出对应的闭环状态方程,然后,再应用数值积分方法进行分解和分析仿真。下面将就这类问题加以介绍并给出MATLAB的实现。4.3.1面向传递函数的系统仿真考虑一个连续系统,它的开环传递函数的一般描述为nnnnnnnnnasasasascscscscsUsYsG1221112211其相应的状态空间表达式为CXYBUAXX其中A、B、C为相应的系统系数阵,这些系数阵可以写作能控标准型形式或能观标准型形式,当然也可以写成其他的形式,这些都不会影响系统分析的结果。现如果假定系统结构图如图4-3所示,对于SISO系统,其v、u、y、f均为标量。由结构图可知u=v-fy,将其代入状态空间表达式得到BvXAfyvBAXXb)(125图4-3系统结构图式中BfCAAb(4-1)输出方程为:CXY(4-2)(4-1)式即为系统闭环状态方程。因此可以方便地利用各种数值积分方法对其进行求解,实现对以传递函数形式给出的系统进行仿真分析研究。显然,如果系统的数学模型是以微分方程或状态方程形式给出的,一般就可以直接利用前述数值积分方法或ode函数方法对系统进行仿真研究。4.3.2面向传递函数的系统仿真的MATLAB实现下面通过一个例子说明如何利用MATLAB语言进行以传递函数形式给出的系统的仿真分析。例4-3设单位反馈系统的开环传递函数为)22)(3()2(2)(2ssssssG试给出系统闭环的阶跃响应。解根据开环传递函数求出系统开环状态方程,应用MATLAB控制工具箱中的函数,可以方便地求出系统开环状态方程。num=2*[1,2];den=conv(conv([1,0],[1,3]),[1,2,2])G1=tf(num,den);G2=ss(G1);[a,b,c,d]=ssdata(G);126这样即可以得到系统系数阵分别