欢迎光临散文网 会员登陆 & 注册

模型的层次设计

2023-08-22 14:59 作者:Hyowinner校长  | 我要投稿

使用Simulink/Stateflow进行控制策略建模相信对于校长星粉们而言都是小菜一碟,早已掌握了的基本技能。但是会建模和建模建的好,是两回事;把建模的工作完成跟建模的艺术更是两回事。本文校长将基于MAAB的建模层次规范讲述建模时应该如何架构好层次,并在层次内做好设计细节工作,让工程师的作品层次更上一个台阶。


Simulink的模型可以分为四个层次:

  1. Top Layer顶层

  2. Trigger Layer任务触发层(根据该层是否存在决定整体架构是Type A还是Type B)

  3. Structure Layer结构层

  4. Data flow Layer数据流层



  • Top Layer

顶层模型一般分为输入,控制器,输出三个部分,输入输出是控制器对外界的数据交互端口,控制器是一个原子子系统,仅对外暴露数据接口。Trigger, Enable等模块是不应该出现在顶层模型中的。一般顶层模型示意图如下:



  • Triggered Layer

触发层则主要是基于Trigger或者Function-Call信号进行设计,目的是为了将不同定时周期执行的任务,或者由外部事件调用的任务进行分离,使用不同的任务触发信号分别进行管理。这样可以表现出系统的多任务调度,也使得任务之间保持高度的独立性。触发信号可以由状态机的Chart的Event输出信号形成。其一般示意图如下:



触发层中,彼此独立的任务由Triggered子系统或者Function-Call子系统构成,那么可能存在某个采样时刻多个任务都需要执行的情况,这时可以设置子系统的优先度Priority,使得同一个采样时刻下需要执行的多个任务具有明确的先后顺序。另外,还需要注意触发信号源的名字其关键字应该被对应的子系统的名字所包含。如Task4ms的触发信号源,其调用的Triggered Subsystem的名字中包含Task4ms的字样。


  • Structural Layer

结构层的模型需要由同类型的模块构成。所谓同类型,是指该层次下所有的模块要么全部都是Subsystem,要么全部都是基本模块构成的。当然,类似Bus Creator, Bus Selector, Mux, Inport, Outport,Merge,From,Goto之类的通用模块是被允许使用的,它们可以在任意模型层次中出现。而Enable,Trigger,Function-Call模块除了Top Layer以外的层次也是都可以被安排。当前层次下全部都是Subsystem模块的就是结构层,全是基础模块构成的就是Data flow Layer数据流层,数据流层就是最底层。


不使用触发层的架构下,结构层的模型是不带有Enable,Trigger,Function-Call模块的,为了明确的表示采样时间,往往需要在Inport和Subsystem的模块属性中显示出tsample采样时间。

当模型的架构中带有触发层时,结构层就会带有Trigger,Enable,Funciton-call模块。首先,这些触发源模块必须放置在当前层次的最高层,可以直接将触发源的调度周期标注在触发模块上,因为此时的结构层是一个原子子系统,所有模块都采用相同的采样时间,由触发源信号决定。此种类型的结构层示意图如下:

结构层可以嵌套多个层次,并非仅存在一层。子系统内部可以嵌套子系统,子系统的划分是根据软件的功能需求聚集为子系统,而不是仅仅因为模型布局方便就将其促成子系统。这一点校长的星粉们一定要铭记在心。


  • Data flow Layer

数据流层,顾名思义,就是根据基本计算模块让数据流动起来的模型层。此层次为模型的最底层,层次中的模块都是用Commonly Used Block中的模块搭建而成,形成最常被复用的软件组件,如滤波器,PID控制器,做简单模式切换的Chart模块等。示意图如:


数据流层中最常被使用到的模块包括Inport,Outport,Lookup Table, Add, Product, Gain, Switch, Logic Operator,Relational Operator,multiport switch,Saturation,Bus Creator,Bus Selector以及放置到库中的Atomic Subsystem等。B站小伙伴们注意保持小而美的软件组件复用。


模型的层次设计的评论 (共 条)

分享到微博请遵守国家法律