-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtraceBlock2.m
69 lines (54 loc) · 1.94 KB
/
traceBlock2.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
function children = traceBlock2(sys, blk, parent)
disp('--traceBlock2--')
% sys = gcs
% blk = gcb
blk_name = get_param(blk, 'Name');
blk_h = get_param(blk, 'Handle');
disp(['対象:' blk_name]);
% ハイライト
hilite_system(blk_h);
% open system if not opened
if ~bdIsLoaded(bdroot(sys))
sys_h = load_system(sys);
sys_name = get_param(sys_h, "Name");
disp([sys_name 'was loaded.']);
end
pc = get_param(blk, 'PortConnectivity');
children = [];
traced_inports = [];
for i=1:length(pc)
% 接続元ブロックを取得
pc_field = pc(i);
srcblk = pc_field.SrcBlock;
if ~any(size(srcblk))
disp('skip')
continue
end
srcblk_h = get_param(srcblk, 'Handle');
srcblk_name = get_param(srcblk, 'Name');
srcblk_sys = get_param(srcblk, 'Parent');
srcblk_sys_isroot = ~contains(string(srcblk_sys), "/");
srcblk_blocktype = get_param(srcblk, 'BlockType');
srcblk_blocktype_isinport = strcmp(srcblk_blocktype, 'Inport');
srcblk_blocktype_issubsystem = strcmp(srcblk_blocktype, 'SubSystem');
disp(srcblk_blocktype )
r_1 = struct('name', '', 'children', []);
r_1.name = srcblk_name;
disp(['接続元:' r_1.name]);
if srcblk_blocktype_issubsystem
% subsystem
[srcblock_subsystem_h, srcblock_portnumber] = getSrcBlock(blk, i);
srcblock_subsystem_sys = getfullname(srcblock_subsystem_h)
srcblock_subsystem_outports = find_system(srcblock_subsystem_h, 'SearchDepth', 1, 'BlockType', 'Outport');
srcblock_subsystem_outport = srcblock_subsystem_outports{srcblock_portnumber}
r_1_children = traceBlock2(srcblock_subsystem_sys, srcblock_subsystem_outport, r_1);
else
r_1_children = traceBlock2(srcblk_sys, srcblk_h, r_1);
end
r_1.children = r_1_children;
children = [children; r_1];
if srcblk_sys_isroot && srcblk_blocktype_isinport
traced_inports = [traced_inports; srcblk_h]
end
end
% children = parent.children;