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

Seite 1 von 3 123 LetzteLetzte
Ergebnis 1 bis 10 von 28

Thema: Frequenzberechnung in SCL

  1. #1
    Registriert seit
    02.09.2004
    Beiträge
    108
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo,

    ich habe ein kleines Problem. Ich soll eine Frequenzmessung programmieren, nach möglichkeit in SCL.
    Dabei habe ich als zu verarbeitende Eingangsgröße nur ein Impuls der mir nach jeder Periode auf dem Scheitelwert gegeben wird. Das heißt der abstand zwischen 2 Impulsen ist meine Zeit T.
    Als Ausgabe, soll die Frequenz im Real Format rauskommen.
    Kann mir einer sagen wie man so was realisieren kann?

    Vielen DANK für eure HILFE.
    Gruß M-Arens
    Zitieren Zitieren Frequenzberechnung in SCL  

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

    Standard

    Mal eine Frage vorne weg. In welchem bereich bewegt sich die Frequenz denn?
    von 0Hz...xxHz ??
    If you open your Mind too much, your Brain will fall out.

  3. #3
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    Würd einen (D)INT im Weckalarm bis zur nächsten Flanke hochzählen.
    (z.B. OB 35)

    danach: f=1/T

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

    Standard

    Zitat Zitat von kiestumpe Beitrag anzeigen
    Würd einen (D)INT im Weckalarm bis zur nächsten Flanke hochzählen.
    (z.B. OB 35)

    danach: f=1/T
    und noch die frequenzen um sie 0Hz berücksichtigen sonst kommt beim Zählerüberlauf (rücksprung) nur mist raus.
    If you open your Mind too much, your Brain will fall out.

  5. #5
    M-Arens ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2004
    Beiträge
    108
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    0 - 20 Hz
    Hat auch einer ne Idee wegen SCL? Ist halt vorgabe!
    Gruß M-Arens

  6. #6
    Registriert seit
    22.11.2005
    Ort
    kl.Odenwald
    Beiträge
    716
    Danke
    111
    Erhielt 85 Danke für 71 Beiträge

    Standard

    ja - guckst Du SCL-Erste Schritt

  7. #7
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.263
    Danke
    537
    Erhielt 2.708 Danke für 1.957 Beiträge

    Standard

    @M-Arens

    SCL ist nicht schlimm, du kannst dir erstmal einen neuen Baustein öffnen und dann einen kompletten Bausteinrahmen für FC/FB automatisch erzeugen lassen. Der Rest ist etwas Rechnerei für die Frequenz, das ist mit der Hilfefunktion zu bewältigen. Bei konkreten Fragen helfen wir sicher gern. Ich würde auch den OB35 hernehmen, anders geht es wahrscheinlich gar nicht.
    Der OB wird in einem festen Zeitintervall aufgerufen. Jedesmal zählst du in ihm einen DINT-Wert um 1 hoch. Wenn du dein Spitzenpegelsignal bekommst, liest du diesen Wert aus und setzt ihn anschließend auf Null zurück (könnte auch besser sein, daß du dann einen Resetmerker in deinem SCL-Baustein setzt und wenn dieser True ist, in deinem OB35 das Null setzen des Zähler-DINT erledigst.) Mit dem Zählwert kannst du dann die Frequenz berechnen.
    Gruß
    Ralle

    ... there\'re 10 kinds of people ... those who understand binaries and those who don\'t …
    and the third kinds of people … those who love TIA-Portal

  8. #8
    M-Arens ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2004
    Beiträge
    108
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard

    Habe jetzt ein kleines Problem mit dem SCL Programm, hier mal der Code
    Code:
    IF Impuls = true THEN
        T := Zaehlwert/10 ;
        T_REAL := DINT_TO_REAL ( T );
        F_REAL := 1/T_REAL ;
        Frequenz := ROUND(F_REAL) ;
        
        IF Freigabe = true THEN
          Frequenz := ROUND(F_REAL) ;
          Freigabe := false ;
        END_IF;
    
        Reset := true;
        
      ELSE
        // Anweisungsteil_ELSE
        Reset := false;
        Freigabe := true ;
      END_IF;
    Der Makierte Code teil soll nur einmal ausgeführt werden solange Impuls=true ist. Klappt aber nicht, kann mir einer erklären was ich da falsch mache?

    Es soll halt die Frequenz berechnet werden, aber nur einmal pro Impuls raus gegeben werden, damit die Anzeige nicht ständig den Wert ändert.
    Gruß M-Arens

  9. #9
    Registriert seit
    28.10.2005
    Ort
    Ottweiler, Saar
    Beiträge
    940
    Danke
    259
    Erhielt 124 Danke für 109 Beiträge

    Standard

    Du musst wahrscheinlich noch Impuls auf false setzen.

  10. #10
    M-Arens ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    02.09.2004
    Beiträge
    108
    Danke
    12
    Erhielt 0 Danke für 0 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Zitat Zitat von argv_user Beitrag anzeigen
    Du musst wahrscheinlich noch Impuls auf false setzen.
    Das geht nicht das ist eine Eingangs Variable die von außen beschaltet wird.

    Hier sind noch die Variablen.
    Code:
    // Bausteinparameter
    VAR_INPUT
      // Eingangsparameter
      Impuls    : BOOL;
      Zaehlwert  : DINT;     //Zählwert *100 = T in ms
    END_VAR
    
    VAR_IN_OUT
      // Durchgangsparameter
      Freigabe  : BOOL;
    END_VAR
    
    VAR_OUTPUT
     // Ausgangsparameter
      Reset     : BOOL;     //Rücksetzen des Zählers im OB35
      Frequenz  : DINT;     //Frequenz im REAL Format  
    END_VAR
    
    VAR_TEMP
      // temporäre Variablen
      T         : DINT;     //Zeitwert T als DINT
      T_REAL    : REAL;     //Zeitwert T als Real
      F_REAL    : REAL;     //Frequenz F als Real
    END_VAR
    Geändert von M-Arens (08.02.2007 um 10:41 Uhr)
    Gruß M-Arens

Lesezeichen

Berechtigungen

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