Matlab编程技巧:通过脚本创建Simulink模块、信号线
2022/1/10 22:04:10
本文主要是介绍Matlab编程技巧:通过脚本创建Simulink模块、信号线,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文研究通过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');
然后在模型中就会出现一个Scope模块,同时名字被改成了MyScope:
1.2 创建信号线
函数 | add_line(sys,out,in) |
---|---|
输入参数 | 1)sys——模型或子系统名;2)out——信号线起始位置;3)out——信号线中止位置 |
返回值 | / |
这个函数的用法也不难,例如在untitled模型中有两个模块如下:
然后在Matlab中运行如下函数:
>> add_line('untitled','Constant/1','MyScope/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
3)将上面的脚本保存成m文件,并运行,就可以通过表格生成模型;
模块和子系统都放在了默认的位置,所以不是很好看。可以自己手动调整一下模块和信号线。
实际工作中如果想生成模型架构肯定不会这么简单,要按照项目需求来编写脚本。但是用到的函数无非就是那几个,只是不同的排列组合的使用罢了。
生成好架构以后,子系统里面的控制策略就需要工程师按照需求来实施了。
3 总结
本文研究通过Matlab脚本创建模型的方法,通过该方法可以批量生成规范的模型架构,降低工作中出错的机率。
>>返回个人博客总目录
这篇关于Matlab编程技巧:通过脚本创建Simulink模块、信号线的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南