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

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

Thema: Frequenzauswertung/Prognose

  1. #1
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hallo allerseits.

    Wie kann ich mit dem Signal einer Lichtschranke, die auf eine Lochscheibe auf einer Motorachse schaut, die Aktualgeschwindigkeit Pulse pro Minute berechnen?

    Es ist mit ca. 800 bis 1000 Pulsen pro Minute zu rechnen.


    Gruss

    McNugget
    Zitieren Zitieren Frequenzauswertung/Prognose  

  2. #2
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Kommt ein wenig darauf an, wie genau es sein soll und wie schnell eine Änderung der Geschwindigkeit angezeigt werden soll.

    Als einfachste Variante kannst du 1 Minute lang die Impulse zählen, dann hast du die Impulse/Minute.
    Oder zu zählst die Impulse genau 1 Sekunde lang und multiplizierst sie mit 60, dann hast du auch wieder Impulse/Minute. Das ist dann zwar ungenauer, aber dafür wird jede Sekunde eine neue aktuelle Geschwindigkeit angezeigt.

    Ist das alles zu ungenau, gibts auch noch andere Methoden, aber die sind dann abhängig vom Anwendungsfal und sicher auch aufwendiger.
    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

  3. #3
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hallo Ralle.

    Es muss nicht exorbitant genau sein, aber ich hätte gerne schnell die Werte.

    Da die Lochscheibe ja immer die gleichen hell/dunkel-Abstände hat, habe ich mir gedacht, 2-5 hell und dunkel Zeiten zu nehmen, den Mittelwert und die Abweichung zu rechnen und dann auf eine Minute hochzurechnen.

    Aber wie mache ich es, dass immer die aktuellsten Werte wieder in die Berechnung einfliessen? Man müsste ja die Werte sozusagen immer wieder in einer Tabelle durchschieben. (Bin leider alles andere als der König im Umgang mit Arrays.)

    Wenn ich eine Minute lang betrachte und sich dann die Geschwindigkeit ändert, dauert es mindestens eine Minute in der neuen Geschwindigkeit um den neuen wert zu ermitteln. Das wäre irgendwie doch nicht elegant..

    Gruss

    McNugget

  4. #4
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Ja genau, daher muß man sehen, was man braucht. Ich weiß nicht so genau, wie schnell deine Beckhoff die Impulse erfassen kann.

    1. Du kannst entweder Impulse zählen über einen festen Zeitraum, wobei dieser Zeitraum dann deinen kürzeste "Aktualisierungszeit" darstellt.

    2. Du nimmst die Zeit zwischen 2 Impulsen und rechnest das um. Ist die SPS nicht schnell genug, kannst du auch die Zeit zwischen 2, 3, 4 ... Impulsen messen. Dann variiert die Aktualisierungszeit, je langsamer das Rad, desto länger die Aktualisierungszeit. Je schneller das Rad, desto kürzer die Aktualisierungszeit, aber desto ungenauer wohl auch das Ergebnis.

    Das mit dem Array und die Werte die Werte da durchschieben, so in einer Art gleitendem Mittelwert bedeutet ja im Endeffekt auch, daß eine Änderung der Geschwindigkeit am Impulsrad nur langsam in die Ausgabe der Geschwindigkeit eingeht.

    Also ich würde mal mit Variante 2 anfangen. Einen Zähler, der z.Bsp. 4 Impulse zählt und einen Timer der die Zeit dazwischen mißt. das kann man dann in Impulse/Minute umrechnen. Wichtig ist, daß die LS und die Inputs auch schnell genug sind, aber bei 1000 Imp./Minute sollte das noch gehen. Je schneller die sind, und je kürzer die Zykluszeit der SPS, je genauer wird das ganze natürlich auch bei wenig ausgemessenen Impulsen.
    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. #5
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Habe Wago.

    Die Klemmen können bis 3ms runter, meine ich.

    Wie würde ich Variante 2 (gefällt mir auch besser) in ST machen?

    Gruss

    McNugget

  6. #6
    Registriert seit
    27.05.2004
    Ort
    Thüringen/Berlin
    Beiträge
    12.218
    Danke
    533
    Erhielt 2.696 Danke für 1.948 Beiträge

    Standard

    Das kann man natürlich auf viele Arten machen.

    ich habs mal so probiert, zur Veranschaulichung und zum selbst üben :
    Folgende Lib noch einbinden: TCSystem

    einen FB anlegen --> FB_Zeitmessung_zwischen_Impulsen und
    im Deklarationsteil:

    Code:
    FUNCTION_BLOCK FB_Zeitmessung_zwischen_Impulsen
    VAR_INPUT
    	bImpuls: BOOL;
    	iImpulsanzahl: INT;
    END_VAR
    VAR_OUTPUT
    	iImpulseproMinute: DINT;
    END_VAR
    VAR
    	fbR_Trig: R_TRIG;
    	iImpulszaehler: INT;
    	fbGetSystemTime: GETSYSTEMTIME;
    	iLowTimeNew, ILowTimeOld: UDINT;
    	iImpulsTime: DINT;
    END_VAR
    und im Codeteil:

    Code:
    fbR_TRIG(CLK:=bImpuls , Q=>);
    
    IF fbR_TRIG.Q THEN
    	iImpulszaehler := iImpulszaehler + 1;
    END_IF;
    
    IF iImpulszaehler >= iImpulsanzahl THEN
    	fbGETSYSTEMTIME(timeLoDW=>iLowTimeNew , timeHiDW=> );
    	iImpulsTime := UDINT_TO_DINT(iLowTimeNew - iLowTimeOld) / (10000 * iImpulsanzahl); (* iImpTime in ms*)
    	iImpulseproMinute := 60000 / ( iImpulsTime); (*Umrechnungin Impulse/Minute*)
    	iLowTimeOld := ILowTimeNew;
    	iImpulszaehler := 0;
    END_IF;
    Aufruf:

    Code:
    fbZeitmessungzwischenImpulsen(bImpuls:=bMyImpuls , iImpulsanzahl:=2 , iImpulseproMinute=>iMyImpulseproMinute );
    wobei ich folgende globale Variablen definiert habe:

    Code:
    VAR_GLOBAL
    	bMyImpuls: BOOL;
            iMyImpulseproMinute: DINT;
    END_VAR
    Der allererste Aufruf bringt hier natürlich immer ein falsches Ergebnis, da hier iLowTimeOld noch 0 ist oder einen alten Wert hat.
    Dafür kann man sich im Notfall auch noch etwas einfallen lassen.
    Geändert von Ralle (08.09.2009 um 02:48 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

  7. #7
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Hallo Ralle, danke für Deine Mühe.

    Ich habe allerdings Wago und die TCSystem.lib scheint eine Beckhoff Lib zu sein.
    Was gibt die aufgerufene Zeitfunktion genau aus?
    Ich muss das ja irgendwie mit OSCAT oder Wago-Libs bewältigen.



    Gruss

    McNugget

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

    Standard

    GetSystemTime gibt in TwinCat den Systemzeitstempel als 64bit Wert mit einer 100ns Genauigkeit aus.
    Bei Wago müsste es doch mindestens was gleichwertiges geben.

  9. #9
    McNugget ist offline Erfahrener Benutzer
    Themenstarter
    Registriert seit
    27.09.2008
    Beiträge
    201
    Danke
    21
    Erhielt 11 Danke für 10 Beiträge

    Standard

    Danke für die Info.

    Leider wüsste ich eben nicht, was bei Wago adäquat wäre.

    Wie sieht das Datenformat den ganz genau aus?

    Oder weiss jemand eine Wago Lib. die passen würde?

    Gruss

    McNugget

  10. #10
    Registriert seit
    27.04.2006
    Ort
    Sauerland
    Beiträge
    623
    Danke
    183
    Erhielt 88 Danke für 81 Beiträge

    Standard


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Mit der Funktion TIME() bekommst du die laufzeit des systems in ms als dint.
    Die Kunst in der Personalführung ist es
    die Mitarbeiter so über den Tisch zu ziehen,
    dass sie die Reibungshitze als Nestwärme empfinden.

Lesezeichen

Berechtigungen

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