1.6 数字仿真软件简介
1.6.1 数字仿真软件的主要功能与基本结构
在控制系统的分析设计过程中,经常采用的是状态空间模型、系统的传递函数或者系统的结构图模型,研究在给定输入作用下系统的动态响应。这3种类型的模型在控制系统计算机仿真中都会用到。许多数字仿真算法是面向微分方程或者状态方程的。开展仿真研究时,必须将传递函数模型或者系统结构图转换成状态空间模型,然后才能使用第2章中介绍的数字仿真算法,将其转化为数字仿真模型并完成仿真计算。对于一个复杂的控制系统,要让用户自己去完成数学模型的转换和二次模型化是非常困难的,也是不现实的。一般而言,对系统进行仿真研究的工程技术人员并不一定熟悉计算数学和计算机程序的编制,他们主要关心的是所研究的系统本身,而不希望在仿真模型的准备及程序的编制上花费许多时间。为了使系统分析人员或工程技术人员能够专心致志地研究和考查系统本身,而不必在仿真模型准备和程序编制上花费大量的时间,最好能将原系统模型及仿真要求直接输送给计算机,由机器转换成规定的(或标准的)数学模型,并自动安排计算次序、选择仿真算法、规定输出格式等。一旦启动后,仿真过程就可以自动进行。各类仿真通用及专用软件就是为此目的而建立的。
1.数字仿真软件的主要功能
虽然各种类型的仿真软件在使用形式、用户界面等方面大相径庭,但归纳起来,它们都具有如下的主要功能:
●能将使用者输入的系统模型及参数转换成规定的(或标准的)数学模型;
●能给使用者提供一种或多种积分算法,以便将数学模型转换成仿真模型;
●能显示、打印仿真结果,绘制图形等;
●能提供多次仿真运行的控制,以便研究参数变化对系统性能的影响和进行优化设计、统计等工作。
2.数字仿真软件的基本结构
数字仿真软件的基本结构如图1.10所示。
图1.10 仿真软件基本结构
主控模块是仿真软件的最上层,由它进行仿真逻辑控制,调用、安排下面各功能模块工作,完成对仿真过程的控制。
输入模块负责输入系统的数学模型,设置及修改仿真用参数(计算步长、打印间隔、仿真时间等)等。
运行模块负责仿真运算,调用积分子程序完成各步计算,同时将结果存储在数组或数据文件中,以便在仿真结束后按输出要求制表或绘图,并根据设定的条件,终止仿真运行。运行模块是整个仿真软件的核心,对仿真计算的精度和速度影响很大。
输出模块负责将存放在输出文件中的仿真结果,按用户要求在各种输出设备上输出。
控制系统的仿真软件由于所采用的系统数学模型形式不同,可以分为面向微分方程或面向系统结构图等几种。前者以微分方程(或传递函数)的形式给出原系统的数学模型,后者以系统结构图的形式给出原系统的数学模型。无论原来系统数学模型是以什么形式给出的,最后都必须转化成一阶微分方程组(即状态空间模型)的形式,才能用数值积分法完成仿真求解,这是一个由外部模型到内部模型的转换问题。
3.仿真程序与仿真语言
早期的仿真软件是仿真程序,是针对某类问题或某种仿真方法编制的专用程序,是仿真软件的初级形式。例如,CSS仿真程序就是专门解决连续系统仿真问题的。仿真程序通常采用人机对话方式输入必要的参数,具有使用简单、修改及扩充方便、易于普及推广等优点。但仿真程序的功能比较简单,一般只能处理仿真的一些基本问题,不能对复杂系统进行有效的仿真。
仿真语言是一种直接用于解决仿真问题的专用高级语言,是仿真软件的高级形式。它是在某一种程序设计语言的基础上编制的,其成熟期在20世纪的70年代至80年代。例如,ACSL,DARE-P,CSSLIV,SLAM和MIMIC就是当时比较流行的数字仿真语言。使用者可以通过一些专用语句,把微分方程或系统结构图输入到计算机中,由仿真语言中的“翻译模块”将它们翻译成机器的汇编语言或某种程序设计语言,并自动编译、装配、执行,从而使得用户更多地摆脱对程序的熟悉和了解。仿真语言比仿真程序功能更全面,使用起来更方便。体现在:模型输入灵活方便;提供多种仿真算法;可以修改参数;提供多次重复运行的控制功能。然而,由于要求用户能按仿真语言的格式去编写仿真源程序,因此对于一般工程技术人员而言,使用起来仍然感到不是很方便。
近20多年来,随着计算机技术的飞速发展,控制系统计算机仿真与辅助设计软件也取得了巨大的进步,突出的表现是广泛的可视化操作和软件的高度集成化。1984年由Math Works公司推出的MATLAB就是这样的一个软件。尤其是1993年问世的Simulink,这个集成在MATLAB中的动态系统建模及仿真工具,使得MATLAB集可靠的数值运算(尤其是矩阵运算)、图像图形显示和处理、高水平的图形界面设计功能于一身,并提供与其他高级程序设计语言的接口,因此成为控制系统研究人员必备的工具。目前,MATLAB/Simulink已可以在多种机型上运行,用MATLAB/Simulink设计的仿真模型具有良好的可移植性。
采用MATLAB/Simulink进行仿真研究,模型的搭建和仿真运行都是可视化操作。对于不习惯编程处理控制系统仿真的一般工程技术人员,甚至不需要编写一行代码就可以完成相当复杂的控制系统的模型构建和仿真。MATLAB/Simulink已有了多种版本。考虑到成熟性和流行性,本书采用的是MATLAB R2007b(即MATLAB7.5版)/Simulink7.0。
1.6.2 MATLAB/Simulink仿真环境
1.MATLAB简介
MATLAB是一种解释性的程序设计语言,用户既可以在MATLAB环境下直接输入指令,也可以用MATLAB语言编写应用程序,由MATLAB负责解释执行并给出结果。MAT-LAB是一个庞大的软件,要在本节中详细地介绍它是不可能的,有关MATLAB的各种技术细节可以通过联机帮助指令help和技术手册来获取。
在Windows环境下,启动MATLAB后,就打开了一个MATLAB操作桌面(Desktop),如图1.11所示。
图1.11 MATLAB R2007b的操作桌面
在图1.11所示的操作桌面上层铺放着3个最常用的界面:指令窗、当前目录浏览器和历史指令窗;在桌面的下方有一个“开始按钮”;还有一个只能看到“窗名”的工作空间浏览器。
2.控制系统工具箱简介
控制系统工具箱(ControlSystem Toolbox)是MATLAB中专门针对控制系统工程分析设计的函数和工具的集合。该工具箱采用M文件形式(以.m为后缀的文件),提供了非常丰富的算法程序。它主要用于反馈控制系统的建模、分析和设计,所涉及的领域涵盖经典控制理论和现代控制理论的大部分内容,包括根轨迹、极点配置和LQG(线性二次最优)控制器设计等。另外,还提供了友好的图形界面环境(GUI),大大地简化了控制系统的分析和设计过程。
我们将在后续的内容中介绍相关的控制系统工具箱中的函数和使用方式。
3.Simulink仿真环境
Simulink是MATLAB下的数字仿真工具,其文件类型为.mdl,是一个用来对动态系统进行建模、仿真和分析的集成环境。它支持连续、离散及两者混合的线性和非线性系统仿真,也支持具有多种采样速率的多速率系统仿真。Simulink提供了用鼠标“画出”系统框图的方式,可以进行图形建模,具有直观、方便、灵活的优点。
在MATLAB的指令窗运行指令 simulink 或者单击MATLAB操作桌面中的Simulink图标,便打开Simulink模块库浏览器(Simulink LibraryBrowser)窗口,如图1.12所示。其中,窗口的右边是Simulink模块库的各个子库图标,双击对应的子库图标,就会打开该子库。
图1.12 Simulink模块库浏览器
单击“新建”图标,就打开一个名为untitled的空白模型窗口,如图1.13所示。
利用Simulink对控制系统进行仿真研究的步骤如下:根据给定的数学模型,从Simulink模块库的各个子库中选择相应的模块,并按住鼠标左键将它们拖入模型窗口;双击选择的模块,设置需要的参数;对各模块进行连接,构成需要的系统模型;运行模型,得到仿真结果。
【例1.2】 利用Simulink对例1.1中的质量-弹簧-阻尼器系统进行仿真研究。
【解】 首先将描述该系统输入、输出关系的数学模型式(1.3)改写成传递函数形式
根据式(1.28),从Simulink模块库的信号源子库(Sources)中选择Step模块,拖入模型窗口,双击该模块,设置参数Step time为0;从Simulink模块库的连续模块子库(Continuous)中选择TranferFcn模块,拖入模型窗中,双击该模块,设置参数Numerator为[1],Denominator为[1 f 4];从Simulink模块库的接收器子库(Sinks)中,选择Scope模块,拖入模型窗口。
图1.13 Simulink的新建模型窗口
各模块外侧的“>”和“<”分别表示信号的输入和输出。为了连接两个模块,单击输入或输出端口,当光标变为“+”形状时,拖动“+”光标到另一个端口,然后释放鼠标,则带箭头的连线表示信号的流向。
按照以上操作并完成保存后(文件名为exam1_2.mdl)得到的Simulink模型如图1.14所示。
图1.14 质量-弹簧-阻尼器系统的Simulink模型
在MATLAB的指令窗中运行指令
>>f=5
其中,>>为MATLAB的提示符。然后单击模型窗中“仿真启动”图标,即开始仿真。经过短暂的仿真过程后,双击Scope模块,可以看到类似于图1.6(a)的响应曲线。同样,取f=7.5,f=2.5和f=4进行3次试验,分别得到3条类似于图1.6(b)、(c)、(d)的响应曲线。这样就完成了与编程实现类似的仿真研究。
关于Simulink的使用详情将在后续内容中结合具体应用例题加以介绍。