Positionsberechnung mit Totzeitkompensation

Bavilo

Level-2
Beiträge
60
Reaktionspunkte
4
Zuviel Werbung?
-> Hier kostenlos registrieren
Hallo,

ich möchte folgende Funktion von Schneider eigenständig umsetzen:

Hierbei geht es mir nur um die Totzeitkompensation.

Ich habe die ist-Geschwindigkeit und die ist-Position eines Antriebes.
Nun wird eine Zeit vorgegeben. Der Antrieb soll vor erreichen der Position (um diese Zeit) ein Ventil schalten.

Z.B.
Soll-Position des Antriebes ist 1000mm
Totzeit 50ms

Hier soll der Antrieb also 50ms bevor er seine Soll-Position erreicht hat, ein Ventil geschaltet werden.
Wie kann ich nun die Position berechnen die der Antrieb in diesem Moment haben wird?

Ich hatte an das gedacht:
PositionVentil = Sollposition - (IstGeschwindigkeit x Totzeit)

Pro Zyklus und je weiter der Antrieb fährt würde dies sich ja Kurvenartig der richtigen Position nähern.

IF IstPosition >= PositionVentil Then
Bremse := TRUE;
END_IF

Würde dann die Bremse frühzeitig einfallen lassen.

Liege ich hiermit korrekt?
 
Zuletzt bearbeitet:
Zuviel Werbung?
-> Hier kostenlos registrieren
Es handelt sich um ein PacDrive von Schneider. Es muss aber Hersteller unabhängig funktionieren.
Die Zykluszeit beträgt 10ms. Fix.

Mir ist klar, dass ich dann Totzeiten größer 10ms berechnen kann.
 
Das von Dir beschriebene Verfahren würde ich nur für die erste Fahrt in einer neuen Situation (Last, Geschwindigkeit etc.) benutzen.
Dann würde ich aber die Abweichung zwischen Zielposition und Anhalteposition erfassen und den Bremspunkt um diese Strecke korrigieren.
Dann sollte es schon bei der zweiten Fahrt gut passen.
 
Ich gehe davon aus, das du mit SoMachine arbeitest. Wird der Antrieb zufällig von einem LXM angesteuert? Dann ist die Bremse am Servo nur eine Haltebremse wenn der Servo aus der Lagerelung geht z.B. Not-Aus o.ä.
Dieser Baustein generiert die eine Nocke zu einer bestimmten Position, wenn du da die Bremse steuerst wird dir unter umständen die Positionierung entgegen Steuern.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ich wusste dass das kommt...die Bremse war nur ein Beispiel. Von mir aus soll ein Ventil gesteuert werden. :-)

Und es muss auch beim ersten Mal genau funktionieren. Nicht erst beim 2. Mal
 
Pro Zyklus und je weiter der Antrieb fährt würde dies sich ja Kurvenartig der richtigen Position nähern.
Was bedeutet "kurvenartig"?
Hast Du da auch einen Regelkreis, der die Achse abbremst?
Es wäre auch nicht schlecht, wenn Du mal die Geschwindigkeit und die erforderliche Genauigkeit nennen würdest.
 
Mit 10ms Zyklus hast Du nen Jitter von 20ms. Das kommt auf die Totzeit als Ungenauigkeit drauf.

Daher ist die Frage/Anmerkung bzgl. der Achssteuerung berechtigt.
Wenn es jz plötzlich um ein Ventil geht - kann ja keiner ahnen.
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Ok ich habe meinen Beitrag angepasst. Könnten wir uns hier auf das Wesentliche beschränken?

Funktionert dies?
PositionVentil = Sollposition - (IstGeschwindigkeit x Totzeit)

IF IstPosition >= PositionVentil Then
Bremse := TRUE;
END_IF

Die Genauigkeit ist mir gerade egal. Ich versuche die FC_SwitchCam umzusetzen. Diese läuft in einer 10ms Task, demnach ist sie ebenfalls "ungenau".

Danke
 
Ok ich habe meinen Beitrag angepasst. Könnten wir uns hier auf das Wesentliche beschränken?
Klar. Aber für das Wesentliche muss man wissen welcher Rahmen vorgegeben ist. Das heißt wo die Grenzen sind. Und diese Fragen (Abseits des Wesentlichen) sind unerlässlich, wenn man sich auf das Wesentliche beschränken will.
Du wirst die Grenzen genauer kenne bzw. hast eigene Grenzen im Kopf. Wir haben vielleicht andere Grenzen im Kopf und müssen Deine erst herausfinden.

Funktionert dies?
PositionVentil = Sollposition - (IstGeschwindigkeit x Totzeit)

IF IstPosition >= PositionVentil Then
Bremse := TRUE;
END_IF
Für den Fall "OnPos < OffPos" ja. Kniffliger ist der Fall "OnPos > OffPos".

Die Genauigkeit ist mir gerade egal. Ich versuche die FC_SwitchCam umzusetzen. Diese läuft in einer 10ms Task, demnach ist sie ebenfalls "ungenau".
Wieder eine Randinformation, die wir erst jetzt bekommen und die für das Nachdenken über diese Aufgabe wichtig ist.

VG
MFreiberger
 
Zuviel Werbung?
-> Hier kostenlos registrieren
Lieber M...o :D

Wie im ersten Beitrag geschrieben möchte ich die Funktion FB_SwitchCam umsetzen. Aber NUR die Totzeitkompensation. OnPos < OffPos und OnPos > OffPos sind mir ebenfalls egal. Ein Beispiel was ich vor hatte habe ich beschrieben.

Die Zykluszeit spielt hier auch überhaupt keine Rolle, weil....ich die Funktion von FB_SwitchCam umsetzen möchte....Wenn diese in einer 10ms Task läuft dann ist das so. Das was FB_SwitchCam mit der Totzeitkompensation macht, in welcher Zykluszeit auch immer, möchte ich auch umsetzen.

Hast du denn gerade so viel Zeit mich anzupflaumen oder läuft Grimme endlich? :)
 
Zurück
Oben