Coverage for C:\Users\hjanssen\HOME\pyCharmProjects\ethz_hvl\hvl_ccb\hvl_ccb\dev\supercube2015\constants.py : 0%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1# Copyright (c) 2019-2020 ETH Zurich, SIS ID and HVL D-ITET
2#
3"""
4Constants, variable names for the Supercube OPC-connected devices.
5"""
7from aenum import IntEnum
9from hvl_ccb.utils.enum import ValueEnum, unique
12class SupercubeOpcEndpoint(ValueEnum):
13 """
14 OPC Server Endpoint strings for the supercube variants.
15 """
17 A = "OPC.SimaticNET.S7"
18 B = "OPC.SimaticNET.S7"
21@unique
22class GeneralSupport(ValueEnum):
23 """
24 NodeID strings for the support inputs and outputs.
25 """
27 in_1_1 = "hvl-ipc.WINAC.Support1InA"
28 in_1_2 = "hvl-ipc.WINAC.Support1InB"
29 in_2_1 = "hvl-ipc.WINAC.Support2InA"
30 in_2_2 = "hvl-ipc.WINAC.Support2InB"
31 in_3_1 = "hvl-ipc.WINAC.Support3InA"
32 in_3_2 = "hvl-ipc.WINAC.Support3InB"
33 in_4_1 = "hvl-ipc.WINAC.Support4InA"
34 in_4_2 = "hvl-ipc.WINAC.Support4InB"
35 in_5_1 = "hvl-ipc.WINAC.Support5InA"
36 in_5_2 = "hvl-ipc.WINAC.Support5InB"
37 in_6_1 = "hvl-ipc.WINAC.Support6InA"
38 in_6_2 = "hvl-ipc.WINAC.Support6InB"
39 out_1_1 = "hvl-ipc.WINAC.Support1OutA"
40 out_1_2 = "hvl-ipc.WINAC.Support1OutB"
41 out_2_1 = "hvl-ipc.WINAC.Support2OutA"
42 out_2_2 = "hvl-ipc.WINAC.Support2OutB"
43 out_3_1 = "hvl-ipc.WINAC.Support3OutA"
44 out_3_2 = "hvl-ipc.WINAC.Support3OutB"
45 out_4_1 = "hvl-ipc.WINAC.Support4OutA"
46 out_4_2 = "hvl-ipc.WINAC.Support4OutB"
47 out_5_1 = "hvl-ipc.WINAC.Support5OutA"
48 out_5_2 = "hvl-ipc.WINAC.Support5OutB"
49 out_6_1 = "hvl-ipc.WINAC.Support6OutA"
50 out_6_2 = "hvl-ipc.WINAC.Support6OutB"
52 @classmethod
53 def output(cls, port, contact):
54 """
55 Get the NodeID string for a support output.
57 :param port: the desired port (1..6)
58 :param contact: the desired contact at the port (1..2)
59 :return: the node id string
60 """
62 return getattr(cls, "out_{}_{}".format(port, contact))
64 @classmethod
65 def input(cls, port, contact):
66 """
67 Get the NodeID string for a support input.
69 :param port: the desired port (1..6)
70 :param contact: the desired contact at the port (1..2)
71 :return: the node id string
72 """
74 return getattr(cls, "in_{}_{}".format(port, contact))
77@unique
78class BreakdownDetection(ValueEnum):
79 """
80 Node ID strings for the breakdown detection.
81 """
83 #: Boolean read-only variable indicating whether breakdown detection and fast
84 #: switchoff is enabled in the system or not.
85 activated = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.Breakdowndetection.connect"
87 #: Boolean read-only variable telling whether the fast switch-off has triggered.
88 #: This can also be seen using the safety circuit state, therefore no method is
89 #: implemented to read this out directly.
90 triggered = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.Breakdowndetection.triggered"
92 #: Boolean writable variable to reset the fast switch-off. Toggle to re-enable.
93 reset = "hvl-ipc.WINAC.Support6OutA"
96@unique
97class GeneralSockets(ValueEnum):
98 """
99 NodeID strings for the power sockets (3x T13 and 1xCEE16).
100 """
102 #: SEV T13 socket No. 1 (writable boolean).
103 t13_1 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.T13_1"
105 #: SEV T13 socket No. 2 (writable boolean).
106 t13_2 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.T13_2"
108 #: SEV T13 socket No. 3 (writable boolean).
109 t13_3 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.T13_3"
111 #: CEE16 socket (writeable boolean).
112 cee16 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.CEE16"
115T13_SOCKET_PORTS = (1, 2, 3)
116"""
117Port numbers of SEV T13 power socket
118"""
121@unique
122class Safety(ValueEnum):
123 """
124 NodeID strings for the basic safety circuit status and green/red switches "ready"
125 and "operate".
126 """
128 #: Status is a read-only integer containing the state number of the
129 #: supercube-internal state machine. The values correspond to numbers in
130 #: :class:`SafetyStatus`.
131 status_ready_for_red = "hvl-ipc.WINAC.SYSTEMSTATE.ReadyForRed"
132 status_red = "hvl-ipc.WINAC.SYSTEMSTATE.RED"
133 status_green = "hvl-ipc.WINAC.SYSTEMSTATE.GREEN"
134 status_error = "hvl-ipc.WINAC.SYSTEMSTATE.ERROR"
136 #: Writable boolean for switching to Red Ready (locked, HV off) state.
137 switchto_ready = "hvl-ipc.WINAC.SYSTEMSTATE.RED_REQUEST"
138 switchto_green = "hvl-ipc.WINAC.SYSTEMSTATE.GREEN_REQUEST"
140 #: Writable boolean for switching to Red Operate (locket, HV on) state.
141 switchto_operate = "hvl-ipc.WINAC.SYSTEMSTATE.switchon"
143 #: Writeable boolean to manually turn on or off the horn
144 horn = "hvl-ipc.WINAC.SYSTEM_INTERN.hornen"
147class SafetyStatus(IntEnum):
148 """
149 Safety status values that are possible states returned from
150 :meth:`hvl_ccb.dev.supercube.base.Supercube.get_status`. These
151 values correspond to the states of the Supercube's safety circuit statemachine.
152 """
154 #: System is initializing or booting.
155 Initializing = 0
157 #: System is safe, lamps are green and some safety elements are not in place such
158 #: that it cannot be switched to red currently.
159 GreenNotReady = 1
161 #: System is safe and all safety elements are in place to be able to switch to
162 #: *ready*.
163 GreenReady = 2
165 #: System is locked in red state and *ready* to go to *operate* mode.
166 RedReady = 3
168 #: System is locked in red state and in *operate* mode, i.e. high voltage on.
169 RedOperate = 4
171 #: Fast turn off triggered and switched off the system. Reset FSO to go back to a
172 #: normal state.
173 QuickStop = 5
175 #: System is in error mode.
176 Error = 6
179@unique
180class Power(ValueEnum):
181 """
182 Variable NodeID strings concerning power data.
183 """
185 #: Primary voltage in volts, measured by the frequency converter at its output.
186 #: (read-only)
187 voltage_primary = "hvl-ipc.WINAC.SYSTEM_INTERN.FUVoltageprim"
189 #: Primary current in ampere, measured by the frequency converter. (read-only)
190 current_primary = "hvl-ipc.WINAC.SYSTEM_INTERN.FUCurrentprim"
192 #: Power setup that is configured using the Supercube HMI. The value corresponds to
193 #: the ones in :class:`PowerSetup`. (read-only)
194 setup = "hvl-ipc.WINAC.FU.TrafoSetup"
196 #: Voltage slope in V/s.
197 voltage_slope = "hvl-ipc.WINAC.FU.dUdt_-1"
199 #: Target voltage setpoint in V.
200 voltage_target = "hvl-ipc.WINAC.FU.SOLL"
202 #: Maximum voltage allowed by the current experimental setup. (read-only)
203 voltage_max = "hvl-ipc.WINAC.FU.maxVoltagekV"
205 #: Frequency converter output frequency. (read-only)
206 frequency = "hvl-ipc.WINAC.FU.Frequency"
209class PowerSetup(IntEnum):
210 """
211 Possible power setups corresponding to the value of variable :attr:`Power.setup`.
212 """
214 #: No safety switches, use only safety components (doors, fence, earthing...)
215 #: without any power.
216 # NoPower = 0
218 #: External power supply fed through blue CEE32 input using isolation transformer
219 #: and safety switches of the Supercube, or using an external safety switch
220 #: attached to the Supercube Type B.
221 External = 0
223 #: AC voltage with MWB transformer set to 50kV maximum voltage.
224 AC_SingleStage_50kV = 1
226 #: AC voltage with MWB transformer set to 100kV maximum voltage.
227 AC_SingleStage_100kV = 2
229 #: AC voltage with two MWB transformers, one at 100kV and the other at 50kV,
230 #: resulting in a total maximum voltage of 150kV.
231 AC_DoubleStage_150kV = 3
233 #: AC voltage with two MWB transformers both at 100kV, resulting in a total
234 #: maximum voltage of 200kV
235 AC_DoubleStage_200kV = 4
237 #: Internal usage of the frequency converter, controlling to the primary voltage
238 #: output of the supercube itself (no measurement transformer used)
239 Internal = 5
241 #: DC voltage with one AC transformer set to 100kV AC, resulting in 140kV DC
242 DC_SingleStage_140kV = 6
244 #: DC voltage with two AC transformers set to 100kV AC each, resulting in 280kV
245 #: DC in total (or a single stage transformer with Greinacher voltage doubling
246 #: rectifier)
247 DC_DoubleStage_280kV = 7
250@unique
251class MeasurementsScaledInput(ValueEnum):
252 """
253 Variable NodeID strings for the four analog BNC inputs for measuring voltage.
254 The voltage returned in these variables is already scaled with the set ratio,
255 which can be read using the variables in :class:`MeasurementsDividerRatio`.
256 """
258 input_1 = "hvl-ipc.WINAC.SYSTEM_INTERN.AI1Volt"
259 input_2 = "hvl-ipc.WINAC.SYSTEM_INTERN.AI2Volt"
260 input_3 = "hvl-ipc.WINAC.SYSTEM_INTERN.AI3Volt"
261 input_4 = "hvl-ipc.WINAC.SYSTEM_INTERN.AI4Volt"
263 @classmethod
264 def get(cls, channel: int):
265 """
266 Get the attribute for an input number.
268 :param channel: the channel number (1..4)
269 :return: the enum for the desired channel.
270 """
272 return getattr(cls, "input_{}".format(channel))
275@unique
276class MeasurementsDividerRatio(ValueEnum):
277 """
278 Variable NodeID strings for the measurement input scaling ratios. These ratios
279 are defined in the Supercube HMI setup and are provided in the python module here
280 to be able to read them out, allowing further calculations.
281 """
283 input_1 = "hvl-ipc.WINAC.SYSTEM_INTERN.DivididerRatio"
285 @classmethod
286 def get(cls, channel: int):
287 """
288 Get the attribute for an input number.
290 :param channel: the channel number (1..4)
291 :return: the enum for the desired channel.
292 """
294 return getattr(cls, "input_{}".format(channel))
297class EarthingStickStatus(IntEnum):
298 """
299 Status of an earthing stick. These are the possible values in the status integer
300 e.g. in :attr:`EarthingStick.status_1`.
301 """
303 #: Earthing stick is deselected and not enabled in safety circuit. To get out of
304 #: this state, the earthing has to be enabled in the Supercube HMI setup.
305 inactive = 0
307 #: Earthing is closed (safe).
308 closed = 1
310 #: Earthing is open (not safe).
311 open = 2
313 #: Earthing is in error, e.g. when the stick did not close correctly or could not
314 #: open.
315 error = 3
318@unique
319class EarthingStick(ValueEnum):
320 """
321 Variable NodeID strings for all earthing stick statuses (read-only integer) and
322 writable booleans for setting the earthing in manual mode.
323 """
325 status_1_closed = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_1.CLOSE"
326 status_1_open = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_1.OPEN"
327 status_1_connected = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_1.CONNECT"
328 status_2_closed = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_2.CLOSE"
329 status_2_open = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_2.OPEN"
330 status_2_connected = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_2.CONNECT"
331 status_3_closed = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_3.CLOSE"
332 status_3_open = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_3.OPEN"
333 status_3_connected = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_3.CONNECT"
334 status_4_closed = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_4.CLOSE"
335 status_4_open = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_4.OPEN"
336 status_4_connected = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_4.CONNECT"
337 status_5_closed = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_5.CLOSE"
338 status_5_open = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_5.OPEN"
339 status_5_connected = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_5.CONNECT"
340 status_6_closed = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_6.CLOSE"
341 status_6_open = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_6.OPEN"
342 status_6_connected = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_6.CONNECT"
344 manual_1 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_1.MANUAL"
345 manual_2 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_2.MANUAL"
346 manual_3 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_3.MANUAL"
347 manual_4 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_4.MANUAL"
348 manual_5 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_5.MANUAL"
349 manual_6 = "hvl-ipc.WINAC.SYSTEM_COMPONENTS.STICK_6.MANUAL"
351 @classmethod
352 def status_open(cls, number: int):
353 """
354 Get the status enum attribute for an earthing stick number.
356 :param number: the earthing stick (1..6)
357 :return: the status enum
358 """
360 return getattr(cls, "status_{}_open".format(number))
362 @classmethod
363 def status_closed(cls, number: int):
364 """
365 Get the status enum attribute for an earthing stick number.
367 :param number: the earthing stick (1..6)
368 :return: the status enum
369 """
371 return getattr(cls, "status_{}_closed".format(number))
373 @classmethod
374 def status_connected(cls, number: int):
375 """
376 Get the status enum attribute for an earthing stick number.
378 :param number: the earthing stick (1..6)
379 :return: the status enum
380 """
382 return getattr(cls, "status_{}_connected".format(number))
384 @classmethod
385 def manual(cls, number: int):
386 """
387 Get the manual enum attribute for an earthing stick number.
389 :param number: the earthing stick (1..6)
390 :return: the manual enum
391 """
393 return getattr(cls, "manual_{}".format(number))
396@unique
397class Errors(ValueEnum):
398 """
399 Variable NodeID strings for information regarding error, warning and message
400 handling.
401 """
403 #: Boolean read-only variable telling if a stop is active.
404 stop = "hvl-ipc.WINAC.SYSTEMSTATE.ERROR"
405 stop_number = "hvl-ipc.WINAC.SYSTEMSTATE.Errornumber"
407 #: Writable boolean for the error quit button.
408 quit = "hvl-ipc.WINAC.SYSTEMSTATE.Faultconfirmation"
411class DoorStatus(IntEnum):
412 """
413 Possible status values for doors.
414 """
416 #: not enabled in Supercube HMI setup, this door is not supervised.
417 inactive = 0
419 #: Door is open.
420 open = 1
422 #: Door is closed, but not locked.
423 closed = 2
425 #: Door is closed and locked (safe state).
426 locked = 3
428 #: Door has an error or was opened in locked state (either with emergency stop or
429 #: from the inside).
430 error = 4
433class AlarmText(ValueEnum):
434 """
435 This enumeration contains textual representations for all error classes (stop,
436 warning and message) of the Supercube system. Use the :meth:`AlarmText.get`
437 method to retrieve the enum of an alarm number.
438 """
440 # No alarm
441 Alarm0 = "No Alarm."
443 # Safety elements
444 Alarm1 = "STOP Safety switch 1 error"
445 Alarm2 = "STOP Safety switch 2 error"
446 Alarm3 = "STOP Emergency Stop 1"
447 Alarm4 = "STOP Emergency Stop 2"
448 Alarm5 = "STOP Emergency Stop 3"
449 Alarm6 = "STOP Door 1 lock supervision"
450 Alarm7 = "STOP Door 2 lock supervision"
451 Alarm8 = "STOP Door 3 lock supervision"
452 Alarm9 = "STOP Earthing stick 1 error"
453 Alarm10 = "STOP Earthing stick 2 error"
454 Alarm11 = "STOP Earthing stick 3 error"
455 Alarm12 = "STOP Earthing stick 4 error"
456 Alarm13 = "STOP Earthing stick 5 error"
457 Alarm14 = "STOP Earthing stick 6 error"
458 Alarm17 = "STOP Source switch error"
459 Alarm19 = "STOP Fence 1 error"
460 Alarm20 = "STOP Fence 2 error"
461 Alarm21 = "STOP Control error"
462 Alarm22 = "STOP Power outage"
464 # generic not defined alarm text
465 not_defined = "NO ALARM TEXT DEFINED"
467 @classmethod
468 def get(cls, alarm: int):
469 """
470 Get the attribute of this enum for an alarm number.
472 :param alarm: the alarm number
473 :return: the enum for the desired alarm number
474 """
476 try:
477 return getattr(cls, "Alarm{}".format(alarm))
478 except AttributeError:
479 return cls.not_defined