Получить параметр конкретного блока Simulink и сравнить его, Matlab - PullRequest
1 голос
/ 08 апреля 2019

Я анализирую текстовый файл с помощью 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

Спасибо за помощь заранее

...