4th axis rotary problem - every line feedrate and terribly slow feedate

4th axis rotary problem - every line feedrate and terribly slow feedate

Anonymous
Not applicable
6,065 Views
22 Replies
Message 1 of 23

4th axis rotary problem - every line feedrate and terribly slow feedate

Anonymous
Not applicable

Hello,

 

I have a problem with 4th axis toolpath - Rotary on Haas NGC machine.

 

If I set "Rotary moves use IPM" at YES then feedrate is terribly slow (few times slower than normal).

 

If I set "Rotary moves use IPM" at NO then axis is jerking and it move smoothly.

 

Why almost on every single line there is a feedrate value? Diameter is the same over the length.

 

Thanks,

Maciek

Accepted solutions (1)
6,066 Views
22 Replies
Replies (22)
Message 2 of 23

johnswetz1982
Advisor
Advisor

Unless you have it set to use Inverse Time (second option you re describing I think) You need to change a Control Parameter that sets a diameter (Not sure what number it is) that the controller uses to calculate the actual feed rate. That is my guess why you are having trouble with the first option you have listed. 

Message 3 of 23

boopathi.sivakumar
Autodesk
Autodesk

Hi @Anonymous  This is been asked quite a few times in the forum the difference between the Inverse time feedrate and DPM this thread will get you some idea on this

https://forums.autodesk.com/t5/fusion-360-manufacture/rotary-axis-moving-too-slow/m-p/9516431#M81161

>> Regardless of both the types you usesd you will see the feedrates in every line

 

Also you have one another way to define is let the controller calculate the feed you can give the feed in mm/min or in /min. in Haas you have setting 34 ( 4 axis rotary) and 79 (for 5 axis rotary)

Setting_34_and_79.png

You can refer the this above.

But to skip the DPM feed rate in fusion the post needs to be modified a little bit. if you open the post in any editor 

you will need to edit the below mentioned area

  if (!properties.useDPMFeeds) { // inverse time
    f.frn = getInverseTime(length.tool, feed);
    f.fmode = 93;
    feedOutput.reset();
  } else { // degrees per minute
    f.frn = feed     //<<Change to feed instead of getFeedDPM(length, feed);
    f.fmode = 94;
  }
  return f;

 This will allow the post not to calculate the DPM feeds. instead it will allow you post the feed whatever you are inputting.

Let me know your thoughts on this

 


Boopathi Sivakumar
Senior Technology Consultant

Message 4 of 23

Anonymous
Not applicable

Hi,

 

I made a mistake in first post - there should be "then axis is jerking and it DOESN'T move smoothly." instead of "then axis is jerking and it move smoothly.".

 

@boopathi.sivakumarI have setting 34 set at 160 mm (HRT-160 SS).

 

There is a little mistake here - there should be ; after "feed":

 

  if (!properties.useDPMFeeds) { // inverse time
    f.frn = getInverseTime(length.tool, feed);
    f.fmode = 93;
    feedOutput.reset();
  } else { // degrees per minute
    f.frn = feed     //<<Change to feed instead of getFeedDPM(length, feed);
// there should be ; after feed   

 f.fmode = 94;
  }
  return f;

 

 

Ok, so here we have 3 options:

 

1 - NGC post with IPM FEEDS:

* axis moves smoothly

* feedrate is too low

* feedrate changes with diameter

 

2 - NGC post without IPM FEEDS:

* axis doesn't move smoothly (because feedrate is in every line and also in every line there is diffrent value)

* feedrate changes with diameter

 

3 - NGC post with @boopathi.sivakumar modification:

* axis moves smoothly

* feedrate doesn't change with diameter

 

So my conclusion is that first option is the best, but there is a problem with calculations of radius, movetime or some length.

 

Correct me if I'm wrong:

 

var moveTime = _moveLength.tool / _feed;

var moveTime = [mm] / [mm/min] = [min]

 

dpmFeed = Math.min(toDeg(_moveLength.abcLength) / moveTime, maxDPM);

dpmFeed = [°] / [min]

 

Shouldn't it be [rad/s] instead of [°/min]?

Message 5 of 23

salesZGW43
Contributor
Contributor

i am having exactly the same problem on a new vf3 with hr210 rotary and have to agree with your conclusion.

 

"So my conclusion is that first option is the best, but there is a problem with calculations of radius, movetime or some length."

 

 

0 Likes
Message 6 of 23

Anonymous
Not applicable

Ok, I think I have some some solution.

 

 

First issue - axis was veery slow:

 

I made some calculations and I see this post gives 10 times lower feedrate than it should be. Is this 100% correct? I'm not sure, but it works.

haas4th.png

 

So I changed this line:

 

 

 

 

var moveTime = _moveLength.tool / _feed;

 

 

 

 

to this:

 

 

 

 

var moveTime = (_moveLength.tool*0.1) / _feed;

 

 

 

 

 

 

 

Second issue - everyline feedrate

 

Propably if you set "Rotary moves use IPM feeds: Yes" this issue won't be a problem for you, but if it is then try to change this:

 

 

 

 

var dpmFeedToler = 0.5; // tolerance to determine when the DPM feed has changed

 

 

 

 

 to this:

 

 

 

 

var dpmFeedToler = 2; // tolerance to determine when the DPM feed has changed

 

 

 

 

I think everyone should test this value. 2 is ok in this case, but it may not be best solution for other parts. Also I don't know how it will work with conical shape (surface quality after machining).

 

You need to check as below:

post.jpg

 

 

Please let me know how it works. You can download it below.

Message 7 of 23

bob.schultz
Alumni
Alumni
Accepted solution

It looks like the title to enable G94 feed rates for multi-axis moves is incorrect, it should say Rotary moves use DPM feeds.  The post by default is actually setup to use a combination of FPM and DPM feed rates when this property is enabled and there is a scaling factor for the ratio of the rotary axis movement compared to the linear axis movement, referred to as "Pulses per  minute".  This scaling factor is defined in the dpmBPW variable.  If the feed rates seem to be off by 10, then you can modify this value so that the rotary movements are equal to the linear movements in the calculation.

// CHANGE THE FOLLOWING VALUE TO 1.0
var dpmBPW = 1.0; // ratio of rotary accuracy to linear accuracy for DPM calculations

 Please let us know if this resolves the issue and we will modify the library post.



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 8 of 23

Anonymous
Not applicable

It works great. Please update the official Haas NGC post.

0 Likes
Message 9 of 23

sbiATTE8
Explorer
Explorer

Hi! I have the same problem with "Doosan Mill/Turn with Fanuc 0i/31i control" post processer, I have tried to have the ratio to be 1.0:1.0 instead of 1.0:0.1, but nothing has been changed! Please let me know what I can do with this post processor!

0 Likes
Message 10 of 23

bob.schultz
Alumni
Alumni

Hello @sbiATTE8,

 

What type of operation are you using when the feedrates are slow?  Is it a radial multi-axis operation or an axial milling operation?

 

The Doosan post is setup to use straight DPM feedrates, so the dpmBPW variable is not used.  It is possible to change the DPM calculations to use Combination FPM/DPM by making a simple change in the post, but first I would like to verify the operation that is causing the slow feeds.  Is it possible for you to furnish your model or at least the output that was generated from the post?



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 11 of 23

sbiATTE8
Explorer
Explorer

Good morning Mr. Bob

 

            Sorry about the late response!

            It was a 2-D contour Wrap toolpath on a cylinder. The terribly slow federate did not happen every line but happens randomly in similar cases.

 

Best

Siyu

0 Likes
Message 12 of 23

bob.schultz
Alumni
Alumni

Hello Siyu,

 

Thanks for supplying the part and output.  The feedrate numbers look pretty consistent in the output, except for the first move.

 

Z7.936 C0.903 F3.84

 

Since you also mentioned that the slow feeds are happening randomly, I am guessing the you will need to use Combination DPM feeds (using the rotary and linear axis moves in the feedrate calculations) rather than the straight DPM feeds that are being output by the post.  You can make the following changes in the getFeedDPM function to output Combination DPM feedrates.

 

  } else if (false) { // standard DPM

  ...

  } else if (true) { // combination FPM/DPM

 

This change will maintain the feedrate values when the linear axes move greater than the rotary axis, which is what is happening in this case.  The low feedrate value block now looks like this after the change.

 

Z7.936 C0.903 F197.3



Bob Schultz
Sr. Post Processor Developer

Message 13 of 23

sbiATTE8
Explorer
Explorer

Thank you very much !

0 Likes
Message 14 of 23

djordje.gavrilovicQL2DF
Participant
Participant

Hello @bob.schultz ,

 

I have a similar problem. I have a Haas VF 0 from '98 with PreNGC and HRT160.

I am trying to perform a spiral rotary finishing operation with constantly changing diameter which is machined (sort of a free form profile around a cylinder approx. 35mm in diameter). Either seeing the A axis moving slow or the motion is jittery/choppy when I up the feedrate.

I am using a prengc with a axis post from the library. I've made some changes which you mentioned above. But i cannot get it to feed more/faster and do it smoothly?

Also i am getting a changing feedrate at many lines somewhat consistent with some being off. Attached is the nc program (3003), mine altered post processor and the original post processor from the library.

Additionally I have dpmBPW set at 1.0 and setting 34 in my machine control unit is set to 1.0.

Highlighted blue is the contureHighlighted blue is the contureHighlighted is the dpmFeed changedHighlighted is the dpmFeed changed

IPM feeds is set to off, if its set to on (with altered post) i get a failed nc)IPM feeds is set to off, if its set to on (with altered post) i get a failed nc)

0 Likes
Message 15 of 23

bob.schultz
Alumni
Alumni

Hello @djordje.gavrilovicQL2DF,

 

The change you made gets an error since you are using an undefined variable (dpmFeed) in the following command.

 

    f.frn = dpmFeed; // <<< dpmFeed is not defined in this function

 

You should start again with the original version of the post and make the following change in the getFeedDPM function, as it is now using the X-axis to determine the radius of the part, but should be using the Z-axis.  The equation should reference _moveLength.radius.z instead of _moveLength.radius.x.

 

} else { // machine specific calculation
    // <<< Change _moveLength.radius.x to _moveLength.radius.z in the following command
    var feedRate = _feed / (_moveLength.radius.z / (toPreciseUnit(getProperty("setting34"), IN) / 2.0));
    dpmFeed = Math.min(feedRate, highFeedrate);
    if (Math.abs(dpmFeed - previousDPMFeed) < dpmFeedToler) {
      dpmFeed = previousDPMFeed;
    }
  }

 

One thing that concerns me is that the Y-axis is at Y-15mm during the cutting moves.  If this is not at the center of the table, then the Y-axis has to come into play when calculating the actual radius, so the line should look like the following instead.

 

    radius = new Vector(0, _moveLength.radius.y, _moveLength.radius.z).length; // <<< Added this line
    var feedRate = _feed / (radius / (toPreciseUnit(getProperty("setting34"), IN) / 2.0)); // <<< Modify this line

 

This would correspond closer to a ~35mm cylinder.

 

On a side note, the Haas with A-axis post processor has been deprecated and has been replaced with the Haas Pre-NGC post processor.  This post uses a machine configuration to define the rotary axis or it can be hardcoded in the defineMachine function of the post.  This post should have the correct radius and feedrate calculations based on the orientation of the rotary axis.

 



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 16 of 23

djordje.gavrilovicQL2DF
Participant
Participant

Hello @bob.schultz ,

 

Thanks for the quick reply. I've tried both Haas Pre-NGC post in which I hardcoded A axis in defineMachine function and Haas pre-NGC with A axis (deprecated one) with changes that you suggested. Altered posts in the attachment. I hope I did the changes correctly but still no luck. I get similar NCs and results: Slow feed, and if the feed is increased a axis starts to get choppy.

Also with the Haas Pre-NGC post a axis is bound between -360/360 degrees. What would be the correct default setting for it to be able to wind and rewind unbound? Currently i get a note Tool is retracting due to rotary axes limits which it does in-between moves after it reaches +-360deg. And at the start a axis always rewinds to -360 deg, doesn't just start at 0deg.

I've attached also my F360 test piece if it helps.

 

 

 

0 Likes
Message 17 of 23

djordje.gavrilovicQL2DF
Participant
Participant

I'll attach also the NCs generated with these two altered posts.

0 Likes
Message 18 of 23

bob.schultz
Alumni
Alumni

Hello @djordje.gavrilovicQL2DF,

Thanks for supplying the posts and output files.  Both posts are outputting in inverse time feedrate mode (G93), which your machine may not support.  To output standard feedrates using the Setting 34 diameter value, you should make the following change in the Haas Pre-NGC post (let's stay with this post since it is the latest version).  This code is in the defineMachine function.

    // multi-axis feedrates
    if (machineConfiguration.isMultiAxisConfiguration()) {
      var useDPMFeeds = true; // <<< CHANGE TO true

You should no longer see the G93 code being output and the feedrates should be more consistent.



Bob Schultz
Sr. Post Processor Developer

0 Likes
Message 19 of 23

djordje.gavrilovicQL2DF
Participant
Participant

Hello @bob.schultz ,

 

I've set the useDPMFeeds to true, after that there was no G93 in the NC (in the attachment).

1.JPG

 

Nevertheless, rotary still moved slow and now opposed to before somewhat random. In the sense that it was speeding up and slowing down from time to time. When I override the feed at the control unit and increase it, rotary still makes choppy moves in addition to things mentioned above. 

If I understand correctly, shouldn't this setting ( var useDPMFeeds = true;) discard change of feed with diameter change in this test piece model and just produce single feed rate in correspondence with setting 34?  I don't get that result at the machine.

 

0 Likes
Message 20 of 23

bob.schultz
Alumni
Alumni

The output looks good to me.  The feedrates of 136-140 represent the difference in the diameter of the part compared to the 1" defined in Setting 34.  If you change Setting 34 in the post and machine control to 1.464, which is the approximate diameter of your part, you will notice that the programmed feedrates of F200 will be output instead.

 

Since the feedrates remain pretty constant and the movements from block-to-block remain consistent I cannot explain the jerkiness of the machine, unless for some reason the A-axis is unclamping/clamping with each move, which should not be the case unless the M11 code does not explicitly unclamp the rotary axis on your machine.

 

Another thing to try for the low feedrate problem is to use Combination DPM feedrates, which calculates the feedrates based on the movement of the linear and rotary axes.  You can try this by changing the following line in the defineMachine function.

 

 

      machineConfiguration.setMultiAxisFeedrate(
        useTCP ? FEED_FPM : useDPMFeeds ? FEED_DPM : FEED_INVERSE_TIME, // <<< CHANGE 2nd INSTANCE OF FEED_FPM to FEED_DPM
        9999.99, // maximum output value for inverse time feed rates
        useDPMFeeds ? DPM_COMBINATION : INVERSE_MINUTES, // INVERSE_MINUTES/INVERSE_SECONDS or DPM_COMBINATION/DPM_STANDARD
        0.5, // tolerance to determine when the DPM feed has changed
        1.0 // ratio of rotary accuracy to linear accuracy for DPM calculations
      );

 

 

This will generate feedrate numbers of approximately F600.



Bob Schultz
Sr. Post Processor Developer

0 Likes