ThermalAmbientDCCE

model ThermalAmbientDCCE "Thermal ambient for DC machine with compound excitation"
    extends Machines.Interfaces.DCMachines.PartialThermalAmbientDCMachines(redeclare final Machines.Interfaces.DCMachines.ThermalPortDCCE thermalPort);

    parameter Modelica.SIunits.Temperature Te(start = TDefault) "Temperature of (shunt) excitation"
        annotation (Dialog(enable = not useTemperatureInputs));
    parameter Modelica.SIunits.Temperature Tse(start = TDefault) "Temperature of series excitation"
        annotation (Dialog(enable = not useTemperatureInputs));
    output Modelica.SIunits.HeatFlowRate Q_flowShuntExcitation = temperatureShuntExcitation.port.Q_flow "Heat flow rate of (shunt) excitation";
    output Modelica.SIunits.HeatFlowRate Q_flowSeriesExcitation = temperatureSeriesExcitation.port.Q_flow "Heat flow rate of series excitation";
    output Modelica.SIunits.HeatFlowRate Q_flowTotal = Q_flowArmature + Q_flowCore + Q_flowStrayLoad + Q_flowFriction + Q_flowBrush + Q_flowShuntExcitation + Q_flowSeriesExcitation;
    Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature temperatureShuntExcitation annotation (Placement(transformation(
        extent = {
            {-10, -10}, 
            {10, 10}},
        rotation = 90,
        origin = {-20, 30})));
    Modelica.Blocks.Sources.Constant constTe(final k = Te) if not useTemperatureInputs annotation (Placement(transformation(
        extent = {
            {-10, -10}, 
            {10, 10}},
        rotation = 90,
        origin = {-20, -10})));
    Modelica.Blocks.Interfaces.RealInput T_e if useTemperatureInputs "Temperature of (shunt) excitation"
        annotation (Placement(
            transformation(
                extent = {
                    {-20, -20}, 
                    {20, 20}},
                rotation = 90,
                origin = {100, -118}),
            iconTransformation(
                extent = {
                    {-20, -20}, 
                    {20, 20}},
                rotation = 90,
                origin = {100, -118})));
    Modelica.Thermal.HeatTransfer.Sources.PrescribedTemperature temperatureSeriesExcitation annotation (Placement(transformation(
        extent = {
            {-10, -10}, 
            {10, 10}},
        rotation = 90,
        origin = {-50, 30})));
    Modelica.Blocks.Sources.Constant constTse(final k = Tse) if not useTemperatureInputs annotation (Placement(transformation(
        extent = {
            {-10, -10}, 
            {10, 10}},
        rotation = 90,
        origin = {-50, -10})));
    Modelica.Blocks.Interfaces.RealInput T_se if useTemperatureInputs "Temperature of series excitation"
        annotation (Placement(
            transformation(
                extent = {
                    {-20, -20}, 
                    {20, 20}},
                rotation = 90,
                origin = {0, -120}),
            iconTransformation(
                extent = {
                    {-20, -20}, 
                    {20, 20}},
                rotation = 90,
                origin = {0, -120})));
equation
    connect(T_e,temperatureShuntExcitation.T) annotation (Line(
        points = {
            {100, -118}, 
            {100, -60}, 
            {-40, -60}, 
            {-40, 8}, 
            {-20, 8}, 
            {-20, 18}},
        color = {0, 0, 127}));
    connect(T_se,temperatureSeriesExcitation.T) annotation (Line(
        points = {
            {0, -120}, 
            {0, -60}, 
            {-70, -60}, 
            {-70, 8}, 
            {-50, 8}, 
            {-50, 18}},
        color = {0, 0, 127}));
    connect(constTe.y,temperatureShuntExcitation.T) annotation (Line(
        points = {
            {-20, 1}, 
            {-20, 18}},
        color = {0, 0, 127}));
    connect(constTse.y,temperatureSeriesExcitation.T) annotation (Line(
        points = {
            {-50, 1}, 
            {-50, 18}},
        color = {0, 0, 127}));
    connect(temperatureSeriesExcitation.port,thermalPort.heatPortSeriesExcitation) annotation (Line(
        points = {
            {-50, 40}, 
            {-50, 100}, 
            {0, 100}},
        color = {191, 0, 0}));
    connect(temperatureShuntExcitation.port,thermalPort.heatPortShuntExcitation) annotation (Line(
        points = {
            {-20, 40}, 
            {-20, 100}, 
            {0, 100}},
        color = {191, 0, 0}));

    annotation (
        Icon(graphics = {
            Text(
                extent = {
                    {-100, -20}, 
                    {100, -80}},
                textString = "DCCE")}),
        Documentation(info = "<html>\nThermal ambient for DC machines with compound excitation to prescribe winding temperatures either constant or via signal connectors.\nAdditionally, all losses = heat flows are recorded.\n</html>"));
end ThermalAmbientDCCE;