帮一个老师写的小工具

在一个大工程中需要很多bus来组织信号,而为了规范接口,需要定义很多BusObject,用Matlab语言手写这些BusObject比较费工夫

所以用xml配置文件来写,也便于更改总线数据接口,然后使用matlab脚本来生成BusObject和Bus模块库

以下代码运行环境:WIN10+Matlab2015a

下面给出代码Matlab函数的代码:

function xmlbuscreator(xmlfile)
% XMLBUSCREATOR:从xml文件读取数据结构,并生成bus
% xmlbuscreator(xmlfile):从xmlfile文件读取bus定义,并生成总线
%% 读取文件并提取信号
try
xdoc = xmlread(xmlfile);
catch
error('读取XML文件:%s失败.',xmlfile);
end
BusLibElement = xdoc.getElementsByTagName('BusLib');
BusLibItem = BusLibElement.item(0);
BusLibName = BusLibItem.getAttribute('Name');
BusObjList = BusLibItem.getElementsByTagName('BusObject');
BusObjNum = BusObjList.getLength;
BusInfo = cell(BusObjNum,1);
for i = 1:BusObjNum
BusObj = BusObjList.item(i-1);
BusName = char(BusObj.getAttribute('Name'));
BusElementsList = BusObj.getElementsByTagName('BusElement');
ElementNum = BusElementsList.getLength;
% 如何分配一个结构体数组,BusElements = struct();
for j = 1:ElementNum
ele = BusElementsList.item(j-1);
BusElements(j) = Simulink.BusElement;
try
BusElements(j).Name = char(ele.getAttribute('Name'));
BusElements(j).DataType = char(ele.getAttribute('DataType'));
BusElements(j).Dimensions = str2double(ele.getAttribute('Dimensions'));
BusElements(j).SampleTime = -1;
BusElements(j).Complexity = 'real';
BusElements(j).SamplingMode = 'Sample based';
catch me
error(me.message);
end
end BusObject = Simulink.Bus;
BusObject.HeaderFile = '';%默认无头文件
BusObject.Description = '';
BusObject.DataScope = 'Auto';
BusObject.Alignment = -1;
BusObject.Elements = BusElements;
assignin('base',BusName,BusObject);
BusInfo{i}.BusName = BusName;
BusInfo{i}.Inputs = ElementNum;
end
%% 生成Bus模块
if verLessThan('simulink','8.1')%2013a之前用mdl,之后用slx
mdlExt = '.mdl';
else
mdlExt = '.slx';
end
BusLibFile = char(BusLibName);
if exist([BusLibFile,mdlExt])
delete([BusLibFile,mdlExt]);%删除原先存在的模型
end
close_system(BusLibFile,0);
new_system(BusLibFile,'Library');
load_system(BusLibFile);
for i = 1:BusObjNum
busblock = add_block('built-in/BusCreator',[BusLibFile,'/',BusInfo{i}.BusName],'Position',[15+(i-1)*115,19,65+(i-1)*115,121]);
set_param(busblock,'OutDataTypeStr',['Bus:',BusInfo{i}.BusName]);
set_param(busblock,'Inputs',num2str(BusInfo{i}.Inputs));
end
save_system(BusLibFile);
open_system(BusLibFile);

下面是给出来配置Bus的xml代码:xmlbus.xml

 <BusLib Name='BusLib3'>
<BusObject Name='Bus1'>
<BusElement Name='signal1' DataType='double' Dimensions='1' />
<BusElement Name='signal2' DataType='uint8' Dimensions='2' />
<BusElement Name='signal3' DataType='real' Dimensions='3' />
</BusObject> <BusObject Name='Bus3'>
<BusElement Name = 'signal1' DataType='double' Dimensions='1' />
<BusElement Name='signal2' DataType='uint8' Dimensions='2' />
</BusObject>
</BusLib>

以前没咋用过xml,估计写的有很多该规范的地方,欢迎大家指正。

下面是主代码:

xmlfile = 'xmlbus.xml';
xmlbuscreator(xmlfile);

运行上面代码,则可以生成BusLib3.slx文件,里面包含两个Bus如下图所示:

可以看出,生成的两个Bus符合预设的条件,完工。

第一篇记录编程的博客,比较粗糙,发现问题的哥们尽管喷

Matlab中使用脚本和xml文件自动生成bus模块的更多相关文章

  1. 根据xml文件自动生成xsd文件

    根据xml生成xsd文档 1. 找到vs自带的xsd.exe工具所在的文件夹位置: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin 注意 ...

  2. Loadrunner脚本读取 XMl 文件

    Loadrunner脚本读取 XMl 文件 性能测试工程师要懂代码么?答案是必须的,好多测试员认为在 loadrunner 中编写脚本很难很牛 X . 好多人认为 loadrunner 只支持 C 语 ...

  3. java中采用dom4j解析xml文件

    一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4 ...

  4. Spring中加载ApplicationContext.xml文件的方式

    Spring中加载ApplicationContext.xml文件的方式 原文:http://blog.csdn.net/snowjlz/article/details/8158560 1.利用Cla ...

  5. C#程序中:如何删除xml文件中的节点、元素。

    C#中动态的清理xml文件中的垃圾信息是程序员必会的哦.这就像数据库一样,不会清理数据怎么可以呢?其实xml文件就可以用作一个小的数据库,存储一些简单的信息.所以,用C#程序实现xml文件的增.删.改 ...

  6. selector是在文件夹drawable中进行定义的xml文件。

    获取Drawable对象: Resources res = mContext.getResources(); Drawable myImage = res.getDrawable(R.drawable ...

  7. 设置MATLAB中Current Folder的默认文件夹(转载)

    设置MATLAB中Current Folder的默认文件夹 在我们使用MATLAB的过程中,其Current Folder面板会给我们带来一定的便利性.但遗憾的是,MATLAB自身没有提供友好的设置界 ...

  8. VC 使用msxml6.dll动态链接库中的函数读写XML文件

    VC 使用msxml6.dll动态链接库中的函数读写XML文件 目录 1 引言 2 .dll使用方法 3 常用函数总结 4 实例应用 5 运行效果预览 6 补充说明 7 不足之处 8 更新   引言: ...

  9. selector是在文件夹drawable中进行定义的xml文件转载 https://www.cnblogs.com/fx2008/p/3157040.html

    获取Drawable对象: Resources res = mContext.getResources(); Drawable myImage = res.getDrawable(R.drawable ...

随机推荐

  1. 【Nginx 大系】Nginx服务器面面观

    Nginx官方文档中文版 1. 先看看百度百科对Nginx 的解释: nginx_百度百科 2. 下面的博客就是讲 Nginx的安装方法和 具体的配置文件的使用介绍的很详细,可以仔细阅读下 [好]Ng ...

  2. 更新整理本人所有博文中提供的代码与工具(Java,2014.01)

    为了更方便地管理博文中涉及的各种代码与工具资源,现在把这些资源迁移到 Google Code 中,有兴趣者可前往下载. Java 1.<高效 Java Web 应用开发框架 JessMA v3. ...

  3. [转载]T-SQL(Oracle)语句查询执行顺序

    原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...

  4. jQuery弹出关闭遮罩层

    效果体验:http://keleyi.com/keleyi/phtml/jquery/9.htm 完整代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XH ...

  5. Intent(二)隐式调用intent

    在上一节我们一起学习了显示调用Intent,这一节我们来学习如何隐式调用Ingtent.有了这个我们就可以调用其他的线程,或者程序,可以让我们的应用程序变得多彩,如打开网页,拨打电话等. 接下来让我们 ...

  6. synthesize 与dynamic的区别

    官方文档解释: @synthesize will generate getter and setter methods for your property. @dynamic just tells t ...

  7. Mac使用极简教程

    最近领导让我写一篇关于Mac的使用教程,因为使用人群未知,所以尽量写的通俗易懂,可谓是关于Mac电脑使用的精简教程吧,在此发表出来以供参考. Mac因为安全性而闻名,我们拥有了一部Mac,那么我们来了 ...

  8. 具备 jQuery 经验的人如何学习AngularJS(附:学习路径)

    这是一个来自stackoverflow的问答,三哥直接把最佳回答搬过来了. 都说AngularJS的学习曲线异常诡异~~~ Q: “Thinking in AngularJS” if I have a ...

  9. 打开MySQL数据库远程访问的权限

    说明:转自,http://www.cnblogs.com/ycsfwhh/archive/2012/08/07/2626597.html    本人亲测方法1有效,方法2待验证 下载GPL版本安装 M ...

  10. 将String转化成Stream,将Stream转换成String

    using System;using System.IO;using System.Text;namespace CSharpConvertString2Stream{     class Progr ...