【问题标题】:Copy content of a subsystem to another subsystem in the same model将一个子系统的内容复制到同一模型中的另一个子系统
【发布时间】:2020-01-15 12:34:13
【问题描述】:

我正在寻找一种通过代码将一个子系统的内容复制到同一模型中的另一个现有子系统的方法。有没有最佳做法?

谢谢

【问题讨论】:

  • 这是一个相当广泛的问题,“最佳实践”问题往往会吸引固执己见的答案……也就是说,如果您要复制的是确切的功能,您可以使用 custom libraries and linked blocks。跨度>
  • 您好,感谢您的回答。在我的情况下,我总是必须复制不同的内容,所以使用图书馆将无济于事。我只是希望能够通过脚本将任何子系统的内容复制到另一个子系统。
  • 那么这甚至不是一个真正的最佳实践问题,它是一个“请给我代码以编程方式做这件事”,这也很难回答。给出一个简单的示例模型,以及您尝试过的代码以及为什么它不起作用,...

标签: matlab simulink


【解决方案1】:

您可以使用add_block

如果您的模型名为 ModelSource,而您要复制的子系统名为 Subsystem1,并且您正在为同一模型创建副本,则可以使用命令复制该子系统

add_block('ModelSource/Subsystem1','ModelSource/Subsystem1','MakeNameUnique','on')

“MakeNameUnique”将确保您的新块具有唯一的名称。

请注意,新块将与旧块具有相同的坐标。 您可以通过以下方式将块向下移动

coords = get_param(gcb,'Position');
coords(2) = coords(2) + 50;
coords(4) = coords(4) + 50;
set_param(gcb,'Position',coords);

这会将块从源块的位置向下移动 50 像素。

【讨论】:

【解决方案2】:

这并不难,但有点棘手。 您可以先使用 Simulink.SubSystem.copyContentsToBlockDiagram 将子系统的内容复制到新的框图(临时目标)。您还应该使用 save_system 命令。

然后,您可以使用Simulink.BlockDiagram.copyContentsToSubsystem从这个临时目标文件将内容复制到最终目标框图中所需的子系统。然后您可以使用 save_system 和 close_system 等命令。这将保留您创建的任何 SIL/PIL“测试工具”。

【讨论】:

    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 2011-11-02
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多