Saber MAST 要点归纳.docx
- 文档编号:5007734
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:13
- 大小:192.83KB
Saber MAST 要点归纳.docx
《Saber MAST 要点归纳.docx》由会员分享,可在线阅读,更多相关《Saber MAST 要点归纳.docx(13页珍藏版)》请在冰豆网上搜索。
SaberMAST要点归纳
1.SaberMAST模型分类
MAST可以描述以下三类系统,每一类系统的模型写法各不相同。
(1)连续模拟系统(continuousanalogsystems)
在仿真连续模拟系统时仿真器按照仿真时刻反复求解一系列代表仿真模型的微分方程。
此类系统的每一个节点(node)都包括两个系统变量(systemvariable),一个across量和一个through量,通常每个量都与一个单位(unit)关联,在cosmosscope中显示波形时可以显示相应单位。
以电气模型为例,每一个节点都包括一个across量(电压)和一个though量(电流),单位分别是V和A。
连续模拟系统还包括液压系统和磁路系统。
(2)事件驱动系统(eventdrivensystems)
此类系统的典型代表是数字逻辑系统,仿真器只有在事件发生时(如输入量发生变化)才计算并更新各个输出。
此类系统的节点只包含一个无单位量。
(3)数据流系统(dataflowsystems)
此类模型的典型代表是控制系统,和连续模拟系统类似,可以按照时域或频域仿真,但是严格区分输入量和输出量,节点只包含一个无单位量。
2.MAST基本概念
2.1MASTtemplate基本形式
MASTtemplate是用MAST语言描述一个仿真模型的基本单位。
MASTtemplate是按照特定的语法编写的纯文本文件,后缀是.sin。
MASTtemplate的基本格式包括以下几个部分:
(1)templateheader–声明template的名称(reference),管脚(pin)和参数(argument)
基本形式如下:
templateTEMPLATE_NAMEPIN1[PIN2PIN3…]=ARG1,[ARG2,ARG3…]
PIN_DECLARATION
ARG_DECLARATION
容易看出templateheader由关键字template开始,后面紧跟template的名称,再接下来是管脚(pin)的名称,然后是一个等号(=),接下来是参数名、
值得注意的是等号左边的各个名称不需要用逗号(,)分隔,而等号右边必须用逗号分隔各个参数。
(2)templateheaderdeclaration–对pin和argument类型的进行声明
MAST的所有变量在使用前都必须声明其类型。
第一行的模板参数声明以后是管脚的类型声明和参数类型声明。
形式如下:
PIN_TYPEPIN_NAME
ARG_TYPEARG_NAME
管脚(pin)的类型根据template的类型可以定义为electrical(电气模型)、input/output(控制系统模型)和state(数字系统模型)等。
参数(argument)类型通常为无单位简单量number。
例2-1理想电流源
templateisourcepm=is
electricalp,m
numberis
{
equations{
i(p->m)+=is
}
}
对于参数较多较复杂的模型可以将参数分类,再将同一类的参数定义为一个结构(struct)
(3)templatebody–对模型的行为进行描述
结构化(structured)的模型包含本地变量声明(localvariabledeclaration)和若干个段(section),各个段分别完成不同的任务。
最重要的段是equationssection,template在此段中对系统变量(systemvariable)赋值。
对于电气模型,需要赋值变量是节点电流;对于控制系统,是输出量。
电气模型见例2-1。
在连续模拟系统中equationssection的任务在于给出用于求解通过模型管脚节点的through量的表达式,对于电气模型而言,即给出节点电流的表达式。
仿真器利用给出的节点电流的表达式代入每个节点的KCL方程,从而最终求出节点电压,节点电压即系统变量。
对于电压源和电感则情况有所区别,此类模型的系统变量是电流而不是电压。
例2-1中i(p->m)表示从节点p到节点m的电流。
由于电路网络中可能有多个模型并联在相同节点,每个模型对节点电流的作用应该是使其增加相应值,所以对其赋值应该用+=。
例2-2控制系统的加法器
templateadderin1in2out=k
inputin1in2
outputout
numberk
{
equations{
out=(in1+in2)*k
}
}
对于事件驱动型的数字系统,templatebody中描述输入输出关系的段不是equationssection,而是when语句(whenstatement)。
例2-3逻辑与门
templateandin1in2out=td
statelogic_4in1in2out
numbertd=0
{
statelogic_4out_state
when(event_on(in1)|event_on(in2)){
if((in1==l4_1)&(in2==l4_1)){
out_state=l4_1
}
elseout_state=l4_0
if(driven(out)~=out_state){
schedule_event(time+td,out,out_state)
}
}
}
其中template的管脚类型为state,数据类型是logic_4。
whenstatement的语法为
when(CONDITION){
…….
}
其中CONDITION通常用带有特定参数的event_on()函数特定信号发生变化的事件,即当作为event_on()的参数的信号发生变化时CONDITION为真,执行when后面的语句。
对数字管脚信号的幅值必须使用schedule_event()语句,这样才能将事件加入仿真器的事件队列,从而是输出信号改变以后触发下一级的模块。
schedule_event的参数如下:
schedule_event(TIME,STATE_NAME,VALUE)
表示在指定时刻令指定名称的state变量变为给定的值。
time是仿真器提供的系统变量,表示当前仿真时刻。
在例2-3中参数td反映输出信号发生变化所需的延迟时间。
中间变量out_state用于与当前输出管脚状态比较,从而在输入发生变化后仅当输出也发生改变才触发事件。
对本地局部变量的复制赋值直接用等号(=).。
2.2MASTtemplate变量声明
在一个template中除了作为模型节点的pin变量和设置参数argument变量以外,通常还必须在templatebody中声明若干本地变量。
通常可以分为无单位局部变量、var/ref变量以及val变量。
(1)无单位局部变量–不与单位关联,不具有实际物理意义,仅在模型内部有效
无单位量通常用作输入参数的中间变量,只可在parametersection中赋值。
通常声明为简单标量(scalar)类型number。
除了number、enum等标量类型,局部变量还可以声明为复合(composite)类型,如结构(struct)、数组(array)等。
例2-4可变电阻
templatevar_rpm=r_max,ratio
electricalp,m
numberr_max,ratio
{
numberr
parameters{
if(ratio>1.0|ratio<=0){
error(“%,ratioisnotofthecorrectvalue.”,instance())
}
else
r=r_max*ratio;
}
equations{
i(p->m)=(v(p)-v(m))/r
}
}
(2)var和ref变量–在template中声明的系统变量,在系统范围内有效
var变量通常作为equationsection中的系统中间变量,用于作为through量(例如电流)不能直接由关系式表达的情况。
var变量仅能在eqationssection中赋值。
考虑理想电压源的情况,流过电压源的电流由外电路决定,而与模型内部无关,电流无法用内部表达式给出,所以必须引入var变量。
var变量的声明格式如下:
varUNITVAR_NAME
例2-5理想电压源
templatevsourcepm=vs
electricalp,m
numbervs
{
variivs
equations{
i(p->m)+=ivs
ivs:
v(p)-v(m)=vs
}
}
本例中ivs是var变量,单位是i,表示从节点p流向节点m的电流。
ivs:
v(p)-v(m)=vs表示ivs的值由随后的关系式确定。
仅从此式中无法确定ivs,所以仿真器在保证此式成立的情况下根据总体电路来确定ivs
例2-6线性电感
templateinductorpm=ind
electricalp,m
numberind
{
variil
equations{
i(p->m)+=il
il:
v(p)-v(m)=d_by_dt(ind*il)
}
}
本例中il表示电感电流,d_by_dt表示对时间求导数。
由于MAST的表达式不支持积分运算,因此电感电流与电压的关系必须表示为电压是电流的对时间的导数,所以无法显式给出电流的表达式,故将电流声明为var变量。
参看例2-1理想电流源。
对于数字系统,与var变量类似的是state变量。
ref变量也是系统变量,在系统范围有效,但是在一个template内部声明的ref变量表示在另一个template中声明的var变量。
例2-7电流控制电压源
templatecvtcipm=k
refici
electricalp,m
numberk
{
varii
equations{
i(p->m)+=i
i:
v(p)-v(m)+=k*ci
}
}
(3)val变量–本地有单位变量,仅在模型内部有效
val变量通常用作计算模型内部参数的中间变量,仅可在valuessection赋值。
运行时仿真器将valuesection和equationsection合并。
同时val变量在仿真结束后可以用exact命令提取到cosmosscope中观察。
例2-8线性电阻
templaterespm=r
electricalp,m
numberp
{
valppower
valii
valvv
values{
v=v(p,m)
i=v/r
p=v*i
}
equations{
i(p->m)+=i
}
}
本例中i、v和p都可以用exact命令提取并观察。
2.3MAST与C语言比较
MAST大部分语法形式与C语言相近,但也有很多区别如下:
(1)每一行代码用回车换行,而不用分号(;)。
当一行代码未写完就需要换行时必须用反斜线“\”
(2)逻辑和关系运算符分别是相等=、不等~=、与&、或|,其他和C语言类似
(3)注释语句以#开始,而不是/**/或者//
(4)每一个section后面的左花括号必须紧跟section的名称,不能出现换行,否则会报错。
如
value{
…..
}
正确而
value
{
….
}
会出错。
(5)变量声明比较复杂,通常需要声明数据类型和变量类型。
数据类型不同,简单类型包括integer、number、string和enum,复合类型包括struct、union和array。
3.MAST建立模型实例
3.1控制系统的二阶环节
根据二阶环节的定义,令输入量为u(t),输出量为y(t),则s域的输入输出关系为
Y(s)/U(s)=K/((s+p1)*(s+p2))
其中K是开环增益,p1和p2是两个极点。
将等式展开可得
s^2*Y(s)+(p1+p2)*s*Y(s)+p1*p2*Y(s)=K*U(s)
改写为时域表达式可得
d(dy/dt)/dt+a1*dy/dt+a0*y=K*u
其中a0=p1*p2,a1=p1+p2.
由于MAST不允许表达式中出现两个微分项相乘,所以必须展开至这种最简形式。
此外saber并不支持在同一个表达式中出现二次和二次以上的微分,因此必须声明一个中间变量表示一次微分,从而将原来的二次微分表示为此中间变量的一次微分。
根据这些分析,可以写出二阶环节的template如下所示
例3-1控制系统的二阶环节
templatetrans_2orderinout=a0,a1,k
inputnuin
outputnuout
numbera1,a2,k
{
varnuout_d1
equations{
out_d1:
out_d1=d_by_dt(out)
out:
d_by_dt(out_d1)+a1*out_d1+a0*out=k*in
}
}
写好此template以后,将其保存为trans_2order.sin。
在saber中选择File-New-Symbol,再选择Tools-Drawingtools,画好需要的模型符号。
再点右键Create-inputport和outputport放置输入端口和输出端口,并命名为in和out。
如图所示
再设置模型的属性(properties),添加一个属性primitive,值为trans_2order。
再次打开properties时可以看到saber已经自动添加了template中声明的输入参数,此处将所有输入参数的值设置为*req*。
.最后把模型保存为trans_2order.ai_sym。
为了验证模型的正确性,新建一个原理图,右键菜单选择GetPart–BySymbolName,浏览并添加trans_2order.ai_sym,设置a0=100,a1=8,k=100。
从参数可知这是一个欠阻尼二阶环节。
再添加一个阶跃信号,结果如图所示。
3.2离散有效值转换模块
对正弦信号等间隔采样,令每个信号周期内的采样点数为N,则信号的有效值可以根据均方根值的定义按照以下公式计算:
因此只需获得输入信号在一个周期内的平方和,就可以根据上式计算出信号的均方根值。
计算输入信号在多个时间点的平方和是一个累积的过程,在每个采样时刻必须已知上一个时刻的值,因此数据的平方和计算结果必须用MAST的系统变量保存。
在数字离散系统中,系统变量是state。
根据这些分析,写出的template如下:
例3-2离散有效值转换模块
templatez_rmszinsmpzout=freq,smp_freq
statenuzin,smp,zout#smpisthesamplesignalinput
numberfreq,smp_freq#freqisthefrequencyofsignalandsmp_freqisthatofsamplesignal
{
#代码还是等到paper都完成了再放上来比较好....................
}
templatebody内的各个部分的任务如下:
parameter段中完成输入参数的转换,即根据输入的信号和采样频率计算得到采样点数和信号周期;value段中根据均方根值定义计算输出结果;when语句完成对输出端赋值,并对延迟信号赋值。
由于保存平方和的state变量只能在when段中赋值,因此声明了一个val型中间变量sum_zin2,用来在保存value段中计算出的当前仿真时刻的平方和。
由于val变量的值不能保存到下一个仿真时刻,因此在when段中必须把sum_zin2的值保存到last_sum_zin2,才能用于下一个仿真时刻。
在when段中,由于对模型内部声明的state变量赋值无须触发事件,所以直接用等号;第一个schedule_event用于对输出信号赋值;第二个schedule_event用于在一个信号周期的延迟以后再对zin2_delay赋值。
每次计算信号平方和时,利用上一个采样时刻的信号平方和加上当前时刻输入信号的平方,再减去一个信号周期以前的输入信号的平方,从而只保留了一个信号周期内的平方和。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Saber MAST 要点归纳 要点 归纳