概述
本文介绍如何用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模型所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复