Längenmessung mit Inkrementalgeber

Workaholic

New member
Beiträge
1
Punkte Reaktionen
0
Zuviel Werbung?
->Hier kostenlos registrieren
Hallo,
ich bin ziemlicher Anfänger was die S7 angeht. Bis auf ein paar Stunden im Meisterkurs habe ich mir den größten Teil selbst beigebracht, und hoffe das mir hier geholfen werden kann.
Ich versuche mein Projekt und Problem so genau wie möglich zu beschreiben ohne das daraus ein Roman wird.
Bei dem Projekt soll eine 100m Rolle PVC Material auf verschiedene Maße abgelängt werden. Hierzu verwende ich eine CPU 313-C Ptp, ein KTP1000 und
einen Kübler Drehgeber 500 Impulse pro Umdrehung. Das Messrad auch von Kübler hat einen Umfang von 500mm, somit ist ein Inkrement auch ein 1mm.
Die A Spur des Drehgebers ist am E0.0 der CPU angeschlossen. Der E0.0 ist
laut Beschreibung ein schneller Eingang, und sollte daher geeignet sein.
Am KTP1000 habe ich nun 10Eingabefelder für 10Stückzähler, und 10Eingabefelder für die Länge des jeweiligen Stückzählers. Die Stückzähler laufen hintereinander ab, der Längenwert des aktiven Zählers wird dann dem SFB47 als Vorgabe übergeben.
Somit kann ich z.B. 5 Stück a 400mm, 10Stück a 800mm usw. schneiden
bis die Rolle zu ende ist. Zugeführt wird das Material dem Messer mittels eines Bandtransportes der von einem Servo angetrieben wird. Drücke ich Start läuft der Servo, drücke ich Stop oder wird gerade geschnitten, dann
steht der Antrieb.
Nun da die Mechanik ja auch Toleranzen aufweist (ich denke da an das Messrad), kommen die Teile kürzer aus der Anlage als eingegeben.
Wenn das Messrad nun statt 500mm nur 499 hat, dann habe ich pro Umdrehung einen Fehler von 1mm.Deswegen kann ich am KTP einen Faktor eingeben mit dem die eigentliche Länge multipliziert wird. Soweit funktioniert das ganze auch so wie gedacht. Der um den Faktor korrigierte Wert wird an den SFB47 übergeben,
und sobald der IST Wert die Vorgabe errreicht hat, stopt die Anlage und es
wird geschnitten. Somit erreiche ich eine Abweichung von +/- 1mm was
für meinen Kunden OK ist.
Mein Problem ist nun das der Faktor nicht gleich bleibt. Nun ist es so das bei einer Länge von 900mm und dem Faktor 1,06 ich die Vorgabe innerhalb meiner Toleranz erreiche. Bei 800mm und demselben Faktor werden die Teile jedoch 5mm zu lang, umgekehrt bei 1000mm werden die Teile 5mm zu kurz. Somit bräuchte ich bei 800mm einen Faktor von ca. 1,05 und bei 1000mm ca. 1,07.
Die Anlage läuft mit 5m/min, damit 83 Impulse pro Sekunde, was den Eingang der CPU normal nicht überfordern sollte. Am Anfang habe ich auch
an die Zykluszeit gedacht, da ich alles in einen FB gepackt habe, ein Tribut
an meine mangelnde Erfahrung (die Zykluszeit bewegt sich meist um die 3ms, manchmal sind auch Ausreißer mit 20ms dabei). Jedoch sind alle Teile
einer Länge immer +/- 1mm gleich lang.

Ich bin mir nichtmal sicher ob das Problem von der CPU kommt, jedoch woher sonst?
Ich danke schonmal für die Antworten und wünsche noch einen schönen Abend.

MfG
Workaholic
 

Oberchefe

Well-known member
Beiträge
2.269
Punkte Reaktionen
363
So wird das nichts. Die Auflösung ist im Vergleich zur gewünschten Genauigkeit zu gering.

Wenn Deine SPS 400 Pulse bekommst weißt Du nicht wie lange das Teil wirklich ist, es können 400,0mm sein, müssen aber nicht. Beispiel 1:
erster Schnitt genau in der Mitte zwischen zwei Pulsen, der zweite Schnitt nach 400 Pulsen (gerade wenn der 400ste Puls eingegangen ist) -> tatsächliche Länge 399,5mm

Beispiel 2: erster Schnitt gerade nach einem Puls, zweiter Schnitt kurz bevor der 401ste Puls kommen würde: 400,99mm

Und so weiter.

Hier ist die mechanische Toleranz noch gar nicht berücksichtigt, geschweige denn Bremstoleranzen vom Servo, so wie ich das verstanden habe wird ja nicht auf die Position geregelt sondern nur der Stop ausgelöst?
 

Paule

Well-known member
Beiträge
3.051
Punkte Reaktionen
864
Zuviel Werbung?
->Hier kostenlos registrieren
Mein Problem ist nun das der Faktor nicht gleich bleibt. Nun ist es so das bei einer Länge von 900mm und dem Faktor 1,06 ich die Vorgabe innerhalb meiner Toleranz erreiche. Bei 800mm und demselben Faktor werden die Teile jedoch 5mm zu lang, umgekehrt bei 1000mm werden die Teile 5mm zu kurz. Somit bräuchte ich bei 800mm einen Faktor von ca. 1,05 und bei 1000mm ca. 1,07.
So wie das ausschaut muss der Faktor proportional zur Länge geändert werden:
Code:
   1000mm = 1,07
    900mm = 1,06
    800mm = 1,05
    => 0,01 / 100mm = 0,0001
    plus Grundfehler von 0,97 
 
Mögliche Berechnung des Faktors:
   Länge * 0,0001 + 0,97

@Oberschefe, Dein Einwand ist sicher berechtigt aber der Messfehler müsste doch bei unterschiedlichen Längen sich immer gleich verhalten.
 

franzz

Member
Beiträge
23
Punkte Reaktionen
2
Ich hätte da zwei Vorschläge:

1) Wenn Du von dem Inkrementalgeber nicht Impulse auswertest, sondern steigende und fallende Flanken, dann hättest Du die Auflösung verdoppelt. Wenn Du auch noch die B-Spur dazu nehmen kannst, vervierfacht. Ob Deine SPS dafür aber schnell genug ist, bezweifele ich.

2) Du könntest versuchen, die Anzahl der benötigten Impulse aus "Solllänge * faktor - konstante" auszurechnen, wobei die Konstante den konstanten(?) Nachlauf des Servos angibt.

Viel Erfolg.
 

Der Pfälzer

Well-known member
Beiträge
318
Punkte Reaktionen
73
Hallo,

ich sehe das auch so, dass deine Impulse zu gering sind.

Ohne jetzt genau die BestNR deiner 313C zu kennen, die haben doch Zähler onboard.
Du hast ja auch vom SFB47 gesprochen. Diese Zähler gehen bis 30kHz und haben einen Vergleicher-Ausgang.
Vielleicht ist auch der SFB46 für dich besser geeignet?

Gruß Roland
 

PN/DP

User des Jahres 2011-2013; 2015-2017; 2020-2021
Beiträge
17.562
Punkte Reaktionen
5.166
Zuviel Werbung?
->Hier kostenlos registrieren
Die A Spur des Drehgebers ist am E0.0 der CPU angeschlossen. Der E0.0 ist
laut Beschreibung ein schneller Eingang, und sollte daher geeignet sein.
Meinst Du mit E0.0 den ersten integrierten Eingang der 313C (DI+0.0 X12:2), der standardmäßig die Adresse E124.0 hat?
Was ist bei Dir am E0.1 und E0.2 angeschlossen? Nicht, daß Dein Zähler kurzzeitig rückwärts zählt oder stoppt.

Ich staune, daß das Zählen mit der 313C bei Dir überhaupt funktioniert, da Du nicht erwähnst, wie Du den schnellen Zählkanal 0 parametriert hast. Du erwähnst allerdings den SFB47.
Offensichtlich ist Dein Zählkanal 0 als "Impuls/Richtung" ohne HW-Tor parametriert (Standardeinstellung).
Welche Digitaleingänge man als Zähleingänge benutzt ist nicht wahlfrei, die DI sind fest den Zählkanälen zugeordnet, ebenso ihre Funktion. Benötigt man das Richtungssignal eines Zählkanals nicht, so darf der zugehörige Eingang trotzdem nicht beschaltet werden.

Schließe die Spur B des Drehgebers an E0.1 an und parametriere den Zählkanal 0 auf "Drehgeber vierfach", dann hast Du 2000 Incremente je Umdrehung (0,25mm je Increment).

Die Anlage läuft mit 5m/min, damit 83 Impulse pro Sekunde, was den Eingang der CPU normal nicht überfordern sollte. Am Anfang habe ich auch
an die Zykluszeit gedacht
Die Zählkanäle sind fest verdrahtete Hardwarezähler, die unabhängig vom OB1-Zyklus bis 30kHz zählen können.

Betriebsanleitung: SIMATIC S7-300 CPU 31xC: Technologische Funktionen
Gerätehandbuch: SIMATIC S7-300 CPU 31xC und CPU 31x: Technische Daten

Was mir sonst noch einfällt:
Dein Meßrad misst das ausgerollte Material und nicht die Umdrehungen der Materialrolle?
Du berücksichtigst bei den Längenmessungen die Schnittbreite?
Wie erzeugst Du das Stopsignal für den Bandtransport?

Harald
 
Oben