Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue2948 motor driver update #4119

Draft
wants to merge 61 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
61 commits
Select commit Hold shift + click to select a range
6f22a9a
Add files via upload
ViswanathanGanesh01 Nov 9, 2024
6c51250
Add files via upload
ViswanathanGanesh01 Nov 9, 2024
a96394d
Create package.order
ViswanathanGanesh01 Nov 9, 2024
c24fb30
Add files via upload
ViswanathanGanesh01 Nov 9, 2024
81bf872
Create package.oder
ViswanathanGanesh01 Nov 9, 2024
cec0b17
Add files via upload
ViswanathanGanesh01 Nov 9, 2024
822b640
Delete Buildings/Electrical/AC/ThreePhasesBalanced/Loads/MotorDrive/T…
ViswanathanGanesh01 Nov 9, 2024
161fa25
Add files via upload
ViswanathanGanesh01 Nov 9, 2024
5131c80
Add files via upload
ViswanathanGanesh01 Nov 9, 2024
9767d2e
Add files via upload
ViswanathanGanesh01 Nov 12, 2024
0388b35
Delete Buildings/Resources/Scripts/Dymola/Electrical/AC/ThreePhasesBa…
ViswanathanGanesh01 Nov 12, 2024
0929c9d
Delete Buildings/Resources/Scripts/Dymola/Electrical/AC/ThreePhasesBa…
ViswanathanGanesh01 Nov 12, 2024
09e94d1
Add files via upload
ViswanathanGanesh01 Nov 12, 2024
0b0460c
Delete Buildings/Resources/Scripts/Dymola/Electrical/AC/ThreePhasesBa…
ViswanathanGanesh01 Nov 21, 2024
d5dee60
Add files via upload
ViswanathanGanesh01 Nov 21, 2024
1567f9c
Delete Buildings/Electrical/AC/ThreePhasesBalanced/Loads/MotorDrive d…
ViswanathanGanesh01 Nov 21, 2024
e8cdf81
Add files via upload
ViswanathanGanesh01 Nov 21, 2024
c136aa0
Add files via upload
ViswanathanGanesh01 Nov 21, 2024
8c8b757
Add files via upload
ViswanathanGanesh01 Dec 18, 2024
33a033c
Add files via upload
ViswanathanGanesh01 Dec 18, 2024
4babebf
Add files via upload
ViswanathanGanesh01 Dec 18, 2024
585220b
Add files via upload
ViswanathanGanesh01 Dec 19, 2024
24230bc
Add files via upload
ViswanathanGanesh01 Dec 19, 2024
c0a1639
Add files via upload
ViswanathanGanesh01 Dec 19, 2024
7e509eb
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
3b7f25c
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
6134869
Delete Buildings/Resources/Scripts/Dymola/Electrical/AC/ThreePhasesBa…
ViswanathanGanesh01 Jan 2, 2025
5e0b5d9
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
3237f14
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
287b98c
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
daefb82
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
cb07d6b
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
966067e
Add files via upload
ViswanathanGanesh01 Jan 2, 2025
4336988
Add files via upload
ViswanathanGanesh01 Jan 3, 2025
257df4b
Add files via upload
ViswanathanGanesh01 Jan 3, 2025
59d6c93
Add files via upload
ViswanathanGanesh01 Jan 10, 2025
86b39ed
Add files via upload
ViswanathanGanesh01 Jan 10, 2025
0d6ed37
Add files via upload
ViswanathanGanesh01 Jan 10, 2025
cdf693f
Add files via upload
ViswanathanGanesh01 Jan 10, 2025
d924a27
Add files via upload
ViswanathanGanesh01 Jan 10, 2025
989a2aa
Add files via upload
ViswanathanGanesh01 Jan 24, 2025
8b68771
Delete Buildings/Electrical/AC/ThreePhasesBalanced/Loads/MotorDrive/I…
ViswanathanGanesh01 Jan 27, 2025
7b0657d
Update package.order
ViswanathanGanesh01 Jan 27, 2025
db57ead
Add files via upload
ViswanathanGanesh01 Jan 28, 2025
5e4ec5b
Add files via upload
ViswanathanGanesh01 Jan 28, 2025
8109e7f
Add files via upload
ViswanathanGanesh01 Jan 28, 2025
01a3828
Add files via upload
ViswanathanGanesh01 Jan 28, 2025
2b881dd
Add files via upload
ViswanathanGanesh01 Jan 28, 2025
86d242d
Add files via upload
ViswanathanGanesh01 Feb 3, 2025
71fcc56
Add files via upload
ViswanathanGanesh01 Feb 3, 2025
ec7982b
Delete Buildings/Electrical/AC/ThreePhasesBalanced/Loads/MotorDrive/I…
ViswanathanGanesh01 Feb 3, 2025
bb0c2b9
Merge branch 'lbl-srg:master' into issue2948-MotorDrive
ViswanathanGanesh01 Feb 3, 2025
5a9432d
Add files via upload
ViswanathanGanesh01 Feb 12, 2025
49be157
Delete Buildings/Electrical/AC/ThreePhasesBalanced/Loads/MotorDrive/T…
ViswanathanGanesh01 Feb 12, 2025
24e1f4f
Add files via upload
ViswanathanGanesh01 Feb 12, 2025
8ddf668
Add files via upload
ViswanathanGanesh01 Feb 12, 2025
836c661
Merge pull request #4103 from ViswanathanGanesh01/issue2948-MotorDrive
JayHuLBL Feb 18, 2025
dcdda45
added reference, openmoldeica
JayHuLBL Feb 19, 2025
649259c
removed BOM
JayHuLBL Feb 19, 2025
da1ecfc
corrected wrong using of scripts
JayHuLBL Feb 19, 2025
867e251
corrected package orders
JayHuLBL Feb 19, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,309 @@
within Buildings.Electrical.AC.ThreePhasesBalanced.Loads.MotorDrive.Coupled;
model Chiller "Motor coupled chiller"
extends Buildings.Fluid.Interfaces.PartialFourPortInterface(
m1_flow_nominal = QCon_flow_nominal/cp1_default/dTCon_nominal,
m2_flow_nominal = QEva_flow_nominal/cp2_default/dTEva_nominal);
extends Buildings.Electrical.Interfaces.PartialOnePort(
redeclare package PhaseSystem =
Buildings.Electrical.PhaseSystems.OnePhase,
redeclare replaceable Interfaces.Terminal_n terminal);
//Chiller parameters
parameter Modelica.Units.SI.HeatFlowRate QEva_flow_nominal(max=0) = -P_nominal * COP_nominal
"Nominal cooling heat flow rate (Negative)"
annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.SI.HeatFlowRate QCon_flow_nominal(min=0) = P_nominal - QEva_flow_nominal
"Nominal heating flow rate (Positive)"
annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.SI.TemperatureDifference dTEva_nominal(
final max=0)=-10 "Temperature difference evaporator outlet-inlet"
annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.SI.TemperatureDifference dTCon_nominal(
final min=0)=10 "Temperature difference condenser outlet-inlet"
annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.SI.Power P_nominal(min=0)
"Nominal compressor power (at y=1)"
annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.NonSI.AngularVelocity_rpm Nrpm_nominal=1500
"Nominal rotational speed of compressor"
annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.SI.Pressure dp1_nominal(displayUnit="Pa")
"Pressure difference over condenser
" annotation (Dialog(group="Nominal condition"));
parameter Modelica.Units.SI.Pressure dp2_nominal(displayUnit="Pa")
"Pressure difference over evaporator"
annotation (Dialog(group="Nominal condition"));

//Efficiency
parameter Boolean use_eta_Carnot_nominal = true
"Set to true to use Carnot effectiveness etaCarnot_nominal rather than COP_nominal"
annotation(Dialog(group="Efficiency"));
parameter Real etaCarnot_nominal(unit="1")=COP_nominal/(TUseAct_nominal/(
TCon_nominal + TAppCon_nominal - (TEva_nominal - TAppEva_nominal)))
"Carnot effectiveness (=COP/COP_Carnot) used if use_eta_Carnot_nominal = true"
annotation (Dialog(group="Efficiency", enable=use_eta_Carnot_nominal));
parameter Real COP_nominal(unit="1")=etaCarnot_nominal*TUseAct_nominal/(
TCon_nominal + TAppCon_nominal - (TEva_nominal - TAppEva_nominal))
"Coefficient of performance at TEva_nominal and TCon_nominal, used if use_eta_Carnot_nominal = false"
annotation (Dialog(group="Efficiency", enable=not use_eta_Carnot_nominal));
parameter Modelica.Units.SI.Temperature TCon_nominal=303.15
"Condenser temperature used to compute COP_nominal if use_eta_Carnot_nominal=false"
annotation (Dialog(group="Efficiency", enable=not use_eta_Carnot_nominal));
parameter Modelica.Units.SI.Temperature TEva_nominal=278.15
"Evaporator temperature used to compute COP_nominal if use_eta_Carnot_nominal=false"
annotation (Dialog(group="Efficiency", enable=not use_eta_Carnot_nominal));
parameter Real a[:] = {1}
"Coefficients for efficiency curve (need p(a=a, yPL=1)=1)"
annotation (Dialog(group="Efficiency"));
parameter Modelica.Units.SI.TemperatureDifference TAppCon_nominal(min=0) = if cp1_default < 1500 then 5 else 2
"Temperature difference between refrigerant and working fluid outlet in condenser"
annotation (Dialog(group="Efficiency"));
parameter Modelica.Units.SI.TemperatureDifference TAppEva_nominal(min=0) = if cp2_default < 1500 then 5 else 2
"Temperature difference between refrigerant and working fluid outlet in evaporator"
annotation (Dialog(group="Efficiency"));

//Motor parameters
replaceable parameter
Buildings.Electrical.AC.ThreePhasesBalanced.Loads.MotorDrive.InductionMotors.Data.Generic
per constrainedby
Buildings.Electrical.AC.ThreePhasesBalanced.Loads.MotorDrive.InductionMotors.Data.Generic
"Record of Induction Motor with performance data" annotation (choicesAllMatching=true,
Placement(transformation(extent={{52,60},{72,80}})));

//Controller parameters
parameter Boolean have_controller = true
"Set to true for enableing PID control";
parameter Modelica.Blocks.Types.SimpleController
controllerType=Modelica.Blocks.Types.SimpleController.PI
"Type of controller"
annotation (Dialog(tab="Advanced",
group="Controller",
enable=have_controller));
parameter Real k(min=0) = 1
"Gain of controller"
annotation (Dialog(tab="Advanced",
group="Controller",
enable=have_controller));
parameter Modelica.Units.SI.Time Ti(min=Modelica.Constants.small)=0.5
"Time constant of Integrator block"
annotation (Dialog(tab="Advanced",
group="Controller",
enable=have_controller and
controllerType == Modelica.Blocks.Types.SimpleController.PI or
controllerType == Modelica.Blocks.Types.SimpleController.PID));
parameter Modelica.Units.SI.Time Td(min=0) = 0.1
"Time constant of Derivative block"
annotation (Dialog(tab="Advanced",
group="Controller",
enable=have_controller and
controllerType == Modelica.Blocks.Types.SimpleController.PD or
controllerType == Modelica.Blocks.Types.SimpleController.PID));
parameter Real yMax(start=1)=1
"Upper limit of output"
annotation (Dialog(tab="Advanced",
group="Controller",
enable=have_controller));
parameter Real yMin=0
"Lower limit of output"
annotation (Dialog(tab="Advanced",
group="Controller",
enable=have_controller));

Buildings.Electrical.AC.ThreePhasesBalanced.Loads.MotorDrive.ThermoFluid.Chiller mecChi(
redeclare final package Medium1 = Medium1,
redeclare final package Medium2 = Medium2,
final m1_flow_nominal=m1_flow_nominal,
final m2_flow_nominal=m2_flow_nominal,
final dTEva_nominal=dTEva_nominal,
final dTCon_nominal=dTCon_nominal,
final use_eta_Carnot_nominal=use_eta_Carnot_nominal,
final etaCarnot_nominal=etaCarnot_nominal,
final COP_nominal=COP_nominal,
final TCon_nominal=TCon_nominal,
final TEva_nominal=TEva_nominal,
final a=a,
final dp1_nominal=dp1_nominal,
final dp2_nominal=dp2_nominal,
final TAppCon_nominal=TAppCon_nominal,
final TAppEva_nominal=TAppEva_nominal,
final P_nominal=P_nominal,
final QEva_flow_nominal=QEva_flow_nominal,
final QCon_flow_nominal=QCon_flow_nominal,
final Nrpm_nominal=Nrpm_nominal)
"Chiller model with mechanical interface"
annotation (Placement(transformation(extent={{-10,-10},{10,10}})));
final Modelica.Blocks.Sources.RealExpression loaTor(y=mecChi.shaft.tau)
"Chiller torque block"
annotation (Placement(transformation(extent={{-16,10},{-36,30}})));
Buildings.Electrical.AC.ThreePhasesBalanced.Loads.MotorDrive.InductionMotors.SquirrelCageDrive
simMot(
per=per,
reverseActing=false,
final controllerType=controllerType,
final k=k,
final Ti=Ti,
final Td=Td,
final yMax=yMax,
final yMin=yMin) "Motor model"
annotation (Placement(transformation(extent={{-40,40},{-20,60}})));

Modelica.Blocks.Interfaces.RealInput setPoi "Set point of control target"
annotation (Placement(transformation(
extent={{-10,-10},{10,10}},
rotation=0,
origin={-110,90}), iconTransformation(
extent={{-10,-10},{10,10}},
rotation=0,
origin={-110,90})));
Modelica.Blocks.Interfaces.RealInput meaPoi "Measured value of control target"
annotation (Placement(transformation(extent={{-120,20},{-100,40}}),
iconTransformation(extent={{-120,20},{-100,40}})));

protected
constant Boolean COP_is_for_cooling = true
"Set to true if the specified COP is for cooling";

final parameter Modelica.Units.SI.Temperature TUseAct_nominal=
if COP_is_for_cooling
then TEva_nominal - TAppEva_nominal
else TCon_nominal + TAppCon_nominal
"Nominal evaporator temperature for chiller or condenser temperature for heat pump,
taking into account pinch temperature between fluid and refrigerant";

final parameter Modelica.Units.SI.SpecificHeatCapacity cp1_default=
Medium1.specificHeatCapacityCp(Medium1.setState_pTX(
p = Medium1.p_default,
T = Medium1.T_default,
X = Medium1.X_default))
"Specific heat capacity of medium 1 at default medium state";

final parameter Modelica.Units.SI.SpecificHeatCapacity cp2_default=
Medium2.specificHeatCapacityCp(Medium2.setState_pTX(
p = Medium2.p_default,
T = Medium2.T_default,
X = Medium2.X_default))
"Specific heat capacity of medium 2 at default medium state";

equation
connect(port_a1, mecChi.port_a1) annotation (Line(points={{-100,60},{-70,60},
{-70,6},{-10,6}}, color={0,127,255}));
connect(port_b2, mecChi.port_b2) annotation (Line(points={{-100,-60},{-60,-60},
{-60,-6},{-10,-6}}, color={0,127,255}));
connect(mecChi.port_b1, port_b1) annotation (Line(points={{10,6},{60,6},{60,60},
{100,60}}, color={0,127,255}));
connect(mecChi.port_a2, port_a2) annotation (Line(points={{10,-6},{60,-6},
{60,-60},{100,-60}}, color={0,127,255}));
connect(setPoi, simMot.setPoi) annotation (Line(points={{-110,90},{-60,90},{
-60,58},{-41.6667,58}},
color={0,0,127}));
connect(meaPoi, simMot.mea) annotation (Line(points={{-110,30},{-60,30},{-60,
50},{-41.6667,50}},
color={0,0,127}));
connect(loaTor.y, simMot.tau_m) annotation (Line(points={{-37,20},{-37,18},{
-46,18},{-46,42},{-41.6667,42}},
color={0,0,127}));
connect(simMot.terminal, terminal) annotation (Line(points={{-28.3333,60},{
-28.3333,86},{0,86},{0,100}},
color={0,120,120}));
connect(mecChi.shaft, simMot.shaft) annotation (Line(points={{0,10},{0,50},{
-20,50}}, color={0,0,0}));
annotation (Icon(coordinateSystem(preserveAspectRatio=true,extent={{-100,
-80},{100,100}}),
graphics={
Rectangle(
extent={{-70,80},{70,-80}},
lineColor={0,0,255},
pattern=LinePattern.None,
fillColor={95,95,95},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-56,68},{58,50}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-56,-52},{58,-70}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-103,64},{98,54}},
lineColor={0,0,255},
pattern=LinePattern.None,
fillColor={0,0,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-2,54},{98,64}},
lineColor={0,0,255},
pattern=LinePattern.None,
fillColor={255,0,0},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-101,-56},{100,-66}},
lineColor={0,0,255},
pattern=LinePattern.None,
fillColor={0,0,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-100,-66},{0,-56}},
lineColor={0,0,127},
pattern=LinePattern.None,
fillColor={0,0,127},
fillPattern=FillPattern.Solid),
Polygon(
points={{-42,0},{-52,-12},{-32,-12},{-42,0}},
lineColor={0,0,0},
smooth=Smooth.None,
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Polygon(
points={{-42,0},{-52,10},{-32,10},{-42,0}},
lineColor={0,0,0},
smooth=Smooth.None,
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-44,50},{-40,10}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{-44,-12},{-40,-52}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Rectangle(
extent={{38,50},{42,-52}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Ellipse(
extent={{18,22},{62,-20}},
lineColor={0,0,0},
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Polygon(
points={{40,22},{22,-10},{58,-10},{40,22}},
lineColor={0,0,0},
smooth=Smooth.None,
fillColor={255,255,255},
fillPattern=FillPattern.Solid),
Line(points={{62,0},{80,0}}, color={0,0,255}),
Line(points={{80,30},{100,30}}, color={0,0,255}),
Line(points={{80,0},{80,30}}, color={0,0,255}),
Line(points={{80,-30},{100,-30}}, color={0,0,255}),
Line(points={{80,-30},{80,0}}, color={0,0,255})}),
defaultComponentName="chi",
Documentation(info="<html>
<p>
This is a model of a squirrel cage induction motor coupled chiller with
ideal speed control. The model has electrical interfaces and can be used for
simulating microgrids and discussing grid interactions.
</p>
</html>", revisions="<html>
<ul>
<li>May 07, 2024, by Viswanathan Ganesh and Zhanwei He:<br>Updated Implementation. </li>
<li>October 15, 2021, by Mingzhe Liu:<br>First implementation. </li>
</ul>
</html>"),
Diagram(coordinateSystem(extent={{-100,-80},{100,100}})));
end Chiller;
Loading
Loading