1 # Copyright (C) 2010-2011 Richard Lincoln
3 # Permission is hereby granted, free of charge, to any person obtaining a copy
4 # of this software and associated documentation files (the "Software"), to
5 # deal in the Software without restriction, including without limitation the
6 # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
7 # sell copies of the Software, and to permit persons to whom the Software is
8 # furnished to do so, subject to the following conditions:
10 # The above copyright notice and this permission notice shall be included in
11 # all copies or substantial portions of the Software.
13 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14 # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15 # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16 # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17 # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
18 # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 from CIM14
.IEC61970
.Core
.IdentifiedObject
import IdentifiedObject
23 class StartupModel(IdentifiedObject
):
24 """Unit start up characteristics depending on how long the unit has been off line
27 def __init__(self
, stbyAuxP
=0.0, incrementalMaintCost
=0.0, hotStandbyHeat
=0.0, startupPriority
=0, fixedMaintCost
=0.0, startupDate
='', minimumRunTime
=0.0, startupCost
=0.0, riskFactorCost
=0.0, minimumDownTime
=0.0, ThermalGeneratingUnit
=None, StartRampCurve
=None, StartMainFuelCurve
=None, StartIgnFuelCurve
=None, *args
, **kw_args
):
28 """Initialises a new 'StartupModel' instance.
30 @param stbyAuxP: The unit's auxiliary active power consumption to maintain standby mode
31 @param incrementalMaintCost: Incremental Maintenance Cost
32 @param hotStandbyHeat: The amount of heat input per time uint required for hot standby operation
33 @param startupPriority: Startup priority within control area where lower numbers indicate higher priorities. More than one unit in an area may be assigned the same priority.
34 @param fixedMaintCost: Fixed Maintenance Cost
35 @param startupDate: The date and time of the most recent generating unit startup
36 @param minimumRunTime: The minimum number of hours the unit must be operating before being allowed to shut down
37 @param startupCost: Total miscellaneous start up costs
38 @param riskFactorCost: The opportunity cost associated with the return in monetary unit. This represents the restart's 'share' of the unit depreciation and risk of an event which would damage the unit.
39 @param minimumDownTime: The minimum number of hours the unit must be down before restart
40 @param ThermalGeneratingUnit: A thermal generating unit may have a startup model
41 @param StartRampCurve: The unit's startup model may have a startup ramp curve
42 @param StartMainFuelCurve: The unit's startup model may have a startup main fuel curve
43 @param StartIgnFuelCurve: The unit's startup model may have a startup ignition fuel curve
45 #: The unit's auxiliary active power consumption to maintain standby mode
46 self
.stbyAuxP
= stbyAuxP
48 #: Incremental Maintenance Cost
49 self
.incrementalMaintCost
= incrementalMaintCost
51 #: The amount of heat input per time uint required for hot standby operation
52 self
.hotStandbyHeat
= hotStandbyHeat
54 #: Startup priority within control area where lower numbers indicate higher priorities. More than one unit in an area may be assigned the same priority.
55 self
.startupPriority
= startupPriority
57 #: Fixed Maintenance Cost
58 self
.fixedMaintCost
= fixedMaintCost
60 #: The date and time of the most recent generating unit startup
61 self
.startupDate
= startupDate
63 #: The minimum number of hours the unit must be operating before being allowed to shut down
64 self
.minimumRunTime
= minimumRunTime
66 #: Total miscellaneous start up costs
67 self
.startupCost
= startupCost
69 #: The opportunity cost associated with the return in monetary unit. This represents the restart's 'share' of the unit depreciation and risk of an event which would damage the unit.
70 self
.riskFactorCost
= riskFactorCost
72 #: The minimum number of hours the unit must be down before restart
73 self
.minimumDownTime
= minimumDownTime
75 self
._ThermalGeneratingUnit
= None
76 self
.ThermalGeneratingUnit
= ThermalGeneratingUnit
78 self
._StartRampCurve
= None
79 self
.StartRampCurve
= StartRampCurve
81 self
._StartMainFuelCurve
= None
82 self
.StartMainFuelCurve
= StartMainFuelCurve
84 self
._StartIgnFuelCurve
= None
85 self
.StartIgnFuelCurve
= StartIgnFuelCurve
87 super(StartupModel
, self
).__init
__(*args
, **kw_args
)
89 _attrs
= ["stbyAuxP", "incrementalMaintCost", "hotStandbyHeat", "startupPriority", "fixedMaintCost", "startupDate", "minimumRunTime", "startupCost", "riskFactorCost", "minimumDownTime"]
90 _attr_types
= {"stbyAuxP": float, "incrementalMaintCost": float, "hotStandbyHeat": float, "startupPriority": int, "fixedMaintCost": float, "startupDate": str, "minimumRunTime": float, "startupCost": float, "riskFactorCost": float, "minimumDownTime": float}
91 _defaults
= {"stbyAuxP": 0.0, "incrementalMaintCost": 0.0, "hotStandbyHeat": 0.0, "startupPriority": 0, "fixedMaintCost": 0.0, "startupDate": '', "minimumRunTime": 0.0, "startupCost": 0.0, "riskFactorCost": 0.0, "minimumDownTime": 0.0}
93 _refs
= ["ThermalGeneratingUnit", "StartRampCurve", "StartMainFuelCurve", "StartIgnFuelCurve"]
96 def getThermalGeneratingUnit(self
):
97 """A thermal generating unit may have a startup model
99 return self
._ThermalGeneratingUnit
101 def setThermalGeneratingUnit(self
, value
):
102 if self
._ThermalGeneratingUnit
is not None:
103 self
._ThermalGeneratingUnit
._StartupModel
= None
105 self
._ThermalGeneratingUnit
= value
106 if self
._ThermalGeneratingUnit
is not None:
107 self
._ThermalGeneratingUnit
.StartupModel
= None
108 self
._ThermalGeneratingUnit
._StartupModel
= self
110 ThermalGeneratingUnit
= property(getThermalGeneratingUnit
, setThermalGeneratingUnit
)
112 def getStartRampCurve(self
):
113 """The unit's startup model may have a startup ramp curve
115 return self
._StartRampCurve
117 def setStartRampCurve(self
, value
):
118 if self
._StartRampCurve
is not None:
119 self
._StartRampCurve
._StartupModel
= None
121 self
._StartRampCurve
= value
122 if self
._StartRampCurve
is not None:
123 self
._StartRampCurve
.StartupModel
= None
124 self
._StartRampCurve
._StartupModel
= self
126 StartRampCurve
= property(getStartRampCurve
, setStartRampCurve
)
128 def getStartMainFuelCurve(self
):
129 """The unit's startup model may have a startup main fuel curve
131 return self
._StartMainFuelCurve
133 def setStartMainFuelCurve(self
, value
):
134 if self
._StartMainFuelCurve
is not None:
135 self
._StartMainFuelCurve
._StartupModel
= None
137 self
._StartMainFuelCurve
= value
138 if self
._StartMainFuelCurve
is not None:
139 self
._StartMainFuelCurve
.StartupModel
= None
140 self
._StartMainFuelCurve
._StartupModel
= self
142 StartMainFuelCurve
= property(getStartMainFuelCurve
, setStartMainFuelCurve
)
144 def getStartIgnFuelCurve(self
):
145 """The unit's startup model may have a startup ignition fuel curve
147 return self
._StartIgnFuelCurve
149 def setStartIgnFuelCurve(self
, value
):
150 if self
._StartIgnFuelCurve
is not None:
151 self
._StartIgnFuelCurve
._StartupModel
= None
153 self
._StartIgnFuelCurve
= value
154 if self
._StartIgnFuelCurve
is not None:
155 self
._StartIgnFuelCurve
.StartupModel
= None
156 self
._StartIgnFuelCurve
._StartupModel
= self
158 StartIgnFuelCurve
= property(getStartIgnFuelCurve
, setStartIgnFuelCurve
)