--************************************************ --*** Set these values up to suit your machine *** --************************************************ --this is the distance between each torch reference in MILLIMETRES refDistance = 100 --Put your switch offset value here in MILLIMETRES switchOffset = 1.5 --The cutter will slow down for corners and turn off THC below this radius slowRadius = 10 --Minimum slow down speed. --This is a scale factor. For instance 0.5 = 50% of the current feed rate slowPercent = 0.4 --THC on and off codes. Use nil if you don't want THC control e.g: -- thcOnCode = nil -- thcOffCode = nil --here is another example that use M667 and M666 --thcOnCode = " M667" --thcOffCode = " M666" thcOnCode = nil thcOffCode = nil --This is the code to seek the top of the work seekCode=" G38.2 Z-1.75 F10" --You only need to set these if you are using a scriber --Scriber X,Y,Z offsets in MILLIMETRES. Do not use inches here even if you want inch code --Use the special code 'nil' on the Z axis to disable it. --In that case no Z values will be output at all while scribing. --e.g scriberZ = nil scriberX = 110 scriberY = 220 scriberZ = 0 --scriber axis. Leave this as nil if the scriber is fixed to the same axis as the torch --scriberAxis = "A" scriberAxis = nil --************************************************ --*** End of settings *** --************************************************ function OnAbout(event) ctrl = event:GetTextCtrl() ctrl:AppendText("LinuxCNC plasma THC post processor with engraver\n") 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 500mm of movement thereafter\n") ctrl:AppendText("Designed for use with Mach3 and CandCNC MP1000-THC 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") end -- created 1/1/06 -- Based on plasma1.post -- 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. 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) function OnInit() offX = 0 offY = 0 offZ = 0 lineNumber = 10 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") minArcSize = 0.2 --arcs smaller than this are converted to moves firstRef = true currentZAxis = "Z" dist = 9999999 lastz = 0 thcstate = 1 ThcOff() end function OnNewLine() post.Text ("N") post.Number (lineNumber, "0000") lineNumber = lineNumber + 10 end function OnFinish() post.Text(" G92.1\n") endZ = safeZ OnRapid() endX = 0 endY = 0 offX = 0 offY = 0 offZ = 0 OnRapid() post.Text (" M05 M30\n") end function OnRapid() if(endX > 1e17 and endY > 1e17) then return end local len = math.hypot((endX + offX)-currentX , (endY + offY)-currentY) dist = dist + len post.ModalText (" G00") post.ModalNumber (" X", (endX + offX) * scale, "0.0000") post.ModalNumber (" Y", (endY + offY) * scale, "0.0000") if(offZ and firstRef == false and currentZ ~= safeZ) then post.ModalNumber (" " .. currentZAxis, (endZ + offZ) * scale, "0.0000") end post.Eol() end function OnMove() local len = math.hypot(endX - currentX , endY - currentY) dist = dist + len if(len > slowRadius) then ThcOn() end post.ModalText (" G01") post.ModalNumber (" X", (endX + offX) * scale, "0.0000") post.ModalNumber (" Y", (endY + offY) * scale, "0.0000") if(offZ) then post.ModalNumber (" " .. currentZAxis, (endZ + offZ) * 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 ThcOn() 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") if(offZ) then post.ModalNumber (" " .. currentZAxis, (endZ + offZ) * scale, "0.0000") end 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(" (THC off)\n"); end end function ThcOn() if(not thcOnCode) then return end if(toolClass == "MarkerTool") or tool > 99 then return end if(thcstate ==0) then thcstate = 1 post.Text(thcOnCode) post.Text(" (THC on)\n"); return end if(thcstate == 2) then thcstate = 0 end end function OnPenDown() if(toolClass == "MarkerTool") or tool > 99 then if (firstRef) then Reference() post.ModalText (" G00") post.Text(" Z") post.Number (safeZ * scale, "0.0000") post.Eol() offX = scriberX offY = scriberY offZ = scriberZ post.ModalNumber (" X", (currentX + offX) * scale, "0.0000") post.ModalNumber (" Y", (currentY + offY) * scale, "0.0000") post.Eol() end if (offZ) then post.ModalNumber (" " .. currentZAxis, (currentZ + offZ) * scale, "0.0000") post.Eol() end post.Text(" M08\n") else if(dist >= refDistance) then dist = 0 Reference(); end post.ModalText (" G00") post.Text(" Z") post.Number (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 = 2 --leave THC off for plunge move end function Reference() firstRef = false post.Text(seekCode .. "\n") post.ModalText(" G92 Z") post.Number(-switchOffset * scale, "0.0###") post.Eol() post.CancelModalNumbers() end function OnPenUp() if(tool > 99) 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") end function OnToolChange() if (toolClass == "MarkerTool" or tool > 99 ) then ThcOff() if(scriberAxis and scriberAxis ~= currentZAxis) then endZ = safeZ OnRapid() currentZAxis = scriberAxis end if(firstRef ~= true) then offX = scriberX offY = scriberY offZ = scriberZ end else if(scriberAxis and scriberAxis == currentZAxis) then endZ = safeZ OnRapid() currentZAxis = "Z" end offX = 0 offY = 0 offZ = 0 end end function OnNewPart() post.Text(" (Part: ",partName,")\n"); end function OnDrill() OnRapid() currentX = endX currentY = endY OnPenDown() endZ = drillZ OnMove() OnPenUp() endZ = safeZ OnRapid() end