excel只能从文件打开_MScript第9弹——EXCEL与数据字典管理(一)

    在 MScript第3弹——从EXCEL自动生成Signal和Parameter到Workspace中 一文中,我们将所有设计数据都定义在基础工作区。

    将设计数据存储位置设置在基础工作区,可以方便对参数数值进行修改,特别适合在开发初期仿真或快速原型阶段,临时存储设计数据。

b149f75685d9eed768c87521e4def877.png

    而开发过程中需要长久性的存储设计数据时一般会使用数据字典的形式来进行存储,使用数据字典代替基础工作区来分区数据、跟踪更改、控制访问和共享数据。

a7e3448d1090ffe62dc0f6b412633b29.png

    当然,如果从模型最终的产物代码来说,不管是用基础工作区还是用数据字典,生成的代码都是一样的。


什么是数据字典?

    在Simulink中,数据字典用于存储定义参数和信号的设计数据,也包括模型设置相关的数据。

89a68ff73ffdf30d76c2debf84e39992.png

    以MATLAB2016b中的数据字典为例,数据字典使用sldd文件格式,可在Model Explorer中打开,数据字典中包括三个部分:

  •     Design Data:包含定义参数、信号以及决定模型行为的设计数据的变量和数据类型。在字典中创建或导入的设计数据存储在此分区中。

  •     Configurations:包含决定如何在仿真过程中配置模型的配置集,如采样时间和仿真开始时间。

  •     Other Data:包含与模型有关但在仿真过程中模型不使用的信息,例如描述模型所表示的物理设备和过程的数据。

    在较新版本的MATLAB中另外还有Embedded Coder Dictionary:包含用于 Embedded Coder 的代码生成定义。


使用EXCEL管理数据

    我们在对模型设计数据的管理时,可以直接使用数据字典进行管理,包括编辑、添加、删除参数或信号等操作。而实际项目共享设计数据时,对方可能未使用或者安装有MATLAB,此时使用EXCEL来进行设计数据管理,并共享是一种比较方便可行的方式。

    例如我们可以设计一个设计数据EXCEL模板,模板中尽可能多的涵盖参数或信号的相关信息

信号数据:

10915727bf4d940a5582a2753fc20322.png

参数数据:

8cca979ff518cfc42333bf5f6b10aec2.png


EXCEL导入数据字典

实现思路

  1. 读取EXCEL生成m文件

  2. 新建数据字典sldd文件

  3. 数据字典导入m文件

Step1.读取EXCEL生成m文件

    这里偷个懒,代码可参见MScript第3弹——从EXCEL自动生成Signal和Parameter到Workspace中一文。可以根据实际需要,修改或添加代码,对EXCEL中的信息是否完全提取或者选择部分进行提取。

    生成m文件格式大致如下,主要包含有参数、信号的定义。

c40bafa9d5f98d4942c993562e706607.png

Step2.新建数据字典sldd文件

见Step3代码

Step3.数据字典导入m文件

主要涉及以下几个功能函数:

  • Simulink.data.dictionary.create 新建数据字典

  • Simulink.data.dictionary.open 打开数据字典

  • getSection 获取数据字典分区,设计数据需要导入到Design Data分区

  • importFromFile 从文件导入数据

  • saveChanges 保存数据字典修改

1dad1e953f13d963225e6e78873604bc.gif    

代码在PC端查看更方便哦~

clear;clc;% save data dictionary file name[DataDictName,~,~] = uiputfile('*.sldd','Save as a data dictionary file');if DataDictName ~= 0    exist_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 ~= 0        DataSectObj = getSection(NewDictObj,'Design Data');        % import matlab file        ImportedVars = importFromFile(DataSectObj,FileName,'existingVarsAction','overwrite');        % save changessaveChanges(NewDictObj);        % msgboxmsgbox('New sldd file has been created.');    endend

实现效果

运行代码,弹窗设置保存sldd文件名

ef29dccd7a6dd9f238cd86aeb3d62f40.png

弹窗选择需要导入的m文件

c33997dee13f453a3915fa6e28098dc2.png

导入成功

585dcfa5a76dd0f5250295ef4e88f08d.png

可用ModelExplorer打开生成的sldd文件

719d2d4d6def3f5fde24e6cc2df752f8.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值