4. 数据管理
任务说明
在MBD(基于模型的设计)开发流程中,信号与参数的数据管理是模型与代码生成之间的关键桥梁。本案例目标为:在Simulink环境中定义一组用于车辆纵向动力学仿真的信号对象与参数对象,明确其数据类型、初始值、存储类别及作用范围,并验证这些定义能够被模型正确引用且生成代码时保持属性一致。
数据对象定义
采用Simulink数据字典(.sldd)作为数据管理载体,在其中创建以下对象:
- 信号对象:
VehicleSpeed(车速信号,单位km/h)、AccelPedalPos(加速踏板开度信号,%)、BrakePedalPos(制动踏板开度信号,%) - 参数对象:
VehicleMass(整车质量,kg)、DragCoeff(风阻系数)、FrontalArea(迎风面积,m²)、GravityConst(重力加速度,m/s²)
所有对象均基于内置类型Simulink.Signal和Simulink.Parameter创建,并设置存储类别以控制生成代码中的全局变量或宏定义。
实现步骤
以下MATLAB脚本完整创建数据字典并定义上述对象,同时设置关键属性:
<code>% 创建数据字典
dictName = 'VehicleData.sldd';
if exist(dictName, 'file')
delete(dictName);
end
myDictObj = Simulink.data.dictionary.create(dictName);
% 打开设计数据节
dDataSectObj = getSection(myDictObj, 'Design Data');
% --- 定义信号对象 ---
sigNames = {'VehicleSpeed', 'AccelPedalPos', 'BrakePedalPos'};
for i = 1:length(sigNames)
sigObj = Simulink.Signal;
sigObj.DataType = 'single'; % 单精度浮点
sigObj.InitialValue = '0'; % 初始值
sigObj.StorageClass = 'ExportedGlobal'; % 生成代码中作为全局变量导出
addEntry(dDataSectObj, sigNames{i}, sigObj);
end
% --- 定义参数对象 ---
% 整车质量
massObj = Simulink.Parameter;
massObj.Value = 1500; % 单位:kg
massObj.DataType = 'single';
massObj.StorageClass = 'ImportedExtern'; % 生成代码中引用外部定义
addEntry(dDataSectObj, 'VehicleMass', massObj);
% 风阻系数
dragObj = Simulink.Parameter;
dragObj.Value = 0.32;
dragObj.DataType = 'single';
dragObj.StorageClass = 'Define'; % 生成代码中作为宏定义
addEntry(dDataSectObj, 'DragCoeff', dragObj);
% 迎风面积
areaObj = Simulink.Parameter;
areaObj.Value = 2.2; % 单位:m²
areaObj.DataType = 'single';
areaObj.StorageClass = 'Define';
addEntry(dDataSectObj, 'FrontalArea', areaObj);
% 重力加速度
gravObj = Simulink.Parameter;
gravObj.Value = 9.81; % 单位:m/s²
gravObj.DataType = 'single';
gravObj.StorageClass = 'Define';
addEntry(dDataSectObj, 'GravityConst', gravObj);
% 保存并关闭字典
saveChanges(myDictObj);
close(myDictObj);
disp('数据字典创建完成:VehicleData.sldd');
模型引用与验证
在Simulink模型中,通过模型资源管理器将上述字典附加到模型(Model Properties → Data Dictionary)。随后在模型中使用Signal Specification模块或直接连线时输入信号名称,即可自动解析为字典中定义的信号对象。参数对象可直接在模块参数(如Gain模块的增益值)中填写DragCoeff等名称。
验证方法:在模型中使用
Ctrl+D更新图后,检查模型编译是否报错;若编译通过,则说明所有信号/参数名称均被字典正确解析。进一步执行Ctrl+B生成代码,在生成的.h文件中应看到:extern float VehicleSpeed;等全局变量声明(对应ExportedGlobal信号),以及#define DragCoeff 0.32F等宏定义(对应Define参数)。若生成代码中属性与字典设置一致,则判定通过。
数据管理结构示意
判定标准
完成上述定义与模型引用后,按以下标准验证任务闭环:
- 数据字典文件
VehicleData.sldd成功创建,且包含全部7个对象; - 模型附加字典后更新图无错误,所有信号/参数名称均被解析;
- 生成代码中,
ExportedGlobal信号以extern全局变量形式出现,Define参数以#define宏形式出现,ImportedExtern参数以extern声明形式出现; - 数据类型均为
single,初始值与设定一致。
满足以上条件即表示数据管理定义成功,可在后续模型开发中直接复用该字典。