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

Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 28 von 28

Thema: Frequenzberechnung in SCL

  1. #21
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Die Mathematik stimmt, 1/50 sind 0,02 daß ist 2*10^-2, soviel erstmal zum reinen Rechnen.

    Zu Umrechnung an sich:

    der OB35 wird alle 10ms aufgerufen, du hast einen Zählwert von 50. Das bedeutet, daß du zwischen den Imulsen 500 ms liegen. Daß heißt du hast umgerechnet 2 Impulse in einer Sekunde, also 2 Hz. Die Formel muß also lauten: f = 1000/(Zählwert*10), oder einfach f = 100/Zählwert. Noch ne Frage, wie hoch ist die Zykluszeit deiner SPS?

    Zaehlwert : DINT; //Zählwert *100 = T in ms
    wie kommst du darauf bei 10ms OB35?
    Geändert von Ralle (09.02.2007 um 09:30 Uhr)
    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

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

    Standard

    Einspruch

    Die Frequenz gibt doch an, wie oft ein Ereignis bzw. Impuls pro Sekunde eintritt. Also muss da irgendwas mit...
    f := ... * Zaehlwert stehen,
    (siehe auch mein voriger Beitrag)
    Geändert von kiestumpe (09.02.2007 um 09:39 Uhr)

  3. #23
    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

    Also meine Berechnung läuft jetzt Richtig
    Aber der AufRuf der IF Bedingung kommt nicht jeden Impuls sondern mal nach 2, dann erst wieder nach 5. Also so wie er will

    Meine Zykluszeit ist im Moment weil ich am Testen bin und fast nichts drin ist bei 1ms.
    Hier jetzt das aktuelle Programm mit dem die berechnung jetzt läuft.

    Code:
    // Bausteinparameter
    VAR_INPUT
      // Eingangsparameter
      Impuls    : BOOL;
      Zaehlwert : DINT;     
    END_VAR
    
    VAR_IN_OUT
      // Durchgangsparameter
      Reset     : BOOL;    
    END_VAR
    
    VAR_OUTPUT
     // Ausgangsparameter
     Frequenz  : DINT;       
    END_VAR
    
    
    VAR
      // statische Variablen
      Impuls_Fl : BOOL;
    END_VAR
    
    
      IF Impuls AND NOT Impuls_Fl THEN
        Frequenz := 1000/(Zaehlwert) ;
        Reset := true;
      ELSE
        Reset := false;
      END_IF;
        Impuls_Fl := Impuls;
        
    END_FUNCTION_BLOCK
    Gruß M-Arens

  4. #24
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Das sollte aber so gehen, mit der Flanke, hab mit das Compilerergebnis mir mal in AWL angeschaut, paßt so. Wieso 1000 ??? in der Division?

    @Kiestumpe

    der Zählwert zählt doch, wie oft der OB35 zwischen zwei Flanken aufgerufen wurde. Der Zählwert * 10 (OB35 wird alle 10ms aufgerufen) ergibt die Zeit zwischen zwei Flanken also T in ms. Frequenz = 1/T. (T in Sek.) Ergo ertmal umrechnen in Sekunden, f= 1000/(Zählwert*10).
    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

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

    Standard

    Zitat Zitat von Ralle Beitrag anzeigen
    Das sollte aber so gehen, mit der Flanke, hab mit das Compilerergebnis mir mal in AWL angeschaut, paßt so. Wieso 1000 ??? in der Division?

    @Kiestumpe

    der Zählwert zählt doch, wie oft der OB35 zwischen zwei Flanken aufgerufen wurde. Der Zählwert * 10 (OB35 wird alle 10ms aufgerufen) ergibt die Zeit zwischen zwei Flanken also T in ms. Frequenz = 1/T. (T in Sek.) Ergo ertmal umrechnen in Sekunden, f= 1000/(Zählwert*10).
    Stimmt, hast recht - der Zählwert misst die Zeit, war etwas verwirrt-sorry.
    Vorrausetzung bei FB-s laufen im OB35.

  6. #26
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.255
    Danke
    537
    Erhielt 2.705 Danke für 1.954 Beiträge

    Standard

    Zitat Zitat von kiestumpe Beitrag anzeigen
    Vorrausetzung bei FB-s laufen im OB35.
    Das bringt mich auf etwas.

    @M-Arens

    Läuft dein FB im OB35? Ich meine, es müßte im OB35 oder im OB1 funktionieren, aber probiere es doch testweise mal aus.
    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

  7. Folgender Benutzer sagt Danke zu Ralle für den nützlichen Beitrag:

    M-Arens (12.03.2007)

  8. #27
    Registriert seit
    27.08.2003
    Ort
    Schweitenkirchen
    Beiträge
    472
    Danke
    101
    Erhielt 73 Danke für 59 Beiträge

    Standard

    Macht das was aus wenn die Bedingung erst einen Zyklus Später erfüllt wird?
    Mein Vorschlag für die Flanke:
    Code:
              IF Not Impuls THEN
              Impuls_Fl:=False;
              END_IF; 
     
              IF Impuls = true AND NOT Impuls_Fl THEN
                Impuls_Fl:=True;
                T := Zaehlwert/10 ;
                T_REAL := DINT_TO_REAL ( T );
                F_REAL := 1/T_REAL ;
                Frequenz := ROUND(F_REAL) ;
                Reset := true;
        
             ELSE
              // Anweisungsteil_ELSE
              Reset := false;
    
             END_IF;
    Gruss Andy

  9. Folgender Benutzer sagt Danke zu Zefix für den nützlichen Beitrag:

    M-Arens (12.03.2007)

  10. #28
    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
    So ich habe es jetzt mit diesem Code zum laufen gebracht:
    Code:
    IF Not Impuls THEN
        Impuls_Fl:=False;
      END_IF; 
    
      IF Impuls = true AND NOT Impuls_Fl THEN
        Impuls_Fl:=True;
        Frequenz := 100/(Zaehlwert) ;
        Reset := true;
    
      ELSE
        // Anweisungsteil_ELSE
        Reset := false;
    
      END_IF;
    Vielen Dank an alle die mir hier geholfen haben.
    Geändert von M-Arens (12.03.2007 um 10:37 Uhr)
    Gruß M-Arens

Lesezeichen

Berechtigungen

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