FB_PMA_Spectrum_3Ph
Der Funktionsbaustein FB_PMA_Spectrum_3Ph berechnet die Betragsspektren der Strom- und Spannungswerte. Diese sind für eine Analyse der Eingangssignale im Frequenzbereich geeignet.
Der Eingangspuffer wird über den Funktionsbaustein FB_PMA_Source_3Ph bereitgestellt. Die Größe des Eingangspuffers entspricht der halben Fensterlänge.
Beispielhaft sind mögliche FFT- und Fensterlängen in der nachfolgenden Tabelle dargestellt:
FFT-Länge | Fensterlänge | Pufferlänge | |
---|---|---|---|
512 | 29 | 400 | 200 |
1024 | 210 | 800 | 400 |
2048 | 211 | 1600 | 800 |
4096 | 212 | 3200 | 1600 |
8192 | 213 | 6400 | 3200 |
16384 | 214 | 12800 | 6400 |
Gedächtniseigenschaften
Aufgrund der Verwendung der Welch-Methode innerhalb der Berechnungen wird jeweils der aktuelle Eingangspuffer zusammen mit dem zuletzt übergebenen Puffer zur Berechnung genutzt.
Die Frequenzanalyse berücksichtigt Sprünge in der Zeitreihe. Um ein korrektes Ergebnis zu erzielen, müssen sich deswegen die letzten zwei Eingangspuffer lückenlos und ohne Sprünge aneinanderreihen.
Syntax
Definition:
FUNCTION BLOCK FB_PMA_Spectrum_3Ph
VAR_INPUT
nOwnID : UDINT;
tTransferTimeout : LTIME := LTIME#500US;
stInitPars : ST_PMA_Spectrum_InitPars;
VAR_OUTPUT
bError : BOOL;
ipResultMessage : I_TcMessage;
bNewResult : BOOL;
nCntResults : ULINT;
END_VAR
Eingänge
Die Eingangsparameter dieses Bausteins repräsentieren Initialisierungsparameter und müssen bereits bei der Deklaration der Funktionsbausteininstanz zugewiesen werden (alternativ: Init-Methode). Sie dürfen nur einmal zugewiesen werden. Eine Änderung zur Laufzeit ist nicht möglich.
Name | Typ | Beschreibung |
---|---|---|
nOwnID | UDINT | Identifiziert die Bausteininstanz mit einer eindeutigen ID. Diese muss immer größer als null sein. Eine bewährte Vorgehensweise ist die Definition einer Enumeration für diesen Zweck. |
tTransferTimeout | LTIME | Einstellung des synchronen Timeout für interne MultiArray-Weiterleitungen. Siehe Parallelverarbeitung im Transfer Tray. |
stInitPars | Bausteinspezifische Struktur mit Initialisierungsparametern. Die Parameter müssen mit der Definition der Ein- und Ausgangspuffer übereinstimmen. |
Ausgänge
Name | Typ | Beschreibung |
---|---|---|
bError | BOOL | TRUE, falls ein Fehler auftritt. |
ipResultMessage | I_TcMessage | Das Interface bietet detaillierte Informationen über den Rückgabewert. |
bNewResult | BOOL | TRUE, sobald neue Ergebnisse berechnet wurden. |
nCntResults | ULINT | Zählwert wird bei neuen Ausgangsdaten inkrementiert. |
Methoden
Name | Beschreibung |
---|---|
Die Methode wird in jedem Zyklus aufgerufen, um die Berechnungen aus dem Eingangspuffer durchzuführen, wenn neue Daten vorhanden sind. | |
Alternative zur Bausteininitialisierung | |
Die Methode kann alternativ zur Call-Methode in jedem Zyklus aufgerufen werden, falls keine Berechnung erfolgen soll. Der ankommende Eingangspuffer wird dann entsprechend weitergeleitet. | |
Die Methode löscht alle bereits hinzugefügten Datensätze. |
Beispiel
VAR CONSTANT
cOversamples : UDINT := 10;
cFFT_Length : UDINT := 4096;
cWindowLength : UDINT := 3200;
cSourceInitPars: ST_PMA_Source_InitPars := (
nBufferLength := cWindowLength/2);
cSpectrumInitPars : ST_PMA_Spectrum_InitPars := (
nFFT_Length := cFFT_Length,
nWindowLength := cWindowLength,
fSampleRate := cOversamples * 1000,
eScalingType := E_PMA_ScalingType.PeakAmplitude,
eWindowType := E_PMA_WindowType.HannWindow,
bTransformToDecibel := FALSE,
fDecibelThreshold := GVL_PMA.cMinArgLog10);
END_VAR
VAR
aVoltage AT%I* : ARRAY[0..2] OF ARRAY [1..cOversamples] OF LREAL;
aCurrent AT%I* : ARRAY[0..2] OF ARRAY [1..cOversamples] OF LREAL;
fbSource : FB_PMA_Source_3Ph := (nOwnID := 1, aDestIDs := [2], stInitPars := cSourceInitPars);
fbSpectrum : FB_PMA_Spectrum_3Ph := (nOwnID := 2, stInitPars := cSpectrumInitPars);
aSpectrumVoltage : ARRAY[0..2] OF ARRAY[1..cFFT_Length/2 + 1] OF LREAL;
aSpectrumCurrent : ARRAY[0..2] OF ARRAY[1..cFFT_Length/2 + 1] OF LREAL;
END_VAR
// Call source
fbSource.Call(
ADR(aVoltage[0]),
ADR(aVoltage[1]),
ADR(aVoltage[2]),
ADR(aCurrent[0]),
ADR(aCurrent[1]),
ADR(aCurrent[2]),
SIZEOF(aVoltage[0]),
0);
// Call algorithm
fbSpectrum.Call(
ADR(aSpectrumVoltage[0]),
ADR(aSpectrumVoltage[1]),
ADR(aSpectrumVoltage[2]),
ADR(aSpectrumCurrent[0]),
ADR(aSpectrumCurrent[1]),
ADR(aSpectrumCurrent[2]),
SIZEOF(aSpectrumVoltage[0]));
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4024.0 | PC oder CX (x86, x64) | Tc3_PowerMonitoring |