...
Code Block | ||
---|---|---|
| ||
let priceOfMachine = 200000; // $ or € let usefulLife = 7; // years let maintenance = 40000; // $ or € let powerConsumption = 10000; // $/year or €/year let roomCost = 4000; // $/year/m^2 or year €/year/m^2 let space = 10; // $/year or €/year let spareParts = 2000; // $/year or €/year let gasUsage = 0; // $/year or €/year let workingHoursPerYear = 3500; // h/year // Don't change the following lines let hourlyRate = ((priceOfMachine + maintenance)/usefulLife + powerConsumption + roomCost*space + spareParts + gasUsage)/workingHoursPerYear; | ||
Warning | ||
To ensure a proper calculation, do not change the final line of code: let hourlyRate = ((priceOfMachine + maintenance)/depreciation + powerConsumption + roomCost*space + spareParts +gasUsage)/workingHoursPerYear; |
Each variable can then be defined with a constant value or mathematical calculation using available variables from the 3YOURMIND model analysis (next section).
...
Variable
...
Description
...
Unit
...
Code Block | ||
---|---|---|
| ||
priceOfMachine |
...
Purchase price of the printer.
...
$ or €
...
Code Block | ||
---|---|---|
| ||
usefulLife |
...
Period during which the printer will be used to generate revenue.
...
years
...
Code Block |
---|
maintenance |
...
Overall maintenance cost during the useful life.
...
$ or €
...
Code Block | ||
---|---|---|
| ||
powerConsumption |
...
Cost of power used during one year of work.
...
$/year or €/year
...
Code Block | ||
---|---|---|
| ||
roomCost |
...
Cost of renting one square meter over a period of one year.
...
$/year/m^2 or year €/year/m^2
...
Code Block | ||
---|---|---|
| ||
space |
...
Room taken up by the machine.
...
$/year or €/year
...
Code Block | ||
---|---|---|
| ||
gasUsage |
...
Applicable to some of the printers only. Annual cost of gas used for printing.
...
$/year or €/year
...
Code Block |
---|
workingHoursPerYear |
...
Number of hours the printer is supposed to work during a year.
...
Sample Machine Time Pricing Scripts
...
Code Block | ||
---|---|---|
| ||
let lineWidth = 0.1; // mm let layerHeight = 0.1; // mm let speed = 45; // mm/s let infill = 0.2; // number in [0,1] let wallThickness = 2; // mm let supportInfill = 0.2; // number in [0,1] let volumeFactor = 0.0010747; // number, describes importance of model's volume let areaFactor = 0.04317783; // number, describes importance of model's surface area let supportFactor = 0.0003774; // number, describes importance of support volume // Don't change the following lines let exponent; if( model.volume < 3000){ exponent = 0.55; } else { exponent = 0.88; } let timevolumePart = volumeFactor*(0.818182 - lineWidth)*(Math.pow(layerHeight, (-1.07)) + 0.232)*(Math.pow(speed, (-1.08)))*(Math.pow(infill*100, (1.02)))*model.volume +; let areaPart = areaFactor*(1.578431 - lineWidth)*(Math.pow(layerHeight, (-0.98)) + 0.341)* (Math.pow(wallThickness, exponent) + 0.002)*(Math.pow(speed, (-0.84)) + 0.003)*model.area +; let supportPart = supportFactor*supportInfill*support.volume; let machineTime = time/60; | ||
Warning |
...
Variable
...
Description
...
Unit
...
Code Block | ||
---|---|---|
| ||
lineWidth |
...
Width of the filament after leaving the extruder.
...
mm
...
Code Block |
---|
layerHeight |
...
Height of a single layer.
...
mm
...
Code Block |
---|
speed |
...
Velocity of the extruder when printing.
...
mm/s
...
Code Block |
---|
infill |
...
Structure used to take up space inside an empty 3D print.
...
0 <= infill <= 1
...
Code Block |
---|
wallThickness |
...
Thickness of the model's wall.
...
mm
...
Code Block |
---|
supportInfill |
...
Structure used to take up space inside support.
...
0 <= infill <= 1
Info |
---|
The following variables: volumeFactor, areaFactor and supportFactor describe the importance of model's volume, area and support volume to the overall machine time value. One can modify these values in order to increase/decrease the impact of the parameters on the printing time.time = volumePart + areaPart + supportPart; // time in minutes
let machineTime = time/60; // time in hours |
SLS Machine Time Formula
Two factors will have an impact on the machine time: the model's volume that needs to be sintered, and the model's height, as consecutive layers will require the machine to lower the powder bed and put new material on the platform. Furthermore, in the case of more than one model being placed on the platform, the total machine time will not be simply a sum of unit printing times, as adding new parts of lower or the same height as the tallest model will not change the time related to preparation of all layers required to print all parts.
...
Code Block |
---|
let scanningSpeed = 45; // mm/s let laserDiameter = 0.1; // mm let layerHeight = 0.2; // mm let layerPreparationTime = 10; let machineTime = (model.volume/(scanningSpeed*laserDiameter*layerHeight) + layerPreparationTime*model.h/layerHeight/item.quantity)/3600; |
Warning |
To ensure a proper calculation, do not change any of these lines of code: let machineTime =// sec // Don't change the following lines let machineTime = (model.volume/(scanningSpeed*laserDiameter*layerHeight) + layerPreparationTime*model.h/layerHeight/item.quantity)/3600; |
...
Variable
...
Description
...
Unit
...
Code Block | ||
---|---|---|
| ||
scanningSpeed |
...
Speed of the laser.
...
mm/s
...
Code Block |
---|
laserDiameter |
...
Diameter of the laser beam.
...
mm
|
...
Height of a single layer
...
...
Code Block |
---|
layerPreparationTime |
...
Time to prepare next layer, i.e. to lower the bed and apply new material.
...
sec
DMLS/SLM Machine Time Formula
...
Code Block |
---|
let scanningSpeed = 40; // mm/s let supportScanningSpeed = 40; // mm/s let laserDiameter = 0.1; // mm let layerHeight = 0.1; // mm let layerPreparationTime = 10; // sec let supportInfill = 0.2; let machineTime = ((model.volume)/(scanningSpeed*laserDiameter*layerHeight) + support.volume*supportInfill/(supportScanningSpeed*laserDiameter*layerHeight) + layerPreparationTime*model.h/layerHeight/item.quantity)/3600; |
Warning |
To ensure a proper calculation, do not change any of these lines of code: let machineTime = // number in [0,1] // Don't change the following lines let machineTime = ((model.volume)/(scanningSpeed*laserDiameter*layerHeight) + support.volume*supportInfill/(supportScanningSpeed*laserDiameter*layerHeight) + layerPreparationTime*model.h/layerHeight/item.quantity)/3600; |
...
Variable
...
Description
...
Unit
...
Code Block | ||
---|---|---|
| ||
scanningSpeed |
...
Speed of the laser when scanning the model.
...
mm/s
...
Code Block |
---|
supportScanningSpeed |
...
Speed of the laser when scanning the support structures.
...
mm/s
...
Code Block |
---|
layerHeight |
...
Height of a single layer.
...
mm
...
Code Block |
---|
layerPreparationTime |
...
Time to prepare next layer, i.e. to lower the bed and apply new material.
...
sec
...
Code Block |
---|
supportInfill |
...
Structure used to take up space inside support.
...
0 <= infill <= 1
MJF Machine Time Formula
This process is similar to SLS, the main difference being the heat source. SLS uses a laser to scan and sinter each cross-section, while in MJF an ink (fusing agent) is dispensed on the powder that promotes the absorption of infrared light. An infrared energy source then passes over the building platform and fuses the inked areas. In SLS each cross section is fused point-by-point, while in MJF fusing happens in a line-wise fashion.
...
Code Block |
---|
let singleLayerPrintTime = 15; // sec let layerHeight = 0.2; let numberOfLayers = model.h/layerHeight; let machineTime = singleLayerPrintTime*numberOfLayers/item.quantity; |
Warning |
To ensure a proper calculation, do not change any of these lines of code: let numberOfLayers =// mm // Don't change the following lines let numberOfLayers = model.h/layerHeight; let machineTime = singleLayerPrintTime*numberOfLayers/item.quantity; |
...
...
Description
...
Unit
...
Code Block | ||
---|---|---|
| ||
singleLayerPrintTime |
...
Time it takes to scan one layer.
...
sec
...
Code Block |
---|
layerHeight |
...
Height of a single layer.
...
mm
CLIP Machine Time Formula
Code Block |
---|
let maxXYSurface = 1000; // xy surface of the printer in mm^2 let timePerHeight = 10; // h/mm model's height // Don't change the following line let time = (model.h*timePerHeight)*((model.w*model.d)/maxXYSurface); |
...