以下平台同步更新,欢迎喜欢的朋友收藏、分享
知乎专栏:汽车电控杂谈微信公众号:AutoGeeker
在从EXCEL自动生成Signal和Parameter到Workspace中一文中,我们将所有设计数据都定义在基础工作区。
将设计数据存储位置设置在基础工作区,可以方便对参数数值进行修改,特别适合在开发初期仿真或快速原型阶段,临时存储设计数据。
而开发过程中需要长久性的存储设计数据时一般会使用数据字典的形式来进行存储,使用数据字典代替基础工作区来分区数据、跟踪更改、控制访问和共享数据。
当然,如果从模型最终的产物代码来说,不管是用基础工作区还是用数据字典,生成的代码都是一样的。
什么是数据字典?
在Simulink中,数据字典用于存储定义参数和信号的设计数据,也包括模型设置相关的数据。
以MATLAB2016b中的数据字典为例,数据字典使用sldd文件格式,可在Model Explorer中打开,数据字典中包括三个部分:
- Design Data:包含定义参数、信号以及决定模型行为的设计数据的变量和数据类型。在字典中创建或导入的设计数据存储在此分区中。
- Configurations:包含决定如何在仿真过程中配置模型的配置集,如采样时间和仿真开始时间。
- Other Data:包含与模型有关但在仿真过程中模型不使用的信息,例如描述模型所表示的物理设备和过程的数据。
在较新版本的MATLAB中另外还有Embedded Coder Dictionary:包含用于 Embedded Coder 的代码生成定义。
使用EXCEL管理数据
我们在对模型设计数据的管理时,可以直接使用数据字典进行管理,包括编辑、添加、删除参数或信号等操作。而实际项目共享设计数据时,对方可能未使用或者安装有MATLAB,此时使用EXCEL来进行设计数据管理,并共享是一种比较方便可行的方式。
例如我们可以设计一个设计数据EXCEL模板,模板中尽可能多的涵盖参数或信号的相关信息
信号数据:
参数数据:
EXCEL导入数据字典
实现思路:
- 读取EXCEL生成m文件
- 新建数据字典sldd文件
- 数据字典导入m文件
Step1.读取EXCEL生成m文件
这里偷个懒,代码可参见从EXCEL自动生成Signal和Parameter到Workspace中一文。可以根据实际需要,修改或添加代码,对EXCEL中的信息是否完全提取或者选择部分进行提取。
生成m文件格式大致如下,主要包含有参数、信号的定义。
信号、参数使用Signal和Parameter进行定义,向刚接触Simulink的同学推荐一本教程
京东链接如下:
Step2.新建数据字典sldd文件
见Step3代码
Step3.数据字典导入m文件
主要涉及以下几个功能函数:
- Simulink.data.dictionary.create 新建数据字典
- Simulink.data.dictionary.open 打开数据字典
- getSection 获取数据字典分区,设计数据需要导入到Design Data分区
- importFromFile 从文件导入数据
- saveChanges 保存数据字典修改
clear;clc;% save data dictionary file name
[DataDictName,~,~] = uiputfile('*.sldd','Save as a data dictionary file');if DataDictName ~= 0exist_flag = exist(DataDictName,'file');if exist_flag == 0% creat new sldd file in current working folder.NewDictObj = Simulink.data.dictionary.create(DataDictName);
else% open existing sldd file .NewDictObj= Simulink.data.dictionary.open(DataDictName);end% import matlab file to data dictionary [FileName,~,~] = uigetfile('*.m','Import from Matlab file');
if FileName ~= 0DataSectObj = getSection(NewDictObj,'Design Data');% import matlab fileImportedVars = importFromFile(DataSectObj,FileName,'existingVarsAction','overwrite');% save changes
saveChanges(NewDictObj);% msgbox
msgbox('New sldd file has been created.');end
end
实现效果
运行代码,弹窗设置保存sldd文件名
弹窗选择需要导入的m文件
导入成功
可用ModelExplorer打开生成的sldd文件