Habe noch eine kleine Offtopic-Frage zu diesem Thema.
Es geht mir hier ja Hauptsächlich um die Ermittlung der Schrittweite, also die Distanz zwischen den Werten in meiner Liste.
Mit dem was hier bis jetzt gepostet wurde habe ich also meine Distanz zwischen dem Istwert und Sollwert für meinen Parameter ie erhalten.
Jetzt habe ich noch einen anderen Parameter, dessen Schrittweite verändert sich allerdings im Verlauf seines Bereichs.
Minimaler Wert = 300
Maximaler Wert = 1600
Schrittweite von 300 bis 1000 = 10
Schrittweite von 1000 bis 1600 = 50
Habe es wie folgt versucht zu realisieren:
Code: Alles auswählen
def anpassung_schrittweite(para_array, diff, para_ist, para_soll):
if (para_array == 10) and int(new_data_soll[1] == 1):
if para_ist < 1000:
diff //= 10
return diff
elif para_ist >= 1000:
diff //= 50
return diff
Also wenn mein ist Parameter kleiner 1000 ist, soll die Schrittweite 10 sein, wenn der Parameter größer 1000 ist soll die Schrittweite 50 sein.
para_array ist mein Parameter an der stelle "10" aus der liste worin alle meine möglichen Parameter stehen.
diff ist die Differenz zwischen Ist- und Sollwert.
Nehmen wir an mein Sollwert hat den Wert 1200 und mein Istwert hat den Wert 600.
Die Differenz beträgt dann 600 und mein para_ist ist folglich kleiner als 1000, nun wird meine diff = 600 durch 10 geteilt, ich erhalte also -> 60.
Ich bekomme also aus der Funktion dann diese 60 zurück und eine Schleife zählt dann um 60 Schritte hoch.
Mir ist dann klar, dass ich dann völlig Überschwinge und letztlich bei 1600 lande.
Beim nächsten Durchlauf wird dann der neue Istwert abgefragt und mit meinem eigentlichen Sollwert verglichen.
Dieser ermittelt dann dass mein para_ist ja größer als 1000 ist und die Differenz zwischen meinem para_ist = 1600 und dem para_soll = 1200 beträgt dann ja 400.
Diese wird dann durch 50 geteilt und ich erhalte 8 Schritte, welche dann auf den Wert 1200 kommen.
Soweit mein Gedankengang bei der kleinen if-Anweisung dort oben...
Nur leider wird meine diff nie durch 50 geteilt.. d.h. wenn ich bei 1600 bin wird wieder durch 10 geteilt und ich erhalte eine Differenz von 40...
Hat da jemand eine Idee warum mein Programm nicht in die zweite elif Anweisung springt?
Der Post wurde jetzt irgendwie länger als gedacht, kann auch gerne einen neuen Post für dieses Topic aufmachen falls das hier dann zu lang wird.
Grüße