Posts by Ringo27

    Hallo, habe wieder ein kleines Problem..

    Durch einen Button wird folgende Funktion aufgerufen:

    (Der Code vom letzten mal)

    Jetzt möchte ich in einer anderen Funktion [weiter()], diese ausgewählte Datei, die unter dateiname ausgewählt wurde, wieder verwenden und dort andere Werte aus der Excel-Datei holen. Wie funktioniert das? :denker:

    Code
    def weiter():
        ## Datei aus der anderen Funktion bekommen ##
        
        strasse = worksheet['A4']
        hausnummer = worksheet['A5']
        nachname = worksheet['A6']
        
        print(strasse.value)
        print(hausnummer.value)
        print(nachname.value)


    Danke im Voraus! :helpnew:

    Grüße,

    Ringo27

    Hallo, habe wieder ein kleines Problem.

    Ich versuche mich jetzt einmal mit Openpyxl und Excel. Sobald ein Button gedrückt wird, wird dateiname ausgeführt, dann öffnet sich ja das Filedialog.

    Und ich möchte, dass die Excel-Datei die dort ausgewählt wurde dann ausgewertet wird (Also wird mir von der Datei die Zellen A1,A2,A3 angezeigt).

    Was muss man bei filename = hineinschreiben, damit das Programm die ausgewählte Datei nimmt?

    Danke im Voraus! :denker:

    Ok, Danke!

    lambda steht nur da, da im ganzen Programm noch eine Funktion ausgeführt wird, wenn der Button ok gedrückt worden ist.

    Die ganzen sendCommand und byte-arrays stammen aus einem Musterprogramm von den Hersteller der Führung, diese funktionieren auch, deshalb will ich da eigentlich nicht soviel bzw. garnichts ändern.

    Ja hatte leider noch keine Zeit das ganze Programm zu überarbeiten.. müsste wirklich vieles noch verbesseren..

    Aber leider löst das mein Problem nicht..

    Dennis89 ja stimmt, hatten wir schon letzte Woche

    Ja sobald ich jedoch command = start schreibe, wird die Funktion ausgeführt - also der Führungswagen fährt auf die zugewiesenen Werte, jedoch ist nun der Button "hängen geblieben".

    Sobald ich command = start() aufrufe, funktioniert es sowieso nicht.


    Mein Programm sieht so aus (bringt wahrscheinlich nichts, da man es ohne die Führung nicht ausführen kann):

    Und ich weiß, dass die Struktur nicht schön ist und die Umrechnung der Zahl auch nicht die effizient ist, aber habe ist nur ein kleiner Teil des Programmes.

    Ja bitte, aber die Funktion wird einmal ausgeführt und wenn ich dann den Button nochmal drücke passiert nichts. Ich weiß nicht ob ich überhaupt die after methode benötige, da ja immer nur nach dem Drücken start ausgeführt werden soll.

    Ich verstehe einfach nicht warum dann beim zweiten mal nichts passiert :conf:

    Dachte so funktioniert das mit after oder? :conf:

    Ich denke ich hab diese Methode falsch verstanden, bin ja auch Anfänger :daumendreh2:

    Leider kann ich das ganze Programm nicht zeigen, würde das ganze zu kompliziert machen, da ich ja nur das Problem mit der abfrage habe.

    Hallo, habe ein kleines Problem.

    Ich bekomme bei meinem Programm aus 3 verschiedenen Entries Werte, diese Werte sollen dann in ein Bytearray eingetragen werden. Funktioniert alles soweit.

    Durch den Button (ok) wird die Funktion Start abgefragt. (wird durch command = start() beim Button aufgerufen)

    Jedes mal wenn der Button (ok) gedrückt worden ist, sollen dann die Werte neu eingetragen werden. Jedoch funktioniert das nur einmal, dann passiert nichts mehr..

    Dachte mir mit der after-methode sollte das ja funktionieren oder? :/

    Ok Danke! :danke_ATDE:

    Ja der Mann war nur ein Support-Mitarbeiter also ich denke der kann wenig dafür wie diese Führungen positioniert werden. :/:D

    Die Führung fährt eben nur auf genaue Werte, also wie 290 oder 763 (ohne Komma).

    Gnom

    Wie gesagt ist sehr kompliziert und laut dem Herrn von der Firma ist das so. Die Multiplikation mit 100 hat nur etwas mit der Positionierungsgenauigkeit zu tun und bei laenge_eingabe wird eben ein Wert eingeben ( von 0 bis 1000 mm) und dann soll die Führung auf diese Position fahren. (Also habe ich 1000 Positionen, da sowieso nur genaue Werte verwendetet werden)

    laenge_eingabe ist ein Integer

    und ich habe soeben das Problem vorerst gelöst. (Anhang Programm)

    Vielleicht nicht unbedingt schön, aber ich denke sollte funktionieren.

    Danke euch! Gnom & __blackjack__

    Gnom Nur das Problem ist ja die Eingaben variieren, also könnte einmal 1000 sein und einmal zum Beispiel 200

    Und es muss eben heißen,

    18

    6a

    0

    Wär natürlich leichter wenn es nicht so wäre.. logisch ist das für mich auch nicht.

    Weil wenn die Reihenfolge so wäre:

    1

    86

    a0

    dann wäre dass ja in Dec umgerechnet:

    1

    134

    160 , so wie du schon gesagt hast

    Nur wenn diese Werte dann in das Bytearray eingetragen werden, würde die Führung auf eine völlig andere Position fahren.

    Doch wenn die Reihenfolge so wäre:

    18

    a6

    0

    dann wäre dass ja in Dec umgerechnet:

    24

    106

    0

    Dann würde die Führung auf meine eingegebene Position fahren

    Leider ist es sehr schwer zu erklären, aber ich steuere mit dem Raspberry eine Zahnriemenachse an und bei dem Programm werden Bytearrays geschickt.

    Die letzten vier Bytes sind für die Positionierung da und um die Werte einzutragen muss ich eben es wie folgt machen:

    Ein Mitarbeiter der Firma, die diese Führungen herstellen hat mir es so erklärt:

    sendCommand(bytearray([0, 0, 0, 0, 0, 17, 0, 43, 13, 1, 0, 0, 96, 122, 0, 0, 0, 0, 4, a, b, c, 0]))

    Beispiel: Eingabe: 1000

    1) 1000 wird mit 100 multipliziert, ergibt also 100000

    2) 100000 wird dann in Hex umgerechnet, ergibt 186a0

    3) Das Ergebnis 186a0 wird dann getrennt in:

    18

    6a

    0

    4) Nun werden die einzelnen Hex-Zahlen in Dec umgerechnet:

    18 ist also 24

    6a ist also 106

    0 ist also 0

    5) Nun würde 24 an Stelle c eingetragen werden

    106 an Stelle b

    Und 0 an Stelle a

    (Little Endian)

    Ich hoffe man versteht nun was das Problem ist.

    Also mein Programm sieht jetzt so aus:

    Code
    def start():
        zahl = int(laenge_eingabe.get())* 100
        zahl1 = hex(int(zahl)).lstrip("0x").rstrip("L")
        print(zahl1)

    Ausgabe: 186a0

    und jetzt soll nur noch die zahl1 getrennt werden in a,b,c (a=18, b=6a, c=0)