RETROFIT Oxy Acetylene 3 HEAD CNC

More
30 Jun 2020 10:06 #173181 by FooBar
RETROFIT Oxy Acetylene 3 HEAD CNC

HELLO

I want to retrofit Oxy Acetylene 3 HEAD CNC.

Wich has:

X-axis with 2 parallel moving motor.

y-1 axis
y-2 axis
y-3 axis

z-1 axis
z-2 axis
z-3 axis


Parts to use:


CONTROLLER:
MESA 6I24-16 FPGA based PCI Anything I/O card
eusurplus.com/index.php?route=product/pr..._62_70&product_id=78

MESA THCAD-300 High isolation A-D accessory
eusurplus.com/index.php?route=product/pr..._61_67&product_id=53


MOTORS:

To use step and direct motors like this or something similar.
www.omc-stepperonline.com/Integrated-Ste...op.html?search=servo


50 pin daughter cards
eusurplus.com/index.php?route=product/category&path=59_61_73


Basic machine operation.

At the moment most of the time we use one head only the other head is manually put it at the side or it stays where we want the motor is turned off.
Some times the second head is in parallel operation to duplicate parts.

3 head is unused.
We want to add to the 3 head a plasma cutter.


My question is?

Is it possible to config LinuxCNC into two operation modes? Cutting with Oxy-Acetylene Or with Plasma cutter like MODE1 MODE2?
And how to conf 8 motors in LinuxCNC?
And how should the machine operate 3 heads when I choose different operation modes.
And how the should be done the parallel cutting with 2 head Oxy-Acetylene?



Any ideas are great :) there is something similar done already, to point me to the right direction

Thanks for listening.











Attachments:
The following user(s) said Thank You: thefabricator03

Please Log in or Create an account to join the conversation.

More
More
30 Jun 2020 11:57 #173189 by Aciera

Is it possible to config LinuxCNC into two operation modes? Cutting with Oxy-Acetylene Or with Plasma cutter like MODE1 MODE2?

If you are ok with closing one config and opening another then that should not be difficult. If you want to do it inside a program then it will get more challenging.

And how to conf 8 motors in LinuxCNC?

LinuxCNC can drive 9 motors independently.

And how the should be done the parallel cutting with 2 head Oxy-Acetylene?

I guess you could try to set up a config with y2 being a slave axis to y1 just like you will have x2 as a slave axis to x1 but I don't have any experience with slave axis. So I'm not sure if it is possible to define an offset between the two.
Or you could configure the y2 as v axis. Then you could move y1 (y axis) independently from y2 (v axis) but your gcode will have to deal with the v axis.
Or maybe you could go all fancy and create a new kinematic where you could add an offset between y1 and y2 from the GUI and the v axis will get the positional commands from the y axis plus the offset. But this would be fairly involved as it would require to alter the kinematics file written in C and rebuild LinuxCNC.

So many things are possible. Which you choose largely depends on your abilities with programming and/or willingness to master the system.
The following user(s) said Thank You: FooBar

Please Log in or Create an account to join the conversation.

More
30 Jun 2020 12:17 #173190 by FooBar
Thanks a lot, it is very helpful :)

Please Log in or Create an account to join the conversation.

More
30 Jun 2020 15:05 #173193 by Todd Zuercher
I think what you are asking for is very possible, but far from "standard".

I've retrofitted some multi head routers to Linuxcnc that are configured similarly, but without the ability to adjust the distance between the routers.

For starters, use Linuxcnc version 2.8 or newer. The joint-axis clarification in those newer versions will make setting up this machine easier. (2.8 is technically still pre-release but for all intents and purposes it is ready for public consumption.)
X1, and X2 are easy, this is simply a standard gantry configuration. Follow examples given for gantry machines for these joints.

For the 3 Y-axis joints. You need to decide how you'd like to use them. If you want to use them only for making duplicate parts, with potentially using all 3 at the same time, I think I would slave them together as a single Y-axis, with a secondary axis letter or letters specifying the distance between each one. So a G1V500 command would move either one or all the Y-joints 500mm apart. Then a Y commands would move all of the Y-joints the same distance in parallel motion.

Finally for the Z axis. For my machines I normally have each parallel Z axis configured with their own axis letter, Z,W,U,V. That is fine if you only have 4, but what if you need more? This also ran afoul of the new trajectory planner if you need more than 1 line of look ahead such as for a 3-D wood carving machine. So I worked out a way to temporarily slave and unslave the joints of the U,V,W axis to the Z axis using custom M -codes. This let me easily control and set different offsets for each of these joints. It also removed the need to assign an axis letter to each of these parallel Z axis joints. I did this all with some complex hal trickery. The addition of external offsets to Linuxcnc kind of does some of the same things I was doing but with fewer hal complexities, I've played with using it instead in a simulation but have not implemented it or a Joint/Axis configuration on a machine yet.

The temporary joint slaving/unslaving idea could also be implemented for your 3rd Y joint if you want to treat it as an independent Y-axis. Where Y1 and Y2 are two slaves with V being the offset between them and Y3 is normally parked off to the side and unused. then when you switch Y1 and 2 are moved together, and parked to the side and Y3 and Z3 becomes the commanded Y and Z axis.

Working out the details of how soft-limits are handled might be the most difficult task. It might be simpler just to ignore them and only rely on hard limit switches, but what's the fun in that. Crash prediction is something you shouldn't have to give up.
The following user(s) said Thank You: tommylight, Aciera, FooBar

Please Log in or Create an account to join the conversation.

More
30 Jun 2020 19:25 #173203 by Aciera
Todd, I'm always interested in unusual setups. Would you be able to share such a config of a multi head machine?

G1V500 command would move either one or all the Y-joints 500mm apart. Then a Y commands would move all of the Y-joints the same distance in parallel motion.

I'm particularily interested in this. Is this something that is built in or have you created this yourself?

Please Log in or Create an account to join the conversation.

More
30 Jun 2020 20:50 #173208 by Todd Zuercher
I've posted my configuration files for this multiple times on the forum. both for a machine running servos with a Mesa 5i25/7i77 combo and a stepper config running off the parallel port. I'd suggest veiwing the parallel port example it is much simpler and my servo config has other quirks such as running a floating point base thread and nested PID loops for running torque mode servos.

I am not a programer, and writing C components is a little out of my league. This is cobbled together using "standard" Linuxcnc stuff from Linuxcnc v2.7. Because of the complexities of the Hal file it may not import well into Linuxcnc v.2.8. I can easily see the auto conversion script choking on it.

Here is the parallel port config so you don't have to hunt for it.

File Attachment:

File Name: Digital_1_...6-30.zip
File Size:40 KB
Attachments:
The following user(s) said Thank You: Aciera

Please Log in or Create an account to join the conversation.

More
01 Jul 2020 06:06 - 01 Jul 2020 06:12 #173293 by Aciera

Working out the details of how soft-limits are handled might be the most difficult task

Just as possible route to deal with the soft-limits:
You can actually change the soft limits set in the INI, even during gcode execution.
To do this there has to be a forced sync by issuing M66 E0 L0 then set a motion.digital-out-0N that is connected to the mux.limit_n_x and another M66 E0 L0

In my application I switch kinematics. In trivkins I use the limits for x and z as set in the INI file in nontrivial kinematics I set those to a value of 999999 (But that of course could be any number) So I use motion.analog-out-03 to set kinstype to 1 and then tie that to the selector pin of the mux (disregard the OFFSET_SEL_PIN as that is used for something else) :
;M429 by remap: select modified xyzbc kins
o<429remap>sub
  #<SWITCHKINS_PIN> = 3  ; set N as required: motion.analog-out-0N
  #<OFFSET_SEL_PIN> = 3  ; set N as required: motion.digital-out-0N
  #<kinstype> = 1        ; modified xyzbc kins

o1 if [exists [#<_hal[motion.switchkins-type]>]]
o1 else
     (debug,M429:Missing [RS274NGC]FEATURE==8)
     (debug,STOP)
     M2
o1 endif

   M66  E0 L0                           ; force synch
   M64  P#<OFFSET_SEL_PIN> 	        ; set XYZBC x- and z-offset to current position
   M68  E#<SWITCHKINS_PIN> Q#<kinstype> ; set kinstype value
   M65  P#<OFFSET_SEL_PIN> 	        ; reset x-z-offset pin to 0
   M66  E0 L0                           ; force synch
;   (debug, M429:modified xyzbc kins)

o2 if [[#<_task> EQ 1] AND [#<_hal[motion.switchkins-type]> NE 1]]
     (debug,M429:Wrong motion.switchkins-type)
     (debug,or missing hal net to analog-out-0x)
     (debug,STOP)
     M2
o2 else
o2 endif

o<429remap>endsub

#  ---switch limits x_pos and z_neg between kinematics--- 
#  ! ini.x.max_limit and ini.z.min_limit are then set in "custom_postgui.hal !

net kinematic-nontriv			<= kinstype.is-1	=> not.kins.in
net kinematic-triv			    <= not.kins.out

setp    mux.limit_x_pos.in0     [AXIS_X]MAX_LIMIT
setp 	mux.limit_x_pos.in1		999999		
net kinematic-nontriv			=> mux.limit_x_pos.sel 	=> mux.limit_z_neg.sel
net limit-x-pos-set      		<= mux.limit_x_pos.out        

setp    mux.limit_z_neg.in0     [AXIS_Z]MIN_LIMIT
setp 	mux.limit_z_neg.in1		-999999		
net limit-z-neg-set      		<= mux.limit_z_neg.out

custom_postgui.hal:
net limit-x-pos-set      <= mux.limit_x_pos.out   => ini.x.max_limit
net limit-z-neg-set      <= mux.limit_z_neg.out   => ini.z.min_limit

I hope this makes somewhat sense and somebody may find it useful.
Last edit: 01 Jul 2020 06:12 by Aciera.

Please Log in or Create an account to join the conversation.

Moderators: cncbasher
Time to create page: 0.109 seconds
Powered by Kunena Forum