Fixing website and API documentation links
[PyCIM.git] / CIM14 / ENTSOE / Equipment / Core / Terminal.py
blobea7a2ad8efba272b7b289c2e0c33e018835b668f
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
19 # IN THE SOFTWARE.
21 from CIM14.ENTSOE.Equipment.Core.IdentifiedObject import IdentifiedObject
23 class Terminal(IdentifiedObject):
24 """An electrical connection point to a piece of conducting equipment. Terminals are connected at physical connection points called 'connectivity nodes'.For UCTE profile, the terminal associated with the limit is always required, and thus there is no need to exchange the associated Equipment which can always be derived from the terminal.
25 """
27 def __init__(self, sequenceNumber=0, OperationalLimitSet=None, ConductingEquipment=None, HasFirst_MutualCoupling=None, Measurements=None, ConnectivityNode=None, RegulatingControl=None, TieFlow=None, HasSecond_MutualCoupling=None, *args, **kw_args):
28 """Initialises a new 'Terminal' instance.
30 @param sequenceNumber: The orientation of the terminal connections for a multiple terminal conducting equipment. The sequence numbering starts with 1 and additional terminals should follow in increasing order. The first terminal is the 'starting point' for a two terminal branch. In the case of class TransformerWinding only one terminal is used so its sequenceNumber must be 1.
31 @param OperationalLimitSet: The operatinal limits sets that applie specifically to this terminal. Other operational limits sets may apply to this terminal through the association to Equipment.
32 @param ConductingEquipment: ConductingEquipment has 1 or 2 terminals that may be connected to other ConductingEquipment terminals via ConnectivityNodes
33 @param HasFirst_MutualCoupling: Mutual couplings associated with the branch as the first branch.
34 @param Measurements: One or more measurements may be associated with a terminal in the network. Measurement-Terminal defines where the measurement is placed in the network topology. Some Measurements represent quantities related to a particular sensor position, e.g. a voltage transformer (PT) at a busbar or a current transformer (CT) at the bar between a breaker and an isolator. The sensing position is captured by the Measurement - Terminal association that makes it possible to place the sensing position at a well defined place. The place is defined by the connection of the Terminal to ConductingEquipment.
35 @param ConnectivityNode: Terminals interconnect with zero impedance at a node. Measurements on a node apply to all of its terminals.
36 @param RegulatingControl: The terminal is regulated by a control.
37 @param TieFlow: The control area tie flows to which this terminal associates.
38 @param HasSecond_MutualCoupling: Mutual couplings with the branch associated as the first branch.
39 """
40 #: The orientation of the terminal connections for a multiple terminal conducting equipment. The sequence numbering starts with 1 and additional terminals should follow in increasing order. The first terminal is the 'starting point' for a two terminal branch. In the case of class TransformerWinding only one terminal is used so its sequenceNumber must be 1.
41 self.sequenceNumber = sequenceNumber
43 self._OperationalLimitSet = []
44 self.OperationalLimitSet = [] if OperationalLimitSet is None else OperationalLimitSet
46 self._ConductingEquipment = None
47 self.ConductingEquipment = ConductingEquipment
49 self._HasFirst_MutualCoupling = []
50 self.HasFirst_MutualCoupling = [] if HasFirst_MutualCoupling is None else HasFirst_MutualCoupling
52 self._Measurements = []
53 self.Measurements = [] if Measurements is None else Measurements
55 self._ConnectivityNode = None
56 self.ConnectivityNode = ConnectivityNode
58 self._RegulatingControl = []
59 self.RegulatingControl = [] if RegulatingControl is None else RegulatingControl
61 self._TieFlow = []
62 self.TieFlow = [] if TieFlow is None else TieFlow
64 self._HasSecond_MutualCoupling = []
65 self.HasSecond_MutualCoupling = [] if HasSecond_MutualCoupling is None else HasSecond_MutualCoupling
67 super(Terminal, self).__init__(*args, **kw_args)
69 _attrs = ["sequenceNumber"]
70 _attr_types = {"sequenceNumber": int}
71 _defaults = {"sequenceNumber": 0}
72 _enums = {}
73 _refs = ["OperationalLimitSet", "ConductingEquipment", "HasFirst_MutualCoupling", "Measurements", "ConnectivityNode", "RegulatingControl", "TieFlow", "HasSecond_MutualCoupling"]
74 _many_refs = ["OperationalLimitSet", "HasFirst_MutualCoupling", "Measurements", "RegulatingControl", "TieFlow", "HasSecond_MutualCoupling"]
76 def getOperationalLimitSet(self):
77 """The operatinal limits sets that applie specifically to this terminal. Other operational limits sets may apply to this terminal through the association to Equipment.
78 """
79 return self._OperationalLimitSet
81 def setOperationalLimitSet(self, value):
82 for x in self._OperationalLimitSet:
83 x.Terminal = None
84 for y in value:
85 y._Terminal = self
86 self._OperationalLimitSet = value
88 OperationalLimitSet = property(getOperationalLimitSet, setOperationalLimitSet)
90 def addOperationalLimitSet(self, *OperationalLimitSet):
91 for obj in OperationalLimitSet:
92 obj.Terminal = self
94 def removeOperationalLimitSet(self, *OperationalLimitSet):
95 for obj in OperationalLimitSet:
96 obj.Terminal = None
98 def getConductingEquipment(self):
99 """ConductingEquipment has 1 or 2 terminals that may be connected to other ConductingEquipment terminals via ConnectivityNodes
101 return self._ConductingEquipment
103 def setConductingEquipment(self, value):
104 if self._ConductingEquipment is not None:
105 filtered = [x for x in self.ConductingEquipment.Terminals if x != self]
106 self._ConductingEquipment._Terminals = filtered
108 self._ConductingEquipment = value
109 if self._ConductingEquipment is not None:
110 if self not in self._ConductingEquipment._Terminals:
111 self._ConductingEquipment._Terminals.append(self)
113 ConductingEquipment = property(getConductingEquipment, setConductingEquipment)
115 def getHasFirst_MutualCoupling(self):
116 """Mutual couplings associated with the branch as the first branch.
118 return self._HasFirst_MutualCoupling
120 def setHasFirst_MutualCoupling(self, value):
121 for x in self._HasFirst_MutualCoupling:
122 x.First_Terminal = None
123 for y in value:
124 y._First_Terminal = self
125 self._HasFirst_MutualCoupling = value
127 HasFirst_MutualCoupling = property(getHasFirst_MutualCoupling, setHasFirst_MutualCoupling)
129 def addHasFirst_MutualCoupling(self, *HasFirst_MutualCoupling):
130 for obj in HasFirst_MutualCoupling:
131 obj.First_Terminal = self
133 def removeHasFirst_MutualCoupling(self, *HasFirst_MutualCoupling):
134 for obj in HasFirst_MutualCoupling:
135 obj.First_Terminal = None
137 def getMeasurements(self):
138 """One or more measurements may be associated with a terminal in the network. Measurement-Terminal defines where the measurement is placed in the network topology. Some Measurements represent quantities related to a particular sensor position, e.g. a voltage transformer (PT) at a busbar or a current transformer (CT) at the bar between a breaker and an isolator. The sensing position is captured by the Measurement - Terminal association that makes it possible to place the sensing position at a well defined place. The place is defined by the connection of the Terminal to ConductingEquipment.
140 return self._Measurements
142 def setMeasurements(self, value):
143 for x in self._Measurements:
144 x.Terminal = None
145 for y in value:
146 y._Terminal = self
147 self._Measurements = value
149 Measurements = property(getMeasurements, setMeasurements)
151 def addMeasurements(self, *Measurements):
152 for obj in Measurements:
153 obj.Terminal = self
155 def removeMeasurements(self, *Measurements):
156 for obj in Measurements:
157 obj.Terminal = None
159 def getConnectivityNode(self):
160 """Terminals interconnect with zero impedance at a node. Measurements on a node apply to all of its terminals.
162 return self._ConnectivityNode
164 def setConnectivityNode(self, value):
165 if self._ConnectivityNode is not None:
166 filtered = [x for x in self.ConnectivityNode.Terminals if x != self]
167 self._ConnectivityNode._Terminals = filtered
169 self._ConnectivityNode = value
170 if self._ConnectivityNode is not None:
171 if self not in self._ConnectivityNode._Terminals:
172 self._ConnectivityNode._Terminals.append(self)
174 ConnectivityNode = property(getConnectivityNode, setConnectivityNode)
176 def getRegulatingControl(self):
177 """The terminal is regulated by a control.
179 return self._RegulatingControl
181 def setRegulatingControl(self, value):
182 for x in self._RegulatingControl:
183 x.Terminal = None
184 for y in value:
185 y._Terminal = self
186 self._RegulatingControl = value
188 RegulatingControl = property(getRegulatingControl, setRegulatingControl)
190 def addRegulatingControl(self, *RegulatingControl):
191 for obj in RegulatingControl:
192 obj.Terminal = self
194 def removeRegulatingControl(self, *RegulatingControl):
195 for obj in RegulatingControl:
196 obj.Terminal = None
198 def getTieFlow(self):
199 """The control area tie flows to which this terminal associates.
201 return self._TieFlow
203 def setTieFlow(self, value):
204 for x in self._TieFlow:
205 x.Terminal = None
206 for y in value:
207 y._Terminal = self
208 self._TieFlow = value
210 TieFlow = property(getTieFlow, setTieFlow)
212 def addTieFlow(self, *TieFlow):
213 for obj in TieFlow:
214 obj.Terminal = self
216 def removeTieFlow(self, *TieFlow):
217 for obj in TieFlow:
218 obj.Terminal = None
220 def getHasSecond_MutualCoupling(self):
221 """Mutual couplings with the branch associated as the first branch.
223 return self._HasSecond_MutualCoupling
225 def setHasSecond_MutualCoupling(self, value):
226 for x in self._HasSecond_MutualCoupling:
227 x.Second_Terminal = None
228 for y in value:
229 y._Second_Terminal = self
230 self._HasSecond_MutualCoupling = value
232 HasSecond_MutualCoupling = property(getHasSecond_MutualCoupling, setHasSecond_MutualCoupling)
234 def addHasSecond_MutualCoupling(self, *HasSecond_MutualCoupling):
235 for obj in HasSecond_MutualCoupling:
236 obj.Second_Terminal = self
238 def removeHasSecond_MutualCoupling(self, *HasSecond_MutualCoupling):
239 for obj in HasSecond_MutualCoupling:
240 obj.Second_Terminal = None