What's new
What's new

Adding Fanuc Nanosmoothing functions to a CAMWORKS Post - has anyone done this?

serview

Aluminum
Joined
Sep 14, 2012
Location
NJ
Hello,
We just had the Nano Smoothing option added to our Fanuc OiMF controller on our Doosan DNM5700
Per suggestion of Doosan, we also added AICC2 200 block look ahead upgrade, and Jerk control at the same time.
(These were options when we got our machine, but I think they may be standard now)

We now are looking to add the Nanosmoothing GCODE functions to our POST (we use CAMWORKS)

We have spoken to Paul Anderson @ Doosan and he gave us excellent guidance, but our CAMWORKS reseller who maintains our post has not done this yet in a POST. The CAMWORKS reseller will implement the Nanosmoothing function and I am trying to help them with details and tips on how to do it, and learn enough about the function to be able to test and understand code prior to running it after the post is updated. I am gathering data to help them understand what we need to do, so can anyone share experience or tips to help?

Reviewing FANUC documentation, I find this info:
Nanosmoothing FANUC info from manual.jpg

I am curious how people who use the Fanuc Nanosmooth function have integrated this into the post you use?

I have been asking Doosan applications engineering questions, and here is what I have so far:
What does Q1 indicate?
Q1 turns AICC on, Q0turns AICC off.
in the manual we see reference to Q1 and Q3, but no exact definition yet
As stated above, Q1 turns AICC on. Q3 turns on Nano Smoothing if or when you get it installed.

What does the R1 through R10 indicate?
R1-R10 sets a level of optimization. R1 is for roughing and R10 is for fine finishing. R5 would be middle of the road. This determines optimum feeds to keep high feed rates from over shooting or generally giving poor finishes. It disregards program feed rate to some extent in order to maintain machine performance. R1 is faster but does not respect part/model geometry as much. R10 absolutely respects part/model geometry so as to not violate the part geometry. It is slower because the acceleration/deceleration is kicked up a notch. You will mostly notice this when using feed rates in excess of 100 IPM. For example, if you program a shape using 250 IPM and you see that it never reaches that feed rate, this is why. You can use any R value in between 1 and 10 depending on requirements.

Should we be updating the G5.1 Q1 R instruction at various locations the code depending on desired level of rough vs finish?
Yes, this is the exact idea.
If so, do people typically have the post processor handle this?
Yes, your post person will know what to do with this.

Other tips from Doosan: General practice for 3 axis surfacing like this is rough, semi-finish, then finish. R2 for roughing, R5 for semi-finish, then R8 or R10 for finishing. Your mileage may vary.

I can start using the functions by manually putting the commands into CAMWORKS generated GCODE, but would like to get this added to the CAMWORKS Post.
I am searching old PM threads and found some good info that helps, but so far no specifics or methods on how to integrate into a POST processor.
How do people typically set the level of smoothing so the POST knows what to do?
I will need to work with our Solidworks/CAMWORKS reseller to implement this in our post, so if anyone has experience and has done this in CAMWORKS please share info if you can.

Is anyone using a CAM program with a post with nanosmoothing integrated into it?
This would be good to know how it functions for you, and where/how you set the level of smoothing in the interface as this seems like it is a custom function so the interface needs to support this as a new field.

Any feedback or comments would be much appreciated,
Thanks!
Steve
 

Attachments

  • Nanosmoothing FANUC.jpg
    Nanosmoothing FANUC.jpg
    20.4 KB · Views: 76
Hi Steve,

I don't have answers to your specific questions re: CAMWORKS, but maybe some more general advice/context that could help.

Many controls offer a similar feature -- essentially a scale, 1 to 5, or 1 to 6, or 1 to 10, or 1 to X -- that controls the desired "smoothness" of the tool path. Some will break out accuracy and smoothness as somewhat separate things: for example, perfect part accuracy may not matter as much on a purely aesthetic 3D surface, whereas smoothness and finish does, but absolute accuracy does matter on a 3D surface in medical applications.

I'd recommend thinking about how you'd like to use this feature. Do you want "sane defaults," or do you want absolute control? The CAM integration will be different depending.

For instance, I prefer full control for tuning purposes. I've modified my post (not CAMWORKS, but Fusion 360) to look for certain strings in the name of the operation. If it sees "M289 L6", it will output it at the beginning of the operation and reset it with M289 L0 at the end (M-Codes specific to the Brother C00 control). I tend to program my part and then go through each operation and add the appropriate accuracy/smoothing code to each operation name based on what I think is most appropriate, and I can always change it later on if I find that I want to tune things further towards speed or accuracy/smoothness.

On the other hand, if you want sane defaults and to never have to think about nano smoothing yourself, then you'll have to "guess" based on other parameters in the operation. For instance, is there a notion of toolpath tolerance in CAMWORKS? You could set the nano smoothing setting as a function of tolerance. If the tolerance is 0.004in, you probably don't care about part accuracy, so set R1. If it's 0.0001, you probably do -- set R8 or R10.

Figuring out how you'd like to use nano smoothing and offering an example like the above will help your post person create an implementation that serves your needs/preferences.
 
Sane defaults? Steve brings up a good point. Sane defaults on the control side or the CAM side. Before the advent of AICC or HPCC or whatever it was called, you had to make your toolpaths so dense with very small line segments in order to get good accuracy and finishes. But you could not run at high feeds because the machine could not keep up. All well and good, you just ran at the feeds that gave the best results. Still better than the alternatives.

Enter AICC and look ahead. Now the machine can run a lot faster because with large look ahead the machine can adjust feeds to acomodate sharp changes in direction. The programs still had to be large because the control was still seeing thousand if not millions of line segments. It would just slow down enough to keep from crashing into corners and such. Modern toolpaths helped with the major part of accurate machining because dynamic toolpaths helped avoid the crashing into and out of tight corners.

Enter Nano Smoothing. Other control makers call it something different. Nano Smoothing takes those thousands of tiny line segments and dynamically creates a spline as it moves along the toolpath. It holds a specific tolerance from the initial set of line segments and that tolerance is either set in a parameter or on the line of code turning on Nano Smoothing. I think the Fanuc default is .001MM. Does it need to be that small? Probably not. What a lot of people don't realize is that now you can loosen up the line segments in CAM because the control can now make a more accurate path using longer line segments if those line segments now get converted to splines on the fly. What happens? A much smaller program is needed, look ahead overhead is reduced and the machine can keep up better even on less optioned controls. Don't forget, a 31I is much different than an Oi-F or even an older 16i because processing speed is radically different with all other things being equal. What I don't see happening is people making more sane adjustments to their CAM programs like reducing the tolerance in CAM or using CAM smoothing in a more judicious manner.

Paul
 
Hi Steve,
I'm not a camworks user either (f360 for me) but maybe my implementation can offer you some inspiration that can be applied to your camworks Post. As stated before in this thread, there are a bunch of different ways to do this - this is just mine.

F360 has a (not well documented) function where you can add operation-specific settings based on your machine profile which will add an extra dialog to each operation's parameters.

Screen Shot 2020-10-12 at 9.14.06 AM.jpg

As of right now, our machine only has Q0 and Q1, so we have three options - AICC OFF, AICC ON, or AICC AUTO. The first two options are self-explanatory, and the third option tells the post to look at axial stock to leave in order to determine which mode to use. Note - my post is based off a haas EC400 post and I haven't had the time to change the name of the writeG187() function all throughout the file, but the concept remains. This is a little quick and dirty and should be cleaned up, but it gets the job done.

In my onSection:
Code:
  if (properties.useAICC) {
    var smoothing = parseInt(currentSection.properties.smoothing);
    if (smoothing == 1){
      writeBlock(gFormat.format(5.1), "Q1");
    } else if (smoothing == 2){
      writeBlock(gFormat.format(5.1), "Q0");
    } else {
      writeG187();
    }
  }

writeG187() function:
Code:
function writeG187() {
  if (hasParameter("operation-strategy") && (getParameter("operation-strategy") == "drill")) {
    writeBlock(gFormat.format(5.1), "Q0"); // reset G5.1 setting to machine default
  } else if (hasParameter("operation:tolerance")) {
    var tolerance = Math.max(getParameter("operation:tolerance"), 0);
    if (tolerance > 0) {
      var stockToLeaveThreshold = toUnit(properties.aiccThreshold, IN);
      var stockToLeave = 0;
      var verticalStockToLeave = 0;
      if (hasParameter("operation:stockToLeave")) {
        stockToLeave = xyzFormat.getResultingValue(getParameter("operation:stockToLeave"));
      }
      if (hasParameter("operation:verticalStockToLeave")) {
        verticalStockToLeave = xyzFormat.getResultingValue(getParameter("operation:verticalStockToLeave"));
      }

      var workMode;
      if ((stockToLeave > stockToLeaveThreshold) || (hasParameter("operation:strategy") && getParameter("operation:strategy") == "face")) {
        workMode = 0; // roughing
      } else {
        if ((stockToLeave != 0) || (verticalStockToLeave != 0)) {
          workMode = 1; // default
        } else {
          workMode = 1; // fine
        }
      }
      writeBlock(gFormat.format(5.1), "Q" + workMode); // set tolerance mode
    } else {
      writeBlock(gFormat.format(5.1), "Q0"); // reset G5.1 setting to machine default
    }
  } else {
    writeBlock(gFormat.format(5.1), "Q0"); // reset G5.1 setting to machine default
  }
}

The way I have it set up, in the post settings you have a stock to leave threshold where the default (auto) setting will compare it to the operation's stock to leave. In my post (and the haas post) it's a simple Yes/No, but you can take this concept and make it a multi-level deal.

IMO this is the best of both worlds, you can leave it on auto if you don't want to think about it, but if you want to specifically command a smoothing level, you have the freedom to. Again, there are a bunch of ways to do this, this just happens to be my implementation.
 








 
Back
Top