1. 范围
本部分规定了基于模型开发的MCU应用层建模,从Simulink、Stateflow两方面进行约束,分别从信号、模型结构、端口等方面展开。
本部分适用于基于模型开发的MCU应用层建模要求
2. Simulink规范
2.1 模型外观
2.1.1 外观的统一设置
View 菜单 | 设置 |
Model Browser Options>Model Browser | checked |
Status Bar | checked |
Toolbar | checked |
Zoom factor | Normal (100%) |
Format 菜单 | 设置 |
Screen color | white |
Background Color | white |
Foreground Color | black |
Block Display Options>Execution Context Indicator | unchecked |
Library Link Display | none |
Model Block I/O Mismatch | unchecked |
Model Block Version | unchecked |
Sample Time Display | none |
Sorted Order | unchecked |
Format >Port/Signal Displays 菜单 | 设置 |
Port Data Types | unchecked |
Signal Dimensions | unchecked |
Storage Class | unchecked |
Test point/Logging Indicators | checked |
Viewer Indicators | checked |
Wide Non-scalar Lines | checked |
以上设置没有执行的顺序要求。另外,所有文字部分(包括各种名称和注释)都需要有相同的字体和字号,即Simulink/Stateflow默认的字体和字号(Arial 10pt)。
2.1.2 端口放置
- 输入端口应该放置在图面的左侧,如果为了避免信号线的交叉,可以将输入端口向里面移动。
- 输出端口应该放置在图面的右侧,如果为了避免信号线的交叉,可以将输出端口向里面移动。
例子:
正确:
错误:
注:在错误例子中,
-
-
-
- 输入端口2应该往图面中间移动,以避免信号线的交叉。
- 输出端口1应该往图面右侧移动,并与其它输出端口对齐。
-
-
2.1.3 端口图标的设置
在端口的Block Parameters对话框中的Icon display选项中,应选择Port number选项。
例子:
正确:
错误:
2.1.4 模块大小的调整
模型中的所有模块都应该调整好大小,使得模块的图标、文字和参数显示完整。
例子:
正确:
错误:
2.1.5 模块名称的位置
模型中所有模块的名称都要放置在模块的正下方。
例子:
正确:
错误:
2.1.6 模块名称的显示
如果模型的外观能够表达出模块的功能,那么模块的名称应该被隐藏。
例子:
如果模型的外观不能够表达出模块的功能,或需要对模块做一些描述,那么模块的名称应该被显示。
例子:
2.1.7 触发、条件和使能子系统
能够将一个子系统定义为条件、触发、使能等子系统的模块,应该被放置在子系统的顶端中间位置。
这样的模块有:
- Enable
- For Iterator
- While Iterator
- Action Port
- Switch Case Action
- Trigger
例子:
正确:
错误:
2.1.8 信号线的绘制
绘制信号线时应遵循以下几条原则:
- 信号线尽量不交叉;
- 信号线应该拐直角;
- 信号线不能重叠;
- 信号线不能穿过任何模块;
- 在一个分支点上不能引出两条以上的信号线。
例子:
正确:
错误:
2.1.9 信号流方向
- 除了反馈信号,信号流方向应该从左至右;
- 需要顺序执行的模块应该从左至右放置;
- 需要并行执行的模块应该从上至下放置。
例子:
2.1.10 应用Goto和From模块时的信号线绘制
应用Goto和From模块时,信号线的绘制应遵循如下几条原则:
- 在有信号交互的两个子系统间,至少要有一条信号线连接两个子系统;
- 如果子系统同时有前馈信号和反馈信号,那么在不同方向的回馈信号中至少各有一个信号要用信号线连接。
- 如果应用上两条规则是涉及到信号线交叉,则可以允许交叉。
例子:
正确:
错误:
2.1.11 传递触发或使能信号的端口的命名
传递触发或使能信号的端口,其命名应与其传递的触发或使能信号相符。
例子:
2.1.12 子系统的放置方向
子系统的放置方向不能够翻转。
例子:
正确:
错误:
2.2 信号
给信号合适地命名会使模型易于理解,也会在仿真和代码生成时更容易控制变量名。信号仅在其建立时命名一次。当这个信号在模型中传递时,在它所出现的位置直接继承原来的名字即可。
2.2.1 信号名的显示
信号从某些模块引出时,信号名必须显示。这些模块是:
- 输入端口;
- From模块;
- 子系统和StateFlow;
- Bus Selector模块;
- Demux模块;
- Selector模块;
- Data Store Read模块;
- Constant模块。
信号引向某些模块时,信号名必须显示。这些模块是:
- 输出端口;
- Goto模块;
- Data Store Write模块;
- Bus Creator模块;
- Mux模块;
- 子系统和StateFlow。
注:如果在○标出的模块的图标中已经显示了信号名,那么信号从这些模块引出时就不必再显示信号名了,除非信号被引向需要显示信号名的那些模块去。
例子:
正确:
错误:
2.2.2 信号名的继承和创建
在能够继承信号名时必须继承。在没有信号名可继承或继承信号名后不能表达信号的正确含义时,要重新创建信号名。
必须重新创建信号名的情况:
- 在模型的最顶层,由输入端口引入的信号;
- 信号穿过某一模块后改变了其意义或形态时(如Gain,Bus Selector,Switch等);
- 在引用Library时,从Library中的输入端口引出的信号需要重新创建信号名,以符合Library的重用要求;
- 信号从引用的Library引出时。
必须继承信号名的情况:
- 在子系统(非Library)中由输入端口引入的信号;
- 信号穿过某一模块后没改变其意义或形态时;
- 信号从某一子系统或StateFlow(非Library)中引出时。
例子:
2.2.3 信号名的位置
- 信号名的位置应该在信号线下面,靠近信号线的引出模块。
- 信号名必须清晰地显示出来,不能与任何模块、信号名或信号线重叠。
2.2.4 未连接的信号线
模型中不能出现未连接或错误的信号线,有如下几种情况:
- 不能出现未链接的子系统或模块的输入;
- 不能出现未链接的子系统或模块的输出;
- 不能出现未连接的信号线。
2.3 基础模块应用
2.3.1 模块应用中的逻辑运算和算数运算
在模块应用中要注意其需要的数据类型。要做到:
- 不能给需要逻辑类型数据的模块输入算数类型数据;
- 不能给需要算数类型数据的模块输入逻辑类型数据。
错误例子:
2.3.2 禁止应用的Simulink标准模块
- 控制策略的模型中必须用离散运算的模块。
- 只能用在Simulink Library > Model-Wide Utilities > Block Support Table中规定的可以用于代码生成的模块,不要用其中规定的不建议用于代码生成的模块。
- 除了以上所述的模块,还有以下的模块也不能用:
不能用的信号源模块: | |
Sine Wave | |
Pulse Generator | |
Random Number | |
Uniform Random Number | |
Band-Limited White Noise | |
以下模块也不要用: | |
Slider Gain | |
Manual Switch | |
Complex to Magnitude-Angle | |
Magnitude-Angle to Complex | |
Complex to Real-Imag | |
Real-Imag to Complex | |
Polynomial | |
MATLAB Fcn(1) | |
Goto Tag Visibility | |
Probe | |
To File | |
To Workspace |
|
Stop Simulation |
|
2.3.3 Goto和From模块的作用范围
对于数据信号,Goto和From模块的作用范围只能是Local。
对于控制信号,Goto和From模块的作用范围可以是Global。控制信号只能出自:
- Function-call generators;
- If and Case blocks;
- Function call outputs from MATLAB and Stateflow blocks。
例子:
2.3.4 Switch模块的应用
Switch模块的Input2 必须是布尔信号。
Switch模块的参数“Criteria for passing first input”必须选择“u2~=0”。
例子:
正确:
错误:
2.3.5 比较运算模块的运用
在用比较运算模块比较一个信号与一个定值时,定值要放在比较运算模块的第二个输入端口。
例子:
正确:
错误:
2.3.6 加法运算模块的运用
加法运算模块尽量用方形外观,且所有输入信号都应清晰,不要有相互重叠。
例子:
正确:
错误:
加法运算模块仅在用作反馈时可以用圆形外观,并且输入信号不能多于3个,输出信号必须在圆形的3点钟位置,输入信号必须在圆形的0点、9点和6点位置。
例子:
正确:
错误:
2.3.7 逻辑运算模块的运用
在做混合的逻辑运算时,为不致给设计者和阅读者造成逻辑混乱,应尽量按照如下的方式处理:
2.3.8 Lookup Table的应用
在使用Lookup Table时应注意,其Lookup Method选项必须选择“Interpolation-Use End Values”。
例子:
2.4 模块参数
2.4.1 向量索引
在所有需要用到向量索引的模块中,均应选择“Zero-Baesd”选项。
例子:
2.4.2 用Constant模块实现变化的参数
用Constant模块实现变化的参数或做标定量时,为正确实现参数的变化,参数在Constant模块中的表达必须做到:无运算、无数据类型转换和无行列选择。
例子:
正确:
错误:
2.4.3 带参数的模块
当用到需要参数(标定量)的模块时,尽可能用能够将参数(标定量)直接展示出来的相应模块,并将参数(标定量)直接展示出来。
例子:
正确:
错误:
3. Stateflow规范
3.1.1 Stateflow端口命名
Stateflow输入和输出端口的名字必须与相关信号的名字保持一致。除非Stateflow是以Library等复用的形式出现。
3.1.2 Stateflow中状态迁移线的绘制
在Stateflow中绘制状态迁移线时要做到:
- 尽可能不要有交叉;
- 不要有重叠;
- 不要穿过任何状态框、连接点和文字(除非状态迁移至一个内状态);
- 状态迁移条件须紧邻状态迁移线。
需要完整文档点击如下链接下载:
百度MBD开发建模规范资源-CSDN文库