Jump to content

Mehrere Callbacks auf eine Function UID abfragen? -- Python


Recommended Posts

Posted

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

Posted

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

Posted

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.

 

Posted

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...