various linking signal problems

More
7 years 3 months ago #138425 by dangu85
So, I actually started to write a gui to implement in axis, and obviously I got a few things which don't work...
1. The max velocity slider isn't working at all. I linked the halui.max-velocity.scale signal in postgui.hal but it does not change.
2. I'd like to change the text of the Status Label with something that reflects the status of the machine(Emergency on, Ready, Running, Paused or so), and don't know what to do.
3. The Spindle Toggle Button works only to turn on the spindle and not to turn it off. I've linked the spindle-run halui.spindle.start to the button, but don't know how to link the spindle-run halui.spindle.stop to its off-state. For the other 2 outputs I've cheated using the toggle function and a normal button, but i'd like to adjust them to use a proper toggle button.
4. Damned combo box! How can I pass that unsigned int to an oword subroutine???? I've tryed to call the function with that Set button, but I don't know if I'm passing the parameter correctly or is something wrong in the subroutine.. Much confusion here
5. To do.. I'm planning to remap M6 when I'm done with this, but by then I should have lerned a bit more
6. Is it possible to do points from 1 to 4 avoiding python???

Thanks

config here

Attachment not found

Please Log in to join the conversation.

More
7 years 3 months ago #138431 by cmorley
1 halui.max-velocity needs the scale and direct-value switch set properly
2 requires a python handler file and python code
3 would require either python code or HAL plumbing to convert the single Gladevcp HAL pin to two HAL pins (probably the toggle component)
4 I haven't worked with gladevcp's combo box or oword subroutines much - I know you must add a list store and set that up - this might help:


Chris

Please Log in to join the conversation.

More
7 years 3 months ago #138798 by dangu85
Is there any example to solve 2 and 3?? I can't find anything that doesn't add more confusion on how to solve it...
But at last I managed to implement an M6 remap :D

Please Log in to join the conversation.

More
7 years 3 months ago #138812 by cmorley
What version of linuxcnc are you using?

Chris M

Please Log in to join the conversation.

More
7 years 3 months ago #138817 by dangu85
current release 2.7.14

Please Log in to join the conversation.

More
7 years 3 months ago #138823 by cmorley
Here is sample code to do something like what u want.
2.7 is a bit limited with GSTAT but still quite useful.
This handler file assumes that there are three labels called:
state_label
e_state_label
interp_state_label
and a regular push button with a 'pressed' signal that calls 'on_button1_pressed' (set up in GLADE file)
It will create two HAL pins spindle-on-trigger and spindle-off-trigger to be connected to HALUI
You would have to adjust the gladevcp command to load the handler file too.
Code:
import hal import glib import time from hal_glib import GStat, GPin GSTAT = GStat() class HandlerClass: def __init__(self, halcomp,builder,useropts): self.halcomp = halcomp self.builder = builder GSTAT.connect("state-estop",lambda w: self.update_estate_label('ESTOP')) GSTAT.connect("state-estop-reset",lambda w: self.update_estate_label('RESET')) GSTAT.connect("state-on",lambda w: self.update_state_label('MACHIBE ON')) GSTAT.connect("state-off",lambda w: self.update_state_label('MACHINE OFF')) GSTAT.connect("interp-paused",lambda w: self.update_interp_label('Paused')) GSTAT.connect("interp-run",lambda w: self.update_interp_label('Run')) GSTAT.connect("interp-idle",lambda w: self.update_interp_label('Idle')) self.on_trigger = GPin(halcomp.newpin('spindle-on-trigger', hal.HAL_BIT, hal.HAL_OUT)) self.off_trigger = GPin(halcomp.newpin('spindle-off-trigger', hal.HAL_BIT, hal.HAL_OUT)) def update_state_label(self,text): self.builder.get_object('state_label').set_label("State: %s" % (text)) def update_estate_label(self,text): self.builder.get_object('e_state_label').set_label("E State: %s" % (text)) def update_interp_label(self,text): self.builder.get_object('interp_state_label').set_label("Interpeter State: %s" % (text)) def on_button1_pressed(self, obj): state = True # is spindle already enabled? if GSTAT.stat.spindle_enabled: state = False # toggle HAL pins to command HALUI self.on_trigger.set(state) self.off_trigger.set(not state) def get_handlers(halcomp,builder,useropts): return [HandlerClass(halcomp,builder,useropts)]

Chris M

Please Log in to join the conversation.

More
7 years 3 months ago #138876 by dangu85
ok. I'm starting to get it little by little.
Labels are working. Is there a list of that GSTATs available to monitor? Are these returning always a boolean value to use?

The button is working too, but I've noticed it's a bit glitchy. If the spindle is set to run from axis, if I try to stop it with the glade button it wont. The same if i start it with the glade one and than stop it from axis, when i try to start it again from glade button it wont. I think it keeps the old state because from axis it does not refresh the pin..

Time for experiments. Let u know the news

Thanks for help

Please Log in to join the conversation.

More
7 years 3 months ago #138886 by dangu85
Oh! For the combobox I've done the same table as the exemple with 2 colums. One with the description associated with a float parameter.
I think the problem is sending the variable to the called oword with the Set button.
I don't feel I'm doing the right way...Actually the mdi command is like so:
O<testtenda> call [${gfloat1-f}]

the oword subroutine is this
O <testtenda> sub

o101 if [#1 EQ 54]
G54
o101 elseif [#1 EQ 55]
G55
o101 elseif [#1 EQ 56]
G56
o101 elseif [#1 EQ 57]
G57
o101 elseif [#1 EQ 58]
G58
o101 elseif [#1 EQ 59]
G59
o101 elseif [#1 EQ 60]
G59.1
o101 elseif [#1 EQ 61]
G59.2
o101 elseif [#1 EQ 62]
G59.3
o101 endif
O <testtenda> endsub
M2

Please Log in to join the conversation.

More
7 years 3 months ago #138920 by cmorley

dangu85 wrote: ok. I'm starting to get it little by little.
Labels are working. Is there a list of that GSTATs available to monitor? Are these returning always a boolean value to use?

The button is working too, but I've noticed it's a bit glitchy. If the spindle is set to run from axis, if I try to stop it with the glade button it wont. The same if i start it with the glade one and than stop it from axis, when i try to start it again from glade button it wont. I think it keeps the old state because from axis it does not refresh the pin..

Time for experiments. Let u know the news

Thanks for help


from source, you can glean the return type from the gobject.TYPE:
Code:
'state-estop': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'state-estop-reset': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'state-on': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'state-off': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'homed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)), 'all-homed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'not-all-homed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)), 'mode-manual': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'mode-auto': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'mode-mdi': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'interp-run': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'interp-idle': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'interp-paused': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'interp-reading': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'interp-waiting': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'file-loaded': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_STRING,)), 'reload-display': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, ()), 'line-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_INT,)), 'tool-in-spindle-changed': (gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_INT,)),

The 2.8/master version has way more and docs too.

glichy button is because the HAL pin is only toggled the next time the GUI buttons are pressed. If something else toggles linuxcnc state the pins are not reset properly. You could probably fix that with timers between setting the pin true to set it false after a half second, but at that point you may as well add some more python and control the spindle in python.

adding:

import linuxcnc
CMD = linuxcnc.command()

CMD.spindle(linuxcnc.SPINDLE_FORWARD)
CMD.spindle(linuxcnc.SPINDLE_REVERSE)
CMD.spindle(linuxcnc.SPINDLE_OFF)

Chris M

Please Log in to join the conversation.

More
7 years 3 months ago #138962 by dangu85
oh yes! It works for the spindle. I've dove the same for mist and flood controls but it sets them only ON.

def flood_pressed(self, obj):
state = True
CMD.flood(linuxcnc.FLOOD_ON)
# is flood already enabled?
if GSTAT.stat.flood_enabled:
state = False
CMD.flood(linuxcnc.FLOOD_OFF)
# toggle HAL pins to command HALUI
self.on_trigger3.set(state)
self.off_trigger3.set(not state)

I think it's not correct to check for flood_enabled ...mmmm...

Please Log in to join the conversation.

Time to create page: 0.096 seconds
Powered by Kunena Forum