您好,欢迎来到一二三四网。
搜索
您的当前位置:首页第7章 AMESim与MATLAB的接口

第7章 AMESim与MATLAB的接口

来源:一二三四网
第7章 AMESim与MATLAB的接口

7.1 引言

本章跟你是否已经了解了MATLAB程序包并且积累了一定的MATLAB使用经验有

关。

你可以先开始一些简单的练习,最后有一个参考部分。

7.2 示例

图7.1

利用图7.1所示的质量-弹簧-阻尼器系统来说明AMESim和MATLAB的接口: 1、构造这个系统并保存为MSD.ame;

2、设置所有的参数为缺省值,仿真时间为8s,并进行仿真; 3、画出质量块随时间变化的位移曲线如图7.2所示。

图7.2

在这个例子中,首先你必须装载AMESim的结果,然后利用MATLAB中的绘图工

具来显示它们。其中MSD_.result和MSD_.var文件是必须的。通过一个保存在AMESim系统子路径中的公用的MATLAB.m文件集,以上两个文件将会被读取和处理。 7.2.1 设置MATLAB路径列表

当使用Unix操作系统时:

确定MATLAB中是否已经存在路径列表的最简单的方法是检查环境变量中是否已经

有一个参考路径$AME/matlab/amesim,其中$AME是AMESim的安装路径。一般情况下,

系统会自动设置MATLAB-PATH环境变量。

输入以下命令行:

echo $MATLABPATH

 如果输出中包括字符串matlab/amesim,说明你的环境变量已经被正确地设置好了。  如果输出中不包括以上地字符串,那么我们需要自己将AMESim的路径添加进去。

在C-shell(csh)下,可以通过以下命令完成:

setenv MATLABPATH ${MATLABPATH}:${AME}/matlab.amesim

如果你用的是Korn shell(ksh)或者Bourne shell(sh),可以通过以下命令完成:

MATLABPATH=$MATLABPATH:$AME/matlab/amesim; export MATLABPATH

 如果命令行

echo $MATLABPATH

输出一个空字符串或错误信息,你可以通过下列方式来设置环境变量

MATLABPATH:

对于csh, 为

setenv MATLABPATH ${MATLABPATH}:${AME}/matlab.amesim

对于ksh或者sh,为

MATLABPATH=$MATLABPATH:$AME/matlab/amesim; export MATLABPATH

如果你将以上的命令添加到相应的文件.cshrc(csh)或者.profile(ksh、sh)中,那

么环境变量的设置就可以在程序的装载过程中自动完成了。

注:当环境变量设置完成后,你必须将以上的命令行添加到你的开始文件(.cshrc

或者.profile)中。

当使用Windows操作系统时:

首先,你必须检查一下MATLAB路径列表中是否包括以下的路径:

%AME%\\matlab\\amesim

其中,%AME%是AMESim的安装路径。 然后:

1、打开MATLAB并且选择菜单项File/Set Path„。

在打开的对话框中你可以点击按钮Add Folder„,这样将会出现一个路径浏览器。

2、将你的%AME%\\matlab\\amesim路径移到其中。 3、点击确定。 4、保存并关闭对话框。

这样就可以将以上路径添加到MATLAB的路径列表中了。 现在这个amesim子路径就被精确确定了。

5、打开MATLAB应用程序,并且输入以下命令:

help amesim

你将得到一个包括各种可用命令内容的表格。当然,你也可以运行其中被描述的命令。

7.2.2 设置MATLAB工作区域

当打开MATLAB时,你必须保证是在你的AMESim模型被存储的路径下。使用MATLAB

中的文件浏览器可以改变这个路径。如果关闭一个AMESim后,你必须运行AMELoad这个应用程序:

 如果你使用的是Unix操作系统,可以在终端窗口下运行;  如果你使用的是Windows操作系统,可以在DOS窗口下运行。

这个应用程序可以打开接收自变量的AMESin.ame文件。在这里,这个文件是我们在MATLAB中使用的MSD.ame。为了使用在这里提到的这个应用程序,必须有一个AMESim模型的仿真已经运行完毕,且是可用的和打开的。 7.2.3 将AMESim结果导入MATLAB中

当你打开你的AMESim模型MSD.ame并且在MATLAB下运行以后,你可以在运行窗口

下运行以下程序:

>> help ameloadt

AMELOADT Load AMESim .RESULTS format temporal files.

[R,S] = AMELOADT('NAME') extracts temporal results and variables name for the system NAME and sort it in alphabetic order. The data in .RESULTS file is placed in matrix R. This matrix is of size the number of variables in the .VAR file by the number of points logged. R(1,:) is the time vector. A list of variables on the .VAR list is stored in a text matrix

S. The global variables ResultsFromAMESim VarNames- FromAMESim are set, AMEPLOT relies on this.

[R,S] = AMELOADT ask for user the name of the system. See also AMELOADJ, AMEPLOT, AMERUN. >> [R,S]=ameloadt('MSD'); There are 10 variables

There are 81 points per variable >> S S = time [s]

MAS001_1 acceleration at port 1 [m/s/s] MAS001_1 displacement port 1 [m] MAS001_1 velocity at port 1 [m/s] SD0000_1 duplicate of force at port 1 [N] SD0000_1 force at port 1 [N] SD0000_1 spring compression [m] SD0000_1 spring force [N] SIN0_1 sine wave output VELC_1 velocity output [m/s] >> plot(R(1,:), R(3,:)) >> xlabel(S(1,:)) >> ylabel(S(3,:))

注意:结果保存在矩阵R中,变量名保存在矩阵S中。 你可以得到以下结果:

图 7.3

另外一种使用进入矩阵R和S的索引的方案是利用amegetvar()函数,此函数可以

提取矩阵R和S的值和变量名。这样就不用事先知道变量存于哪个矩阵中而足以知道变量名了。前面的绘图命令仍然可以在这里使用:

[t,tlabel]=amegetvar(R,S,’time [s]’);

[disp, displabel] = amegetvar(R,S,’MAS001_1 displace-ment*’); plot(t,disp); xlabel(tlabel); ylabel(displabel); 7.2.4 在MATLAB中运行AMESim仿真

在MATLAB中完全可以进行AMESim仿真模型的控制仿真实验。相关命令见7.3.4节

的列表。这就使得在MATLAB中可以利用脚本文件来实现分批仿真。

我们以图7.1所示的系统为例,将它的输入替换为阶跃信号,如图7.4所示。

图7.4

在AMESim中运行仿真:

1、利用Premier submodel工具对系统进行设置,且命名为MSD2. 2、设置阶跃响应的终值为0.1,且在0.2s时加入阶跃信号。

当质量为100kg,倾角为0度,弹性系数为100000N/m,阻尼为1000N(m/s)时,进

行一次 AMESim仿真的曲线如图7.5所示。

3、不要进行保存。

4、设置终止时刻为1s,且通讯间隔为0.01s。

图7.5

在MATLAB中运行仿真:

现在,你可以在MATLAB中进行相同的仿真。 第1步:关闭AMESim,保存模型并且打开.ame文件 1、退出AMESim。

主要原因是对于一个仿真模型AMESim不会识别输入文件中的任何变化。如果我们先

在MATLAB中改变了参数,然后再在AMESim中进行仿真,那么我们在MATLAB中所进行的修改将会被重写。

当在AMESim中关闭一个系统时,正常情况下AMESim将会把所有的文件打包到.ame

文件。因此当我们从MATLAB中存取仿真模型时需要先打开.ame文件。

2、现在需要运行AMELoad程序来打开.ame文件。

当使用Unix操作系统时,在终端窗口中键入命令:AMELoad MSD2 当使用Windows操作系统时,在DOS窗口中键入命令:AMELoad MSD2 3、当上一个命令运行完以后,

当使用Unix操作系统时,在终端窗口中继续键入命令:ls 当使用Windows操作系统时,在DOS窗口中继续键入命令:dir

通过这个命令你可以确信你已经在当前路径下建立了一系列的文件,且是以MSD2_.

开头的。

文件MSD2_(Unix)或者MSD2_.exe(Windows)是真正的系统仿真模型,如果这个文件不存在,你需要重新打开AMESim并且确定在你保存和退出AMESim之前确实进行过一次仿真。

第2步:在MATLAB中列出各个参数

现在你需要对模型中用到的所有参数进行简单的罗列。

1、如果需要你可以打开MATLAB,利用其中的路径浏览器找到保存过的模型MSD2。 2、键入:

amegetp(‘MSD2’)

或者为了得到一个选择性参数列表,可以键入:

amegetp(‘MSD2’,’MAS001-1*’)

最后这个命令将会给你一个关于质量参数的列表。

3、核对质量是否为100Kg。

第3步:在MATLAB中运行一次标准的仿真 为了在MATLAB中运行一次仿真,需要以下步骤: 1、利用以下的命令:

[R,S]=amerun(‘MSD2’,0,1,0.001);

这个命令可以进行一次起始时刻为0,终止时刻为1s,通讯间隔为0.001s的仿真。仿真结束后,结果将自动保存到矩阵R和S中。

在矩阵S中有一个变量名的列表。通过查看矩阵S,你可以知道矩阵R中哪一行属于哪个变量。

2、键入:

S

将会得到以下结果:

S =

time [s]

MAS001_1 acceleration at port 1 [m/s/s] MAS001_1 displacement port 1 [m] MAS001_1 velocity at port 1 [m/s]

SD0000_1 duplicate of force at port 2 [N]

SD0000_1 force at port 2 [N]

SD0000_1 spring displacement [m] UD00_1 user defined duty cycle output

XVLC01_1 (dummy) state scalar derivative [m] XVLC01_1 displacement output [m] XVLC01_1 velocity output [m/s]

因为你没有进行选择性保存,所以这是将显示所有的变量。如果你已经进行了选择性保存,那么将会显示出你所保存过的变量。如果没有变量被保存过,amerun将会产生一个错误信息。

从上面你可以看到位移(displacement)在第3行,也就是说在矩阵R中,位移位于第3行,而第1行是时间(time)。

3、键入以下命令,绘出位移—时间曲线图:

plot(R(1,:),R(3,:))

将生成如图7.6所示的曲线图:

图7.6

在MATLAB中运行批仿真:

现在,你可以进行一系列的仿真了,输入值为20的阶跃信号,质量从1~200Kg,然后在一幅图中生成这些曲线。

1、在与AMESim模型相同的路径下,使用一种你最喜欢的文本编辑器新建一个文件,命名为:

sweepmass.m

文件的内容如下所示。除了命令行,%以及它后面的注释部分你可以不用输入。

% Set up a vector with the masses we want to test sweeppars=1:20:201; % We'll save the time and velocity in these two variables % so we start by deleting any old results clear time displacement; % Loop through all elements in sweeppars for i=1:length(sweeppars); % Set the mass

ameputp('MSD2','MAS001-1 mass [kg]',sweeppars(i)) [R,S]=amerun('MSD2',0,1,0.01); % run a simulation time(i,:)=R(1,:); % save the time

displacement(i,:)=R(3,:); % save the displacement end plot(time’, displacement’)% Plot all

2、将文件保存在与MSD2.ame文件相同的路径下。 3、将此路径添加到MATLAB的路径列表中。

4、在MATLAB命令窗口下,通过键入以下命令来运行这个MATLAB程序。

Sweepmass

这样将会开始一批11次的仿真。最后将会绘出一幅包括11次阶跃响应的曲线图,如图7.7所示。

图7.7

这是一个关于在MATLAB中如何通过命令来进行AMESim控制仿真的简单例子。

将前面的例子进行一个简单的推广,可以在任意时刻进行线性化(通过使用AMESim或amela),而且还可以在每一次迭代中将线性模型添加到MATLAB中。其它的用途包括在仿真模式下的更高级的灵敏度分析、参数优化等等。只有用户的想象力(以及编写MATLAB程序的能力)才能限制对它的使用。 7.2.5 将AMESim中的线性化结果导入MATLAB中

接下来你可以在某些操作点处使用AMESim来对系统进行线性化,并得到状态空间方

程的标准的状态空间矩阵A、B、C和D:

xAxBu

yCxDu

其中,x、u和y分别为状态变量、控制量和观测量。

在AMESim中对系统进行线性化的过程在前面的第5章:批处理和线性分析中已经有

所说明。这里我们再提一下,如果在系统中有任何微分代数方程(这个例子中没有),那么状态空间方程将变为:

xAxBisiui0pp

yCxDisiui0 其中,p为零力的指数。这个数值将概略地表明此系统的隐式程度。如果这个数值

为0,则表明系统是一个一般的微分方程,且是显式的。

如果你创建了一个系统,其中包括一个零质量的子模型MAS000、一个具有无穷刚度

的弹簧SPR1或者一个微分器DIF00,那么你肯定会得到一个大于1的零力指数。 显示系统的情况

将示例MSD装载到AMESim中。执行以下步骤: 1、设置线性化时刻为t=1s。 2、如下所示改变变量的状态:

 SIN0:正弦信号输出->控制器  SD0000:端口2的速度->状态观测器 3、重新开始一次运行。

这将肯定会产生至少一个名为MSD_.jac0的文件。如果有更多的线性分析时刻,那么将会生成一系列的文件:MSD_.jac0、MSD_.jac1等等。在文件MSD_.jac0中将会包括在当前线性化时刻的结果,也就是说状态空间矩阵A、B、C和D的值。这些结果可以通过公用的aemloadj.m文件来读取。下面是一些读取状态空间矩阵的典型部分,并且执行了一些简单的分析:

>> help ameloadj

AMELOADJ Load AMESim .JAC format jacobian files.

[A,B,C,D,x,u,y,t] = AMELOADJ('system_.jac0')extracts continuous state-space matrix (A,B,C,D) about the current point at time(t) computed by AMESim using numerical perturbations. In X,U,Y it re-turns the titles on states, input, output variables.

In matrix or state-space form, the equations can be writ-ten as:

xAxBu

yCxDuwhere u is a vector of control inputs, x is a state vec-tor, y is a vector of observer outputs.

[A,B,C,D,x,u,y,t] = AMELOADJ ask for user the name of the system [A,B,C,D,x,u,y,t] = AMELOADJ('system',N) loads the Nth jacobian See also EIG, CONTROL system toolbox, AMELOADT >> [A,B,C,D]=ameloadj; Name of the system? MSD * Linearization time = 1 [s] * There are 3 free state variables

MAS001 instance 1 velocity at port 1 [m/s] MAS001 instance 1 displacement port 1 [m] SD0000 instance 1 spring force [N] * There are 1 control inputs: SIN0 instance 1 sine wave output * There are 1 observer outputs:

MAS001 instance 1 velocity at port 1 [m/s] >> format short e >> eig(A) ans =

0

-5.0000e+00 + 3.1225e+01i -5.0000e+00 - 3.1225e+01i >> damp(A)

Eigenvalue Damping

Freq. (rad/s)

0.00e+00

-1.00e+00

0.00e+00 -5.00e+00 + 3.12e+01i 1.58e-01 3.16e+01 -5.00e+00 - 3.12e+01i 1.58e-01 3.16e+01

>> step(A,B,C,D,1) >> bode(A,B,C,D) >> amebode('MSD')

注:以上的仿真数据是当质量为100Kg,弹性系数为100000N/m,阻尼比为

1000N/(m/s)时的情况。通过分析这些数据,方程可以被简化为具有以下两个特征向量的二阶系统:

5539i

这些值是在数字结果中被复制的,但是还有另外一个为0的特征向量。这是因

为两个状态变量质量块位移和弹簧位移之间是有联系的。经过分析,其中的一个状态变量可以被删除,因此形成了一个只含有两个状态变量的最小系统。这种冗余性在数值上被显示为0特征向量。因此这个3×3的雅可比矩阵A的秩为2。 隐示系统的情况

amebode.m是一个特殊的公用文件,可以直接在AMESim文件中运行。在这种情况下,

将会产生同bode.m文件相同的结果。但是,它可以工作在一个隐式系统下。为了进行说明,我们采用如图7.8所示的系统,其中的100Kg的质量块被分解为中间由刚性无穷大的弹簧相连的两个50Kg的质量块。这是一个将系统变为隐式系统(其零力指数为2)的小技巧,但两个系统是恒等的。

图7.8

1、将含有50Kg质量块,且倾角为0度的两个系统MAS002和MAS001修改为MSD3。 2、在一个合适的时刻进行一次线性化,使用:

amebode(‘MSD3’)

3、检验你所得到的波特图与直接使用MSD时是相同的。

如果你同时使用特征向量进行了计算,你会发现它们具有相同的结果。因为其中为了保证冗余性而增加的是一个0特征向量。

这里我们所用到的例子是线性的,在不同的时刻进行线性分析没有什么真正的关系。

但对于一个真正的非线性系统,除非系统处于平衡状态,在不同的时刻,你将得到不同的状态空间矩阵、特征向量等。正常情况下,你非常仔细地选择你的执行点,并运行你的线性化程序,但只有在这个点附近的值才是正确的。

这些简单的指导性的例子并不能探测出这个接口所有的可能性。它仅仅是一个开始。

7.3 参考资料

7.3.1 可用的特殊的.m文件

这一部分将对存储在AMESim系统中的特殊的.m文件进行一下说明,而且对于常用

的.m文件还有些例子。有些文件是从其它地方调入进来的,正常情况下,你不能直接使用它们。你可以直接使用的文件如下所示:

 amebode.m在一个被AMESim生成的.jac文件下被执行,用来绘制波特图。系统

可以是显示的或隐式的。

 ame2data.m如果你使用了AMESim的绘图下拉菜单中的Export values工具来生

成了一个数据文件,你可以在MATLAB中使用这个公用命令来读取这些数据。  ameloadj.m将把一个在AMESim中线性化的结果装载到MATLAB中。具体的例子

参见7.2.5节 将AMESim中的线性化结果导入MATLAB中。

 ameloadt.m将把全部的AMESim结果装载到MATLAB中。具体的例子参见7.2.3

节 将AMESim结果导入MATLAB中。

 data2ame.m将生成一个通过选择AMESim的绘图下拉菜单中的Open来打开的

ASCII码格式的文件。

 fx2ame.m将保存数据为一种合适的格式来进行一维插值,供与图标相关的子模

型使用。

 fxy2ame.m将保存数据为一种合适的格式来进行二维插值,供与图标相关的子模

型使用。

 ss2ame.m将取出被定义为状态空间描述的矩阵A、B、C和D,并把它们转换为

可以被AMESim读取的ASCII格式的文件。具体的说明参见7.3.3节 将MATLAB中的线性系统导入到AMESim中。

 tf2ame.m将取出一个连续的传递函数并把它们转换为可以被AMESim读取的

ASCII格式的文件。具体的说明参见7.3.3节 将MATLAB中的线性系统导入到AMESim中。

 amegetp.m将从一个已命名的AMESim系统中来得到参数。具体使用的例子参见

7.2节 示例,具体的语法说明参见7.3.4节 在MATLAB中运行AMESim仿真。  ameputp.m将为一个已命名的AMESim系统中来设置参数。具体的语法说明参见

7.3.4节 在MATLAB中运行AMESim仿真。

 amela.m将为一个AMESim系统来设置线性化的时刻。具体的语法说明参见7.3.4

节 在MATLAB中运行AMESim仿真。

 amerun.m运行一个AMESim模型,并且可以设置运行参数。具体使用的例子参见

7.2节 示例,具体的语法说明参见7.3.4节 在MATLAB中运行AMESim仿真。 你可以通过使用MATLAB的帮助工具来获得以上这些命令中每一个的语法信息。 7.3.2 将AMESim中随时间变化的瞬时结果导入到MATLAB中

当完成一次AMESim仿真后,你可以将仿真结果导入到MATLAB中来进行进一步的分

析。为了完成这个功能你可以使用以下两个命令:ame2data和ameloadt。第一个命令假定你已经在AMESim绘图窗口下对数据进行了保存,而后者则直接将.result文件导入到MATLAB中。在这种概念下,另一个命令ameplot也许更有用,它可以简化为直接在MATLAB中绘制AMESim数据。 ame2data

这个命令将会把在AMEPlot窗口下使用Export values命令保存的AMESim绘图文件

进行装载。你可以通过三种不同的方式来使用它:

 ame2data(‘filename’)可以将装载在filename中的数据进行绘图,通过复制在

AMESim中或多或少的相同的图形。它不会在MATLAB中生成任何变量。  [XY]=ame2data(‘filename’)将返回一个矩阵XY,大小由数据点的数目来决定,

且由各个点的数值所组成。其中的第一列是x轴的数值,第二列是y轴的数值。  [X,Y]=ame2data(‘filename’)将返回一个由x轴的数值所组成的向量X和一个由y

轴的数值所组成的向量Y。X和Y有相同的长度,由保存在其中的数据点的个数来决定。Y的列数由需要绘制的变量个数来决定。

在调用过程中,如果没有找到filename这个变量,则ame2data命令将要求产生一个filename。 ameloadt

这个命令会把AMESim结果文件中的所有数据都导入到MATLAB中。你可以通过以下

方式来使用它:

[R,S]=ameloadt(‘name’)将把系统name中的所有瞬时结果和变量名取出来,并按字母

顺序进行分类。在文件name.results中的数据将被放在矩阵R中。矩阵的大小为Nvar×Npoints,其中Nvar是存储的变量的数目(正常情况下与.var文件中的时间加1是相同的),

而Npoints是由计算机记录的点的数目。R(1,:)是时间向量。变量的列表(从文件name.var中得到的)将被存储在文本矩阵S中。由于AMESim存储变量的方式,将可能导致产生一些相同的名称。当我们在子模型中使用相同的变量最为变量时将会出现这种典型。必须注意到相应的数据可能被标记反了。如果没有给一个系统进行命名,MATLAB将会显示一个文件选择对话框,选择其中的.results文件。 amegetvar

这个命令是一个从AMESim时间结果排列中选取变量的通用函数。它需要先使用

ameloadt命令来装载结果文件。接下来这个命令可以通过变量的题目来很容易地找到这些变量。当一个系统被重建时,存储在矩阵R和S中的变量的次序也许会改变,通过这个命令可以非常方便的找到需要的变量。题目可以通过包含简单的通配符表达,比如’*[bar]*’,来选择几个变量。返回值为另外一串字符串和向量值。使用举例:

[R,S] = ameloadt('testsystem'); time = amegetvar(R,S,'time [s]');

xp = amegetvar(R,S,'HJ000_1 rod displacement [m]'); plot(time,xp);

对于一个简单的绘图,不需要生成中间变量。下面的例子将绘制一个包括所有变量,且单位为bar的图。

[R,S] = ameloadt('testsystem');

plot(amegetvar(R,S,'time [s]'), amegetvar(R,S,'*[bar]*'))

你还可以通过几步选择来完成一个复杂的选择。下面的命名将首先选中子模型’HJ 000_1’中的所有变量,然后再选择压力。压力值被用来绘图,题目用来生成标签。

[R,S] = ameloadt('testsystem');

[R_HJ000, S_HJ000]=amegetvar(R,S,’HJ000_1*’);

[pressures, presslabel]=amegetvar(R_HJ000, S_HJ000,'*[bar]*') plot(amegetvar(R,S,'time [s]'), pressures); xlabel(‘time’); ylabel(presslabel);

7.3.3 将MATLAB中的线性系统导入到AMESim中

在MATLAB中以传递函数或状态空间方程形式存在的线性模型可以非常方便地导入

到AMESim中进行使用。下面是一个十分通用的描述整个过程的例子:

 在AMESim中创建一个物理系统的非线性模型。  在某些操作点处对非线性模型进行线性化。  将线性化后的模型导入到MATLAB中。

 在MATLAB中使用线性化后的AMESim模型来设计一个线性控制器  导出这个线性控制器

 将这个线性控制器导入到AMESim中,然后在整个的非线性模型上进行测试。 在MATLAB中你可以使用函数ss2ame或者tf2ame来导出你的控制器。这两个函数可以用来将任何一个线性系统从MATLAB里导入到AMESim中。这个系统可以是:

 单输入、单输出状态空间或传递函数控制器  多输入、多输出状态空间控制器  特殊的滤波器

 任何一个Simulink系统产生的线性模型 在所有的情况下,都将产生一个ASCII文件。 传递函数的情况下

在MATLAB中,如果你有一个如下形式的传递函数:

num(s) den(s)

你必须首先定义num和den。

num=[0 0 3947.84] den=[1 125.664 3947.84]

然后键入:

tf2ame(num,den,’filename1.ssp’)

状态空间的情况下

如果你有一个与如下形式相似的状态空间系统:

xAxBu yCxDu

其中,A、B、C和D已经在MATLAB中进行了定义,然后键入:

ss2ame(A,B,C,D,’filename2.ssp’)

在这两种情况下,生成的.ssp文件是AMESim中优选的文件扩展名。

将.ssp和.jac文件导入到AMESim中

图7.9

将这些文件导入到AMESim中:

1、在草图模式下,解除锁定,点击Interface下拉菜单,如图7.9所示,并选择其中

的Import linear model。

这将产生一个如图7.10所示的对话框:

图7.10

当你选中一个合适的文件后,将会产生一个包含合适的输入输出端口号的新的对话

框。如图7.11所示的对话框,包含一个单输入-单输出传递函数块,它们来自我们前面所定义的两个向量num和den。

图7.11

图7.12

图7.12所示为一个多输入-多输出状态空间系统块。

注:

 有一个特殊的动态模块,对传递函数来说是DYNTRANSF,而对状态空间系统来说

是DYNSTATESPACE。一旦MATLAB中的.ssp文件导入到AMESim中,将会自动使用这些模块。

 你被禁止调整输入和输出的号码,因为它们的值在从MATLAB中导入进来时就已

经保存在一个指定的文件中了。

 端口通过符号“>”来表示,并且每一个端口都有一个无单位的单独的外部变量与

它相联系。

 你可以通过使用文本来为每个端口进行标注,而且还可以用最多三行文字来给端口

加上一个简短而概括的题目。

 各个方块图输出的次序与它们在MATLAB中的副本相比是相反的,这是因为

AMESim中是从左边开始对端口进行编号,且以逆时针方向来继续。 2、点击OK,并把方块图添加到系统中。

图7.13所示就是这样一个例子。

图7.13

AMESim中的.jac文件可以通过菜单Interface/Import linear model来导入到任何一个

AMESim模型中。在这种情况下,你必须通过文件浏览器来选中扩展名为.jac的文件:

图7.14

参数模式下特殊的子模型

图7.15

图7.16

在参数模式下,状态空间或传递函数模块的参数都可以被检查和调整。(参见图7.15

和图7.16)状态空间模块的参数是矩阵A、B、C和D中的元素,而传递函数模块中的参数是分子和分母传递函数的系数。任何一个状态变量都被认为是内部变量,且它们的初始值应为零。

运行模式下特殊的子模型

图7.17

图7.18

在运行阶段,所有外部变量的题目将会从如图7.17和7.18所示的图标建立时就被输入到端口中文本字符串中取出来。但是,如果在图标建立时没有输入题目,那么它们的题目将是input1、input2和output1、output2… 7.3.4在MATLAB中运行AMESim仿真

当在AMESim中生成一个仿真模型后,将会存在一个可执行程序来完成数据的读取和

结果的保存等。通过执行相应的程序,我们可以调整输入并且可以对输出进行分析,例如灵敏度分析等。前面几章我们介绍了几个利用AMESim MATLAB工具箱来分析结果的命令。同样,在AMESim工具箱中也有很多命令可以用来检查和设置运行仿真的参数。这一节我们将对其进行介绍。 amegetcuspar

这个命令用来从用户化的对象(子模型或者超级元件)中得到相关参数的信息。 通过命令amegetcuspar(‘SYS’,’SUBMODEL’,INSTANCE,’NAME’) 用来得到系统SYS子模型SUBMODEL中的参数NAME的值。其中的NAME可以是参数名称或者题目。如果INSTANCE的值为-1,则意味着所有的标号。这个函数还可以返回找到的参数的序号、子模型、标号、参数题目、值以及参数名称等如下所示:

[out_found_number,out_submodel,out_instance,out_par_title,out_value,out_unit, out_parname]=amegetcuspar(sysname)。 所有的返回值都是单元排列的。

[num,sub,inst,titles,values,units,name] = amegetcuspar(‘circuit1’, ’SUBSYSTEM’,1,’pipediam’);

amegetcuspar(‘circuit1’,’SUBSYSTEM’,1,’pipe diameter for all pipes’) amegetcuspar(‘circuit1’,’SUBSYSTEM’,-1,’pipe diameter for all pipes’) amegetcuspar(‘circuit1’,’*’,-1,’pipediam’) amegetcuspar(‘circuit1’,’*’)

amegetcuspar(‘circuit1’,’pipediam_SUBSYSTEM_1’) amegetgpar

通过命令amegetgpar(‘SYS’,’NAME’)用来得到系统SYS中的全局参数NAME的

值。其中的NAME可以是参数名称或者题目。这个函数还可以返回找到的参数的序号、

子模型、标号、参数题目、值以及参数名称等如下所示:

[out_found_number,out_par_title,out_value,out_parname]=amegetgpar(sysname); 这个命令将返回所有与单元排列相关的参数。如果没有输出限定,它将显示出所有相关的参数。

[num,titles,values,names] = amegetgpar(‘circuit1’,’pipediam’); amegetgpar(‘circuit1’) amegetp

这个命令用来检查一个系统中的参数。它可以通过以下几种方式来使用:  [par,val] = amegetp(‘SYS’)用来得到所有的参数,并将它们的题目存到par向量

中,将它们的值存到val向量中。如果不加任何限定,它将显示出所有参数的题目和值。

 [par,val] = amegetp(‘SYS’,’parameter title’)用来得到由parameter title来决定的一

个或几个参数。

 amegetp(‘MSD2’,’MAS001 instance 1 mass [Kg]’)用来得到MAS001-1中的质量。  amegetp(‘MSD2’,’MAS001-1 mass [Kg]’)用来得到跟前一个相同的结果。  amegetp(‘MSD2’,’MAS*’)用来得到全部的MAS*子模型的参数。  amegetp(‘MSD2’,’*’,1)用来得到所有的标号为1的参数。

 amegetp(‘MSD2’,’spring’)用来得到包含字符串spring的所有参数。  amegetp(‘MSD2’,’[m]*’)用来得到所有单位为m的参数。 ameputcuspar

这个命令用来设置在模板中的用户化的对象(子模型或者超级元件)的参数。 通过命令ameputcuspar(‘SYS’,’SUBMODEL’,INSTANCE,’NAME’,VAL)可以设置系统SYS的子模型SUBMODEL中的参数NAME的值(VAL)。其中的NAME可以是参数名称或者题目。如果INSTANCE的值为-1,则意味着所有的标号。这个函数还可以返回设置参数的序号。

ameputcuspar(‘circuit1’,’SUBSYSTEM’,1,’pipediam’,12)

ameputcuspar(‘circuit1’,’SUBSYSTEM’,1,’pipe diameter for all pipes’,12) ameputcuspar(‘circuit1’,’SUBSYSTEM’,-1,’pipe diameter for all pipes’,12)

ameputcuspar(‘circuit1’,’*’,-1,’pipediam’,12)

ameputgpar

通过命令ameputgpar(‘SYS’,’NAME’,VAL)可以设置系统SYS中的全局参数NAME的值(VAL)。其中的NAME可以是全局参数名称或者题目。这个函数还可以返回设置参数的序号。

ameputgpar(‘circuit1’,’pipediam’,12)

ameputgpar(‘circuit1’,’pipe diameter for all pipes’,12) ameputp

这个命令用来设置系统参数。它的语法跟amegetp的非常相似,不同点就是它不能

同时改变一个以上的参数。下面是几个例子,用来设置模型MAS001-1中的质量块,质量为10Kg:

 ameputp(‘MSD’,’MAS001 instance 1 total mass [Kg]’,10)  aemputp(‘MSD’,’MAS001-1 mass [Kg]’,10)  ameputp(‘MSD’,’MAS001-1 mass *’,10) amela

这个命令用于线性分析工具中来设置线性化时间。  amela(‘MSD2’)用来显示系统MSD2的线性化时间  amela(‘MSD2’,0.1)用来设置线性化时间为0.1

 amela(‘MSD2’,[0.1 0.5])用来设置线性化时间为0.1到0.5  amela(‘MSD2’,[])用来删除线性化时间 amerun

这个命令可以用来运行一个AMESim模型,而且还可以装载使用ameloadt命令后的

结果。

 amerun(‘MSD2’)用来运行仿真模型MSD2

 [R,S]=amerun(‘MSD2’)用来运行一次仿真并把结果装载到R中,变量名装载到S

中。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- howto1234.net 版权所有

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务