Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Copyright (C) 2012-2017 by Autodesk, Inc.
- All rights reserved.
- UCCNC post processor configuration.
- $Revision: 41369 65a1f6cb57e3c7389dc895ea10958fc2f7947b0d $
- $Date: 2017-03-20 14:12:44 $
- FORKID {9076F4FE-2652-48D2-9DAD-1A22C240A8B8}
- */
- description = "STEPCRAFT UCCNC";
- vendor = "UCCNC";
- vendorUrl = "http://www.cncdrive.com/";
- legal = "Copyright (C) 2012-2017 by Autodesk, Inc.";
- certificationLevel = 2;
- minimumRevision = 24000;
- longDescription = "Generic post for STEPCRAFT machines using UCCNC control software. If you are using a fourth axis, make sure to enable either the property 'fourthAxisAroundX' or 'fourthAxisAroundY'. If you have an automatic tool changer, enable the property 'useToolChanger'.";
- extension = "nc";
- setCodePage("ascii");
- capabilities = CAPABILITY_MILLING;
- 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(90);
- allowHelicalMoves = true;
- allowedCircularPlanes = 1 << PLANE_XY; // allow only XY circular motion
- // user-defined properties
- properties = {
- writeMachine: true, // write machine
- writeTools: true, // writes the tools
- showSequenceNumbers: false, // show sequence numbers
- sequenceNumberStart: 10, // first sequence number
- sequenceNumberIncrement: 1, // increment for sequence numbers
- separateWordsWithSpace: true, // specifies that the words should be separated with a white space
- useToolChanger: false, // specifies that a tool changer is available
- toolChangePositionX: 0, // specifies the tool change position for X
- toolChangePositionY: 0, // specifies the tool change position for Y
- fourthAxisAroundX: false, // specifies that a fourth axis is mounted along X
- fourthAxisAroundY: false, // specifies that a fourth axis is mounted along Y
- useSmoothing: true // specifies to use constant velocity mode
- /*referenceRun: true*/ // move to reference point first at the beginning of the program
- };
- var gFormat = createFormat({prefix:"G", decimals:1});
- var mFormat = createFormat({prefix:"M", decimals:0});
- var hFormat = createFormat({prefix:"H", decimals:0});
- var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceDecimal:true});
- var abcFormat = createFormat({decimals:3, forceDecimal:true, scale:DEG});
- var feedFormat = createFormat({decimals:(unit == MM ? 1 : 2)});
- var toolFormat = createFormat({decimals:0});
- var rpmFormat = createFormat({decimals:0});
- var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-1000
- var milliFormat = createFormat({decimals:0}); // milliseconds - range 1-?
- var taperFormat = createFormat({decimals:1, scale:DEG});
- var pitchFormat = createFormat({decimals:(unit == MM ? 3 : 4), forceDecimal:true});
- 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 pitchOutput = createVariable({prefix:"K", force:true}, pitchFormat);
- // 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({}, 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-22
- var gCycleModal = createModal({}, gFormat); // modal group 9 // G81, ...
- var WARNING_WORK_OFFSET = 0;
- // collected state
- var sequenceNumber;
- var currentWorkOffset;
- /**
- Writes the specified block.
- */
- function writeBlock() {
- if (properties.showSequenceNumbers) {
- writeWords2("N" + sequenceNumber, arguments);
- sequenceNumber += properties.sequenceNumberIncrement;
- } else {
- writeWords(arguments);
- }
- }
- function formatComment(text) {
- return "(" + String(text).replace(/[\[\]]/g, "") + ")";
- }
- /**
- Output a comment.
- */
- function writeComment(text) {
- writeln(formatComment(text));
- }
- function onOpen() {
- if (properties.fourthAxisAroundX && properties.fourthAxisAroundY) {
- error(localize("Both fourthAxisAroundX and fourthAxisAroundY are enabled. Please select only one of these properties."));
- return;
- }
- if (properties.fourthAxisAroundX || properties.fourthAxisAroundY) {
- var aAxis = createAxis({coordinate:0, table:true, axis:[(properties.fourthAxisAroundX ? 1 : 0), (properties.fourthAxisAroundY ? 1 : 0), 0], cyclic:true, preference:0});
- 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;
- 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 ((getNumberOfSections() > 0) && (getSection(0).workOffset == 0)) {
- for (var i = 0; i < getNumberOfSections(); ++i) {
- if (getSection(i).workOffset > 0) {
- error(localize("Using multiple work offsets is not possible if the initial work offset is 0."));
- return;
- }
- }
- }
- // absolute coordinates and feed per min
- writeBlock(gAbsIncModal.format(90));
- /*
- if (properties.referenceRun) {
- writeBlock(gFormat.format(28.1));
- }
- */
- /* not supported on UCCNC
- switch (unit) {
- case IN:
- writeBlock(gUnitModal.format(20));
- break;
- case MM:
- writeBlock(gUnitModal.format(22)); // G21 is cm
- break;
- }
- */
- }
- function onComment(message) {
- writeComment(message);
- }
- /** 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();
- forceFeed();
- }
- function forceFeed() {
- currentFeedId = undefined;
- feedOutput.reset();
- }
- function onParameter(name, value) {
- }
- 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
- gMotionModal.reset();
- 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."));
- return new Vector();
- }
- 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 = false;
- 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) {
- // retract to safe plane
- retracted = true;
- writeBlock(gMotionModal.format(0), gFormat.format(53), "Z" + xyzFormat.format(0));
- zOutput.reset();
- }
- writeln("");
- if (hasParameter("operation-comment")) {
- var comment = getParameter("operation-comment");
- if (comment) {
- writeComment(comment);
- }
- }
- if (insertToolCall) {
- forceWorkPlane();
- retracted = true;
- if (!isFirstSection()) {
- onCommand(COMMAND_COOLANT_OFF);
- }
- if (properties.useToolChanger) {
- writeBlock("T" + toolFormat.format(tool.number), mFormat.format(6));
- } else {
- if (!isFirstSection()) {
- onCommand(COMMAND_STOP_SPINDLE);
- writeComment(localize("Move to tool change position"));
- writeBlock(gMotionModal.format(0), gFormat.format(53), "X" + xyzFormat.format(properties.toolChangePositionX), "Y" + xyzFormat.format(properties.toolChangePositionY));
- writeBlock(mFormat.format(0), formatComment(localize("Pause program for tool change")));
- }
- writeBlock("T" + toolFormat.format(tool.number), mFormat.format(6) + " (" + getToolTypeName(tool.type) + " D=" + xyzFormat.format(tool.diameter) + (tool.description ? " " + tool.description : "") + ")");
- }
- 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 (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));
- }
- if (properties.useSmoothing) {
- if (hasParameter("operation-strategy") && (getParameter("operation-strategy") == "drill")) {
- writeBlock(gFormat.format(61));
- } else {
- writeBlock(gFormat.format(64));
- }
- }
- // wcs
- if (insertToolCall) { // force work offset when changing tool
- currentWorkOffset = undefined;
- }
- 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) {
- error(localize("Work offset out of range."));
- return;
- } 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();
- abc = currentSection.getInitialToolAxisABC();
- } 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);
- }
- // set coolant after we have positioned at Z
- setCoolant(tool.coolant);
- forceAny();
- var initialPosition = getFramePosition(currentSection.getInitialPosition());
- if (!retracted) {
- if (getCurrentPosition().z < initialPosition.z) {
- writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z));
- }
- }
- if (insertToolCall || retracted) {
- var lengthOffset = tool.lengthOffset;
- if (lengthOffset > 99) {
- error(localize("Length offset out of range."));
- return;
- }
- gMotionModal.reset();
- if (!machineConfiguration.isHeadConfiguration()) {
- writeBlock(gFormat.format(43), hFormat.format(lengthOffset));
- writeBlock(
- gAbsIncModal.format(90),
- gMotionModal.format(0), xOutput.format(initialPosition.x), yOutput.format(initialPosition.y)
- );
- writeBlock(gMotionModal.format(0), zOutput.format(initialPosition.z));
- } else {
- writeBlock(gFormat.format(43), hFormat.format(lengthOffset));
- writeBlock(
- gAbsIncModal.format(90),
- gMotionModal.format(0),
- xOutput.format(initialPosition.x),
- yOutput.format(initialPosition.y),
- zOutput.format(initialPosition.z)
- );
- }
- } else {
- writeBlock(
- gAbsIncModal.format(90),
- gMotionModal.format(0),
- xOutput.format(initialPosition.x),
- yOutput.format(initialPosition.y)
- );
- }
- }
- var currentCoolantMode = COOLANT_OFF;
- function setCoolant(coolant) {
- if (coolant == currentCoolantMode) {
- return; // coolant is already active
- }
- if (coolant == COOLANT_OFF) {
- writeBlock(mFormat.format(9));
- currentCoolantMode = COOLANT_OFF;
- return;
- }
- var m;
- switch (coolant) {
- case COOLANT_FLOOD:
- m = 8;
- break;
- case COOLANT_MIST:
- m = 7;
- break;
- default:
- onUnsupportedCoolant(coolant);
- m = 9;
- }
- if (m) {
- writeBlock(mFormat.format(m));
- currentCoolantMode = coolant;
- }
- }
- function onDwell(seconds) {
- if (seconds > 99999.999) {
- warning(localize("Dwelling time is out of range."));
- }
- seconds = clamp(0.001, seconds, 99999.999);
- writeBlock(gFormat.format(4), "P" + milliFormat.format(seconds * 1000));
- }
- function onSpindleSpeed(spindleSpeed) {
- writeBlock(sOutput.format(spindleSpeed));
- }
- function onCycle() {
- }
- function getCommonCycle(x, y, z, r) {
- forceXYZ();
- return [xOutput.format(x), yOutput.format(y),
- zOutput.format(z),
- (r !== undefined) ? "R" + xyzFormat.format(r) : ""];
- }
- function onCyclePoint(x, y, z) {
- var forceCycle = false;
- switch (cycleType) {
- case "tapping":
- case "left-tapping":
- case "right-tapping":
- if (!isFirstCyclePoint()) {
- onCommand(COMMAND_STOP_SPINDLE);
- }
- forceCycle = true;
- }
- if (forceCycle || 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 : clamp(1, cycle.dwell * 1000, 99999999); // in milliseconds
- switch (cycleType) {
- case "drilling":
- writeBlock(
- gAbsIncModal.format(90), gCycleModal.format(81),
- getCommonCycle(x, y, z, cycle.retract),
- feedOutput.format(F)
- );
- break;
- case "counter-boring":
- if (P > 0) {
- writeBlock(
- gAbsIncModal.format(90), gCycleModal.format(82),
- getCommonCycle(x, y, z, cycle.retract),
- "P" + milliFormat.format(P),
- feedOutput.format(F)
- );
- } else {
- writeBlock(
- gAbsIncModal.format(90), gCycleModal.format(81),
- getCommonCycle(x, y, z, cycle.retract),
- feedOutput.format(F)
- );
- }
- break;
- case "chip-breaking":
- if (P > 0) {
- expandCyclePoint(x, y, z);
- } else {
- writeBlock(
- 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(
- gAbsIncModal.format(90), gCycleModal.format(83),
- getCommonCycle(x, y, z, cycle.retract),
- "Q" + xyzFormat.format(cycle.incrementalDepth),
- feedOutput.format(F)
- );
- }
- break;
- case "tapping":
- if (P > 0) {
- expandCyclePoint(x, y, z);
- } else {
- if (!isFirstCyclePoint()) {
- writeBlock(sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4));
- }
- writeBlock(
- gAbsIncModal.format(90), gCycleModal.format((tool.type == TOOL_TAP_LEFT_HAND) ? 33.2 : 33.1),
- zOutput.format(z),
- pitchOutput.format(tool.threadPitch)
- );
- gCycleModal.reset();
- }
- break;
- case "left-tapping":
- if (P > 0) {
- expandCyclePoint(x, y, z);
- } else {
- if (!isFirstCyclePoint()) {
- writeBlock(sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4));
- }
- writeBlock(
- gAbsIncModal.format(90), gCycleModal.format(33.2),
- zOutput.format(z),
- pitchOutput.format(tool.threadPitch)
- );
- gCycleModal.reset();
- }
- break;
- case "right-tapping":
- if (P > 0) {
- expandCyclePoint(x, y, z);
- } else {
- if (!isFirstCyclePoint()) {
- writeBlock(sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4));
- }
- writeBlock(
- gAbsIncModal.format(90), gCycleModal.format(33.1),
- zOutput.format(z),
- pitchOutput.format(tool.threadPitch)
- );
- gCycleModal.reset();
- }
- break;
- case "tapping-with-chip-breaking":
- case "left-tapping-with-chip-breaking":
- case "right-tapping-with-chip-breaking":
- error(localize("Tapping with chip breaking is not supported."));
- return;
- default:
- expandCyclePoint(x, y, z);
- }
- } else {
- if (cycleExpanded) {
- expandCyclePoint(x, y, z);
- } else {
- var _x = xOutput.format(x);
- var _y = yOutput.format(y);
- if (!_x && !_y) {
- xOutput.reset(); // at least one axis is required
- _x = xOutput.format(x);
- }
- writeBlock(_x, _y);
- }
- }
- if (forceCycle) {
- sOutput.reset();
- }
- }
- function onCycleEnd() {
- if (!cycleExpanded) {
- writeBlock(gCycleModal.format(80));
- zOutput.reset();
- }
- }
- var pendingRadiusCompensation = -1;
- function onRadiusCompensation() {
- pendingRadiusCompensation = radiusCompensation;
- error(localize("Radius compensation is not supported for UCCNC. Please change the compensation type to 'in computer' for the toolpath."));
- return;
- }
- 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) {
- // at least one axis is required
- if (pendingRadiusCompensation >= 0) {
- // ensure that we end at desired position when compensation is turned off
- xOutput.reset();
- yOutput.reset();
- }
- 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;
- switch (radiusCompensation) {
- case RADIUS_COMPENSATION_LEFT:
- writeBlock(
- gMotionModal.format(1), gFormat.format(41), x, y, z,
- conditional(properties.useToolChanger, "O" + xyzFormat.format(tool.diameter/2)), f
- );
- break;
- case RADIUS_COMPENSATION_RIGHT:
- writeBlock(
- gMotionModal.format(1), gFormat.format(42), x, y, z,
- conditional(properties.useToolChanger, "O" + xyzFormat.format(tool.diameter/2)), f
- );
- 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;
- }
- // at least one axis is required
- 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 (isHelical()) {
- linearize(tolerance);
- return;
- }
- switch (getCircularPlane()) {
- case PLANE_XY:
- writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed));
- break;
- default:
- linearize(tolerance);
- }
- } else {
- switch (getCircularPlane()) {
- case PLANE_XY:
- writeBlock(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;
- default:
- linearize(tolerance);
- }
- }
- }
- var mapCommand = {
- };
- function onCommand(command) {
- switch (command) {
- case COMMAND_STOP:
- writeBlock(mFormat.format(2));
- return;
- case COMMAND_COOLANT_OFF:
- setCoolant(COOLANT_OFF);
- return;
- case COMMAND_START_SPINDLE:
- onCommand(tool.clockwise ? COMMAND_SPINDLE_CLOCKWISE : COMMAND_SPINDLE_COUNTERCLOCKWISE);
- return;
- case COMMAND_SPINDLE_CLOCKWISE:
- writeBlock(mFormat.format(3));
- return;
- case COMMAND_SPINDLE_COUNTERCLOCKWISE:
- writeBlock(mFormat.format(4));
- return;
- case COMMAND_STOP_SPINDLE:
- writeBlock(mFormat.format(5));
- return;
- case COMMAND_ORIENTATE_SPINDLE:
- 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() {
- forceAny();
- }
- function onClose() {
- onCommand(COMMAND_COOLANT_OFF);
- onCommand(COMMAND_STOP_SPINDLE);
- writeBlock(gMotionModal.format(0), gFormat.format(53), "Z" + xyzFormat.format(0));
- setWorkPlane(new Vector(0, 0, 0)); // reset working plane
- // writeBlock(gFormat.format(28)); // retract
- writeBlock(mFormat.format(30));
- zOutput.reset();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement