数字信号处理X——EasySimulink封装和库

目录

一、前言

二、Easy S模板

三、Easy连连看

四、Easy封装和库

五、Easy History库


一、前言

要想写mdl测试用例,就要了解如何使用M脚本批量执行case,每个case如何调用同一层级的输入输出接口,得到它们的属性;这里记录在B站学到的simulink知识,以备后续想用某个函数或者调用属性翻看。

 

二、Easy S模板

function newMdlTmpl(modelname)
%model:name
open_system(new_system(modelname));
%set default screen
set_param(gcs,'ScreenColor','green');
%set default solver
set_param(gcs,'Solver','ode4');
%set system target file
set_param(gcs,'SystemTargetFile','ert.tlc');
%save model
save_system(gcs);

%m_h=load_system('modelname');
%get(m_h) %获取属性 v = get(h,propertyName),p = plot(1:10);get(p)
%set(m_h,Name,Value)%设置属性
%close_system('modelname')%关闭模型

 

三、Easy连连看

mdl_name = 'Link_Delete';
mdl_fullname = [mdl_name,'.slx'];
%delete the generated last time
if exist(mdl_name)
    try
        delete(mdl_name);
        close_system(mdl_name);
    catch
        close_system(mdl_name);
        delete(mdl_name);
    end
end
new_system(mdl_name);
save_system(mdl_name);
open_system(mdl_name);
%define some constant
block_lib_path='Simulink/Commonly Used Blocks/';
lib_block_name = {'Gain','Integrator','Data Type Conversion','Saturation','Delay','Discrete-Time Integrator'};
%block to be selected
block_type_num=length(lib_block_name);
block_num=5;%generate 5 pairs
en_num = 500;%enlarge block position offset
for ii=1:block_num
    ind = randi(block_type_num,[1,1]);
    %copy block into model file as cell format
    src_str = strcat(block_lib_path,lib_block_name(ind));
    dst_str = strcat(mdl_name,'/',lib_block_name(ind));
    %get handle
    block_handle =add_block(src_str{:},dst_str{:},'MakeNameUnique','on');
    pos = get_param(block_handle,'position');
    %another block
    add_block(src_str{:},dst_str{:},'MakeNameUnique','on','position',pos+en_num*rand);
end
%set port callback for all blocks generated in the model
blocks_handle = find_system(gcs,'findall','on','type','block');
for ii=1:block_num*2
   %get current block's properties 
    prop=get(blocks_handle(ii));
    %set callback to each port(import only)
    set(prop.PortHandles.Inport,'ConnectionCallback','delete_pair_blocks');
end

 

四、Easy封装和库

类似C/C++中函数封装一样,对于可重用的模块也可以封装成通用的库。

第一部分是图标

第二部分是控件:除了display外其他控件都有可设置的回调函数和value

后面两部分是初始化和文档管理。

一个简单的demo:

                             

 

五、Easy History库

这里利用封装技术设计一个能够记录模型历史记录的子系统,在工程中还是很有用的!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值