Hi Kurt, The idea to use a GLib timer is nice, since it allows the main tread to do work between polls, you could also have used a second python thread with sleeps. Yet, in my case, 50ms is a lot. I'd need more like 100us, which would hog the main python thread. I really need a genuine callback that origins from servo_thread. I think I could link an hal component with Python.h and do it, but using that could, in turn, hog servo_thread.
I will keep thinking about it. On Fri, May 18, 2018 at 10:30 AM, Kurt Jacobson <[email protected]> wrote: > Maxime, I don't know what you needed the callback for, but since you are > using the python interface I assume you just want to monitor the LCNC > status. > As part of hazzy I wrote a wrapper for the python interface that permits > registering on-change callbacks for any of the LCNC stat attributes. > > For example, to have a function called when the > linuxcnc.stat.tool_in_spindle attribute changes you would do something like > this: > > def update_tool(status, tool_num): > print tool_num > status.on_changed('stat.tool_in_spindle', update_tool) > > > All the stat attributes are checked once every 50ms, which is plenty fast > for most applications. > You can find some documentation here: > http://hazzy.kcjengr.com/utilities/status_monitor/ > Code is here: > https://github.com/KurtJacobson/hazzy/blob/master/hazzy/utilities/status. > py > > Ideally, it seems like it would be best to have something like this as part > of the python interface ... > > Cheers, > Kurt > > On Thu, May 17, 2018 at 5:35 PM, Sebastian Kuzminsky <[email protected]> > wrote: > > > On 05/17/2018 03:31 PM, Maxime Lemonnier wrote: > > > >> Just want to make sure I did not miss something in the doc. Suppose I > >> wan't > >> to register a python callback from the linuxcnc python module, e.g. once > >> per servo thread, it is not possible, right? > >> > >> > >> def my_function(): > >> print("servo thread tick!") > >> > >> linuxcnc.something.set_callback(my_function); > >> > > > > You're right, that's not possible. Python modules do not run in realtime > > context, so they don't have a notion of the servo thread or the base > thread. > > > > If you write a realtime component (in C, or using the "halcompile" front > > end) its realtime function will get run once per whatever thread you > "addf" > > it to, effectively becoming the callback you describe above. > > > > > > -- > > Sebastian Kuzminsky > > > > > > ------------------------------------------------------------ > > ------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > _______________________________________________ > > Emc-users mailing list > > [email protected] > > https://lists.sourceforge.net/lists/listinfo/emc-users > > > ------------------------------------------------------------ > ------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > _______________________________________________ > Emc-users mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/emc-users > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Emc-users mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/emc-users
