Diff
checker
Text
Text
Images
Documents
Excel
Folders
Legal
Enterprise
Desktop
Pricing
Sign in
Download Diffchecker Desktop
Compare text
Find the difference between two text files
Tools
History
Real-time editor
Hide unchanged lines
Disable line wrap
Layout
Split
Unified
Diff precision
Smart
Word
Char
Syntax highlighting
Choose syntax
Ignore
Transform text
Go to first change
Edit input
Diffchecker Desktop
The most secure way to run Diffchecker. Get the Diffchecker Desktop app: your diffs never leave your computer!
Get Desktop
Untitled diff
Created
11 years ago
Diff never expires
Clear
Export
Share
Explain
52 removals
Lines
Total
Removed
Characters
Total
Removed
To continue using this feature, upgrade to
Diff
checker
Pro
View Pricing
793 lines
Copy
48 additions
Lines
Total
Added
Characters
Total
Added
To continue using this feature, upgrade to
Diff
checker
Pro
View Pricing
776 lines
Copy
/**
/**
Copyright (C) 2012-2014 by Autodesk, Inc.
Copyright (C) 2012-2014 by Autodesk, Inc.
All rights reserved.
All rights reserved.
Copy
Copied
Copy
Copied
Tormach
Mach3Mill
post processor configuration.
Tormach
Path Pilot
post processor configuration.
Copy
Copied
Copy
Copied
$Revision:
39140
$
$Revision:
37254
$
$Date: 201
5-06-10 14:13:32
+0200 (
on, 10 jun
201
5
) $
$Date: 201
4-05-26 11:17:00
+0200 (
ma, 26 maj
201
4
) $
FORKID {AE2102AB-B86A-4aa7-8E9B-F0B6935D4E9F}
FORKID {AE2102AB-B86A-4aa7-8E9B-F0B6935D4E9F}
*/
*/
Copy
Copied
Copy
Copied
//setWriteStack(true);
description = "Generic Tormach
Mach3Mill
";
description = "Generic Tormach
Path Pilot
";
vendor = "Autodesk, Inc.";
vendor = "Autodesk, Inc.";
vendorUrl = "http://www.autodesk.com";
vendorUrl = "http://www.autodesk.com";
legal = "Copyright (C) 2012-2014 by Autodesk, Inc.";
legal = "Copyright (C) 2012-2014 by Autodesk, Inc.";
certificationLevel = 2;
certificationLevel = 2;
minimumRevision = 24000;
minimumRevision = 24000;
extension = "TAP";
extension = "TAP";
setCodePage("ascii");
setCodePage("ascii");
tolerance = spatial(0.002, MM);
tolerance = spatial(0.002, MM);
minimumChordLength = spatial(0.01, MM);
minimumChordLength = spatial(0.01, MM);
minimumCircularRadius = spatial(0.01, MM);
minimumCircularRadius = spatial(0.01, MM);
maximumCircularRadius = spatial(1000, MM);
maximumCircularRadius = spatial(1000, MM);
minimumCircularSweep = toRad(0.01);
minimumCircularSweep = toRad(0.01);
maximumCircularSweep = toRad(180);
maximumCircularSweep = toRad(180);
allowHelicalMoves = true;
allowHelicalMoves = true;
allowedCircularPlanes = undefined; // allow any circular motion
allowedCircularPlanes = undefined; // allow any circular motion
// user-defined properties
// user-defined properties
properties = {
properties = {
writeMachine: true, // write machine
writeMachine: true, // write machine
writeTools: true, // writes the tools
writeTools: true, // writes the tools
useG28: true, // disable to avoid G28 output
useG28: true, // disable to avoid G28 output
useM6: true, // disable to avoid M6 output - preload is also disabled when M6 is disabled
useM6: true, // disable to avoid M6 output - preload is also disabled when M6 is disabled
preloadTool: false, // preloads next tool on tool change if any
preloadTool: false, // preloads next tool on tool change if any
showSequenceNumbers: true, // show sequence numbers
showSequenceNumbers: true, // show sequence numbers
sequenceNumberStart: 10, // first sequence number
sequenceNumberStart: 10, // first sequence number
sequenceNumberIncrement: 10, // increment for sequence numbers
sequenceNumberIncrement: 10, // increment for sequence numbers
optionalStop: true, // optional stop
optionalStop: true, // optional stop
separateWordsWithSpace: true, // specifies that the words should be separated with a white space
separateWordsWithSpace: true, // specifies that the words should be separated with a white space
useRadius: true, // specifies that arcs should be output using the radius (R word) instead of the I, J, and K words.
useRadius: true, // specifies that arcs should be output using the radius (R word) instead of the I, J, and K words.
dwellInSeconds: true // specifies the unit for dwelling: true:seconds and false:milliseconds.
dwellInSeconds: true // specifies the unit for dwelling: true:seconds and false:milliseconds.
};
};
var permittedCommentChars = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,=_-";
var permittedCommentChars = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,=_-";
var mapCoolantTable = new Table(
var mapCoolantTable = new Table(
[9, 8, 7],
[9, 8, 7],
{initial:COOLANT_OFF, force:true},
{initial:COOLANT_OFF, force:true},
"Invalid coolant mode"
"Invalid coolant mode"
);
);
var nFormat = createFormat({prefix:"N", decimals:0});
var nFormat = createFormat({prefix:"N", decimals:0});
var gFormat = createFormat({prefix:"G", decimals:1});
var gFormat = createFormat({prefix:"G", decimals:1});
var mFormat = createFormat({prefix:"M", decimals:0});
var mFormat = createFormat({prefix:"M", decimals:0});
var hFormat = createFormat({prefix:"H", decimals:0});
var hFormat = createFormat({prefix:"H", decimals:0});
var dFormat = createFormat({prefix:"D", decimals:0});
var dFormat = createFormat({prefix:"D", decimals:0});
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceDecimal:true});
var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceDecimal:true});
var rFormat = xyzFormat; // radius
var rFormat = xyzFormat; // radius
var abcFormat = createFormat({decimals:3, forceDecimal:true, scale:DEG});
var abcFormat = createFormat({decimals:3, forceDecimal:true, scale:DEG});
var feedFormat = createFormat({decimals:(unit == MM ? 0 : 1), forceDecimal:true});
var feedFormat = createFormat({decimals:(unit == MM ? 0 : 1), forceDecimal:true});
var toolFormat = createFormat({decimals:0});
var toolFormat = createFormat({decimals:0});
var rpmFormat = createFormat({decimals:0});
var rpmFormat = createFormat({decimals:0});
var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-99999.999
var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-99999.999
var milliFormat = createFormat({decimals:0}); // milliseconds // range 1-9999
var milliFormat = createFormat({decimals:0}); // milliseconds // range 1-9999
var taperFormat = createFormat({decimals:1, scale:DEG});
var taperFormat = createFormat({decimals:1, scale:DEG});
var xOutput = createVariable({prefix:"X"}, xyzFormat);
var xOutput = createVariable({prefix:"X"}, xyzFormat);
var yOutput = createVariable({prefix:"Y"}, xyzFormat);
var yOutput = createVariable({prefix:"Y"}, xyzFormat);
var zOutput = createVariable({prefix:"Z"}, xyzFormat);
var zOutput = createVariable({prefix:"Z"}, xyzFormat);
var aOutput = createVariable({prefix:"A"}, abcFormat);
var aOutput = createVariable({prefix:"A"}, abcFormat);
var bOutput = createVariable({prefix:"B"}, abcFormat);
var bOutput = createVariable({prefix:"B"}, abcFormat);
var cOutput = createVariable({prefix:"C"}, abcFormat);
var cOutput = createVariable({prefix:"C"}, abcFormat);
var feedOutput = createVariable({prefix:"F"}, feedFormat);
var feedOutput = createVariable({prefix:"F"}, feedFormat);
var sOutput = createVariable({prefix:"S", force:true}, rpmFormat);
var sOutput = createVariable({prefix:"S", force:true}, rpmFormat);
var dOutput = createVariable({}, dFormat);
var dOutput = createVariable({}, dFormat);
// circular output
// circular output
var iOutput = createReferenceVariable({prefix:"I", force:true}, xyzFormat);
var iOutput = createReferenceVariable({prefix:"I", force:true}, xyzFormat);
var jOutput = createReferenceVariable({prefix:"J", force:true}, xyzFormat);
var jOutput = createReferenceVariable({prefix:"J", force:true}, xyzFormat);
var kOutput = createReferenceVariable({prefix:"K", force:true}, xyzFormat);
var kOutput = createReferenceVariable({prefix:"K", force:true}, xyzFormat);
var gMotionModal = createModal({force:true}, gFormat); // modal group 1 // G0-G3, ...
var gMotionModal = createModal({force:true}, gFormat); // modal group 1 // G0-G3, ...
var gPlaneModal = createModal({onchange:function () {gMotionModal.reset();}}, gFormat); // modal group 2 // G17-19
var gPlaneModal = createModal({onchange:function () {gMotionModal.reset();}}, gFormat); // modal group 2 // G17-19
var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91
var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91
var gFeedModeModal = createModal({}, gFormat); // modal group 5 // G93-94
var gFeedModeModal = createModal({}, gFormat); // modal group 5 // G93-94
var gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21
var gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21
Copy
Copied
Copy
Copied
var gCycleModal = createModal({
}, gFormat); // modal group 9 // G81, ...
var gCycleModal = createModal({
force:false
}, gFormat); // modal group 9 // G81, ...
var gRetractModal = createModal({
}, gFormat); // modal group 10 // G98-99
var gRetractModal = createModal({
force:true
}, gFormat); // modal group 10 // G98-99
var WARNING_WORK_OFFSET = 0;
var WARNING_WORK_OFFSET = 0;
// collected state
// collected state
var sequenceNumber;
var sequenceNumber;
var currentWorkOffset;
var currentWorkOffset;
Copy
Copied
Copy
Copied
var previousCoolantMode;
/**
/**
Writes the specified block.
Writes the specified block.
*/
*/
function writeBlock() {
function writeBlock() {
if (properties.showSequenceNumbers) {
if (properties.showSequenceNumbers) {
writeWords2(nFormat.format(sequenceNumber % 100000), arguments);
writeWords2(nFormat.format(sequenceNumber % 100000), arguments);
sequenceNumber += properties.sequenceNumberIncrement;
sequenceNumber += properties.sequenceNumberIncrement;
} else {
} else {
writeWords(arguments);
writeWords(arguments);
}
}
}
}
/**
/**
Output a comment.
Output a comment.
*/
*/
function writeComment(text) {
function writeComment(text) {
writeln("(" + filterText(String(text).toUpperCase(), permittedCommentChars) + ")");
writeln("(" + filterText(String(text).toUpperCase(), permittedCommentChars) + ")");
}
}
function onOpen() {
function onOpen() {
if (false) {
if (false) {
var aAxis = createAxis({coordinate:0, table:true, axis:[-1, 0, 0], cyclic:true, preference:1});
var aAxis = createAxis({coordinate:0, table:true, axis:[-1, 0, 0], cyclic:true, preference:1});
machineConfiguration = new MachineConfiguration(aAxis);
machineConfiguration = new MachineConfiguration(aAxis);
setMachineConfiguration(machineConfiguration);
setMachineConfiguration(machineConfiguration);
optimizeMachineAngles2(1); // map tip mode
optimizeMachineAngles2(1); // map tip mode
}
}
if (!machineConfiguration.isMachineCoordinate(0)) {
if (!machineConfiguration.isMachineCoordinate(0)) {
aOutput.disable();
aOutput.disable();
}
}
if (!machineConfiguration.isMachineCoordinate(1)) {
if (!machineConfiguration.isMachineCoordinate(1)) {
bOutput.disable();
bOutput.disable();
}
}
if (!machineConfiguration.isMachineCoordinate(2)) {
if (!machineConfiguration.isMachineCoordinate(2)) {
cOutput.disable();
cOutput.disable();
}
}
if (!properties.separateWordsWithSpace) {
if (!properties.separateWordsWithSpace) {
setWordSeparator("");
setWordSeparator("");
}
}
sequenceNumber = properties.sequenceNumberStart;
sequenceNumber = properties.sequenceNumberStart;
writeln("%");
writeln("%");
Copy
Copied
Copy
Copied
writeln("(*********************************************************)");
writeln("(* Tormach Path Pilot Post Processsor Version 0.4 Debug *)");
writeln("(*********************************************************)");
if (programName) {
if (programName) {
writeComment(programName);
writeComment(programName);
}
}
if (programComment) {
if (programComment) {
writeComment(programComment);
writeComment(programComment);
}
}
// dump machine configuration
// dump machine configuration
var vendor = machineConfiguration.getVendor();
var vendor = machineConfiguration.getVendor();
var model = machineConfiguration.getModel();
var model = machineConfiguration.getModel();
var description = machineConfiguration.getDescription();
var description = machineConfiguration.getDescription();
if (properties.writeMachine && (vendor || model || description)) {
if (properties.writeMachine && (vendor || model || description)) {
writeComment(localize("Machine"));
writeComment(localize("Machine"));
if (vendor) {
if (vendor) {
writeComment(" " + localize("vendor") + ": " + vendor);
writeComment(" " + localize("vendor") + ": " + vendor);
}
}
if (model) {
if (model) {
writeComment(" " + localize("model") + ": " + model);
writeComment(" " + localize("model") + ": " + model);
}
}
if (description) {
if (description) {
writeComment(" " + localize("description") + ": " + description);
writeComment(" " + localize("description") + ": " + description);
}
}
}
}
// dump tool information
// dump tool information
if (properties.writeTools) {
if (properties.writeTools) {
var zRanges = {};
var zRanges = {};
if (is3D()) {
if (is3D()) {
var numberOfSections = getNumberOfSections();
var numberOfSections = getNumberOfSections();
for (var i = 0; i < numberOfSections; ++i) {
for (var i = 0; i < numberOfSections; ++i) {
var section = getSection(i);
var section = getSection(i);
var zRange = section.getGlobalZRange();
var zRange = section.getGlobalZRange();
var tool = section.getTool();
var tool = section.getTool();
if (zRanges[tool.number]) {
if (zRanges[tool.number]) {
zRanges[tool.number].expandToRange(zRange);
zRanges[tool.number].expandToRange(zRange);
} else {
} else {
zRanges[tool.number] = zRange;
zRanges[tool.number] = zRange;
}
}
}
}
}
}
var tools = getToolTable();
var tools = getToolTable();
if (tools.getNumberOfTools() > 0) {
if (tools.getNumberOfTools() > 0) {
for (var i = 0; i < tools.getNumberOfTools(); ++i) {
for (var i = 0; i < tools.getNumberOfTools(); ++i) {
var tool = tools.getTool(i);
var tool = tools.getTool(i);
var comment = "T" + toolFormat.format(tool.number) + " " +
var comment = "T" + toolFormat.format(tool.number) + " " +
"D=" + xyzFormat.format(tool.diameter) + " " +
"D=" + xyzFormat.format(tool.diameter) + " " +
localize("CR") + "=" + xyzFormat.format(tool.cornerRadius);
localize("CR") + "=" + xyzFormat.format(tool.cornerRadius);
if ((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) {
if ((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) {
comment += " " + localize("TAPER") + "=" + taperFormat.format(tool.taperAngle) + localize("deg");
comment += " " + localize("TAPER") + "=" + taperFormat.format(tool.taperAngle) + localize("deg");
}
}
if (zRanges[tool.number]) {
if (zRanges[tool.number]) {
comment += " - " + localize("ZMIN") + "=" + xyzFormat.format(zRanges[tool.number].getMinimum());
comment += " - " + localize("ZMIN") + "=" + xyzFormat.format(zRanges[tool.number].getMinimum());
}
}
comment += " - " + getToolTypeName(tool.type);
comment += " - " + getToolTypeName(tool.type);
writeComment(comment);
writeComment(comment);
}
}
}
}
}
}
if (false) {
if (false) {
// check for duplicate tool number
// check for duplicate tool number
for (var i = 0; i < getNumberOfSections(); ++i) {
for (var i = 0; i < getNumberOfSections(); ++i) {
var sectioni = getSection(i);
var sectioni = getSection(i);
var tooli = sectioni.getTool();
var tooli = sectioni.getTool();
for (var j = i + 1; j < getNumberOfSections(); ++j) {
for (var j = i + 1; j < getNumberOfSections(); ++j) {
var sectionj = getSection(j);
var sectionj = getSection(j);
var toolj = sectionj.getTool();
var toolj = sectionj.getTool();
if (tooli.number == toolj.number) {
if (tooli.number == toolj.number) {
if (xyzFormat.areDifferent(tooli.diameter, toolj.diameter) ||
if (xyzFormat.areDifferent(tooli.diameter, toolj.diameter) ||
xyzFormat.areDifferent(tooli.cornerRadius, toolj.cornerRadius) ||
xyzFormat.areDifferent(tooli.cornerRadius, toolj.cornerRadius) ||
abcFormat.areDifferent(tooli.taperAngle, toolj.taperAngle) ||
abcFormat.areDifferent(tooli.taperAngle, toolj.taperAngle) ||
(tooli.numberOfFlutes != toolj.numberOfFlutes)) {
(tooli.numberOfFlutes != toolj.numberOfFlutes)) {
error(
error(
subst(
subst(
localize("Using the same tool number for different cutter geometry for operation '%1' and '%2'."),
localize("Using the same tool number for different cutter geometry for operation '%1' and '%2'."),
sectioni.hasParameter("operation-comment") ? sectioni.getParameter("operation-comment") : ("#" + (i + 1)),
sectioni.hasParameter("operation-comment") ? sectioni.getParameter("operation-comment") : ("#" + (i + 1)),
sectionj.hasParameter("operation-comment") ? sectionj.getParameter("operation-comment") : ("#" + (j + 1))
sectionj.hasParameter("operation-comment") ? sectionj.getParameter("operation-comment") : ("#" + (j + 1))
)
)
);
);
return;
return;
}
}
}
}
}
}
}
}
}
}
// absolute coordinates and feed per min
// absolute coordinates and feed per min
writeBlock(gAbsIncModal.format(90), gFormat.format(54), gFormat.format(64), gFormat.format(50), gPlaneModal.format(17), gFormat.format(40), gFormat.format(80), gFeedModeModal.format(94), gFormat.format(91.1), gFormat.format(49));
writeBlock(gAbsIncModal.format(90), gFormat.format(54), gFormat.format(64), gFormat.format(50), gPlaneModal.format(17), gFormat.format(40), gFormat.format(80), gFeedModeModal.format(94), gFormat.format(91.1), gFormat.format(49));
switch (unit) {
switch (unit) {
case IN:
case IN:
Copy
Copied
Copy
Copied
writeBlock(gUnitModal.format(20)
);
writeBlock(gUnitModal.format(20)
, "(Inch)"
);
break;
break;
case MM:
case MM:
Copy
Copied
Copy
Copied
writeBlock(gUnitModal.format(21)
);
writeBlock(gUnitModal.format(21)
, "(Metric)"
);
break;
break;
}
}
}
}
function onComment(message) {
function onComment(message) {
var comments = String(message).split(";");
var comments = String(message).split(";");
for (comment in comments) {
for (comment in comments) {
writeComment(comments[comment]);
writeComment(comments[comment]);
}
}
}
}
/** Force output of X, Y, and Z. */
/** Force output of X, Y, and Z. */
function forceXYZ() {
function forceXYZ() {
xOutput.reset();
xOutput.reset();
yOutput.reset();
yOutput.reset();
zOutput.reset();
zOutput.reset();
}
}
/** Force output of A, B, and C. */
/** Force output of A, B, and C. */
function forceABC() {
function forceABC() {
aOutput.reset();
aOutput.reset();
bOutput.reset();
bOutput.reset();
cOutput.reset();
cOutput.reset();
}
}
/** Force output of X, Y, Z, A, B, C, and F on next output. */
/** Force output of X, Y, Z, A, B, C, and F on next output. */
function forceAny() {
function forceAny() {
forceXYZ();
forceXYZ();
forceABC();
forceABC();
feedOutput.reset();
feedOutput.reset();
}
}
var currentWorkPlaneABC = undefined;
var currentWorkPlaneABC = undefined;
function forceWorkPlane() {
function forceWorkPlane() {
currentWorkPlaneABC = undefined;
currentWorkPlaneABC = undefined;
}
}
function setWorkPlane(abc) {
function setWorkPlane(abc) {
if (!machineConfiguration.isMultiAxisConfiguration()) {
if (!machineConfiguration.isMultiAxisConfiguration()) {
return; // ignore
return; // ignore
}
}
if (!((currentWorkPlaneABC == undefined) ||
if (!((currentWorkPlaneABC == undefined) ||
abcFormat.areDifferent(abc.x, currentWorkPlaneABC.x) ||
abcFormat.areDifferent(abc.x, currentWorkPlaneABC.x) ||
abcFormat.areDifferent(abc.y, currentWorkPlaneABC.y) ||
abcFormat.areDifferent(abc.y, currentWorkPlaneABC.y) ||
abcFormat.areDifferent(abc.z, currentWorkPlaneABC.z))) {
abcFormat.areDifferent(abc.z, currentWorkPlaneABC.z))) {
return; // no change
return; // no change
}
}
onCommand(COMMAND_UNLOCK_MULTI_AXIS);
onCommand(COMMAND_UNLOCK_MULTI_AXIS);
// NOTE: add retract here
// NOTE: add retract here
writeBlock(
writeBlock(
gMotionModal.format(0),
gMotionModal.format(0),
conditional(machineConfiguration.isMachineCoordinate(0), "A" + abcFormat.format(abc.x)),
conditional(machineConfiguration.isMachineCoordinate(0), "A" + abcFormat.format(abc.x)),
conditional(machineConfiguration.isMachineCoordinate(1), "B" + abcFormat.format(abc.y)),
conditional(machineConfiguration.isMachineCoordinate(1), "B" + abcFormat.format(abc.y)),
conditional(machineConfiguration.isMachineCoordinate(2), "C" + abcFormat.format(abc.z))
conditional(machineConfiguration.isMachineCoordinate(2), "C" + abcFormat.format(abc.z))
);
);
onCommand(COMMAND_LOCK_MULTI_AXIS);
onCommand(COMMAND_LOCK_MULTI_AXIS);
currentWorkPlaneABC = abc;
currentWorkPlaneABC = abc;
}
}
var closestABC = false; // choose closest machine angles
var closestABC = false; // choose closest machine angles
var currentMachineABC;
var currentMachineABC;
function getWorkPlaneMachineABC(workPlane) {
function getWorkPlaneMachineABC(workPlane) {
var W = workPlane; // map to global frame
var W = workPlane; // map to global frame
var abc = machineConfiguration.getABC(W);
var abc = machineConfiguration.getABC(W);
if (closestABC) {
if (closestABC) {
if (currentMachineABC) {
if (currentMachineABC) {
abc = machineConfiguration.remapToABC(abc, currentMachineABC);
abc = machineConfiguration.remapToABC(abc, currentMachineABC);
} else {
} else {
abc = machineConfiguration.getPreferredABC(abc);
abc = machineConfiguration.getPreferredABC(abc);
}
}
} else {
} else {
abc = machineConfiguration.getPreferredABC(abc);
abc = machineConfiguration.getPreferredABC(abc);
}
}
try {
try {
abc = machineConfiguration.remapABC(abc);
abc = machineConfiguration.remapABC(abc);
currentMachineABC = abc;
currentMachineABC = abc;
} catch (e) {
} catch (e) {
error(
error(
localize("Machine angles not supported") + ":"
localize("Machine angles not supported") + ":"
+ conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x))
+ conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x))
+ conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y))
+ conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y))
+ conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z))
+ conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z))
);
);
}
}
var direction = machineConfiguration.getDirection(abc);
var direction = machineConfiguration.getDirection(abc);
if (!isSameDirection(direction, W.forward)) {
if (!isSameDirection(direction, W.forward)) {
error(localize("Orientation not supported."));
error(localize("Orientation not supported."));
}
}
if (!machineConfiguration.isABCSupported(abc)) {
if (!machineConfiguration.isABCSupported(abc)) {
error(
error(
localize("Work plane is not supported") + ":"
localize("Work plane is not supported") + ":"
+ conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x))
+ conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x))
+ conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y))
+ conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y))
+ conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z))
+ conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z))
);
);
}
}
var tcp = true;
var tcp = true;
if (tcp) {
if (tcp) {
setRotation(W); // TCP mode
setRotation(W); // TCP mode
} else {
} else {
var O = machineConfiguration.getOrientation(abc);
var O = machineConfiguration.getOrientation(abc);
var R = machineConfiguration.getRemainingOrientation(abc, W);
var R = machineConfiguration.getRemainingOrientation(abc, W);
setRotation(R);
setRotation(R);
}
}
return abc;
return abc;
}
}
function onSection() {
function onSection() {
var insertToolCall = isFirstSection() ||
var insertToolCall = isFirstSection() ||
currentSection.getForceToolChange && currentSection.getForceToolChange() ||
currentSection.getForceToolChange && currentSection.getForceToolChange() ||
(tool.number != getPreviousSection().getTool().number);
(tool.number != getPreviousSection().getTool().number);
var retracted = false; // specifies that the tool has been retracted to the safe plane
var retracted = false; // specifies that the tool has been retracted to the safe plane
var newWorkOffset = isFirstSection() ||
var newWorkOffset = isFirstSection() ||
(getPreviousSection().workOffset != currentSection.workOffset); // work offset changes
(getPreviousSection().workOffset != currentSection.workOffset); // work offset changes
var newWorkPlane = isFirstSection() ||
var newWorkPlane = isFirstSection() ||
!isSameDirection(getPreviousSection().getGlobalFinalToolAxis(), currentSection.getGlobalInitialToolAxis());
!isSameDirection(getPreviousSection().getGlobalFinalToolAxis(), currentSection.getGlobalInitialToolAxis());
if (insertToolCall || newWorkOffset || newWorkPlane) {
if (insertToolCall || newWorkOffset || newWorkPlane) {
if (properties.useG28) {
if (properties.useG28) {
// retract to safe plane
// retract to safe plane
retracted = true;
retracted = true;
Copy
Copied
Copy
Copied
writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract
//
writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract
writeBlock(gFormat.format(30)); // use G30 instead of G28 above
writeBlock(gAbsIncModal.format(90));
writeBlock(gAbsIncModal.format(90));
zOutput.reset();
zOutput.reset();
}
}
}
}
writeln("");
writeln("");
if (hasParameter("operation-comment")) {
if (hasParameter("operation-comment")) {
var comment = getParameter("operation-comment");
var comment = getParameter("operation-comment");
if (comment) {
if (comment) {
writeComment(comment);
writeComment(comment);
}
}
}
}
if (insertToolCall) {
if (insertToolCall) {
forceWorkPlane();
forceWorkPlane();
// onCommand(COMMAND_STOP_SPINDLE);
// onCommand(COMMAND_STOP_SPINDLE);
// onCommand(COMMAND_COOLANT_OFF);
// onCommand(COMMAND_COOLANT_OFF);
if (!isFirstSection() && properties.optionalStop) {
if (!isFirstSection() && properties.optionalStop) {
onCommand(COMMAND_OPTIONAL_STOP);
onCommand(COMMAND_OPTIONAL_STOP);
}
}
if (tool.number > 256) {
if (tool.number > 256) {
warning(localize("Tool number exceeds maximum value."));
warning(localize("Tool number exceeds maximum value."));
}
}
Copy
Copied
Copy
Copied
var lengthOffset = tool.lengthOffset;
var lengthOffset = tool.lengthOffset;
if (lengthOffset > 256) {
if (lengthOffset > 256) {
error(localize("Length offset out of range."));
error(localize("Length offset out of range."));
return;
return;
}
}
Copy
Copied
Copy
Copied
writeBlock(mFormat.format(998));
//
writeBlock(mFormat.format(998));
writeBlock(gFormat.format(30));
if (properties.useM6) {
if (properties.useM6) {
writeBlock("T" + toolFormat.format(tool.number),
writeBlock("T" + toolFormat.format(tool.number),
Copy
Copied
Copy
Copied
gFormat.format(43),
gFormat.format(43),
hFormat.format(lengthOffset),
hFormat.format(lengthOffset),
mFormat.format(6));
mFormat.format(6));
} else {
} else {
writeBlock("T" + toolFormat.format(tool.number), gFormat.format(43), hFormat.format(lengthOffset));
writeBlock("T" + toolFormat.format(tool.number), gFormat.format(43), hFormat.format(lengthOffset));
}
}
if (tool.comment) {
if (tool.comment) {
writeComment(tool.comment);
writeComment(tool.comment);
}
}
var showToolZMin = false;
var showToolZMin = false;
if (showToolZMin) {
if (showToolZMin) {
if (is3D()) {
if (is3D()) {
var numberOfSections = getNumberOfSections();
var numberOfSections = getNumberOfSections();
var zRange = currentSection.getGlobalZRange();
var zRange = currentSection.getGlobalZRange();
var number = tool.number;
var number = tool.number;
for (var i = currentSection.getId() + 1; i < numberOfSections; ++i) {
for (var i = currentSection.getId() + 1; i < numberOfSections; ++i) {
var section = getSection(i);
var section = getSection(i);
if (section.getTool().number != number) {
if (section.getTool().number != number) {
break;
break;
}
}
zRange.expandToRange(section.getGlobalZRange());
zRange.expandToRange(section.getGlobalZRange());
}
}
writeComment(localize("ZMIN") + "=" + zRange.getMinimum());
writeComment(localize("ZMIN") + "=" + zRange.getMinimum());
}
}
}
}
if (properties.preloadTool && properties.useM6) {
if (properties.preloadTool && properties.useM6) {
var nextTool = getNextTool(tool.number);
var nextTool = getNextTool(tool.number);
if (nextTool) {
if (nextTool) {
writeBlock("T" + toolFormat.format(nextTool.number));
writeBlock("T" + toolFormat.format(nextTool.number));
} else {
} else {
// preload first tool
// preload first tool
var section = getSection(0);
var section = getSection(0);
var firstToolNumber = section.getTool().number;
var firstToolNumber = section.getTool().number;
if (tool.number != firstToolNumber) {
if (tool.number != firstToolNumber) {
writeBlock("T" + toolFormat.format(firstToolNumber));
writeBlock("T" + toolFormat.format(firstToolNumber));
}
}
}
}
}
}
}
}
Copy
Copied
Copy
Copied
if
(insertToolCall ||
// set coolant after we have positioned at Z
var c = mapCoolantTable.lookup(tool.coolant);
/* {
var c = mapCoolantTable.lookup(tool.coolant);
if (c) {
writeBlock(mFormat.format(c));
} else {
warning(localize("Coolant not supported."));
}
} */
/* if
(insertToolCall ||
isFirstSection() ||
isFirstSection() ||
(rpmFormat.areDifferent(tool.spindleRPM, sOutput.getCurrent())) ||
(rpmFormat.areDifferent(tool.spindleRPM, sOutput.getCurrent())) ||
Copy
Copied
Copy
Copied
(tool.clockwise != getPreviousSection().getTool().clockwise)
) {
(tool.clockwise != getPreviousSection().getTool().clockwise)
|| previousCoolantMode != c
) {
*/
if (tool.spindleRPM < 1) {
if (tool.spindleRPM < 1) {
error(localize("Spindle speed out of range."));
error(localize("Spindle speed out of range."));
return;
return;
}
}
if (tool.spindleRPM > 99999) {
if (tool.spindleRPM > 99999) {
warning(localize("Spindle speed exceeds maximum value."));
warning(localize("Spindle speed exceeds maximum value."));
}
}
writeBlock(
writeBlock(
Copy
Copied
Copy
Copied
sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4)
sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4)
,
conditional(c, mFormat.format(c))
);
);
Copy
Copied
Copy
Copied
}
previousCoolantMode = c;
//
}
// wcs
// wcs
var workOffset = currentSection.workOffset;
var workOffset = currentSection.workOffset;
if (workOffset == 0) {
if (workOffset == 0) {
warningOnce(localize("Work offset has not been specified. Using G54 as WCS."), WARNING_WORK_OFFSET);
warningOnce(localize("Work offset has not been specified. Using G54 as WCS."), WARNING_WORK_OFFSET);
workOffset = 1;
workOffset = 1;
}
}
if (workOffset > 0) {
if (workOffset > 0) {
if (workOffset > 6) {
if (workOffset > 6) {
var p = workOffset; // 1->... // G59 P1 is the same as G54 and so on
var p = workOffset; // 1->... // G59 P1 is the same as G54 and so on
if (p > 254) {
if (p > 254) {
error(localize("Work offset out of range."));
error(localize("Work offset out of range."));
} else {
} else {
if (workOffset != currentWorkOffset) {
if (workOffset != currentWorkOffset) {
writeBlock(gFormat.format(59), "P" + p); // G59 P
writeBlock(gFormat.format(59), "P" + p); // G59 P
currentWorkOffset = workOffset;
currentWorkOffset = workOffset;
}
}
}
}
} else {
} else {
if (workOffset != currentWorkOffset) {
if (workOffset != currentWorkOffset) {
writeBlock(gFormat.format(53 + workOffset)); // G54->G59
writeBlock(gFormat.format(53 + workOffset)); // G54->G59
currentWorkOffset = workOffset;
currentWorkOffset = workOffset;
}
}
}
}
}
}
forceXYZ();
forceXYZ();
if (machineConfiguration.isMultiAxisConfiguration()) { // use 5-axis indexing for multi-axis mode
if (machineConfiguration.isMultiAxisConfiguration()) { // use 5-axis indexing for multi-axis mode
// set working plane after datum shift
// set working plane after datum shift
var abc = new Vector(0, 0, 0);
var abc = new Vector(0, 0, 0);
if (currentSection.isMultiAxis()) {
if (currentSection.isMultiAxis()) {
forceWorkPlane();
forceWorkPlane();
cancelTransformation();
cancelTransformation();
} else {
} else {
abc = getWorkPlaneMachineABC(currentSection.workPlane);
abc = getWorkPlaneMachineABC(currentSection.workPlane);
}
}
setWorkPlane(abc);
setWorkPlane(abc);
} else { // pure 3D
} else { // pure 3D
var remaining = currentSection.workPlane;
var remaining = currentSection.workPlane;
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) {
error(localize("Tool orientation is not supported."));
error(localize("Tool orientation is not supported."));
return;
return;
}
}
setRotation(remaining);
setRotation(remaining);
}
}
forceAny();
forceAny();
gMotionModal.reset();
gMotionModal.reset();
var initialPosition = getFramePosition(currentSection.getInitialPosition());
var initialPosition = getFramePosition(currentSection.getInitialPosition());
if (!retracted) {
if (!retracted) {
if (getCurrentPosition().z < initialPosition.z) {
if (getCurrentPosition().z < initialPosition.z) {
writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z));
writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z));
}
}
}
}
if (!insertToolCall && retracted) { // G43 already called above on tool change
if (!insertToolCall && retracted) { // G43 already called above on tool change
var lengthOffset = tool.lengthOffset;
var lengthOffset = tool.lengthOffset;
if (lengthOffset > 256) {
if (lengthOffset > 256) {
error(localize("Length offset out of range."));
error(localize("Length offset out of range."));
return;
return;
}
}
gMotionModal.reset();
gMotionModal.reset();
writeBlock(gPlaneModal.format(17));
writeBlock(gPlaneModal.format(17));
if (!machineConfiguration.isHeadConfiguration()) {
if (!machineConfiguration.isHeadConfiguration()) {
writeBlock(
writeBlock(
gAbsIncModal.format(90),
gAbsIncModal.format(90),
gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
);
);
writeBlock(gMotionModal.format(0), gFormat.format(43), zOutput.format(initialPosition.z), hFormat.format(lengthOffset));
writeBlock(gMotionModal.format(0), gFormat.format(43), zOutput.format(initialPosition.z), hFormat.format(lengthOffset));
} else {
} else {
writeBlock(
writeBlock(
gAbsIncModal.format(90),
gAbsIncModal.format(90),
gMotionModal.format(0),
gMotionModal.format(0),
gFormat.format(43), xOutput.format(initialPosition.x),
gFormat.format(43), xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y),
yOutput.format(initialPosition.y),
zOutput.format(initialPosition.z), hFormat.format(lengthOffset)
zOutput.format(initialPosition.z), hFormat.format(lengthOffset)
);
);
}
}
} else {
} else {
writeBlock(
writeBlock(
gAbsIncModal.format(90),
gAbsIncModal.format(90),
gMotionModal.format(0),
gMotionModal.format(0),
xOutput.format(initialPosition.x),
xOutput.format(initialPosition.x),
yOutput.format(initialPosition.y)
yOutput.format(initialPosition.y)
);
);
}
}
// set coolant after we have positioned at Z
// set coolant after we have positioned at Z
Copy
Copied
Copy
Copied
{
/*
{
var c = mapCoolantTable.lookup(tool.coolant);
var c = mapCoolantTable.lookup(tool.coolant);
if (c) {
if (c) {
writeBlock(mFormat.format(c));
writeBlock(mFormat.format(c));
} else {
} else {
warning(localize("Coolant not supported."));
warning(localize("Coolant not supported."));
}
}
Copy
Copied
Copy
Copied
}
}
*/
}
}
function onDwell(seconds) {
function onDwell(seconds) {
if (seconds > 99999.999) {
if (seconds > 99999.999) {
warning(localize("Dwelling time is out of range."));
warning(localize("Dwelling time is out of range."));
}
}
if (properties.dwellInSeconds) {
if (properties.dwellInSeconds) {
writeBlock(gFormat.format(4), "P" + secFormat.format(seconds));
writeBlock(gFormat.format(4), "P" + secFormat.format(seconds));
} else {
} else {
milliseconds = clamp(1, seconds * 1000, 99999999);
milliseconds = clamp(1, seconds * 1000, 99999999);
writeBlock(gFormat.format(4), "P" + milliFormat.format(milliseconds));
writeBlock(gFormat.format(4), "P" + milliFormat.format(milliseconds));
}
}
}
}
function onSpindleSpeed(spindleSpeed) {
function onSpindleSpeed(spindleSpeed) {
writeBlock(sOutput.format(spindleSpeed));
writeBlock(sOutput.format(spindleSpeed));
}
}
function onCycle() {
function onCycle() {
writeBlock(gPlaneModal.format(17));
writeBlock(gPlaneModal.format(17));
}
}
function getCommonCycle(x, y, z, r) {
function getCommonCycle(x, y, z, r) {
forceXYZ();
forceXYZ();
return [xOutput.format(x), yOutput.format(y),
return [xOutput.format(x), yOutput.format(y),
zOutput.format(z),
zOutput.format(z),
"R" + xyzFormat.format(r)];
"R" + xyzFormat.format(r)];
}
}
function onCyclePoint(x, y, z) {
function onCyclePoint(x, y, z) {
if (isFirstCyclePoint()) {
if (isFirstCyclePoint()) {
repositionToCycleClearance(cycle, x, y, z);
repositionToCycleClearance(cycle, x, y, z);
// return to initial Z which is clearance plane and set absolute mode
// return to initial Z which is clearance plane and set absolute mode
var F = cycle.feedrate;
var F = cycle.feedrate;
var P = (cycle.dwell == 0) ? 0 : cycle.dwell; // in seconds
var P = (cycle.dwell == 0) ? 0 : cycle.dwell; // in seconds
switch (cycleType) {
switch (cycleType) {
case "drilling":
case "drilling":
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
feedOutput.format(F)
feedOutput.format(F)
);
);
break;
break;
case "counter-boring":
case "counter-boring":
if (P > 0) {
if (P > 0) {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(82),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(82),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"P" + secFormat.format(P),
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
} else {
} else {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
feedOutput.format(F)
feedOutput.format(F)
);
);
}
}
break;
break;
case "chip-breaking":
case "chip-breaking":
// cycle.accumulatedDepth is ignored
// cycle.accumulatedDepth is ignored
if (P > 0) {
if (P > 0) {
expandCyclePoint(x, y, z);
expandCyclePoint(x, y, z);
} else {
} else {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(73),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(73),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"Q" + xyzFormat.format(cycle.incrementalDepth),
"Q" + xyzFormat.format(cycle.incrementalDepth),
feedOutput.format(F)
feedOutput.format(F)
);
);
}
}
break;
break;
case "deep-drilling":
case "deep-drilling":
if (P > 0) {
if (P > 0) {
expandCyclePoint(x, y, z);
expandCyclePoint(x, y, z);
} else {
} else {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(83),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(83),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"Q" + xyzFormat.format(cycle.incrementalDepth),
"Q" + xyzFormat.format(cycle.incrementalDepth),
// conditional(P > 0, "P" + secFormat.format(P)),
// conditional(P > 0, "P" + secFormat.format(P)),
feedOutput.format(F)
feedOutput.format(F)
);
);
}
}
break;
break;
case "tapping":
case "tapping":
if (tool.type == TOOL_TAP_LEFT_HAND) {
if (tool.type == TOOL_TAP_LEFT_HAND) {
expandCyclePoint(x, y, z);
expandCyclePoint(x, y, z);
} else {
} else {
if (!F) {
if (!F) {
F = tool.getTappingFeedrate();
F = tool.getTappingFeedrate();
}
}
Copy
Copied
Copy
Copied
writeBlock(
mFormat.format(29),
sOutput.format(tool.spindleRPM));
writeBlock(
sOutput.format(tool.spindleRPM));
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
Copy
Copied
Copy
Copied
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
}
}
break;
break;
case "left-tapping":
case "left-tapping":
expandCyclePoint(x, y, z);
expandCyclePoint(x, y, z);
break;
break;
case "right-tapping":
case "right-tapping":
if (!F) {
if (!F) {
F = tool.getTappingFeedrate();
F = tool.getTappingFeedrate();
}
}
writeBlock(mFormat.format(29), sOutput.format(tool.spindleRPM));
writeBlock(mFormat.format(29), sOutput.format(tool.spindleRPM));
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
Copy
Copied
Copy
Copied
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
break;
break;
case "fine-boring":
case "fine-boring":
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(76),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(76),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"P" + secFormat.format(P),
"P" + secFormat.format(P),
"Q" + xyzFormat.format(cycle.shift),
"Q" + xyzFormat.format(cycle.shift),
feedOutput.format(F)
feedOutput.format(F)
);
);
break;
break;
case "back-boring":
case "back-boring":
var dx = (gPlaneModal.getCurrent() == 19) ? cycle.backBoreDistance : 0;
var dx = (gPlaneModal.getCurrent() == 19) ? cycle.backBoreDistance : 0;
var dy = (gPlaneModal.getCurrent() == 18) ? cycle.backBoreDistance : 0;
var dy = (gPlaneModal.getCurrent() == 18) ? cycle.backBoreDistance : 0;
var dz = (gPlaneModal.getCurrent() == 17) ? cycle.backBoreDistance : 0;
var dz = (gPlaneModal.getCurrent() == 17) ? cycle.backBoreDistance : 0;
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(87),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(87),
getCommonCycle(x - dx, y - dy, z - dz, cycle.bottom),
getCommonCycle(x - dx, y - dy, z - dz, cycle.bottom),
"I" + xyzFormat.format(cycle.shift),
"I" + xyzFormat.format(cycle.shift),
"J" + xyzFormat.format(0),
"J" + xyzFormat.format(0),
"P" + secFormat.format(P),
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
break;
break;
case "reaming":
case "reaming":
if (P > 0) {
if (P > 0) {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"P" + secFormat.format(P),
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
} else {
} else {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
feedOutput.format(F)
feedOutput.format(F)
);
);
}
}
break;
break;
case "stop-boring":
case "stop-boring":
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(86),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(86),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"P" + secFormat.format(P),
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
break;
break;
case "manual-boring":
case "manual-boring":
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(88),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(88),
getCommonCycle(x, y, z, cycle.retract),
getCommonCycle(x, y, z, cycle.retract),
"P" + secFormat.format(P),
"P" + secFormat.format(P),
feedOutput.format(F)
feedOutput.format(F)
);
);
break;
break;
case "boring":
case "boring":
if (P > 0) {
if (P > 0) {
writeBlock(
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89),
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89),
Copy
Copied
Copy
Copied
getCommonCycle(x, y, z, cycle.retract),
getCo
"P" + secFormat.format(P),
feedOutput.format(F)
);
} else {
writeBlock(
gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85),
getCommonCycle(x, y, z, cycle.retract),
feedOutput.format(F)
);
}
break;
default:
expandCyclePoint(x, y, z);
}
} else {
if (cycleExpanded) {
expandCyclePoint(x, y, z);
} else {
writeBlock(xOutput.format(x), yOutput.format(y));
}
}
}
function onCycleEnd() {
if (!cycleExpanded) {
writeBlock(gCycleModal.format(80));
zOutput.reset();
}
}
var pendingRadiusCompensation = -1;
function onRadiusCompensation() {
pendingRadiusCompensation = radiusCompensation;
}
function onRapid(_x, _y, _z) {
var x = xOutput.format
Saved diffs
Original text
Open file
/** Copyright (C) 2012-2014 by Autodesk, Inc. All rights reserved. Tormach Mach3Mill post processor configuration. $Revision: 39140 $ $Date: 2015-06-10 14:13:32 +0200 (on, 10 jun 2015) $ FORKID {AE2102AB-B86A-4aa7-8E9B-F0B6935D4E9F} */ description = "Generic Tormach Mach3Mill"; vendor = "Autodesk, Inc."; vendorUrl = "http://www.autodesk.com"; legal = "Copyright (C) 2012-2014 by Autodesk, Inc."; certificationLevel = 2; minimumRevision = 24000; extension = "TAP"; setCodePage("ascii"); tolerance = spatial(0.002, MM); minimumChordLength = spatial(0.01, MM); minimumCircularRadius = spatial(0.01, MM); maximumCircularRadius = spatial(1000, MM); minimumCircularSweep = toRad(0.01); maximumCircularSweep = toRad(180); allowHelicalMoves = true; allowedCircularPlanes = undefined; // allow any circular motion // user-defined properties properties = { writeMachine: true, // write machine writeTools: true, // writes the tools useG28: true, // disable to avoid G28 output useM6: true, // disable to avoid M6 output - preload is also disabled when M6 is disabled preloadTool: false, // preloads next tool on tool change if any showSequenceNumbers: true, // show sequence numbers sequenceNumberStart: 10, // first sequence number sequenceNumberIncrement: 10, // increment for sequence numbers optionalStop: true, // optional stop separateWordsWithSpace: true, // specifies that the words should be separated with a white space useRadius: true, // specifies that arcs should be output using the radius (R word) instead of the I, J, and K words. dwellInSeconds: true // specifies the unit for dwelling: true:seconds and false:milliseconds. }; var permittedCommentChars = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,=_-"; var mapCoolantTable = new Table( [9, 8, 7], {initial:COOLANT_OFF, force:true}, "Invalid coolant mode" ); var nFormat = createFormat({prefix:"N", decimals:0}); var gFormat = createFormat({prefix:"G", decimals:1}); var mFormat = createFormat({prefix:"M", decimals:0}); var hFormat = createFormat({prefix:"H", decimals:0}); var dFormat = createFormat({prefix:"D", decimals:0}); var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceDecimal:true}); var rFormat = xyzFormat; // radius var abcFormat = createFormat({decimals:3, forceDecimal:true, scale:DEG}); var feedFormat = createFormat({decimals:(unit == MM ? 0 : 1), forceDecimal:true}); var toolFormat = createFormat({decimals:0}); var rpmFormat = createFormat({decimals:0}); var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-99999.999 var milliFormat = createFormat({decimals:0}); // milliseconds // range 1-9999 var taperFormat = createFormat({decimals:1, scale:DEG}); var xOutput = createVariable({prefix:"X"}, xyzFormat); var yOutput = createVariable({prefix:"Y"}, xyzFormat); var zOutput = createVariable({prefix:"Z"}, xyzFormat); var aOutput = createVariable({prefix:"A"}, abcFormat); var bOutput = createVariable({prefix:"B"}, abcFormat); var cOutput = createVariable({prefix:"C"}, abcFormat); var feedOutput = createVariable({prefix:"F"}, feedFormat); var sOutput = createVariable({prefix:"S", force:true}, rpmFormat); var dOutput = createVariable({}, dFormat); // circular output var iOutput = createReferenceVariable({prefix:"I", force:true}, xyzFormat); var jOutput = createReferenceVariable({prefix:"J", force:true}, xyzFormat); var kOutput = createReferenceVariable({prefix:"K", force:true}, xyzFormat); var gMotionModal = createModal({force:true}, gFormat); // modal group 1 // G0-G3, ... var gPlaneModal = createModal({onchange:function () {gMotionModal.reset();}}, gFormat); // modal group 2 // G17-19 var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91 var gFeedModeModal = createModal({}, gFormat); // modal group 5 // G93-94 var gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21 var gCycleModal = createModal({}, gFormat); // modal group 9 // G81, ... var gRetractModal = createModal({}, gFormat); // modal group 10 // G98-99 var WARNING_WORK_OFFSET = 0; // collected state var sequenceNumber; var currentWorkOffset; /** Writes the specified block. */ function writeBlock() { if (properties.showSequenceNumbers) { writeWords2(nFormat.format(sequenceNumber % 100000), arguments); sequenceNumber += properties.sequenceNumberIncrement; } else { writeWords(arguments); } } /** Output a comment. */ function writeComment(text) { writeln("(" + filterText(String(text).toUpperCase(), permittedCommentChars) + ")"); } function onOpen() { if (false) { var aAxis = createAxis({coordinate:0, table:true, axis:[-1, 0, 0], cyclic:true, preference:1}); machineConfiguration = new MachineConfiguration(aAxis); setMachineConfiguration(machineConfiguration); optimizeMachineAngles2(1); // map tip mode } if (!machineConfiguration.isMachineCoordinate(0)) { aOutput.disable(); } if (!machineConfiguration.isMachineCoordinate(1)) { bOutput.disable(); } if (!machineConfiguration.isMachineCoordinate(2)) { cOutput.disable(); } if (!properties.separateWordsWithSpace) { setWordSeparator(""); } sequenceNumber = properties.sequenceNumberStart; writeln("%"); if (programName) { writeComment(programName); } if (programComment) { writeComment(programComment); } // dump machine configuration var vendor = machineConfiguration.getVendor(); var model = machineConfiguration.getModel(); var description = machineConfiguration.getDescription(); if (properties.writeMachine && (vendor || model || description)) { writeComment(localize("Machine")); if (vendor) { writeComment(" " + localize("vendor") + ": " + vendor); } if (model) { writeComment(" " + localize("model") + ": " + model); } if (description) { writeComment(" " + localize("description") + ": " + description); } } // dump tool information if (properties.writeTools) { var zRanges = {}; if (is3D()) { var numberOfSections = getNumberOfSections(); for (var i = 0; i < numberOfSections; ++i) { var section = getSection(i); var zRange = section.getGlobalZRange(); var tool = section.getTool(); if (zRanges[tool.number]) { zRanges[tool.number].expandToRange(zRange); } else { zRanges[tool.number] = zRange; } } } var tools = getToolTable(); if (tools.getNumberOfTools() > 0) { for (var i = 0; i < tools.getNumberOfTools(); ++i) { var tool = tools.getTool(i); var comment = "T" + toolFormat.format(tool.number) + " " + "D=" + xyzFormat.format(tool.diameter) + " " + localize("CR") + "=" + xyzFormat.format(tool.cornerRadius); if ((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) { comment += " " + localize("TAPER") + "=" + taperFormat.format(tool.taperAngle) + localize("deg"); } if (zRanges[tool.number]) { comment += " - " + localize("ZMIN") + "=" + xyzFormat.format(zRanges[tool.number].getMinimum()); } comment += " - " + getToolTypeName(tool.type); writeComment(comment); } } } if (false) { // check for duplicate tool number for (var i = 0; i < getNumberOfSections(); ++i) { var sectioni = getSection(i); var tooli = sectioni.getTool(); for (var j = i + 1; j < getNumberOfSections(); ++j) { var sectionj = getSection(j); var toolj = sectionj.getTool(); if (tooli.number == toolj.number) { if (xyzFormat.areDifferent(tooli.diameter, toolj.diameter) || xyzFormat.areDifferent(tooli.cornerRadius, toolj.cornerRadius) || abcFormat.areDifferent(tooli.taperAngle, toolj.taperAngle) || (tooli.numberOfFlutes != toolj.numberOfFlutes)) { error( subst( localize("Using the same tool number for different cutter geometry for operation '%1' and '%2'."), sectioni.hasParameter("operation-comment") ? sectioni.getParameter("operation-comment") : ("#" + (i + 1)), sectionj.hasParameter("operation-comment") ? sectionj.getParameter("operation-comment") : ("#" + (j + 1)) ) ); return; } } } } } // absolute coordinates and feed per min writeBlock(gAbsIncModal.format(90), gFormat.format(54), gFormat.format(64), gFormat.format(50), gPlaneModal.format(17), gFormat.format(40), gFormat.format(80), gFeedModeModal.format(94), gFormat.format(91.1), gFormat.format(49)); switch (unit) { case IN: writeBlock(gUnitModal.format(20)); break; case MM: writeBlock(gUnitModal.format(21)); break; } } function onComment(message) { var comments = String(message).split(";"); for (comment in comments) { writeComment(comments[comment]); } } /** Force output of X, Y, and Z. */ function forceXYZ() { xOutput.reset(); yOutput.reset(); zOutput.reset(); } /** Force output of A, B, and C. */ function forceABC() { aOutput.reset(); bOutput.reset(); cOutput.reset(); } /** Force output of X, Y, Z, A, B, C, and F on next output. */ function forceAny() { forceXYZ(); forceABC(); feedOutput.reset(); } var currentWorkPlaneABC = undefined; function forceWorkPlane() { currentWorkPlaneABC = undefined; } function setWorkPlane(abc) { if (!machineConfiguration.isMultiAxisConfiguration()) { return; // ignore } if (!((currentWorkPlaneABC == undefined) || abcFormat.areDifferent(abc.x, currentWorkPlaneABC.x) || abcFormat.areDifferent(abc.y, currentWorkPlaneABC.y) || abcFormat.areDifferent(abc.z, currentWorkPlaneABC.z))) { return; // no change } onCommand(COMMAND_UNLOCK_MULTI_AXIS); // NOTE: add retract here writeBlock( gMotionModal.format(0), conditional(machineConfiguration.isMachineCoordinate(0), "A" + abcFormat.format(abc.x)), conditional(machineConfiguration.isMachineCoordinate(1), "B" + abcFormat.format(abc.y)), conditional(machineConfiguration.isMachineCoordinate(2), "C" + abcFormat.format(abc.z)) ); onCommand(COMMAND_LOCK_MULTI_AXIS); currentWorkPlaneABC = abc; } var closestABC = false; // choose closest machine angles var currentMachineABC; function getWorkPlaneMachineABC(workPlane) { var W = workPlane; // map to global frame var abc = machineConfiguration.getABC(W); if (closestABC) { if (currentMachineABC) { abc = machineConfiguration.remapToABC(abc, currentMachineABC); } else { abc = machineConfiguration.getPreferredABC(abc); } } else { abc = machineConfiguration.getPreferredABC(abc); } try { abc = machineConfiguration.remapABC(abc); currentMachineABC = abc; } catch (e) { error( localize("Machine angles not supported") + ":" + conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x)) + conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y)) + conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z)) ); } var direction = machineConfiguration.getDirection(abc); if (!isSameDirection(direction, W.forward)) { error(localize("Orientation not supported.")); } if (!machineConfiguration.isABCSupported(abc)) { error( localize("Work plane is not supported") + ":" + conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x)) + conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y)) + conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z)) ); } var tcp = true; if (tcp) { setRotation(W); // TCP mode } else { var O = machineConfiguration.getOrientation(abc); var R = machineConfiguration.getRemainingOrientation(abc, W); setRotation(R); } return abc; } function onSection() { var insertToolCall = isFirstSection() || currentSection.getForceToolChange && currentSection.getForceToolChange() || (tool.number != getPreviousSection().getTool().number); var retracted = false; // specifies that the tool has been retracted to the safe plane var newWorkOffset = isFirstSection() || (getPreviousSection().workOffset != currentSection.workOffset); // work offset changes var newWorkPlane = isFirstSection() || !isSameDirection(getPreviousSection().getGlobalFinalToolAxis(), currentSection.getGlobalInitialToolAxis()); if (insertToolCall || newWorkOffset || newWorkPlane) { if (properties.useG28) { // retract to safe plane retracted = true; writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract writeBlock(gAbsIncModal.format(90)); zOutput.reset(); } } writeln(""); if (hasParameter("operation-comment")) { var comment = getParameter("operation-comment"); if (comment) { writeComment(comment); } } if (insertToolCall) { forceWorkPlane(); // onCommand(COMMAND_STOP_SPINDLE); // onCommand(COMMAND_COOLANT_OFF); if (!isFirstSection() && properties.optionalStop) { onCommand(COMMAND_OPTIONAL_STOP); } if (tool.number > 256) { warning(localize("Tool number exceeds maximum value.")); } var lengthOffset = tool.lengthOffset; if (lengthOffset > 256) { error(localize("Length offset out of range.")); return; } writeBlock(mFormat.format(998)); if (properties.useM6) { writeBlock("T" + toolFormat.format(tool.number), gFormat.format(43), hFormat.format(lengthOffset), mFormat.format(6)); } else { writeBlock("T" + toolFormat.format(tool.number), gFormat.format(43), hFormat.format(lengthOffset)); } if (tool.comment) { writeComment(tool.comment); } var showToolZMin = false; if (showToolZMin) { if (is3D()) { var numberOfSections = getNumberOfSections(); var zRange = currentSection.getGlobalZRange(); var number = tool.number; for (var i = currentSection.getId() + 1; i < numberOfSections; ++i) { var section = getSection(i); if (section.getTool().number != number) { break; } zRange.expandToRange(section.getGlobalZRange()); } writeComment(localize("ZMIN") + "=" + zRange.getMinimum()); } } if (properties.preloadTool && properties.useM6) { var nextTool = getNextTool(tool.number); if (nextTool) { writeBlock("T" + toolFormat.format(nextTool.number)); } else { // preload first tool var section = getSection(0); var firstToolNumber = section.getTool().number; if (tool.number != firstToolNumber) { writeBlock("T" + toolFormat.format(firstToolNumber)); } } } } if (insertToolCall || isFirstSection() || (rpmFormat.areDifferent(tool.spindleRPM, sOutput.getCurrent())) || (tool.clockwise != getPreviousSection().getTool().clockwise)) { if (tool.spindleRPM < 1) { error(localize("Spindle speed out of range.")); return; } if (tool.spindleRPM > 99999) { warning(localize("Spindle speed exceeds maximum value.")); } writeBlock( sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4) ); } // wcs var workOffset = currentSection.workOffset; if (workOffset == 0) { warningOnce(localize("Work offset has not been specified. Using G54 as WCS."), WARNING_WORK_OFFSET); workOffset = 1; } if (workOffset > 0) { if (workOffset > 6) { var p = workOffset; // 1->... // G59 P1 is the same as G54 and so on if (p > 254) { error(localize("Work offset out of range.")); } else { if (workOffset != currentWorkOffset) { writeBlock(gFormat.format(59), "P" + p); // G59 P currentWorkOffset = workOffset; } } } else { if (workOffset != currentWorkOffset) { writeBlock(gFormat.format(53 + workOffset)); // G54->G59 currentWorkOffset = workOffset; } } } forceXYZ(); if (machineConfiguration.isMultiAxisConfiguration()) { // use 5-axis indexing for multi-axis mode // set working plane after datum shift var abc = new Vector(0, 0, 0); if (currentSection.isMultiAxis()) { forceWorkPlane(); cancelTransformation(); } else { abc = getWorkPlaneMachineABC(currentSection.workPlane); } setWorkPlane(abc); } else { // pure 3D var remaining = currentSection.workPlane; if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) { error(localize("Tool orientation is not supported.")); return; } setRotation(remaining); } forceAny(); gMotionModal.reset(); var initialPosition = getFramePosition(currentSection.getInitialPosition()); if (!retracted) { if (getCurrentPosition().z < initialPosition.z) { writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z)); } } if (!insertToolCall && retracted) { // G43 already called above on tool change var lengthOffset = tool.lengthOffset; if (lengthOffset > 256) { error(localize("Length offset out of range.")); return; } gMotionModal.reset(); writeBlock(gPlaneModal.format(17)); if (!machineConfiguration.isHeadConfiguration()) { writeBlock( gAbsIncModal.format(90), gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y) ); writeBlock(gMotionModal.format(0), gFormat.format(43), zOutput.format(initialPosition.z), hFormat.format(lengthOffset)); } else { writeBlock( gAbsIncModal.format(90), gMotionModal.format(0), gFormat.format(43), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y), zOutput.format(initialPosition.z), hFormat.format(lengthOffset) ); } } else { writeBlock( gAbsIncModal.format(90), gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y) ); } // set coolant after we have positioned at Z { var c = mapCoolantTable.lookup(tool.coolant); if (c) { writeBlock(mFormat.format(c)); } else { warning(localize("Coolant not supported.")); } } } function onDwell(seconds) { if (seconds > 99999.999) { warning(localize("Dwelling time is out of range.")); } if (properties.dwellInSeconds) { writeBlock(gFormat.format(4), "P" + secFormat.format(seconds)); } else { milliseconds = clamp(1, seconds * 1000, 99999999); writeBlock(gFormat.format(4), "P" + milliFormat.format(milliseconds)); } } function onSpindleSpeed(spindleSpeed) { writeBlock(sOutput.format(spindleSpeed)); } function onCycle() { writeBlock(gPlaneModal.format(17)); } function getCommonCycle(x, y, z, r) { forceXYZ(); return [xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + xyzFormat.format(r)]; } function onCyclePoint(x, y, z) { if (isFirstCyclePoint()) { repositionToCycleClearance(cycle, x, y, z); // return to initial Z which is clearance plane and set absolute mode var F = cycle.feedrate; var P = (cycle.dwell == 0) ? 0 : cycle.dwell; // in seconds switch (cycleType) { case "drilling": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); break; case "counter-boring": if (P > 0) { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(82), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; case "chip-breaking": // cycle.accumulatedDepth is ignored if (P > 0) { expandCyclePoint(x, y, z); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(73), getCommonCycle(x, y, z, cycle.retract), "Q" + xyzFormat.format(cycle.incrementalDepth), feedOutput.format(F) ); } break; case "deep-drilling": if (P > 0) { expandCyclePoint(x, y, z); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(83), getCommonCycle(x, y, z, cycle.retract), "Q" + xyzFormat.format(cycle.incrementalDepth), // conditional(P > 0, "P" + secFormat.format(P)), feedOutput.format(F) ); } break; case "tapping": if (tool.type == TOOL_TAP_LEFT_HAND) { expandCyclePoint(x, y, z); } else { if (!F) { F = tool.getTappingFeedrate(); } writeBlock(mFormat.format(29), sOutput.format(tool.spindleRPM)); writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; case "left-tapping": expandCyclePoint(x, y, z); break; case "right-tapping": if (!F) { F = tool.getTappingFeedrate(); } writeBlock(mFormat.format(29), sOutput.format(tool.spindleRPM)); writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); break; case "fine-boring": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(76), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), "Q" + xyzFormat.format(cycle.shift), feedOutput.format(F) ); break; case "back-boring": var dx = (gPlaneModal.getCurrent() == 19) ? cycle.backBoreDistance : 0; var dy = (gPlaneModal.getCurrent() == 18) ? cycle.backBoreDistance : 0; var dz = (gPlaneModal.getCurrent() == 17) ? cycle.backBoreDistance : 0; writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(87), getCommonCycle(x - dx, y - dy, z - dz, cycle.bottom), "I" + xyzFormat.format(cycle.shift), "J" + xyzFormat.format(0), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "reaming": if (P > 0) { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; case "stop-boring": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(86), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "manual-boring": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(88), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "boring": if (P > 0) { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; default: expandCyclePoint(x, y, z); } } else { if (cycleExpanded) { expandCyclePoint(x, y, z); } else { writeBlock(xOutput.format(x), yOutput.format(y)); } } } function onCycleEnd() { if (!cycleExpanded) { writeBlock(gCycleModal.format(80)); zOutput.reset(); } } var pendingRadiusCompensation = -1; function onRadiusCompensation() { pendingRadiusCompensation = radiusCompensation; } function onRapid(_x, _y, _z) { var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); if (x || y || z) { if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation mode cannot be changed at rapid traversal.")); return; } writeBlock(gMotionModal.format(0), x, y, z); feedOutput.reset(); } } function onLinear(_x, _y, _z, feed) { var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); var f = feedOutput.format(feed); if (x || y || z) { if (pendingRadiusCompensation >= 0) { pendingRadiusCompensation = -1; var d = tool.diameterOffset; if (d > 256) { warning(localize("The diameter offset exceeds the maximum value.")); } writeBlock(gPlaneModal.format(17)); switch (radiusCompensation) { case RADIUS_COMPENSATION_LEFT: dOutput.reset(); // writeBlock(gMotionModal.format(1), dOutput.format(tool.diameter), gFormat.format(41), x, y, z, f); error(localize("Radius compensation mode is not supported by the CNC control.")); break; case RADIUS_COMPENSATION_RIGHT: dOutput.reset(); // writeBlock(gMotionModal.format(1), dOutput.format(tool.diameter), gFormat.format(42), x, y, z, f); error(localize("Radius compensation mode is not supported by the CNC control.")); break; default: writeBlock(gMotionModal.format(1), gFormat.format(40), x, y, z, f); } } else { writeBlock(gMotionModal.format(1), x, y, z, f); } } else if (f) { if (getNextRecord().isMotion()) { // try not to output feed without motion feedOutput.reset(); // force feed on next line } else { writeBlock(gMotionModal.format(1), f); } } } function onRapid5D(_x, _y, _z, _a, _b, _c) { if (!currentSection.isOptimizedForMachine()) { error(localize("This post configuration has not been customized for 5-axis simultaneous toolpath.")); return; } if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation mode cannot be changed at rapid traversal.")); return; } var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); var a = aOutput.format(_a); var b = bOutput.format(_b); var c = cOutput.format(_c); writeBlock(gMotionModal.format(0), x, y, z, a, b, c); feedOutput.reset(); } function onLinear5D(_x, _y, _z, _a, _b, _c, feed) { if (!currentSection.isOptimizedForMachine()) { error(localize("This post configuration has not been customized for 5-axis simultaneous toolpath.")); return; } if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation cannot be activated/deactivated for 5-axis move.")); return; } var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); var a = aOutput.format(_a); var b = bOutput.format(_b); var c = cOutput.format(_c); var f = feedOutput.format(feed); if (x || y || z || a || b || c) { writeBlock(gMotionModal.format(1), x, y, z, a, b, c, f); } else if (f) { if (getNextRecord().isMotion()) { // try not to output feed without motion feedOutput.reset(); // force feed on next line } else { writeBlock(gMotionModal.format(1), f); } } } function onCircular(clockwise, cx, cy, cz, x, y, z, feed) { if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation cannot be activated/deactivated for a circular move.")); return; } var start = getCurrentPosition(); if (isFullCircle()) { if (properties.useRadius || isHelical()) { // radius mode does not support full arcs linearize(tolerance); return; } switch (getCircularPlane()) { case PLANE_XY: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed)); break; case PLANE_ZX: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; case PLANE_YZ: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; default: linearize(tolerance); } } else if (!properties.useRadius) { switch (getCircularPlane()) { case PLANE_XY: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed)); break; case PLANE_ZX: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; case PLANE_YZ: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; default: linearize(tolerance); } } else { // use radius mode var r = getCircularRadius(); if (toDeg(getCircularSweep()) > (180 + 1e-9)) { r = -r; // allow up to <360 deg arcs } switch (getCircularPlane()) { case PLANE_XY: writeBlock(gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + rFormat.format(r), feedOutput.format(feed)); break; case PLANE_ZX: writeBlock(gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + rFormat.format(r), feedOutput.format(feed)); break; case PLANE_YZ: writeBlock(gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + rFormat.format(r), feedOutput.format(feed)); break; default: linearize(tolerance); } } } var mapCommand = { COMMAND_STOP:0, COMMAND_OPTIONAL_STOP:1, COMMAND_END:2, COMMAND_SPINDLE_CLOCKWISE:3, COMMAND_SPINDLE_COUNTERCLOCKWISE:4, COMMAND_STOP_SPINDLE:5, COMMAND_ORIENTATE_SPINDLE:19, COMMAND_LOAD_TOOL:6, COMMAND_COOLANT_ON:8, // flood COMMAND_COOLANT_OFF:9 }; function onCommand(command) { switch (command) { case COMMAND_START_SPINDLE: onCommand(tool.clockwise ? COMMAND_SPINDLE_CLOCKWISE : COMMAND_SPINDLE_COUNTERCLOCKWISE); return; case COMMAND_LOCK_MULTI_AXIS: return; case COMMAND_UNLOCK_MULTI_AXIS: return; case COMMAND_BREAK_CONTROL: return; case COMMAND_TOOL_MEASURE: return; } var stringId = getCommandStringId(command); var mcode = mapCommand[stringId]; if (mcode != undefined) { writeBlock(mFormat.format(mcode)); } else { onUnsupportedCommand(command); } } function onSectionEnd() { writeBlock(gPlaneModal.format(17)); if (((getCurrentSectionId() + 1) >= getNumberOfSections()) || (tool.number != getNextSection().getTool().number)) { onCommand(COMMAND_BREAK_CONTROL); } forceAny(); } function onClose() { writeln(""); onCommand(COMMAND_COOLANT_OFF); if (properties.useG28) { writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract zOutput.reset(); } setWorkPlane(new Vector(0, 0, 0)); // reset working plane if (!machineConfiguration.hasHomePositionX() && !machineConfiguration.hasHomePositionY()) { if (properties.useG28) { writeBlock(gFormat.format(28), gAbsIncModal.format(91), "X" + xyzFormat.format(0), "Y" + xyzFormat.format(0)); // return to home } } else { var homeX; if (machineConfiguration.hasHomePositionX()) { homeX = "X" + xyzFormat.format(machineConfiguration.getHomePositionX()); } var homeY; if (machineConfiguration.hasHomePositionY()) { homeY = "Y" + xyzFormat.format(machineConfiguration.getHomePositionY()); } writeBlock(gAbsIncModal.format(90), gFormat.format(53), gMotionModal.format(0), homeX, homeY); } onImpliedCommand(COMMAND_END); onImpliedCommand(COMMAND_STOP_SPINDLE); writeBlock(mFormat.format(30)); // stop program, spindle stop, coolant off }
Changed text
Open file
/** Copyright (C) 2012-2014 by Autodesk, Inc. All rights reserved. Tormach Path Pilot post processor configuration. $Revision: 37254 $ $Date: 2014-05-26 11:17:00 +0200 (ma, 26 maj 2014) $ FORKID {AE2102AB-B86A-4aa7-8E9B-F0B6935D4E9F} */ //setWriteStack(true); description = "Generic Tormach Path Pilot"; vendor = "Autodesk, Inc."; vendorUrl = "http://www.autodesk.com"; legal = "Copyright (C) 2012-2014 by Autodesk, Inc."; certificationLevel = 2; minimumRevision = 24000; extension = "TAP"; setCodePage("ascii"); tolerance = spatial(0.002, MM); minimumChordLength = spatial(0.01, MM); minimumCircularRadius = spatial(0.01, MM); maximumCircularRadius = spatial(1000, MM); minimumCircularSweep = toRad(0.01); maximumCircularSweep = toRad(180); allowHelicalMoves = true; allowedCircularPlanes = undefined; // allow any circular motion // user-defined properties properties = { writeMachine: true, // write machine writeTools: true, // writes the tools useG28: true, // disable to avoid G28 output useM6: true, // disable to avoid M6 output - preload is also disabled when M6 is disabled preloadTool: false, // preloads next tool on tool change if any showSequenceNumbers: true, // show sequence numbers sequenceNumberStart: 10, // first sequence number sequenceNumberIncrement: 10, // increment for sequence numbers optionalStop: true, // optional stop separateWordsWithSpace: true, // specifies that the words should be separated with a white space useRadius: true, // specifies that arcs should be output using the radius (R word) instead of the I, J, and K words. dwellInSeconds: true // specifies the unit for dwelling: true:seconds and false:milliseconds. }; var permittedCommentChars = " ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,=_-"; var mapCoolantTable = new Table( [9, 8, 7], {initial:COOLANT_OFF, force:true}, "Invalid coolant mode" ); var nFormat = createFormat({prefix:"N", decimals:0}); var gFormat = createFormat({prefix:"G", decimals:1}); var mFormat = createFormat({prefix:"M", decimals:0}); var hFormat = createFormat({prefix:"H", decimals:0}); var dFormat = createFormat({prefix:"D", decimals:0}); var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceDecimal:true}); var rFormat = xyzFormat; // radius var abcFormat = createFormat({decimals:3, forceDecimal:true, scale:DEG}); var feedFormat = createFormat({decimals:(unit == MM ? 0 : 1), forceDecimal:true}); var toolFormat = createFormat({decimals:0}); var rpmFormat = createFormat({decimals:0}); var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-99999.999 var milliFormat = createFormat({decimals:0}); // milliseconds // range 1-9999 var taperFormat = createFormat({decimals:1, scale:DEG}); var xOutput = createVariable({prefix:"X"}, xyzFormat); var yOutput = createVariable({prefix:"Y"}, xyzFormat); var zOutput = createVariable({prefix:"Z"}, xyzFormat); var aOutput = createVariable({prefix:"A"}, abcFormat); var bOutput = createVariable({prefix:"B"}, abcFormat); var cOutput = createVariable({prefix:"C"}, abcFormat); var feedOutput = createVariable({prefix:"F"}, feedFormat); var sOutput = createVariable({prefix:"S", force:true}, rpmFormat); var dOutput = createVariable({}, dFormat); // circular output var iOutput = createReferenceVariable({prefix:"I", force:true}, xyzFormat); var jOutput = createReferenceVariable({prefix:"J", force:true}, xyzFormat); var kOutput = createReferenceVariable({prefix:"K", force:true}, xyzFormat); var gMotionModal = createModal({force:true}, gFormat); // modal group 1 // G0-G3, ... var gPlaneModal = createModal({onchange:function () {gMotionModal.reset();}}, gFormat); // modal group 2 // G17-19 var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91 var gFeedModeModal = createModal({}, gFormat); // modal group 5 // G93-94 var gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21 var gCycleModal = createModal({force:false}, gFormat); // modal group 9 // G81, ... var gRetractModal = createModal({force:true}, gFormat); // modal group 10 // G98-99 var WARNING_WORK_OFFSET = 0; // collected state var sequenceNumber; var currentWorkOffset; var previousCoolantMode; /** Writes the specified block. */ function writeBlock() { if (properties.showSequenceNumbers) { writeWords2(nFormat.format(sequenceNumber % 100000), arguments); sequenceNumber += properties.sequenceNumberIncrement; } else { writeWords(arguments); } } /** Output a comment. */ function writeComment(text) { writeln("(" + filterText(String(text).toUpperCase(), permittedCommentChars) + ")"); } function onOpen() { if (false) { var aAxis = createAxis({coordinate:0, table:true, axis:[-1, 0, 0], cyclic:true, preference:1}); machineConfiguration = new MachineConfiguration(aAxis); setMachineConfiguration(machineConfiguration); optimizeMachineAngles2(1); // map tip mode } if (!machineConfiguration.isMachineCoordinate(0)) { aOutput.disable(); } if (!machineConfiguration.isMachineCoordinate(1)) { bOutput.disable(); } if (!machineConfiguration.isMachineCoordinate(2)) { cOutput.disable(); } if (!properties.separateWordsWithSpace) { setWordSeparator(""); } sequenceNumber = properties.sequenceNumberStart; writeln("%"); writeln("(*********************************************************)"); writeln("(* Tormach Path Pilot Post Processsor Version 0.4 Debug *)"); writeln("(*********************************************************)"); if (programName) { writeComment(programName); } if (programComment) { writeComment(programComment); } // dump machine configuration var vendor = machineConfiguration.getVendor(); var model = machineConfiguration.getModel(); var description = machineConfiguration.getDescription(); if (properties.writeMachine && (vendor || model || description)) { writeComment(localize("Machine")); if (vendor) { writeComment(" " + localize("vendor") + ": " + vendor); } if (model) { writeComment(" " + localize("model") + ": " + model); } if (description) { writeComment(" " + localize("description") + ": " + description); } } // dump tool information if (properties.writeTools) { var zRanges = {}; if (is3D()) { var numberOfSections = getNumberOfSections(); for (var i = 0; i < numberOfSections; ++i) { var section = getSection(i); var zRange = section.getGlobalZRange(); var tool = section.getTool(); if (zRanges[tool.number]) { zRanges[tool.number].expandToRange(zRange); } else { zRanges[tool.number] = zRange; } } } var tools = getToolTable(); if (tools.getNumberOfTools() > 0) { for (var i = 0; i < tools.getNumberOfTools(); ++i) { var tool = tools.getTool(i); var comment = "T" + toolFormat.format(tool.number) + " " + "D=" + xyzFormat.format(tool.diameter) + " " + localize("CR") + "=" + xyzFormat.format(tool.cornerRadius); if ((tool.taperAngle > 0) && (tool.taperAngle < Math.PI)) { comment += " " + localize("TAPER") + "=" + taperFormat.format(tool.taperAngle) + localize("deg"); } if (zRanges[tool.number]) { comment += " - " + localize("ZMIN") + "=" + xyzFormat.format(zRanges[tool.number].getMinimum()); } comment += " - " + getToolTypeName(tool.type); writeComment(comment); } } } if (false) { // check for duplicate tool number for (var i = 0; i < getNumberOfSections(); ++i) { var sectioni = getSection(i); var tooli = sectioni.getTool(); for (var j = i + 1; j < getNumberOfSections(); ++j) { var sectionj = getSection(j); var toolj = sectionj.getTool(); if (tooli.number == toolj.number) { if (xyzFormat.areDifferent(tooli.diameter, toolj.diameter) || xyzFormat.areDifferent(tooli.cornerRadius, toolj.cornerRadius) || abcFormat.areDifferent(tooli.taperAngle, toolj.taperAngle) || (tooli.numberOfFlutes != toolj.numberOfFlutes)) { error( subst( localize("Using the same tool number for different cutter geometry for operation '%1' and '%2'."), sectioni.hasParameter("operation-comment") ? sectioni.getParameter("operation-comment") : ("#" + (i + 1)), sectionj.hasParameter("operation-comment") ? sectionj.getParameter("operation-comment") : ("#" + (j + 1)) ) ); return; } } } } } // absolute coordinates and feed per min writeBlock(gAbsIncModal.format(90), gFormat.format(54), gFormat.format(64), gFormat.format(50), gPlaneModal.format(17), gFormat.format(40), gFormat.format(80), gFeedModeModal.format(94), gFormat.format(91.1), gFormat.format(49)); switch (unit) { case IN: writeBlock(gUnitModal.format(20), "(Inch)" ); break; case MM: writeBlock(gUnitModal.format(21), "(Metric)"); break; } } function onComment(message) { var comments = String(message).split(";"); for (comment in comments) { writeComment(comments[comment]); } } /** Force output of X, Y, and Z. */ function forceXYZ() { xOutput.reset(); yOutput.reset(); zOutput.reset(); } /** Force output of A, B, and C. */ function forceABC() { aOutput.reset(); bOutput.reset(); cOutput.reset(); } /** Force output of X, Y, Z, A, B, C, and F on next output. */ function forceAny() { forceXYZ(); forceABC(); feedOutput.reset(); } var currentWorkPlaneABC = undefined; function forceWorkPlane() { currentWorkPlaneABC = undefined; } function setWorkPlane(abc) { if (!machineConfiguration.isMultiAxisConfiguration()) { return; // ignore } if (!((currentWorkPlaneABC == undefined) || abcFormat.areDifferent(abc.x, currentWorkPlaneABC.x) || abcFormat.areDifferent(abc.y, currentWorkPlaneABC.y) || abcFormat.areDifferent(abc.z, currentWorkPlaneABC.z))) { return; // no change } onCommand(COMMAND_UNLOCK_MULTI_AXIS); // NOTE: add retract here writeBlock( gMotionModal.format(0), conditional(machineConfiguration.isMachineCoordinate(0), "A" + abcFormat.format(abc.x)), conditional(machineConfiguration.isMachineCoordinate(1), "B" + abcFormat.format(abc.y)), conditional(machineConfiguration.isMachineCoordinate(2), "C" + abcFormat.format(abc.z)) ); onCommand(COMMAND_LOCK_MULTI_AXIS); currentWorkPlaneABC = abc; } var closestABC = false; // choose closest machine angles var currentMachineABC; function getWorkPlaneMachineABC(workPlane) { var W = workPlane; // map to global frame var abc = machineConfiguration.getABC(W); if (closestABC) { if (currentMachineABC) { abc = machineConfiguration.remapToABC(abc, currentMachineABC); } else { abc = machineConfiguration.getPreferredABC(abc); } } else { abc = machineConfiguration.getPreferredABC(abc); } try { abc = machineConfiguration.remapABC(abc); currentMachineABC = abc; } catch (e) { error( localize("Machine angles not supported") + ":" + conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x)) + conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y)) + conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z)) ); } var direction = machineConfiguration.getDirection(abc); if (!isSameDirection(direction, W.forward)) { error(localize("Orientation not supported.")); } if (!machineConfiguration.isABCSupported(abc)) { error( localize("Work plane is not supported") + ":" + conditional(machineConfiguration.isMachineCoordinate(0), " A" + abcFormat.format(abc.x)) + conditional(machineConfiguration.isMachineCoordinate(1), " B" + abcFormat.format(abc.y)) + conditional(machineConfiguration.isMachineCoordinate(2), " C" + abcFormat.format(abc.z)) ); } var tcp = true; if (tcp) { setRotation(W); // TCP mode } else { var O = machineConfiguration.getOrientation(abc); var R = machineConfiguration.getRemainingOrientation(abc, W); setRotation(R); } return abc; } function onSection() { var insertToolCall = isFirstSection() || currentSection.getForceToolChange && currentSection.getForceToolChange() || (tool.number != getPreviousSection().getTool().number); var retracted = false; // specifies that the tool has been retracted to the safe plane var newWorkOffset = isFirstSection() || (getPreviousSection().workOffset != currentSection.workOffset); // work offset changes var newWorkPlane = isFirstSection() || !isSameDirection(getPreviousSection().getGlobalFinalToolAxis(), currentSection.getGlobalInitialToolAxis()); if (insertToolCall || newWorkOffset || newWorkPlane) { if (properties.useG28) { // retract to safe plane retracted = true; //writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract writeBlock(gFormat.format(30)); // use G30 instead of G28 above writeBlock(gAbsIncModal.format(90)); zOutput.reset(); } } writeln(""); if (hasParameter("operation-comment")) { var comment = getParameter("operation-comment"); if (comment) { writeComment(comment); } } if (insertToolCall) { forceWorkPlane(); // onCommand(COMMAND_STOP_SPINDLE); // onCommand(COMMAND_COOLANT_OFF); if (!isFirstSection() && properties.optionalStop) { onCommand(COMMAND_OPTIONAL_STOP); } if (tool.number > 256) { warning(localize("Tool number exceeds maximum value.")); } var lengthOffset = tool.lengthOffset; if (lengthOffset > 256) { error(localize("Length offset out of range.")); return; } // writeBlock(mFormat.format(998)); writeBlock(gFormat.format(30)); if (properties.useM6) { writeBlock("T" + toolFormat.format(tool.number), gFormat.format(43), hFormat.format(lengthOffset), mFormat.format(6)); } else { writeBlock("T" + toolFormat.format(tool.number), gFormat.format(43), hFormat.format(lengthOffset)); } if (tool.comment) { writeComment(tool.comment); } var showToolZMin = false; if (showToolZMin) { if (is3D()) { var numberOfSections = getNumberOfSections(); var zRange = currentSection.getGlobalZRange(); var number = tool.number; for (var i = currentSection.getId() + 1; i < numberOfSections; ++i) { var section = getSection(i); if (section.getTool().number != number) { break; } zRange.expandToRange(section.getGlobalZRange()); } writeComment(localize("ZMIN") + "=" + zRange.getMinimum()); } } if (properties.preloadTool && properties.useM6) { var nextTool = getNextTool(tool.number); if (nextTool) { writeBlock("T" + toolFormat.format(nextTool.number)); } else { // preload first tool var section = getSection(0); var firstToolNumber = section.getTool().number; if (tool.number != firstToolNumber) { writeBlock("T" + toolFormat.format(firstToolNumber)); } } } } // set coolant after we have positioned at Z var c = mapCoolantTable.lookup(tool.coolant); /* { var c = mapCoolantTable.lookup(tool.coolant); if (c) { writeBlock(mFormat.format(c)); } else { warning(localize("Coolant not supported.")); } } */ /* if (insertToolCall || isFirstSection() || (rpmFormat.areDifferent(tool.spindleRPM, sOutput.getCurrent())) || (tool.clockwise != getPreviousSection().getTool().clockwise) || previousCoolantMode != c) { */ if (tool.spindleRPM < 1) { error(localize("Spindle speed out of range.")); return; } if (tool.spindleRPM > 99999) { warning(localize("Spindle speed exceeds maximum value.")); } writeBlock( sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4), conditional(c, mFormat.format(c)) ); previousCoolantMode = c; // } // wcs var workOffset = currentSection.workOffset; if (workOffset == 0) { warningOnce(localize("Work offset has not been specified. Using G54 as WCS."), WARNING_WORK_OFFSET); workOffset = 1; } if (workOffset > 0) { if (workOffset > 6) { var p = workOffset; // 1->... // G59 P1 is the same as G54 and so on if (p > 254) { error(localize("Work offset out of range.")); } else { if (workOffset != currentWorkOffset) { writeBlock(gFormat.format(59), "P" + p); // G59 P currentWorkOffset = workOffset; } } } else { if (workOffset != currentWorkOffset) { writeBlock(gFormat.format(53 + workOffset)); // G54->G59 currentWorkOffset = workOffset; } } } forceXYZ(); if (machineConfiguration.isMultiAxisConfiguration()) { // use 5-axis indexing for multi-axis mode // set working plane after datum shift var abc = new Vector(0, 0, 0); if (currentSection.isMultiAxis()) { forceWorkPlane(); cancelTransformation(); } else { abc = getWorkPlaneMachineABC(currentSection.workPlane); } setWorkPlane(abc); } else { // pure 3D var remaining = currentSection.workPlane; if (!isSameDirection(remaining.forward, new Vector(0, 0, 1))) { error(localize("Tool orientation is not supported.")); return; } setRotation(remaining); } forceAny(); gMotionModal.reset(); var initialPosition = getFramePosition(currentSection.getInitialPosition()); if (!retracted) { if (getCurrentPosition().z < initialPosition.z) { writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z)); } } if (!insertToolCall && retracted) { // G43 already called above on tool change var lengthOffset = tool.lengthOffset; if (lengthOffset > 256) { error(localize("Length offset out of range.")); return; } gMotionModal.reset(); writeBlock(gPlaneModal.format(17)); if (!machineConfiguration.isHeadConfiguration()) { writeBlock( gAbsIncModal.format(90), gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y) ); writeBlock(gMotionModal.format(0), gFormat.format(43), zOutput.format(initialPosition.z), hFormat.format(lengthOffset)); } else { writeBlock( gAbsIncModal.format(90), gMotionModal.format(0), gFormat.format(43), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y), zOutput.format(initialPosition.z), hFormat.format(lengthOffset) ); } } else { writeBlock( gAbsIncModal.format(90), gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y) ); } // set coolant after we have positioned at Z /* { var c = mapCoolantTable.lookup(tool.coolant); if (c) { writeBlock(mFormat.format(c)); } else { warning(localize("Coolant not supported.")); } } */ } function onDwell(seconds) { if (seconds > 99999.999) { warning(localize("Dwelling time is out of range.")); } if (properties.dwellInSeconds) { writeBlock(gFormat.format(4), "P" + secFormat.format(seconds)); } else { milliseconds = clamp(1, seconds * 1000, 99999999); writeBlock(gFormat.format(4), "P" + milliFormat.format(milliseconds)); } } function onSpindleSpeed(spindleSpeed) { writeBlock(sOutput.format(spindleSpeed)); } function onCycle() { writeBlock(gPlaneModal.format(17)); } function getCommonCycle(x, y, z, r) { forceXYZ(); return [xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + xyzFormat.format(r)]; } function onCyclePoint(x, y, z) { if (isFirstCyclePoint()) { repositionToCycleClearance(cycle, x, y, z); // return to initial Z which is clearance plane and set absolute mode var F = cycle.feedrate; var P = (cycle.dwell == 0) ? 0 : cycle.dwell; // in seconds switch (cycleType) { case "drilling": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); break; case "counter-boring": if (P > 0) { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(82), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(81), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; case "chip-breaking": // cycle.accumulatedDepth is ignored if (P > 0) { expandCyclePoint(x, y, z); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(73), getCommonCycle(x, y, z, cycle.retract), "Q" + xyzFormat.format(cycle.incrementalDepth), feedOutput.format(F) ); } break; case "deep-drilling": if (P > 0) { expandCyclePoint(x, y, z); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(83), getCommonCycle(x, y, z, cycle.retract), "Q" + xyzFormat.format(cycle.incrementalDepth), // conditional(P > 0, "P" + secFormat.format(P)), feedOutput.format(F) ); } break; case "tapping": if (tool.type == TOOL_TAP_LEFT_HAND) { expandCyclePoint(x, y, z); } else { if (!F) { F = tool.getTappingFeedrate(); } writeBlock(sOutput.format(tool.spindleRPM)); writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } break; case "left-tapping": expandCyclePoint(x, y, z); break; case "right-tapping": if (!F) { F = tool.getTappingFeedrate(); } writeBlock(mFormat.format(29), sOutput.format(tool.spindleRPM)); writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(84), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "fine-boring": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(76), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), "Q" + xyzFormat.format(cycle.shift), feedOutput.format(F) ); break; case "back-boring": var dx = (gPlaneModal.getCurrent() == 19) ? cycle.backBoreDistance : 0; var dy = (gPlaneModal.getCurrent() == 18) ? cycle.backBoreDistance : 0; var dz = (gPlaneModal.getCurrent() == 17) ? cycle.backBoreDistance : 0; writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(87), getCommonCycle(x - dx, y - dy, z - dz, cycle.bottom), "I" + xyzFormat.format(cycle.shift), "J" + xyzFormat.format(0), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "reaming": if (P > 0) { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; case "stop-boring": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(86), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "manual-boring": writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(88), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); break; case "boring": if (P > 0) { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(89), getCommonCycle(x, y, z, cycle.retract), "P" + secFormat.format(P), feedOutput.format(F) ); } else { writeBlock( gRetractModal.format(98), gAbsIncModal.format(90), gCycleModal.format(85), getCommonCycle(x, y, z, cycle.retract), feedOutput.format(F) ); } break; default: expandCyclePoint(x, y, z); } } else { if (cycleExpanded) { expandCyclePoint(x, y, z); } else { writeBlock(xOutput.format(x), yOutput.format(y)); } } } function onCycleEnd() { if (!cycleExpanded) { writeBlock(gCycleModal.format(80)); zOutput.reset(); } } var pendingRadiusCompensation = -1; function onRadiusCompensation() { pendingRadiusCompensation = radiusCompensation; } function onRapid(_x, _y, _z) { var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); if (x || y || z) { if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation mode cannot be changed at rapid traversal.")); return; } writeBlock(gMotionModal.format(0), x, y, z); feedOutput.reset(); } } function onLinear(_x, _y, _z, feed) { var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); var f = feedOutput.format(feed); if (x || y || z) { if (pendingRadiusCompensation >= 0) { pendingRadiusCompensation = -1; var d = tool.diameterOffset; if (d > 256) { warning(localize("The diameter offset exceeds the maximum value.")); } writeBlock(gPlaneModal.format(17)); switch (radiusCompensation) { case RADIUS_COMPENSATION_LEFT: dOutput.reset(); // writeBlock(gMotionModal.format(1), dOutput.format(tool.diameter), gFormat.format(41), x, y, z, f); error(localize("Radius compensation mode is not supported by the CNC control.")); break; case RADIUS_COMPENSATION_RIGHT: dOutput.reset(); // writeBlock(gMotionModal.format(1), dOutput.format(tool.diameter), gFormat.format(42), x, y, z, f); error(localize("Radius compensation mode is not supported by the CNC control.")); break; default: writeBlock(gMotionModal.format(1), gFormat.format(40), x, y, z, f); } } else { writeBlock(gMotionModal.format(1), x, y, z, f); } } else if (f) { if (getNextRecord().isMotion()) { // try not to output feed without motion feedOutput.reset(); // force feed on next line } else { writeBlock(gMotionModal.format(1), f); } } } function onRapid5D(_x, _y, _z, _a, _b, _c) { if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation mode cannot be changed at rapid traversal.")); return; } var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); var a = aOutput.format(_a); var b = bOutput.format(_b); var c = cOutput.format(_c); writeBlock(gMotionModal.format(0), x, y, z, a, b, c); feedOutput.reset(); } function onLinear5D(_x, _y, _z, _a, _b, _c, feed) { if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation cannot be activated/deactivated for 5-axis move.")); return; } var x = xOutput.format(_x); var y = yOutput.format(_y); var z = zOutput.format(_z); var a = aOutput.format(_a); var b = bOutput.format(_b); var c = cOutput.format(_c); var f = feedOutput.format(feed); if (x || y || z || a || b || c) { writeBlock(gMotionModal.format(1), x, y, z, a, b, c, f); } else if (f) { if (getNextRecord().isMotion()) { // try not to output feed without motion feedOutput.reset(); // force feed on next line } else { writeBlock(gMotionModal.format(1), f); } } } function onCircular(clockwise, cx, cy, cz, x, y, z, feed) { if (pendingRadiusCompensation >= 0) { error(localize("Radius compensation cannot be activated/deactivated for a circular move.")); return; } var start = getCurrentPosition(); if (isFullCircle()) { if (properties.useRadius || isHelical()) { // radius mode does not support full arcs linearize(tolerance); return; } switch (getCircularPlane()) { case PLANE_XY: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed)); break; case PLANE_ZX: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; case PLANE_YZ: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; default: linearize(tolerance); } } else if (!properties.useRadius) { switch (getCircularPlane()) { case PLANE_XY: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed)); break; case PLANE_ZX: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; case PLANE_YZ: writeBlock(gAbsIncModal.format(90), gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed)); break; default: linearize(tolerance); } } else { // use radius mode var r = getCircularRadius(); if (toDeg(getCircularSweep()) > (180 + 1e-9)) { r = -r; // allow up to <360 deg arcs } switch (getCircularPlane()) { case PLANE_XY: writeBlock(gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + rFormat.format(r), feedOutput.format(feed)); break; case PLANE_ZX: writeBlock(gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + rFormat.format(r), feedOutput.format(feed)); break; case PLANE_YZ: writeBlock(gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), zOutput.format(z), "R" + rFormat.format(r), feedOutput.format(feed)); break; default: linearize(tolerance); } } } var mapCommand = { COMMAND_STOP:0, COMMAND_OPTIONAL_STOP:1, COMMAND_END:2, COMMAND_SPINDLE_CLOCKWISE:3, COMMAND_SPINDLE_COUNTERCLOCKWISE:4, COMMAND_STOP_SPINDLE:5, COMMAND_ORIENTATE_SPINDLE:19, COMMAND_LOAD_TOOL:6, COMMAND_COOLANT_ON:8, // flood COMMAND_COOLANT_OFF:9 }; function onCommand(command) { switch (command) { case COMMAND_START_SPINDLE: onCommand(tool.clockwise ? COMMAND_SPINDLE_CLOCKWISE : COMMAND_SPINDLE_COUNTERCLOCKWISE); return; case COMMAND_LOCK_MULTI_AXIS: return; case COMMAND_UNLOCK_MULTI_AXIS: return; case COMMAND_BREAK_CONTROL: return; case COMMAND_TOOL_MEASURE: return; } var stringId = getCommandStringId(command); var mcode = mapCommand[stringId]; if (mcode != undefined) { writeBlock(mFormat.format(mcode)); } else { onUnsupportedCommand(command); } } function onSectionEnd() { writeBlock(gPlaneModal.format(17)); if (((getCurrentSectionId() + 1) >= getNumberOfSections()) || (tool.number != getNextSection().getTool().number)) { onCommand(COMMAND_BREAK_CONTROL); } forceAny(); var initialPosition = getFramePosition(currentSection.getInitialPosition()); writeBlock( // zOutput.format(initialPosition.z), mFormat.format(5), mFormat.format(9) ); } function onClose() { writeln(""); //onCommand(COMMAND_COOLANT_OFF); /* if (properties.useG28) { writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract zOutput.reset(); } */ zOutput.reset(); setWorkPlane(new Vector(0, 0, 0)); // reset working plane /* if (properties.useG28 && !machineConfiguration.hasHomePositionX() && !machineConfiguration.hasHomePositionY()) { writeBlock(gFormat.format(28), gAbsIncModal.format(91), "X" + xyzFormat.format(0), "Y" + xyzFormat.format(0)); // return to home } else { var homeX; if (machineConfiguration.hasHomePositionX()) { homeX = "X" + xyzFormat.format(machineConfiguration.getHomePositionX()); } var homeY; if (machineConfiguration.hasHomePositionY()) { homeY = "Y" + xyzFormat.format(machineConfiguration.getHomePositionY()); } writeBlock(gAbsIncModal.format(90), gFormat.format(53), gMotionModal.format(0), homeX, homeY); } */ onImpliedCommand(COMMAND_END); onImpliedCommand(COMMAND_STOP_SPINDLE); writeBlock(gFormat.format(30)); writeBlock(mFormat.format(30)); // stop program, spindle stop, coolant off writeln("%"); }
Find difference