Eventbasierte Frequenzanalyse
Dieses Beispiel implementiert eine eventbasierte Frequenzanalyse. Das generierte Signal besteht aus einem im 2 s Takt wechselnden verrauschten Sinussignal mit einer Frequenz von 200 Hz und reinem Rauschen. Wird im (generierten) Eingangssignal eine steigende Flanke detektiert, beginnt die Pufferung des Signals. Die gesammelten Daten werden anschließend über FB_CMA_Source an den Funktionsbaustein FB_CMA_MagnitudeSpectrum weitergeleitet.
Den Quellcode für das Beispiel können Sie hier herunterladen:
Event_based_FrequencyAnalysis.zip
Blockdiagramm
Programmparameter
Die Tabelle unten zeigt eine Liste mit wichtigen Parametern für die Konfiguration des Magnitudenspektrum-Funktionsbausteins.
FFT Länge | 16384 |
Fenstergröße | 16000 |
Puffergröße | 8000 |
Fenster Typ | eCM_HannWindow |
Skalierungsart | eCM_ PeakAmplitude |
Eventbasierte Pufferung des Einganssignals
Der Programmbaustein CollectData
steuert die Eventbasierte Aufnahme des Eingangssignals. Die Input-Parameter sind wie folgt definiert:
PROGRAM CollectData
VAR_INPUT
bTrigger : BOOL; // Trigger signal, start with rising edge
END_VAR
VAR_IN_OUT
aInputSignal : ARRAY[1..cOversamples] OF LREAL; // input time signal
END_VAR
Die Umkehrung des Triggersignals bTrigger_
sowie der aktuelle Zustand des Puffers werden lokal abgelegt.
VAR
bTrigger_ : BOOL := FALSE;
nSourceState : UINT := 0;
nActualBuffersSent : ULINT := 0;
nBuffersToSent : ULINT := 2;
// ...
END_VAR
Die Steuerung der eventgesteuerten Aufnahme des Signals erfolgt, falls das Triggersignal eine steigende Flanke aufweist und der Puffer bereit ist, d.h. Zustand 0
.
IF (bTrigger AND NOT bTrigger_) AND nSourceState = 0 THEN
nActualBuffersSent := fbSource.nCntResults; // check number of sent MultiArrays from fbSource
fbSourceState := 1;
END_IF
bTrigger_ := bTrigger;
Der folgende Code zeigt die tatsächliche eventbasierte Pufferung des Signals über den Source Baustein.
CASE nSourceState OF
1: // if <nBuffersToSent> MultiArrays has been sent, stop buffering
fbSource.Input1D( pDataIn := ADR(aInputSignal),
nDataInSize := SIZEOF(aInputSignal),
eElementType := eMA_TypeCode_LREAL,
nWorkDim := 0,
pStartIndex := 0,
nOptionPars := 0);
IF (fbSource.nCntResults-nActualBuffersSent) = nBuffersToSent THEN
nSourceState := 2;
END_IF
2: // reset Source Buffer and wait for next trigger hit
fbSource.ResetData();
nSourceState := 0;
END_CASE;
Im Folgenden werden die gepufferten Signaldaten an den Magnitudenspektrum-Funktionsbaustein weitergeleitet. Die Verarbeitung des gepufferten Signals verläuft analog wie im Beispiel Magnitudenspektrum.
Voraussetzungen
Entwicklungsumgebung | Zielplattform | Einzubindende SPS-Bibliotheken |
---|---|---|
TwinCAT v3.1.4018 | PC oder CX (x86, x64) | Tc3_CM, Tc3_CM_Base, Tc3_MultiArray |