Hi Fellas,
- I recently installed plate marker on plasma table and it works “fine”, marker is attached to the same Z axis as plasma torch,
however I attempted to run 1x1 meter plate marker JOB ONLY and I realized that once NO PLASMA operation
is involved, sheetcam post ignores my setting “refDistance = 250” and performs touch off G28 only at start, then no more…
I even tried to create separate operations on multiple layers in sheetcam - still I get only initial touch off.
I simply need plate marker to act just like plasma would on large jobs, ref Z with Feather Touch Ohmic Sensor every 250mm before next operation.
How do I change this behavior when doing plate marker job only?
How do I edit the post or am I missing some secret settings?
- I did use FESTO double acting pneumatic slide cylinder (hence not rigid mount), however I mounted ELECTRIC engraver from DREMEL on it.
The point is: Tips for the engraver are 2.4mm diameter, so we can take all scrap TIG tungstens and sharpen them with NEUTRIX electrode grinder,
this way we can ABUSE the engraver how much we want without worrying about pricey replacement tips for pneumatic scribe…
The final sharpened “TIG tip” on the engraver is very fine, making hair-like thin lines - great for high precision marks on plates, however even with the lowest possible
pressure for cylinder, due to higher weight of the engraver, it gets too deep into the plate and the lines and marks are not so perfect afterwards - even 2-3 mm difference matters…
For now I just FORCED touch offs my own way in sheetcam:
- I created multiple layers and operations in sheetcam and insert in each segment PLASMA DRILL operation within desired radius
- with plasma machine OFF, it will reference Z before pierce, relay in PWM clicks and does NOT WAIT for arc ok signal, then moves on to plate marker operation and so on…
- to create initial job file is a great waste of time, so I need to edit the post to FORCE touch offs without creating separate layers and operations for plasma drill.
- I asked CandCNC guys for help - I was advised to look into “OnPenDown” function in post, but I am unable to fix the post on my own.
here is the original reply from CandCNC:
“That is how it is programmed in the POST because with a pneumatic plate marker where the marker is extended with the air,
you can vary by over an inch in height with no need for a touch off. The first touch off is simply to establish the Z to be able to raise the torch out of the way.”
“You can have a look at the ON PEN DOWN function int he POST and see where it checks to see what kind of tool it is using and the rules it applies.
It call a reference you simply call that function as “Reference()” in code. Note that it tests to see if its the first reference and runs the reference and does the XYZ offsets.
The normal code runs a variable that keeps track of the XY moves and when it sees it is greater than the setting will do a reference but that is in plasma tools.”
I attached the post I am trying to edit to this topic, I would like to ask Les or any of you guys very kindly for help,
again - I need to force plate marker to perform Z reference every 250mm just like plasma operation would.
Thank you very much in advance for any guidance.
Miro.
System: CandCNC BladeRunner 620-5, DTHCII, UBOB III rev12
Z axis: Feather Touch Ohmic Sensor
Post: MP3000-DTHCII-DCC+scriber6.scpost (see attachment)
--************************************************
--*** 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