Milling Process

Paperless Parts has an interrogation module for three-axis milling. This module analyzes a 3D part file and extracts useful attributes for pricing.

Milling Overview

Our platform estimates the amount of time a part will take to be machined (“runtime”) as well as the number of times a part will need to be fixtured (“set up”) in various orientations so that all designed faces can be milled. We assume a three-axis mill, typical toolset, and very conservative “speeds and feeds” for runtime. Contact us to tune the runtime estimates for your particular machine and associated toolset.

Other factors you should account for in pricing include the time it takes to program the part using a CAM package, any post processing steps, and the time and expense associated with packing and shipping the part. Each of these costs should correspond to its own operation.

To analyze a part for three-axis milling add this line to your pricing program:

mill3 = analyze_mill3()

The  mill3 object will contain the attributes described below.

Milling attributes
Attribute Description Units
runtime Sum of runtime for all setups hours
setup_time Sum of setup time for all setups hours
setups List of mill setups n/a
setup_count Count of mill setups n/a
Each item in  mill3.setups contains the attributes described below.
Setup attributes
Attribute Description Units
setup_time Setup time (defaults to one hour) hours
runtime Mill runtime hours
confidence Confidence interval of the runtime estimate; value will be ‘High’, ‘Medium’, or ‘Low’ n/a

Per-Setup Operations

You can configure a process to create one or more operations for each detected CNC process. When configuring a CNC process, check the “per setup” box on each operation that you wish to be repeated for each setup. The per-setup operations will have access to all part information, not just the information related to one setup. Therefore, you must access the data corresponding to one particular setup. There is a global constant available to P3L to let you know which CNC setup corresponds to the current operation:

  • INDEX – each per-setup operation will have this integer corresponding to a setup; numbering starts at 0, such that a part with three setups will have three operations whose INDEX values are 01, and 2, respectively.

You would use this value, along with dynamic variables, to access the setup time and runtime of the current setup. See the per-setup example below.

Examples

This example prices all milling setups as a single operation:

mill3 = analyze_mill3()
runtime = var('runtime', 0, 'Runtime, hr', number, frozen=False)
runtime.update(mill3.runtime)
runtime.freeze()
setup_time = var('setup_time', 0, 'Setup time, hr', number, frozen=False)
setup_time.update(mill3.setup_time)
setup_time.freeze()
machine_rate = var('machine_rate', 50, 'Machine Rate, $/hour', currency)
setup_rate = var('setup_rate', 75, 'Setup Rate, $/hour', currency)
PRICE = setup_rate * setup_time + machine_rate * runtime * part.qty
DAYS = 0
			

This example prices each milling setup as a per-setup operation:

mill3 = analyze_mill3()
runtime = var('runtime', 0, 'Runtime, hr', number, frozen=False)
setup = mill3.setups[INDEX]
runtime.update(setup.runtime)
runtime.freeze()
setup_time = var('setup_time', 00, 'Setup time, hr', number, frozen=False)
setup_time.update(setup.setup_time)
setup_time.freeze()
machine_rate = var('machine_rate', 50, 'Machine Rate, $/hour', currency)
setup_rate = var('setup_rate', 75, 'Setup Rate, $/hour', currency)
hours = setup_time + runtime * part.qty
PRICE = setup_rate * setup_time + machine_rate * runtime * part.qty
DAYS = 0
			
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us