diff --git a/Modelica/Electrical/Machines/BasicMachines/Components/ZeroImpedance.mo b/Modelica/Electrical/Machines/BasicMachines/Components/ZeroImpedance.mo new file mode 100644 index 0000000000..a37b4ede41 --- /dev/null +++ b/Modelica/Electrical/Machines/BasicMachines/Components/ZeroImpedance.mo @@ -0,0 +1,30 @@ +within Modelica.Electrical.Machines.BasicMachines.Components; +model ZeroImpedance "Zero system impedance" + extends Analog.Interfaces.OnePort(i(start=0)); + parameter SI.Inductance L "Inductance"; + parameter Boolean useZeroSystem=true "= true, if zero current is explicitely computed" annotation(Evaluate = true); +equation + if useZeroSystem then + v = L*der(i); + else + i = 0; + end if; + + annotation (Icon(graphics={ + Line(points={{-90,0},{-60,0}}, color={0,0,255}), + Line(points={{62,0},{90,0}}, color={0,0,255}), + Ellipse(extent={{-50,30},{-8,-32}}, lineColor={0,0,255}), + Ellipse(extent={{-20,30},{22,-32}}, lineColor={0,0,255}), + Ellipse(extent={{10,30},{52,-32}}, lineColor={0,0,255}), + Text( + extent={{-150,50},{150,90}}, + textString="%name", + textColor={0,0,255}), + Rectangle(extent={{-60,30},{-50,-32}}, lineColor={28,108,200}), + Rectangle(extent={{52,30},{62,-32}}, lineColor={28,108,200})}), + Documentation(info=" +
+For a short explanation of the zero system see the User's Guide of the FundamentalWave library. +
+")); +end ZeroImpedance; diff --git a/Modelica/Electrical/Machines/BasicMachines/Components/package.order b/Modelica/Electrical/Machines/BasicMachines/Components/package.order index 2766671fed..bb1ecc2440 100644 --- a/Modelica/Electrical/Machines/BasicMachines/Components/package.order +++ b/Modelica/Electrical/Machines/BasicMachines/Components/package.order @@ -1,6 +1,7 @@ PartialAirGap AirGapS AirGapR +ZeroImpedance Inductor SquirrelCage DamperCage diff --git a/Modelica/Electrical/Machines/Examples/InductionMachines/IMC_YD.mo b/Modelica/Electrical/Machines/Examples/InductionMachines/IMC_YD.mo index 77ee87ee6e..6e7d13a277 100644 --- a/Modelica/Electrical/Machines/Examples/InductionMachines/IMC_YD.mo +++ b/Modelica/Electrical/Machines/Examples/InductionMachines/IMC_YD.mo @@ -16,6 +16,7 @@ model IMC_YD Machines.BasicMachines.InductionMachines.IM_SquirrelCage aimc( p=aimcData.p, fsNominal=aimcData.fsNominal, + useZeroSystem=false, Rs=aimcData.Rs, TsRef=aimcData.TsRef, alpha20s(displayUnit="1/K") = aimcData.alpha20s, diff --git a/Modelica/Electrical/Machines/Interfaces/PartialBasicInductionMachine.mo b/Modelica/Electrical/Machines/Interfaces/PartialBasicInductionMachine.mo index 81a47c82e2..d0e8d08c93 100644 --- a/Modelica/Electrical/Machines/Interfaces/PartialBasicInductionMachine.mo +++ b/Modelica/Electrical/Machines/Interfaces/PartialBasicInductionMachine.mo @@ -5,6 +5,8 @@ partial model PartialBasicInductionMachine parameter Integer p(min=1, start=2) "Number of pole pairs (Integer)"; parameter SI.Frequency fsNominal(start=50) "Nominal frequency"; + parameter Boolean useZeroSystem=true "= true, if zero current is explicitely computed" + annotation(Evaluate=true); parameter SI.Temperature TsOperational(start=293.15) "Operational temperature of stator resistance" annotation (Dialog(group= "Operational temperatures", enable=not useThermalPort)); @@ -81,7 +83,8 @@ partial model PartialBasicInductionMachine extent={{-10,-10},{10,10}}, rotation=270, origin={20,20}))); - Modelica.Electrical.Analog.Basic.Inductor lszero(final L=Lszero) + BasicMachines.Components.ZeroImpedance lszero(final L=Lszero, final + useZeroSystem=useZeroSystem) annotation (Placement(transformation(extent={{0,40},{-20,60}}))); Machines.Losses.InductionMachines.Core statorCore( final coreParameters=statorCoreParameters, diff --git a/Modelica/Electrical/Machines/UsersGuide/Concept.mo b/Modelica/Electrical/Machines/UsersGuide/Concept.mo index ef644cf569..c2784c6929 100644 --- a/Modelica/Electrical/Machines/UsersGuide/Concept.mo +++ b/Modelica/Electrical/Machines/UsersGuide/Concept.mo @@ -13,7 +13,8 @@ class Concept "Concept"
-You may have a look at a short summary of space phasor theory at https://www.haumer.at/refimg/SpacePhasors.pdf
+You may have a look at a short summary of space phasor theory at https://www.haumer.at/refimg/SpacePhasors.pdf
+For a short explanation of the zero system see the User's Guide of the FundamentalWave library.
Model of a polyphase zero sequence inductor. +For a short explanation of the zero system see the User's Guide of the FundamentalWave library.
@@ -30,5 +36,7 @@ v = Lzero*sum(der(i)) = Lzero*der(sum(i)) textColor={0,0,255}), Text( extent={{-150,-80},{150,-40}}, - textString="m=%m")})); + textString="m=%m"), + Rectangle(extent={{-60,30},{-50,-32}}, lineColor={28,108,200}), + Rectangle(extent={{52,30},{62,-32}}, lineColor={28,108,200})})); end ZeroInductor; diff --git a/Modelica/Magnetic/FundamentalWave/BaseClasses/Machine.mo b/Modelica/Magnetic/FundamentalWave/BaseClasses/Machine.mo index 7b8d849da4..e859fdbce2 100644 --- a/Modelica/Magnetic/FundamentalWave/BaseClasses/Machine.mo +++ b/Modelica/Magnetic/FundamentalWave/BaseClasses/Machine.mo @@ -15,6 +15,8 @@ partial model Machine "Base model of machines" parameter Integer p(min=1, start=2) "Number of pole pairs (Integer)"; parameter SI.Frequency fsNominal(start=50) "Nominal frequency"; + parameter Boolean useZeroSystem=true "= true, if zero current is explicitely computed" + annotation(Evaluate=true); parameter SI.Temperature TsOperational(start=293.15) "Operational temperature of stator resistance" annotation (Dialog(group= "Operational temperatures", enable=not useThermalPort)); @@ -116,6 +118,7 @@ partial model Machine "Base model of machines" final TRef=TsRef, final Lsigma=Lssigma, final ratioCommonLeakage=ratioCommonStatorLeakage, + final useZeroSystem=useZeroSystem, final effectiveTurns=effectiveStatorTurns, final TOperational=TsOperational, final GcRef=statorCoreParameters.GcRef, diff --git a/Modelica/Magnetic/FundamentalWave/BasicMachines/Components/SymmetricPolyphaseWinding.mo b/Modelica/Magnetic/FundamentalWave/BasicMachines/Components/SymmetricPolyphaseWinding.mo index b34ead7c14..492871a0a9 100644 --- a/Modelica/Magnetic/FundamentalWave/BasicMachines/Components/SymmetricPolyphaseWinding.mo +++ b/Modelica/Magnetic/FundamentalWave/BasicMachines/Components/SymmetricPolyphaseWinding.mo @@ -43,6 +43,7 @@ model SymmetricPolyphaseWinding parameter Real ratioCommonLeakage(final min=0, final max=1)=1 "Ratio of common stray inductance / total stray inductance"; parameter SI.Inductance Lzero "Zero sequence inductance of winding"; + parameter Boolean useZeroSystem=true "= true, if zero current is explicitely computed"; parameter Real effectiveTurns=1 "Effective number of turns per phase"; parameter SI.Conductance GcRef "Electrical reference core loss reluctance"; final parameter Integer nBase=Modelica.Electrical.Polyphase.Functions.numberOfSymmetricBaseSystems(m) @@ -76,7 +77,8 @@ model SymmetricPolyphaseWinding final Lsigma=(1 - ratioCommonLeakage)*Lsigma) "Symmetric winding" annotation (Placement(transformation(extent={{-10,-20},{10,0}}))); - Modelica.Electrical.Polyphase.Basic.ZeroInductor zeroInductor(final m=m, final Lzero=Lzero) + Modelica.Electrical.Polyphase.Basic.ZeroInductor zeroInductor(final m=m, final Lzero=Lzero, + final useZeroSystem=useZeroSystem) if mBase<>2 "Zero sequence inductance of winding" annotation (Placement(transformation( origin={-70,-30}, diff --git a/Modelica/Magnetic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo b/Modelica/Magnetic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo index 09a8c9fd8a..0a4a5e67ea 100644 --- a/Modelica/Magnetic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo +++ b/Modelica/Magnetic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo @@ -17,6 +17,7 @@ model IMC_YD Magnetic.FundamentalWave.BasicMachines.InductionMachines.IM_SquirrelCage aimc( p=aimcData.p, fsNominal=aimcData.fsNominal, + useZeroSystem=false, TsRef=aimcData.TsRef, alpha20s(displayUnit="1/K") = aimcData.alpha20s, Jr=aimcData.Jr, @@ -37,8 +38,7 @@ model IMC_YD TsOperational=293.15, effectiveStatorTurns=aimcData.effectiveStatorTurns, alpha20r=aimcData.alpha20r, - TrOperational=293.15, - stator(zeroInductor(i0(nominal=10)))) + TrOperational=293.15) annotation (Placement(transformation(extent={{20,10},{40,30}}))); Modelica.Electrical.Machines.Sensors.CurrentQuasiRMSSensor currentQuasiRMSSensor annotation (Placement(transformation( diff --git a/Modelica/Magnetic/FundamentalWave/UsersGuide/ZeroSystem.mo b/Modelica/Magnetic/FundamentalWave/UsersGuide/ZeroSystem.mo new file mode 100644 index 0000000000..a3b612b23a --- /dev/null +++ b/Modelica/Magnetic/FundamentalWave/UsersGuide/ZeroSystem.mo @@ -0,0 +1,27 @@ +within Modelica.Magnetic.FundamentalWave.UsersGuide; +class ZeroSystem "Explanation of the zero system" + extends Modelica.Icons.Information; + annotation (Documentation(info=" ++The polyphase winding relates the currents to the magnetic potential phasor of the fundamental wave and the derivative of the magnetic flux phasor of the fundamental wave to the voltages, +taking the orientation of the phases into account. However, for the number of phases
+m > 2
the zero sequence system has to be treated with care. +This happens in the zero inductance: ++
+i0 = sum(i)/m;
+v0 = Lzero*der(i0);
+v0
is included in all phases with the same phase shift. ++This is equivalent to the zero inductor used in the +machine model of
+Modelica.Electrical.Machines
after applying +space phasor transformation. ++In some cases it could be desired to suppress the calculation of the zero system. This can be done in both machine models (
+")); +end ZeroSystem; diff --git a/Modelica/Magnetic/FundamentalWave/UsersGuide/package.order b/Modelica/Magnetic/FundamentalWave/UsersGuide/package.order index 2f15c38f95..7292347b2f 100644 --- a/Modelica/Magnetic/FundamentalWave/UsersGuide/package.order +++ b/Modelica/Magnetic/FundamentalWave/UsersGuide/package.order @@ -1,6 +1,7 @@ Concept Polyphase WindingModel +ZeroSystem Parameters Contact ReleaseNotes diff --git a/Modelica/Magnetic/QuasiStatic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo b/Modelica/Magnetic/QuasiStatic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo index a8af2c617d..5ad88469d8 100644 --- a/Modelica/Magnetic/QuasiStatic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo +++ b/Modelica/Magnetic/QuasiStatic/FundamentalWave/Examples/BasicMachines/InductionMachines/IMC_YD.mo @@ -78,6 +78,7 @@ model IMC_YD "Induction machine with squirrel cage starting Y-D" Magnetic.FundamentalWave.BasicMachines.InductionMachines.IM_SquirrelCage imc( p=imcData.p, fsNominal=imcData.fsNominal, + useZeroSystem=false, TsRef=imcData.TsRef, alpha20s(displayUnit="1/K") = imcData.alpha20s, Jr=imcData.Jr, @@ -98,8 +99,7 @@ model IMC_YD "Induction machine with squirrel cage starting Y-D" TsOperational=293.15, effectiveStatorTurns=imcData.effectiveStatorTurns, alpha20r=imcData.alpha20r, - TrOperational=293.15, - stator(zeroInductor(i0(nominal=10)))) + TrOperational=293.15) annotation (Placement(transformation(extent={{20,-90},{40,-70}}))); Modelica.Electrical.Machines.Sensors.CurrentQuasiRMSSensor currentQuasiRMSSensor annotation (Placement(transformation(extent={{-10,10},{10,-10}}, rotation=270,Modelica.Magnetic.FundamentalWave
and +Modelica.Electrical.Machines
) by setting the Boolean parameteruseZeroSystem = false
(which by default istrue
). +This ensures that the zero current is equal to zero and there is no need to calculate it:
+i0 = 0;
+