HELP with Fusion 360 post processor for Baileigh Plasma

HELP with Fusion 360 post processor for Baileigh Plasma

Anonymous
Not applicable
5,185 Views
21 Replies
Message 1 of 22

HELP with Fusion 360 post processor for Baileigh Plasma

Anonymous
Not applicable

 I'm having trouble running the g-code that the fusion 360, Baileigh Plasma generic post processor is generating. The torch is not retracting in the Z axis in between cut moves and the torch flame turns off then back on quickly which causes the work piece to be cut when the torch SHOULD be turning off and retracting in the Z axis before rapid moves. After looking through the g-code it looks like the same line of g-code is being generated twice at the end of each cut move. When I go into the g-code and manually delete the duplicate lines it cuts the way it should with the torch turning off and retracting before rapid moves.

 

I've attached a file for both the Fusion 360 generated g-code and one from UCannest V10 which is the CAD/CAM program (HaHaHa this program sucks) that came with the Baileigh PT-510HD CNC Plasma Cutter.

0 Likes
5,186 Views
21 Replies
Replies (21)
Message 2 of 22

Anonymous
Not applicable

Am I really the only one trying to use the Baileigh PT-510HD Plasma with Fusion 360???

0 Likes
Message 3 of 22

bob.schultz
Alumni
Alumni

Hello Brian,

 

Thanks for bringing this to our attention.  Here is an updated post that will not output duplicate moves when moving from one profile to another.  Please let me know if this output works on your machine and we'll get it into the generic Baileigh plasma post.

 

One question, does your machine have a programmable Z-axis?

 

Thanks



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 4 of 22

Anonymous
Not applicable

No, it does not have a programmable Z-axis. M-8 causes an automatic torch turn off and z retraction before next rapid move.

0 Likes
Message 5 of 22

Anonymous
Not applicable

Hello. I use the Balieigh PT-510HD table and use Fusion 360. Fusion 360 basically takes control over the Baileigh console with most settings. You need to change the settings on the Baileigh console that runs the table, i.e. pierce times, corner times / etc. It takes some trial and much error, but once you get it figured out correctly its much nicer than the Chinese ucancam crap.

Message 6 of 22

christopher7565
Explorer
Explorer

I recently purchased a Baileigh PT-105HD-W, and would like to be able to do everything from Fusion 360, rather than importing in BobCad for post processing.  I don't see a post processor listed in Fusion 360 that will run the Baileigh. Which one are you folks using? In BobCad, its a PP for a MicroStep controller. 

0 Likes
Message 7 of 22

bob.schultz
Alumni
Alumni

You can download and use the Baileigh Plasma post processor from the online Post Library.



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 8 of 22

christopher7565
Explorer
Explorer
I tried the one listed. The file showed up on the machine as one squiggly line Verus a complete drawing.
0 Likes
Message 9 of 22

bob.schultz
Alumni
Alumni

Can you provide sample output that does run on your machine?



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 10 of 22

christopher7565
Explorer
Explorer
This file works. It was drawn in Fusion, and exported as an IGES file to
BobCad. Then PP'd using a MicroStep processor.
0 Likes
Message 11 of 22

bob.schultz
Alumni
Alumni

I don't see the sample file attachment.



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 12 of 22

christopher7565
Explorer
Explorer

Sorry. Replied from my email. Must not have sent the attachment. Try this! lol

0 Likes
Message 13 of 22

bob.schultz
Alumni
Alumni

Still don't see the attachment.  Be sure to use the BROWSE FILES TO ATTACH button to attach the file and view this thread after attaching the file.  The attachment will show up in your post.

 

Attach 1.pngAttach.png



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 14 of 22

christopher7565
Explorer
Explorer

Trying again...

0 Likes
Message 15 of 22

bob.schultz
Alumni
Alumni

There are only basic differences between your sample file and the output from the baileigh_plasma.cps post processor.  You can make the following changes in the post to make it match more closely to your output.

 

Make the following changes in the onOpen function.

 

 

function onOpen()
...
//
writeln("%"); // required // change this line ... // absolute coordinates writeBlock(gFormat.format(92), "X0", "Y0"); writeBlock(gFormat.format(90)); // add this line writeBlock(mFormat.format(62)); // add this line

Make the following changes in the onLinear function to remove the feedrate numbers from the linear moves.

 

 

function onLinear (_x, _y, _z, feed) {
...
    writeBlock(gMotionModal.format(1), x, y /*, f*/); // linear without G-word // change this line
  } else if (f) {
    if (getNextRecord().isMotion()) { // try not to output feed without motion
      feedOutput.reset(); // force feed on next line
    } else {
      // writeBlock(f); // comment out this line

And add the following lines to the onClose function.

function onClose() {
  writeBlock(mFormat.format(8)); // turn off plasma
  writeBlock(mFormat.format(63));  // add this line
  writeBlock(mFormat.format(60));  // add this line
  writeBlock(mFormat.format(2)); // stop program - rewind
}

You can also default to outputting circular interpolation blocks by changing the Circular interpolation property at the top of the post processor.

 

properties = {
  writeMachine: true, // write machine
  showSequenceNumbers: true, // 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
  useCircularInterpolation: true, // change this line to enable circular moves 
  useAbsoluteIJ: true // IJ for G2/G3 is assumed to be absolute
};

 



Bob Schultz
Sr. Post Processor Developer

Message 16 of 22

christopher7565
Explorer
Explorer

Created a new drawing. PP'd with Fusion using the PP you recommended. Attached is the file and a screen shot of what appears on the machine once loaded.  What SHOULD appear on the screen are a bunch of letters for some signage I'm working on.  At first I thought maybe it was a scaling issue (zoomed way in). But I've scaled it down multiple times, and all I see is the squiggly line. 


0 Likes
Message 17 of 22

bob.schultz
Alumni
Alumni

Looking at the output that you provided I noticed that the M62 code is missing from the top of the file and the M63 and M60 from the bottom of the file.  You need to add these using the code snippets I provided previously.  The other thing that I notice is that you are using compensation (G41) in the HSM part.  You can change the Compensation Type to be 'In control' to omit the G41/G40 codes.

In control.png

 

 

There really isn't too much difference in the output from HSM and the sample you provided.  If it is easier for you, you can edit the output from HSM to match the good output and then once you get it running on the machine, it would be quite simple to edit the post to make it match.



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 18 of 22

Mitchellreep
Explorer
Explorer

Hey I am having the same issue. I also was thinking that my file was just zoomed way in. Did you ever figure out how to make this work?

0 Likes
Message 19 of 22

christopher7565
Explorer
Explorer
I didn't. Autodesk said it was an easy fix in the PP file, but I don't know
how to edit the PP. So I have been using BobCAD to PP using their Mircostep
PP.
0 Likes
Message 20 of 22

Mitchellreep
Explorer
Explorer
Hey Chris, I got it to work after a little bit of messing around. PP is posted below. You could copy and paste what’s below. Under manufacturing workspace there is a button to manage your post processors. drag and drop the original Baileigh pp into your local 'personal post' folder. Left click the pp to edit the file. You can copy and paste what I got and see if that works for you. Let me know if you need help.


> /**
> Copyright (C) 2012-2022 by Autodesk, Inc.
> All rights reserved.
>
> Baileigh Plasma post processor configuration.
>
> $Revision: 43727 1654000cf4b49699c85c4609a7371d9af234b038 $
> $Date: 2022-03-29 15:59:01 $
>
> FORKID {103DCA54-E0A9-4A1E-8C69-5091DCA5A834}
> */
>
> description = "Baileigh Plasma EDIT";
> vendor = "Baileigh";
> vendorUrl = "http://www.baileigh.com <>";
> legal = "Copyright (C) 2012-2022 by Autodesk, Inc.";
> certificationLevel = 2;
> minimumRevision = 45702;
>
> longDescription = "Generic post for the Baileigh plasma cutting tables like PT-22, PT-44, and PT-105HD.";
>
> extension = "cnc";
> programNameIsInteger = true;
> setCodePage("ascii");
>
> capabilities = CAPABILITY_JET;
> tolerance = spatial(0.002, MM);
>
> minimumChordLength = spatial(0.25, MM);
> minimumCircularRadius = spatial(0.01, MM);
> maximumCircularRadius = spatial(4000, MM);
> minimumCircularSweep = toRad(0.01);
> maximumCircularSweep = toRad(360);
> allowHelicalMoves = false;
> allowedCircularPlanes = 0; // no arcs
> highFeedrate = (unit == IN) ? 200 : 5000;
>
> // user-defined properties
> properties = {
> writeMachine: {
> title : "Write machine",
> description: "Output the machine settings in the header of the code.",
> group : "formats",
> type : "boolean",
> value : true,
> scope : "post"
> },
> showSequenceNumbers: {
> title : "Use sequence numbers",
> description: "Use sequence numbers for each block of outputted code.",
> group : "formats",
> type : "boolean",
> value : true,
> scope : "post"
> },
> sequenceNumberStart: {
> title : "Start sequence number",
> description: "The number at which to start the sequence numbers.",
> group : "formats",
> type : "integer",
> value : 10,
> scope : "post"
> },
> sequenceNumberIncrement: {
> title : "Sequence number increment",
> description: "The amount by which the sequence number is incremented by in each block.",
> group : "formats",
> type : "integer",
> value : 1,
> scope : "post"
> },
> separateWordsWithSpace: {
> title : "Separate words with space",
> description: "Adds spaces between words if 'yes' is selected.",
> group : "formats",
> type : "boolean",
> value : true,
> scope : "post"
> },
> useCircularInterpolation: {
> title : "Circular interpolation",
> description: "Outputs circles as linear moves when set to no.",
> group : "preferences",
> type : "boolean",
> value : false,
> scope : "post"
> },
> useAbsoluteIJ: {
> title : "Absolute IJ",
> description: "When set to yes, IJ for G2/G3 is assumed to be absolute.",
> group : "preferences",
> type : "boolean",
> value : true,
> scope : "post"
> }
> };
>
> var gFormat = createFormat({prefix:"G", decimals:0, width:2, zeropad:true});
> var mFormat = createFormat({prefix:"M", decimals:0, width:2, zeropad:true});
>
> var xyzFormat = createFormat({decimals:(unit == MM ? 3 : 4), trim:false});
> var feedFormat = createFormat({decimals:(unit == MM ? 0 : 1)});
> var secFormat = createFormat({decimals:3, forceDecimal:true}); // seconds - range 0.001-1000
>
> var xOutput = createVariable({prefix:"X", force:true}, xyzFormat);
> var yOutput = createVariable({prefix:"Y", force:true}, xyzFormat);
> var feedOutput = createVariable({prefix:"F"}, feedFormat);
>
> // circular output
> var iOutput;
> var jOutput;
>
> var gMotionModal = createModal({force:true}, gFormat); // modal group 1 // G2-G3 - linear moves do not use G-word
> var gAbsIncModal = createModal({}, gFormat); // modal group 3 // G90-91
> var gUnitModal = createModal({}, gFormat); // modal group 6 // G70-71
>
> // collected state
> var sequenceNumber;
> var currentWorkOffset;
>
> /**
> Writes the specified block.
> */
> function writeBlock() {
> if (getProperty("showSequenceNumbers")) {
> writeWords2("N" + sequenceNumber, arguments);
> sequenceNumber += getProperty("sequenceNumberIncrement");
> } else {
> writeWords(arguments);
> }
> }
>
> function formatComment(text) {
> return "(" + String(text).replace(/[()]/g, "") + ")";
> }
>
> /**
> Output a comment.
> */
> function writeComment(text) {
> // not supported writeln(formatComment(text));
> }
>
> function onOpen() {
>
> if (getProperty("useCircularInterpolation")) {
> allowedCircularPlanes = 1 << PLANE_XY; // only XY
> }
>
> // only one of I or J are required
> if (getProperty("useAbsoluteIJ")) {
> iOutput = createVariable({prefix:"I", force:true}, xyzFormat);
> jOutput = createVariable({prefix:"J", force:true}, xyzFormat);
> } else {
> iOutput = createReferenceVariable({prefix:"I", force:true}, xyzFormat);
> jOutput = createReferenceVariable({prefix:"J", force:true}, xyzFormat);
> }
>
> if (!getProperty("separateWordsWithSpace")) {
> setWordSeparator("");
> }
>
> sequenceNumber = getProperty("sequenceNumberStart");
> writeln("%"); // required
>
> /*
> if (programName) {
> var programNumber;
> try {
> programNumber = getAsInt(programName);
> } catch(e) {
> error(localize("Program name must be a number."));
> return;
> }
> if (!((programNumber >= 1) && (programNumber <= 99999999))) {
> error(localize("Program number is out of range."));
> }
>
> var oFormat = createFormat({width:8, zeropad:true, decimals:0});
> writeBlock("P" + oFormat.format(programNumber)); // max 8 digits
> }
> */
>
> if (programComment) {
> writeComment(programComment);
> }
>
> // dump machine configuration
> var vendor = machineConfiguration.getVendor();
> var model = machineConfiguration.getModel();
> var description = machineConfiguration.getDescription();
>
> if (getProperty("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);
> }
> }
>
> switch (unit) {
> case IN:
> writeBlock(gUnitModal.format(20));
> break;
> case MM:
> writeBlock(gUnitModal.format(21));
> break;
> }
>
> // absolute coordinates
> writeBlock(gFormat.format(92), "X0", "Y0");
> writeBlock(gFormat.format(90));
> writeBlock(mFormat.format(62));
> }
>
> function onComment(message) {
> writeComment(message);
> }
>
> /** Force output of X, Y, and Z. */
> function forceXYZ() {
> xOutput.reset();
> yOutput.reset();
> }
>
> /** Force output of X, Y, Z, and F on next output. */
> function forceAny() {
> forceXYZ();
> feedOutput.reset();
> }
>
> function onSection() {
>
> switch (tool.type) {
> case TOOL_PLASMA_CUTTER:
> break;
> default:
> error(localize("The CNC does not support the required tool/process. Only plasma cutting is supported."));
> return;
> }
>
> switch (currentSection.jetMode) {
> case JET_MODE_THROUGH:
> break;
> case JET_MODE_ETCHING:
> error(localize("Etch cutting mode is not supported."));
> break;
> case JET_MODE_VAPORIZE:
> error(localize("Vaporize cutting mode is not supported."));
> break;
> default:
> error(localize("Unsupported cutting mode."));
> return;
> }
>
> { // 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();
>
> /*
> var initialPosition = getFramePosition(currentSection.getInitialPosition());
> gMotionModal.reset();
> writeBlock(
> gAbsIncModal.format(90),
> 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), "F" + secFormat.format(seconds));
> }
>
> function onCycle() {
> error(localize("Canned cycles are not supported by CNC."));
> }
>
> function onCyclePoint(x, y, z) {
> }
>
> function onCycleEnd() {
> }
>
> var pendingRadiusCompensation = -1;
>
> function onRadiusCompensation() {
> pendingRadiusCompensation = radiusCompensation;
> }
>
> var shapeArea = 0;
> var shapePerimeter = 0;
> var shapeSide = "inner";
> var cuttingSequence = "";
>
> function onParameter(name, value) {
> if ((name == "action") && (value == "pierce")) {
> // add delay if desired
> } else if (name == "shapeArea") {
> shapeArea = value;
> } else if (name == "shapePerimeter") {
> shapePerimeter = value;
> } else if (name == "shapeSide") {
> shapeSide = value;
> } else if (name == "beginSequence") {
> if (value == "piercing") {
> if (cuttingSequence != "piercing") {
> if (getProperty("allowHeadSwitches")) {
> // Allow head to be switched here
> // onCommand(COMMAND_STOP);
> }
> }
> } else if (value == "cutting") {
> if (cuttingSequence == "piercing") {
> if (getProperty("allowHeadSwitches")) {
> // Allow head to be switched here
> // onCommand(COMMAND_STOP);
> }
> }
> }
> cuttingSequence = value;
> }
> }
>
> function onPower(power) {
> writeBlock(mFormat.format(power ? 7 : 8));
> }
>
> function onRapid(_x, _y, _z) {
> // at least one axis is required
> var flag = xyzFormat.areDifferent(_x, xOutput.getCurrent()) || xyzFormat.areDifferent(_y, yOutput.getCurrent());
> if (pendingRadiusCompensation >= 0) {
> // ensure that we end at desired position when compensation is turned off
> xOutput.reset();
> yOutput.reset();
> flag = true;
> }
> var x = xOutput.format(_x);
> var y = yOutput.format(_y);
> if (flag) {
> if (pendingRadiusCompensation >= 0) {
> pendingRadiusCompensation = -1;
> switch (radiusCompensation) {
> case RADIUS_COMPENSATION_LEFT:
> writeBlock(gFormat.format(41));
> break;
> case RADIUS_COMPENSATION_RIGHT:
> writeBlock(gFormat.format(42));
> break;
> default:
> writeBlock(gFormat.format(40));
> }
> }
> writeBlock(gMotionModal.format(0), x, y, feedOutput.format(highFeedrate)); // fast linear move
> // feedOutput.reset();
> }
> }
>
> function onLinear(_x, _y, _z, feed) {
> var flag = xyzFormat.areDifferent(_x, xOutput.getCurrent()) || xyzFormat.areDifferent(_y, yOutput.getCurrent());
> // 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();
> flag = true;
> }
> var x = xOutput.format(_x);
> var y = yOutput.format(_y);
> var f = feedOutput.format(feed);
> if (flag) {
> if (pendingRadiusCompensation >= 0) {
> pendingRadiusCompensation = -1;
> switch (radiusCompensation) {
> case RADIUS_COMPENSATION_LEFT:
> writeBlock(gFormat.format(41));
> break;
> case RADIUS_COMPENSATION_RIGHT:
> writeBlock(gFormat.format(42));
> break;
> default:
> writeBlock(gFormat.format(40));
> }
> }
> writeBlock(gMotionModal.format(1), x, y/*, f*/); // linear without G-word
> } else if (f) {
> if (getNextRecord().isMotion()) { // try not to output feed without motion
> feedOutput.reset(); // force feed on next line
> } else {
> //writeBlock(f)//;
> }
> }
> }
>
> function onRapid5D(_x, _y, _z, _a, _b, _c) {
> error(localize("The CNC does not support 5-axis simultaneous toolpath."));
> }
>
> function onLinear5D(_x, _y, _z, _a, _b, _c, feed) {
> error(localize("The CNC does not support 5-axis simultaneous toolpath."));
> }
>
> function onCircular(clockwise, cx, cy, cz, x, y, z, feed) {
>
> if (pendingRadiusCompensation >= 0) {
> pendingRadiusCompensation = -1;
> switch (radiusCompensation) {
> case RADIUS_COMPENSATION_LEFT:
> writeBlock(gFormat.format(41));
> break;
> case RADIUS_COMPENSATION_RIGHT:
> writeBlock(gFormat.format(42));
> break;
> default:
> writeBlock(gFormat.format(40));
> }
> }
>
> var start = getCurrentPosition();
>
> if (isFullCircle()) {
> switch (getCircularPlane()) {
> case PLANE_XY:
> forceXYZ();
> if (getProperty("useAbsoluteIJ")) {
> writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), iOutput.format(cx), jOutput.format(cy));
> } else {
> 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:
> if (getProperty("useAbsoluteIJ")) {
> writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), iOutput.format(cx), jOutput.format(cy));
> } else {
> writeBlock(gMotionModal.format(clockwise ? 2 : 3), xOutput.format(x), yOutput.format(y), iOutput.format(cx - start.x, 0), jOutput.format(cy - start.y, 0), feedOutput.format(feed));
> }
> break;
> default:
> linearize(tolerance);
> }
> }
> }
>
> var mapCommand = {
> COMMAND_STOP : 0,
> COMMAND_OPTIONAL_STOP: 1
> };
>
> function onCommand(command) {
> switch (command) {
> case COMMAND_POWER_ON:
> return;
> case COMMAND_POWER_OFF:
> 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() {
> writeBlock(mFormat.format(8)); // turn off plasma
> writeBlock(mFormat.format(63));
> writeBlock(mFormat.format(60));
> writeBlock(mFormat.format(2)); // stop program - rewind
> }
>
> function setProperty(property, value) {
> properties[property].current = value;
> }