FB_PMA_Spectrum_Quantiles_3Ph
Der Funktionsbaustein FB_PMA_Spectrum_Quantiles_3Ph berechnet die Betragsspektren der Strom- und Spannungswerte wie der Funktionsbaustein FB_PMA_Spectrum_3Ph. Zusätzlich können p-Quantile der Verteilung des Spektrums berechnet werden. Die Quantile sowie deren Anzahl lassen sich individuell konfigurieren.
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
Der Baustein berücksichtigt alle Eingangswerte seit der Instanziierung. Wenn seit dem Start die Reset-Methode aufgerufen wurde, werden alle Eingangswerte seit deren letzten Aufruf berücksichtigt.
Syntax
Definition:
FUNCTION BLOCK FB_PMA_Spectrum_Quantiles_3Ph
VAR_INPUT
nOwnID : UDINT;
tTransferTimeout : LTIME := LTIME#500US;
stInitPars : ST_PMA_Spectrum_Quantiles_InitPars;
END_VAR
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. | |
Um die CPU-Auslastung zu minimieren, kann es erforderlich sein auf die CallEx-Methode zurückzugreifen. Es werden, im Gegensatz zur Call-Methode, nicht nach jeder Spektrum-Berechnung die Quantile berechnet, sondern erst nach einer konfigurierbaren Anzahl von Berechnungen. | |
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 wird aufgerufen, um den Funktionsbaustein während der Laufzeit neu zu konfigurieren. | |
Die Methode löscht alle bereits hinzugefügten Datensätze. Alternativ kann das automatische Zurücksetzen an der CallEx-Methode verwendet werden. |
Beispiel
VAR CONSTANT
cOversamples : UDINT := 10;
cFFT_Length : UDINT := 4096;
cWindowLength : UDINT := 3200;
cSourceInitPars: ST_PMA_Source_InitPars := (
nBufferLength := cWindowLength/2);
cSpectrumQuantilesInitPars : ST_PMA_Spectrum_Quantiles_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,
fMinBinnedVoltage := 0.0,
fMaxBinnedVoltage := 300,
fMinBinnedCurrent := 0.0,
fMaxBinnedCurrent := 2,
nBins := 10,
nNumQuantiles := 2,
aQuantiles := [0.5, 0.9]);
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);
fbSpectrumQuantiles : FB_PMA_Spectrum_Quantiles_3Ph := (nOwnID := 2, stInitPars := cSpectrumQuantilesInitPars);
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;
aSpectrumQuantilesVoltage : ARRAY[0..2] OF ARRAY[1..cFFT_Length/2 + 1, 1..2] OF LREAL;
aSpectrumQuantilesCurrent : ARRAY[0..2] OF ARRAY[1..cFFT_Length/2 + 1, 1..2] OF LREAL;
bNewResult_Spectrum : BOOL;
bNewResult_Quantiles : BOOL;
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
fbSpectrumQuantiles.CallEx(
5,
FALSE,
ADR(aSpectrumVoltage[0]),
ADR(aSpectrumVoltage[1]),
ADR(aSpectrumVoltage[2]),
ADR(aSpectrumCurrent[0]),
ADR(aSpectrumCurrent[1]),
ADR(aSpectrumCurrent[2]),
SIZEOF(aSpectrumVoltage[0]),
ADR(aSpectrumQuantilesVoltage[0]),
ADR(aSpectrumQuantilesVoltage[1]),
ADR(aSpectrumQuantilesVoltage[2]),
ADR(aSpectrumQuantilesCurrent[0]),
ADR(aSpectrumQuantilesCurrent[1]),
ADR(aSpectrumQuantilesCurrent[2]),
SIZEOF(aSpectrumQuantilesVoltage[0]),
ADR(bNewResult_Spectrum),
ADR(bNewResult_Quantiles));
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4024.0 | PC oder CX (x86, x64) | Tc3_PowerMonitoring |