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

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Frequenz messen Anemometer

  1. #1
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo miteinander, zuerst einmal möchte ich euch begrüßen. Ich studiere Windenergietechnik und in einem Messtechnik Labor habe ich die Aufgabe bekommen einen Algorithmus in Strukturiertem Text zu verfassen, um mit Hilfe von Codesys die Windgeschwindigkeit eines Anemometers zu messen, der an einem Raspberry Pi angeschlossen ist.

    Der Anemometer gibt ein Rechtecksignal aus, von der ich die Frequenz bestimmen muss. Diese Frequenz ist proportional zum Wind ist ... Auf diese Geschichte möchte ich jetzt tiefer eingehen, es geht mir nur um die Frequenz.

    Das folgende Schaubild an:



    Mein Algorithmus:

    var

    LED,a:BOOL;
    z:BYTE:=10;
    ton0:TON



    LED:=PiFace.byIn.4; (*Eingangssigsignal*)

    IF (LED=1) THEN a:=1; END_IF; (*setzen einer Variablen (notwendig für dennächsten Schritt*)
    IF (z=1) THEN a:=0; END_IF; (*a auf Null setzen, damit er nicht wieder in diese Bedingung rutscht, wenn z=1 *)
    IF (a=1) AND (LED=0) THEN (*Bedingung um genau zum Zeitpunkt P0 anzufangen*)
    ton0.IN:=TRUE; (*Timer aktivieren*)
    ton0(); (*???*)
    z:=0; (*Zaehler auf Null setzen*)
    a:=0; (*a auf Null setzen, damit er nicht wieder in diese Bedingung rutscht*)
    END_IF

    IF (z=0) AND (LED=1) THEN (*Zaehler auf eins setzen*)
    z:=1;
    END_IF;

    IF (z=1) AND (LED=0) THEN (*Periode abgeschlossen*)
    T1=ton0.ET; (*Dauer übertragen*)
    ton0.IN:=FALSE; (*Timer deakt.*)
    ton0(); (*???*)
    a:=0; (*Bedingung um wieder von vorne anzufangen*)
    END_IF


    Ich meine eigentlich, das das funktionieren müsste, aber das tut es nicht. Ich glaube ich mache etwas mit den Timern falsch, da diese nicht anspringen.

    Dann weiss ich nicht, wie ich mit der Periodendauer weiter rechnen kann, da dieser als Time deklariert ist. ich kann die Frequenz nicht ausrechnen, er streikt. Wie wandel ich die Periodendauer in ein Real Format ?

    Vielen dank im voraus.
    Angehängte Grafiken Angehängte Grafiken
    Zitieren Zitieren Frequenz messen Anemometer  

  2. #2
    Registriert seit
    04.09.2012
    Beiträge
    54
    Danke
    4
    Erhielt 7 Danke für 7 Beiträge

    Standard

    Ich glaube, Du machst es Dir zu schwer.
    Um die Frequenz eines Anemometers zu erfassen, brauchst Du doch nur die Impulse je Sekunde zu zählen.
    Als erstes brauchst Du also einen Sekunden- Takt:
    Var
    SecTakt:TON;
    Flanke1:F_TRIG;
    x:REAL;
    rFrequenz:REAL;
    xLed:BOOL;
    END_VAR
    SecTakt(pt:=t#990ms);
    SecTakt.IN:=NOT SecTakt.Q;
    (*Dann musst Du die Flanke des Impulses auswerten.*)
    flanke1(in:=xLed);
    (*Jetzt musst Du zählen*)
    IF flanke1.Q THEN x:=x+1; END_IF
    (*am Ende der Sekunde den Wert speichern und x auf 0 setzen*)
    IF SecTakt.Q THEN
    rFrequenz:=x;
    x:=0;
    END_IF

  3. #3
    fiftyone_88 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Caroli Beitrag anzeigen
    Ich glaube, Du machst es Dir zu schwer.
    Um die Frequenz eines Anemometers zu erfassen, brauchst Du doch nur die Impulse je Sekunde zu zählen.
    Als erstes brauchst Du also einen Sekunden- Takt:
    Var
    SecTakt:TON;
    Flanke1:F_TRIG;
    x:REAL;
    rFrequenz:REAL;
    xLed:BOOL;
    END_VAR
    SecTakt(pt:=t#990ms);
    SecTakt.IN:=NOT SecTakt.Q;
    (*Dann musst Du die Flanke des Impulses auswerten.*)
    flanke1(in:=xLed);
    (*Jetzt musst Du zählen*)
    IF flanke1.Q THEN x:=x+1; END_IF
    (*am Ende der Sekunde den Wert speichern und x auf 0 setzen*)
    IF SecTakt.Q THEN
    rFrequenz:=x;
    x:=0;
    END_IF
    Vielen dank für dein ist genial. Mit dieser methode spart man sich die Umrechnung von Time in Real. Aber nur zum anreichern meines Wissens, wie wandelt mein eine TIME Variable in eine REAL Variable?

    Deine Lösung muss nur um einen Ounkt erweiter werden. Das setzen eines Startpunktes. Es muss ja bei einer steigenden Flanke beginnen, oder?

  4. #4
    Registriert seit
    16.12.2009
    Ort
    Süddeutschland
    Beiträge
    173
    Danke
    37
    Erhielt 1 Danke für 1 Beitrag

    Standard

    Time_Real:=TIME_TO_REAL(Timevalue);
    Beckhoff CX9010-1101
    TwinCat 2.11

  5. #5
    fiftyone_88 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von forellengarten Beitrag anzeigen
    Time_Real:=TIME_TO_REAL(Timevalue);
    vielen dank.

  6. #6
    fiftyone_88 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von Caroli Beitrag anzeigen
    Ich glaube, Du machst es Dir zu schwer.
    Um die Frequenz eines Anemometers zu erfassen, brauchst Du doch nur die Impulse je Sekunde zu zählen.
    Als erstes brauchst Du also einen Sekunden- Takt:
    Var
    SecTakt:TON;
    Flanke1:F_TRIG;
    x:REAL;
    rFrequenz:REAL;
    xLed:BOOL;
    END_VAR
    SecTakt(pt:=t#990ms);
    SecTakt.IN:=NOT SecTakt.Q;
    (*Dann musst Du die Flanke des Impulses auswerten.*)
    flanke1(in:=xLed);
    (*Jetzt musst Du zählen*)
    IF flanke1.Q THEN x:=x+1; END_IF
    (*am Ende der Sekunde den Wert speichern und x auf 0 setzen*)
    IF SecTakt.Q THEN
    rFrequenz:=x;
    x:=0;
    END_IF
    noch eine frage: muss der timer nicht wieder zurückgesetzt werden, weil er nach dem ersten lauf dann aus wäre? also so:

    IF (sTakt.Q) THEN ff:=xx; x:=0; sTakt(IN:=FALSE); END_IF;

  7. #7
    Registriert seit
    24.02.2009
    Beiträge
    1.242
    Danke
    23
    Erhielt 276 Danke für 235 Beiträge

    Standard

    In der Zeile

    SecTakt.IN:=NOT SecTakt.Q;

    wird der Timer zurück gesetzt, wenn er abgelaufen ist.
    Sänd from mei Kombjudder mitse Dastadurr.

  8. #8
    fiftyone_88 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Zitat Zitat von MasterOhh Beitrag anzeigen
    In der Zeile

    SecTakt.IN:=NOT SecTakt.Q;

    wird der Timer zurück gesetzt, wenn er abgelaufen ist.
    wird er dann nicht aktiviert und sobald der Takt von 1s erreicht wird also Q=True ist auf False gesetzt, sodass er ausgeschaltet ist? Verstehe, sobald er false geht, wird der Ausgang Q auch false, sodass er wieder aktiv wird, genial. danke für deine hilfe echt nett von dir. könntest du mir auch bei dem problem Werte im array verschieben helfen?

  9. #9
    fiftyone_88 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard

    --------------
    Geändert von fiftyone_88 (14.10.2015 um 13:15 Uhr)

  10. #10
    fiftyone_88 ist offline Neuer Benutzer
    Themenstarter
    Registriert seit
    31.07.2015
    Beiträge
    23
    Danke
    0
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Folgendes Problem. Der Programmcode funktioniert (habe gleichzeitig FREQ_MEASURE laufen, und es liefert in etwa die gleichen Ergebnisse) aber es wird eine falsche Frequenz angezeigt. Die Frequenz zeigt bei codesys z.B. 24 Hz an (obwohl es sehr am schwanken ist 17..25 Hz) aber an einem angeschlossenen Oszilloskop ca 100 Hz. Das Problem ist aber das der Unterschied nicht linear ist sondern bei steigender Windgeschwindigkeit oder sinkinder Windgeschwindigkeit gleich bleibt, sprich immer um die 20 Hz. Am Oszilloskop wird immer der korrekte Wert angezeigt. Liegt auch nicht an einer Beschädigung der Hardware, da ich es bei einer anderen auch probiert habe. Verschiedene Eingänge wurden auch benutzt, immer das gleiche Signal. Woran liegt das? Kann Codesys das nicht so schnell verarbeiten, was ich nicht glaube.

Ähnliche Themen

  1. Zykluszeit/Frequenz
    Von cabir im Forum Simatic
    Antworten: 6
    Letzter Beitrag: 27.09.2012, 08:26
  2. Frequenz mit FM 350-2 messen
    Von emsbootsmann im Forum Simatic
    Antworten: 2
    Letzter Beitrag: 21.03.2011, 15:08
  3. Frequenz vom Strom messen
    Von michlG im Forum CODESYS und IEC61131
    Antworten: 13
    Letzter Beitrag: 30.07.2010, 00:18
  4. Frequenz einlesen
    Von styrax im Forum Simatic
    Antworten: 26
    Letzter Beitrag: 13.03.2010, 13:35
  5. Frequenz-Ausgang
    Von Züttu im Forum Simatic
    Antworten: 4
    Letzter Beitrag: 02.04.2007, 09:43

Lesezeichen

Berechtigungen

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