That's exactly how I want it, thank you Vmax.
I actually never edit anything under settings section in my post, but I am eager to learn...
Thank you very very much.
Code: Select all
--************************************************
--*** 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