-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSerie1F.py
More file actions
59 lines (54 loc) · 2.75 KB
/
Serie1F.py
File metadata and controls
59 lines (54 loc) · 2.75 KB
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
from Tools import limitar
class Serie1F:
largoHeaderData = 36
largoRegistro = 19
largoHeaderCalibracion = 28
largoRegistroErr = 7
qBytesMolestos = 0
deltaMax = 1.3
fkrCap = 2.0
thdCap = 10.0
phiCap = 1.0
reverse = True
# FORMAT STRINGS
regex = '(?P<calibr>[^\xff]{%s}(?=\xff))?\xff(?P<header>(?<=\xff)[^\xff]{%s}(?=\xff))|(?P<err>(?<=\xff)[^\xff]{%s}(?=\xff))|(?P<reg>[^\xff]{%s})'
headerFormatString = 'Equipo Nro:\t{}\t\tCódigo de Cliente: \tID. Subestación:\t{}\nNumero de Serie:\t{}\tPeriodo:\t{} {}.\nTensión: \t{} V\t\tFactor de Corrección: {}\nCorriente:\t{} Amp\t\tFactor de Corrección: {}\nDia inicio:\t{}\tDia fin:\t{}\nHora inicio:\t{}\tHora fin:\t{}\n\nFecha Hora\tV\tV Max\tV Min\tTHD1\tFlicker\tAnormalidad\n\t\tV\tV\tV\t%\t%\t\n'
regFormatString = '%s\t%s\t%0.2f\t%0.2f\t%0.2f\t%0.2f\t%0.3f\t%s\n'
errFormatString = '{}\t{}\t{}\n'
# MAPAS
regMap = ['fkrRaw', 'thdRaw', 'v1MinRaw', 'v1MaxRaw', 'v1Raw']
regDatMap = ['v1', 'v1Max', 'v1Min', 'thd', 'fkr']
calibrMap = ['cThd', 'cRes', 'cFkr', 'cV']
headerMap = ['fileName', 'equipo', 'periodo', 'dStrt', 'mStrt', 'yStrt', 'hStrt', 'minStrt', 'vNomRaw', 'iNomRaw',
'dEnd', 'mEnd', 'yEnd', 'hEnd', 'minEnd']
errMap = ['codigo', 'S', 'M', 'H', 'd', 'm', 'y']
# UNPACK STRINGS
unpackHeaderData = '>8s B 2s 2s2s2s2s2s x B B 2s2s2s2s2s 2x'
unpackErr = '>BBBBBBB'
unpackHeaderCalibracion = '12xHHHH8x' # cThd, cRes, cFkr, cV
unpackReg = '>H H 9x HHH'
def setRegex(self):
formatTuple = (self.largoHeaderCalibracion, self.largoHeaderData, self.largoRegistroErr, self.largoRegistro)
self.regex = self.regex % formatTuple
def setVariante(self, rawData):
self.setRegex()
def analizarRegistroDat(self, reg, calibr, tv, ti, header):
reg.v1 = reg.v1Raw * (header.vNom / calibr.cV) * tv
reg.v1Max = reg.v1MaxRaw * (header.vNom / calibr.cV) * tv
reg.v1Min = reg.v1MinRaw * (header.vNom / calibr.cV) * tv
if reg.v1 > reg.v1Max: reg.v1 = reg.v1Max
if reg.v1Min > reg.v1: reg.v1Min = reg.v1
reg.v1, reg.v1Max, reg.v1Min = (limitar(v, 0, header.vNom * self.deltaMax * tv) for v in
(reg.v1, reg.v1Max, reg.v1Min))
try:
thd = abs((100 / (reg.v1Raw * (header.vNom / calibr.cV))) * (
(18 / calibr.cThd) * (reg.thdRaw - ((calibr.cRes / calibr.cV) * reg.v1Raw))))
except ZeroDivisionError:
thd = 0
try:
fkr = ((reg.fkrRaw * header.vNom * .02) / calibr.cFkr) * (100 / reg.v1 * tv)
except ZeroDivisionError:
fkr = 0
reg.thd = limitar(thd, 0, self.thdCap)
reg.fkr = limitar(fkr, 0, self.fkrCap)
return reg