Jump to content

Recommended Posts

Geschrieben

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

Geschrieben

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.Ä.)

Geschrieben

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.

 

Geschrieben

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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...