Fusion 360 Post Processor MPCNC v3.0 (Beta 3) is Available

Release V3.0 (Beta 3) of the Flyfisher604 F360 post processor is available.

Beta 3 - addresses an issue that prevented coolant commands from working.
Beta 2 - addressed issues related to Laser On and Off commands not working as expected.
Beta 1 - addressed changes related to how F360 passes parameters to post processors

The Beta 1 update required a complete rework of the parameter handling within the MPCNC post-processor as Fusion 360 updated the interface and invalidated the old mechanism.

The changes required updating many parts of the post-processor and were not simply limited to a parameter display issue. Anywhere parameters were used, the post-processor required modification. Parameters control which parts of the post-processor run and the values used to transform the internal F360 codes to GCode.

Simple testing has been done, but no extensive testing with different sets of parameters has been conducted. Please review all generated GCode closely.

All testing was done in mm. However, the F360 documentation indicates that the way inches are handled has changed. When the post-processor was updated, no attempt was made to understand or accommodate these documented changes. Assume that inches do not work, and test extensively any GCode generated with inches selected.

WARNING:

  • This is BETA code.
  • Review all generated GCode carefully.
  • Use at your own risk.

Installation
Unzip MPCNC v3.0 (Beta 3).zip and install MPCNC v3.0 (Beta 3).cps using the F360 Post-Processor setup dialog.

Success and Errors/Issues
Please post successes and errors/issues to this thread so the post-processor can be confirmed to work and issues resolved.

MPCNC v3.0 (Beta 3).zip (14.7 KB)

4 Likes

Thanks for your work on this!

1 Like

Don, thank you very much for updating this! I haven’t played CNC in some time, and had an unpleasant surprise when I discovered F360 updates broke the v2.1 pp I was using. I found this thread, updated the PP, and now am getting proper useable output. Now I will be able to try my first cuts on carbon fiber!

This would not have been possible if it weren’t for your continued work on the PP. I would like to give you some compensation in return. Please LMK if you have a patreon or similar where I can send you something (a thread reply or DM reply is fine with me).

Thank you very much,
Kevin

2 Likes

There seems to be a bug when setting the “comment level” to Debug. Extra information is added in JSON(machine name, type etc.) format, but it is not commented.

Can you attach a snippet of what you are seeing or are comments missing.

Sure. I have defined the machine and tools in fusion settings. From the beginning.

; parseSafeZProperty: safeZMode = 'Retract'
; parseSafeZProperty: safeZHeightDefault = 15
; param: product-id = fusion360
;Fusion CAM 2602.1.14
; Posts processor: MPCNC v3.0 Beta 3.cps
; Gcode generated: Friday, June 6, 2025 7:49:42 PM GMT
; param: hostname = host
; param: username = user
; Document: Carve_test_1 v3
; param: document-id = 5facdf9b-b1d9-a88-a769-863cdb818940
; param: model-version = eedaf162-0897-431b-8daf-a07e0ed7a84d
; param: leads-supported = 1
; Setup: Setup2
; param: machine-id = 2
; param: machine-v2 = {
   "controller" : {
      "default" : {
         "head_info_part_id" : "head",
         "max_block_processing_speed" : 0,
         "max_normal_speed" : 1800,
         "non_tcp_rapid_interpolation_mode" : "Synchronized",
         "parts" : {
            "X" : {
               "coordinate" : 0,
               "max_normal_speed" : 0,
               "max_rapid_speed" : 0,
               "preference" : "negative",
               "reset" : "never",
               "reversed" : false,
               "tcp" : false,
               "zero_position_offset" : 0
            },
            "Y" : {
               "coordinate" : 1,
               "max_normal_speed" : 0,
               "max_rapid_speed" : 0,
               "preference" : "negative",
               "reset" : "never",
               "reversed" : false,
               "tcp" : false,
               "zero_position_offset" : 0
            },
            "Z" : {
               "coordinate" : 2,
               "max_normal_speed" : 0,
               "max_rapid_speed" : 0,
               "preference" : "negative",
               "reset" : "never",
               "reversed" : false,
               "tcp" : false,
               "zero_position_offset" : 0
            }
         },
         "table_part_id" : "table",
         "tcp_rapid_interpolation_mode" : "ToolTip"
      }
   },
...
; param: stock-type = box
; param: stock = 0, 0, -19, 202, 202, 0
; param: stock-lower-x = 0
; param: stock-lower-y = 0
; param: stock-lower-z = -19
; param: stock-upper-x = 202
; param: stock-upper-y = 202
; param: stock-upper-z = 0
; param: part-lower-x = 1
; param: part-lower-y = 1
; param: part-lower-z = -19
; param: part-upper-x = 201
; param: part-upper-y = 201
; param: part-upper-z = -1
...

I have trimmed the data because it would be to long. After the json data, the next commented param is

; param: stock-type = box

It seems that param: machine-v2 is multi-line string and only the first line is commented.

Modified options:
1-Job

  • Comment level: Debug

5-Probe

  • On job start: True
  • After tool change :True
  • Plate thickness: 10
  • Use home Z (G28): False

Ok, I understand the problem.

Looks like F360 now passes a multi-line value for a parameter where previously it didn’t. PP isn’t expecting that as previously all parameters passed were single line values.

An enhancement would be needed to recognize these multi-line values and then format them. A less attractive alternative would be to omit them.

Given that this happens only with comment level Debug, I’m inclined to leave this issue alone for now. The information output is valuable (even if it creates invalid GCode).

Debug level was mostly a way for me (or you) to see what was being sent from F360 and ensure the PP had code to catch all the different elements sent. It would be best if this created a valid GCode file, but it’s not the end of the world if it doesn’t as the comment level can obviously be set to a non-debug level.

Thanks for noting this. I will look at this issue the next time I’m modifying the code. Unfortunately, I don’t have a timeline for when that will occur.

Please let me know if there are other issues this is causing or if you were using the Debug level as there was some other issue you were attempting to diagnose.

2 Likes

I have modified the writeComment function to take in to account new lines. Did not test it much but it should work fine. You can use it if you want.

  const commentTypes = {
    [eFirmware.MARLIN]:{prefix:";", suffix:""},
    [eFirmware.GRBL]:{prefix:"(", suffix:")"}
  }
  
  // Output a comment
  function writeComment(level, text) { 
    if (commentLevels.indexOf(level) <= commentLevels.indexOf(getProperty(properties.job3_CommentLevel))) {
      const eCommentType = commentTypes[fw] || { prefix: ';', suffix: '' };
      const lines = String(text).split('\n');

      for (const line of lines){
          writeln(eCommentType.prefix + line.replace(/[\(\)]/g, "") + eCommentType.suffix);
      }
  }
}

Thanks, I will review and include in a new beta in the coming weeks.