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