Sahib Posted December 27, 2019 at 11:30 AM Posted December 27, 2019 at 11:30 AM 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 Quote
borg Posted December 30, 2019 at 02:11 PM Posted December 30, 2019 at 02:11 PM 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. Quote
Sahib Posted December 30, 2019 at 05:59 PM Author Posted December 30, 2019 at 05:59 PM 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? Quote
borg Posted January 3, 2020 at 04:59 PM Posted January 3, 2020 at 04:59 PM 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. Quote
borg Posted January 3, 2020 at 05:20 PM Posted January 3, 2020 at 05:20 PM 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! Quote
Sahib Posted January 3, 2020 at 05:24 PM Author Posted January 3, 2020 at 05:24 PM Hallo borg, das ging aber schnell. Habe das Update gemacht, jetzt funktioniert es. Vielen Dank Quote
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.