Skip to content
Snippets Groups Projects
Select Git revision
  • edd334c96626e1d8589f18d467e41f3bcb1d97b1
  • master default
  • neil
  • hpgl
  • sw-shawn-liu
  • ppa
  • fran
  • trotec-port
  • fs-hotfix
  • jake
  • ml-mods
  • fabmo-app
12 results

start mods server

Blame
  • g-code 8.03 KiB
    //
    // path to G-code
    //
    // Neil Gershenfeld 
    // (c) Massachusetts Institute of Technology 2018
    // 
    // Updated: Steven Chew
    // Date:    Feb 20 2019
    // Comments: Added option to output in inch or mm
    // Date:... Oct 28 2019
    // Comments: Corrected feedrate conversion
    //           - inch/s to inch/min
    //...........- mm/s to mm/min
    //
    // Updated: Neil Gershenfeld
    // Date: Oct 28 2020
    // Comments: added mm/s vs mm/min option
    //
    // This work may be reproduced, modified, distributed, performed, and 
    // displayed for any purpose, but must acknowledge the mods
    // project. Copyright is retained and must be preserved. The work is 
    // provided as is; no warranty is provided, and users accept all 
    // liability.
    //
    // closure
    //
    (function(){
    //
    // module globals
    //
    var mod = {}
    //
    // name
    //
    var name = 'path to G-code'
    //
    // initialization
    //
    var init = function() {
       mod.cutspeed.value = '2.5'
       mod.plungespeed.value = '2.5'
       mod.jogheight.value = '2'
       mod.spindlespeed.value = '11000'
       mod.tool.value = '1'
       mod.coolantoff.checked = true
       mod.formatMm.checked = true
       mod.unitMinutes.checked = true
       }
    //
    // inputs
    //
    var inputs = {
       path:{type:'',
          event:function(evt){
             mod.name = evt.detail.name
             mod.path = evt.detail.path
             mod.dpi = evt.detail.dpi
             mod.width = evt.detail.width
             mod.height = evt.detail.height
             make_path()
             }}}
    //
    // outputs
    //
    var outputs = {
       file:{type:'',
          event:function(str){
             obj = {}
             obj.name = mod.name+".nc"
             obj.contents = str
             mods.output(mod,'file',obj)
             }}}
    //
    // interface
    //
    var interface = function(div){
       mod.div = div
       //
       // cut speed
       //
       div.appendChild(document.createTextNode('cut speed: '))
       var input = document.createElement('input')
          input.type = 'text'
          input.size = 6
          div.appendChild(input)
          mod.cutspeed = input
       div.appendChild(document.createTextNode(' (mm/s)'))
       div.appendChild(document.createElement('br'))
       //
       // plunge speed
       //
       div.appendChild(document.createTextNode('plunge speed: '))
       var input = document.createElement('input')
          input.type = 'text'
          input.size = 6
          div.appendChild(input)
          mod.plungespeed = input
       div.appendChild(document.createTextNode(' (mm/s)'))
       div.appendChild(document.createElement('br'))
       //
       // jog height
       //
       div.appendChild(document.createTextNode('jog height: '))
       var input = document.createElement('input')
          input.type = 'text'
          input.size = 6
          div.appendChild(input)
          mod.jogheight = input
       div.appendChild(document.createTextNode(' (mm)'))
       div.appendChild(document.createElement('br'))
       //
       // spindle speed
       //
       div.appendChild(document.createTextNode('spindle speed: '))
       var input = document.createElement('input')
          input.type = 'text'
          input.size = 6
          div.appendChild(input)
          mod.spindlespeed = input
       div.appendChild(document.createTextNode(' (RPM)'))
       div.appendChild(document.createElement('br'))
       //
       // tool
       //
       div.appendChild(document.createTextNode('tool: '))
       var input = document.createElement('input')
          input.type = 'text'
          input.size = 6
          div.appendChild(input)
          mod.tool = input
       div.appendChild(document.createElement('br'))
       //
       // coolant
       //
       div.appendChild(document.createTextNode('coolant:'))
       var input = document.createElement('input')
          input.type = 'radio'
          input.name = mod.div.id+'coolant'
          input.id = mod.div.id+'coolanton'
          div.appendChild(input)
          mod.coolanton = input
       div.appendChild(document.createTextNode('on'))
       var input = document.createElement('input')
          input.type = 'radio'
          input.name = mod.div.id+'coolant'
          input.id = mod.div.id+'coolantoff'
          div.appendChild(input)
          mod.coolantoff = input
       div.appendChild(document.createTextNode('off'))
       div.appendChild(document.createElement('br'))
       //
       // inch or mm format
       //
       div.appendChild(document.createTextNode('format:'))
       var input = document.createElement('input')
          input.type = 'radio'
          input.name = mod.div.id+'format'
          input.id = mod.div.id+'formatInch'
          input.checked = true
          div.appendChild(input)
          mod.formatInch = input
       div.appendChild(document.createTextNode('inch'))
       var input = document.createElement('input')
          input.type = 'radio'
          input.name = mod.div.id+'format'
          input.id = mod.div.id+'formatMm'
          div.appendChild(input)
          mod.formatMm = input
       div.appendChild(document.createTextNode('mm'))
       div.appendChild(document.createElement('br'))
       //
       // second or minute rate units 
       //
       div.appendChild(document.createTextNode('rate units:'))
       var input = document.createElement('input')
          input.type = 'radio'
          input.name = mod.div.id+'units'
          input.id = mod.div.id+'unitSeconds'
          input.checked = true
          div.appendChild(input)
          mod.unitSeconds = input
       div.appendChild(document.createTextNode('second'))
       var input = document.createElement('input')
          input.type = 'radio'
          input.name = mod.div.id+'units'
          input.id = mod.div.id+'unitMinutes'
          div.appendChild(input)
          mod.unitMinutes = input
       div.appendChild(document.createTextNode('minute'))
       }
    //
    // local functions
    //
    function make_path() {
       var dx = 25.4*mod.width/mod.dpi
       var cut_speed = parseFloat(mod.cutspeed.value)
       var plunge_speed = parseFloat(mod.plungespeed.value)
       var jog_height = parseFloat(mod.jogheight.value)
       var nx = mod.width
       var scale = dx/(nx-1)
       var in_mm_scale = 1
       if (mod.formatInch.checked) {
          dx /= 25.4
          scale /= 25.4
          cut_speed /= 25.4
          plunge_speed /= 25.4
          jog_height /= 25.4
          }
       if (mod.unitMinutes.checked) {
          cut_speed *= 60
          plunge_speed *= 60
          }
       var spindle_speed = parseFloat(mod.spindlespeed.value)
       var tool = parseInt(mod.tool.value)
       str = "%\n" // tape start
       str += "G17\n" // xy plane
       if (mod.formatInch.checked)
          str += "G20\n" // inches
       if (mod.formatMm.checked)
          str += "G21\n" // mm
       str += "G40\n" // cancel tool radius compensation
       str += "G49\n" // cancel tool length compensation
       str += "G54\n" // coordinate system 1
       str += "G80\n" // cancel canned cycles
       str += "G90\n" // absolute coordinates
       str += "G94\n" // feed/minute units
       str += "T"+tool+"M06\n" // tool selection, tool change
       str += "F"+cut_speed.toFixed(4)+"\n" // feed rate
       str += "S"+spindle_speed+"\n" // spindle speed
       if (mod.coolanton.checked)
          str += "M08\n" // coolant on
       str += "G00Z"+jog_height.toFixed(4)+"\n" // move up before starting spindle
       str += "M03\n" // spindle on clockwise
       str += "G04 P1\n" // give spindle 1 second to spin up
       //
       // follow segments
       //
       for (var seg = 0; seg < mod.path.length; ++seg) {
          //
          // move up to starting point
          //
          x = scale*mod.path[seg][0][0]
          y = scale*mod.path[seg][0][1]
          str += "G00Z"+jog_height.toFixed(4)+"\n"
          str += "G00X"+x.toFixed(4)+"Y"+y.toFixed(4)+"Z"+jog_height.toFixed(4)+"\n"
          //
          // move down
          //
          z = scale*mod.path[seg][0][2]
          str += "G01Z"+z.toFixed(4)+" F"+plunge_speed.toFixed(4)+"\n"
          str += "F"+cut_speed.toFixed(4)+"\n" //restore xy feed rate
          for (var pt = 1; pt < mod.path[seg].length; ++pt) {
             //
             // move to next point
             //
             x = scale*mod.path[seg][pt][0]
             y = scale*mod.path[seg][pt][1]
             z = scale*mod.path[seg][pt][2]
             str += "G01X"+x.toFixed(4)+"Y"+y.toFixed(4)+"Z"+z.toFixed(4)+"\n"
             }
          }
       //
       // finish
       //
       str += "G00Z"+jog_height.toFixed(4)+"\n" // move up before stopping spindle
       str += "M05\n" // spindle stop
       if (mod.coolanton.checked)
          str += "M09\n" // coolant off
       str += "M30\n" // program end and reset
       str += "%\n" // tape end
       //
       // output file
       //
       outputs.file.event(str)
       }
    //
    // return values
    //
    return ({
       mod:mod,
       name:name,
       init:init,
       inputs:inputs,
       outputs:outputs,
       interface:interface
       })
    }())