Change Block Value
 
最近做simulation发现,mdl_advisor竟然不检查enable port 和 action port的设置。 遂对比一下codegen,发现codegen也只对比出了action port的value区别。 Interesting. Happy 100th anniversary.
 
Common Command Conclusion
 
find_system 
查找simulink系统模型/模块/连线及注释;save_system 
保存一个Simulink模型;add_block 
在系统模型中加入指定模块delete_block 
从系统模型中删除指定模块replace_block 
替代系统模型中的指定模块close_system, bdclose 
关闭一个simulink系统模型get_param 
获取系统模型中的参数set_param 
设置系统模型中的参数gcb 
获得当前模块的路径名gcs 
获得当前系统模型的路径名gcbh 
获得当前模块的操作句柄bdroot 
获得最上层系统模型的名称getSimulinkBlockHandle 
从模块路径中获得模块句柄 
Common Command Usage
 
disp_all_val 
= 1;
blk 
= split(gcs
, '/');
blk 
= blk
{1};
%% Enable Block check
.
bl 
= find_system(blk
,'BlockType','EnablePort');  
for i 
= 1:length(bl
)
    if ~strcmp(get_param(bl
{i
},'StatesWhenEnabling'), 'held')
        disp([get_param(bl
{i
},'StatesWhenEnabling') '    ' bl
{i
}]);
        set_param(bl
{i
},'StatesWhenEnabling','held')
        disp(['changed to:  ' get_param(bl
{i
},'StatesWhenEnabling')]);
    elseif disp_all_val
        
disp([get_param(bl
{i
},'StatesWhenEnabling') '    ' bl
{i
}]);
    end
end
save_system(blk
);
 
disp_all_val 
= 1;
%% find model references
topmodel 
= split(gcs
,'/');
topmodel 
= topmodel(1);
refs 
= find_system(topmodel
, 'BlockType', 'ModelReference');
%% Since the coder loves i so much
, there is no j or k
.
for ii 
= 1:length(refs
)
    open_system(refs
{ii
})
    sys_name 
= split(refs
{ii
},'/');
    sys_name 
= sys_name(end
);
    
    blks 
= find_system(sys_name
, 'BlockType', 'SubSystem');
    for i 
= 1:length(blks
)
        hd 
= getSimulinkBlockHandle(blks(i
));
        atts 
= get(hd
);
        if isfield(atts
,'CGPD_Object') && isfield(atts
,'pd_sim_dsn')
            ori 
= get_param(blks
{i
}, 'CGPD_Object');
            an 
= ['mt_' lower(ori(8:end
)) 'status'];
            if ~strcmp(get_param(blks
{i
},'pd_sim_dsn'), an
)
                disp([get_param(blks
{i
}, 'CGPD_Object') '   ' get_param(blks
{i
}, 'pd_sim_dsn') '   ' blks
{i
}]);
                set_param(blks
{i
}, 'pd_sim_dsn', an
);
                disp(['changed to: ' get_param(blks
{i
}, 'pd_sim_dsn')])
            elseif disp_all_val
                
disp([get_param(blks
{i
}, 'CGPD_Object') '   ' get_param(blks
{i
}, 'pd_sim_dsn') '   ' blks
{i
}]);
            end
        end
    end
    
    
    
    
save_system(sys_name
)
    close_system(sys_name
)
end
 
我是补充( ̄▽ ̄*) get(gcbh), show current block details
 
我是吐槽(😭) 为毛不支持matlab啊啊啊啊啊。