-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathRegistros.py
89 lines (72 loc) · 3.46 KB
/
Registros.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# BuiltIns
from time import strftime, strptime, mktime
from struct import unpack, pack
# Custom
from Tools import convert, checkReg
errCodes = {0x84: 'Descarga de datos',
0x83: 'Cambio de Hora (Hora Anterior)',
0x85: 'Cambio de Hora (Hora Actual)',
0x82: 'Corte de Tensión',
0x81: 'Vuelta de Tensión', }
iNominales = {0x30: 5, 0x31: 200, 0x32: 2, 0x33: 35, 0x34: 500, 0x35: 70, 0x36: 800, 0x37: 1500,
0x38: 300, 0x39: 100, }
vNominales = {0x30: 110, 0x31: 220, 0x32: 600, 0x33: 7620, 0x34: 19050}
mapaPeriodos = {16: 1, 17: 5, 18: 15, 19: 30}
class Registro:
def __init__(self, unpackStr, regRaw, regMap):
self.regRaw = checkReg(regRaw)
self.unpackStr = unpackStr
dataRaw = unpack(unpackStr, self.regRaw)
for id, attr in enumerate(regMap, start=0):
setattr(self, attr, dataRaw[id])
class Header(Registro):
def setData(self):
try:
self.fileName = self.fileName.strip(b'\x00').decode('utf-8')
except AttributeError:
pass
self.periodo, self.dStrt, self.mStrt, self.yStrt, self.hStrt, self.minStrt, self.dEnd, self.mEnd, self.yEnd, self.hEnd, self.minEnd = (
int(x.decode('utf-8')) for x in
(self.periodo, self.dStrt, self.mStrt, self.yStrt, self.hStrt, self.minStrt, self.dEnd, self.mEnd, self.yEnd,
self.hEnd, self.minEnd))
if self.periodo in mapaPeriodos:
self.periodo = int(mapaPeriodos[self.periodo] / 60)
self.unidad = 'seg'
else:
self.unidad = 'min'
self.timeStampStart = strptime(
','.join((str(x).zfill(2) for x in (self.dStrt, self.mStrt, self.yStrt, self.hStrt, self.minStrt))),
'%d,%m,%y,%H,%M')
self.timeStampEnd = strptime(
','.join((str(x) for x in (self.dEnd, self.mEnd, self.yEnd, self.hEnd, self.minEnd))), '%d,%m,%y,%H,%M')
self.fechaInicio = strftime('%d/%m/%y', self.timeStampStart)
self.horaInicio = strftime('%H:%M', self.timeStampStart)
self.fechaFin = strftime('%d/%m/%y', self.timeStampEnd)
self.horaFin = strftime('%H:%M', self.timeStampEnd)
self.vNom = vNominales[self.vNomRaw]
self.iNom = iNominales[self.iNomRaw]
def resetInicio(self, timeStamp: tuple):
self.timeStampStart = timeStamp
self.fechaInicio = strftime('%d/%m/%y', self.timeStampStart)
self.horaInicio = strftime('%H:%M', self.timeStampStart)
class RegistroErr(Registro):
def setData(self):
self.d, self.m, self.y, self.H, self.M, self.S = map(convert, (
self.d, self.m, (self.y, 'año'), self.H, (self.M, 'min'), (self.S, 'seg')))
self.timeStamp = strptime(','.join((str(x) for x in (self.d, self.m, self.y, self.H, self.M, self.S))),
'%d,%m,%y,%H,%M,%S')
self.timeStampSegundos = mktime(self.timeStamp)
self.fecha = strftime('%d/%m/%y', self.timeStamp)
self.hora = strftime('%H:%M:%S', self.timeStamp)
self.detalle = errCodes[self.codigo]
class EscalasCalibracion(Registro):
def setRegSize(self):
self.regSize = regSizes[self.regSize]
class RegistroDat(Registro):
anormalidad = ''
last = False
def setTimeStamp(self, timeStampTuple: tuple):
self.timeStampTuple = timeStampTuple
self.timeStampSecs = mktime(timeStampTuple)
self.fecha = strftime('%d/%m/%y', timeStampTuple)
self.hora = strftime('%H:%M', timeStampTuple)