在汽车电子MBD开发中,TSMaster MBD模块深度集成于TSMaster先进的总线分析、仿真与测试平台,旨在为工程师提供一套从模型自动编译、代码集成到自动化测试的端到端无缝解决方案。本文将手把手教您从零搭建工程并构建高效测试流程,为优化开发工作流提供实用指南。
本文关键词:TSMaster,MBD
目录
Catalog
1. 符号说明
2.MBD说明
3.MBD基本功能介绍
4. Block(组件)说明
5. MBD模型
6. MBD工程搭建与解析
7. MBD工程结果
8. 组件相关
1
符号说明
本文中所用到的一些样式和符号,可以参考以下表格说明。
2
MBD说明
2.1 应用场景
模型框图(又称MBD)用于建模、仿真和分析动态系统。它采用基于方框图的图形化编程环境,特别适合复杂系统(如控制系统、信号处理、通信系统等)的仿真和设计。
TSMaster中的模型框图使用框图表示法,通过拖放模块和连接信号线来构建系统模型,并且支持离散时间以及混合系统的仿真,可在仿真过程中调整参数并立即看到结果。
模型框图优点如下:
▲丰富的模块库:包含数学运算、信号处理、控制系统、通信系统等领域的预定义模块;
▲分层建模:支持通过子系统创建层次化模型;可将多个模块组合成子系统;支持多级子系统嵌套;可创建条件执行子系统(使能、触发等);
▲仿真功能:支持不同采样率的子系统并行运行;自动处理不同速率模块间的信号传递;
▲深度集成:可直接从TSMaster系统变量中读取数据;仿真结果可以导出为mbd文件进行分析;可调用模型框图中的相关函数对TSMaster进行操作;
▲支持MIL、SIL、HIL;
▲支持直接加载Simulink的sldd、slx等文件仿真
图1: 模型框图
2.2模型框图
模型框图模块工具栏主要包含撤销、重做、从外部打开、保存当前文件、新建模型、导出svg、清除运行结果、生成小程序库、运行模型、步进和停止等常用的工程操作。
2.2.1 工具栏
图2: 模型框图工具栏
模型框图工具栏中功能按钮介绍如下:(表1: 模型框图工具栏介绍)
New SubItem详细介绍:(表2: New SubItem介绍)
2.2.2 模型框图配置
2.2.2.1 模型框图设置
模型框图的设置中可以设置仿真开始时间、仿真结束时间、固定步长和仿真模式的设置。TSMaster中的求解器为定步长求解器,保持固定时间步长推进仿真,不会因为系统动态变化而调整,适用于实时仿真。
图3: 模型框图-设置-求解器
模型框图的设置中的数据类型分为double(双精度浮点)和single(单精度浮点);模型框图中大多是模块默认使用double类型,适合高精度的科学计算、极大或极小数量的运算;single不是默认类型,需要显式指定,多用于实时仿真加快计算速度(见图4)。模型框图的设置中绑定添加的数据仓库后,就可以使用数据仓库中的变量和数据类型。
图4: 模型框图-设置-数据类型
模型框图的设置中的调试部分,模型调试过程中,设置仿真在特定时间点暂停,暂停后通过步进进行仿真。(见图5)
图5 : 模型框图-设置-调试
2.3模型管理器
模型管理器界面中包括三个模块:模型列表、数据仓库和全局设置。工具栏中主要两个功能:打开所有和关闭所有。
图6 : 模型管理器界面显示
模型列表中显示当前TSMaster工程中加载的所有模型框图的相关信息,包块名称、类型、版本、最后修改、状态和文件路径(模型框图的介绍详见2.2)。
图7 : 模型管理器-模型列表
数据仓库中显示当前TSMaster工程中添加的所有数据仓库的相关信息,包块名称、类型、版本、最后修改、状态和文件路径(数据仓库的介绍详见2.4)。
图8 : 模型管理器-数据仓库
在全局设置的“模型搜索路径”中添加路径(或添加级联路径)。添加了环境变量Path路径后引用的a模型依赖b,c,d,把b c d的路径加入后,打开a模型时就可以完整打开a b c d。
图9 : 模型管理器-全局设置
2.4数据仓库
数据仓库是存储模型相关数据的持久性存储库。可以存储定义参数和信号的设计数据,还可以包括定义模型行为的数据。数据仓库不存储仿真数据,即模型仿真时进出 Inport 和 Outport 模块的输入或输出。数据仓库中的条目都是持久性的。
数据仓库包括三个模块:变量、数据类型和属性。
数据仓库中保存配置为JSON格式文件,JSON文件中定义数据仓库名称、最后修改者、添加的数据类型和变量的相关信息,也可以通过导入原先保存的JSON文件将变量、数据类型等信息添加进来。
图10 : 数据仓库界面
2.4.1 变量
数据仓库中的变量模块中可以添加信号和参数,可以将变量模块导出为C代码,再将C代码导入到C小程序中,变量模块中的添加的所有变量可以在C小程序中使用。
图11 : 数据仓库变量与C小程序
数据仓库的变量模块可以导入Simulink数据字典。添加的变量数据的类型可以修改为其他类型,例如:double、single、int8、uint8、int16、uint16、int32、uint32、int64、uint64和boolean,也可以是数据类型中添加的类型(数据类型详见2.4.2),例如:Enum:EnumType、Bus:BusType、Value:ValueType、Numeric:NumericType等;变量中的初始值、类型、数组大小、最大值、最小值、单位和描述均能修改。
图12 : 数据仓库-变量
数据仓库中的变量与模型框图的关联:在模型框图中添加组件(以 DataStoreRead 为例),在设置中将数据类型与已添加的数据仓库(例如 DataRepo)绑定。此时,DataStoreRead 中的数据存储可以选择数据仓库中添加的变量,而 Constant 组件则可以读取数据仓库中变量所添加的参数(例如 Para)。如下图:
图13 : 数据仓库与模型框图的联系
2.4.2 数据类型
数据仓库中的数据类型模块可以添加变量类型、总线类型、枚举类型、别名类型和数值类型;数据类型中添加的数据可以导出为C头文件,在C小程序中导入头文件,数据类型中的所有类型可以在C小程序中使用;将.h文件加载到libs\common路径下,C小程序中全局定义引用头文件,即可使用调用头文件中的数据类型。
图14 : 数据仓库数据类型与C小程序
数据仓库中的数据类型的枚举类型可以添加枚举数据,修改默认值和存储类型,其他的数据类型则支持修改名称和描述。
图15 : 数据仓库-数据类型
数据仓库中的数据类型与模型框图的联系:在模型框图中添加组件(以Constant为例),设置中数据类型中的数据仓库绑定已添加的数据仓库(以DataRepo为例),Constant中的输出数据类型可以选择数据仓库中添加的数据类型,如下图:
图16 : 数据仓库与模型框图的联系
2.4.3 属性
数据仓库中的属性模块可以添加已创建的数据仓库,移除数据仓库和打开数据仓库。当一个数据仓库(以DataRepo为例,下文均以DataRepo代指)引用另一个数据仓库(以DataRepo1为例下文均以DataRepo1代指),DataRepo的变量表和数据类型表可自由关联DataRepo1的数据类型,但是变量表不会显式DataRepo1中的变量。
图17 : 数据仓库的依赖
3
MBD 基本功能介绍
3.1 基础功能
3.1.1 快捷操作
3.1.2 Block(组件) 操作
4
Block(组件)说明
4.1组件功能
5
MBD 模型
5.1Simulink模型
从MATLAB官网中下载RollAxisAutopilot.slx(网址1)和RollAxisAutopilotHarness.slx(网址2)文件
网址1:
https://ww2.mathworks.cn/help/ecoder/gs/getting-started-with-embedded-coder.html;
网址2:
https://ww2.mathworks.cn/help/ecoder/gs/compare-model-simulation-and-generated-code-results.html
5.1.1 RollAxisAutopilot模型介绍
5.1.1.1 关于模型
该模型显示了为代码生成而设计的横滚轴自动驾驶仪控制系统的实现。
该模型代表了一种基本的滚转轴自动驾驶仪,具有两种操作模式:滚转姿态保持和航向保持。这些模式的模式逻辑在此模型之外。模型架构将航向保持模式和基本横滚姿态功能表示为原子子系统。
横滚姿态控制功能是一个PID控制器,它使用横滚姿态和横滚率反馈来产生副翼指令。
控制器的输入是基本横滚角参考或横滚命令,以跟踪所需的航向。模型如下:
图18: RollAxisAutopilot示意图
5.1.1.2 RollAxisAutopilot/RollAngleReference
基本侧倾角参考计算作为子系统RollAngleReference实现。
图19:RollAxisAutopilot/RollAngleReference示意图
5.1.1.3 RollAxisAutopilot/HeadingMode
子系统HeadingMode计算横滚指令以跟踪所需的航向。
图20: RollAxisAutopilot/HeadingMode示意图
5.1.1.4 RollAxisAutopilot/BasicRollMode
子系统BasicRollMode计算侧翻姿态控制函数(PID)。
图21: RollAxisAutopilot/BasicRollMode示意图
5.1.2 模型导入
将RollAxisAutopilotHarness.slx文件拖拽到TSMaster中,模型会直接被加载到模型框图中如下图:
图22: RollAxisAutopilotHarness示意图
模型框图中的Signal Editor组件中的FileName中roll_harness_TestInputs.mat文件放到RollAxisAutopilotHarness.slx同级目录,将roll_harness_TestInputs_Maneuver_1.csv文件也放到RollAxisAutopilotHarness.slx同级目录,roll_harness_TestInputs_Maneuver_1.csv中存放的是模型的输入数据。
模型框图中的Signal Conversion组件将来自Signal Editor的输入的double类型的数据转换为对应的single、boolean再输入给子模块Roll Axis Autopilot(此子模块就是RollAxisAutopilot.slx的内容,详见5.1.1)
图23: RollAxisAutopilotHarness运行
5.2模型结果
MATLAB中RollAxisAutopilotHarness.slx模型的运行结果如下:
图24: RollAxisAutopilotHarness-MATLAB运行结果
TSMaster中模型框图中加载RollAxisAutopilotHarness.slx模型的运行结果如下:
图25: RollAxisAutopilotHarnessTSMaster运行结果
将Ail_Cmd的输出结果写入到系统变量,在TSMaster的图形中观察系统变量的变化情况。TSMaster中模型框图可以在任意的Output空添加Display或Scope实时显示输出数据。
6
MBD工程搭建与解析
(工程结果详见7.1)本文中使用的数据库为TSMaster软件中附带的数据库CAN_FD_Powertrain.dbc所在地址为TSMaster安装路径下\Data\Demo\Databases文件夹中。如下图所示:
图26: 数据库路径
CAN数据库图25中的Demo数据库到TSMaster中,并激活CAN总线仿真,以便后续信号映射中使用。
图27: 数据库加载
6.1变量准备
添加CAN数据库和系统变量,将CAN数据中的信号与系统变量映射方向设置为双向传递,方便后续修改系统变量的值来控制CAN信号的变化。
图28: 信号映射
6.2工程搭建
6.2.1 信号输入
事先在TSMaster中添加数据库,(注:不可以选择最大最小值为0的信号)在信号映射将CAN信号(/EngineData/EngSpeed以为例)与系统变量(以Var0为例)连接在一起,映射方向设置为:仅从系统变量到信号。
模型框图中的添加组件Sine Wave和DataStoreWrite,DataStoreWrite绑定系统变量(以Var0为例),将Sine Wave和DataStoreWrite连接在一起,实现系统变量值是Sine曲线变化。
图29: DataStoreWrite绑定
6.2.2 CAN信号的算法处理
图30: 信号算法处理示例
简单CAN信号算法处理,示例步骤如下:
(1)新建TSMaster工程,加载图11中的数据库(以CAN_FD_Powertrain.dbc为例)
图31: 加载数据库
(2)创建系统变量Var0
图32: 添加系统变量
(3)信号映射中将系统变量Var0和CAN信号(以/EngineData/EngSpeed信号为例)连接,映射方向选择“仅从系统变量到信号”
图33: 系统变量与CAN信号映射
(4)添加模型框图,模型框图中添加Sine Wave和ToWorkspace组件,ToWorkspace绑定系统变量Var0,Sine Wave连线到ToWorkspace,实现系统变量值的Sine变化,同时实现CAN信号值的Sine变化
图34: 系统变量值Sine变化
(5)CAN信号的算法处理:添加子系统operation,使用FromWorkspace读取系统变量Var0的值作为输入子系统,Constant作为另一个输入给子系统
子系统中可以添加的算法模块有:
▲微积分运算:积分器(Integrator)和微分器(Derivative)
▲离散系统:单位延迟(Unit Delay)、延迟(Delay)等等
▲逻辑与比较组件:Logical Operator(AND/OR/NOT等逻辑门);Relational Operator(比较运算符,如>、<、==);Switch(基于条件选择信号)、Multiport Switch(多路选择)
▲数学算法:Sum(求和)、Product(乘积)、Gain(增益乘法)、Abs(绝对值)等;Trigonometry(三角函数,如sin、cos);Min Max(极值运算);Exp(指数)、Log(对数)、Sqrt(平方根)
子系统中添加EnablePort组将,在子系统外添加Constant连接到EnablePort口可以通过修改Constant的值来控制是否执行当前子系统。
图35: 信号算法子系统详细展示
▲输出:子系统中的Output口可以连接到任意地方输出
通过上述步骤可以在模型框图中处理CAN信号的值,再使用输出模块中的Scope以图形变化的形式展示,也可以通过Display以数值变化的形式展示,还可以使用ToWorkspace的方式再写入到系统变量再将系统变量添加到图形窗口观察。所有添加的算法相关组件的连线都可以通过添加输出模块实时观察每个阶段的数据变化情况。
6.2.3 CAN信号边沿检测
图36: 信号边沿示例
CAN信号处理操作按照5.2.1,模型框图中的添加组件DataStoreRead,DataStoreRead绑定系统变量来获取系统变量值,在SubSystem中添加相关边沿组件观察信号边沿变化:
(1)Edge Detector :边沿检测器
(2)Detect Increase :检测上升,模块输出 1(True),否则输出 0(False)
(3)Detect Decrease :检测下降,模块输出 1(True),否则输出 0(False)
(4)Detect Change :检测任意变化,模块输出 1(True),否则输出 0(False)
子模块中的组件示意图如下:
图37: 信号边沿子系统详细展示
在边沿检测组件的输出口可以连接输出模块中的Scope以图形变化的形式展示,也可以通过Display以数值变化的形式展示。
边沿检测与Switch结合使用:
(1)将Edge Detector通过DataTypeConversion转换信号类型,连接到Switch的第一个输入信号;Switch的的控制信号连接Constant模块(Constant值为1);Detect Decrease转换信号类型后,连接到Switch的第三个输入信号, 模块根据 控制信号 的取值选择输出第一个输入信号或第三个输入信号。
选择性输出下降沿检测结果:
由于控制信号固定为 1,Switch 会始终选择第3个输入(即 Detect Decrease 的输出),最终系统等效为一个带数据类型转换的下降沿检测器。
冗余设计意图:
虽然连接了 Edge Detector 的通用边沿检测结果(输入1),但通过固定控制信号将其屏蔽,仅保留 Detect Decrease 的专用下降沿检测功能。
(2)Detect Change 连接到Manual Switch 输入1,Constant 连接到Manual Switch 输入2实现了一个 "手动控制的信号变化监视器"。
监控模式:输出信号变化检测结果(变化=1,无变化=0);
固定输出模式:忽略输入信号,始终输出预设的 Constant 值。
6.2.4 其他组件使用
模型框图中还有其他组件实用组件,比如:
(1)Ground:输入信号接地,防止出现关于未连接的输入端口的警告
图38: Ground示例
(2)Sign:信号符号判断,在需要了解信号的符号是可以将Sign组件连接到连线中
图39: Sign示例
(3)Clock:实时获取当前模块仿真时间
(4)Stop Simulation:在输入信号不为0时可以立即停止仿真
图40: Clock示例
(5)Step:可以控制信号在指定时间产生从初始值到终值的跳变
图41: Step示例
(6)控制子系统执行端口:Enable Port和Trigger Port
在子系统中加入Enable Port(或Trigger Port),子系统的外部会多出一个输入端口,在外部通过修改连接到端口的信号的值控制是否执行当前子系统。
图42: Enable Port和Trigger Port
图43: Enable Port和Trigger Port子系统外部显示
6.2.5 小程序库使用
模型生成mp后被任意调用,实现图形程序(或C小程序)运行模型框图,更加便捷的控制模型框图的运行。
图44: 生成C小程序库
添加新的图形程序,添加执行单元绑定API函数调用,选择小程序库函数,使用run函数可以实现在图形程序运行模型框图。
图45: 图形程序调用小程序库
7
MBD 工程结果
7.1示例工程运行与结果
示例工程搭建完成后,在图形程序中依次运行模型框图。
信号输入中将Sine Ware的值赋值给系统变量Var0,再通过信号映射中的配置将系统变量的值赋值给CAN信号,在图形中实时看到,Trace窗口中也能看到报文变化。(5.2.2示例效果)(见图46)
图46: 信号输入结果
CAN信号算法处理过程中将Sine信号和常数模块,Sine先进行绝对值处理,再将两者相加而后进行增益处理最后相乘,再通过Output端口输出,连接到Scope和Display展示,可以在任意位置添加Output端口将实时数据输出观察。(见图47)
图47: 算法处理结果
CAN信号边沿检测检测中,将Output1连接到Switch中输出的不规则的信号(由控制信号决定);将另一个Output2连接到ManualSwitch中,Input是一个常数1,所有输出为常数1。(5.2.3示例效果)(见图48)
图48: 边沿检测结果
其他组件使用中Input2(SubSystem输入连接的是Sine正弦波)连接到Sign,根据获取到的信号符号输出:如果输入大于0,输出为1;如果输入等于0,输出为0;如果输入小于0,输出为-1。(5.2.4示例效果)(见图49)
Clock输出的是实时仿真时间,连接到Output1,运行结束后展示的最后结果为设置中的仿真结束时间。
Step设置的是从2阶跃到9,连接到Output2,所以展示的是最后阶跃的结果。
图49: 其他组件结果
8
组件相关
8.1 组件相关
模型框图中的组件在使用过程中可能出现的问题:
(1)Signal Editor组件无IO空仅支持导入RollAxisAutopilotHarness.slx作为演示(仅支持导入CSV);
(2)Model reference目前只支持载入Simulink,支持slx和TSMaster中的mbd,目前支持用户关联;
(3)Constant不支持向量、复数,支持矩阵和结构体;
(4)callback button目前只是纯兼容Simulink导入slx不报错,没有任何实际作用;
(5)Chart组件中的状态跳转条件中的变量目前不会主动创建;
8.2API相关
组件FunctionCaller中绑定的API中有部分API只针对小程序,在函数列表中仅供展示。
-
自动化测试
+关注
关注
0文章
248浏览量
27447 -
汽车电子
+关注
关注
3040文章
8402浏览量
170770 -
模型
+关注
关注
1文章
3560浏览量
50822 -
MBD
+关注
关注
0文章
29浏览量
9232
发布评论请先 登录
基于模型的设计(MBD)的深入讨论
TPTTPT动态自动化测试工具怎么样
新功能发布 | TSMaster的MATLAB自动化控制模块

新功能发布 | TSMaster新增CANoe自动化控制模块,欢迎下载体验!

干货分享 | TSMaster的记录功能需求与实践

新书推荐 | TSMaster开发从入门到精通

软件更新 | 从数据到模型,全面升级!TSMaster新版助力汽车研发新突破

评论