On Sunday 11 October 2015 07:06:44 John Thornton wrote:

> Gene,
>
> Can you attach the G code that you ran?
>
> JT
>
Attached John.  It is a mess, a mass of control switches because its 
intended to do all 4 side parts, and all 4 base parts, just by setting 
control vars at the top of the file.  If #<_upper> is a 1.0, it carves a 
1x12.  If #<_side> is a 1.0, it does the long front and back side ends 
of the chest. If its a 0.0, the carved pattern is mirrored for the ends 
of the end boards.  If 'upper' is 0.0 it carves the ends of the much 
narrower base boards, following the state of 'side' rules by mirroring 
the cuts so they all fit together as in the picture.

And much of that mess is because there is a not quite duplicate path if 
#<_roundover> is set.  The boards if carved without the roundover, need 
a huge amount of sanding to roundover the edges of the fingers so that 
when the fingers are meshed, they will sit clear to the  bottom of the 
corresponding pocket, not being held out 1/8" by the square edges the 
1/4" mill leaves.

That roundover isn't near fully functional yet.  But not having a 
backplot that means much, will make it 10x more difficult for me to 
single step thru it and determine where I need to adjust a "fudge" 
factor.

Because this uses G38.2's to reset a co-ordinate maps 0,0,0 points, to 
run it on a sim session, I cobbled up a timer set for 3 seconds to 
simulate those G38.2 contact events in the sim setup, and the offset 
results shown are identical to what I see on the real machine.

The sim is running V2.7 and the real machines are running the latest 
2.8.0pre.  Again, same results.

On my machine, the M7-8-9 controls have been re-dedicated, with the mist 
checkbox controlling a motor & gearbox from a junked out paper shredder 
to swing the gauging bar on the rear of the jig into position to serve 
as a fence to locate the end of the board when clamping up the next 
board, it also carries a 3 sided brass dohicky which is the 3 contact  
points the G38.2's search for.  Its a 1.5"x .5" mahogany bar about a 
foot long, mounted to the rear edge of the jig, swinging on a section of 
piano hinge that has an o-ring hooked up to pull the end play out of the 
hinge, and the output gear of this motor is connected to the bar with 
about 8" of junky plastic hose which can bend and absorb motor 
overtravel. A homemade cam on the reduction gear triggers a couple 
microswitches with diodes across them so that all I have to do is the 
usual DPDT relay reverseing on the armature polarity.  So it runs not 
quite 180 degrees from switch to switch when I toggle the "mist" button'

The same general idea but using a charge pump, starts and stops a vacuum 
cleaner whose nozzle is right behind the cutting tool in an attempt to 
contain the huge pile of wood swarf.  Thats what the M7-M8-M9's in the 
code do.  Unfortunately, by the time I got a big enough path thru the 
vacuum plumbing yesterday so it would pass & not get clogged up when it 
picks up the little blocks of wood released by the final cut, I was up 
to 1.25" plastic pipe and a rubber radiator hose to allow the mills Z 
motion, and a measly 6.5 amp vacuum needs about 2 or 3 x the amount of 
air flow than what it can deliver if its to really keep the area clean.  

Too big a nozzle equals slower air flow.  A work in progress so to speak.  
My 1.5 hp dust collector with a 4" intake I use on the planer has the 
air flow, but not the vacuum to move the air thru as much plumbing as is 
involved with a centrifugal debris separator I made (and it works pretty 
good) out a pile of pvc pipe, 1.5" drain pipe and a 4" drain for the 
spin section.  BTDT. I'll have to see if I can find a bigger vac that 
isn't also too big to fit the space.  What the bucket max has going for 
it is its price, $22 USD at Lowes, its a small vac motor and a short 
hose, mounted to a 5 gallon bucket lid, you supply the bucket.

I'll shut up now, but I expect it will generate more questions.

Thanks for offering to look at it, John.  This thing can be a real time 
sink. But until I fall over, thats what I have. ;-)

> On 10/11/2015 3:51 AM, Gene Heskett wrote:
> > Greetings all;
> >
> > I had asked for an explanation of why the run trace, and the initial
> > trace, do not align in the backplot, and it was suggested that I was
> > using something in the G90 to G92 in my code.  So It removed any of
> > that from my code, with no effect detectable in removing them.
> >
> > The first thing my code does is take the machine back to its G53
> > home position, and when that is reached, the g10 command to zero the
> > global co-ordinates to that position, this to keep my g55 mods from
> > accumulating run to run.
> >
> > So enclosed is a screen snapshot taken from the simulator, backplot
> > in overhead view mode, trimmed down to just the backplot window. It
> > exactly matches what I see on the real machines monitor so its at
> > least consistent. According to the MDI window, there is a G91.1 in
> > effect, but it is not in my code.  And its not present in any file
> > in the sim-axis directory. So I assume its an internal default.
> >
> > Note from the snapshot that the offset in the Y direction is
> > nominally 2x that shown in the x direction.  The white line segments
> > can be clicked on if one is patient enough with his clicking, so
> > that the line of code in the code window is highlighted.  If one
> > could call it high lighted, the colors chosen renders it very close
> > to invisible.  Extremely low contrast result.  This needs to be
> > fixed, but I've no clue how.
> >
> > None of the traced, red lines are clickable.
> >
> > The default co-ordinate map used for reference is G54, the actual
> > movements are, with the exception of the G38.2 stuff to find and
> > calibrate it to the contacts on the jig, done in the G55 co-ordinate
> > map.  Are/can these offsets be responsible for the apparent
> > miss-match?
> >
> > Thanks all.
> >
> > Cheers, Gene Heskett
> >
> >
> > --------------------------------------------------------------------
> >----------
> >
> >
> > _______________________________________________
> > 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)
Genes Web page <http://geneslinuxbox.net:6309/gene>
%
( ============= Blanket-chest3.ngc Version 0.90.75 ============== )
G17 G20 G40 G49 G54 G61 G80 G94
( A new way to look at this overgrown box joint in a Green & Green style )
( Copyright Dec 2014, 20:43 Sept 28 2015 by Maurice E. Heskett )
( License GPL V2 or newer )
( It occurs to me that regardless of the the dimensions, there are a )
( fixed by the first named var, so many y motions involved , in this case )
( 10 for a 5 finger setup, so I can find the 3rd var from the first one )
( in this case set for 5.  One could adjust the number of the joints to )
( satisfy a suitable size of board by adjusting this in increments of 2. )
( So to get a 5 finger sockets setup such as this one is, and to follow )
( the general pattern, we'll enforce the evenness of the calcs by doubling )
( the fingers. spec all data inputs to 8 or more places right of decimal pt! )
( Most important, side or end of box being cut. If side = 1.00000000 will do )
( side pattern, else if side = 0.0000000 will cut end pattern )

#<_preview_pass>                =       1.00000000 (if 1.0 does outline pass, a 
time sink )
#<_L_do_arc>                    =       1.0 ( devel var, 0 show slanted lines, 
1 does arc )
#<_R_do_arc>                    =       1.0 ( devel var as above, individual 
controls )
#<_pointed_tool_dia>    =       0.192
#<_pointed_path_offset> =       0.035
#<_quarter_tool_dia>    =       0.245
#<_rndover>                     =       0.00000000 (0.0 disables this code, set 
= 1.0 to use at the correct place )
#<_side>                                =       0.00000000 ( if zero, does end 
board )
#<_upper>                               =       1.00000000 (if 0.0000, does 
base skirt boards, true does upper)

( math starters here )
#<_x_start_seed>                =       -4.8785000000
#<_y_start_seed>                =       -0.175000000    ( unk find again!!! )
#<_bd_thick>                    =       0.76000000 ( as measured )
#<_finger_len>                  =       0.89000000 ( adjust for a pleasing tip 
projection )
( adjust for board width of base parts based on upper=1 or 0)
o<assign1> IF [#<_upper>]
( this will need expanding for 1x12 stock!!!!!)
#<_bd_width>                    =       11.26000000 ( as measured or cut to for 
sides & ends dimensioned lumber?)
#<_fingers>                             =    5.00000000 ( for side/end parts)
#<_y_cuts>                              =       [[#<_fingers> * 2.00000000] + 
1.00000000]
o<assign1> ELSE

#<_bd_width>            = 2.48000000 ( for base skirt parts & Could be a wee 
bit higher)
#<_fingers>             =       2.00000000 (for base skirt parts)
#<_y_cuts>              =       [[#<_fingers> * 2.00000000] - 1.00000000] 
(divide by 3rds?)

o<assign1> ENDIF

( jig's target coordinates )
#<_rndover_z>   = -7.30000000 (starting value, adjust to work)
#<_rndover_zF>  = -7.65000000 (starting value, adjust to work)
#<_rndover_x>   = 1.45290000
#<_rndover_y>   = 1.77050000
#<_rndover_zcut>        = 0.009000000
#<_quarter_mill_x> = -0.1350
#<_quarter_mill_xF> = -0.0500
#<_quarter_mill_y> = 1.1074
#<_quarter_mill_yF> = 1.2500
#<_quarter_mill_z>  = -6.7000
#<_quarter_mill_zF> = -7.000( uses a G38.2 contact to get initial height )

( need some z control values too)
#<_z_safe>              =       0.25000000 ( safely above the wood for rapids )
#<_z_depth>             =       -0.555800000 ( is jig face from top of jig when 
Z is homed & touched off)
#<_z_top>               =       [#<_z_depth> + #<_bd_thick>]

( then we calculate the width of a  cut or finger )
#<_finger_width>        =       [#<_bd_width> / #<_y_cuts>]

( next, set the starting y coordinate for this jig )
( So can this be a co-ord sys offset )
( Then set the y_end )

( now we put in the scratchpad vars starting with a y_counter )
#<_y_counts>    = 0.00000000 ( volatile )

( and a y_tmp>, x_tmp & z_tmp for holding boxes )
#<_y_tmp>               = 0.00000000 ( volatile )
#<_x_tmp>               = 0.00000000 ( ditto )
#<_z_tmp>               = 0.00000000 ( ditto )
#<_z_dec>               = 0.00000000 ( ditto )


( ===========some useful subroutines=========== )
( ===================FIND_JIG================== )
o<find_jig> SUB
G54
G53 g1 x0 y0 z0 F50
G10 L2 P1 x0 y0 z0 ( remember in g54 map!)
M7 (put the jig down)
(msg,POSITION QUILL at -1.503")
(msg, on its digital readout )
(msg,Clean w/comp air & PUT the JIG down)
(msg,connect probe wire if not connected)
(msg,clamp workpiece in jig, un-pause when it is)
M0 (pause)

o<chk_rndover> IF [#<_rndover> gt 0.5]

                                                        ( only need one pass 
for the roundover bit )
#<_tool_radius>         =       [#<_pointed_tool_dia> * 0.50000000]
#<_tool_diameter>       =       #<_pointed_tool_dia>
#<_path_offset>         =       #<_pointed_path_offset>
#<_z_passes>            =       1.00000000 ( one pass is enough )
                                                        ( drive to roundover 
target on jig )
G1 F45 x#<_rndover_x> y#<_rndover_y> Z#<_rndover_z> 
G38.2 F0.5 z#<_rndover_zF>
G10 L2 P2 Z#5063
G0  Z-5.0                                               (move it out of harms 
way )
#<_x_start>                     =       [#<_x_start_seed> - 
#<_pointed_path_offset>]

o<chk_rndover> ELSE ( normal finger cutting )

#<_tool_diameter>       =       #<_quarter_tool_dia> 
                                ( next starting x coordinate for this jig )
#<_z_passes>            =       3.0000000000            ( divide depth of cut 
to suitable )

        ( leave a wee bit of thin wood at the bottom of the 3rd cut)
#<_z_decr>                      =       [[#<_z_depth> - #<_z_top>] / 
[#<_z_passes> * 1.11000]]

#<_x_ start>            =       #<_x_start_seed>        ( trim till 1/4" mill 
is centered on edge )
#<_x_end>                       =       [#<_x_start> + #<_bd_width>]
#<_tool_radius>         =       [#<_quarter_tool_dia> * 0.50000000]( as set 
above in preamble )
G1 F60 X#<_quarter_mill_x> Y#<_quarter_mill_y>
G1 Z#<_quarter_mill_z>                                  ( quill at -1" is NOT 
enough, set -1.5000")
                        ( start spindle running slow in reverse )
S100 M4
G38.2 F0.50 X#<_quarter_mill_xF>                ( records contact in #5061 )
G0 X#<_quarter_mill_x>                                  ( clear jig again )
G10 L2 P2 X#5061                                                ( set G55 x=0 
co-ordinate )
G38.2 Y#<_quarter_mill_yF>                              ( record contact in 
#5062 )
G0 Y#<_quarter_mill_y>                                  ( clear jig again )
G10 L2 P2 Y#5062                                                ( grab contact 
point & set offset )
G38.2 Z#<_quarter_mill_zF>                              ( go down till to touch 
screw & records it in #5063 )
G0 Z#<_quarter_mill_z>                                  ( get away from jig )
G10 L2 P2 Z#5063
m5                                                                              
(shut off spindle)
G0 Z-5.0                                                                (clear 
jig so it can be flipped out of the way )
#<_x_start>                     =       [#<_x_start_seed> - #<_tool_radius>]

o<chk_rndover> ENDIF

                        ( adjust y_start which cascades to the other 2 vars)
#<_y_start>                     =       [#<_y_start_seed> - #<_tool_radius>]
#<_y_end>                       =       [#<_y_start> - #<_finger_len>] ( 
includes above offset )
#<_y_curve_pt>          =       [#<_y_start> - #<_tool_diameter>]
#<_x_end>                       =       [#<_x_start> + #<_bd_width>]

G55  (and leave in G55 mode for main code)
(msg,move jig out of the way)
(msg,and un-pause when it is!)
M9

o<find_jig> ENDSUB

( ====================rightCorner================ )
o<rightC> SUB ( to cut a right corner down to y_end )
        ( ENTRY #<_x_tmp> initially set by do_cuts or do_cuts_final loop)
        ( THIS does the rest of the calcs and moves )
        ( First it s/b at y_start and wherever x_tmp is set at)
        ( this starts at end of board, cuts inward curve on right side of 
finger)
        ( but also handles first cut)
o<rightCfirst> IF [[#<_x_tmp> - #<_tool_diameter>] lt #<_x_start>]
(msg,165 rightC is first corner)

G1 F15 y#<_y_end>

o<rightCfirst> ELSE

(msg,171 in righgtC, not first corner)
G1 Y#<_y_start> ( to end of board in case its not there already as it ay be at 
+.050")

( handle X offset )
#<RlocalX> = #<_x_tmp>
G1 X#<Rlocalx>
#<RlocalX> = [#<RlocalX> + #<_tool_diameter>]

o<R_do_arc>     IF [#<_R_do_arc> gt .5]
( curves inward from y_start )
G2 X#<RlocalX> Y#<_y_curve_pt>  R#<_tool_diameter>
o<R_do_arc> ENDIF
( take it to same end point for backplot showing)
G1 X#<RlocalX> Y#<_y_curve_pt>
G1 Y#<_y_end>  (take it the rest of the way to the bottom )
o<rightCfirst> ENDIF
( and leaves it at inner left of finger pocket )
#<_x_tmp>       = [#<_x_tmp> + #<_finger_width>] ( tally  motion used )
o<rightC> ENDSUB


( ================leftCorner================= )
o<leftC> SUB                    ( to cut up to y_curve_pt, do arc, then to 
y_start )
                                                ( ENTRY current x_tmp)
                                                ( this starts at inner end of 
finger)
G1 F15 Z#<_z_tmp>                       (insurance)
G1 Y#<_y_end>                   ( if not there, put it there )
#<_y_counts> = [#<_y_counts> + 1.00000000] ( count the y move )
#<LlocalX> = #<_x_tmp>
G1 X#<LlocalX>

o<Ldone_check> IF [#<_x_end> lt [#<_x_tmp> + #<_tool_diameter>]]
(msg,203 in leftC last cut)
G1 Y#<_y_end>                                           ( put at bottom of cut )
G1 X[#<_x_end>  + #<_tool_diameter>]    ( take it to right edge of board )
G1 Y[#<_y_start> + 0.10000000]          ( back to end of board )

o<Ldone_check> ELSE
(msg,209 in leftC not last cut)
                                                                        ( set 
LlocalXC to start position of arc )
G1 x#<_x_tmp>
#<LlocalX> = [#<_x_tmp> + #<_tool_diameter>] ( offset pos for arc target point )
G1 Y#<_y_curve_pt>                                      (place machine for up 
arc )

o<L_do_arc> IF [#<_L_do_arc> gt .5]

G2 X#<LlocalX> Y#<_y_start> R#<_tool_diameter>

o<L_do_arc> ENDIF 
                                                                        ( this 
only works for test)
G1 X[#<_x_tmp> + #<_tool_diameter>] Y#<_y_start> ( make sure its there, with g2 
off. s/b a 45 degree move )

o<Ldone_check> ENDIF

#<_x_tmp>       = [#<_x_tmp> + #<_finger_width>]

o<leftC> ENDSUB


( ==================MAIN LOOP===================== )
M9 (set jig and vacuum off)
M6 T5
( put smarts in find_jig to handle the rndover's different contact location )
o<find_jig> CALL (locates reference points on jig, sets G55 co-ords)

( first, once it works, turn off this time sink )
o<if_preview> IF [#<_preview_pass> gt 0.5]

o<if_rndover1> IF [#<_rndover> gt 0.50] ( do this show bit )

G1 F60 Z#<_z_safe> ( clear the workpiece )
G0 Y[#<_y_start> + #<_tool_radius> + 0.1000]  (puts tip at edge of board)
G0 X[#<_x_start> - #<_tool_radius>] ( no bit radius offsets here )
G01 F10 Y[#<_y_end> - #<_tool_radius>]
m0
G0 Y[#<_y_start> + #<_tool_radius> + 0.1000] ( go to end of workpiece )
G0 X[#<_x_end> + #<_tool_radius>] ( go to right edge of workpiece, no bit 
radius offsets)
G1 F10 Y[#<_y_end> + #<_tool_radius>] ( go to inner end of a finger pocket )
m0
G0 Y[#<_y_start> + #<_tool_radius> + 0.1000] ( and back away to a starting 
position)

o<if_rndover1> ELSE
                                                        ( else show this )
G1 F60 Z#<_z_safe>                      ( clear the workpiece )
G0 Y[#<_y_start> + #<_tool_radius> + 0.1000]  (puts tip at edge of board)
G0 X[#<_x_start> - #<_tool_radius>]
G01 F10 Y[#<_y_end> + #<_tool_radius>]
G0 Y[#<_y_start> + #<_tool_radius> + 0.1000] ( go to end of workpiece )
G0 X[#<_x_end> + #<_tool_radius>]( go to right edge of workpiece, no bit radius 
offsets)
G1 F10 Y[#<_y_end> + #<_tool_radius>] ( go to inner end of a finger pocket )
G0 Y[#<_y_start> + #<_tool_radius> + 0.1000] ( and back away to a starting 
position)

o<if_rndover1>  ENDIF

o<if_preview> ENDIF

#<_z_pass>      = 0
#<_z_tmp>       =       #<_z_top>

o<cut2depth> WHILE [ #<_z_pass> lt #<_z_passes> ]

o<if_rndover2> IF [#<_rndover> lt 0.5]
#<_z_tmp> = [#<_z_tmp> + #<_z_decr>]

o<if_rndover2> ELSE

#<_z_tmp> = [#<_z_top> - #<_rndover_zcut>]

o<if_rndover2>  ENDIF

#<_x_tmp> = [#<_x_start> - #<_tool_radius>] (does this need to be path_offset?)
#<_y_counts> = 0.0000000000
                                        ( fix the starting offset right here 
folks )
#<_x_tmp> = [#<_x_start> - #<_tool_radius>]     (back to left edge of board)
G0 X#<_x_tmp>
s2200
M3
M8
o<do_a_cut> WHILE [#<_x_end> gt #<_x_tmp>]
                                        ( now check side to determine order of 
cuts)
                                        ( if side = 1 do this )
o<check_side> IF  [[#<_side> MOD 2.000000000] gt 0.500000000]
G1 Y#<_y_end>                                           (put back at inside 
starter point)
o<leftC> CALL
o<do_rightC1> IF [[#<_x_end> + #<_tool_radius>] gt #<_x_tmp>]
o<rightC> CALL
o<do_rightC1> ENDIF

o<check_side> ELSE (ELSE side = 0, so invert order of cuts)
(already at y_start)
o<rightC> CALL

o<do_leftC> IF [[#<_x_end> + #<_tool_radius>] gt #<_x_tmp>]
o<leftC> CALL

o<do_leftC> ENDIF

o<check_side> ENDIF
o<do_a_cut> ENDWHILE
G1 Y[#<_y_start> + 0.150]                       (clear work on back stroke )
#<_z_pass>      = [#<_z_pass> + 1.0000000 ]

o<cut2depth> ENDWHILE

o<if_rndover4> IF [#<_rndover> lt 0.5]

( this has left a thin fin at the bottom )
(so do last thin web cuts)
G1 Y[#<_y_start> + 0.150]( re-trim right edge of board? No, noisy!)
#<_z_tmp>       =       [#<_z_depth> - 0.020] (go another 20 thou to finish 
cutting a fin on bottom)
#<_x_tmp> = [#<_x_start> - #<_tool_radius>] ( reset starting position  to left 
edge )
G1 x#<_x_tmp>
#<_y_counts>    = 0.0000000000 ( re-zero for last cut blo cks free moves )
( now cut last thin web to free the cutouts & see if it still splits at exit )
o<do_cuts_final> WHILE [[#<_x_end> + #<_tool_radius>] gt #<_x_tmp>]
o<check_side_final> IF  [[#<_side> MOD 2.000000000] gt 0.500000000]
o<leftC> CALL
o<do_rightC_final> IF [[#<_x_end> + #<_tool_diameter>] gt #<_x_tmp>]
o<rightC> CALL
o<do_rightC_final> ENDIF
o<check_side_final> ELSE
o<rightC> CALL
o<do_leftC_final> IF [[#<_x_end> + #<_tool_diameter>] gt #<_x_tmp>]
o<leftC> CALL
o<do_leftC_final> ENDIF
o<check_side_final> ENDIF
o<do_cuts_final> ENDWHILE
G1 Y[#<_y_start> + 0.050]

o<if_rndover4> ENDIF
M9 (turn off vacuum)
M5 (shut my noisy spindle off )
G0 Z5.000 ( so you can work on the table without ripping up the back of the 
hands )
G0 X0 Y0
g54 (leave at default map)
M2  ( all done! )
%

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

Reply via email to