Welcome to Our Community

Unlock hidden features. Sign Up for Free Today!

Problem with Posting G-code with Fusion 360

Discussion in 'CNC Mills/Routers' started by Mika Köpberg, Jul 24, 2016.

  1. Mika Köpberg

    Builder

    Joined:
    Jun 9, 2016
    Messages:
    3
    Likes Received:
    0
    Hi guys! I've just finished my build OX build with a CNC Xpro v2 board and now i want to test it. I've messed around in UGS and manually it moves fine :) So the next step was to make a simple toolpath in Fusion 360 and to post the G-code. When i tried to post the G-code this was the failed result:


    Information: Configuration: Generic TinyG
    Information: Vendor: Synthetos
    Information: Posting intermediate data to 'C:\Users\mika\Desktop\cnc test\cnctesttinyg.gcode'
    Information: Total number of warnings: 1
    Error: Failed to post process. See below for details.
    ...
    Code page changed to '1252 (ANSI - Latin I)'
    Start time: Sunday, July 24, 2016 8:31:15 AM
    Code page changed to '20127 (US-ASCII)'
    Post processor engine: 4.2.1 40927
    Configuration path: C:\Users\mika\AppData\Local\Autodesk\webdeploy\production\f61ab1dfd94b3aa875226de3a402c49fbd3874b6\Applications\CAM360\Data\Posts\tinyg.cps
    Include paths: C:\Users\mika\AppData\Local\Autodesk\webdeploy\production\f61ab1dfd94b3aa875226de3a402c49fbd3874b6\Applications\CAM360\Data\Posts
    Configuration modification date: Thursday, June 02, 2016 7:33:38 PM
    Output path: C:\Users\mika\Desktop\cnc test\cnctesttinyg.gcode
    Checksum of intermediate NC data: cb0423de19dcb2100c9f1c2abc77ea78
    Checksum of configuration: 532c2d4169b2928003705c58c9feb386
    Vendor url: Synthetos.com | Complex Ideas...
    Legal: Copyright (C) 2012-2016 by Autodesk, Inc.
    Post processor signature could not be verified (error 0xfffffffc).
    Generated by: Fusion 360 CAM 2.0.2204
    ...
    Warning: Work offset has not been specified. Using G54 as WCS.
    Error: Tool orientation is not supported.
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    Error: Failed to invoke function 'onSection'.
    Error: Failed to invoke 'onSection' in the post configuration.
    Error: Failed to execute configuration.
    Stop time: Sunday, July 24, 2016 8:31:15 AM
    Post processing failed.



    I dont know how to make it work i've tried to save it as grbl.cps but that doesn't make any difference. This is probably easy to solve but im pretty fresh with these cnc machines so I would appreciate som help :)
     
  2. EvanBruner

    EvanBruner Veteran
    Builder

    Joined:
    Mar 26, 2016
    Messages:
    69
    Likes Received:
    54
    Looks like your grbl.cps is messed up, did you edit it at all?

    Here's my config. When you hit post process, click 'Open config' next to the configuration dropdown and paste this in the editor. Save and try exporting again, it should save as a .nc file.


    /**
    Copyright (C) 2012-2016 by Autodesk, Inc.
    All rights reserved.

    Carbide 3D Grbl post processor configuration.

    $Revision: 40938 a817b859e9f28db15a5b2095f1122568118223e4 $
    $Date: 2016-01-15 19:38:05 $
    FORKID {154F7C00-6549-4c77-ADE0-79375FE5F2AA}
    */

    description = "Generic Carbide 3D (Grbl)";
    vendor = "Carbide 3D";
    vendorUrl = "Carbide 3D";
    legal = "Copyright (C) 2012-2016 by Autodesk, Inc.";
    certificationLevel = 2;
    minimumRevision = 24000;

    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(180);
    allowHelicalMoves = true;
    allowedCircularPlanes = undefined; // allow any 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
    };

    var numberOfToolSlots = 9999;



    var mapCoolantTable = new Table(
    [9, 7],
    {initial:COOLANT_OFF, force:true},
    "Invalid coolant mode"
    );

    var gFormat = createFormat({prefix:"G", decimals:0});
    var mFormat = createFormat({prefix:"M", decimals:0});

    var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4)});
    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 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 feedOutput = createVariable({prefix:"F"}, feedFormat);
    var sOutput = createVariable({prefix:"S", force:true}, rpmFormat);

    // 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 gUnitModal = createModal({}, gFormat); // modal group 6 // G20-21

    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.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);
    }
    }
    }

    // absolute coordinates and feed per min
    writeBlock(gAbsIncModal.format(90));
    writeBlock(gPlaneModal.format(17));

    switch (unit) {
    case IN:
    writeBlock(gUnitModal.format(20));
    break;
    case MM:
    writeBlock(gUnitModal.format(21));
    break;
    }
    }

    function onComment(message) {
    writeComment(message);
    }

    /** Force output of X, Y, and Z. */
    function forceXYZ() {
    xOutput.reset();
    yOutput.reset();
    zOutput.reset();
    }

    /** Force output of X, Y, Z, and F on next output. */
    function forceAny() {
    forceXYZ();
    feedOutput.reset();
    }

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

    // stop spindle before retract during tool change
    if (insertToolCall && !isFirstSection()) {
    onCommand(COMMAND_STOP_SPINDLE);
    }

    // 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) {
    retracted = true;
    onCommand(COMMAND_COOLANT_OFF);

    if (tool.number > numberOfToolSlots) {
    warning(localize("Tool number exceeds maximum value."));
    }

    writeBlock("T" + toolFormat.format(tool.number), mFormat.format(6));
    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."));
    }
    if (tool.spindleRPM > 99999) {
    warning(localize("Spindle speed exceeds maximum value."));
    }
    writeBlock(
    sOutput.format(tool.spindleRPM), mFormat.format(tool.clockwise ? 3 : 4)
    );
    }

    // 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();

    { // 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
    {
    var c = mapCoolantTable.lookup(tool.coolant);
    if (c) {
    writeBlock(mFormat.format(c));
    } else {
    warning(localize("Coolant not supported."));
    }
    }

    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 > numberOfToolSlots) {
    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), zOutput.format(initialPosition.z));
    } else {
    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)
    );
    }
    }

    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" + secFormat.format(seconds));
    }

    function onSpindleSpeed(spindleSpeed) {
    writeBlock(sOutput.format(spindleSpeed));
    }

    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) {
    // 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) {
    error(localize("Radius compensation mode is not supported."));
    return;
    } 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) {
    error(localize("Multi-axis motion is not supported."));
    }

    function onLinear5D(_x, _y, _z, _a, _b, _c, feed) {
    error(localize("Multi-axis motion is not supported."));
    }

    function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
    // one of X/Y and I/J are required and likewise
    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;
    }
    // TAG: are 360deg arcs supported
    switch (getCircularPlane()) {
    case PLANE_XY:
    writeBlock(gPlaneModal.format(17), gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed));
    break;
    case PLANE_ZX:
    writeBlock(gPlaneModal.format(18), gMotionModal.format(clockwise ? 2 : 3), zOutput.format(z), iOutput.format(cx - start.x, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed));
    break;
    case PLANE_YZ:
    writeBlock(gPlaneModal.format(19), gMotionModal.format(clockwise ? 2 : 3), yOutput.format(y), jOutput.format(cy - start.y, 0), kOutput.format(cz - start.z, 0), feedOutput.format(feed));
    break;
    default:
    linearize(tolerance);
    }
    } else {
    switch (getCircularPlane()) {
    case PLANE_XY:
    writeBlock(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(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(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);
    }
    }
    }

    var mapCommand = {
    COMMAND_STOP:0,
    COMMAND_END:2,
    COMMAND_SPINDLE_CLOCKWISE:3,
    COMMAND_SPINDLE_COUNTERCLOCKWISE:4,
    COMMAND_STOP_SPINDLE:5,
    COMMAND_COOLANT_ON:7,
    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));
    forceAny();
    }

    function onClose() {
    onCommand(COMMAND_COOLANT_OFF);

    writeBlock(gFormat.format(28), gAbsIncModal.format(91), "Z" + xyzFormat.format(0)); // retract
    zOutput.reset();

    if (!machineConfiguration.hasHomePositionX() && !machineConfiguration.hasHomePositionY()) {
    writeBlock(gFormat.format(28), gAbsIncModal.format(91), "X" + xyzFormat.format(0), "Y" + xyzFormat.format(0)); // return to home
    } else {
    /* // G53 is not supported
    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
    writeln("%");
    }

    If that doesnt work I would reinstall F360, mine had issues with cam processing when I first installed it.
    Just a quick helpful tip, setup a g28 position before running your cam or delete those lines in the gcode file. It took me forever to figure out why my machine ran into the endstops when I ran the files. Just move to a position high above your workspace and send g28.1.
     
  3. David the swarfer

    David the swarfer OpenBuilds Team
    Staff Member Moderator Builder

    Joined:
    Aug 6, 2013
    Messages:
    521
    Likes Received:
    250
    um, it says
    Code:
    Error: Tool orientation is not supported.
    
    so maybe you need to remove the tool orientation that you have set?
     
  4. EvanBruner

    EvanBruner Veteran
    Builder

    Joined:
    Mar 26, 2016
    Messages:
    69
    Likes Received:
    54
    I missed that bit. Check your tool paths to see if you've changed your tool orientation at all, it should be under the heights tab for each tool path you created.
     

Share This Page

  • About Us

    The OpenBuilds Team is dedicated helping you to Dream it - Build it - Share it! Collaborate on our forums and be sure to visit the Part Store for all your Building needs!
  • Like us on Facebook

  • Support Open Source FairShare Program!

    OpenBuilds FairShare Give Back Program provide resources to Open Source projects, developers and schools around the world. Invest in your future by helping others develop theirs!

    Donate to FairShare!