电机瞬态过程分析的MATLAB建模与仿真
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.8 Matlab软件简介

本书使用Matlab软件对电机的瞬态过程进行仿真分析。Matlab是近年来应用广泛、性能卓越的科学计算工具软件,它集数值分析、矩阵运算、信号处理和图形显示于一体,构成了一个操作方便、界面友好的系统仿真和CAD平台。Matlab软件中提供了很多具有源程序的开放性和功能齐备的工具箱,例如,信号处理、控制系统、神经网络、图像处理、系统辨识、最优化分析与综合、模糊逻辑、小波变换等工具箱。人们可直观而方便地利用它们进行分析、计算及设计工作,从而大大节省时间。

Matlab的另一个显著特点,就是提供了系统动态仿真工具箱——Simulink。Simulink由模块库、模型构造及指令分析和演示程序组成,是一个模块化、模型化的系统动态仿真环境。Simulink既保留了编程方式的优点,又克服了编程方式的缺点,用户只要从模块库中拖放合适的模块组合在一起即可实现系统仿真,方便易学。通过Simulink可以对电气、机械,以及通信等的连续、离散或混合系统进行深入的系统建模、仿真与分析研究。

S函数简介

S函数即系统函数(System Function)的意思。对于有些复杂的算法若用普通的Simulink模块来搭建仿真模型,有可能难以实现或显得非常烦琐,这时可采用编程的形式设计出S函数模块,将其嵌入到系统中来建立仿真模型。如果恰当地使用S函数,理论上,可以在Simulink下对任意复杂的系统进行仿真。

S函数具有固定的程序格式,用Matlab语言可以编写S函数,此外还允许用户使用C、C++、Fortran和Ada等语言进行编写,用非Matlab语言进行编写时,需要采用编译器生成动态链接库DLL文件。

在主窗口中输入sfundemos,或者单击Simulink->User-Defined Functions->S-Function Examples,即可出现如图1.4所示的界面,可以选择对应的编程语言查看演示文件。

图1.4 S函数范例库

Matlab软件为了用户使用方便,有一个S函数的模板sfuntmpl.m,一般来说,仅需要在sfuntmpl.m的基础上进行修改即可编写出S函数。在主窗口输入edit sfuntmpl即可出现M文件形式的S函数模板的内容,可以详细地阅读其帮助说明以便更好地了解S函数的工作原理。S函数模板的函数定义形式为

      Function[sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag)

一般来说,S函数的定义形式为

      [sys,x0,str,ts,simStateCompliance]=sfuntmpl(t,x,u,flag,P1,…,Pn)

其中sfunc为自己定义的函数名称,以上参数中,t、x、u分别对应时间、状态、输入信号,flag为标志位,其取值不同,S函数执行的任务和返回的数据也是不同的,Pn为额外的参数,sys为一个通用的返回参数值,其数值根据flag的不同而不同,x0为状态初始数值,str在目前为止的Matlab版本中并没有什么作用,一般str=[]即可,ts为一个两列的矩阵,包含采样时间和偏移量两个参数,如果设置为[00],那么每个连续的采样时间步都运行,[−10]则表示按照所连接的模块的采样速率进行,[0.250.1]表示仿真开始的0.1s后每0.25 s运行一次,采样时间点为TimeHit=n*period+offset。simStateCompliance为Matlab 2010版加进去的。

S函数的使用过程中有2个概念值得注意:(1)direct feedthrough,系统的输出是否直接和输入相关联,即输入是否出现在输出端的标志,若是为1,否则为0,一般可以根据在flag=3的时候,mdlOutputs函数是否调用输入u来判断是否直接馈通。(2)dynamically sized inputs,主要给出连续状态的个数、离散状态的个数、输入数目、输出数目和直接馈通否。

S函数中目前支持的flag选择有0、1、2、3、4、9等几个数值,下面说明在不同的flag情况下S函数的执行情况,见表1.1。(1)flag=0,进行系统的初始化过程,调用mdlInitializeSizes函数,对参数进行初始化设置,比如离散状态个数、连续状态个数、模块输入和输出的路数、模块的采样周期个数、状态变量初始数值等。(2)flag=1,进行连续状态变量的更新,调用mdlDerivatives函数。(3)flag=2,进行离散状态变量的更新,调用mdlUpdate函数。(4)flag=3,求取系统的输出信号,调用mdlUpdate函数。(5)flag=4,调用mdlGetTimeOfNextVarHit函数,计算下一仿真时刻,由sys返回。(6)flag=9,终止仿真过程,调用mdlTerminate函数。

表1.1 不同flag的S函数的执行情况

在实际仿真过程中,Simulink会自动将flag设置为0,进行初始化过程,然后将flag的数值设置为3,计算模块的输出,一个仿真周期后,Simulink将flag的数值先后设置为1和2,更新系统的连续和离散状态,再将其设置为3,计算模块的输出,如此循环直至仿真结束条件满足。

在S函数的编写过程中,首先需要搞清楚模块中有多少个连续和离散状态,离散模块的采样周期是如何的,同时需要了解模块的连续和离散的状态方程分别是什么,输出如何表示。下面以实例说明S函数的具体应用。

Simulink是一个开放的编程环境,允许用户开发自己的仿真模型。可以采用以下几种方法建立新模型:

(1)用Simulink提供的功能模块建立新模型;

(2)通过调用S-function模块,编写S函数建立新模型;

(3)调用M-function模块,编写Matlab函数的M文件建立新模型。

在对复杂系统仿真时,往往需要三种方法交叉使用。

另外,Matlab还提供了基于Simulink环境的电力系统模块(Power System Blockset),专门用于电力电子与电气传动系统仿真。Power System Blockset中包含了变压器模型、电机模型、电源模型、功率器件模型和无源器件模型等典型的电力装置模型。Power System Blockset中的模型或模块可以与Simulink中的模块或建立的子系统混合使用,但要注意信号与电量及电量与信号之间的转换。