Zuviel Werbung? - > Hier kostenlos beim SPS-Forum registrieren

Seite 4 von 7 ErsteErste ... 23456 ... LetzteLetzte
Ergebnis 31 bis 40 von 64

Thema: Schwingungs-/Frequenz-Anlayse

  1. #31
    Avatar von Larry Laffer
    Larry Laffer ist offline Super-Moderator
    Themenstarter
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    @Kai:
    ich habe jetzt anlehnend an dein SCL-Script die ganze Geschichte noch mal in Excel-VBA nachvollzogen. In dem Zusammenhang gleich eine Frage:
    Worin besteht der wesentliche Unterschied zwischen den biden Variablen "N" und "FK", da sie doch anscheinend den gleichen Wert haben müssen ?
    ...
    Und noch etwas: Da du das Ganze ja als SPS-Programm erstellt hast ... Kannst du Aussagen zur Abarbeitungszeit des Bausteins machen bei z.B. 512 Quell-Variablen ? Selber bin ich noch nicht soweit und das wirdauch bestimmt vor Ende nächster Woche noch nichts werden ...

    Gruß
    LL

  2. #32
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Gibt es deiner Ansicht nach zwischen der FFT und der DFT hinsichtlich Genauigkeit oder Ähnlichem größere Unterschiede ?
    So genau weiß ich das auch nicht, ich denke aber, dass die Unterschiede zwischen der DFT und der FFT hinsichtlich der Genauigkeit eher gering sind.

    Ansonsten hat jede Berechnungsmethode ihre Vor- und Nachteile:

    Die DFT hat gegenüber der FFT den Vorteil, dass bei der DFT die Anzahl der Abtastpunkte des Signals beliebig sein kann, während bei der FFT die Anzahl der Abtastpunkte einer Zweierpotenz entsprechen muss, also 1, 2, 4, 8, 16, 32 usw.

    Dafür ist die FFT bei der Berechnung der Werte der Fourier-Transformation um einiges schneller als die DFT und sollte bei größeren Datenmengen eher angewendet werden.

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Ich danke dir in jedem Fall für deinen Beitrag. Er war, wie alle anderen deiner Beiträge, die ich bislang so begutachten durfte, wieder wie nicht anders gewohnt, große Klasse.
    Danke schön.

    Gruß Kai

  3. #33
    Registriert seit
    30.03.2005
    Beiträge
    2.096
    Danke
    0
    Erhielt 673 Danke für 541 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Worin besteht der wesentliche Unterschied zwischen den biden Variablen "N" und "FK", da sie doch anscheinend den gleichen Wert haben müssen ?
    Es gilt folgendes:

    DFT:

    N = Anzahl Datenpunkte (Abtastpunkte)

    FK = Anzahl Fourier-Koeffizienten

    FKMAX = INT(N/2) = Maximale Anzahl Fourier-Koeffizienten

    FK <= FKMAX
    Mit N gibt man also vor, wie viele Messwerte man hat, und mit FK gibt man vor, wie viele Fourier-Koeffizienten berechnet werden sollen. FK muss dabei <= FKMAX sein.

    Beispiel:

    N = 256 Datenpunkte

    FKMAX = 128 Fourier-Koeffizienten

    FK = 50 => Es werden die ersten 50 Fourier-Koeffizienten berechnet

    FK = 100 => Es werden die ersten 100 Fourier-Koeffizienten berechnet
    Zitat Zitat von Larry Laffer Beitrag anzeigen
    Und noch etwas: Da du das Ganze ja als SPS-Programm erstellt hast ... Kannst du Aussagen zur Abarbeitungszeit des Bausteins machen bei z.B. 512 Quell-Variablen ?
    Was für eine CPU willst Du denn einsetzen?

    Gruß Kai

  4. Folgender Benutzer sagt Danke zu Kai für den nützlichen Beitrag:

    Jupp06 (04.06.2014)

  5. #34
    Avatar von Larry Laffer
    Larry Laffer ist offline Super-Moderator
    Themenstarter
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Hallo Kai,
    Danke für die Erläuterung. "N" für Anzahl war schon klar gewesen, "FK" eben nicht. Ich hatte erst der Vermutung aufgesessen, dass es Wiederholungen sein könnten, aber das hatte dann ja auch nicht gefunzt. Jetzt ist es klar ...

    Als CPU stelle ich mir eine 317 vor. Ich denke, die kriegt das hin. Würde mich halt nur mal interessieren, wie lang ein Zyklus wird, wenn der Baustein läuft. Hintergrund :
    von PeterEF: Wir haben mal sowas mit einer 300er gemacht, aber das ganze ist sehr rechenintensiv und der Kunde hat sich dann für eine Lösung auf einem abgesetzten PC entschieden, damit die SPS noch zu ihrer eigentlichen Aufgabe kam.
    Ein hoch-Puschen der Zykluszeit über 750 ms hinaus würde mich nicht so sehr schocken, da es ja nicht ständig wäre. Außerdem habe ich noch einen anderen netten Auswerte-Baustein in einer anderen Anwendung, der das auch kann ...

    Gruß
    LL

  6. #35
    Registriert seit
    07.03.2004
    Beiträge
    4.369
    Danke
    946
    Erhielt 1.158 Danke für 831 Beiträge

    Standard

    Zitat Zitat von Larry Laffer Beitrag anzeigen
    ...
    Als CPU stelle ich mir eine 317 vor. Ich denke, die kriegt das hin. Würde mich halt nur mal interessieren, wie lang ein Zyklus wird, wenn der Baustein läuft.
    ...
    Ein hoch-Puschen der Zykluszeit über 750 ms hinaus würde mich nicht so sehr schocken, da es ja nicht ständig wäre.
    ...
    Das mit der Zykluszeit erinnert mich an die Aufgabenstellung von Steve81. Auch hier würde ich, bevor die Zykluszeit aus dem Ruder läuft, den Algorithmus auf mehrere SPS-Zyklen Aufteilen.
    Der Code von Kai lässt sich ja recht einfach in Sequenzen aufteilen die man mit einer Case Verzweigung ansteuern kann. Auch die Schleifen kann man auf mehrere SPS-Zyklen verteilen.
    Natürlich müssen die Variablen statisch sein.

    Hier mal der Code wie das aussehen könnte:
    Code:
     
    //**************************************************
    //DFT DISKRETE FOURIER-TRANSFORMATION
    //
    //Aus den Werten einer periodischen Zeitfunktion
    //werden die Fourier-Koeffizienten AK und BK und
    //die entsprechenden Frequenzanteile des 
    //Amplitudenspektrums CK und des Phasenspektrums PK
    //berechnet.
    //
    //Die Periode der Funktion ist durch eine beliebig
    //vorgebbare gerade oder ungerade Zahl äquidistanter
    //Stützstellen N vorgeben.
    //**************************************************
     
    NAME    : FOURIER
    FAMILY  : SPSFORUM
    AUTHOR  : KAI
    VERSION : '1.0'
     
    VAR_INPUT
        START : BOOL;    
        Y     : ARRAY[0..400] OF REAL;    // Werte Y
        N     : INT;                      // Anzahl Intervalle
        FK    : INT;                      // Anzahl Fourier-Koeffizienten
    END_VAR
     
    VAR_OUTPUT
        CK    : ARRAY[0..200] OF REAL;    // Amplitudenspektrum CK
        PK    : ARRAY[0..200] OF REAL;    // Phasenspektrum PK
        BUSY  : BOOL;                     // Algorithmus läuft            
    END_VAR
     
    VAR
        AK    : REAL;                     // Fourier-Koeffizient AK
        BK    : REAL;                     // Fourier-Koeffizient BK
        PI    : REAL;                     // Pi
        FKMAX : INT;                      // Maximale Anzahl Fourier-Koeffizienten
        K     : INT;                      // Schleifenzähler
        J     : INT;                      // Schleifenzähler
        S     : INT;                      // Vorzeichen
        STEP  : INT;                      // Sequenser
        CYCLE : INT;                      // Wiederholungen im SPS-Zyklus
        PULSE : BOOL;                     // Sequenser takten
    END_VAR
     
    BEGIN
    
    //**************************************************
    //PULSE & CYCLE
    //************************************************** 
    IF PULSE THEN
      STEP := STEP + 1;
    END_IF;
    
    CYCLE := 0; // Neuer SPS Zyklus
    
    
    CASE STEP OF 
    0:; //**************************************************
        //Start
        //************************************************** 
          BUSY := START;
          PULSE := START;
          
    1:; //**************************************************
        //Initialisierung
        //**************************************************         
        IF PULSE THEN
          PI := 3.14159265;
          K  := 0;
          PULSE := FALSE;
        ELSE    
          WHILE CYCLE < 50 AND NOT PULSE DO 
            CK[K] := 0;
            PK[K] := 0;
    
    
            CYCLE := CYCLE + 1;
            PULSE := K >= 200;
            K  := K + 1;        
          END_WHILE;
        END_IF; 
    2:; //**************************************************
        //Maximale Anzahl Fourier-Koeffizienten FKMAX
        //************************************************** 
        FKMAX := DINT_TO_INT(ROUND(N/2));
     
        IF FK < FKMAX THEN
            FKMAX := FK;
        END_IF;
     
    3:; //**************************************************
        //Fourier-Koeffizienten CK, PK
        //************************************************** 
        IF PULSE THEN
          K  := 1;
          PULSE := FALSE;
        ELSE    
          WHILE CYCLE < 10 AND NOT PULSE DO 
            AK    := 0;
            BK    := 0;
            FOR J := 0 TO (N-1) DO
                AK := AK + Y[J]*COS(2*PI/N*K*J);
                BK := BK + Y[J]*SIN(2*PI/N*K*J);
            END_FOR;
            AK := AK*2/N;
            BK := BK*2/N;
            CK[K] := SQRT(SQR(AK) + SQR(BK));
            PK[K] := ATAN(BK/AK);
    
      
            CYCLE := CYCLE + 1;
            PULSE := K >= FKMAX;
            K  := K + 1;              
          END_WHILE;
        END_IF;
        
    4:; //**************************************************
        //Fourier-Koeffizient C0
        //************************************************** 
        IF PULSE THEN
          K  := 0;
          AK := 0;
          J  := 0;
          PULSE := FALSE;
        ELSE    
          WHILE CYCLE < 40 AND NOT PULSE DO 
            AK := AK + Y[J];
    
            CYCLE := CYCLE + 1;
            PULSE := J >= N-1;
            J  := J + 1;                
          END_WHILE;
        END_IF; 
        IF J >= N-1 THEN      
          AK    := AK/N;
          CK[K] := AK;
        END_IF;
     
    5:; //**************************************************
        //Fourier-Koeffizient CMAX
        //************************************************** 
        IF FKMAX = (N/2) THEN
          AK := 0;
          S  := -1;
          FOR J := 0 TO (N-1) DO
              S  := -S;
              AK := AK + S*Y[J];
          END_FOR;
        END_IF;
     
        AK        := AK/N; 
        CK[FKMAX] := AK;  
    
    6:; //**************************************************
        //Ende der Show
        //************************************************** 
        STEP  := 0;
        CYCLE := 0;
        PULSE := FALSE;
        BUSY  := FALSE;
    ELSE
      //Fehler********************************************** 
      STEP  := 0;
      CYCLE := 0;
      PULSE := FALSE;
      BUSY  := FALSE;  
    END_CASE;
     
    END_FUNCTION_BLOCK
    Man sollte noch sicherstellen das sich die Eingangsvariablen nicht ändern solange der FB Busy ausgibt bzw. bei der Initialisierung das ganze in den STAT Bereich sichern.
    Geändert von zotos (01.01.2008 um 13:30 Uhr) Grund: Test Variable entfernt.
    If you open your Mind too much, your Brain will fall out.

  7. #36
    Avatar von Larry Laffer
    Larry Laffer ist offline Super-Moderator
    Themenstarter
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    Danke für den Vorschlag. Hatte ich auch schon erwogen, aber dann auch wieder verworfen. Selbst wenn die Zykluszeit in dem Auswerte-Zyklus extrem ansteigt wird sie sich in meinem Restprogramm auf die dann laufenden Aktionen nur wie eine zusätzliche (aber unnötige) Nachlaufzeit auswirken. Die Station, die diese Analyse machen wird, muss wie alle anderen Stationen meiner Anlage, von denen die meißten gleichzeitig laufen, fertig sein, damit es weitergehen kann.

    Aber erstmal muss es jetzt diese Station überhaupt geben ...

  8. #37
    Avatar von Larry Laffer
    Larry Laffer ist offline Super-Moderator
    Themenstarter
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    und wie versprochen noch nachgereicht :

    Ich habe nun (gezwungenermaßen) Versuche mit meinen beiden Auswertungs-Bausteinen gemacht. Dabei kam folgendes heraus :

    CPU 317

    DFT-Analyse - 256 Werte aufgezeichnet - Zeitbedarf Auswertung : 2,3 s
    DFT-Analyse - 512 Werte aufgezeichnet - Zeitbedarf Auswertung : > 5 s

    FFT-Analyse - 256 Werte aufgezeichnet - Zeitbedarf Auswertung : 0,12 s
    FFT-Analyse - 512 Werte aufgezeichnet - Zeitbedarf Auswertung : 0,25 s
    FFT-Analyse 1024 Werte aufgezeichnet - Zeitbedarf Auswertung : 0,51 s

    somit macht die FFT-Analyse für mich das Rennen. Mit der DFT-Analyse ist der Code zwar kompakter und es wäre eigentlich mein Favourit gewesen, aber die Dauer ist hier das entscheidende.

    Fall sich also für den einen oder anderen dieses Problem stellt, so sei hier gesagt, dass es mit hinreichender Genauigkeit möglich ist, mittels der SPS diese Auswertung durchzuführen.

    Ich möchte auf diesem Weg nochmals allen meinen Dank sagen, die mir hier "aufs Pferd geholfen haben".

    Gruß
    LL
    Geändert von Larry Laffer (10.01.2008 um 12:47 Uhr)

  9. #38
    Avatar von Larry Laffer
    Larry Laffer ist offline Super-Moderator
    Themenstarter
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard

    weiterer Nachtrag :
    Ich habe die Abfrage-Rate der Messung auf 3 ms festgelegt. Damit lassen sich mit gute Wiederholgenauigkeit Einzel-Frequenzen bis 120 Hz sicher feststellen und im Pegel nachweisen.
    Zur Messung verwende ich aktuell einen Piezo-Schwingungssensor.

  10. #39
    Registriert seit
    08.09.2006
    Beiträge
    170
    Danke
    4
    Erhielt 26 Danke für 16 Beiträge

    Standard

    Zitat Zitat von IBN-Service Beitrag anzeigen
    Hallo LL,

    200 Messungen pro Sekunden erfordern aber nicht nur ne leistungsfähige
    SPS sondern auch recht schnelle Analogeingänge...

    Als Beispiel:
    Eine "Billig" 8 - Kanal AE für die 300er hat ne Grundwandlungszeit von ca. 30ms
    pro Kanal. Damit wärst du bei max. 33 Messungen / Sekunde.

    Ich habe mal mit ner 300er und nem schnellen internen Analogeingang
    im 1ms - Alarm ca. 1000 Messungen pro Sekunde geschafft.

    Allerdings ging das mit nur einem Kanal, und die SPS (314C-2DP) war
    absolut am Ende, sporadisch sprach der Weckalarm an.

    Und dabei hatte die SPS sonst nichts zu tun...

    Ich musste dann die Abtastrate auf 500 Hz verringern (2ms Alarm).

    CU

    Jürgen

    .
    Sorry, ist jetzt etwas aus der Vergangenheit des Threads herausgeholt:
    Für das "schneller Analog Eingang"-Problem gibt es im S7 Bereich eine Lösung:

    bis zu 8 Kanäle Abtasten alle 25µs (40kHz) mit Zwischenspeicherung im Modul und Abholen nach Bedarf (reicht z.B. alle 4 ms)!
    Auch mit Triggerfunktion einsetzbar.

  11. #40
    Avatar von Larry Laffer
    Larry Laffer ist offline Super-Moderator
    Themenstarter
    Registriert seit
    22.03.2007
    Ort
    Detmold (im Lipperland)
    Beiträge
    11.716
    Danke
    398
    Erhielt 2.399 Danke für 1.999 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    ... erzähl ...
    was nimmst du dafür ?

Ähnliche Themen

  1. Frequenz mit FM 350-2 messen
    Von emsbootsmann im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 21.03.2011, 15:08
  2. Frequenz einlesen
    Von styrax im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 13.03.2010, 13:35
  3. Frequenz-Ausgang
    Von Züttu im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.04.2007, 09:43
  4. Frequenz-Spannungswandler
    Von Anonymous im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 10.02.2006, 08:22
  5. Einstellen der Frequenz
    Von Anonymous im Forum Simatic
    Antworten: 1
    Letzter Beitrag: 29.07.2005, 05:38

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •