2013-03-30 87 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