DoIT Geschrieben November 3, 2020 at 12:47 Geschrieben November 3, 2020 at 12:47 Hallo, ich versuche gerade mehrere IO16 Module mit angeschloßenen Tastern auszuwerten, dazu möchte ich Callbacks verweden. Wenn ich bei den Callbacks bei jedem Modul also die selbe Funktion angebe bekomme ich in der Funktion ja nicht mit von welchem Modul jetzt der Aufruf gekommen ist oder? Mein Workaround wäre jetzt gewesen für jedes Modul eine eigene Fuction zu schreiben welche im Grunde die Callbackfuntion mit der UID nochmals aufruft. So kann ich das Modul identifizieren. Meine Frage geht das auch anders oder habe ich wiedermal etwas übersehen? Grüße Markus Zitieren
rtrbt Geschrieben November 3, 2020 at 13:22 Geschrieben November 3, 2020 at 13:22 Moin, Die Callbacks werden intern den Devices zugeordnet. Du kannst also z.B. folgendes machen: def cb_1(channel, changed, value): print("1") def cb_2(channel, changed, value): print("2") io = BrickletIO16V2("UID1", ipcon) io2 = BrickletIO16V2("UID2", ipcon) io.register_callback(io.CALLBACK_INPUT_VALUE, cb_1) io2.register_callback(io.CALLBACK_INPUT_VALUE, cb_2) Dann wird dir eine 1 ausgegeben, wenn das erste IO-Bricklet das Callback ausgelöst hat, und eine 2 wenn es das zweite war. Du kannst dann noch cleverer sein und dir bei der Registrierung des Callbacks mitgeben, welches Device das ist, indem du einen Lambda-Ausdruck benutzt, z.b. so: def cb(device, channel, changed, value): print("Ich bin {}".format(device)) print(channel, changed, value) io = BrickletIO16V2("UID1", ipcon) io2 = BrickletIO16V2("UID2", ipcon) io.register_callback(io.CALLBACK_INPUT_VALUE, lambda *args: cb("UID1", *args)) io2.register_callback(io.CALLBACK_INPUT_VALUE, lambda *args: cb("UID2", *args)) Das ganze kannst du soweit führen, dass du dir statt der UID gleich das Device-Objekt in das Callback reingibst, falls du direkt mit dem Bricklet etwas machen willst (z.B. wenn Pin 1 sich ändert Pin 2 auch ändern o.Ä.) Zitieren
DoIT Geschrieben November 10, 2020 at 09:08 Autor Geschrieben November 10, 2020 at 09:08 Moin, danke für deine Antwort, komme leider erst jetzt dazu deine Antwort umzusetzen. Ist es ein Problem wenn ich die Registrierung von Callbacks für ein Modul mehrfach ausführe? Wird dann der Callback mehrfach ausgeführt? Danke. Zitieren
rtrbt Geschrieben November 10, 2020 at 12:12 Geschrieben November 10, 2020 at 12:12 Das hängt von den Bindings ab. Bei den Python-Bindings kannst du pro Device und Callback-ID nur ein Callback registrieren. Wenn du die Registrierung mehrfach ausführst, werden die älteren Registrierungen überschrieben. Zitieren
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.