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