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

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

Thema: Frequenzauswertung/Prognose

  1. #21
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Guten Morgen allerseits.

    Zu dem bereits gelösten Problemchen habe ich nun noch eine Erweiterung.

    Man muss sich das System, das ich hier umzusetzen versuche, als Endlosförderband vorstellen.

    In regelmässigen Abständen sind Mitnehmer, die detektiert werden.

    An einer Stelle ist ein zusätzlicher Mitnehmer auf halbem Abstand der anderen Mitnehmer.

    Sobald dieser Mitnehmer kommt, soll der Mitnehmerzähler auf Null gesetzt werden, und die Zählung soll erneut beginnen.

    Zudem soll der Rundenzähler um 1 erhöht werden.

    Ich habe es jetzt so gemacht, dass ich eine prozentuale Zeitabweichung zwischen den Mitnehmersignalen definiere und dies Abfrage, aber das funktionier nicht, weil das System immer die aktuelle Passe heranzieht.

    Wahrscheinlich wäre ein Array besser, um Schwankungen besser "schlucken" zu können. (Also Array-Mittelwert)

    Stehe leider noch mit Arrays auf Kriegsfuss.

    Wichtig ist vielleicht auch noch zu wissen, dass die Anlage per Frequenzumrichter stufenlos in der Geschwindigkeit verstellt werden kann. Daher sollte es eben bei diesen timings eine gewisse Abweichungstoleranz geben.

    Ich habe den vorhandenen Code mal folgendermassen angepasst:

    Deklaration:
    FUNCTION_BLOCK FB_Impulsabstand

    VAR_INPUT
    bImpuls: BOOL;
    Abweichung:INT;
    rst:BOOL;

    END_VAR
    VAR_OUTPUT
    iImpulsTime: INT;
    Index_rst:BOOL;
    Abw: INT;
    Abdiff: INT;
    RundenINT;
    END_VAR
    VAR
    fbR_Trig: R_TRIG;
    iImpulszaehler: INT;
    iLowTimeNew, ILowTimeOld: UDINT;

    iImpulsTimea: UDINT;
    iImpulsTimeb: UDINT;
    X: INT;
    Rd_Zaehler:CTU;
    END_VAR
    Anweisungsteil:
    fbR_TRIG(CLK:=bImpuls , Q=>);
    Index_rst :=FALSE;

    IF fbR_TRIG.Q THEN
    iLowTimeNew:= TIME_TO_UDINT (TIME( )) ;
    iImpulsTime := UDINT_TO_INT (iLowTimeNew - iLowTimeOld);
    iLowTimeOld := ILowTimeNew;
    END_IF

    X := ((iImpulsTime/100)*Abweichung);

    Abw:=(iImpulsTime-X);
    Abdiff:=iImpulsTime-abw;

    IF iImpulsTime<abdiff
    THEN Index_rst :=TRUE;
    END_IF
    RD_ZAEHLER(CU:=Index_rst , Reset:=rst, cv=>Runden);
    Wie mache ich es besser/optimal die Runden korrekt zu zählen?



    Weitere Problemstellungen wären eine Warnung, wenn mal ein Mitnehmer fehlt bzw. nicht gesehen wird und eine Warnung bei schwankender Geschwindigkeit.


    Ach ja: Nein, dies ist keine Aufgabe für die Schule.
    Ich möchte nur lernen/umsetzen.




    Gruss

    McNugget

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

    Standard

    Du könntest auch einfach die Anzahl der Mitnehmer zählen und wenn alle durch sind, die den Wert wieder auf Null setzten und den Rundenzähler um eins erhöhen.
    Damit wäre zwar dein Problem mit den fehlerhaft detektierten Mitnehmern nicht gelöst, aber diese Variante wäre auf jeden Fall robuster als die zeitlichen Abstände zwischen den einzelnen Mitnehmern zu messen. Wenn nämlich gerade der eine Mitnehmer mit halben Abstand nicht erfasst wird, fehlt dir eine ganze Runde.

    Ist das die selbe Anlage für die du auch die Drehzahlmessung für den Motor realisiert hast? Ich kenne mich bei Förderanlagen nicht wirklich aus (wg. Schlupf etc.) aber vielleicht wäre es ja möglich deine Rundenzahl über die Motorumdrehungen zu bestimmen......

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

    Ja, es ist die selbe Anlage.

    Ich versuche eine alte Steuerung abzulösen/ zu optimieren.

    Daher muss ich mich leider auch an einige alte konstruktive Gegebenheiten halte, da ich sanft migrieren muss. Ich bin da leider sehr gebunden, da einige Einzelheiten für meinen Sonderfall auch schon recht gut gelöst sind.

    Das Thema mit den fehlenden Mitnehmern ist so wichtig, dass ich es wie angegeben lösen muss.

    Es wird nämlich für jeden Mitnehmer auch ein Gewicht übergeben.

    Das mit der fehlenden Runde bei nicht gesehene "Index"-Mitnehmer könnte ich evtl kompensieren, da die Mitnehmererfassung mehrmals stattfindet. Das heisst, wenn es gut programmiert ist, würde ich nur einen Teil der Runde verlieren.

    Aktuell ist die alte Steuerung so daneben, dass ich mindestens 3 (!) Runden verliere, wenn etwas nicht optimal läuft.

    Zudem kann die Anlagenkonfiguration auch mal geändert werden. Da macht es Sinn, dass man den "Index"-Mitnehmer sucht und dann eine Initialisierungsrunde fährt, um mal alle durchzuzählen und als aktuellen Konfigurationswert festzulegen. Es geht hier leider nicht nur um 10 oder 20 Mitnehmer.


    Gruss

    McNugget
    Geändert von McNugget (14.09.2009 um 09:33 Uhr)

  4. #24
    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


    Zuviel Werbung?
    -> Hier kostenlos registrieren
    Hat jemand eine Idee/Anregung?

    Oder sollte ich evtl ein eigenes Thema für das neue "Problemchen" erstellen?

Lesezeichen

Berechtigungen

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