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

Eventbasierte Frequenzanalyse 1:

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