【问题标题】:Modelica class graphs [closed]Modelica 类图 [关闭]
【发布时间】:2021-06-03 16:43:09
【问题描述】:

寻找使用图表来描述 Modelica 模型之间关系的最佳实践。例如,组件层次结构、继承、包之间的依赖关系、以上所有的组合等等。

真正的问题是在信息和图表复杂性之间找到一个很好的折衷方案,尤其是对于工业规模的模型。

任何建议将不胜感激。如果不是Modelica,而是相关的,那就完全没问题了。

注意:这个问题被标记为“不符合 Stackoverflow 指南”(?),因此我必须对其进行编辑。这意味着较早的答复是对原始措辞的。

【问题讨论】:

  • 相关,但这个问题更多的是关于最终结果的好例子,而不是创建图表的工具。 #1 问题是找到有用的东西,#2 工具来实现它。 :-)
  • 也许您觉得这篇博文很相关? waterprogramming.wordpress.com/2015/07/29/…
  • 显然这需要对图论中的简单图概念进行扩展。类似的东西可以从超图、多图、具有超节点的图的现有概念中受益......并且可能仍然需要针对特定​​目的的调整和改进
  • @AtiyahElsheikh,好吧,让我们在这里不要太兴奋。如果我们能在细节和清晰度之间找到一个很好的折衷方案,我会接受像 SysML 这样原始的东西。

标签: graph relationship modelica


【解决方案1】:

我真的没有什么好的例子,所以我只是分享一些意见。

  1. 应该有两种图表。
    我的想法是必须有两种图,一种是简化的,关于方程结构,另一种是详细的,关于继承和依赖,组合等等。
    无论您使用哪种仿真工具或语言,最终,仿真都是关于如何求解方程,尤其是非线性和复杂方程。因此,如果您可以告诉用户哪个方程式属于哪个组件或由哪个连接生成,那将非常有帮助。我经常难以解决的问题之一是找出哪些方程会导致非线性并花费过多的 CPU 时间来进行迭代。目前,Dymola 为用户提供了查看最终方程结构的选项,但它没有显示哪个方程属于哪个分量,据我所知,Wolfram System Modeler 可以。
    至于详细信息,我认为sourcetrail 是一个很好的例子,尽管它是为 C++ 设计的。交互 GUI 是吸引我的地方,尤其是建模者,所以想象一下,如果你看到一个非常详细的不同模型的依赖关系图,任何人都很难获得有用的信息,所以它必须像 sorcetrail 那样是交互的,所以它人类可读。

  2. 我对详细图表的看法。
    我认为每一条信息都是有用的,就像维基百科一样,关键是如何组织信息。

  • 首先我们以Modelica.Electrical.Analog.Examples.HeatingMOSInverter 为例。在下面的屏幕截图中,我们显然可以看到与 2 个不同域相关的不同循环,即电气和热。所以我们应该建立的第一条规则是根据不同的领域将一个大模型划分为子系统。

  • 其次,我们以Modelica.Electrical.Analog.Examples.CauerLowPassAnalog 为例,它只包括Modelica.Electrical 的电气元件。虽然这个模型只包含了电气组件,但是这个模型中有几个Loops,所以在生成类依赖关系图时,如果我们可以将模型拆分为更小的Loops,肯定会更好理解。最后,将有两种 1 域子系统:Loop 和 Branch,它们通过虚拟连接器连接。

  • 第三,我们以Modelica.Electrical.Analog.Examples.HeatingResistor的电气部分为例,以绿色方块标示。
    这种一域模型的类依赖图如下图,虽然下面的截图是另一个例子,但可以说明即使是一域模型,也很难将这种类依赖图与你的真实模型。
    所以我们在生成类依赖图的时候要保持模型的拓扑结构。该图中有不同的层:基础层、抽象组件层、直接使用的组件层、模型层。为了使图表更清晰,它也可以是 3D。它应该如下所示:
    我认为图书馆开发人员应该有责任采用良好的层次结构来使这个图表看起来清晰和干净。例如,所有抽象组件都应该是partial model,以便于识别它们。或者每个类中可能有一个额外的标记变量来标记该类属于哪个层。目前,我们可以使用所有部分模型为Abstract components,所有非部分模型为Directly used components,这可能会使图表不清楚,但总比没有好。
    注意:不同层之间有两个重要的关系:Extends 和 Instantiates,可以用不同的线条或颜色来标记。
    当涉及到多域建模时,应该有两个独立的类依赖关系图,它们通过这些多域组件连接起来。
    总而言之,我认为我们应该为仅包含 1 个域组件的单个 Loop 生成类依赖图,然后将所有图组合为单个 Loop,我们将得到整个模型的整体图。所以在某种程度上,我们可以保留原始模型的拓扑结构。

【讨论】:

  • 我认为您区分这两种图表很重要。在我的问题中,我特别在寻找第二种,模型/包装描述。我同意如果你想要那个级别的细节,sourcetrail 很有趣。但是需要更少的细节和非交互式视图呢?
  • @DagB,请检查更新的答案,看看是否有帮助。
  • 以前看过论文(2006),但遗憾的是 Modelica CDV 不再可用。对Library层次可视化的需求肯定很大,我想UML可能是一个不错的选择,但如果它能够反映模型的原始拓扑结构,那就更好了。
猜你喜欢
  • 2014-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多