Sahib Posted December 27, 2019 at 11:30 AM Share 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 Link to comment Share on other sites More sharing options...
borg Posted December 30, 2019 at 02:11 PM Share 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 Link to comment Share on other sites More sharing options...
Sahib Posted December 30, 2019 at 05:59 PM Author Share 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 Link to comment Share on other sites More sharing options...
borg Posted January 3, 2020 at 04:59 PM Share 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 Link to comment Share on other sites More sharing options...
borg Posted January 3, 2020 at 05:20 PM Share 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 Link to comment Share on other sites More sharing options...
Sahib Posted January 3, 2020 at 05:24 PM Author Share Posted January 3, 2020 at 05:24 PM Hallo borg, das ging aber schnell. Habe das Update gemacht, jetzt funktioniert es. Vielen Dank Quote Link to comment Share on other sites More sharing options...
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.