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