From 263aa85f91eb39d8e577b9ebf3c14332610176bf Mon Sep 17 00:00:00 2001 From: Marco Locatelli Date: Fri, 8 Jul 2022 11:23:58 +0200 Subject: [PATCH] Scrittura Colonna Valore Grezzo Mediato --- logger/FTLogger.py | 34 +++++++++++++++++++--------------- sampler/FTSampler.py | 25 ++++++++++++++++++++++--- 2 files changed, 41 insertions(+), 18 deletions(-) diff --git a/logger/FTLogger.py b/logger/FTLogger.py index 1927b56..0d9e2db 100644 --- a/logger/FTLogger.py +++ b/logger/FTLogger.py @@ -60,9 +60,10 @@ if redSrv0.get('SETTINGS:FOLDER:CURRENT') is None: #funzione salva time+data e otto valori letti su file SE LOG è 1 def fileSave(): - rawValue = getRedisVal('RTDATA:VALUE:RAW') - resultValue = getRedisVal('RTDATA:VALUE:REAL') - smoothedValue = getRedisVal('RTDATA:VALUE:SMOOTHED') + rawIstant = getRedisVal('RTDATA:VALUE:RAW') + fixedIstant = getRedisVal('RTDATA:VALUE:REAL') + rawAverage = getRedisVal('RTDATA:VALUE:SMRAW') + fixedAverage = getRedisVal('RTDATA:VALUE:SMOOTHED') currentFolder = getRedisVal('SETTINGS:FOLDER:CURRENT') workingDirectory = (DATA_path+currentFolder) #dò un nome al nuovo file @@ -80,12 +81,13 @@ def fileSave(): outFile = open(workingDirectory+"/"+dataFileName, "a") else: outFile = open(workingDirectory+"/"+dataFileName, "w+") - firstRow = "Data e Ora;" - firstRow += "Canale A;" - firstRow += "Canale B;" - firstRow += "Valore Grezzo;" - firstRow += "Valore Corretto;" - firstRow += "Valore Corretto e Mediato" + firstRow = "Data Ora;" + firstRow += "Ch A;" + firstRow += "Ch B;" + firstRow += "Istant Grezzo;" + firstRow += "Istant Corretto;" + firstRow += "Mediato Grezzo;" + firstRow += "Mediato Corretto" outFile.write(firstRow+"\r\n") # dichiaro una stringa in cui accumulo i valori @@ -98,12 +100,14 @@ def fileSave(): chB = getRedisVal('SETTINGS:CHANNEL:B') chBOut = getRedisVal('RTDATA:OUT:'+str(chB)) csvRow += chBOut+";" - #aggiungo il valore pulito - csvRow += rawValue+";" - #aggiungo il valore corretto con k1 k2 offset - csvRow += resultValue+";" - #aggiungo il valore risultante MEDIATO - csvRow += smoothedValue + #aggiungo il valore istant raw + csvRow += rawIstant+";" + #aggiungo il valore istant fixed + csvRow += fixedIstant+";" + #aggiungo il valore average raw + csvRow += rawAverage+";" + #aggiungo il valore average fixed + csvRow += fixedAverage # scrivo in blocco la riga dei valori outFile.write(csvRow +"\r\n") outFile.close() diff --git a/sampler/FTSampler.py b/sampler/FTSampler.py index 713ece5..9533ceb 100644 --- a/sampler/FTSampler.py +++ b/sampler/FTSampler.py @@ -60,6 +60,8 @@ if redSrv0.get('RTDATA:VALUE:RAW') is None: redSrv0.set('RTDATA:VALUE:RAW', 1) if redSrv0.get('RTDATA:VALUE:REAL') is None: redSrv0.set('RTDATA:VALUE:REAL', 1) +if redSrv0.get('RTDATA:VALUE:SMRAW') is None: + redSrv0.set('RTDATA:VALUE:SMRAW', 1) if redSrv0.get('SETTINGS:POWER:THRESH') is None: redSrv0.set('SETTINGS:POWER:THRESH', 0) if redSrv0.get('SETTINGS:SMOOTHING:FUNCTION') is None: @@ -187,21 +189,38 @@ def calculateValue(): # calcolo il valore risultante pulito (senza correzioni) XVal = (float(v2)/float(den)) redSrv0.set('RTDATA:VALUE:RAW',round(XVal,decimalsCount)) - # applicare correzioni (costanti k1*x^2, k2*x e offset) + + # Smoothing EWMA valori "grezzi"" + strValInRaw = XVal + # EWMAx RAW RILEGGO DA REDIS vecchio valore + oldValRaw = float(redSrv0.get('RTDATA:VALUE:SMRAW')) + if(oldValRaw == 0): + oldValRaw = 0.01 + # se variazione < 50% smooth, altrimenti usa il valore nuovo + if((abs(XVal - oldValRaw) / oldValRaw) < 0.5): + # effettuo smoothing valore + eFact = 3 + strValInRaw = (XVal/eFact) + (oldValRaw * (eFact-1) / eFact) + redSrv0.set('RTDATA:VALUE:SMRAW',round(strValInRaw,decimalsCount)) + + # applicazione correzioni (costanti k1*x^2, k2*x e offset) newValue = (float(k1)*float(XVal)*float(XVal))+(float(k2)*float(XVal))+float(offset) redSrv0.set('RTDATA:VALUE:REAL',round(newValue,decimalsCount)) + + # Smoothing EWMA valori corretti (fattori k1 k2) strValIn = newValue - # EWMA: RILEGGO DA REDIS vecchio valore + # EWMA: RILEGGO DA REDIS vecchio valore oldVal = float(redSrv0.get('RTDATA:VALUE:SMOOTHED')) if(oldVal == 0): oldVal = 0.01 - # se variazione < 50% smooth + # se variazione < 50% smooth, altrimenti usa il valore nuovo if((abs(newValue - oldVal) / oldVal) < 0.5): # effettuo smoothing valore eFact = 3 strValIn = (newValue/eFact) + (oldVal * (eFact-1) / eFact) redSrv0.set('RTDATA:VALUE:SMOOTHED',round(strValIn,decimalsCount)) + # init array smoothFact= int(getRedisVal('SETTINGS:SMOOTHING:FACTOR')) initArray = [0.0] * 8