Matlab中使用脚本和xml文件自动生成bus模块

帮一个老师写的小工具

在一个大工程中需要很多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

 1 <BusLib Name=‘BusLib3‘>
 2     <BusObject Name=‘Bus1‘>
 3         <BusElement Name=‘signal1‘ DataType=‘double‘ Dimensions=‘1‘ />
 4         <BusElement Name=‘signal2‘ DataType=‘uint8‘ Dimensions=‘2‘ />
 5         <BusElement Name=‘signal3‘ DataType=‘real‘ Dimensions=‘3‘ />
 6     </BusObject>
 7
 8     <BusObject Name=‘Bus3‘>
 9         <BusElement Name = ‘signal1‘ DataType=‘double‘ Dimensions=‘1‘ />
10         <BusElement Name=‘signal2‘ DataType=‘uint8‘ Dimensions=‘2‘ />
11     </BusObject>
12 </BusLib>

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

下面是主代码:

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

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

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

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

时间: 2024-10-11 04:41:33

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

JavaWeb项目中WEB-INF目录下class文件自动生成以及显示

问题一:WEB-INF目录下的class字节文件是自动生成的,还是需要手动创建相关目录,然后再将字节件复制进去? 可以让eclipse自动生成 source folder:存放.java源文件的根目录 output folder:.class编译输出的根目录纯"java project"中,一般把"src"设置为source folder,把bin设置为output folder "web project"中,一般把"src"

Loadrunner脚本读取 XMl 文件

Loadrunner脚本读取 XMl 文件 性能测试工程师要懂代码么?答案是必须的,好多测试员认为在 loadrunner 中编写脚本很难很牛 X . 好多人认为 loadrunner 只支持 C 语言(包括我之前也一直这么认为),因为 loadrunner 默认的脚本是 C 语言的,其实它支持目前所有主流的语言,如: Java User . VB User . VB script User  . Javascript User . Mmicrosoft .NET 等,总有一款适合你的吧,最起码

JAVA中使用DOM解析XML文件

JAVA中使用DOM解析XML文件: 创建DocumentBuilderFactory的对象                                 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 创建DocumentBuilder对象 通过documentBuilder对象的parser方法加载xml文件到当前项目下 获取所有XML文件内节点的集合    getElementsByTagName()方

java中采用dom4j解析xml文件

一.前言 在最近的开发中用到了dom4j来解析xml文件,以前听说过来解析xml文件的几种标准方式:但是从来的没有应用过来,所以可以在google中搜索dmo4j解析xml文件的方式,学习一下dom4j解析xml的具体操作. 二.代码详情    dom4j是一个第三方开发组开发出的插件,所以在我们使用dom4jf的时候我们要去下载一下dom4j对应版本的jar导入在我们项目中.  1)xml文件: <?xml version="1.0" encoding="UTF-8&

Android中解析与创建XML文件

Android中解析与创建XML文件 在Android中对XML的操作有多种方式,常见的有三种方式:SAX.DOM和PULL方式. DOM方式会把整个XML文件加载到内存中,在PC上常使用DOM的方式. 但是在性能敏感的设备上,主要采用的是SAX的方式,但是缺点是嵌套多个分支的时候处理不是很方便. 而PULL的方式类似SAX方式,同样很节省内存. 因此,本文章中只提供PULL的方式解析与创建XML文件. 基础类 本例中使用的实体类的定义如下: public class CAddress impl

Linux设备文件自动生成

第一种是使用mknod手工创建:# mknod <devfilename> <devtype> <major> <minor> 第二种是自动创建设备节点:利用udev(mdev)来实现设备文件的自动创建,首先应保证支持udev(mdev),由busybox配置. 具体udev相关知识这里不详细阐述,可以移步Linux 文件系统与设备文件系统 -- udev 设备文件系统,这里主要讲使用方法. 在驱动用加入对udev 的支持主要做的就是:在驱动初始化的代码里调

Eclipse中设置在创建新类时自动生成注释

方法一:Eclipse中设置在创建新类时自动生成注释 windows-->preference Java-->Code Style-->Code Templates code-->new Java files 编辑它 ${filecomment} ${package_declaration} /** * @author 作者 E-mail: * @version 创建时间:${date} ${time} * 类说明 */ ${typecomment} ${type_declarat

【Java】Eclipse新建的Java文件自动生成主函数、控制台输出行数不再受限制

一.新建的Java文件自动生成主函数 虽然只是一个很简单的事情,但应该还是有人不知道了,每次新建Java文件都要手动输入public static void main(String args[]){},非常麻烦,其实Eclipse可以自动生成这行,只是大多数的Java文件都是没有主函数的,所以这行默认关闭, 右击Java项目下的src可以选择New->Class也就可以新建类 然后在弹出的对话框上勾上自动产生主函数,点击确认,在生产的Java文件中就有主函数了 二.Eclipse控制台输出行数不

【Latex】Latex小白入门(2)——如何用.bib文件自动生成论文Reference

写在前面: 在研究生阶段搞学术的童鞋们很有可能会接触到Latex这种论文格式编辑工具,一般在论文投稿的时候,大多数期刊和会议会给一个Latex模板,要求将你的论文用Latex编辑成.pdf版本.这里的Latex小白可不是指各位读者,而是我自己.才开始用Latex的时候,team里面唯一会Latex的师姐已经毕业say goodbye了,而我连怎么编译运行都不会.无奈论文要投,只好"赶鸭子上架",秉承"哪里不会查哪里"的精神,完成了几次论文从word到Latex的移植