使来自图书馆链接的信号名称独一无二?

Rod*_*uis 6 matlab signals simulink renaming bus

好吧,我一直在努力解决这个问题.完成以下任务的最佳方法是什么:

在此输入图像描述

其中Reaction Wheel 1-4是指向库中同一块的链接.当Speed Counter,Speed DirectionCurrent信号被加入到最终的总线输出如图所示,MATLAB(理所当然)抱怨:

警告:进入Bus Creator'myAwesomeModel'的信号9,10,11,12具有重复的名称'Current'.通过将"(signal#)"附加到结果总线内的信号,使这些变得独特.请更新信号的标签,使它们都是唯一的.

到现在为止,我一直在使用这样的"解决方案":

在此输入图像描述

也就是说,在中间放置一个1-mux/1的增益/其他虚拟块,这样信号就可以重命名为独特的东西.但是,我真的很想相信The MathWorks已经想到了一个更好的方法来做到这一点......

构建这样的总线信号的"正确"方法是什么?感觉就像我被迫采用一种特定的设计/建筑,但正是这样,我暂时逃避了......

Man*_*nex 1

这对我来说是一个很大的挑战,但看起来我已经解决了。Matlab R2007a 在这里。我将用一个已经完成的子系统来做这个例子,它的输入、输出……

1- 在块属性中,向块添加标签。这样做是为了识别系统中的块及其“兄弟”。本例中为MY_SUBSYSTEM

2-再次阻止属性。在CopyFcn回调中添加以下代码片段:

%Find total amount of copies of the block in system

len = length(find_system(gcs,'Tag','MY_SUBSYSTEM'));

%Get handle of the block copied/added and name the desired signal accordingly   

v = get_param(gcb,'PortHandles');                                     
set(v.Outport(_INDEX_OF_PORT_TO_BE_RENAMED_),'SignalNameFromLabel',['BASENAME_HERE' num2str(len)]);
Run Code Online (Sandbox Code Playgroud)

3- 在 _INDEX_OF_PORT_TO_BE_RENAMED_ 中,您应该放置要为块的每个副本重命名的端口信号索引(从 1 开始)。对于单个输出块,这应该是 1。 BASENAME_HERE 应该是端口基本名称,在本例中为您的“当前”。

4- 将模块添加到所需的库,然后删除用于创建此示例的实例。从那时起,当您从库添加或复制现有块时,输出端口应命名为 Current1、Current2、Current3 等。请注意,您可以应用任何约定或格式。

希望这可以帮助。它对我有用,请毫不犹豫地提出/批评!

注意:显然,随着模型的增长,此方法可能对计算机要求较高,因为 find_system 必须循环遍历整个模型,但对于我来说,在中小型系统中,这似乎是一个很好的解决方法。