获取特定Simulink块的参数并与Matlab进行比较

获取特定Simulink块的参数并与Matlab进行比较,matlab,block,simulink,getparameter,Matlab,Block,Simulink,Getparameter,我正在用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 [

我正在用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”之间的链接。因此,在第一个系统(管理器主体)中,我有一个名为开/关的输出,在我设置的标记描述中有一个特定的标记;在第二个系统(管理器2)中,我有一个名为开/关的输入,在我设置的块标记中有一个特定的标记

因此,当我启动代码时,我有两个系统,每个系统中有一个块。 在这两个块中,如果它是大约相同的链接(在本例中是),我们有以下标记:

@_sZMXoEu9Eemg_bhrv2HEbw ==> @_sZWIoku9Eemg_bhrv2HEbw
源端口的ID==>目标端口的ID

这就是链接与其他链接的区别所在

上下文是:如果用户只更改链接的名称,例如Off/On而不是On/Off,则不能创建新块,因为它是同一个链接。所以我想做一个findBlocks(),对于当前系统中的每个块,我想做:如果标记描述中的两个ID与文本文件中的相同,那么我们只更新块的名称,例如

下面是我创建块的代码: 更新:我成功恢复了块标记中的字符串C

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
谢谢你提前帮忙