Ich habe für ein Bewegendes Bauteil Positionswerte und die Richtung aufgeschrieben. Nun ist es so, dass die Bewegung mit einem Backlash bzw. Hysterese behaftet ist. Das heißt, wenn ich in die selbe Richtung fahre bewegt sich die tatsächliche Position, wenn ich jedoch die Richtung wechsel, wird erst der Backlash durchfahren bevor sich das Bautail tatsächlich bewegt. Ich habe das mal versucht an einer Grafik zu visualisieren. Im Prinzipt ist es so, als wenn ich eine Kugel in einem Kasten Positionieren möchte. Sagen wir der kasten ist 110 mm breit und die Kugel liegt mit einem Durchmesser von 10 mm genau in der Mitte. Bewege ich jetzt den Kasten immer 50 mm hin und her, ändert sich die Position der Kugel nicht, weil man sich noch im Backlash befindet. Bewege ich, jedoch die Kiste z.B. um 60 mm nach Links, erfährt die Kugel eine Verschiebung von 10 mm nach Links, obwohl ich 60 mm gefahren bin. Fahre ich dann in der selben Richtung weitere 10 mm erfährt die Kugel die selbe Positionsänderung, da diese jetzt an der Flanke der Kiste anliegt.
Ich habe nun die Startposition der Kugel vorgegeben (z.B. Linke Flanke) und einen Dataframe mit Positionsänderungen und möchte daraus jetzt einen neuen Dataframe erzeugen, der mir den Backlash berechnet und nur die tatsächliche Position der Kugel ausgibt.
Leider habe ich keinen Vollständigen Code, weil ich es irgendwie nicht hinbekomme, aber vielleicht hat Jemand eine Idee wie ich das programmiertechnisch umsetzen könnte. Im Prinzip muss ich ja nur den Dataframe von oben bis unten durchgehen und dann die Virtuelle Kiste verschieben und bei überschreiten der Grenzen die Kugel mitschleifen. Aber mir ist das gerade ein wenig zu abstrakt.

Code: Alles auswählen
backlash=50
richtung='az'
n=df.shape[0] #Länge (Zeilen) des Dataframes auslesen
i=4
if backlash>0: #Wenn ein Backlash vorhanden ist
if richtung=='az': #Richtung aus der man gekommen ist (az= von auf nach zu)
B_L=df[namen[0]].loc[i] #Absolute Position der linken Flanke
B_R=df[namen[0]].loc[i]+backlash #Absolute Position der rechten Flanke
K_ist=df[namen[0]].loc[i] #Absolute Ist-Position der Kugel
while i<=n: #DataFrame komplett durchlaufen
if df[namen[0]].loc[i+1]<df[namen[0]].loc[i+1]: #Bleibt die Richtung gleich
B_L=B_L
i=i+1 #Eine Zeile weiter springen