Search code examples
modelingmodelicaopenmodelica

OpenModelica error: an array of expandable connectors - over-determined system


can anyone enlighten me why the following modelica code generates an error on OpenModelica 1.12.0? If I remove the last two connect equations, it works fine.

class A
  Conn cc[3];
  Real a(start=0,fixed=true);
  Real b(start=0,fixed=true);
  Real c(start=0,fixed=true);
equation
  der(a) = 1;
  der(b) = 2;
  der(c) = 3;
  connect(a,cc[1].v);
  connect(b,cc[2].v); // Remove this to make it work
  connect(c,cc[3].v); // Remove this to make it work
end A;

The expandable connector cc is empty:

expandable connector Conn
end Conn;

The code above generates error on OpenModelica 1.12.0:

[1] 15:07:44 Symbolic Error
Too many equations, over-determined system. The model has 6 equation(s) and 4 variable(s).

[2] 15:07:44 Symbolic Warning
[A: 11:3-11:21]: Equation 5 (size: 1) b = cc[2].v is not big enough to solve for enough variables.
  Remaining unsolved variables are: 
  Already solved: b
  Equations used to solve those variables:
    Equation 2 (size: 1): der(b) = 2.0

[3] 15:07:44 Symbolic Warning
[A: 12:3-12:21]: Equation 6 (size: 1) c = cc[3].v is not big enough to solve for enough variables.
  Remaining unsolved variables are: 
  Already solved: c
  Equations used to solve those variables:
    Equation 3 (size: 1): der(c) = 3.0

Basically, I want to have an array of expandable connectors which I can add different type of variables as needed.

Edit 18/08/2018

Regarding I can only connect the "connectors" to an expandable connector, actually I see the modelica spec 3.4 doc says:

All components in an expandable connector are seen as connector instances even if they are not declared as 
such [i.e. it is possible to connect to e.g. a Real variable].  

So it seems I can connect Real variables to an expandable connector in OpenModelica however, I get an error in JModelica:

Error at line 13, column 11, in file 'A.mo':
  Connecting to an instance of a non-connector type is not allowed

Also I can connect Real variables to normal (non-expandable) connectors as well in OpenModeica, but again this is not allowed in JModelica. So tools interpret the language specs differently!


Solution

  • You cannot connect Real variables to the expandable connector, it needs to be connectors. But somehow that doesn't work either, seems to be a bug. What works (tested in OM and Dymola) is this below:

    class Expandable
      expandable connector Conn
        Real v[3];
      end Conn;
    
      connector RealOutput = output Real "'output Real' as connector";
    
      Conn cc;
      RealOutput a(start=0,fixed=true);
      RealOutput b(start=0,fixed=true);
      RealOutput c(start=0,fixed=true);
    equation 
      der(a) = 1;
      der(b) = 2;
      der(c) = 3;
      connect(a,cc.v[1]);
      connect(b,cc.v[2]);
      connect(c,cc.v[3]);
    end Expandable;