TIA Umschalten Achsenmotor zur genauen Positionierung ; S7-1214C ohne FU

Aljonator

Level-1
Beiträge
25
Reaktionspunkte
0
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Community :)

Ich habe jetzt schon etwas gesucht und auch selbst schon einiges ausprobiert, finde jedoch leider keine so richtige Lösung.... :(


Ich bin im ersten Halbjahr zum staatlich geprüften Techniker für Prozessautomatisierung. Wir haben in unserem Laborraum eine Lernanlage von FESTO, in welcher ein Miniatur-Hochregallager integriert ist. Steuerung ist eine S7-1214C. Das Hochregallager hat 2 Achsen (X & Z ) zum rauf/runter, bzw. links/rechts fahren. Y-Achse ist ein pneumatsicher Zylinder mit einem Greifer. Die Achsmotoren sind Gleichstrommotoren, die über digitale Ausgänge der SPS und einen Motortreiber schnell oder langsam angesteuert werden können. Sie sind über eine Transmissionwelle mit einem Inkrementalgeber verbunden. Leider gibt es keine technischen Unterlagen oder Dokumentationen zu der Anlage. Wieso verstehe ich auch nicht so recht.

Um die Signale des Inkrementalgebers auszuwerten verwende ich die schnellen Zähler der CPU, welche ich in der HW-Config parametriert habe. Wegen fehlender Unterlagen arbeiten wir mit den "Zahlen" die der HSC uns rausgibt. Dass diese aber wohl nicht den Impulsen des Inkrementalgebers entsprechen, vermute ich mal.
Nach einigem rumdoktoren und Jugend-forscht-Stunden habe ich herausgefunden, dass die Eingänge der Kanäle A & B des Inkrementalgebers schonmal falsch angeschlossen waren, da Kanal A auf einen 30 KHZ-Eingang ging und dieser wohl mehr Impulse bekommt, als der auswerten kann. Kanal B geht auf einen 100 KHZ-Eingang und zählt sauber. Nachdem wir das umverdrahtet haben, also auch auf einen 100 KHZ-Eingang des "Eingangsbytes 0" zählen die HSC´S auch richtig, wenn der Motor schnell dreht.

Ein lauffähiges Programm, mit welchem man über eine Visualisierung Ein- und Auslagern kann habe ich schon erstellt. Das war auch erstmal das Ziel. Ich habe auch eine Auswertung, ob ein Lagerplatz belegt oder frei ist (FieldRead/FieldWright), mit Anzeige und Fehlermeldung, falls man z.B. Einlagern will, der Platz aber schon belegt ist.

Das Ganze funktioniert momentan aber leider nur, mit langsamer Geschwindigkeit, da wir anfangs nicht dahinter gestiegen sind, wieso das mit dem Zählen bei schneller Geschwindigkeit nicht funktioniert.


Jetzt zur eigentlichen Problemstellung:


Da wir jetzt auch schnell fahren können, muss die Achse an einem bestimmten Punkt, bevor sie die Soll-Position erreicht, auf langsam umgeschaltet werden, weil sie diese sonst überfährt und somit der restliche Programmteil nicht funktionieren würde.

Ich habe schon etwas rumprobiert mit Mathefunktionen und diesem Range-Baustein, damit sie sobald sie z.B. 50 Punkte von der Soll-Position entfernt ist auf langsam schaltet. Ich habe damit jedoch noch keine vernünftige Lösung zustande bekommen. :(

---------------------------------------------------------------------------

Gibt es da nicht auch einfachere Methoden?
Wie macht man so etwas überhaupt, um genau zu positionieren? Also Umschaltung von schnell auf langsam.

Wie kann ich das in meinem Programm denn realisieren?
---------------------------------------------------------------------------

Ich hoffe, ich habe nicht zu viel geschrieben, ich wollte meine Problemstellung jedoch verständlich machen und hoffe, dass das geklappt hat.

Ich freue mich über konstruktive Kritik, Lösungsansätze und Tipps, wie ich mein Problem lösen kann.

Vielen Dank schonmal im Vorraus. :)

Liebe Grüße
 
Wenn es einfach sein soll:

SCHNELL := (ISTPOSITION > SOLLPOSITION + GRENZWERT_LANGSAM) OR (ISTPOSITION < SOLLPOSITION - GRENZWERT_LANGSAM);

Grüße

Marcel
 
Zurück
Oben