jogaxisget.comp:
// sudo halcompile --install jogaxisget.comp
component jogaxisget "determines which axis jogging";

pin in bit Xin0 "axis.0.kb-jog-active";
pin in bit Xin1;

pin in bit Yin0 "axis.1.kb-jog-active";
pin in bit Yin1;

pin in bit Zin0 "axis.2.kb-jog-active";
pin in bit Zin1;

pin out bit Xtrigger  ;
pin out bit Ytrigger  ;
pin out bit Ztrigger  ;

pin out bit activeX     ;
pin out bit activeY     ;
pin out bit activeZ     ;


pin in bit Xverify =FALSE "axisui.Xisactive";
pin in bit Yverify =FALSE "axisui.Yisactive";
pin in bit Zverify =FALSE "axisui.Zisactive";


variable hal_bit_t  prev_Xtrigger = FALSE;
variable hal_bit_t  prev_Ytrigger = FALSE;
variable hal_bit_t  prev_Ztrigger = FALSE;

license "GPL";
function _;
;;
FUNCTION(_) {

    if (( Xin0 && !Xin1 ) || ( Xin1 && !Xin0 )) {/* XOR2 axisX */
    Xtrigger = 1;
    } else {
    Xtrigger = 0;
    }

    if (( Yin0 && !Yin1 ) || ( Yin1 && !Yin0 )) {/* XOR2 axisY */
    Ytrigger = 1;
    } else {
    Ytrigger = 0;
    }


    if (( Zin0 && !Zin1 ) || ( Zin1 && !Zin0 )) {/* XOR2 axisZ */
    Ztrigger = 1;
    } else {
    Ztrigger = 0;
    }


    if(!!Xtrigger != !!prev_Xtrigger) /* Xtrigger has changed */
    {
        activeX = 1;
        if(!!Xverify) {prev_Xtrigger = Xtrigger; activeX = 0;}
    }


    if(!!Ytrigger != !!prev_Ytrigger) /* Ytrigger has changed */
    {
        activeY = 1;
        if(!!Yverify) {prev_Ytrigger = Ytrigger; activeY = 0;}
    }


    if(!!Ztrigger != !!prev_Ztrigger) /* Ztrigger has changed */
    {
        activeZ = 1;
        if(!!Zverify) {prev_Ztrigger = Ztrigger; activeZ = 0;}
    }

}
##################################################




.axisrc


if hal_present == 1 :
    ucomp = hal.component("axisui.user")

    ucomp.newpin("activeX",hal.HAL_BIT,hal.HAL_IN)
    ucomp.newpin("activeY",hal.HAL_BIT,hal.HAL_IN)
    ucomp.newpin("activeZ",hal.HAL_BIT,hal.HAL_IN)

    ucomp.newpin("Xisactive",hal.HAL_BIT,hal.HAL_IN)
    ucomp.newpin("Yisactive",hal.HAL_BIT,hal.HAL_IN)
    ucomp.newpin("Zisactive",hal.HAL_BIT,hal.HAL_IN)

    ucomp.ready()

def fun(pin,act):
    global flag
    if pin:
        if flag :
            flag = 0
            try:
                act()
            except:
                print "except flag = ", flag
    else:
        flag = 1



def activate_axisX():
    print "activate_axisX"
    activate_axis(0)


def activate_axisY():
    print "activate_axisY"
    activate_axis(1)


def activate_axisZ():
    print "activate_axisZ"
    activate_axis(2)


def user_live_update():

    if "xyzabcuvw".index(vars.current_axis.get())!=0:
        fun(ucomp["activeX"],activate_axisX)
    if "xyzabcuvw".index(vars.current_axis.get())!=1:
        fun(ucomp["activeY"],activate_axisY)
    if "xyzabcuvw".index(vars.current_axis.get())!=2:
        fun(ucomp["activeZ"],activate_axisZ)


    if "xyzabcuvw".index(vars.current_axis.get())==0:
        ucomp["Xisactive"] = 1
        ucomp["Yisactive"] = 0
        ucomp["Zisactive"] = 0
    if "xyzabcuvw".index(vars.current_axis.get())==1:
        ucomp["Xisactive"] = 0
        ucomp["Yisactive"] = 1
        ucomp["Zisactive"] = 0
    if "xyzabcuvw".index(vars.current_axis.get())==2:
        ucomp["Xisactive"] = 0
        ucomp["Yisactive"] = 0
        ucomp["Zisactive"] = 1


#########################################
postgui.hal


loadrt jogaxisget
addf jogaxisget.0       servo-thread

net    activeX     jogaxisget.0.activeX   axisui.user.activeX
net    activeY     jogaxisget.0.activeY   axisui.user.activeY
net    activeZ     jogaxisget.0.activeZ   axisui.user.activeZ

net    axis:0:kb   jogaxisget.0.Xin0   axis.0.kb-jog-active
net    axis:1:kb   jogaxisget.0.Yin0   axis.1.kb-jog-active
net    axis:2:kb   jogaxisget.0.Zin0   axis.2.kb-jog-active

net    Xisactive     jogaxisget.0.Xverify  axisui.user.Xisactive
net    Yisactive     jogaxisget.0.Yverify  axisui.user.Yisactive
net    Zisactive     jogaxisget.0.Zverify  axisui.user.Zisactive



############################
axis

flag = 0



17.07.2021 02:59, John Dammeyer пишет:
Yes.  Keyboard and click on radio button both change so the Tool
buttons refer to the correct axis.  But Pendants don't seem to have
that feature. John
If a USB (or in this case a Ps/2) keyboard can do it, then somewhere
in the code for that, there must be a way to get any other device
connected by USB to make the same GUI updates.

Or am I just being naive?

Martin

Mouse and keyboard inputs are handled very differently from those on a
pendant.  The mouse and keyboard are part of the user interface and
get to Linuxcnc through Axis or what ever UI is being used.  Pendant
inputs get to Linuxcnc directly through Hal.  This has the advantage
of being real-time and independent of userspace hangups, but has the
disadvantage of not being easily tied into the UI.

Todd
I had suspected as much, but in this case its (this jogging from a mesa
encoder input dial) is all handled by hal, which IIRC sends it to
motion, never getting anywhere near axis. So it would be totally
dependent on motion telling axis, I think.
Actually not quite since you'll notice the DROs on the screen change so stuff 
does go back.   Once the signal from the keyboard or display radio button sets 
the axis there is no need to feed back to the AXIS radio button which is 
probably why it was never exposed for setting externally.  So yes, the MPG does 
get near AXIS but not the part we want.

BTW, the example I showed written in Object Pascal is very simplistic and is 
fixed at 3 axis.  The AXIS software reads the INI file values to determine what 
to display.  But even it's kind of broken.

The [TRAJ].COORDINATES.value set to XYZA assigns the X to joint0, Y to joint1 
and so on and you see the 'A' radio button on the screen.  Set it to only XYZ 
and you only see 3 radio buttons.

But swap those around like AXYZ and now the AXIS radio button marked X spins 
the Y axis.  The Y button  spins the Z, the Z button spins the A axis and the A 
button spins the X.  And yet, the arrow keys still spin the correct axis.

The [DISPLAY].GEOMETRY.value set to xyza doesn't seem to affect the radio 
buttons.  I think it impacts the trajectory display but haven't looked further 
into that.

I think AXIS python code counts the number of letters and uses that to put
XYZ
A
Radio buttons on the screen but it gets confused with the mapping to the +/- 
buttons while the keyboard doesn't seem to care.

John






_______________________________________________
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users



_______________________________________________
Emc-users mailing list
Emc-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/emc-users

Reply via email to