您的当前位置:首页正文

Simulink S teflow建模规范 HIT AEEC

来源:个人技术集锦
1目的

(1) 方便理解模型算法

z 模型可读性强 z 接口清晰 z 详细的记录 (2) 提高建模效率

z 模型维护容易 z 模型修改方便 z 模型组件重用性强 z 模型之间调用方便 z 模型构架清晰 (3) 提高仿真效率

z 仿真速度快

z 方便模型分析、监控 (4) 方便模型测试

z 可追溯性强 z 模型测试方便 (5) 方便生成代码

z 模型生成嵌入式代码方便 z 软件修改方便

z 生成的代码具有较强的鲁棒性

2适用范围

本建模规范适用于电动车整车控制策略开发阶段,快速原型模型的开

发和维护。

预期读者对象为:熟悉整车结构,具有较强的Simulink/Stateflow建模能力,并熟悉整车控制思想的相关专业人员。 3术语和定义

(无)。 4 控制策略建模规范 4.1命名规则 4.1.1文件名命名

文件名命名可用字符:a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _。 4.1.2路径名命名

路径名命名可用字符:a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _。 4.1.3子系统命名

子系统命名可用字符:a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _。

不可用数字开头,不可用空格。 4.1.4输入、输出信号命名

输入、输出信号命名可用字符:a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X

Y Z 0 1 2 3 4 5 6 7 8 9 _。

不可用数字开头,不可用空格。 4.1.5信号线命名

信号线命名可用字符:a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _。

不可用数字开头,不可用空格,不可以带控制字符。 4.1.6模块命名

模块命名可用字符:a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 _。

不可用数字开头,不可用空格。 4.1.7注释文字

注释必须写在注释区域,注释文字不影响仿真和代码生成。 4.2模型结构

模型层次可以分为:顶层、触发层、结构层及数据流层。触发层是可选的,图(1)中是模型层次结构图,其中TypeA是有触发层的运算,TypeB是没有触发层的运算。

图(1)模型层次结构图

4.2.1顶层

顶层是体现模型总体外貌特征最外层,其中有模型整体输入、输出和逻辑控制部分,如图(2)所示。

图(2)顶层结构图

4.2.2触发层

触发层应该标注清楚触发的优先级。

图(3)触发层结构图

4.2.3结构层

结构层主要显示模型运算逻辑框架,结构图如图(4)所示。

图(4)结构层结构图

4.2.4数据流层

数据流层为模型最底层,用于表示数据传递顺序和数据运算过程。

图(5)数据流层结构图

4.3模块的使用

4.3.1如下模块可以在任何地方使用

Inport、Outport、Mux、Demux、Bus Selector、Bus Creator、Selector、Ground、Terminator、From、Goto、Switch、Multiport Switch、Merge、Unit Delay、Rate Transition、Type Conversion、Data Store Memory,但是,Trigger和Enable模块不能在顶层使用。 4.3.2控制器中禁止使用如下模块

Signal Generator、Step、Ramp、Sine Wave、Repeating Sequence、Discrete PulseGenerator、Pulse Generator、Chirp Signal、Clock、Digital Clock、From File、From Workspace、Random Number、Uniform Random Number、

Band-Limited White Noise、Integrator、Derivative、Transport Delay、Variable Transport Delay、State-Space、Transfer Fcn、Zero-Pole、Slider Gain、Algebraic Constraint、Manual Switch、Complex to Magnitude-Angle、Magnitude-Angle to Complex、Complex to Real-Imag、Real-Imag to Complex、Hit Crossing、Polynomial、MATLAB Fcn、Goto Tag Visibility、Probe Scope、XY Graph、DisplayTo File、To Workspace、Stop Simulation、Floating Scope。 4.4模型配置

Simulink-Configuration Parameter-diagnostics里的配置如下: Solver Diagnostics • Algebraic loop

• Minimize algebraic loop • Sample Time Diagnostics • Multitask rate transition • Data Validity Diagnostics • Inf or NaN block output • Duplicate data store names • Connectivity

• Unconnected block input ports • Unconnected block output ports • Unconnected line

• Unspecified bus object at root Outport block • Mux blocks used to create bus signals

• Invalid function-call connection • Element name mismatch 以上选项应该选择“warning”。

4.5 Simulink与stateflow的区分使用

如果函数主要进行逻辑运算,则选择使用Stateflow。 如果函数主要进行数值运算,则选择使用Simulink。

4.6 Simulink建模规范 4.6.1 Simulink模块布置规范 4.6.1.1 Simulink外观

(1)所有的Simulink窗口都应采用白色背景。

(2)视图的放大率应为100%。如果在100%视图放大率的情况下,模型超出Simulink窗口,可选择“fit system to view”。

(3)模型中所有文字的颜色应为黑色。模块名、注释文字、信号名字体为12PT。或者模块名字采用10pt Arial字体,信号名采用9pt Arial字体,解释或注释文字采用10pt Tines New Roman 字体。

(4)注释部分不应有阴影。

(5)若在模型中提供作者、模型及版本信息,这些文字应有外框,即选择“show block frame”。

4.6.1.2模块总体规范

(1)模块应采用白底黑框。

(2)模块不应增加阴影。

(3)模块应尽量选择默认的形状和大小。但如果模块有多个输入或输出,为了避免输入输出名、信号名相互重叠,可以调整模块大小。为保证goto和from模块中的标签(Tag)可视,可以调整goto和from模块的大小,但尽量采用同样尺寸。

(4)模块名统一在模块下面。

(5)模块的名字用来描述该模块的信息,但如果模块从外观上能看出它的作用,应该隐藏该模块的名字,如:

4.6.1.3输入输出模块

(1)输入模块尽可能在模型的最左边,输出模块尽可能在模型的最右边。但为避免与其他线相交,输入输出模块可以往里移一些。

(2)输入、输出接口模块应以接口顺序编号显示,而不能用变量名显示。

(3)输入输出的名字一般不隐藏,但当信号线上的变量名与输入、输出接口的名称相同,为使界面清晰可读,应将输入、输出接口名称隐藏。

4.6.1.4信号线

(1)信号线尽可能不要相交,不要穿过其他模块、子系统或标签。

(2)信号线必须水平或垂直。

(3)在一条信号线的分支点上,只能分出2条子信号线。

(4)为避免信号线相交,可以采用from、goto模块。但如两个子系统间相隔较近,可以省去用from、goto的转换,而直接用线连接起来,增强可读性及数据流跟踪。

(4)信号线应尽量从左到右。但反馈信号除外。

子系统不能将其翻转,保证其从左到右的数据流方向,从而便于模型的可读性。

(5)如果没有输入信号选择ground block代替输入信号,如果没有输出信号选择terminator block代替输出。

4.7 Simulink建模规范 4.7.1模块应用规范

(1)Sum模块:应采用矩形形式的,且第一个输入应为“+”。

(2)Product模块:第一个输入应为“*”。

(3)Relational Operator模块:变量与常量比较时,变量作为模块的第一个输入信号,常量作为第二个输入信号。

(4)Switch模块:第二个输入(判断量)必须为布尔量,且判断法则应选为u2~=0,

这样便于可读、数据流及代码生成。

(5)Function call、Enabled、Triggered、If / Else Action模块:条件应该位于模块顶部。

(6)from和goto模块:from模块和goto模块的标签(Tag)应匹配,一个from模块只能接受一个来自goto模块的信号。

(7)Multiport switch模块:第一个输入(控制输入)值必须大于等于1,且不能超过选择输入值。

(8)BusCreat和BusSelect模块:BusCreat包括的所有的信号都要命名。BusCreat和BusSelect模块要匹配使用。

4.7.2建模运算规范

(1)数字运算不能被用于逻辑触发模块及逻辑运算。

(2)逻辑运算结果不能用于数字运算。

(3)If-then-else-if建模结构

if (If_Condition) { output_signal = If_Value; } else if (Else_If_Condition) { output_signal = Else_If_Value; } else {

output_signal = Else_Value; }

(4)Case建模结构

switch (selection) { case 1: output_signal = output_version1; break; case 2: output_signal = output_version2; break; case 3: output_signal = output_version3; break; case 4: output_signal = output_version4; }

(5)逻辑运算组合

组合型的逻辑组合

分离型的逻辑组合

4.7.3 经验模块规范

(1)信号滞环(即返回上一周期值)模块,优先选择Unit Delay;

(2)时间积分模块:分连续时间积分模块Integrator和离散时间积分模块Discrete-Time Integrator,优先选择离散时间积分模块Discrete-Time Integrator;

(3)信号集合模块,优先选择Bus模块;模块输入可以采用Bus模块集成,简化模型。

(4)乘积模块,优先选择Product模块,且多个量相乘时建议拆分为两两相乘。

(5)信号传递模块建议统一使用from/goto模块,尽量不使用Data

Store Memory模块,且from/goto模块建议使用局部变量Local格式,避免使用全局变量Global格式,见下图所示。

(6)触发式模块建议优先选择Function-Call Subsystem,然后选Enabled Subsystem,最后选择Triggered Subsystem,各模块优先级见下图所示。

低 (7)构建if-then-else结构的模型,如果then和else的响应为两个常量,可以采用switch模块;但如果是两个较复杂的计算,可以考虑使用If/Else模块(见下图所示),输出变量采用merge模块进行过滤输出。这样可以提高仿真及代码生成的效率。

(8)模型中不要使用Fcn模块,用其他模块代替。

(9)Lookup Table模块:查表方法选择“Interpolation-Use End Values”。

(10)模型中最好不要采用绝对值模块,RTW代码生成时会导致值的跳变。

4.8 Stateflow建模规范 4.8.1 Stateflow模块布置规范

(1)Stateflow输入输出名应与相应的信号一致。

(2)状态连接线必须清晰,尽量不交叉,不要穿过状态、节点或文字。

(3)Stateflow模块中至少有两个状态,且要有默认状态。

每个状态不能只有一个子状态。

(4)Flowcharts中应遵循:条件命令文字应该水平放置;赋值命令文字应该垂直放置。

(5)为了便于可读性,事件en:、du:、ex:每个应单独起一行;每个事件具体内容也应单独起一行。

(6)为便于数据流及代码生成,返回值A应只对应一个位置。

(7)为便于可读,StateFlow中的默认输入应置于最上端;内部默认状态输入项应置于其他项上面。

(8)为便于可读性,判断条件语句中的变量类型一定要清晰,最好不

用函数表达式。

(9)为便于可读、数据流及代码生成,Stateflow中的可调变量参数,最好以外部输入的形式,连入stateflow中。

(10)如果要在几个状态间切换,要把执行语句写在状态里,以增强可读行。

correct incorrect

(11)在一个Stateflow范围内,一个变量不能有多重用途。

4.8.1 Stateflow建模逻辑运算规范

(1)Boolean运算使用 “&&” 和 “II” 运算符号。

(2)位运算使用“&” and “I”运算符号。

(3)Stateflow中比较运算。

两个变量进行比较其数据类型必须一致。

(4)Stateflow 中If建模结构

if (condition){ action; }

(5)Stateflow 中IF THEN ELSE建模结构

if (condition) { action1; } else { action2; }

(6)Stateflow 中IF THEN ELSE IF建模结构

if (condition1) { action1; }

else if (condition2) { action2; }

else if (condition3) { action3; } else { action4; }

(7)Stateflow 中Cascade of IF THEN建模结构

if (condition1) { action1;

if (condition2) {

action2;

if (condition3) { action3; } } }

(8)Stateflow 中CASE建模结构

CASE with exclusive selection selection = ...; switch (selection) { case 1: action1; break; case 2: action2; break;

case 3: action3; break; default: action4; }

(9)Stateflow 中For循环建模结构

for

(index=0;index(10)Stateflow 中WHILE循环建模结构

while (condition) { action; }

(11)Stateflow 中DO WHILE循环建模结构

do { action; }

while (condition);

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