TIA S7-1200 Positionierachse: Aktualisierung von TO.ActualPosition - geht das auch schneller?

LehnerTh

Level-2
Beiträge
44
Reaktionspunkte
6
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo liebe Forengemeinde!

Ich möchte bei einer Positionierachse (Drehteller) bei jedem Grad einen Messwert abspeichern.
Wir fahren normalerweise mit 90°/s, also habe ich pro Grad 11ms Zeit.
Es sind insgesamt 4 Positionierachsen im Projekt, MC-Servo steht auf 10ms.
Laut Abtasttheorem müsste ich irgendwo bei 5ms Abtasten, das ist mir klar. Allerdings habe ich öfters 3-4 Grad keinen Messwert.
Wenn ich die TO.ActualPosition mit 5ms trace, sehe ich dass sich der Wert nur alle ~40ms ändert, springt dann wie beschrieben z.B. von 38° auf 43° (40ms delta_t).

Weis jemand wann der Wert aktualisiert wird? Werden beim MC-Servo alle 4 Achsen abgearbeitet und dann erst die TO-DB's beschrieben?
Kann man das irgendwie Beschleunigen?
(TIA V16 U6, 1214C)

LG, Thomas
 
Tja, die 1200'er ist halt nur Basic...
4 Motion-Achsen gehen vielleicht noch mit 8ms, ist dann aber sau knapp...
Machst du die Messwertspeicherung im Postservo? Das wäre noch die Variante die am dichtesten,direkt hinter dem MC-Servo hängt. Ist dann aber nicht mehr synchron zum Main-OB.

Wie hoch ist denn deine Zykluszeit?

Weis jemand wann der Wert aktualisiert wird? Werden beim MC-Servo alle 4 Achsen abgearbeitet und dann erst die TO-DB's beschrieben?
Ganz ehrich, keine Ahnung. Macht aber doch auch keinen Unterschied da du eh nicht zwischen den MCServo kommst.
Kann man das irgendwie Beschleunigen?
Mit der CPU nicht. Alternativ eine 15xxSP oder mehrere 1200'er (für jede Achse eine, oder auch zwei Achsen auf eine CPU)
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Was willst du mit den Messwerten machen? Vlt. könnte man ja auch in jedem Postservo den Messwert und die Position speichern und anschließend aussortieren und interpolieren?
 
Ja 8ms würden noch gehen, wobei mir vorkommt dass der Tisch dann schon nicht mehr so sauber fährt.
Zykluszeit habe ich mit dem 10ms Servo bei 30-40ms.
Die Messwertspeicherung mache ich im Post-Servo. Hab es mit einem 5ms OB versucht, macht aber glaube ich keinen Unterschied, da die ActualPosition ja erst mit dem MC_Servo aktualisiert wird!?

Hardware kann ich nicht ändern, es Handelt sich um eine Serienmaschine die um ein Feature erweitert werden soll.
Es soll die Kontur des Bauteils auf dem Drehtisch mittels eines Laserdistanzsensors möglichst genau vermessen werden.
 
Also ich habe jetzt ein paar Tests gemacht:
Der MC_PostServo läuft sauber mit 9-11ms zwischen den Aufrufen.

Wenn ich nun Messwerte für 1 Umdrehung aufzeichne (Werden pro Grad in ein Array 0..359 geschrieben) bekomme ich:
Sehr selten 2° direkt hintereinander mit Messwert
Selten 1° ohne Messwert
Öfter 2° ohne Messwert
Oft 3° ohne Messwert
Selten 4° ohne Messwert

Bei mit/ohne Messwert meine ich dass kein Wert drin steht, weil meine Gradauswertung keinen neuen Wert bekommen hat. Das Drehteller zählt die Umdrehungen rauf und ich nehm dann MOD 360 als Arrayindex.

Für die Grad wird direkt auf TO.ActualPosition zugegriffen.

Wie kann es sein, dass dieser Wert so ungleich upgedatet wird? Bzw. dass ich Teilweise 4° (~50ms) keine Änderung bekomme?
Drum wieder die Frage wann dieser Wert aktualisiert wird, mit dem MC_Servo bzw. dem 4fachen MC_Servo (wegen der 4 Achsen) kann es ja nicht direkt zusammenhängen.

Zur Info: Während ich die Tests mache stehen die anderen 3 Achsen still (MC_Power.enable = False). Im realbetrieb würde eine der 3 Achsen in Bewegung sein, ich fürchte dass dadurch das Ergebnis noch schlechter wird.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Interpolieren wird schwierig wenn ich so oft 2-3-4 Lücken drin hab, dann auch noch mit Wendepunkten (zu Messende Kontur ist meist Rechteckig oder Rechteckig-Verrundet). Durch diese Kontur wird das aufgezeichnete Profil "hügelig" mit 4 Hügeln.
Oder gibts da gute Möglichkeiten für? Ich schau mir grad die Polyline-Funktion im TIA an.
 
Vlt. solltest du nochmal übers Konzept nachdenken. Ich würd da in erster Linie an einen Keyence LJX denken, der das Profil selbst aufzeichnet und danach bewertet. Das geht entweder über Zeile pro Zeit (wenn die Geschwindigkeit konstant ist geht das) oder noch besser über den Encoder-Eingang des LJX. Der kann auch extern an die Mechanik gebaut werden.
 
Hallo TP-Inc!

Weis nicht ob das klar war, es geht es um bereits bestehende Maschinen, die Hardware ist also bereits (mehrfach Europaweit) vorhanden.
Ich will/kann somit keine neue Hardware einsetzen, sondern die Vorhandene so gut als möglich ausnutzen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Falls Du einen Sinamics S120, S110 oder G120 mit CU250S-2 hast, könntest Du auch die antriebsintegrierte Messwertspeicherfunktion nutzen - mit Funktionsmodul Lageregelung.
 
Guten Morgen Forum!

Ich habe gefunden wonach ich gesucht habe:
Mit MC_ReadParam kann man die aktuellen Werte einer Achse auslesen, noch lang bevor sie im Technologie-DB aktualisiert sind.
Aus dem Technologie-DB konnte ich nur 120 von 360° abtasten, jetzt für über 300.

Danke an alle Beteiligten für eure Hilfe!
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Schön das du eine Lösung hast, aber da scheint mir doch etwas faul zu sein...

Der MC-Servo läuft mit 10ms bringt also alle 10 ms einen neuen Istwert im Technologie-DB. Du kannst aber nur jeden 3. davon lesen... Kann es sein das du dies im Zyklischen Programm versuchst mit 30-40ms Zykluszeit und nicht im MC_PostServo? Dies würde das Verhalten erklären.

Bauchschmerzen würde ich auch bekommen wenn man sich überlegt das der MC-Servo mit 10ms läuft weil die CPU am Limit ist und du nun zusätzlich mit MC_ReadParam Daten vom Umrichter holst. Halt STOP da wird nichts vom Umrichter gelesen, die Daten sind bereits in der Steuerung und im Technologie-DB.
 
Nein, mach ich im PostServo. Hab sogar zum Vergleich mal beide im PostServo ausgelesen (1x mit ReadParam, 1x TO.ActualPosition), beim Zugriff auf das TO gehen wieder 2-3-4 Werte verloren. Habs Anfangs auch mal mit einem 5ms Cyclic probiert, selbes Problem.
Ich habe bis jetzt noch keine Info wann die Daten im TO-DB wirklich aktualisiert werden, der MC_Servo (bzw. PostServo) machen ja nur ein "Teilprozessabbild".

Ich schätze das Abbild aus dem MC_Servo wird irgendwo temporär liegen, wobei die Regelung damit gemacht wird. Das Motion-Abbild wird dann wahrscheinlich mit dem normalen Zyklus auf den DB kopiert (oder irgendwie so :unsure:)
 
So sieht Übrigens meine gemessene Kontur jetzt aus, besser als Anfangs erwartet :D
Nächster Schritt: Algorithmus um die Eck-Koordinaten herauszurechnen

Unbenannt.PNG
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Echt jetzt..., steht sogar in der Doku (TIA Hilfe):
Aktualisierung der Variablen des Technologieobjekts (S7-1200)
Die in den Variablen des Technologieobjekts angezeigten Status- und Fehlerinformationen der Achse werden jeweils am Zykluskontrollpunkt aktualisiert.


Wertänderungen bei Konfigurationsvariablen werden nicht sofort wirksam. Unter welchen Bedingungen eine Änderung wirksam wird, entnehmen Sie der Detailbeschreibung der entsprechenden Variable.
Der Weg über ReadParam ist also der richtige Weg (unglaublich...) !
 
Zurück
Oben