My custom designed GUI

More
8 years 9 months ago #104828 by persei8
Replied by persei8 on topic My custom designed GUI
Well if you don't think it's worth your time and effort, I will certainly never make it work. It is however, valuable to me as a way to learn some python and it's role in gtk panels. I don't see a specific place to post python questions so I hope I can pose it here.

Here is a snippet from the main python module:
self.lc = self.linuxcnc.command()
--- then a whole bunch of stuff ----
def jog_x_plus_press(self, widget, event):
if self.check_machine_state() == 'STATE_ON':
# self.lc.jog(self.linuxcnc.JOG_CONTINUOUS, 0, 0, float(self.x_jog)) <-- doesn't work
axis_num = 0
self.lc.jog(self.linuxcnc.JOG_CONTINUOUS, 0, axis_num, float('{}{}'.format('+', self.x_jog)))

I consistently get this from the terminal:

<type 'tuple'>
(11, 'JOG_CONT command.com !teleop bad joint_num cmd=47\n')
JOG_CONT command.com !teleop bad joint_num cmd=47

I modified the jog command statement to reflect the way it is done in hazzy, but I must be doing something wrong, but can't figure what. Any ideas?

Please Log in to join the conversation.

More
8 years 9 months ago #104832 by KCJ
Replied by KCJ on topic My custom designed GUI
My very first encounter with python (and programing in general) was when I was trying to get CraftsmanCNC working. I had just learned about LinuxCNC, and, being a Mach fan (sigh), liked the familiar look of the UI. I had no previous experience with linux or coding so it was a steep learning curve, but boy was it worth it. So, by all means, study and hack on CraftsmanCNC, you will learn a lot!

First off, CraftsmamCNC will not work with 2.8~pre without significant modification. Hazzy on the other hand only works with 2.8~pre, so much of the code will not be directly comparable between the two. It looks like you are using 2.8~pre because `teleop` is mentioned in the error log.

Here is a comparison of the jog commands in 2.7 and 2.8:

2.7
Code:
cmd.jog(linuxcnc.JOG_CONTINUOUS, axis-num, jog-velocity)

2.8~pre
Code:
cmd.jog(linuxcnc.JOG_CONTINUOUS, joint-jog, axis-or-joint-number, jog-velocity)
were `joint-jog` is true for joint jog, or false for axis jog.

The error complains about a `bad joint_num cmd=47`, so what I think is happening it that you are somehow passing the jog-velocity (47) as the joint-number. Check that the format of the jog commands is correct.

Hope that helps,
Kurt

Please Log in to join the conversation.

More
8 years 6 months ago #109692 by tripwire
Was there ever a solution to this? I'm running 2.8~pre and am getting the same error with the following:
Code:
self.c.jog(self.cnc.JOG_CONTINUOUS,0, 0, 60.0)

Please Log in to join the conversation.

More
8 years 6 months ago #109721 by KCJ
If you are running 2.8~pre that is correct and should not give any errors. Are you certain you are running 2.8? As I mentioned previously, CraftsmamCNC would need a significant amount of modification to make it work with 2.8.

What I like to do to troubleshoot in this type of situation is run the commands in the python interpreter to isolate any problems.
LinuxCNC has to be running, but it does not matter what GUI.

Open a terminal and set up the environment
If you have LCNC 2.8 installed system wide than you can open a terminal anywhere.
If you have 2.8~pre installed as a RIP (Run In Place), then open a terminal in the RIP dir and set up the environment by running
Code:
. ./scripts/rip-environment

Run the commands in question
Code:
kurt@T510:~/dev/cnc/linuxcnc$ python Python 2.7.13 (default, Nov 24 2017, 17:33:09) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import linuxcnc >>> c = linuxcnc.command() >>> c.jog(linuxcnc.JOG_CONTINUOUS, 0, 0, 60.0) >>>

If you watch the gremlin back-plot in axis you will see that the tool moves and there are no error messages.

Cheers,
Kurt

Please Log in to join the conversation.

More
8 years 6 months ago #109731 by tripwire
Thanks Kurt! Another user, dgarrett, provided the following solution:

>>
The message (`bad joint_num cmd=47) is poor but it means you have attempted to jog an
axis coordinate but are not in the *required* teleop mode.

In the master branch (2.8~pre) axis coordinates and joint numbers
must be handled properly for the current teleop mode.

In many situations, joint jogging is never required as one
homes the machine and all subsequent axis coordinate jogs
can be done in teleop mode.

The python interface provides:
teleop_enable()
to set/unset teleop mode.
Ref: linuxcnc.org/docs/master/html/config/python-interface.html

Commit to improve message:
github.com/LinuxCNC/linuxcnc/commit/8259...dc46e30136c6979c8e25

Note:
Some guis (notably axis) hide the distinctions of joints and
axis coordinates when using identity kinematics. When using
trivkins (identity kinematics), setting kinstype=Both can help
to clarify joint/axis coodinate usage.

For a demonstration using identity kinematics with multiple
joints assigned to a single axis coordinate (XYZY), run and
experiment with the simulation config:
Sample Configurations/sim/axis/gantry
<<
btw, I'm not the one running the CraftsmanCNC. I had just searched for "bad joint_num=47" and came upon this thread.

Thanks again for your reply! I'm sure I'll make use of your debugging suggestion.

Please Log in to join the conversation.

More
8 years 6 months ago #109738 by Grotius
Replied by Grotius on topic My custom designed GUI
Hi,

For 2.8 i have tested config : XXYZ today.
in python this works for double motors on X axis, Y axis is included to see difference in program code.
Joint 1 and 2 are x motors. they are moving together with one button command in the python code, this is tested in real life.
It was very confusing to make this correct, because documentation is very limited for custom gui design.
If you want to move joint 1, x motor 1, the code would be a little different :

x motor 1 : self.c.jog(linuxcnc.JOG_CONTINUOUS, 1, 0, (self.widgets.jog_speed.get_value()/60))

If you want to move joint 2, x motor 2, the code would be a little different :

x motor 2 : self.c.jog(linuxcnc.JOG_CONTINUOUS, 1, 1, (self.widgets.jog_speed.get_value()/60))

(the 1. is moving in joint's) 0, 1, 2 ....
(the 0 is for moving in x or y or z, cartasian way)
Code:
# ======================================================================= def on_x_plus_pressed(self, widget, data=None): self.c.mode(self.cnc.MODE_MANUAL) self.c.wait_complete() self.c.jog(linuxcnc.JOG_CONTINUOUS, 0, 0, (self.widgets.jog_speed.get_value()/60)) print " x plus " def on_x_plus_released(self, widget, data=None): print " x stop " self.c.jog(linuxcnc.JOG_STOP, 0, 0) def on_x_min_pressed(self, widget, data=None): self.c.mode(self.cnc.MODE_MANUAL) self.c.wait_complete() self.c.jog(linuxcnc.JOG_CONTINUOUS, 0, 0, -(self.widgets.jog_speed.get_value()/60)) print " x min " def on_x_min_released(self, widget, data=None): self.c.jog(linuxcnc.JOG_STOP, 0, 0) print " x stop " # ======================================================================= def on_y_plus_pressed(self, widget, data=None): self.c.mode(self.cnc.MODE_MANUAL) self.c.wait_complete() self.c.jog(linuxcnc.JOG_CONTINUOUS, 0, 1, (self.widgets.jog_speed.get_value()/60)) print " y plus " def on_y_plus_released(self, widget, data=None): self.c.jog(linuxcnc.JOG_STOP, 0, 1) print " y stop " def on_y_min_pressed(self, widget, data=None): self.c.mode(self.cnc.MODE_MANUAL) self.c.wait_complete() self.c.jog(linuxcnc.JOG_CONTINUOUS, 0, 1, -(self.widgets.jog_speed.get_value()/60)) print " y min " def on_y_min_released(self, widget, data=None): self.c.jog(linuxcnc.JOG_STOP, 0, 1) print " y stop " # =======================================================================

Please Log in to join the conversation.

More
8 years 6 months ago #109740 by tripwire
Replied by tripwire on topic My custom designed GUI
Thanks so much for your work on this, Grotius! I'll check it out and report back...

Please Log in to join the conversation.

More
8 years 6 months ago #109741 by KCJ
Replied by KCJ on topic My custom designed GUI
tripwire: Thanks for posting Dewey's, as always, excellent explanation! It had not even crossed my mind that the error was caused by not being in teleoperating mode. That explains why I was having trouble duplicating it, as the first thing I do when I start LCNC is home and switch to coord or teleop mode. I should have mentioned that in my previous post, but I do it so automatically that I don't even think about it!

Grotius: Thank you for taking the time to prepare and post such a complete code snip, it is very helpful!

Cheers,
Kurt

Please Log in to join the conversation.

More
8 years 6 months ago #109757 by Grotius
Replied by Grotius on topic My custom designed GUI
Hi,

Okey i forgot one thing. In the past i had problem's with multiple homing commands.
Now for homing all axis with one button this works also multiple homing commands good :
Code:
self.c.mode(self.cnc.MODE_MANUAL) self.c.wait_complete() # 1:teleop, 0: joint self.c.teleop_enable(0) self.c.wait_complete() self.c.home(0) self.c.wait_complete() self.c.home(2) self.c.wait_complete() self.c.home(3) self.c.wait_complete() self.c.home(4) self.c.wait_complete() print " home all "

Good luck !

A ini file example for double motors on x axis :
Code:
[TRAJ] AXES = 5 COORDINATES = X X Y Z A LINEAR_UNITS = mm ANGULAR_UNITS = degree DEFAULT_LINEAR_VELOCITY = 2.50 MAX_LINEAR_VELOCITY = 25.00 [EMCIO] EMCIO = io CYCLE_TIME = 0.100 TOOL_TABLE = tool.tbl [KINS] KINEMATICS = trivkins coordinates=XXYZA #kinstype=BOTH JOINTS = 5 ####################################################### [AXIS_X] MIN_LIMIT = -10.0 MAX_LIMIT = 6025.0 MAX_VELOCITY = 125.0 MAX_ACCELERATION = 125.0 ## Calculation ## # drive : 10000 steps / rev # pitch : 37.69 mm / rev # calcutation : 10000 / 37.69 = 265.3 # scale = 265.3 [JOINT_0] TYPE = LINEAR HOME = 0.0 MAX_VELOCITY = 125 MAX_ACCELERATION = 125 STEPGEN_MAXACCEL = 750 SCALE = 265.3 FERROR = 1 MIN_FERROR = .25 MIN_LIMIT = -10 MAX_LIMIT = 6025 HOME_LATCH_VEL = -1 HOME_SEARCH_VEL = -20 HOME_FINAL_VEL = -1 HOME_IGNORE_LIMITS = YES HOME_OFFSET = -2 HOME_SEQUENCE = -2 [JOINT_1] TYPE = LINEAR HOME = 0.0 MAX_VELOCITY = 125 MAX_ACCELERATION = 125 STEPGEN_MAXACCEL = 750 SCALE = 265.3 FERROR = 1 MIN_FERROR = .25 MIN_LIMIT = -10.0 MAX_LIMIT = 6025 HOME_LATCH_VEL = -1 HOME_SEARCH_VEL = -20 HOME_FINAL_VEL = -1 HOME_IGNORE_LIMITS = YES HOME_OFFSET = -2 HOME_SEQUENCE = -2 #######################################################

A hal file example for double x motors and also the limit switches.
Code:
net both-home-x1 <= parport.0.pin-10-in-not net both-home-x2 <= parport.0.pin-15-in-not #net spindle-cw => parport.0.pin-17-out # X-AXIS ####################################################### setp stepgen.0.position-scale [JOINT_0]SCALE setp stepgen.0.steplen 1 setp stepgen.0.stepspace 0 setp stepgen.0.dirhold 35000 setp stepgen.0.dirsetup 35000 setp stepgen.0.maxaccel [JOINT_0]STEPGEN_MAXACCEL net x1pos-cmd joint.0.motor-pos-cmd => stepgen.0.position-cmd net x1pos-fb stepgen.0.position-fb => joint.0.motor-pos-fb net x1step <= stepgen.0.step net x1dir <= stepgen.0.dir net x1enable joint.0.amp-enable-out => stepgen.0.enable net both-home-x1 => joint.0.home-sw-in net both-home-x1 => joint.0.neg-lim-sw-in net both-home-x1 => joint.0.pos-lim-sw-in setp stepgen.1.position-scale [JOINT_1]SCALE setp stepgen.1.steplen 1 setp stepgen.1.stepspace 0 setp stepgen.1.dirhold 35000 setp stepgen.1.dirsetup 35000 setp stepgen.1.maxaccel [JOINT_1]STEPGEN_MAXACCEL net x2pos-cmd joint.1.motor-pos-cmd => stepgen.1.position-cmd net x2pos-fb stepgen.1.position-fb => joint.1.motor-pos-fb net x2step <= stepgen.1.step net x2dir <= stepgen.1.dir net x2enable joint.1.amp-enable-out => stepgen.1.enable net both-home-x2 => joint.1.home-sw-in net both-home-x2 => joint.1.neg-lim-sw-in net both-home-x2 => joint.1.pos-lim-sw-in

Please Log in to join the conversation.

More
8 years 6 months ago #109758 by KCJ
Replied by KCJ on topic My custom designed GUI
Grotius, if the home sequences are specified in the INI then self.c.home(-1) should home all in the home sequence specified. It is not advisable to hard code the home sequence.

Cheers,
Kurt

Please Log in to join the conversation.

Time to create page: 1.382 seconds
Powered by Kunena Forum