Rundtakttisch mit unterschiedlichen Schrittweiten

SPS-Fuzzi

Level-2
Beiträge
104
Reaktionspunkte
27
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo zusammen!

Habe in Codesys schon mehrfach Rundtakttische programmiert, aber immer nur so, dass der zu fahrende Weg (die Schrittweite) immer gleich war. Auf diese Schrittweite habe ich den Modulowert eingestellt. Sprich wenn die Schrittweite 3,6° ist, und der Rundtakttisch 3,6° gefahren ist, steht er wieder auf null.

Vor dem nächsten Fahrbefehl habe ich die aktuelle Position abgefragt. Steht diese auf Null, fahre ich mit einem relativen Fahrbefehl um 3,6° weiter. Steht sie nicht auf Null, wurde der Tisch verdreht oder während dem letzten Fahrbefehl gestoppt. Dann fahre ich absolut auf 0° und die Position passt wieder.

Soweit so gut. Jetzt ein neues Projekt, da können sich die Schrittweiten ändern. Einmal werden Teller mit 100 Positionen aufgebaut (3,6°), dann Teller mit 80 Positionen (4,5°). Sprich das mit einem festen Modulo klappt nicht mehr. Die einzige Gemeinsamkeit wäre Modulo 360°, also einmal rum.

Das heißt ich kann immer nur mit relativen Fahrbefehlen fahren. Also entweder 3,6 oder 4,5°. Aber wie mache ich das wenn der Teller verdreht wurde? Wie kann ich mich dann wieder auf Null positionieren?

Irgendwie denke ich dass das ganz einfach ist, leider steh ich nur aufm Schlauch.


DANKE Gruß SPS-Fuzzi
 
Naja ... ich würde das so sehen :
An irgendeiner Stelle in deinem Programm legst du ja fest, wie du deinen RST betreiben willst (80 Positionen oder 100 Positionen). Entsprechend dieser Einstellung legst du dann deine Schrittweite fest und vergleichst die Positionen und übergibst das dann an den Servoregler.

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Wie Larry schon schrieb wirst Du ja wissen welchen Tisch Du betreibst. Soweit die Zielposition immer genau erreicht wird kannst Du die Aktuelle Position durch die Schrittweite teilen, dann müsste eine Zahl ohne Rest rauskommen, gibt es einen Rest wurde die Achse verstellt. Falls die Achse verstellt wurde ermittelst Du die Zahl vor dem Komma, multiplizierst diese mit der Schrittweite und verfährst auf diese Absolutposition (eventuell addierst Du noch den Wert einer Schrittweite dazu). Wird die Zielposition nicht immer 100%ig genau erreicht müsstet Du mit der ABS-Funktion von der Nachkommazahl 1 abziehen und schauen, ob eine gewisse Toleranz überschritten wurde. Ist dies der Fall würde es dann wieder so laufen wie oben beschrieben.
 
Gute Idee, die aktuelle Position durch die Schrittweite zu teilen und schauen ob ein Rest übrig bleibt.

Was mir mittlerweile auch noch eingefallen ist: wenn ich um die Schrittweite gefahren bin, stell ich einfach die Achse mit einer Homeing-Methode wieder auf Null. Probier ich mal aus ob das funktioniert.

Danke und Gruß, SPS-Fuzzi
 
Aus dem Bauch heraus würde ich genau das nicht machen.
Viel besser wäre, es so zu machen, wie Oliver es ausgeführt hat. Auf die Weise kannst du geringe "Kettenmass-Positionier-Verschleppungen" automatisch auf den Gesamttakt hin sogar wieder kompensieren ...

Gruß
Larry
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo SPS-Fuzzi,
ich gehe davon aus, dass du die SoftMotion von 3S in CoDeSys verwendest.
Du könntest auch den MODULO WERT in der Applikation ändern, wenn ein Typenwechsel stattfindet.
Einfach die SM_Drive.fPositionPeriode mit einem neuen Wert beschreiben und dann die Achse mit SMC3_ReinitDrive neu initialisieren.
Die Positionsskalierung kannst du damit auch in der Applikation ändern.
Gruß
Zephyr

PS: Oder du benutzt den FB "SMC_ChangeGearingRatio" und anschliesend den "SMC3_ReinitDrive"

SMC_ChangeGearingRatio.jpg
 
Zuletzt bearbeitet:
Mal quer gedacht (kenne CDS nicht): ist auch keine saubere Lösung: schrittweite auf 0,9 Grad einstellen und dann halt 4 bzw 5 Schritte hintereinander fahren (könnte aber blöd sein wegen bremsen und beschleunigen)

Gesendet von meinem MI 5 mit Tapatalk
 
Zurück
Oben