本文研究如何将Excel表格中的数据字典导入到Matlab工作空间中,并在建模时使用。

文章目录

  • 1 数据字典的概念及管理方式
  • 2 Excel表格模板建立
  • 3 脚本导入数据字典
    • 3.1 导入方法
    • 3.2 m脚本内容
    • 3.3 m脚本简单解释
  • 4 验证与总结

1 数据字典的概念及管理方式

在博主的另一篇博客《Simulink代码生成:数据字典的建立、关联模型》中已经详细地解释了Simulink数据字典地概念以及三种管理方式。其中,第3.2章节介绍了通过Excel表格&m脚本地管理方案。

博主工作中虽然已经不再采用这种方案,但有博友私信问我关于从表格导入数据对象的方法,所以可见这种方案还是倍广泛使用的。仔细思考了一下,这种方案还是具有一定的优势,因为用表格文档比较符合工程师的管理习惯,并且也非常方便沟通和交流。

本文会通过一个简单的Excel案例,和对应的Matlab脚本,来演示这种管理数据字典的方案。

2 Excel表格模板建立

首先需要把Simulink仿真中用到的数据对象按照一定的规律填写到Excel表格中。该表格就是整个项目团队达成共识的模板。模板根据自己的习惯创建。

譬如如下博主用的表格模板,包含了三个工作表:‘Signal’,‘AliasType’,‘Bus’,里面分别存放着Simulink中的三种数据对象。

打开每个工作表,都包含了该类数据对象的各种属性信息。这些属性信息都是在UI界面可以看到的,Matlab中提供了相应的接口可以创建或者修改。



这里有一点要注意的地方,对于数值型的数据,譬如InitialValue或者Dimensions中时数值的i情况,需要在数值前加上单引号,再填入单元格内。这样,Matlab解析出来就是字符串了。

3 脚本导入数据字典

3.1 导入方法

  • 脚本中需要用到xlsread函数来获取表格内容,生成一个单元数组;
  • 通过解析单元数组的内容,获取各个属性信息;
  • 最后通过evalin函数把属性信息写到工作空间中;

3.2 m脚本内容

这一节把整个脚本贴出来,后面再解释一些注意点。

function Import_DD()
%% 表格名称
Excel_Name = 'demo_DD';     %表格名称
evalin('base','clear');     %清空工作空间%% 导入Simulink.Signal
[~,~,Signal_Cell] = xlsread(Excel_Name,'Signal');   %导入Signal工作表为单元数组
for row = 2:size(Signal_Cell,1) %从第2行开始循环处理每一行内容% 提取信号名,数据类型,初始值,存储类型SignalName = Signal_Cell{row,1};         DataType = Signal_Cell{row,2};      InitialValue = Signal_Cell{row,3};  StorageClass = Signal_Cell{row,4}; % 在工作空间中建立该对象并配置其属性evalin('base',[SignalName,' = Simulink.Signal;']);                              evalin('base',[SignalName,'.DataType = ''',DataType,''';']);                    evalin('base',[SignalName,'.InitialValue = ''',InitialValue,''';']);            evalin('base',[SignalName,'.CoderInfo.StorageClass = ''',StorageClass,''';']);
end%% 导入Simulink.AliasType
[~,~,AliasType_Cell] = xlsread(Excel_Name,'AliasType');   %导入AliasType工作表为单元数组
for row = 2:size(AliasType_Cell,1) %从第2行开始循环处理每一行内容% 提取别名、基础类型AliasName = AliasType_Cell{row,1};BaseType = AliasType_Cell{row,2};      % 在工作空间中建立该对象并配置其属性evalin('base',[AliasName,' = Simulink.AliasType;']);evalin('base',[AliasName,'.BaseType = ''',BaseType,''';']);
end%% 导入Simulink.Bus
[~,~,Bus_Cell] = xlsread(Excel_Name,'Bus');   %导入Bus工作表为单元数组
for row = 2:size(Bus_Cell,1) %从第2行开始循环处理每一行内容    %更新Bus名称if ~isnan(Bus_Cell{row,1})  BusName = Bus_Cell{row,1};i = 1;evalin('base',[BusName,' = Simulink.Bus;']);end% 提取元素名称、尺寸、类型BusElementName = Bus_Cell{row,2};Dimensions = Bus_Cell{row,3};DataType = Bus_Cell{row,4};% 建立元素并加入Bus中evalin('base',[BusName,'.Elements(',num2str(i),').Name = ''',BusElementName,''';']);evalin('base',[BusName,'.Elements(',num2str(i),').Dimensions = ',Dimensions,';']);evalin('base',[BusName,'.Elements(',num2str(i),').DataType = ''',DataType,''';']);% Bus元素索引+1i = i + 1;
end
end

3.3 m脚本简单解释

1)脚本其实很好读懂,比较关键的一个点在于evalin函数。该函数帮助我们跨范围执行语句。

因为脚本是在自己的空间内,所以建立数据字典信息也是在脚本自己的范围。用evalin函数,并将其第一个参数设为’base’,就可以在Matlab命令行中执行语句。这样的话,创建对象的操作就是在外面的工作区完成了。

2)关于Bus信号对象的建立,会比Signal对象稍微复杂了一点。

Bus信号包括整个的Bus定义和Bus中的元素的定义,将这两方面区分开来完成即可。

4 验证与总结

将该脚本和demo_DD.xlsx表格放进一个路径下,然后运行该脚本。脚本会清空工作区的所有其他对象,然后重新定义表格中的数据对象。

打开某个对象可以看到,对应的属性已经按照表格中的定义修改了。

总结一下,本文只是通过一个简单的例子演示了从表格导入数据字典到工作空间的过程。实际工作中,对象的数量不会这么少,种类也不止这三种。但是整个工作流程和思路还是差不多的。如果遇到了更多的问题,再见招拆招即可。

>>返回个人博客总目录

Matlab编程技巧:通过脚本导入Excel数据字典相关推荐

  1. Matlab编程技巧:打开模型时加载数据字典

    本文研究通过回调函数,在打开模型时加载数据字典到工作空间中. 文章目录 1 问题引入 2 简单例程 2.1 模型配置 2.2 数据字典表格 2.3 创建脚本 3 效果演示 4 总结 1 问题引入 在& ...

  2. Matlab编程技巧:通过Matlab脚本批量修改Simulink模块的大小,背景颜色

    Matlab编程技巧:通过M脚本修改Simulink模块的大小,背景颜色 M脚本修改Simulink模块的大小,背景颜色 选取一个Simulink模型,获取模块参数,在命令行输入代码: sysBolc ...

  3. Matlab编程技巧:通过脚本获取/修改Simulink信号线参数

    上一篇博客<Matlab编程技巧:批量获取/修改Simulink模块参数>中,说明了如果通过matlab脚本批量获取/修改Simulink模块参数.具体方法可以参考https://blog ...

  4. Matlab编写一个脚本计算e,Matlab编程基础I脚本.PPT

    Matlab编程基础I脚本 数学软件 Matlab 本讲主要内容 Matlab 编程 M 文件 M 文件 编程示例 编程示例 本讲主要内容 关系运算 关系运算举例 逻辑运算 逻辑运算 逻辑运算 一些测 ...

  5. Matlab编程技巧:导入A2L文件

    本文研究如何通过Matlab脚本导入A2L文件,并将A2L文件的一些信息写入表格中. 文章目录 1 A2L文件 2 A2L文件的解析 3 将A2L信息导入表格 3.1 A2L中的变量信息 3.2 Ma ...

  6. 30多个实用matlab编程技巧

    感谢关注懂科学的程序员公众号!如果公众号文章对您有帮助,别忘了点击分享和"在看"哦!若您对公众号有什么意见或建议,请在公众号中回复或在任意文章底部留言! 今天给大家介绍一些编程小技 ...

  7. matlab编程数学基础,数学软件 Matlab ——编程基础(脚本).ppt

    数学软件 Matlab 本讲主要内容 Matlab 编程入门 M 文件 M 文件 编程示例 本讲主要内容 关系运算 关系运算举例 逻辑运算 逻辑运算表 逻辑运算 一些测试函数 运算优先级 本讲主要内容 ...

  8. Matlab编程技巧:文本文件的读写

    在MBD(基于模型的设计)中涉及到了各种各样的文本文件,对文本文件的自动化处理可以大大提高工作效率.本文简单介绍处理文本文件的第一步--导入文本文件到Matlab. 文章目录 1 文本文件 2 读取文 ...

  9. easyexcel导入时读不到数据_java编程中通过easypoi导入excel文件并验证导入数据

    引言 现如今越来越多的web网站或者内部管理web系统都有自己的数据分析中心.其数据中心的数据有些来源于人工单独操作,某些来自人工搜集大量的信息后通过excel文件批量导入进系统.本博客将讲解在jav ...

最新文章

  1. ffmpeg 视频处理命令集合
  2. 经典算法笔记:异常检测和推荐系统
  3. 【NOIP2017模拟6.25】小W的动漫
  4. 食饵捕食者模matlab,几类食饵-捕食者模型的定性分析和数值模拟
  5. 图像的旋转和尺度缩放在对数极坐标系下的研究
  6. mysql csdn 知乎_CSDN 怎么样?
  7. C#坏习惯:通过不好的例子学习如何制作好的代码——第2部分
  8. java-集合(三)
  9. winform 显示分隔控件_WinForm使用Label控件模拟分割线(竖向)
  10. jQuery WeUI学习笔记一
  11. 第一章 Visual Basic入门
  12. 前端rem布局知识总结
  13. 日常办公中的40+电子签场景,覆盖核心业务及岗位签署需求
  14. jquery H5 好用的编辑器umeditor
  15. 跟小静读CLR via C#(06)- 构造器
  16. EZo UIBuilder中嵌入微博分享按钮【实例】
  17. 腾讯云配置密钥使用putty登录
  18. win8/10系统Prolific USB-to-Serial Comm Port 出现该设备无法启动(代码10),指定不存在的设备
  19. 在python将字符串中的空格转换为下划线_如何将下划线替换为空格,反之亦然?...
  20. 确定性网络(DetNet、D-IP)技术

热门文章

  1. 如何定义结构体变量及如何使用
  2. 三个月从GRE小白到327
  3. OD 调试多线程遇到的问题以及解决方法
  4. SSRF测试(Server Side Request Forgery)(owasp)
  5. cesium 加载和删除kmz
  6. J1939协议中CAN ID 与PGN互换--遇到了广播报文
  7. 中国文化及相关产业统计年鉴(2013-2022)
  8. Cmder安装和配置
  9. 公务员想辞职转行做程序员?
  10. springboot租房管理系统源码分享