使用 M 脚本更改 Simulink 信号线名称
2023-04-18 14:10:30 时间
目录
3. 举例:自动将 CAN Unpack 输出信号线命名为 CAN Msg 名称
1. 思路
本质上分为两步:
- 找到信号线
- 更改信号线的“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 名称
CAN Unpack 配置如下:
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
效果如下:
相关文章
- System|分布式|Raft(概述)
- CentOS安装Docker操作命令方式
- System|IO|Reactor
- centos系统下Docker 仓库管理命令
- System|分布式|Cassandra
- Docker下安装 Nginx
- System|网络|分阶段事件驱动架构SEDA
- 在centos系统下的Docker 容器连接命令
- System|JVM|Yak GC
- 珠宝订货(订单)系统与ERP实现库存信息同步的实现方案分享
- Docker 安装 CentOS的操作命令
- 程序员桌面装备大比拼
- System|事务|Silo OCC
- 【转】ElasticSearch快速使用篇(基本命令篇)
- 腾讯云海外音视频技术架构 — 挑战和优化
- flinkx同步es2hive
- 企业增长新动能,尽在企点“增长双涡轮”!
- 腾讯企点腾采通发布,助力电子产业进入数字化转型快车道
- 一个初创企业的“生还”记录
- 【嘘】悄悄告诉你一个投资秘诀...