帮一个老师写的小工具

在一个大工程中需要很多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. c/C++二进制运算符

    c/c++中常用的二进制运算符有六个.这里对这六个做简单的介绍和应用举例. 1.  &  :  与操作.作用于两个二进制数,当然也可以对整型数据进行操作(当两边为整型数据会自动转化为二进制数) ...

  2. “不要抄代码!自己的代码也不要抄!”

    在 Adventure 位于深圳的电子设备组装厂(SZE)里,小朱狠狠的对自己说. 他刚刚在调试 STM32F407VG 的 SPI 功能.就在昨天,他刚刚调试好了 STM32F407VG 的 USA ...

  3. 配置 Oracle 11g侦听器来使用SQL操作ST_Geometry(DLL路径问题)

    注:http://resources.arcgis.com/zh-cn/help/main/10.2/index.html#/na/00qn0000001p000000/ (ArcGIS 帮助库) 1 ...

  4. 免费薪资总额管控系统-JXHR2016

    •工资总额是指按照国家统计局规定的统计口径或企业规定,在一定时期内支付给各类用工的劳动报酬总额 •工资总额,即基本工资,包括岗位工资.各项津补贴 •JXHR2016以薪酬管控为核心,结合人力资源规划. ...

  5. Day Tips:关于搜索小问题

    1.如果想重启SPSearchHostController请确保没有服务在运行,如果有爬网运行可能会导致重启失败,使之处于stoping状态,不过遇到这个状态也不要紧使用 taskkill /f /f ...

  6. Android—实现自定义相机倒计时拍照

    这篇博客为大家介绍Android自定义相机,并且实现倒计时拍照功能 首先自定义拍照会用到SurfaceView控件显示照片的预览区域,以下是布局文件: 两个TextView是用来显示提示信息和倒计时的 ...

  7. Reveal1.5破解,iOS_UI调试利器Reveal最新版本破解方法

    Reveal1.0.7破解 1.官网下载最新版Reveal,拖动应用程序中,运行一次2.下载16进制编辑器"0xED" for mac(http://dl.vmall.com/c0 ...

  8. 解析UML箭头、线条代表的意义(转)

    在学习UML过程中,你经常会遇到UML类图关系,这里就向大家介绍一下UML箭头.线条代表的意义,相信通过本文的介绍你对UML中箭头.线条的意义有更明确的认识. AD: 本节向大家学习一下UML箭头.线 ...

  9. iPhone 丢失

    http://www.appvv.com/zhuanti/iccid/ 第一步:iPhone丢失后,及时报警,在最短时间内补办SIM卡或把卡停掉. 第二步:输入查询网址:sn.appvv.com 输入 ...

  10. RMAN-06023: no backup or copy of datafile 1 found to restore

    在ORACLE 10g数据库还原过程遭遇RMAN-06023: no backup or copy of datafile x found to restore,具体情况如下所示 .......... ...