From 6ab0fbdf13ff0b8a8fdd85b0f417e32c41502e39 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 8 Apr 2022 17:28:57 +0200 Subject: [PATCH] hook-pmu_dft: fix timetagging of phasor --- lib/hooks/pmu_dft.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/lib/hooks/pmu_dft.cpp b/lib/hooks/pmu_dft.cpp index c85ff78fa..59db0af8a 100644 --- a/lib/hooks/pmu_dft.cpp +++ b/lib/hooks/pmu_dft.cpp @@ -201,7 +201,7 @@ public: /* Add signals */ auto freqSig = std::make_shared("frequency", "Hz", SignalType::FLOAT); auto amplSig = std::make_shared("amplitude", "V", SignalType::FLOAT); - auto phaseSig = std::make_shared("phase", "rad", SignalType::FLOAT); + auto phaseSig = std::make_shared("phase", (angleUnitFactor)?"rad":"deg", SignalType::FLOAT);//angleUnitFactor==1 means rad auto rocofSig = std::make_shared("rocof", "Hz/s", SignalType::FLOAT); if (!freqSig || !amplSig || !phaseSig || !rocofSig) @@ -393,7 +393,6 @@ public: #ifdef DFT_MEM_DUMP ppsMemory[smpMemPos % windowSize] = smp->data[ppsIndex].f; #endif - smpMemPos++; bool run = false; double smpNsec = smp->ts.origin.tv_sec * 1e9 + smp->ts.origin.tv_nsec; @@ -451,7 +450,7 @@ public: } } - if (windowSize < smpMemPos) { + if (windowSize <= smpMemPos) { smp->data[i * 4 + 0].f = currentResult.frequency + frequencyOffset; /* Frequency */ smp->data[i * 4 + 1].f = (currentResult.amplitude / pow(2, 0.5)) + amplitudeOffset; /* Amplitude */ @@ -477,7 +476,7 @@ public: else if (timeAlignType == TimeAlign::RIGHT) tsPos = ((smpMemPos % windowSize) > 0)? (smpMemPos % windowSize) - 1 : windowSize; else if (timeAlignType == TimeAlign::CENTER) { - tsPos = ((smpMemPos % windowSize) > (windowSize / 2))? + tsPos = ((smpMemPos % windowSize) >= (windowSize / 2))? (smpMemPos % windowSize) - (windowSize / 2) : (smpMemPos % windowSize) + (windowSize / 2); } @@ -491,6 +490,8 @@ public: lastSequence = smp->sequence; + smpMemPos++; + if (run && windowSize < smpMemPos) return Reason::OK;