首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Matlab编程技巧:通过脚本创建Simulink模块、信号线

  • 23-09-22 00:44
  • 3734
  • 5623
blog.csdn.net

本文研究通过Matlab脚本创建模型的方法。

文章目录

  • 1 相关函数
    • 1.1 创建模块
    • 1.2 创建信号线
  • 2 实际应用
  • 3 总结

1 相关函数

根据博主工作经验,一个Simulink控制模型应该是由两大元素构成:模块和信号线。因此,通过Matlab脚本创建模型也有两个函数分别用于创建模块和信号线,本章节会介绍这两个函数。

1.1 创建模块

函数add_block(source,dest)
输入参数1)source——被拷贝的模块路径;2)dest——新模块的路径
返回值/

函数的两个参数中,source参数通常是Simulink库里的模块,也可以是别的模型中的模块。例如我们创建一个名为untitled的模型(模型需要保持打开的状态),然后在Matlab中运行如下函数:

>> add_block('simulink/Sinks/Scope','untitled/MyScope');
  • 1

然后在模型中就会出现一个Scope模块,同时名字被改成了MyScope:
在这里插入图片描述

1.2 创建信号线

函数add_line(sys,out,in)
输入参数1)sys——模型或子系统名;2)out——信号线起始位置;3)out——信号线中止位置
返回值/

这个函数的用法也不难,例如在untitled模型中有两个模块如下:
在这里插入图片描述
然后在Matlab中运行如下函数:

>> add_line('untitled','Constant/1','MyScope/1')
  • 1

其中,Constant/1代表Constant模块的第一个输出口,MyScope/1代表MyScope模块的第一个输入口。运行好了以后,线就连起来了。
在这里插入图片描述
该函数还可以通过port口的句柄来连接模块,可以参考帮助文档。

2 实际应用

博主相信应该没有谁用脚本把整个Simulink模型创建出来的,那可不现实。那么为什么要研究通过脚本创建模块和信号线呢。其实是为了生成标准的接口和框架,然后由工程师在整个框架内建模。下面博主会演示一个例子,通过表格生成一个最外层的子系统,以及子系统的输入输出Port。

1)首先自己创建一个表格,名为Model_1.xlsx,表格内容如下;
在这里插入图片描述
表格里面比较简单,写了模型的输入输出接口名称,以及数据类型。另外,一个Worksheet对应一个子系统,一个Worksheet名称为Subsystem1。

2)有了表格模板以后,需要编写一个脚本,来循环读取工作表,以及工作表中的每一行。这里,博主就直接贴出自己写的脚本(带有注释),里面的函数和方法都是其他以前写的博客讲过的,就不再细说。

%% 通过表格生成模型框架
function GenerateModelFromExcel()
File_Struct = dir('*.xlsx');
for i = 1:length(File_Struct) %遍历当前路径下的xlsx文件
    Excel_Name = File_Struct(i).name;
    Model_Name = strrep(Excel_Name,'.xlsx','');
    new_system(Model_Name);%创建模型
    open_system(Model_Name);%打开模型
    [~,Sheet_Cell] = xlsfinfo(Excel_Name);
    for j = 1:length(Sheet_Cell) %遍历当前Excel中的Sheet页
        Sheet_Name = Sheet_Cell{j};
        add_block('simulink/Ports & Subsystems/Subsystem',[Model_Name,'/',Sheet_Name]);
        Line_Handle = find_system([Model_Name,'/',Sheet_Name],'FindAll','on','Type','Line');
        delete(Line_Handle);delete_block([Model_Name,'/',Sheet_Name,'/In1']);delete_block([Model_Name,'/',Sheet_Name,'/Out1']);
        [~,~,ExcelContent_Cell] = xlsread(Excel_Name,Sheet_Name);
        PortNum = 1;
        for row = 2:size(ExcelContent_Cell,1) %遍历当前Sheet页的每一行
            if ~isnan(ExcelContent_Cell{row,1})%在子系统内外层添加Inport模块
                Inport_Name = ExcelContent_Cell{row,1};
                Inport_Type = ExcelContent_Cell{row,2};
                add_block('simulink/Ports & Subsystems/In1',[Model_Name,'/',Sheet_Name,'/',Inport_Name]);
                set_param([Model_Name,'/',Sheet_Name,'/',Inport_Name],'DataType',Inport_Type);
                add_block('simulink/Ports & Subsystems/In1',[Model_Name,'/',Inport_Name]);
                set_param([Model_Name,'/',Inport_Name],'DataType',Inport_Type);
                add_line(Model_Name,[Inport_Name,'/1'],[Sheet_Name,'/',num2str(PortNum)]);
            end
            if ~isnan(ExcelContent_Cell{row,3})%在子系统内外层添加Outport模块
                Outport_Name = ExcelContent_Cell{row,3};
                Outport_Type = ExcelContent_Cell{row,4};
                add_block('simulink/Ports & Subsystems/Out1',[Model_Name,'/',Sheet_Name,'/',Outport_Name]);
                set_param([Model_Name,'/',Sheet_Name,'/',Outport_Name],'DataType',Outport_Type);
                add_block('simulink/Ports & Subsystems/Out1',[Model_Name,'/',Outport_Name]);
                set_param([Model_Name,'/',Outport_Name],'DataType',Outport_Type);
                add_line(Model_Name,[Sheet_Name,'/',num2str(PortNum)],[Outport_Name,'/1']);
            end
            PortNum = PortNum + 1;
        end        
    end
    save_system(Model_Name);
    close_system(Model_Name)
    
end

end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

3)将上面的脚本保存成m文件,并运行,就可以通过表格生成模型;
在这里插入图片描述
模块和子系统都放在了默认的位置,所以不是很好看。可以自己手动调整一下模块和信号线。
在这里插入图片描述
实际工作中如果想生成模型架构肯定不会这么简单,要按照项目需求来编写脚本。但是用到的函数无非就是那几个,只是不同的排列组合的使用罢了。

生成好架构以后,子系统里面的控制策略就需要工程师按照需求来实施了。

3 总结

本文研究通过Matlab脚本创建模型的方法,通过该方法可以批量生成规范的模型架构,降低工作中出错的机率。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/122202612"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top