Paperless Parts has an interrogation module for three-axis milling. This module analyzes a 3D part file and extracts useful attributes for pricing.
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()
mill3 object will contain the attributes described below.
||Sum of runtime for all setups||hours|
||Sum of setup time for all setups||hours|
||List of mill setups||n/a|
||Count of mill setups||n/a|
mill3.setupscontains the attributes described below.
||Setup time (defaults to one hour)||hours|
||Confidence interval of the runtime estimate; value will be ‘High’, ‘Medium’, or ‘Low’||n/a|
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
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.
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