/** Copyright (C) 2019 by DrufelCNC All rights reserved. */ description = "DrufelCNC"; vendor = "DrufelCNC"; vendorUrl = "http://www.drufelcnc.com"; legal = "Copyright (C) 2019 by DrufelCNC"; certificationLevel = 2; longDescription = "Generic milling post for DrufelCNC."; extension = "tap"; setCodePage("ansi"); capabilities = CAPABILITY_MILLING; var spindleAxisTable = new Table(["X", "Y", "Z"], {force:true}); var radiusCompensationTable = new Table( [" R0", " RL", " RR"], {initial:RADIUS_COMPENSATION_OFF}, "Invalid radius compensation" ); var xyzFormat = createFormat({decimals:(unit == MM ? 4 : 4), forceSign:true,scale:(unit == MM ? 1 : 25.4)}); var feedFormat = createFormat({decimals:(unit == MM ? 0 : 2), scale:(unit == MM ? 1 : 25.4)}); var rpmFormat = createFormat({decimals:0}); var mFormat = createFormat({prefix:"M", decimals:0}); var gFormat = createFormat({prefix:"G", decimals:0}); var xOutput = createVariable({prefix:" X"}, xyzFormat); var yOutput = createVariable({prefix:" Y"}, xyzFormat); var zOutput = createVariable({prefix:" Z"}, xyzFormat); var feedOutput = createVariable({prefix:" F"}, feedFormat); var rpmOutput = createVariable({prefix:" S"}, rpmFormat); var blockNumber = 0; /** Writes the specified block. */ function writeBlock(block) { writeln(block); ++blockNumber; } function onOpen() { writeBlock( "(DrufelCNC from Fusion 360" + (programName ? (" program="+programName) : "") + ((unit == MM) ? " MM" : " From INCH to MM")+")" ); writeBlock(gFormat.format(90)); writeBlock(mFormat.format(3)+rpmOutput.format(24000)); // spindle on - clockwise machineConfiguration.setRetractPlane(-1.0); // safe machine retract plane (M91) } /** Invalidates the current position and feedrate. Invoke this function to force X, Y, Z, and F in the following block. */ function invalidate() { xOutput.reset(); yOutput.reset(); zOutput.reset(); feedOutput.reset(); } function onSection() { var retracted = true; writeBlock( mFormat.format(3) + rpmOutput.format(tool.spindleRPM) ); setTranslation(currentSection.workOrigin); setRotation(currentSection.workPlane); invalidate(); var initialPosition = getFramePosition(currentSection.getInitialPosition()); if (!retracted) { if (getCurrentPosition().z < initialPosition.z) { writeBlock(gFormat.format(0) + zOutput.format(initialPosition.z)); } } writeBlock(gFormat.format(0) + xOutput.format(initialPosition.x) + yOutput.format(initialPosition.y) + zOutput.format(initialPosition.z)); } function onRapid(x, y, z) { var xyz = xOutput.format(x) + yOutput.format(y) + zOutput.format(z); if (xyz) { writeBlock(gFormat.format(0) + xyz); feedOutput.reset(); } } function onLinear(x, y, z, feed) { var xyz = xOutput.format(x) + yOutput.format(y) + zOutput.format(z); var f = feedOutput.format(feed); if (xyz) { writeBlock(gFormat.format(1) + xyz + f); } } function onSectionEnd() { // full retract in machine coordinate system var initialPosition = getFramePosition(currentSection.getInitialPosition()); var z =xOutput.format(initialPosition.z) if (z)writeBlock(gFormat.format(0) + z); writeBlock(mFormat.format(5)); var xy =xOutput.format(initialPosition.x) + yOutput.format(initialPosition.y); if (xy)writeBlock(gFormat.format(0) + xy); invalidate(); } function onClose() { writeBlock(mFormat.format(30)); // stop program, spindle stop, coolant off writeBlock( "(End " + (programName ? (" program " + programName) : "") + ((unit == MM) ? " MM" : " INCH")+")" ); }