Monday, January 13, 2025

G2 Code for Arcs and Circles

 I have been battling gCode's fairly complex scheme for turning arcs and cirxcles.  This bash script produces gCode to cut a circle centered in a biounding box specified byn the first four values, starting at z cutting circles at specified step size at the specified feed rate for a hole of specified size and mill diamete.  There are a lot of intermediate steps there m ostly for debugging but likely useful for understanding the process.

#!/bin/bash

# Cut an interior circle starting at xStartBB yStartBB xEndBB yEndBB zStart zStep zEnd feedRate holeDiameter endMillDiameter

# BB is short for BoundingBox

if [ "$#" -eq 0 ];

    then echo "$0 xBB yBB xEndBB yEndBB zStart stepZ endZ feedRate holeDiameter endMillDiameter"

else

xStartBB=$1

yStartBB=$2

xEndBB=$3

yEndBB=$4

startZ=$5

stepZ=$6

endZ=$7

feedRate=$8

holeDiameter=$9

endMillDiameter=${10}

millRadius=`echo "$endMillDiameter/2"|bc -l`

# Calculate starting cut points

echo $xEndBB $xStartBB $holeDiameter

center=`echo "(($xEndBB-$xStartBB)/2)"|bc -l`

offset=`echo "((($xEndBB-$xStartBB)-($holeDiameter))/2)"|bc -l`

        startXCut=`echo "$xStartBB+$offset+$millRadius"|bc -l`

startYCut=`echo "($yEndBB-$yStartBB)/2"|bc -l`

endYCut=$startYCut

endXCut=`echo "$yEndBB - $offset - $millRadius"|bc -l`

# calculate radius for i

i=`echo "($center-$startXCut)"|bc -l`

cat prolog.nc >rotate.nc

echo "g1 z1.0 f$feedRate" >>rotate.nc

echo "g1 x$startXCut y$startYCut f$feedRate" >>rotate.nc

echo "g1 z$startZ y$startYCut f$feedRate" >>rotate.nc

newstartZ=`echo "$startZ+$stepZ"|bc -l`

for curZ in `seq $newstartZ $stepZ $endZ`

do

    echo "g1 z$curZ f$feedRate" >>rotate.nc

    echo "g2 x$endXCut y$endYCut i$i j0 f$feedRate" >>rotate.nc

    echo "x$startXCut y$startYCut j0 i-$i" >>rotate.nc

done

echo "g1 z1.0 f$feedRate" >>rotate.nc

cat epilog.nc >>rotate.nc

fi

The two external files are prolog.nc

%

g17 g20 g54

and epilog.nc

 m2

%



No comments:

Post a Comment