Mehrkanal-Magnitudenspektrum

Dieses Beispiel implementiert das Magnitudenspektrum für 5 Eingangskanäle gleichzeitig. Der Code ist in zwei Tasks aufgeteilt; einer Steuerungstask, welche die Eingangsabtastungen von einem Hardwaremodul sammelt, z.B. EL3632, und einer CM-Task, die das Spektrum errechnet. Das Blockdiagramm unten zeigt die im Programm implementierte Analysekette.

Den Quellcode für das Beispiel können Sie hier herunterladen:
Multichannel_FrequencyAnalysis_Sample.zip

Blockdiagramm

Mehrkanal-Magnitudenspektrum 1:

Programmparameter

Die Tabelle unten zeigt eine Liste mit wichtigen Parametern für die Konfiguration der Magnitudenspektrum-Funktionsbausteine.

Kanäle

5

FFT-Länge

4096

Fenstergröße

3200

Puffergröße

1600

Window Typ

eCM_HannWindow

Skalierungsart

eCM_RootPowerSum

Umwandeln in Dezibel

FALSE

Globale Konstanten

Diese Parameter werden in der Liste der globalen Variablen als Konstanten definiert.

VAR_GLOBAL CONSTANT
    cOversamples  : UDINT := 20;                                       // number of oversamples
    cMaxChannels  : UDINT := 5;                                        // Number of data channels
    cWindowType   : E_CM_WindowType := E_CM_WindowType.eCM_HannWindow; // window type for analysis
    cWindowLength : UDINT := 3200;                                     // length of signal window.
    cOverlap      : UDINT := 1600;                                     // recommended buffer overlap
    cBufferLength : UDINT := cWindowLength - cOverlap;                 // internal buffer size with 50% overlapping
    cFFTLength    : UDINT := 4096;                                     // length of FFT for mag.  spectrum
    cFFTResult    : UDINT := 2049;                                     // result of mag. spectrum (cFFTLength/2+1)
END_VAR

Globale Variablen

Diese Parameter werden in der Liste der globalen Variablen definiert.

VAR_GLOBAL
    bInvalidateCh4 : BOOL := FALSE; // Invalidate input signal on channel 4
END_VAR

Erläuterungen

Das Ergebnis des Beispielcodes kann für ein sinusförmiges Signal beliebiger Amplitude und Frequenz getestet werden. Die Effektivwerte werden im Array aRmsValue gemäß der entsprechenden Kanalnummer gespeichert. Das Ergebnis muss genau der Spitzenamplitude von jedem sinusförmigen Signal geteilt durch SQRT(2) entsprechen. Der Beispielcode kann für mehr als 5 Kanäle erweitert werden, je nach Anforderungen und Ressourcen des Zielsystems.

Das Setzen der globalen Variablen bInvalidateCh4 := TRUE demonstriert ein mögliches Fehlerhandling bei unzulässigen Eingangsdaten.

Voraussetzungen

Entwicklungsumgebung

Zielplattform

Einzubindende SPS-Bibliotheken

TwinCAT v3.1.4022.25

PC or CX (x86, x64)

Tc3_CM, Tc3_CM_Base, Tc3_MultiArray