On Saturday 17 July 2021 03:04:30 John Dammeyer wrote:

> 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";
> >
Good question John.  I have this incorporated in my postgui.hal
where it is loadrt'd and addf'd to jog-thread, see below

> > 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
> >
but all this below is commented out, I think because .axisrc is not being 
used, and an strace to locate where it might be looking for it, comes up 
without a hit, so these pins are never created. So, how do I go about 
bringing .axisrc into the picture?

> > 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

And what do these two lines do?

> > 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


Cheers, Gene Heskett
-- 
"There are four boxes to be used in defense of liberty:
 soap, ballot, jury, and ammo. Please use in that order."
-Ed Howdershelt (Author)
If we desire respect for the law, we must first make the law respectable.
 - Louis D. Brandeis
Genes Web page <http://geneslinuxbox.net:6309/gene>


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

Reply via email to