(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 while (condition) { action; } (11)Stateflow 中DO WHILE循环建模结构 do { action; } while (condition); 因篇幅问题不能全部显示,请点此查看更多更全内容