3

为了模拟一些过程,我在获取自建模块的预定义工作顺序时遇到了问题。

我怎么能确定,例如 Block A 必须在 Block B 和 C 开始工作之前完成?

问题是,有些块应该在其他块之后工作,而有些则不能。我必须承认我没有太多使用 Simulink 的经验来做与时间相关的事情(尽管有 simulink 的基本知识)。

例如,应实现此场景:

A -> B, C -> D, E, F

主要的是,所有块 AF 彼此之间没有逻辑关联,它们都做几件事。我的目标是在 A 完成后让 B 和 C 开始工作。B和C完成后的D/E/F。在这种情况下,“并行”这个词是错误的词,这不必真正并行计算。只要确保这符合预先定义的稳定顺序。

编辑: 我的新想法是使用 matlab 工作区 als 缓冲区,因此我的块 A 可以将其结果推送到工作区(通过“到工作区”块)。但是现在我必须确保,在 A 将其信息推送到工作区之后,块 B 和 C 可以读取 A 的结果(使用“从工作区”)......怎么做?

Edit2: 这是一个截图,应该让一些想法更清楚: 正如“排序顺序”的文档所指,设置似乎没问题(包括子系统时间)。但不幸的是问题仍然存在。变量“simin”在写入之前从工作区加载:(如您所见,显示屏显示“1”,这是不应该的。在模拟的第一次运行中,我得到一个异常,变量“simin”不存在。

如果你能帮助我解决我的问题,那就太好了。

问候,波斯克伦

4

3 回答 3

1

因此,在您的示例中,如果您将块 A 用同一根线连接到 B 和 C,当块 A 完成后,块 B 和 C 将并行工作。

编辑:我使用与您相同的块,但它对我有用。我认为你把事情复杂化了。您设置模块优先级的方式与 Simulink 在没有它们的情况下运行模块的方式没有什么不同。您可以在下面看到我的设置和两个二进制显示器上的输出。

在此处输入图像描述

您在第一次运行时看到的错误是由于 Simulink 在执行第一个时间步之前没有创建变量。当 Simulink 构建仿真时,它发现用作工作区输入的变量并未创建。

于 2011-01-28T13:53:11.760 回答
1

如果块之间的连接不足以设置顺序,可以使用块优先级

测试执行顺序的一个技巧是添加一个“嵌入式 Matlab 块”,其中包含一个disp显示块名称的命令。

于 2011-02-02T09:08:17.147 回答
0

目前还不清楚你在问什么。当您说 Block A 必须完成时,您是指输出功能吗?Simulink 中模拟的工作方式是模块串行运行,因此模块 B 和 C 永远不会运行,直到模块 A 完成它的输出功能。

我不知道目前在 Simulink 中并行运行块 B 和 C 的任何明显方式。

于 2011-01-29T03:14:36.370 回答