Я анализирую текстовый файл с помощью matlab, который выглядит следующим образом:
[Date]
2019-03-27 10:45:10.167618
[Component]
Component_Name : Manager principal
Component_ID : _ocl_MEu9Eemg_bhrv2HEbw
{Port}
Port_Name : FOP 1
Port_ID : _sZMXoEu9Eemg_bhrv2HEbw
Port_Type : Outgoing Port
[Component]
Component_Name : Manager 2
Component_ID : _r-HlMEu9Eemg_bhrv2HEbw
{Port}
Port_Name : FIP 1
Port_ID : _sZWIoku9Eemg_bhrv2HEbw
Port_Type : Incoming Port
[Link]
Link_Name : On/Off
Link_ID : _sZfSkku9Eemg_bhrv2HEbw
Link_Source_Name : Manager principal
Link_Source_ID : _ocl_MEu9Eemg_bhrv2HEbw
Link_Source_Port_Name : FOP 1
Link_Source_Port_ID : _sZMXoEu9Eemg_bhrv2HEbw
Link_Target_Name : Manager 2
Link_Target_ID : _r-HlMEu9Eemg_bhrv2HEbw
Link_Target_Port_Name : FIP 1
Link_Target_Port_ID : _sZWIoku9Eemg_bhrv2HEbw
Я создаю систему для каждого [Компонента], который я нахожу, и в каждой системе я создаю вход или выход, если [Компонент] - это Источник или Цель [Ссылка].В моем примере текстового файла: Вкл / Выкл - это ссылка между «Принципал менеджера» и «Менеджер 2».Таким образом, в первой Системе (руководитель Manager) у меня есть вывод, который называется On / Off с определенным тегом в описании тега, который я установил, а во второй системе (Manager 2) вход называется On / Off с определенным тегом в теге Block i.set.
Так что, когда я запускаю свой код, у меня есть 2 системы с 1 блоком в каждой системе.В этих двух блоках, если речь идет об одной и той же ссылке (в нашем примере это так), у нас есть этот тег:
@_sZMXoEu9Eemg_bhrv2HEbw ==> @_sZWIoku9Eemg_bhrv2HEbw
Идентификатор исходного порта ==> Идентификатор целевого порта
Это то, что отличает ссылку от другой.
Контекст таков: если пользователь изменяет только имя ссылки, например, Выкл. / Вкл. Вместо Вкл. / Выкл., Он не должен создавать новый блок.потому что это та же ссылка.Поэтому я хотел бы сделать findBlocks () и для каждого блока в текущей системе, я хотел бы сделать: если оба идентификатора в описании тега совпадают, чем в текстовом файле, поэтому мы просто обновляем имя блока, например.
Вот код, в котором я создаю свои блоки: Обновление: я успешно восстановил C, который является строкой внутри тега Block.
B = find_system(sprintf('%s', component_NameValue));
C = get_param(find_system(sprintf('%s/%s', component_NameValue, link_NameValue)), 'Tag');
if (compareOut == 1) && (compareSource == 1) % Si c'est un port sortant et que c'est le port source du link
add_block('simulink/Ports & Subsystems/In1',[component_NameValue '/' link_NameValue]); % alors on ajoute un block Output de même nom que le link dans le système du composant que l'on parse
linkDescription = sprintf('Link : \n\n%s ==> %s \n\nComposant : \n\nDe : %s (%s) \nVers : %s (%s) \n\nPort Source : \n\n%s \n%s \n\n', link_NameValue , link_IDValue , link_SourceNameValue , link_SourceIDValue, link_TargetNameValue , link_TargetIDValue, link_SourcePortNameValue, link_SourcePortIDValue);
linkTag = sprintf('@%s ==> @%s', link_SourcePortIDValue, link_TargetPortIDValue);
set_param(gcb, 'Tag', linkTag);
set_param(gcb,'Description',linkDescription); % On ajoute une description au block contenant les infos du lien en question contenus dans le fichier texte
end
if (compareIn == 1) && (compareTarget == 1) % Si c'est un port entrant et que c'est le port target du link
add_block('simulink/Ports & Subsystems/Out1',[component_NameValue '/' link_NameValue]); % alors on ajoute un block Input de même nom que le link dans le système du composant que l'on parse
linkDescription = sprintf('Link : \n\n%s ==> %s \n\nComposant : \n\nDe : %s (%s) \nVers : %s (%s) \n\nPort Target : \n\n%s \n@%s', link_NameValue , link_IDValue , link_SourceNameValue , link_SourceIDValue, link_TargetNameValue , link_TargetIDValue,link_TargetPortNameValue, link_TargetPortIDValue);
linkTag = sprintf('@%s ==> @%s', link_SourcePortIDValue, link_TargetPortIDValue); %On ajoute un @ devant l'ID du port pour pouvoir le retrouver et voir si un port à été modifié/rajouté/supprimé
set_param(gcb, 'Tag', linkTag);
set_param(gcb,'Description',linkDescription); % On ajoute une description au block contenant les infos du lien en question contenus dans le fichier texte
end
Спасибо за помощь заранее