2013-03-30 89 views
1

我想要建立一个继电器,但我总是会得到一个对我来说没有任何意义的错误。设计一个继电器

错误提示地面物体缺失或部件未连接,
但我找不到任何缺失。

我试图建立以不同的方式接力,但总是同样的错误......

enter image description here

我测试继电器类:

model test 

Relay relay annotation (Placement(transformation(extent={{-20,4},{0,24}}))); 
ConstantVoltage constantVoltage annotation (Placement(transformation(
    extent={{-10,-10},{10,10}}, 
    rotation=-90, 
    origin={-74,10}))); 
ConstantVoltage constantVoltage1 annotation (Placement(transformation(
    extent={{-10,-10},{10,10}}, 
    rotation=-90, 
    origin={52,12}))); 
Modelica.Electrical.Analog.Basic.Ground ground 
annotation (Placement(transformation(extent={{-42,-30},{-22,-10}}))); 
equation 
connect(relay.n1, constantVoltage.n) annotation (Line(
    points={{-20,9},{-46,9},{-46,0},{-74,0}}, 
    color={0,0,255}, 
    smooth=Smooth.None)); 
connect(constantVoltage.p, relay.p1) annotation (Line(
    points={{-74,20},{-48,20},{-48,19},{-20,19}}, 
    color={0,0,255}, 
    smooth=Smooth.None)); 
connect(relay.n1, ground.p) annotation (Line(
    points={{-20,9},{-26,9},{-26,-10},{-32,-10}}, 
    color={0,0,255}, 
    smooth=Smooth.None)); 
connect(relay.p2, constantVoltage1.p) annotation (Line(
    points={{0,19},{26,19},{26,22},{52,22}}, 
    color={0,0,255}, 
    smooth=Smooth.None)); 
connect(constantVoltage1.n, relay.n2) annotation (Line(
    points={{52,2},{26,2},{26,9},{0,9}}, 
    color={0,0,255}, 
    smooth=Smooth.None)); 
connect(ground.p, relay.n2) annotation (Line(
    points={{-32,-10},{-16,-10},{-16,9},{0,9}}, 
    color={0,0,255}, 
    smooth=Smooth.None)); 
annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, 
     -100},{100,100}}), graphics)); 
end test; 

继电器类: 很简单,我只看v1,如果电压是正的,继电器应该让电流通过。

model Relay 
extends Modelica.Electrical.Analog.Interfaces.TwoPort; 

Boolean off; 

equation 
off = v1 < 0; 

v2 = if off then 0 else v2; 
i2 = if off then 0 else i2; 

annotation (Diagram(coordinateSystem(preserveAspectRatio=false, extent={{-100, 
     -100},{100,100}}), graphics)); 
end Relay; 

错误日志:

Check of MTS.test: 

The model has the same number of unknowns and equations: 27 

The problem is structurally singular. 
It has 27 scalar unknowns and 27 scalar equations. 
The Real part has 26 unknowns and 26 equations. 
The Integer part has 0 unknowns and 0 equations. 
The Boolean part has 1 unknowns and 1 equations. 
The String part has 0 unknowns and 0 equations. 

Attempting to further localize singularity. 

Singularity of MTS.test is at the top level. 

The model MTS.test is structurally singular. 

The problem is structurally singular for the element type Real. 
The number of scalar Real unknown elements are 26. 
The number of scalar Real equation elements are 26. 

The model includes the following hints: 
An electrical current cannot be uniquely calculated. 
The reason could be that 
- a ground object is missing (Modelica.Electrical.Analog.Basic.Ground) 
to define the zero potential of the electrical circuit, or 
- a connector of an electrical component is not connected. 

The problem has no elements of type Integer. 

The problem is structurally regular for the element type Boolean. 
The number of scalar Boolean elements are 1. 

The problem has no elements of type String. 

ERROR: 2 errors were found 

WARNING: 2 warnings were issued 

回答

2

这里是一个不同的方法,可以是值得研究:

在交换机侧使用可变电阻器,并且如果所述开关被打开然后设置电阻非常大,并且如果它被关闭的电阻设置为很小。

有可能是更准确的方法,但你可能可以通过这种方式来实现,以避免事件。

1

一目了然,令我惊讶的事情是,你没有在任何电路任何负载。它说它不能计算电流,但地面问题只是一个提示。看看电路,你必须问自己,如果没有接地,这些电路会做什么?在电路中没有某种负载的情况下,我没有看到任何一种方法来计算任一回路中的电流。

因此,请尝试在每个循环中放置一些电阻,看看是否有帮助。

+0

电阻没有改变。同样的错误。 – madmax

1

我不认为i2和v2应该在您的中继模式中同时为零。试试这个。一面是理想的电压传感器。另一个在低于设定电压时开路,在其上方短路。正如另一个回应指出的那样,您需要添加一系列负载来解决当前问题。 模型继电器 扩展Modelica.Electrical.Analog.Interfaces.TwoPort; 布尔关闭; parameter Modelica.SIunits.Voltage disconnectVoltage = 0;

equation 
    off = v1 < disconnectVoltage; 
    i1=0; 
    if off then 
     i2 = 0; 
    else 
     v2 = 0; 
    end if; 
    end Relay; 

如果您必须避免模型中的任何负载,可以使用Modelica标准库中的某个理想开关构建类似的东西。它们包括小电阻和电导,所以应该可以在不增加负载的情况下解决示例中的电流问题。

model relay2 

    Modelica.Electrical.Analog.Ideal.IdealOpeningSwitch idealOpeningSwitch 
    annotation (Placement(transformation(
     extent={{-10,10},{10,-10}}, 
     rotation=-90, 
     origin={60,0}))); 
    Modelica.Electrical.Analog.Sensors.VoltageSensor voltageSensor annotation (
     Placement(transformation(
     extent={{-10,10},{10,-10}}, 
     rotation=-90, 
     origin={-60,0}))); 
    Modelica.Blocks.Logical.GreaterThreshold greaterThreshold(threshold=0) 
    annotation (Placement(transformation(
     extent={{10,-10},{-10,10}}, 
     rotation=180, 
     origin={0,0}))); 
    Modelica.Electrical.Analog.Interfaces.PositivePin p1 
    annotation (Placement(transformation(extent={{-110,50},{-90,70}}))); 
    Modelica.Electrical.Analog.Interfaces.NegativePin n1 
    annotation (Placement(transformation(extent={{-110,-70},{-90,-50}}))); 
    Modelica.Electrical.Analog.Interfaces.PositivePin p2 
    annotation (Placement(transformation(extent={{90,50},{110,70}}))); 
    Modelica.Electrical.Analog.Interfaces.NegativePin n2 
    annotation (Placement(transformation(extent={{90,-70},{110,-50}}))); 
    annotation (Diagram(coordinateSystem(preserveAspectRatio=true,extent={{-100,-100}, 
      {100,100}}), graphics), uses(Modelica(version="3.2"))); 
equation 

    connect(greaterThreshold.u, voltageSensor.v) annotation (Line(
     points={{-12,0},{-12,0},{-50,0},{-50,0}}, 
     color={0,0,127}, 
     smooth=Smooth.None)); 
    connect(idealOpeningSwitch.control, greaterThreshold.y) annotation (Line(
     points={{50,0},{45,0},{15,0},{15,0},{15,0}}, 

     color={255,0,255}, 
     smooth=Smooth.None)); 

    connect(idealOpeningSwitch.n, n2) annotation (Line(
     points={{60,-10},{60,-60},{100,-60}}, 
     color={0,0,255}, 
     smooth=Smooth.None)); 
    connect(idealOpeningSwitch.p, p2) annotation (Line(
     points={{60,10},{60,60},{100,60}}, 
     color={0,0,255}, 
     smooth=Smooth.None)); 
    connect(voltageSensor.p, p1) annotation (Line(
     points={{-60,10},{-60,60},{-100,60}}, 
     color={0,0,255}, 
     smooth=Smooth.None)); 
    connect(voltageSensor.n, n1) annotation (Line(
     points={{-60,-10},{-60,-60},{-100,-60}}, 
     color={0,0,255}, 
     smooth=Smooth.None)); 
end relay2