Frequenzauswertung/Prognose

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;
Runden:DINT;
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
 
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......
 
Zuviel Werbung?
-> Hier kostenlos registrieren
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
 
Zuletzt bearbeitet:
Zurück
Oben