Skip to main content
The DigiFabster CNC milling quotation module explained.

This article describes the DigiFabster approach to the CNC milling quotation process in detail, with a fast setup section at the end.

Updated over a week ago

Introduction.

At the beginning of the sales cycle for a machined part, a lot of time can be spent by both parties figuring out what the other party’s abilities and wishes are. Transparency policies on the purchaser’s side lower the odds that this investment in time will pay back: as a rule, there are at least 3 suppliers invited for every RFQ, so it’s a 3:1 gamble against the supplier when he invests in labor for quoting. 

Since these costs have to be recovered somehow, they will end up in the price of the next offer, thereby lowering the probability that that offer will lead to a sale. This vicious circle can be broken with quoting software like DigiFabster’s, which reduces the cost per quote to a fraction of a man-made quote. 

DigiFabster's software emulates the actions and work-flow of a sales engineer, but much faster and thus cheaper. The software does not generate g-code to figure out the cost of a part to the last digit before offering -and neither would the sales engineer- but it works by rule-of-thumb. Once the offer is accepted the real investment in engineering labour can be made to optimize production costs and product quality.

This article contains a detailed explanation of how the software itself functions, plus a fast setup section at the end.


How it works. 

Pricing the material.

For now, we assume that the supplier has set up a number of materials and prices for the bar stock of that material. The specification of the material includes machinability, one of the factors which will determine cycle time and thus cost.

The end user has uploaded 1 model and selected 1 material.

The first action for DigiFabster is to align the model to the bar stock in such a way that in x has the highest value, y the median, and z the smallest. After alignment, the smallest possible bar stock size offered for this material is selected, and virtually cut off according to the x dimension of the models. The cost of this material in the quote is thus the length of x_model multiplied by the price of the bar stock per unit of length. 

This is the part:

And this is the bar stock for the selected material, stainless steel 316:

The software looks for the best fit:

and finds it:

In DigiFabster, the list of the above bar stock looks like this:

and this is the bar that got selected:

Now the first element of pricing can be calculated: 

The model is 600 mm long, which is 60 centimeters. 1 centimeter costs $1.152, times 60 is $69.12

If all other pricing inputs are set to zero, this is what the widget will show: 

So: the material is selected, the correct bar stock is chosen, and has virtually been “sawed” to length:

The first part of the cost of this part has now been established: $69.12, which represents 60 cm off a blank which is priced at $1.152 per centimeter. 

Cycle time part 1. Cutting down to size.

From this point onward three more factors besides material cost come into play:

  1. Machine speed at machinability 100%. 

  2. The machinability of the material selected.

  3. The cost per hour.

In this example the machine has been set up like this:

The machinability rating of the selected material, stainless steel 316, is, according to AISI, 36. In DigiFabster that value is preset (but you may want to change it): 

The “machine speed @ machinability 100%” refers to the machine speed for the next part of the job, which is grinding down the blank to the size of the bounding box of the model, as if a material called 160 Brinell B1112 steel was selected. 160 Brinell B112 in the AISI system is said to have a machinability rating of 100%.

These are the parts of the blank that have to come off first of all: 

The size of the top part is 600x120x70 mm, the part on the side is 600x20x50mm, for a total of 5,640,000mm3 = 5,640 cm3.

The nominal speed of the machine is set, as we have seen, at 1,000cm3 per hour, so if this was 160 Brinell B1112, to grind the stock down to size would take 5,640/1,000 hours = 5.64 hours or 5 hours and 38 minutes.

However, the material selected is stainless steel 316, with a machinability rating of 36%, i.e. roughly 3 times slower than the AISI-selected nominal. So we should divide 5.64 hours by 0.36 and get 15.67 hours, or 15 hours and 40 minutes. 

Given a price of $50 per hour, that makes 15.67*$50=$783.50.

We are aware that it is unusual to rate machine speeds as cm3 per hour. However, probably most specialists can tell you off the top of their head if grinding down 5,640 cm3 of stainless steel 316 in 15 hours and 40 minutes is too slow or too fast, and probably give you a good estimate of the correct time. The "machine speed" underlying that estimate is the speed we have in mind here.

Anyway, were we to upload a simple, featureless cuboid with the same boundary box as our model, this is what we would see in the widget:

The $852.45 is made up of the following elements (visible only in the price tweaker, so not visible for the end user):

So the price of this part, considering only the material cost and the machining down to bounding box size, is made up of 60 cm of blank at $1.152 per centimeter is $69.12,

plus 

the grinding down of 5,640 cm3 at a speed of 1,000*0.36 cm3 per hour, is 15.667 hours, at $50 per hour is $783.33 (some rounding inaccuracy is inevitable) 

for a total of $852.45. 

The grinding down of a blank to a cuboid with (nearly) the sizes of the bounding box of the model is a job that is sometimes outsourced to other service providers. DigiFabster does provide a calculation algorithm for machine shops using such an approach too, but that is the subject for a different help article. 

Cycle time part 2: inside the bounding box.

Up until now, the calculation was straightforward: check how much bar stock you need and how much work should be done to bring the piece of bar stock selected down to size, so that the real work, inside the bounding box, can begin.

For work inside the bounding box, we cannot use the nominal speed of 1,000cm3 per hour, the tool has to start and stop exactly where programmed, so the whole process slows down. 

In DigiFabster, calculation of the cost of the work inside the bounding box is based on the two factors above, machine speed and machinability, but multiplied by a factor you will have to choose, depending on complexity. 

Complexity in DigiFabster is divided into 5 categories, from “very simple” to “highly complex”. Models coming in are automatically put into one of those categories according to certain geometrical properties those models possess.

To get a feel of those categories, these are the models we use as examples:

Very simple:

Simple:

Normal:

Complex:

And last but not least, highly complex:

The complete line-up, left to right is very simple to highly complex:

To get back to our original sample model:

The software categorizes this as “very simple”:

By default, the cycle time multiplier for work within the bounding box is 1, but even for a very simple model, it’s probably wise to increase that a little, to 1.1. However, we’ll leave it 1 for now. 

The work to be done inside the bounding box is this:

So a volume of 590x100x40mm or 2,360cm3 has to be removed. Since we left the cycle time multiplier for complexity “very simple” at 1, that will take 2,360/1,000*0.36 hours=6.56 hours.

As the cycle time multiplier is left at 1, this is the resulting price tweaker shows: 

The 22.222 hours are made up of 15.667 hours for machining down to bounding box size, and 6.56 hours for work within the bounding box, at a cycle time multiplier of 1.
In other words, all this work: 

Now we make the cycle time multiplier for complexity “very simple” 1.1. In the picture, the difference in color symbolizes the difference in speed.

In the price tweaker the effect is immediately visible:

To the 6.56 hours working inside the bounding box, 0.656 hours are added, so the total becomes:

15.667 hours (down to size)

6.56 hours at multiplier 1
and
0.656 hours = 10% added to that for multiplier 1.1 (1.1-1=0.1)

For a total of 22.877 hours (rounding inaccuracy, sorry).

Cycle time part 3: Higher complexity models.

 For this article we have created a number of different models, with the same basic geometry as the "very simple" model: bounding box 600x100x50mm (3,000 cm3), with the volume of the model remaining 640 cm3, so the volume of the work to be done inside the bounding box remains the same, 2,360 cm3, which at a cycle time multiplier of 1 is always 6.56 hours. 

The next bracket in complexity is called “simple”, and this is our sample model:

If we put the cycle time multiplier for complexity at 1, the result is the same as before: 22.222 hours.

However, the whole idea is to accord different multipliers to different categories of complexity, and we already had 1.1 for “very simple”, so this one should be higher since the complexity is higher. If we decide to put a multiplier of 2 in, the result becomes 28.776 hours: 

So the original time for work inside the bounding box, 6.555 hours becomes doubled and the 28.776 hours are thus made up of:

15.667: work outside the bounding box;

6.555: work inside the bounding box at multiplier 1;

6.555, 100%, the difference between multiplier 1 and 2; (2-1=1)

For a total of 28.777 hours (rounding inaccuracy). 

The last example, even more, complex but with the same bounding box and the same amount of material to be removed from inside the bounding box: 

Digifabster’s system sees this automatically as a “complex” model. For this example, we have set a cycle time multiplier of 4 for "complex" models. The result is the following: 

Again the breakdown of the 41.889 hours: 

15.667 hours (down to size)
6.56 hours inside the bounding box at a multiplier of 1
19.667 hours added to that for multiplier 4 (4-1=3)

For a total of 41.907 hours (rounding inaccuracy).

At $50/hour that makes $2,094, plus the material of $69.12, makes 2,163.

When we upload this model to the widget we see, correctly: 

Complexity: Overview.

As we have seen, the software decides what category of complexity a model belongs to. You can not influence that, it’s hardcoded. Improving the algorithm for determining complexity, based on user feedback, is something we do constantly, which makes discussing it here in detail not very useful. 

What you can influence is the factor with which the different categories change the total cycle time. We have seen the effect for a “very simple” model with a multiplier of 1.1, a “simple” model with a multiplier of 2, and a complex model with a multiplier of 4.

With the same bounding box, so with the same amount of material bought in total and then partially removed down to the bounding box, the multiplier for work inside the bounding box created the following prices:

Very simple, multiplier 1.1, price $1,213
Simple, multiplier 2, price $1,508
Complex, multiplier 4, price $2,164.

As said, you can not influence the categorization itself, that’s a closed part of the software, but you certainly can affect its results.

Fast setup:

This is probably the longest helpfile ever written, so the fast setup below consciously ignores a number of other features of the CNC milling module, like tolerance, lead time, or post production options, and is meant to give you confidence that yes, the module works. 

So, let's keep it short and sweet. 

  1. Set up your biggest machine, to start with at a speed of 1,000 cm3 per hour and your current shop rate (we used $50 in the text above).

2. Set up 3 blanks with varying y-z planes of 1 material and create a featureless cuboid model which fits both the biggest and the mid size blank (y-z plane). 

3. Check blank selection: upload the featureless cuboid model and see if the right blank was selected. The best place to see this is the price tweaker which you find here: 

Given (in our case) a blank of 600x100x50 and the following blank profiles (y-z)
60x60
120x120
180x180

The choice of the (1000x)120x120 blank hereunder is correct:

4. Calculate how much material will have to be taken off after the blank is sawed to the length of the x-axis of the model. In our example that’s 600x120x120-600x100x50=5,640,000mm3=5,640cm3.

5. Check machine speed against the volume of material to be removed outside the bounding box, in the example that’s 5,640cm3. Don’t forget to take machinability into account. Should you work with one material only, it may be worthwhile to change the preset for that material to 100%. That way there’s less confusion. 

This is probably the most critical step, so take your time. If you feel machining down the blank to the model's size takes much too long at 1,000cm3/hour, increase speed, if it’s too fast, decreases speed, until the figure is right. 

6. Set up the different cycle time multipliers for the different categories of complexity. Go to price tweaker, click COMPLEXITY BRACKETING:

The following window will open:

By showing pictures of models we had in mind when setting up the category brackets we try to make it easier to set the multipliers. For a first test use 1.1, 2, 3, 4, 5 as cycle time multipliers: 

Click apply, the window will close, then save the settings (bottom of the price tweaker page, "Accept Settings"): 

7. Test with a number of models of your own. If the results are not what you expected, first check nominal machine speed and machinability, and, as mentioned before, if you use only 1 (or mainly 1 material) it may be wise to set its machinability to 100% so as to have a clearer picture of what’s going on. 

When satisfied with the nominal speed of the machine and the machinability rating, tweak the multipliers in the COMPLEXITY BRACKET window until you’re satisfied that you’re getting results in line with your expectations. 

You can then set up further machines, materials, and blanks

Should you still have problems, you can always ask for help from sales support by using the DigiFabster chat box (right bottom corner of your screen) or by requesting a live demo with one of our representatives. 

Hope this helps :-)

Your DigiFabster Team. 

Did this answer your question?