SystemModeler连接器权重

时间:2016-04-15 22:37:22

标签: connect modelica

我正在寻找“从哪里开始” - 我希望这个问题有点涉及到这个论坛,但我需要一个起点,我的搜索尚未成功:(任何输入都是理解...

我需要使用SystemModeler / OpenModelica接口创建加权图。我们流程的第一步将跳过SystemModeler模拟并将模型传递给Mathematica进行处理

我的问题是在System Modeler GUI中向连接器添加属性:

我需要绘制一个模型,使得:状态A连接到状态B和状态C,权重为.7表示B的路径,.3表示C的路径。我需要创建一个对象来保存重量并将其与连接器相关联。还需要在给定状态的连接器添加到1时发出警告。

关于从哪里开始的任何想法?

1 个答案:

答案 0 :(得分:2)

由于Modelica中的连接本身并不包含任何信息,而是传递来自其连接的块的信息,我相信您有两种选择:

  1. 在两个节点之间放置一个组件,指定连接的权重。
  2. 从每个节点定义输入和输出,其中节点的输出指定连接的权重,并将节点上的输入相加以检查它们是否等于1.
  3. 以下是您如何做后者的示例:

    model WeightedGraph
      model Node
        Modelica.Blocks.Interfaces.RealInput u[nin];
        Modelica.Blocks.Interfaces.RealOutput y[size(k, 1)];
        Real usum;
        parameter Real k[:] = {0};
        parameter Integer nin = 0;
      equation
        y = k;
        usum = sum(u);
      end Node;
      Node A(nin = 0, k = {0.7});
      Node B(nin = 1, k = {0.3});
      Node C(nin = 1);
    equation
      connect(A.y[1], B.u[1]);
      connect(B.y[1], C.u[1]);
    end WeightedGraph;
    

    需要使用nin参数指定组件的输入数量。数字输出将等于k的长度,k是您指定每个连接的权重的列表。例如,您可以使用assert检查ysum是否添加到1,或者如果您想在Mathematica中执行此操作。