For some time now we are successfully using “plasma drill” operation to pierce centers of small holes for manual drilling later.
I export DXF from SolidWorks, all small holes go to separate layer in Sheetcam, then set hole min-max, plasma drill and tadaa - works perfect!
However when it comes to manual drilling these pierced holes after - everyone knows what happens to drill bits if you got plenty of holes to drill…
For now, when it comes to marking numerous small holes we stopped using plasma drill pierce operation and instead we use only plate marker.
Instead of holes - I simply sketch in Solidworks hole center marks (2x 5mm line cross), then export to DXF and in Sheetcam set scriber operation for all
center marks - crosses. This works great - however very time consuming to draw additional center marks in Solidworks.
What would be the easiest way to accomplish this? Maybe new feature?
No more plasma pierce or peck-pierce holes - simply every single hole (f.e. up to 10mm diameter) must have 5x5mm cross mark done by plate marker.
We are using plate marking operation extensively for most bend lines from Solidworks, positioning marks for welding and lately almost for
all small holes, all for prototyping before it goes to laser and CNC press.
I noticed new “Shape library feature” so simple cross to use as center mark for holes will do, but then also very time consuming to place these all
over the material - not mentioning how to position-snap them into circles (holes).
Thank you very much in advance for any elegant solution or advice.
Hi Miro,
I dunno I would rather sharpen the odd drill bit than start from scratch centre punching and working up to a 10mm hole, I normally plasma 1mm under finished size and open up with drill for more precise jobs, right speed a decent bit and some cutting lube and it’s not much bother really.
Thanks for your input, could you be please more specific?
Part example:
steel plate: 6mm
hole diameter: 6mm
number of holes: 30
average distance between holes: 50mm - tolerance 0.5mm
So you would plasma pierce through, then what drill size? What kind/type?
Or burn 4-5mm holes then open up?
What about damaged torch tips after piercing multiple parts?
Decent prepared smaller holes for bolts or for tapping after plasma has been nothing but torture for me so far,
so I am under impression that there is no point of plasma piercing for holes under 5-6mm…
Umm maybe pushing it a bit there with burning a 5mm hole in in 6mm sheet, I quite often cut a 9mm dia in 8mm thick and open up to 10mm though,
just using dormer hss bits, maybe that’s how I get though a few consumables
Try plasmatech.co.uk , not genuine hypertherm but seem to last just as well, good bit cheaper.
I actually never edit anything under settings section in my post, but I am eager to learn…
Where do I put it? function OnDrill() ???
Below is my post, could you please kindly help me to fix it?
Thank you very very much.
Miro.
--************************************************
--*** Set these values up to suit your machine ***
--************************************************
--this is the distance between each torch reference in MILLIMETRES
refDistance = 250
--this is the reference feed rate in mm/min
refFeed = 1000
--Put your switch offset value here in MILLIMETRES
switchOffset = 0
--Scriber X,Y,Z offsets in MILLIMETRES. Do not use inches here even if you want inch code
--For the marker use the scriber Z as the offset from Z zero you want the Z to move to during a scribe.
--Change these values to suit your scriber setup
scriberX = -88.1
scriberY = 32.8
scriberZ = 14
--scriber axis. Leave this as nil if the scriber is fixed to the same axis as the torch
--scriberAxis = "A"
scriberAxis = nil
--If this value is set to true then use G28 (home) for the Z reference
--Set it to false for G31 probe
refHome = true
--this value when set to "true" will set the Z to lift to rapid height between paths when using the marker tool.
--if false it will not lift the Z between paths but will at the end
markerZ = false
--The cutter will slow down for corners and turn off THC below this radius
--Set slowRadius to "0" to turn off the auto slowdown
slowRadius = 0
--Minimum slow down speed.
--This is a scale factor. For instance 0.5 = 50% of the current feed rate
slowPercent = 0.6
--THC on and off codes. Use nil if you don't want THC control e.g:
-- thcOnCode = nil
-- thcOffCode = nil
--these codes are for the DCC extensions and turn the DTHC on/off if you have DTHC REV1/4 or higher firmware
thcOnCode = " S20"
thcOffCode = " S10"
--************************************************
--*** End of settings ***
--************************************************
function OnAbout(event)
ctrl = event:GetTextCtrl()
ctrl:AppendText("Plasma MP3000-DTHCII post processor with/without Plate marker\n")
ctrl:AppendText("This POST for all units without RS485 needing DCC ")
ctrl:AppendText("\n")
ctrl:AppendText("Modal G-codes and coordinates\n")
ctrl:AppendText("Comments enclosed with ( and )\n")
ctrl:AppendText("M03/M05 turn the torch on/off\n")
ctrl:AppendText("M08/M09 turn the engraver on/off\n")
ctrl:AppendText("Incremental IJ - set in mach2\n")
ctrl:AppendText("The torch is referenced at cut start and every XXmm of movement thereafter\n")
ctrl:AppendText("Designed for use with Mach3 and CandCNC MP3000-DTHC and Floating head Touch-n-Go\n")
ctrl:AppendText("Post variables:\n")
ctrl:AppendText("refDistance - set the distance between each reference\n")
ctrl:AppendText("refFeed - set the feed rate when referencing\n")
ctrl:AppendText("switchOffset - set your net switch offset amount \n")
ctrl:AppendText("Scriber uses any tool number\n")
ctrl:AppendText("slowRadius - slow down below this radius\n")
ctrl:AppendText("slowPercent - minimum percentage to slow down\n")
ctrl:AppendText("markerZ- allows marker rapid travel at system rapid height or Z offset height\n")
end
-- Modified 21/6/2010
-- added option for 'nil' plate marker z
-- Added support for plate marker tool type as well as tool number based plate marker
-- Modified 4/11/2010
-- Added: Reference the torch on the first pen down if the plate marker is the first tool used.
--Modified 22/4/2013 (TLC)
--Added Preset Volts , Preset Amps , and DTHC Delay variables
--Added markerZ to turn safe Z lift on marker tool on/off
--Changed scriberZ as Z axis offset from Z0
--Added code to turn off slowdown if slowRadius = 0
--Added NODTHC, Tip SIze and Air Pressure to tool table variables
--Removed using tool number above 100 as marker tool--must use "Marker Tool" to select scriber
post.DefineVariable("refDistance",sc.unitLINEAR,0,1e17)
post.DefineVariable("refFeed",sc.unitFEED,0,1e17)
post.DefineVariable("switchOffset",sc.unitLINEAR,-1e17,1e17)
post.DefineVariable("slowRadius",sc.unitLINEAR,-1e17,1e17)
post.DefineVariable("slowPercent",sc.unitPERCENT,-1e17,1e17)
post.DefineCustomToolParam("PlasmaTool", "Preset volts", "presetVolts", sc.unit0DECPLACE, 49, 0, 200)
post.DefineCustomToolParam("PlasmaTool", "DTHC delay -sec", "dthcDelay", sc.unit1DECPLACE, 0, 0, 99)
post.DefineCustomToolParam("PlasmaTool", "Tip Size -Amps", "tipSize", sc.unit0DECPLACE, 40, 20, 200)
post.DefineCustomToolParam("PlasmaTool", "NO DTHC - 0", "dthcOff", sc.unit0DECPLACE, 1, 0, 1)
function OnInit()
offX = 0
offY = 0
offZ = 0
post.SetCommentChars ("()", "[]") --make sure ( and ) characters do not appear in system text
post.Text (" (Filename: ", fileName, ")\n")
post.Text (" (Post processor: ", postName, ")\n")
post.Text (" (Date: ", date, ")\n")
if(scale == metric) then
post.Text (" G21 (Units: Metric)\n") --metric mode
else
post.Text (" G20 (Units: Inches)\n") --inch mode
end
post.Text (" F1\n G53 G90 G40\n")
if(dthcOff) then
--don't do anything
else
dthcOff = 1 --don't pass a null
end
minArcSize = 0.2 --arcs smaller than this are converted to moves
firstRef = true
currentZAxis = "Z"
finalCut = false
dist = 9999999
lastz = 0
thcstate = 1
ThcOff()
end
function OnNewLine()
post.Text ("N")
post.Number (lineNumber, "0000")
lineNumber = lineNumber + 10
end
function OnFinish()
finalCut = true
endZ = safeZ
OnRapid()
endX = 0
endY = 0
offX = 0
offY = 0
offZ = 0
OnRapid()
post.Text(" S900 \n")
post.Text(" M22 \n")
post.Text(thcOffCode)
post.Text(" (DTHC is off)\n");
post.Text(" M22 \n")
post.Text (" M05 M30\n")
end
function OnRapid()
if(endX < 1e17 and endY < 1e17) then --don't update the distance moved if X or Y are unknown
local len = math.hypot((endX + offX)-currentX , (endY + offY)-currentY)
dist = dist + len
end
post.ModalText (" G00")
post.ModalNumber (" X", (endX + offX) * scale, "0.0000")
post.ModalNumber (" Y", (endY + offY) * scale, "0.0000")
if(toolClass == "MarkerTool") then
if(firstRef == true) or (finalCut == true) or (markerZ == true) then
post.ModalNumber (" Z", safeZ * scale, "0.0000")
end
finalCut = false
else --this is not a marker tool
post.ModalNumber (" Z", endZ * scale, "0.0000")
end
post.Eol()
end
function OnMove()
local len = math.hypot(endX - currentX , endY - currentY)
dist = dist + len
if(len > slowRadius) and (dthcOff > 0) then
ThcOn()
end
post.ModalText (" G01")
post.ModalNumber (" X", (endX + offX) * scale, "0.0000")
post.ModalNumber (" Y", (endY + offY) * scale, "0.0000")
if(toolClass ~= "MarkerTool") then
post.ModalNumber (" Z", endZ * scale, "0.0000")
end
post.ModalNumber (" F", feedRate * scale, "0.0###")
post.Eol()
end
function OnArc()
local radius = math.hypot(currentX - arcCentreX, currentY - arcCentreY)
dist = dist + radius * math.abs(arcAngle)
if(radius < slowRadius) and (math.abs(arcAngle) > 0.5) then
feed = (radius / slowRadius)
if(feed < slowPercent) then
feed = slowPercent
end
feed = feed * feedRate
ThcOff()
else
feed = feedRate
if(dthcOff >0) then
ThcOn()
end
end
if(arcAngle <0) then
post.ModalText (" G03")
else
post.ModalText (" G02")
end
post.ModalNumber (" X", (endX + offX) * scale, "0.0000")
post.ModalNumber (" Y", (endY + offY) * scale, "0.0000")
post.Text (" I")
post.Number ((arcCentreX - currentX) * scale, "0.0000")
post.Text (" J")
post.Number ((arcCentreY - currentY) * scale, "0.0000")
post.ModalNumber (" F", feed * scale, "0.0###")
post.Eol()
end
function ThcOff()
if(not thcOffCode) then return end
if(thcstate ==1) then
thcstate = 0
post.Text(thcOffCode)
post.Text(" (DTHC is off)\n");
end
end
function ThcOn()
if(not thcOnCode) then return end
if(toolClass == "MarkerTool") then return end
if(thcstate ==0) then
thcstate = 1
post.Text(thcOnCode)
post.Text(" (DTHC is on)\n");
return
end
if(thcstate == 2) then
thcstate = 0
end
end
function OnPenDown()
if(toolClass == "MarkerTool") then
if (firstRef) then
Reference()
offX = scriberX
offY = scriberY
offZ = scriberZ
if (offZ > 0 ) then --put in the Z offset height if it the first scribe after a ref
post.NonModalNumber(" Z", offZ * scale, "0.0000")
post.Eol()
end
post.ModalNumber (" X", (currentX + offX) * scale, "0.0000")
post.ModalNumber (" Y", (currentY + offY) * scale, "0.0000")
post.Eol()
else --not a ref move
if (markerZ == true ) then --put in the Z offset height before the scribe after the rapid
post.ModalNumber(" Z", offZ * scale, "0.0000")
post.Eol()
end
end
post.Text(" M08\n")
else --tool is not marker tool
if(dist >= refDistance) then
dist = 0
Reference();
end
post.ModalText (" G00")
post.NonModalNumber(" Z", pierceHeight * scale, "0.0000")
post.Eol()
if (preheat > 0) then
post.Text ("\n G04 P")
post.Number (preheat,"0.###")
post.Eol()
end
post.Text ("\n M03\n")
end
if (pierceDelay > 0) then
post.Text (" G04 P")
post.Number (pierceDelay,"0.###")
post.Eol()
end
thcstate = 0
if(dthcOff > 0) then
ThcOn()
post.Text (" M22 \n")
end
end
function Reference()
firstRef = false
if (refHome) then
post.ModalText(" G28.1 Z")
post.Number(3 * scale, "0.00")
else
post.ModalText(" G31 Z -100")
end
post.ModalNumber (" F", refFeed * scale, "0.0###")
post.Eol()
post.ModalText(" G92 Z0.0\n")
post.ModalText (" G00")
post.Text(" Z")
post.Number (switchOffset * scale, "0.0000")
post.Eol()
post.ModalText(" G92 Z0.0\n")
end
function OnPenUp()
if(toolClass == "MarkerTool") then
post.Text(" M09\n")
else
post.Text (" M05\n")
end
if (endDelay > 0) then
post.Text (" G04 P")
post.Number (endDelay,"0.###")
post.Eol()
end
end
function OnNewOperation()
post.Text (" (Operation: ", operationName, ")\n")
if (plungeRate <= 0) then
post.Warning("WARNING: Plunge rate is zero")
end
if (feedRate <= 0) then
post.Warning("WARNING: Feed rate is zero")
end
end
function OnToolChange()
post.Text (" (tool number: ", tool ," ")
post.Text(" Feedrate: ", feedRate * scale , ") \n")
if(dthcOff == 0) then
post.Text (" (DTHC has been disabled in this tool)\n")
end
if(presetVolts) then
post.Text ( "(Preset Volts: ",presetVolts," " )
else
post.Text ("(")
end
if(presetAmps) then
post.Text ( " Preset AMPS: " ,presetAmps,") ")
post.Eol()
else
post .Text (")")
post.Eol()
end
if(presetPSI) then
if(presetPSI >0 ) then
post.Text ( " ( Air Pressure Preset: " ,presetPSI,") ")
post.Eol()
else
post.Text ( " ( Default Air Pressure")
post.Text ( ")")
post.Eol()
end
end
if(tipSize) then
post.Text ( "( Suggested Tip Size: " ,tipSize," ")
else
post.Text ( "(")
end
if(dthcDelay) then
if(dthcDelay > 0 ) then
post.Text ( " DTHC Delay: " ,dthcDelay," sec ) ")
post.Eol()
else
post.Text ( ", Default DTHC Delay )")
post.Eol()
end
else
post.Text ( ")")
post.Eol()
end
if (toolClass == "MarkerTool" ) then
ThcOff()
if(scriberAxis and scriberAxis ~= currentZAxis) then
endZ = safeZ
OnRapid()
currentZAxis = scriberAxis
end
firstRef = true
else --tool is not a marker
if(scriberAxis and scriberAxis == currentZAxis) then
endZ = safeZ
OnRapid()
currentZAxis = "Z"
end
if(dthcOff == 0) then
post.Text (" S999 \n")
post.Text (" M22 \n")
else
post.Text (" S900 \n")
post.Text (" M22 \n")
end
if(presetVolts) then
if(presetVolts) > 0 then
post.Text ( " S3" ,presetVolts, "\n" )
post.Text (" M22 ")
post.Eol()
else
post.Text ( "(No Preset Volts)\n" )
end
end
if(presetAmps) then
if(presetAmps > 0) then
post.Text( " S4" ,presetAmps, "\n")
post.Text (" M22 ")
post.Eol()
else
post.Text("(No Preset Amps)")
post.Eol()
end
end
if(presetPSI) then
if(presetPSI > 0) then
post.Text( " S8" ,presetPSI, "\n")
post.Text (" M22 ")
post.Eol()
else
post.Text("(Default Air Pressure)")
post.Eol()
end
end
if(dthcDelay) then
if(dthcDelay > 0 ) then
post.Text ( " S5")
post.Number (dthcDelay * 10, "00")
post.Eol()
post.Text (" M22 \n")
end
end
offX = 0
offY = 0
offZ = 0
post.Text (" M00")
post.Text ("(Check the DTHC Settings Hit RUN to continue)\n")
end --end for marker if
end --end for toolchangefunction
-- OnRapid()
-- end
function OnNewPart()
post.Text(" (Part: ",partName,")\n");
end
function OnDrill()
OnRapid()
OnPenDown()
endZ = drillZ
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
end
A sub program does save space but Mach can handle huge files so it is a bit of a moot point. Try this version of OnDrill():
function OnDrill()
if toolClass == "MarkerTool" then
local ex = endY
local ey = endY
local siz = 6 / 2 --cross size is 6mm
endX = ex + siz
OnRapid()
OnPenDown()
endZ = cutHeight
OnMove()
endX = ex - siz
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
endX = ex
endY = ey + siz
OnRapid()
OnPenDown()
endZ = cutHeight
OnMove()
endY = ey - siz
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
return
end
OnRapid()
OnPenDown()
endZ = drillZ
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
end
This is untested but unless I’ve made a silly mistake it should mark a cross whenever you use a drill operation with a scriber tool.
I just run a test job, your OnDrill() version works, I love the solution to use drill operation with plate marker,
no more extra sketching in CAD…
yes, there is a small typo on second line in function:
"local ex = endY " should be “local ex = endX”
before correction - plate marker performed nonsense.
DONE.
now, the intriguing part is when plate marker goes for the very FIRST HORIZONTAL line
on the first cross mark - it does it TWICE, back and forth on the same line, then moves on
and continues fine on next cross marks… Why ???
UPDATE minutes later:
I just run it again, watched it closely and realized, that marker does not repeat the initial line in first cross twice,
but starts in the middle of the first hole, goes 3mm right, then 6mm left and so on…
Sorry about the typo. The odd first mark is happening because I didn’t take referencing into account. This should fix it:
function OnDrill()
if toolClass == "MarkerTool" then
local ex = endX
local ey = endY
local siz = 6 / 2 --cross size is 6mm
endX = ex + siz
OnRapid()
currentX = endX
currentY = endY
OnPenDown()
Just tested, this one is flawless!
Very very useful… we deserve a beer now…
For anyone else tired of drilling after plasma pierced holes,
here is the OnDrill() function crafted to perfection by Les Newell:
function OnDrill()
if toolClass == "MarkerTool" then
local ex = endX
local ey = endY
local siz = 6 / 2 --cross size is 6mm
endX = ex + siz
OnRapid()
currentX = endX
currentY = endY
OnPenDown()
endZ = cutHeight
OnMove()
endX = ex - siz
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
endX = ex
endY = ey + siz
OnRapid()
OnPenDown()
endZ = cutHeight
OnMove()
endY = ey - siz
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
return
end
OnRapid()
OnPenDown()
endZ = drillZ
OnMove()
OnPenUp()
endZ = safeZ
OnRapid()
end
As a thought would it not be better to create the entire X mark in one operation rather than breaking it up into 2 functions. Lower the scribe one time run the X code then raise the scriber.
As is you are lowering the scriber , scribe one line then raise the scriber , then lower the scribet again to do the next line.
You may also want to adjust the feedrate for the scribing.
As it is done at the moment, that’s exactly how I wanted the function to behave…
Two clean separate precise lines with fine marker tip without extra sketching in cad.
Version of cross mark in one pass looks little different - as you gotta follow part of it twice of course.
I didn’t expect anybody here except Les pays proper attention to code sections, I appreciate it.
What feedrate (metric of course) for scribing do you suggest from your own experience?
Especially for precise cross marks and bend lines - that’s what I care about most…
I tried 1000, seems little nicer so far…
Also, to be super honest:
I consider plate marker to be most painful part on plasma table and I am not talking about number
of demo videos on youtube, people showing off their logos, artwork, some serial numbers on parts etc.
Painful because: once you install that vicious bugger on your gantry it will show you almost EVERYTHING you messed
on the table as a “mechanical engineer” - not that I am one…
Suddenly all minor details matter once you expect plate marker to position proper center marks, bend lines, marks for alignment etc.
Even for the smallest “play” in Z axis you WILL be punished, magnetic break-away torch holder will teach you a lesson,
you will finally understand the practical meaning of the word “backlash”, you will appreciate linear guides - which you did not use,
the fact you didn’t need gantry squaring until now and list goes on and on…
All you gotta do is to let the scribe to “draw” you a large square (1x1m) which resembles measuring tape on all sides,
then compare the result with precision steel rule (make sure you are alone in the shop) and let it amuse you…
Bottom line:
From my experience, I like to call the precision plate marker on your plasma table a “truth teller”…
It will open your eyes, make you a better fabricator and if you are serious about your business - it may force you to
build another table where you WILL pay attention to all details…
Anyways… I’m done for tonight - no more sheet metal stories, till next time.