概述
问题描述
工作中遇到对一些信号的处理,要用到大量同一封装模块,见图
上图中,名为signIn的信号从Inport输入,封装系统端口2、3、4、5均连接Constant模块,值为外部定义的量。这些量的命名特点是:前缀+Port1端口输入信号名或其部分+后缀。比如端口1输入信号名为qwer,端口2、3分别命名为qianzhui2_er_houzhui2,qianzhui3_er_houzhui3,中间er为输入信号名的最后两位,前缀后缀则均不同。需要说明的是,对于不同封装模块的相同端口,其前缀和后缀又是相同的。
解决思路
- 通过名称找到我们需要的封装模块。
- 在找到封装模块后,通过端口句柄寻找输入信号,并获取输入信号名称。
- 取2步骤中获得的信号名加以处理,形成端口2、3、4所需要的信号名,作为Constant模块的Value赋值。
Matlab脚本实现
clear;
subsys_cell = find_system(gcs,'SearchDepth',1,'BlockType','SubSystem');
% 找到当前SYSTEM下所有子系统,SearchDepth可更改
for i = 1:length(subsys_cell)
subsys_handle = get_param(subsys_cell{i},'Handle');
subsys_name = get_parm(subsys_cell{i},'Name');
pre_name = subsys_name(1:7); % 取子系统名字前七位,用于选取目标封装模块
if strcmp(pre_name,'aaaaaaa') % 假定目标封装模块命名为aaaaaaa1,aaaaaaa2....
port_handle = get_param(subsys_handle,'PortHandles');
preline_handle = get_param(port_handle.Inport(1),'Line') % 获取输入端口1信号线句柄
presrc_handle = get_param(preline_handle,'SrcBlockHandle');
port1_name = get_param(persrc_handle,'InputSgnalNames');
strpotr1_name = char(port1_name); % 获取端口1输入信号名称并转化为char类型
pre_name = strport1_name(2:end);
% 对信号名进行处理,我需要从第2位开始到结束的字符段,比如qwer,我需要的是er;
preport2_name = strcat('qianzhui1_',pre_name,'_houzhui1');
% 处理端口2输入信号的变量名,最终形式为qianzhui1_er_houzhui1;
preport3_name = strcat('qianzhui2_',pre_name,'_houzhui2');
port2_name = char(perport2_name);
port3_name = cahr(perport3_name);
% 将元胞数转化为char,这样才能作为变量写入Constant的Value
for j = 2:3
line_handel = get_param(port_handle.Inpotr(j),'Line');
src_handle = get_param(line_handle,'SrcBlockHandle');
if j == 2
set_param(src_handle,'Value',potr2_name);
else
set_param(src_handle,'Value',port3_name);
end
end
end
end
有误还请指正。
最后
以上就是矮小蜻蜓为你收集整理的Simulink标定量的自动赋值问题描述解决思路Matlab脚本实现的全部内容,希望文章能够帮你解决Simulink标定量的自动赋值问题描述解决思路Matlab脚本实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复