我是靠谱客的博主 还单身雨,最近开发中收集的这篇文章主要介绍Matlab脚本创建simulink模型,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

本文介绍如何用simulink脚本全自动创建simulink模型。

先列举一些用到的函数:

new_system(name)   %创建系统
save_system(sys,newsys)  %保存系统sys,其中newsys是路径
open_system( model_name ) %参数填全路径名
find_system(model_name)
add_block(source,dest)  %增加模块,通常source用库浏览器看到模块的路径
delete_block(blockArg)  %从系统中删除指定的模块
add_line(sys,out,in)  %在sys中从out连线到in

具体效果参见下面例子

Save_Path = 'C:code';
Model_Name = 'test';
open_system( new_system(Model_Name));
save_system(Model_Name, [Save_Path Model_Name '.slx']);
add_block('simulink/Sources/Pulse Generator', [Model_Name '/Pulse1']);
add_block('simulink/Sources/Pulse Generator', [Model_Name '/Pulse2']);
add_block('simulink/Logic and Bit Operations/Logical Operator', [Model_Name '/LogicOperator1']);
add_block('simulink/Commonly Used Blocks/Out1', [Model_Name '/Out1']);
add_line(Model_Name, 'Pulse1/1', 'LogicOperator1/1');
add_line(Model_Name, 'Pulse2/1', 'LogicOperator1/2');
add_line(Model_Name, 'LogicOperator1/1', 'Out1/1');

运行得到的模型如下图

 布局可能会乱。add_block也没有指定位置的参数。当然可以通过get_param([Model_Name '/Pulse1'], 'Position')查看位置参数,用的是Windows默认坐标系,即左上角是原点,向右是x轴,向下是y轴。然后通过set_param设置位置参数进行布局。

封装子系统的关键是把子系统看成1个模块,注意在子系统中加线格式为

add_line([Model_Name '/subsystem1'], 'In1/1', 'LogicOperator1/1');

完整的封装子系统例子如下

Save_Path = 'C:code';
Model_Name = 'test';
open_system( new_system(Model_Name));
save_system(Model_Name, [Save_Path Model_Name '.slx']);
add_block('simulink/Ports & Subsystems/Subsystem', [Model_Name '/subsystem1']);
add_block('simulink/Sources/Pulse Generator', [Model_Name '/Pulse1']);
add_block('simulink/Sources/Pulse Generator', [Model_Name '/Pulse2']);
add_block('simulink/Logic and Bit Operations/Logical Operator', [Model_Name '/subsystem1/LogicOperator1']);
add_block('simulink/Commonly Used Blocks/In1', [Model_Name '/subsystem1/In2']);
add_line([Model_Name '/subsystem1'], 'In1/1', 'LogicOperator1/1');
add_line([Model_Name '/subsystem1'], 'In2/1', 'LogicOperator1/2');
add_line(Model_Name, 'Pulse1/1', 'subsystem1/1');
add_line(Model_Name, 'Pulse2/1', 'subsystem1/2');

封装子系统

如果想要封装一些已存在的模块,用下列代码

bh1 = add_block(...);
bh2 = add_block(...);
bh3 = add_block(...);
blocksHandle = [bh1,bh2,bh3];
Simulink.BlockDiagram.createSubsystem(blocksHandle ,'Name','subsystem');

或者整个子系统内部模块再封装为子系统

Save_Path = 'C:code';
Model_Name = 'test';
open_system( new_system(Model_Name));
save_system(Model_Name, [Save_Path Model_Name]);
add_block('simulink/Ports & Subsystems/Subsystem', [Model_Name '/subsystem1']);
add_block('simulink/Sources/Pulse Generator', [Model_Name '/Pulse1']);
add_block('simulink/Sources/Pulse Generator', [Model_Name '/Pulse2']);
add_block('simulink/Logic and Bit Operations/Logical Operator', [Model_Name '/subsystem1/LogicOperator1']);
add_block('simulink/Commonly Used Blocks/In1', [Model_Name '/subsystem1/In2']);
delete_line([Model_Name '/subsystem1'], 'In1/1', 'Out1/1');
add_line([Model_Name '/subsystem1'], 'In1/1', 'LogicOperator1/1');
add_line([Model_Name '/subsystem1'], 'In2/1', 'LogicOperator1/2');
add_line([Model_Name '/subsystem1'], 'LogicOperator1/1','Out1/1');
add_line(Model_Name, 'Pulse1/1', 'subsystem1/1');
add_line(Model_Name, 'Pulse2/1', 'subsystem1/2');
handle = Simulink.findBlocks( [Model_Name '/subsystem1'] );
Simulink.BlockDiagram.createSubsystem(handle, 'Name', 'sub');

运行仿真

运行simulink模型仿真的语句为

simOut = sim(model)

返回类型是Simulink.SimulationOutput 对象,包含错误信息。

查找信号线

Save_Path = 'C:code';
Model_Name = 'test';
open_system( [Save_Path Model_Name '.slx'] );

X = get_param([Model_Name '/Subsystem'] , 'LineHandles');
X.Inport(1,1)
Y = get_param( X.Inport(1,1) , 'ObjectParameters');
src = get_param( X.Inport(1,1) , 'SrcBlockHandle');
des = get_param( X.Inport(1,1) , 'DstBlockHandle');

如果把LineHandles换成PortHandles,也可以类似查找连线的模块。

最后

以上就是还单身雨为你收集整理的Matlab脚本创建simulink模型的全部内容,希望文章能够帮你解决Matlab脚本创建simulink模型所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(79)

评论列表共有 0 条评论

立即
投稿
返回
顶部