Sahib Geschrieben December 27, 2019 at 11:30 Geschrieben December 27, 2019 at 11:30 Hallo, bin neu hier. Ich habe am Industrieal Counter Bricklet einen Drehfeldgeber angeschlossen. Das ganze funktioniert auch sehr gut. Ist es möglich das Callback so zu konfigurieren, dass nur bei Änderung eines Wertes zB. "Counter" die Callback-Funktion ausgeführt wird? Habe viel probiert, es gelingt mir nicht. Vieleicht habe ich ein Verständnisproblem bzw. mache ich was falsch. mfg Sahip Zitieren
borg Geschrieben December 30, 2019 at 14:11 Geschrieben December 30, 2019 at 14:11 Eigentlich sollte das per set_all_counter_callback_configuration(100, True) funktionieren. Damit bekommst du den Callback alle 100ms, aber nur dann wenn sich der Wert auch geändert hat. Zitieren
Sahib Geschrieben December 30, 2019 at 17:59 Autor Geschrieben December 30, 2019 at 17:59 Hallo borg, hier mein Testprogramm import time from tinkerforge.ip_connection import IPConnection from tinkerforge.bricklet_industrial_counter import BrickletIndustrialCounter def my_callback(param): print (param) if __name__ == "__main__": ipcon = IPConnection() ic = BrickletIndustrialCounter("CoUNT", ipcon) ipcon.connect("192.168.250.80", 4223) ic.register_callback(ic.CALLBACK_ALL_COUNTER, my_callback) ic.set_all_counter_callback_configuration(2000,True) time.sleep(100) ipcon.disconnect() Es wird alle 2s diese Zeile (Beispiel) ausgegeben obwohl sich der Wert nicht geändert hat (717, 0, 9765, 1253) Auch wenn sich der wert ändert, wird dieser erst nach Ablauf der Periode (2s) ausgeben. Kann es sein, dass hier evt. ein Bug vorliegt? Zitieren
borg Geschrieben January 3, 2020 at 16:59 Geschrieben January 3, 2020 at 16:59 In der Tat. Ich schaue mir gerade den Code an: if((!counter.cb_counter_value_has_to_change) || (last_counter[0] != new_counter[0]) || (last_counter[1] != new_counter[1]) || (last_counter[2] != new_counter[2]) || (last_counter[3] != new_counter[3])) { last_time = system_timer_get_ms(); tfp_make_default_header(&cb.header, bootloader_get_uid(), sizeof(AllCounter_Callback), FID_CALLBACK_ALL_COUNTER); for(uint8_t channel = 0; channel < COUNTER_NUM; channel++) { cb.counter[channel] = new_counter[channel]; } } Der Check ist zwar richtig, aber last_counter wird nie gesetzt... Ich fixe das kurzfristig. Zitieren
borg Geschrieben January 3, 2020 at 17:20 Geschrieben January 3, 2020 at 17:20 So, sollte jetzt in der frisch veröffentlichten Firmware 2.0.3 gefixt sein:https://github.com/Tinkerforge/industrial-counter-bricklet/commit/ef2a1251b43653d8aebaba87803ac32e004bd72f Vielen Dank für denk Hinweis! Zitieren
Sahib Geschrieben January 3, 2020 at 17:24 Autor Geschrieben January 3, 2020 at 17:24 Hallo borg, das ging aber schnell. Habe das Update gemacht, jetzt funktioniert es. Vielen Dank 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.