The Canadian Hack

Share and learn with other DIY members who have built their own plasma tables and accessories.
robertspark
Elite Contributing Member
Elite Contributing Member
Posts: 1411
Joined: Mon Jun 12, 2017 6:43 pm

Re: The Canadian Hack

Post by robertspark » Wed Jul 21, 2021 3:24 am

Mr.Hotwire wrote:
Mon Jul 19, 2021 7:18 pm
BTW: I am using an IPTM-80 torch, with consumables for 30-40a (.09 oriface)
torch info Pg 16
https://www.google.com/url?sa=t&source= ... PwXUnPpvGd

air pressure adjustment
https://www.google.com/url?sa=t&source= ... pucRAcr5Sc

robertspark
Elite Contributing Member
Elite Contributing Member
Posts: 1411
Joined: Mon Jun 12, 2017 6:43 pm

Re: The Canadian Hack

Post by robertspark » Wed Jul 21, 2021 5:26 am

there are a couple of bugs / issues / gochas' in uccnc (hence I no longer use it and am / have painstakingly switched to linuxcnc). you won't get them changed / fixed / altered as I tried (gave up and moved on).

1) arc motion / more correctly circles..... uccnc prefers that you break the circles into quadrants as sometimes (in my experience) uccnc will occasionally skip circles. by changing the settings in sheetcam to break all circles into arcs then it will ALWAYS complete the motion. There is nothing negative to this.

open up sheetcam post processor, and within the section that says "function OnInit()", add the following line to the function

Code: Select all

   post.SetOptions(post.ARC_SEGMENTS) -- Arcs should never exceed 180 degree
it is discussed here:
http://www.forum.cncdrive.com/viewtopic ... TS+#p11604
http://www.forum.cncdrive.com/viewtopic ... bcd#p21145

2) arc motion + constant velocity.
This one you've not experienced yet (and it may not affect you or concern you).
there is a little issue (in my opinion) with the planner in uccnc that cncDrive are not going to do anything about. They were developing an S-curve acceleration planner and I was told that the issue would be "fixed" {be different} with that planner..... its never been released / developed as yet.

http://forum.cncdrive.com/viewtopic.php ... =20#p12710
and here a few days ago (maybe it will get some replies from cncDrive or the OP to confirm or not)
http://www.forum.cncdrive.com/viewtopic.php?f=2&t=3304

there are a couple of settings in uccnc that are critical to the planner, and how constant velocity is resolved.
Linear error max
Linear addition length
Linear Unify length
Corners error max


you need to read the uccnc user manual twice, three times until you understand the settings and their use.

the most important one (in my opinion) is Corners error max

you can set them on the fly via G64 settings (same as linuxcnc).
here is a plasma post processor that sets the G64 parameters relative to the kerf width.


The problem (with the planner) seems to be with ARC >> LINEAR \\ ARC >> ARC \\ LINEAR >> ARC motion where it "seems" {I don't know + am just guessing} that the planner cannot work out the optimum junction / slow down position to implement the corner error max setting so it over compensates.

consequence is you get undercutting and more dross than you should have, but the effect is a little minimal

It is just something to be aware of in case you come across it. + you won't be able the "fix" it and cncDrive won't "fix" it for you either.


3) ARCOK / Transfer + pierce delay (G4).
This one I was not aware of..... it did not affect me
it seems that the G4 delay will start counting from M3 and not from the ARCOK / Arc Transfer signal being received by the motion controller (why I have no idea!, can't see it being "fixed" though or changed by cncDrive).
There is a macro proposed here to get around the issue:
http://www.forum.cncdrive.com/viewtopic ... cro#p24124

robertspark
Elite Contributing Member
Elite Contributing Member
Posts: 1411
Joined: Mon Jun 12, 2017 6:43 pm

Re: The Canadian Hack

Post by robertspark » Wed Jul 21, 2021 5:31 am

can you post your sheetcam post processor that you are using?

you will need to copy the text and paste it within a </> code block. as it won't attach unless you change the extension.

Mr.Hotwire
Posts: 24
Joined: Mon Jun 07, 2021 10:49 am

Re: The Canadian Hack

Post by Mr.Hotwire » Wed Jul 21, 2021 5:56 pm

This is my Post :

Code: Select all

--************************************************
--*** Set these values up to suit your machine ***
--************************************************

--this is the distance between each torch reference in MILLIMETRES
refDistance = 1

--this is the reference feed rate in mm/min
refFeed = 2540

--Put your switch offset value here in MILLIMETRES
switchOffset = 7.61

--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

--If this value is set to true then use G28 (home) for the Z reference
--Set it to false for G31 probe
refHome = true

--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.6

--THC on and off codes. Use nil if you don't want THC control e.g:
-- thcOnCode = m205
-- thcOffCode = m206

--here is another example that use M667 and M666
--thcOnCode = " M205"
--thcOffCode = " M206"

thcOnCode = " M205 "
thcOffCode = " M206 "

--************************************************
--***           End of settings                ***
--************************************************



function OnAbout(event)
   ctrl = event:GetTextCtrl()
   ctrl:AppendText("UCCNC w/ MiniTHC Post\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 UCCNC with MiniTHC and Floating head\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.

-- Modified 21/7/2021
-- Changed: G31 Feed rate from 50 to 350
-- Fixed: Spelling errors
-- Added: Further command commenting 
 
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

   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()
   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 9(spindle on)\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 M213\n M03 (Torch on)\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
   if (refHome) then
        post.Text (" G31 F350 Z-50\n")
     -- 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(tool > 99) then
      post.Text(" M09\n")
   else
      post.Text (" M214\n M05 (Torch off)\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


function OnComment()
  post.Text(" (",commentText,")\n")
end

Mr.Hotwire
Posts: 24
Joined: Mon Jun 07, 2021 10:49 am

Re: The Canadian Hack

Post by Mr.Hotwire » Wed Jul 21, 2021 6:00 pm

Here is the latest test cut using the above post, with THC turned on.



The Cut height seems way too high.

Post Reply

Return to “DIY Plasma Table & Accessory Discussion Forum”

Industry Pros use FastCut CNC