使用 M 脚本更改 Simulink 信号线名称

目录

1. 思路

2. 举例:为选中子系统的信号输出线自动命名

3. 举例:自动将 CAN Unpack 输出信号线命名为 CAN Msg 名称


1. 思路

本质上分为两步:

  1. 找到信号线
  2. 更改信号线的“Name”属性

其中第 2 点参考以前的博文《Simulink批量更改模块属性

那么重点就是如何找到信号线

这里和 Block 不同,无法通过“Name”找到信号线,因为信号线还没有命名(狗头)。

而信号线前序模块Outport 句柄,就是信号线本身句柄,这样一来,信号线就通过句柄来找到了。

2. 举例:为选中子系统的信号输出线自动命名

Ops =  get(gcbh,'PortHandl');
hds = Ops.Outport; % 获得 In1 输出端口的句柄,也就是信号线的句柄
[~,hd_num] = size(hds); % size 函数返回的是选中模块输出句柄的大小 [1 3],这里只用第二维数字
for i = 1:hd_num
    set(hds(i),'Name',['test',num2str(i)])
end

 执行完以上脚本后,效果如下:

思考:如何将子系统的输出信号名称自动命名为子系统的输出端口名,就如上图的 AAA BBB CCC

思路:首先要获得子系统的输出端口,可获得进入到子系统,根据 BlockType 获得所有 Output 的序列号和名称,按顺序将 Output 的名称命名到子系统输出信号线上。

3. 举例:自动将 CAN Unpack 输出信号线命名为 CAN Msg 名称

image.png

 CAN Unpack 配置如下:

image.png

M 脚本如下:

Sgnls =  get(gcbh,'SignalInfo'); 
% 获得所有信号的所有信息:'CANInfo01$0$4$2$2$1$0$1$-10$0$15$#CANInfo02$4$4$2$2$1$0$2$0$0$15$#'
% 可以看出,Msg由#分割,每个Msg有11个元素,各元素由$分割,元素内容和Block Parameters中的一一对应
Sgnls_array = split(Sgnls,'#'); % 将每条Msg分割,关键字用的#,所以末尾会多出一个空元素
[Sgnls_size,~] = size(Sgnls_array); % 获得的信号数量多了1,原因如上
PHs = get(gcbh,'PortHandles'); % 获得CAN Unpack的端口句柄
hds = PHs.Outport; % 获得输出端口句柄
for i = 1:Sgnls_size - 1
    Items_array = split(Sgnls_array{i},'$');
    set(hds(i),'Name',Items_array{1});
end

 效果如下:

image.png

  • 9
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值