目录
一、符号说明
关于手册
以下表格罗列了手册中使用到的样式和符号。
样式 |
使用场景 |
【】 |
表示点击的界面元素、窗口和对话框的名称。 |
加粗 |
用于文本信息的强调。 |
超链接 |
超链接和引用。 |
<CTRL>+<S> |
快捷方式。 |
符号 |
使用场景 |
|
用于展示警告信息,以提醒用户留意。 |
|
用于提醒静电放电可能造成损坏。 |
|
用于展示补充/额外信息。 |
|
用于提供示例。 |
|
用于提供分步骤的指引。 |
|
用于提供对文件进行编辑操作的说明。 |
二、MBD 说明
应用场景
模型框图(又称MBD)用于建模、仿真和分析动态系统。它采用基于方框图的图形化编程环境,特别适合复杂系统(如控制系统、信号处理、通信系统等)的仿真和设计。
TSMaster中的模型框图使用框图表示法,通过拖放模块和连接信号线来构建系统模型,并且支持离散时间以及混合系统的仿真,可在仿真过程中调整参数并立即看到结果。
模型框图优点如下:
(1)丰富的模块库:包含数学运算、信号处理、控制系统、通信系统等领域的预定义模块
(2)分层建模:支持通过子系统创建层次化模型;可将多个模块组合成子系统;支持多级子系统嵌套;可创建条件执行子系统(使能、触发等)
(3)仿真功能:支持不同采样率的子系统并行运行;自动处理不同速率模块间的信号传递
(4)深度集成:可直接从TSMaster系统变量中读取数据;仿真结果可以导出为mbd文件进行分析;可调用模型框图中的相关函数对TSMaster进行操作
(5)支持MIL、SIL、HIL
(6)支持直接加载Simulink的sldd、slx等文件仿真
图1: 模型框图
模型框图
模型框图模块工具栏主要包含撤销、重做、从外部打开、保存当前文件、新建模型、导出svg、清除运行结果、生成小程序库、运行模型、步进和停止等常用的工程操作。
工具栏
图2: 模型框图工具栏
模型框图工具栏中功能按钮介绍如下:
表1: 模型框图工具栏介绍
按钮 |
描述 |
|
撤销模型框图中的操作 |
|
重做模型框图中的操作 |
|
打开外部的MBD文件 |
|
将当前窗口中的文件保存到本地 |
|
包括新建模型、导出svg文件、清除运行结果、生成小程序库和设置(修改仿真开始时间、仿真结束时间、固定步长和仿真模式等) (详见表2) |
|
按钮高亮代表当前仿真模式为:实时仿真 |
|
运行当前模型框图 |
|
步进当前模型框图 |
停止当前模型框图 |
New SubItem详细介绍:
表2: New SubItem介绍
按钮 |
描述 |
|
新建:新建新的模型框图 |
|
打开:打开保存的.mbd\.slx\.mdl格式文件 |
|
导入:将保存的.mbd\.slx\.mdl格式文件导入到打开的模型框图 |
|
保存:将当前的模型框图保存 |
|
另存为:将当前的模型框图.mbd文件另存为 |
|
导出svg:将当前模型框图界面为.svg文件 |
|
清除运行结果:清除当前模型框图中组件的运行结果 |
|
显示输出端口的输出类型,在运行模型之后显示所有输出端口的类型 |
|
生成小程序库:将当前模型框图生成为C小程序库 |
|
设置:模型框图中求解器、数据、调试、版本等信息 (详见2.2.2) |
模型框图配置
模型框图设置
模型框图的设置中可以设置仿真开始时间、仿真结束时间、固定步长和仿真模式的设置。TSMaster中的求解器为定步长求解器,保持固定时间步长推进仿真,不会因为系统动态变化而调整,适用于实时仿真。
图3: 模型框图-设置-求解器
模型框图的设置中的数据类型分为double(双精度浮点)和single(单精度浮点);模型框图中大多是模块默认使用double类型,适合高精度的科学计算、极大或极小数量的运算;single不是默认类型,需要显式指定,多用于实时仿真加快计算速度(见图4)。模型框图的设置中绑定添加的数据仓库后,就可以使用数据仓库中的变量和数据类型。
图4: 模型框图-设置-数据类型
模型框图的设置中的调试部分,模型调试过程中,设置仿真在特定时间点暂停,暂停后通过步进进行仿真。(见图5)
图5 : 模型框图-设置-调试
模型管理器
图6 : 模型管理器界面显示
模型管理器界面中包括三个模块:模型列表、数据仓库和全局设置。工具栏中主要两个功能:打开所有和关闭所有。
模型列表中显示当前TSMaster工程中加载的所有模型框图的相关信息,包块名称、类型、版本、最后修改、状态和文件路径(模型框图的介绍详见2.2)。
图7 : 模型管理器-模型列表
数据仓库中显示当前TSMaster工程中添加的所有数据仓库的相关信息,包块名称、类型、版本、最后修改、状态和文件路径(数据仓库的介绍详见2.4)。
图8 : 模型管理器-数据仓库
在全局设置的“模型搜索路径”中添加路径(或添加级联路径)。添加了环境变量Path路径后引用的a模型依赖b,c,d,把b c d的路径加入后,打开a模型时就可以完整打开a b c d。
图9 : 模型管理器-全局设置
数据仓库
图10 : 数据仓库界面
数据仓库是存储模型相关数据的持久性存储库。可以存储定义参数和信号的设计数据,还可以包括定义模型行为的数据。数据仓库不存储仿真数据,即模型仿真时进出 Inport 和 Outport 模块的输入或输出。数据仓库中的条目都是持久性的。
数据仓库包括三个模块:变量、数据类型和属性。
数据仓库中保存配置为JSON格式文件,JSON文件中定义数据仓库名称、最后修改者、添加的数据类型和变量的相关信息,也可以通过导入原先保存的JSON文件将变量、数据类型等信息添加进来。
变量
数据仓库中的变量模块中可以添加信号和参数,可以将变量模块导出为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 : 数据仓库与模型框图的联系
数据类型
数据仓库中的数据类型模块可以添加变量类型、总线类型、枚举类型、别名类型和数值类型;数据类型中添加的数据可以导出为C头文件,在C小程序中导入头文件,数据类型中的所有类型可以在C小程序中使用;将.h文件加载到libs\common路径下,C小程序中全局定义引用头文件,即可使用调用头文件中的数据类型。
图14 : 数据仓库数据类型与C小程序
数据仓库中的数据类型的枚举类型可以添加枚举数据,修改默认值和存储类型,其他的数据类型则支持修改名称和描述。
图15 : 数据仓库-数据类型
数据仓库中的数据类型与模型框图的联系:在模型框图中添加组件(以Constant为例),设置中数据类型中的数据仓库绑定已添加的数据仓库(以DataRepo为例),Constant中的输出数据类型可以选择数据仓库中添加的数据类型,如下图:
图16 : 数据仓库与模型框图的联系
属性
数据仓库中的属性模块可以添加已创建的数据仓库,移除数据仓库和打开数据仓库。当一个数据仓库(以DataRepo为例,下文均以DataRepo代指)引用另一个数据仓库(以DataRepo1为例下文均以DataRepo1代指),DataRepo的变量表和数据类型表可自由关联DataRepo1的数据类型,但是变量表不会显式DataRepo1中的变量。
图17 : 数据仓库的依赖
三、MBD 基本功能介绍
基础功能
快捷操作
表3: 快捷操作
功能 |
描述 |
鼠标滚轮自动缩放 |
在模型框图中的任意位置滚动鼠标,以该位置为缩放点进行缩放。 |
鼠标滚轮自由移动 |
在模型框图中按下鼠标滚轮不松开,可自由移动绘图区域。 |
水平垂直滚动条 |
当屏幕内容超越绘图区域时,自动增减水平和垂直滚动条。 |
水平垂直滚动条滚动事件 |
绘图区域的显示会随着水平垂直滚动条的滚动而滚动,当某个方向的显示完全可见,滚动条消失。 |
Undo和Redo功能 |
任何针对Block Diagram的修改都可以无限制Undo(撤销)和Redo(重做)。 |
连接线保持功能 |
已连接两个Block的连接线,在任意一个或多个Block被鼠标移动、键盘移动和鼠标缩放的情况下,能自动延展和保持连接。 |
实时取消移动功能 |
在移动或是拖拽Block和连接线时,按下ESC键可以一键取消操作。 |
实时取消复制功能 |
在右键拖动Blocks进行复制时,不松开右键,直接按下ESC可取消复制并删除复制的Blocks。 |
连接线绘制 |
连接线两端若都有对象,则线条颜色是黑色,否则是红色。 |
连接线的鼠标高亮 |
单击连接线,选中的连接线会保持高亮,未选中的连接线会取消高亮。 |
连接线拖动布线 |
在Block端口上按下左键,拖动拉出线条,可随着鼠标移动自动布线,在Block上松开鼠标,自动确认布线。 |
快捷键删除功能 |
选中的Block和连接线,按下Delete自动删除。 |
Block的IO探测功能 |
选中一个Block的IO或拖拽布线时,当光标移动到一个Block上方时,光标与该Block最近的IO将被选中。 |
断线的布线功能 |
从Block的端口拉出线条至空白区域,或是删掉连线左右任何一个Block,线条会显示为红色虚线。 |
断线的续连功能 |
从Block的端口拉出的断线,可以通过鼠标拖动继续布线,期间按ESC取消,松开鼠标确认布线。 |
实时取消布线功能 |
拖动布线时按下ESC能取消布线。 |
跨越拖动功能 |
当鼠标拖动一个或多个Block或线条向上下左右离开绘图区域时,应当出现水平垂直滚动条跟踪鼠标指针。 |
简略显示 |
Zoom缩小到一定程度后,Block上移动鼠标,不应该显示drag handle。 |
线段拖动功能 |
已有的连线中的任意线段,都可以被鼠标直接拖动;如果是竖线则可以横向拖动;如果是横线则可以竖向拖动。 |
分叉点优化功能 |
用户手动布线过程中,系统自动调整到最佳分叉点。 |
交叉点吸附功能 |
用户手动布线,拖动线端会自动吸附到可能的交叉点上。 |
吸附到线功能 |
用户拖动已存在的线,靠近其他已存在的线,该线会自动吸附到其他已存在的线上,实现分叉点优化。 |
Diagram的层级导航功能 |
Diagram上方的导航栏支持用户鼠标点击进入对应的Sub System。 |
Diagram的持久化功能 |
支持导入、导出、保存、读取mbd配置文件。 |
导入Slx功能 |
支持直接加载Simulink的slx文件。 |
显示适配功能 |
按下Space空格键,使得当前的模型视图以适配方式显示。 |
导入Mdl功能 |
支持直接加载Simulink的mdl文件。 |
注释和反注释功能 |
在选中的模块上按下Ctrl + /可以注释或是反注释。 |
自动连线功能 |
选中Block1,按住ctrl键,点击Block2,会自动按顺序将Block1的输出端口连接至Block2的输入端口。 |
连接提示保持功能 |
任何时候拖动Block1与Block2的输入或输出端口对齐,会出现加粗的连接提示,松开鼠标后,可以直接点击连接提示以自动创建连接线。 |
Block(组件) 操作
表4: Block(组件)操作
功能 |
描述 |
Block的绘制 |
支持直接路径绘制。 |
Block的变形 |
鼠标移动至Block上方,会出现变形控制点;鼠标移走,变形控制点消失带磁滞;拖动控制点可更改Block形状。 |
Block的单个移动 |
鼠标左键拖动Block可随意移动。 |
Block的ZOrder |
新增的Block遮挡旧的Block。 |
Block的鼠标高亮 |
单击Block,选中的Block会保持高亮,未选中的Block会取消高亮。 |
Block的鼠标多选 |
空白处拖拽形成多选框,被多选框覆盖到的Block将高亮。 |
Block的鼠标整体移动 |
鼠标左键拖动任意高亮的Block,将使所有高亮的Block整体移动。 |
Block的鼠标附加拖动多选 |
按住shift,空白处拖拽形成多选框,被多选框覆盖到的Block将高亮,同时保持之前高亮的Block。 |
Block的鼠标附加点击多选 |
按住shift,单击Block,可实现切换Block的高亮。 |
Block的键盘移动 |
选中的Block可随键盘的上下左右键按下而移动。 |
Block的网格吸附 |
每个Block的宽度和高度可根据网格大小自动吸附。 |
Block的吸附对齐 |
每个Block在移动和缩放时,可自动吸附对齐到其他Block的合适的边界:上、下、左、右、中线。 |
Block的吸附辅助线 |
针对已吸附的Block的上、下、左、右、中线绘制吸附辅助线。 |
Block的IO绘制 |
每个Block的输入Port和输出Port。 |
Block的IO吸附与辅助线 |
每个Block的输入和输出都能与其他任意Block的输出与输入在水平方向吸附并绘制辅助线。 |
Block的右键拖动复制 |
在单个Block和已选中的多个Block上右键按下,拖动后即复制。 |
Block的快捷键复制粘贴 |
选中的Block按下Ctrl+C复制,按下Ctrl+V粘贴。 |
Block的粘贴位置 |
每一次粘贴,所粘贴的Block位置相对于初始位置或后期的鼠标点击位置进行自动偏移。 |
Block的IO高亮 |
鼠标移动到IO上方,指针变为十字,点击输入或输出IO,高亮此IO,同时所有对应的输出或输入IO出现高亮连接提示。 |
Block的IO高亮的亮度变化 |
高亮的连接提示随着与光标的距离变大而变暗。 |
Block过滤器功能 |
双击空白区域,可立即过滤Block,输入Block的关键词点击或回车插入所选Block。 |
Block名称更改功能 |
直接点击Block下方的名称,支持实时修改。 |
四、Block(组件)说明
组件功能
表5: 组件功能
组件名称 |
组件简介 |
组件功能 |
In Port |
模型的输入端口 |
1、连接其他模块到该端口可传递信号到子模块。 |
Out Port |
模型的输出端口 |
1、将子系统内部的信号传递到外部。 |
Sub System |
模块化建模 |
1、将一组相关的模块封装到一个子系统中。 2、通过 In(输入)和 Out(输出)块定义子系统的接口。 3、外部模块通过子系统的输入/输出端口与之交互。 |
Sum |
加法或减法运算 |
1、对多个输入信号进行加、减或混合运算。 2、支持标量、向量和矩阵的运算。 以常数为例 |
Gain |
增益模块:用于信号的比例放大或缩小 |
1、对输入信号乘以一个常数(增益值),即 y=K⋅u。 2、支持数据类型:标量、向量、矩阵。 3、适用场景:信号调理、控制算法、矩阵运算。 以常数为例 |
Product |
乘积模块:用于执行乘法或除法运算 |
1、对输入信号执行乘法、除法和混合运算。 2、支持数据类型:标量、向量、矩阵。 3、适用场景:信号调制、矩阵运算、物理建模。 以常数为例 |
Relational Operator |
关系运算符模块 |
1、对两个输入信号(标量、向量或矩阵)进行以下比较: ==(等于) ~= 或 !=(不等于) <(小于) <=(小于等于) >(大于) >=(大于等于) 2、适用场景:阈值检测、逻辑控制、条件触发。 |
Logical Operator |
逻辑运算符模块 |
1、用于对输入信号执行布尔逻辑运算(如 AND、OR、NOT 等)的基础模块,输出结果为 0(False)或 1(True)。 2、适用场景:条件判断、状态控制、数字电路设计。 |
Switch |
开关模块 |
1、用于基于条件选择输出信号的控制模块。 2、支持数据类型:标量、向量、矩阵。 3、适用场景:模式切换、安全保护、信号路由。 |
Unit Delay |
单位延迟模块 |
1、用于将输入信号延迟一个采样周期的动态模块。 2、应用场景: ·数字控制器(如 PID 中的差分项)。 ·消除代数环。 ·实现递归算法。 |
Unit Delay Enabled |
使能单位延迟模块 |
1、在标准 Unit Delay 功能的基础上增加了外部使能信号控制。 2、使能控制:通过外部使能端口(Enable)决定是否更新状态: ·使能=1:正常执行延迟操作,更新内部状态。 ·使能=0:保持当前输出值不变,忽略输入信号。 3、初始状态:可配置初始输出值(默认 0)。 4、复位控制(可选):支持增加复位端口(Reset),触发时恢复初始状态。 5、应用场景: ·节能控制系统(按需更新状态) ·安全关键系统(故障时冻结输出) ·多速率系统中的信号同步 |
Abs |
绝对值模块 |
1、用于计算输入信号绝对值。 2、支持数据类型:标量、向量、矩阵。 3、应用场景: ·信号幅值提取(如振动分析)。 ·误差幅值计算(控制系统中)。 ·复数信号处理(如通信解调) |
Constant |
常量模块 |
1、用于生成恒定值的信号。 2、支持数据类型:标量、向量、矩阵、布尔值和复数。 3、应用场景: ·提供参考信号(如控制系统的设定值)。 ·作为模块的固定参数输入(如增益值、阈值)。 ·测试模型的初始条件或边界值。 以标量为例 |
Saturation |
饱和模块 |
1、用于限制信号幅度的非线性模块。 2、将输入信号强制约束在用户定义的上下限范围内。 3、应用场景: ·执行器输出限制(如电机PWM限幅) ·防止数值溢出(如积分抗饱和) ·安全保护(如温度控制系统的安全范围) |
Discrete Integrator 仅前向欧拉算法 |
离散积分器模块 |
1、用于实现离散时间积分运算。 离散积分算法:前向欧拉算法。 2、应用场景: ·数字PID控制器 ·离散状态观测器 ·实时物理量积分(如速度→位移) |
Annotation |
注释 |
1、用于增强模型可读性的非执行元素,主要用于添加文字说明、图形标记或设计文档链接。 |
Unit Delay Enabled Synchronous |
同步使能单位延迟模块 |
1、面向同步数字系统设计的高级延迟模块,在基础使能延迟功能上增加了时钟同步机制。 2、生成优化的 HDL 代码(VHDL/Verilog)。 3、不支持Enable端口上的矢量输入。 |
Data Store Read |
数据存储读取 |
1、用于从数据存储内存中读取数据。 |
Data Store Write |
数据存储写入 |
1、用于向数据存储内存中写入数据。 |
From Workspace |
输入源模块 |
1、用于将工作空间(Workspace)中的数据导入到模型中进行仿真。 |
To Workspace |
输出模块 |
1、用于将仿真过程中的信号数据保存到工作空间(Workspace)。 |
Data Type Conversion |
数据类型转换模块 |
1、用于将输入信号的数据类型转换为另一种指定的数据类型。 2、数据类型转换:将输入信号的数据类型(如 double、single、int8、uint32、fixdt(1,16,8) 等)转换为用户指定的目标数据类型。 3、饱和处理(Saturation):当输入值超出目标数据类型的表示范围时,可选择是否饱和(例如,int8 范围是 -128~127,输入 130 会被饱和为 127)。 4、舍入模式(Rounding):指定转换时的舍入方式(如向下取整、向上取整、最近邻等)。 |
Math Function |
数学运算模块 |
1、用于对输入信号执行各种数学运算。 以exp为例 |
From |
信号路由模块 |
1、用于从 Goto 模块接收信号,避免复杂的连线连接。 2、信号接收:从 Goto 模块接收信号,而不需要直接物理连线。 3、跨子系统传递信号:允许信号在不同子系统或模型层级之间传递,减少连线混乱。 4、全局或局部作用域:支持 全局(Global) 或 局部(Scoped) 信号传递方式。 |
Goto |
信号路由模块 |
1、用于将信号发送到 From 模块,而无需直接物理连接。 2、信号接收:从 Goto 模块接收信号,而不需要直接物理连线。 3、跨子系统传递信号:允许信号在不同子系统或模型层级之间传递,减少连线混乱。 4、全局或局部作用域:支持 全局(Global) 或 局部(Scoped) 信号传递方式。 |
Function Caller |
函数调用模块 |
1、用于调用 函数调用子系统(Function-Call Subsystem) 或 导出函数模型(Export-Function Model) 的关键模块。 2、允许通过事件触发的方式执行子系统或模型。 |
Compare To Zero |
零值比较模块 |
1、用于检测输入信号是否等于、大于或小于零的逻辑比较模块。 输出布尔值 |
Compare To Constant |
常量比较模块 |
1、用于将输入信号与用户指定的固定常数值进行比较的逻辑运算模块。 输出布尔值 |
Model Reference |
模型引用模块 |
1、用于实现模块化建模和模型复用的重要功能。 它允许将一个模型(称为子模型或引用模型)作为模块嵌入到另一个模型(称为父模型)中,类似于编程中的函数调用。 |
Edge Detector |
边沿检测器 |
1、用于检测信号上升沿(Rising Edge)或下降沿(Falling Edge)的逻辑模块。 2、仅支持离散时间固定步长信号,不支持连续信号。 |
Min Max |
最大最小模块 |
1、用于计算输入信号的最小值或最大值的基础数学模块。 |
Chart |
图表 |
1、用于建模离散事件系统。 |
Display |
显示模块 |
1、用于实时显示信号数值的基础可视化工具,主要用于调试和快速验证模型行为。 |
Scope |
波形显示 |
1、用于实时显示和记录仿真过程中信号随时间变化的波形。 |
Terminator |
终止模块 |
1、用于“终止”输出信号。 |
In Port Shadow |
模型的输入端口副本 |
1、同In Port。 |
Enable Port |
使能端口 |
1、用于控制子系统执行条件的特殊端口,属于 条件执行子系统(Conditionally Executed Subsystems) 的核心组件。 执行控制:通过外部信号启用/禁用子系统的计算。 3、触发方式: 电平触发:高电平期间持续执行; 边沿触发(需配合Trigger Port):上升沿或下降沿触发。 4、状态保持:可选择禁用时保持内部状态或重置状态。 5、多速率支持:使能信号与子系统可在不同采样率下运行。 |
Delay |
延迟模块 |
1、用于对输入信号施加时间延迟的基础动态系统模块。 |
Mux |
复用器 |
1、用于将多个输入信号合并为单个复合信号(通常为向量或总线信号)。 |
Demux |
解复用器 |
1、它与Mux(复用器)功能相反,能够将单个复合信号(如向量或总线)分解为多个独立的输出信号。 |
Manual Switch |
手动开关 |
1、用于手动切换信号路径的基础路由模块。 |
Detect Increase |
检测上升模块 |
1、用于识别信号上升变化的专用逻辑模块。 |
Detect Decrease |
检测下降模块 |
1、用于识别信号严格递减变化的专用逻辑模块。 |
Detect Change |
检测任意变化模块 |
1、用于识别信号任意变化变化的专用逻辑模块。 |
Bus Selector |
总线选择器 |
1、作用:从总线信号中按名称提取特定子信号。 输入:单个总线信号(来自Bus Creator或其它总线输出); 输出:用户选择的子信号(可单选或多选)。 |
Bus Creator |
总线创建器 |
1、作用:将多个异构信号(不同数据类型、维度)组合成一个结构化总线信号。 输入:多个独立信号; 输出:单个总线信号。 |
Function Call Split |
函数调用分割 |
|
Ground |
接地模块 |
1、零值提供:输出恒定的零值信号(标量/向量/矩阵)。 2、信号终止:为未连接端口提供合法信号源。 |
TriggerPort |
触发端口 |
1、用于实现事件驱动子系统执行的关键接口模块。 |
Lookup Table Dynamic |
动态查找表 |
1、用于实现基于动态输入的实时数据插值和映射。 2、它允许用户在仿真过程中动态修改查找表的数据点(如断点、表格值),适用于需要灵活调整参数的场景。 |
Subtract |
减法模块 |
1、执行信号减法运算的基础数学模块。 |
Divide |
除法模块 |
1、用于执行两个输入的除法运算。 |
Sign |
信号符号判断 |
1、用于判断信号的符号。其输出取决于输入信号的正负: 如果输入大于0,输出为1; 如果输入等于0,输出为0; 如果输入小于0,输出为-1。 |
Clock |
时钟模块 |
1、用于产生时间数据。它输出一个与仿真时间同步的数值信号,这个信号可以用于多种目的,比如触发事件、记录时间戳等。 |
Stop Simulation |
停止仿真模块 |
1、条件终止:当输入信号≠0时立即停止仿真。 2、错误级别控制:可选择触发错误或警告。 3、消息定制:支持停止时显示自定义信息。 4、多数据类型支持:处理布尔、数值等输入信号。 |
Step |
阶跃模块 |
1、阶跃信号生成:在指定时间产生从初始值到终值的跳变。 2、参数可配置:灵活设置跳变时间、初始值和终值。 3、多数据类型支持:输出 double、int8、boolean 等类型信号。 4、向量化输出:支持生成数组形式的阶跃信号。 |
Trigonometry |
三角函数 |
1、执行基本三角函数的数学运算。 |
Rate Transition |
速率转换模块 |
1、用于处理不同采样率的数据流之间的转换。 |
Selector |
选择器 |
1、从输入的向量、矩阵或多维数组中,按索引、范围或条件选择需要的元素,输出指定的子集。 输入:可以是标量、向量(1D)、矩阵(2D)或更高维数组; 输出:用户定义的子信号(如单个元素、某一行/列、连续片段等)。 |
Signal Editor |
信号编辑器 |
1、用于创建和管理多组测试信号的高级信号源模块。 |
Sine Wave |
正弦波 |
1、使用仿真时间作为事件源以生成正弦波。 |
Sqrt |
平方根 |
1、平方根函数包括平方根、有符号平方根和平方根倒数函数。 |
DiscreteDerivative |
离散导数 |
1、用于计算离散时间信号导数。 |
FunctionCallGenerator |
函数调用生成器 |
1、用于生成函数调用事件(Function-Call Event)的模块,通常用于触发函数调用子系统(Function-Call Subsystem)的执行。 |
Rounding |
舍入模块 |
1、对信号数值进行近似处理的模块或操作,用于将数据按照指定的舍入方式调整为特定精度(如整数或固定小数位)。 |
DigitalClock |
数字时钟 |
|
DigitalClockSecond |
数字时钟(秒) |
1、用于生成以秒为单位的仿真时间信号,适用于需要精确时间管理的应用场景。 |
StringConstant |
字符串常量 |
1、用于在仿真过程中 生成固定的字符串信号。 |
CallbackButton |
回调按钮 |
1、允许用户在仿真过程中 通过点击按钮触发回调函数,常用于模型调试、参数调整和实时控制。 |
MultiPortSwitch |
多端口开关 |
|
五、MBD 模型
Simulink模型
从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
RollAxisAutopilot模型介绍
关于模型
该模型显示了为代码生成而设计的横滚轴自动驾驶仪控制系统的实现。
该模型代表了一种基本的滚转轴自动驾驶仪,具有两种操作模式:滚转姿态保持和航向保持。这些模式的模式逻辑在此模型之外。模型架构将航向保持模式和基本横滚姿态功能表示为原子子系统。
横滚姿态控制功能是一个PID控制器,它使用横滚姿态和横滚率反馈来产生副翼指令。
控制器的输入是基本横滚角参考或横滚命令,以跟踪所需的航向。模型如下:
图18: RollAxisAutopilot示意图
RollAxisAutopilot/RollAngleReference
基本侧倾角参考计算作为子系统RollAngleReference实现。
图19: RollAxisAutopilot/RollAngleReference示意图
RollAxisAutopilot/HeadingMode
子系统HeadingMode计算横滚指令以跟踪所需的航向
图20: RollAxisAutopilot/HeadingMode示意图
RollAxisAutopilot/BasicRollMode
子系统BasicRollMode计算侧翻姿态控制函数(PID)
图21: RollAxisAutopilot/BasicRollMode示意图
模型导入
将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运行
模型结果
MATLAB中RollAxisAutopilotHarness.slx模型的运行结果如下:
图24: RollAxisAutopilotHarness-MATLAB运行结果
TSMaster中模型框图中加载RollAxisAutopilotHarness.slx模型的运行结果如下: 图25: RollAxisAutopilotHarnessTSMaster运行结果
将Ail_Cmd的输出结果写入到系统变量,在TSMaster的图形中观察系统变量的变化情况。TSMaster中模型框图可以在任意的Output空添加Display或Scope实时显示输出数据。
六、MBD 工程搭建与解析
(工程结果详见7.1)本文中使用的数据库为TSMaster软件中附带的数据库CAN_FD_Powertrain.dbc所在地址为TSMaster安装路径下\Data\Demo\Databases文件夹中。如下图所示:
图26: 数据库路径
CAN数据库图25中的Demo数据库到TSMaster中,并激活CAN总线仿真,以便后续信号映射中使用
图27: 数据库加载
变量准备
添加CAN数据库和系统变量,将CAN数据中的信号与系统变量映射方向设置为双向传递,方便后续修改系统变量的值来控制CAN信号的变化
图28: 信号映射
工程搭建
信号输入
事先在TSMaster中添加数据库,(注:不可以选择最大最小值为0的信号)在信号映射将CAN信号(/EngineData/EngSpeed以为例)与系统变量(以Var0为例)连接在一起,映射方向设置为:仅从系统变量到信号
模型框图中的添加组件Sine Wave和DataStoreWrite,DataStoreWrite绑定系统变量(以Var0为例),将Sine Wave和DataStoreWrite连接在一起,实现系统变量值是Sine曲线变化。
图29: DataStoreWrite绑定
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作为另一个输入给子系统
子系统中可以添加的算法模块有:
1)微积分运算:积分器(Integrator)和微分器(Derivative)
2)离散系统:单位延迟(Unit Delay)、延迟(Delay)等等
3)逻辑与比较组件:Logical Operator(AND/OR/NOT等逻辑门);Relational Operator(比较运算符,如>、<、==);Switch(基于条件选择信号)、Multiport Switch(多路选择)。
4)数学算法:Sum(求和)、Product(乘积)、Gain(增益乘法)、Abs(绝对值)等;Trigonometry(三角函数,如sin、cos);Min Max(极值运算);Exp(指数)、Log(对数)、Sqrt(平方根)。
子系统中添加EnablePort组将,在子系统外添加Constant连接到EnablePort口可以通过修改Constant的值来控制是否执行当前子系统
图35: 信号算法子系统详细展示
(6)输出:子系统中的Output口可以连接到任意地方输出
通过上述步骤可以在模型框图中处理CAN信号的值,再使用输出模块中的Scope以图形变化的形式展示,也可以通过Display以数值变化的形式展示,还可以使用ToWorkspace的方式再写入到系统变量再将系统变量添加到图形窗口观察。所有添加的算法相关组件的连线都可以通过添加输出模块实时观察每个阶段的数据变化情况。
CAN信号边沿检测
图36: 信号边沿示例
CAN信号处理操作按照5.2.1,模型框图中的添加组件DataStoreRead,DataStoreRead绑定系统变量来获取系统变量值,在SubSystem中添加相关边沿组件观察信号边沿变化:
- Edge Detector :边沿检测器
- Detect Increase :检测上升,模块输出 1(True),否则输出 0(False)
- Detect Decrease :检测下降,模块输出 1(True),否则输出 0(False)
- Detect Change :检测任意变化,模块输出 1(True),否则输出 0(False)
子模块中的组件示意图如下:
在边沿检测组件的输出口可以连接输出模块中的Scope以图形变化的形式展示,也可以通过Display以数值变化的形式展示
边沿检测与Switch结合使用:
将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 值。
其他组件使用
模型框图中还有其他组件实用组件,比如:
(1)Ground:输入信号接地,防止出现关于未连接的输入端口的警告
图38: Ground示例
(2)Sign:信号符号判断,在需要了解信号的符号是可以将Sign组件连接到连线中
图39: Sign示例
- Clock:实时获取当前模块仿真时间
- 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子系统外部显示
小程序库使用
模型生成mp后被任意调用,实现图形程序(或C小程序)运行模型框图,更加便捷的控制模型框图的运行
图44: 生成C小程序库
添加新的图形程序,添加执行单元绑定API函数调用,选择小程序库函数,使用run函数可以实现在图形程序运行模型框图。
图45: 图形程序调用小程序库
七、MBD 工程结果
示例工程运行与结果
示例工程搭建完成后,在图形程序中依次运行模型框图
信号输入中将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: 其他组件结果
八、组件相关
模型框图中的组件在使用过程中可能出现的问题:
- Signal Editor组件无IO空仅支持导入RollAxisAutopilotHarness.slx作为演示(仅支持导入CSV);
- Model reference目前只支持载入Simulink,支持slx和TSMaster中的mbd,目前支持用户关联;
- Constant不支持向量、复数,支持矩阵和结构体;
- callback button目前只是纯兼容Simulink导入slx不报错,没有任何实际作用;
- Chart组件中的状态跳转条件中的变量目前不会主动创建;
API相关
组件FunctionCaller中绑定的API中有部分API只针对小程序,在函数列表中仅供展示。
表6:不可使用接口
接口名称 |
接口现象 |
app.check_terminate |
接口返回值225:This operation requires mini program running |
app.end_log |
接口返回值225:This operation requires mini program running |
app.enter_critical_section |
接口返回值225:This operation requires mini program running |
app.leave_critical_section |
接口返回值225:This operation requires mini program running |
app.log_system_var_value |
接口返回值225:This operation requires mini program running |
app.set_check_failed_terminate |
接口返回值225:This operation requires mini program running |
app.set_thread_priority |
接口返回值225:This operation requires mini program running |
app.start_log |
接口返回值225:This operation requires mini program running |
app.start_log_w_filename |
接口返回值225:This operation requires mini program running |
app.start_system_message_log |
接口返回值225:This operation requires mini program running |
app.terminate_application |
接口返回值225:This operation requires mini program running |
app.try_enter_critical_section |
接口返回值225:This operation requires mini program running |
更多关于TOSUN同星相关内容,欢迎访问官方网站:www.tosunai.com
更多TSMaster软件资讯&干货内容,可以关注官方公众号:
👍
很实用的资料,感谢分享