nkp216,
Could you perhaps write up a short description of what the jogaxisget.com all 
means?   Does this already exist?  Did you write it?  What does it do?  Does it 
work with external jog buttons?

Thanks
John


> -----Original Message-----
> From: nkp [mailto:nkp...@gmail.com]
> Sent: July-16-21 10:19 PM
> To: emc-users@lists.sourceforge.net
> Subject: Re: [Emc-users] AXIS UI Jog Button
> 
> 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



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

Reply via email to