Ejemplo n.º 1
0
 def __init__(self):
     self.i = linuxcnc.ini(os.environ['INI_FILE_NAME'])
     self.s = linuxcnc.stat()
     self.c = linuxcnc.command()
     try:
         # we need this to connect to hal
         if not hal.component_exists('dummy'):
             self.h = hal.component('dummy')
             self.h.ready()
     except:
         print('Error connecting to HAL instance')
         self.exit()
     # no point in continuing if not paused
     if not hal.get_value('halui.program.is-paused'):
         print('Cannot load cut recovery because program is not paused')
         self.exit()
     self.clear_offsets()
     self.xOrig = hal.get_value('axis.x.eoffset-counts')
     self.yOrig = hal.get_value('axis.y.eoffset-counts')
     self.zOrig = hal.get_value('axis.z.eoffset-counts')
     self.oScale = hal.get_value('plasmac.offset-scale')
     self.xMin = float(self.i.find('AXIS_X', 'MIN_LIMIT'))
     self.xMax = float(self.i.find('AXIS_X', 'MAX_LIMIT'))
     self.yMin = float(self.i.find('AXIS_Y', 'MIN_LIMIT'))
     self.yMax = float(self.i.find('AXIS_Y', 'MAX_LIMIT'))
     self.zMin = float(self.i.find('AXIS_Z', 'MIN_LIMIT'))
     self.zMax = float(self.i.find('AXIS_Z', 'MAX_LIMIT'))
     self.cancelWait = False
     self.resumeWait = False
     gobject.timeout_add(200, self.periodic)
Ejemplo n.º 2
0
    def __init__(self, halcomp,builder,useropts):

        self.plasmacVersion = 'PlasmaC v0.174'

        self.W = gtk.Window()
        self.halcomp = halcomp
        self.builder = builder
        self.i = linuxcnc.ini(os.environ['INI_FILE_NAME'])
        hal_glib.GPin(halcomp.newpin('config-disable', hal.HAL_BIT, hal.HAL_IN))
        configDisable = self.i.find('PLASMAC', 'CONFIG_DISABLE') or '0'
        hal.set_p('plasmac_config.config-disable',configDisable)
        self.idlePin = hal_glib.GPin(halcomp.newpin('program-is-idle', hal.HAL_BIT, hal.HAL_IN))
        hal.connect('plasmac_config.program-is-idle', 'plasmac:program-is-idle') 
        self.idlePin.connect('value-changed', self.idle_changed)
        self.thcFeedRate = (float(self.i.find('AXIS_Z', 'MAX_VELOCITY')) * \
                              float(self.i.find('AXIS_Z', 'OFFSET_AV_RATIO'))) * 60
        self.configFile = self.i.find('EMC', 'MACHINE').lower() + '_config.cfg'
        self.prefFile = self.i.find('EMC', 'MACHINE') + '.pref'
        self.configDict = {}
        self.oldMode = 9
        self.materialsUpdate = False
        self.maxHeight = hal.get_value('ini.z.max_limit') - hal.get_value('ini.z.min_limit')
        self.configure_widgets()
        self.builder.get_object('probe-feed-rate-adj').set_upper(self.builder.get_object('setup-feed-rate').get_value())
        self.load_settings()
        self.set_theme()
        gobject.timeout_add(100, self.periodic)
Ejemplo n.º 3
0
    def coords(self):
        #print(self.comp["tooldiameter"])
        try:
            leng = hal.get_value('motion.tooloffset.z') * self.MODEL_SCALING
        except:
            leng = 0
        try:
            xleng = hal.get_value('motion.tooloffset.x') * self.MODEL_SCALING
        except:
            xleng = 0

        x1 = leng
        z1 = -xleng
        x2 = 1  #self.comp["tool-x-offset"]+10
        z2 = -leng / 2
        x3 = 2  #self.comp["tooldiameter"]
        z3 = 0
        if self.comp["millkins"]:
            x1 = 0
            z1 = -leng
            x2 = -2  #-self.comp["tooldiameter"]/2-0.01
            z2 = 0
            x3 = 2  #self.comp["tooldiameter"]/2+0.01
            z3 = 0
        return (x1, z1, x2, z2, x3, z3, 0, 1)
Ejemplo n.º 4
0
 def cut_length_changed(self, halpin):
     if halpin.get():
         self.thisCutLength = halpin.get()
         if hal.get_value('halui.machine.units-per-mm') == 1:
             self.builder.get_object('cut-lengthT').set_label(
                 '{:.2f} M'.format(
                     (self.CUT_LENGTH + self.thisCutLength) * 0.001))
             self.builder.get_object('cut-length').set_label(
                 '{:.2f} M'.format(
                     (self.cut_length + self.thisCutLength) * 0.001))
         else:
             self.builder.get_object('cut-lengthT').set_label(
                 '{:.2f}\"'.format(self.CUT_LENGTH + self.thisCutLength))
             self.builder.get_object('cut-length').set_label(
                 '{:.2f}\"'.format(self.cut_length + self.thisCutLength))
     else:
         self.CUT_LENGTH += self.thisCutLength
         self.cut_length += self.thisCutLength
         if hal.get_value('halui.machine.units-per-mm') == 1:
             self.builder.get_object('cut-lengthT').set_label(
                 '{:.2f} M'.format(self.CUT_LENGTH * 0.001))
         else:
             self.builder.get_object('cut-lengthT').set_label(
                 '{:.2f}\"'.format(self.CUT_LENGTH))
         self.thisCutLength = 0
Ejemplo n.º 5
0
    def periodic(self):
        self.s.poll()
        isIdleHomed = True
        isIdleOn = True
        if hal.get_value('halui.program.is-idle') and hal.get_value('halui.machine.is-on'):
            if hal.get_value('plasmac.arc-ok-out'):
                isIdleOn = False
            for joint in range(0,int(self.i.find('KINS','JOINTS'))):
                    if not self.s.homed[joint]:
                        isIdleHomed = False
                        break
        else:
            isIdleHomed = False
            isIdleOn = False 
        for n in range(1,5):
            if 'ohmic-test' in self.iniButtonCode[n]: # or 'probe-test' in self.iniButtonCode[n]:
                if isIdleOn or hal.get_value('halui.program.is-paused'):
                    self.builder.get_object('button' + str(n)).set_sensitive(True)
                else:
                    self.builder.get_object('button' + str(n)).set_sensitive(False)
#            elif not self.iniButtonCode[n] in ['ohmic-test'] and not self.iniButtonCode[n].startswith('%'):
            elif not self.iniButtonCode[n].startswith('%'):
                if isIdleHomed:
                    self.builder.get_object('button' + str(n)).set_sensitive(True)
                else:
                    self.builder.get_object('button' + str(n)).set_sensitive(False)
        if self.probeTimer:
            if time.time() >= self.probeTimer:
                self.probeTimer = 0
                if not self.probePressed:
                    hal.set_p('plasmac.probe-test','0')
        return True
Ejemplo n.º 6
0
 def periodic(self):
     units = hal.get_value('halui.machine.units-per-mm')
     maxPidP = self.thcFeedRate / units * 0.1
     self.builder.get_object('config').set_sensitive(
         not hal.get_value('plasmac_config.config-disable'))
     mode = hal.get_value('plasmac.mode')
     if mode != self.oldMode:
         if mode == 0:
             self.builder.get_object('arc-ok-high').show()
             self.builder.get_object('arc-ok-high-label').set_text(
                 'OK High Volts')
             self.builder.get_object('arc-ok-low').show()
             self.builder.get_object('arc-ok-low-label').set_text(
                 'OK Low Volts')
             self.builder.get_object('arc-voltage-scale').show()
             self.builder.get_object('arc-voltage-scale-label').set_text(
                 'Voltage Scale')
             self.builder.get_object('arc-voltage-offset').show()
             self.builder.get_object('arc-voltage-offset-label').set_text(
                 'Voltage Offset')
             self.builder.get_object('height-per-volt-box').show()
             self.builder.get_object('pid-i-gain').show()
             self.builder.get_object('pid-i-label').set_text('PID I GAIN')
             self.builder.get_object('pid-d-gain').show()
             self.builder.get_object('pid-d-label').set_text('PID D GAIN')
         elif mode == 1:
             self.builder.get_object('arc-ok-high').hide()
             self.builder.get_object('arc-ok-high-label').set_text('')
             self.builder.get_object('arc-ok-low').hide()
             self.builder.get_object('arc-ok-low-label').set_text('')
             self.builder.get_object('arc-voltage-scale').show()
             self.builder.get_object('arc-voltage-scale-label').set_text(
                 'Voltage -scale')
             self.builder.get_object('arc-voltage-offset').show()
             self.builder.get_object('arc-voltage-offset-label').set_text(
                 'Voltage -offset')
             self.builder.get_object('height-per-volt-box').show()
             self.builder.get_object('pid-i-gain').show()
             self.builder.get_object('pid-i-label').set_text('PID I GAIN')
             self.builder.get_object('pid-d-gain').show()
             self.builder.get_object('pid-d-label').set_text('PID D GAIN')
         elif mode == 2:
             self.builder.get_object('arc-ok-high').hide()
             self.builder.get_object('arc-ok-high-label').set_text('')
             self.builder.get_object('arc-ok-low').hide()
             self.builder.get_object('arc-ok-low-label').set_text('')
             self.builder.get_object('arc-voltage-scale').hide()
             self.builder.get_object('arc-voltage-scale-label').set_text('')
             self.builder.get_object('arc-voltage-offset').hide()
             self.builder.get_object('arc-voltage-offset-label').set_text(
                 '')
             self.builder.get_object('height-per-volt-box').hide()
             self.builder.get_object('pid-i-gain').hide()
             self.builder.get_object('pid-i-label').set_text('')
             self.builder.get_object('pid-d-gain').hide()
             self.builder.get_object('pid-d-label').set_text('')
         else:
             pass
         self.oldMode = mode
     return True
Ejemplo n.º 7
0
 def periodic(self):
     self.s.poll()
     isIdleHomed = True
     isIdleOn = True
     if hal.get_value('halui.program.is-idle') and hal.get_value('halui.machine.is-on'):
         if hal.get_value('plasmac.arc-ok-out'):
             isIdleOn = False
         for joint in range(0,int(self.i.find('KINS','JOINTS'))):
                 if not self.s.homed[joint]:
                     isIdleHomed = False
                     break
     else:
         isIdleHomed = False
         isIdleOn = False 
     for n in range(1,5):
         if 'change-consumables' in self.iniButtonCode[n]:
             if hal.get_value('halui.program.is-paused') and \
                hal.get_value('plasmac.stop-type-out') > 1 and not \
                hal.get_value('plasmac.cut-recovering'):
                 self.builder.get_object('button' + str(n)).set_sensitive(True)
             else:
                 self.builder.get_object('button' + str(n)).set_sensitive(False)
         elif 'ohmic-test' in self.iniButtonCode[n]:
             if isIdleOn or hal.get_value('halui.program.is-paused'):
                 self.builder.get_object('button' + str(n)).set_sensitive(True)
             else:
                 self.builder.get_object('button' + str(n)).set_sensitive(False)
         elif not 'cut-type' in self.iniButtonCode[n] and not self.iniButtonCode[n].startswith('%'):
             if isIdleHomed:
                 self.builder.get_object('button' + str(n)).set_sensitive(True)
             else:
                 self.builder.get_object('button' + str(n)).set_sensitive(False)
     if self.probeTimer:
         if hal.get_value('plasmac.probe-test-error') and not self.probePressed:
             self.probeTimer = 0
         elif time.time() >= self.probeStart + 1:
             self.probeStart += 1
             self.probeTimer -= 1
             self.probeButton.set_label(str(int(self.probeTimer)))
             self.probeButton.set_style(self.buttonRed)
         if not self.probeTimer and not self.probePressed:
             hal.set_p('plasmac.probe-test','0')
             self.probeButton.set_label(self.probeText)
             self.probeButton.set_style(self.buttonPlain)
     if self.inFile and self.inFile != self.s.file:
         if not 'PlaSmaC' in self.s.file or 'PlaSmaC0' in self.s.file:
             self.builder.get_object(self.cutButton).set_style(self.buttonPlain)
             self.builder.get_object(self.cutButton).set_label('Pierce & Cut')
             self.cutType = 0
         elif 'PlaSmaC1' in self.s.file:
             self.builder.get_object(self.cutButton).set_style(self.buttonOrange)
             self.builder.get_object(self.cutButton).set_label('Pierce Only')
             self.cutType = 1
     if (hal.get_value('axis.x.eoffset') or hal.get_value('axis.y.eoffset')) and not hal.get_value('halui.program.is-paused'):
         hal.set_p('plasmac.consumable-change', '0')
         hal.set_p('plasmac.x-offset', '0')
         hal.set_p('plasmac.y-offset', '0')
         hal.set_p('plasmac.xy-feed-rate', '0')
     return True
Ejemplo n.º 8
0
 def consumable_change_setup(self, ccParm):
     self.ccX = self.ccY = ccF = ''
     X = Y = F = ''
     ccAxis = [X, Y, F]
     ccName = ['x', 'y', 'f']
     for loop in range(3):
         count = 0
         if ccName[loop] in ccParm:
             while 1:
                 if not ccParm[count]: break
                 if ccParm[count] == ccName[loop]:
                     count += 1
                     break
                 count += 1
             while 1:
                 if count == len(ccParm): break
                 if ccParm[count].isdigit() or ccParm[count] in '.-':
                     ccAxis[loop] += ccParm[count]
                 else:
                     break
                 count += 1
             if ccName[loop] == 'x' and ccAxis[loop]:
                 self.ccX = float(ccAxis[loop])
             elif ccName[loop] == 'y' and ccAxis[loop]:
                 self.ccY = float(ccAxis[loop])
             elif ccName[loop] == 'f' and ccAxis[loop]:
                 ccF = float(ccAxis[loop])
     if self.ccX and \
        (self.ccX < round(float(self.i.find('AXIS_X', 'MIN_LIMIT')), 6) or \
        self.ccX > round(float(self.i.find('AXIS_X', 'MAX_LIMIT')), 6)):
         self.dialog_error(
             'X out of limits for consumable change\n\nCheck .ini file settings\n'
         )
         print('x out of bounds for consumable change\n')
         raise SystemExit()
     if self.ccY and \
        (self.ccY < round(float(self.i.find('AXIS_Y', 'MIN_LIMIT')), 6) or \
        self.ccY > round(float(self.i.find('AXIS_Y', 'MAX_LIMIT')), 6)):
         self.dialog_error(
             'Y out of limits for consumable change\n\nCheck .ini file settings\n'
         )
         print('y out of bounds for consumable change\n')
         raise SystemExit()
     if not ccF:
         self.dialog_error(
             'invalid feed rate for consumable change\n\nCheck .ini file settings\n'
         )
         print('invalid consumable change feed rate\n')
         raise SystemExit()
     self.ccScale = round(hal.get_value('plasmac.offset-scale'), 3) / 100
     ccVel = int(1 / hal.get_value('halui.machine.units-per-mm') / 60 *
                 ccF * 100)
     hal.set_p('axis.x.eoffset-scale', str(self.ccScale))
     hal.set_p('axis.y.eoffset-scale', str(self.ccScale))
     hal.set_p('plasmac.x-y-velocity', str(ccVel))
     hal.set_p('axis.x.eoffset-enable', '1')
     hal.set_p('axis.y.eoffset-enable', '1')
Ejemplo n.º 9
0
 def Yminus_pressed(self, widget):
     if hal.get_value('plasmac.axis-y-position') + \
        hal.get_value('axis.y.eoffset-counts') * self.oScale - \
        hal.get_value('plasmac_run.kerf-width-f') < self.yMin:
         msg = 'Y axis motion would trip Y minimum limit'
         self.dialog_error(msg)
         return
     move = int(hal.get_value('plasmac_run.kerf-width-f') / self.oScale * -1)
     hal.set_p('plasmac.y-offset', '{}'.format(str(hal.get_value('axis.y.eoffset-counts') + move)))
     hal.set_p('plasmac.cut-recovery', '1')
Ejemplo n.º 10
0
 def Xplus_pressed(self, widget):
     if hal.get_value('plasmac.axis-x-position') + \
        hal.get_value('axis.x.eoffset-counts') * self.oScale + \
        hal.get_value('plasmac_run.kerf-width-f') > self.xMax:
         msg = 'X axis motion would trip X maximum limit'
         self.dialog_error(msg)
         return
     move = int(hal.get_value('plasmac_run.kerf-width-f') / self.oScale * 1)
     hal.set_p('plasmac.x-offset', '{}'.format(str(hal.get_value('axis.x.eoffset-counts') + move)))
     hal.set_p('plasmac.cut-recovery', '1')
Ejemplo n.º 11
0
    def periodic(self):
        if self.builder.get_object('thc-auto').get_active():
            self.halcomp['thc-enable-out'] = self.builder.get_object(
                'thc-enable').get_active()

        mode = hal.get_value('plasmac.mode')
        units = hal.get_value('halui.machine.units-per-mm')
        maxPidP = self.thcFeedRate / units * 0.1
        if mode != self.oldMode:
            if mode == 0:
                self.builder.get_object('auto-box').show()
                self.builder.get_object('kerf-box').show()
                self.builder.get_object('kerf-label').show()
                self.builder.get_object('kerf-frame').set_shadow_type(
                    gtk.SHADOW_OUT)
                self.builder.get_object('pid-p-gain-adj').configure(
                    self.builder.get_object('pid-p-gain-adj').get_value(), 1,
                    maxPidP, 1, 0, 0)
                self.builder.get_object('pid-p-label').set_text(
                    'Speed (PID P)')
                self.builder.get_object('delay-box').show()
                self.builder.get_object('threshold-box').show()
                self.builder.get_object('volts-box').show()
            elif mode == 1:
                self.builder.get_object('auto-box').show()
                self.builder.get_object('kerf-box').show()
                self.builder.get_object('kerf-label').show()
                self.builder.get_object('kerf-frame').set_shadow_type(
                    gtk.SHADOW_OUT)
                self.builder.get_object('pid-p-gain-adj').configure(
                    self.builder.get_object('pid-p-gain-adj').get_value(), 1,
                    maxPidP, 1, 0, 0)
                self.builder.get_object('pid-p-label').set_text(
                    'Speed (PID P)')
                self.builder.get_object('delay-box').show()
                self.builder.get_object('threshold-box').show()
                self.builder.get_object('volts-box').show()
            elif mode == 2:
                self.builder.get_object('auto-box').hide()
                self.builder.get_object('kerf-box').hide()
                self.builder.get_object('kerf-label').hide()
                self.builder.get_object('kerf-frame').set_shadow_type(
                    gtk.SHADOW_NONE)
                self.builder.get_object('pid-p-gain-adj').configure(
                    self.builder.get_object('pid-p-gain-adj').get_value(), 1,
                    100, 1, 0, 0)
                self.builder.get_object('pid-p-label').set_text('Speed (%)')
                self.builder.get_object('delay-box').hide()
                self.builder.get_object('threshold-box').hide()
                self.builder.get_object('volts-box').hide()
            else:
                pass
            self.oldMode = mode
        return True
Ejemplo n.º 12
0
 def torch_changed(self, halpin):
     if halpin:
         if (hal.get_value('plasmac.mode') == 1
                 or hal.get_value('plasmac.mode')
                 == 2) and not self.w.arc_ok.isChecked():
             self.w.arc_ok.toggle()
             self.w.arc_ok_clicked()
     else:
         if self.w.arc_ok.isChecked():
             self.w.arc_ok.toggle()
             self.w.arc_ok_clicked()
Ejemplo n.º 13
0
 def initialized__(self):
     self.w.setWindowTitle('QtPlasmaC Sim')
     self.IMAGES = os.path.join(self.PATHS.IMAGEDIR, 'qtplasmac/images/')
     self.w.setWindowIcon(
         QIcon(os.path.join(self.IMAGES, 'linuxcncicon.png')))
     self.breakPin = self.hal.newpin('sensor_breakaway', hal.HAL_BIT,
                                     hal.HAL_OUT)
     self.floatPin = self.hal.newpin('sensor_float', hal.HAL_BIT,
                                     hal.HAL_OUT)
     self.ohmicPin = self.hal.newpin('sensor_ohmic', hal.HAL_BIT,
                                     hal.HAL_OUT)
     self.torchPin = self.hal.newpin('torch_on', hal.HAL_BIT, hal.HAL_IN)
     self.statePin = self.hal.newpin('state', hal.HAL_S32, hal.HAL_IN)
     self.zPosPin = self.hal.newpin('z_position', hal.HAL_FLOAT, hal.HAL_IN)
     self.arcVoltsPin = self.hal.newpin('arc_voltage_out-f', hal.HAL_FLOAT,
                                        hal.HAL_OUT)
     CALL([
         'halcmd', 'net', 'plasmac:axis-position',
         'qtplasmac_sim.z_position'
     ])
     CALL(['halcmd', 'net', 'plasmac:state', 'qtplasmac_sim.state'])
     self.torchPin.value_changed.connect(self.torch_changed)
     self.zPosPin.value_changed.connect(
         lambda v: self.z_position_changed(v))
     self.w.arc_voltage_out.valueChanged.connect(
         lambda v: self.arc_volts_changed(v))
     self.w.sensor_flt.pressed.connect(self.float_pressed)
     self.w.sensor_ohm.pressed.connect(self.ohmic_pressed)
     self.w.sensor_brk.pressed.connect(self.break_pressed)
     self.w.arc_ok.clicked.connect(self.arc_ok_clicked)
     self.w.estop.pressed.connect(self.estop_pressed)
     self.w.auto_flt.pressed.connect(self.auto_float_pressed)
     self.w.auto_flt.setChecked(True)
     self.w.auto_ohm.pressed.connect(self.auto_ohmic_pressed)
     self.fTimer = QtCore.QTimer()
     self.fTimer.setInterval(500)
     self.fTimer.setSingleShot(True)
     self.fTimer.timeout.connect(self.float_timer_done)
     self.oTimer = QtCore.QTimer()
     self.oTimer.setInterval(500)
     self.oTimer.setSingleShot(True)
     self.oTimer.timeout.connect(self.ohmic_timer_done)
     self.bTimer = QtCore.QTimer()
     self.bTimer.setInterval(500)
     self.bTimer.setSingleShot(True)
     self.bTimer.timeout.connect(self.break_timer_done)
     self.w.help.pressed.connect(self.help_pressed)
     mode = hal.get_value('plasmac.mode')
     self.set_mode(mode)
     hal.set_p('estop_or.in0', '1')
     zMin = hal.get_value('ini.z.min_limit')
     self.zProbe = zMin + (10 * hal.get_value('halui.machine.units-per-mm'))
     self.w.estop.setStyleSheet('color: {}; background: {}'.format(
         self.foreColor, self.estopColor))
Ejemplo n.º 14
0
 def consumable_change_setup(self):
     ccParm = self.i.find('PLASMAC','BUTTON_1_CODE').replace('change-consumables','').replace(' ','').lower() or None
     if ccParm:
         self.ccX = self.ccY = ccF = ''
         X = Y = F = ''
         ccAxis = [X, Y, F]
         ccName = ['x', 'y', 'f']
         for loop in range(3):
             count = 0
             if ccName[loop] in ccParm:
                 while 1:
                     if not ccParm[count]: break
                     if ccParm[count] == ccName[loop]:
                         count += 1
                         break
                     count += 1
                 while 1:
                     if count == len(ccParm): break
                     if ccParm[count].isdigit() or ccParm[count] in '.-':
                         ccAxis[loop] += ccParm[count]
                     else:
                         break
                     count += 1
                 if ccName[loop] == 'x':
                     self.ccX = float(ccAxis[loop])
                 elif ccName[loop] == 'y':
                     self.ccY = float(ccAxis[loop])
                 elif ccName[loop] == 'f':
                     ccF = float(ccAxis[loop])
         if self.ccX and \
            (self.ccX < round(float(self.i.find('AXIS_X', 'MIN_LIMIT')), 6) or \
            self.ccX > round(float(self.i.find('AXIS_X', 'MAX_LIMIT')), 6)):
             print('x out of bounds for consumable change\n')
             raise SystemExit()
         if self.ccY and \
            (self.ccY < round(float(self.i.find('AXIS_Y', 'MIN_LIMIT')), 6) or \
            self.ccY > round(float(self.i.find('AXIS_Y', 'MAX_LIMIT')), 6)):
             print('y out of bounds for consumable change\n')
             raise SystemExit()
         if not ccF:
             print('invalid consumable change feed rate\n')
             raise SystemExit()
         self.ccScale = round(hal.get_value('plasmac.offset-scale'), 3) / 100
         ccVel = int(1 / hal.get_value('halui.machine.units-per-mm') / 60 * ccF * 100)
         hal.set_p('axis.x.eoffset-scale', str(self.ccScale))
         hal.set_p('axis.y.eoffset-scale', str(self.ccScale))   
         hal.set_p('plasmac.x-y-velocity', str(ccVel))
         hal.set_p('axis.x.eoffset-enable', '1')
         hal.set_p('axis.y.eoffset-enable', '1')
     else:
         print('consumable change parameters required\n')
Ejemplo n.º 15
0
 def periodic(self):
     self.s.poll()
     isIdleHomed = True
     isIdleOn = True
     if hal.get_value('halui.program.is-idle') and hal.get_value(
             'halui.machine.is-on'):
         if hal.get_value('plasmac.arc-ok-out'):
             isIdleOn = False
         for joint in range(0, int(self.i.find('KINS', 'JOINTS'))):
             if not self.s.homed[joint]:
                 isIdleHomed = False
                 break
     else:
         isIdleHomed = False
         isIdleOn = False
     for n in range(1, 5):
         if 'ohmic-test' in self.iniButtonCode[n]:
             if isIdleOn or hal.get_value('halui.program.is-paused'):
                 self.builder.get_object('button' +
                                         str(n)).set_sensitive(True)
             else:
                 self.builder.get_object('button' +
                                         str(n)).set_sensitive(False)
         elif not 'cut-type' in self.iniButtonCode[
                 n] and not self.iniButtonCode[n].startswith('%'):
             if isIdleHomed:
                 self.builder.get_object('button' +
                                         str(n)).set_sensitive(True)
             else:
                 self.builder.get_object('button' +
                                         str(n)).set_sensitive(False)
     if self.probeTimer:
         if time.time() >= self.probeTimer:
             self.probeTimer = 0
             if not self.probePressed:
                 hal.set_p('plasmac.probe-test', '0')
     if self.inFile and self.inFile != self.s.file:
         if not 'PlaSmaC' in self.s.file or 'PlaSmaC0' in self.s.file:
             self.builder.get_object(self.cutButton).set_style(
                 self.buttonPlain)
             self.builder.get_object(
                 self.cutButton).set_label('Pierce & Cut')
             self.cutType = 0
         elif 'PlaSmaC1' in self.s.file:
             self.builder.get_object(self.cutButton).set_style(
                 self.buttonOrange)
             self.builder.get_object(
                 self.cutButton).set_label('Pierce Only')
             self.cutType = 1
     return True
Ejemplo n.º 16
0
 def torch_changed(self, halpin):
     if halpin:
         time.sleep(0.1)
         if hal.get_value('plasmac.mode') == 0 or hal.get_value('plasmac.mode') == 1:
             self.w.arc_voltage_out.setValue(100.0)
             self.w.arc_voltage_out.setMinimum(90.0)
             self.w.arc_voltage_out.setMaximum(110.0)
         if (hal.get_value('plasmac.mode') == 1 or hal.get_value('plasmac.mode') == 2) and not self.w.arc_ok.isChecked():
             self.w.arc_ok.toggle()
     else:
         self.w.arc_voltage_out.setMinimum(0.0)
         self.w.arc_voltage_out.setMaximum(300.0)
         self.w.arc_voltage_out.setValue(0.0)
         if self.w.arc_ok.isChecked():
             self.w.arc_ok.toggle()
Ejemplo n.º 17
0
 def initialized__(self):
     self.w.torch_on.hal_pin_changed.connect(self.torch_changed)
     self.w.sensor_flt.pressed.connect(self.float_pressed)
     self.w.sensor_ohm.pressed.connect(self.ohmic_pressed)
     self.w.sensor_brk.pressed.connect(self.break_pressed)
     self.w.arc_ok.pressed.connect(self.arc_ok_pressed)
     self.w.estop.pressed.connect(self.estop_pressed)
     self.fTimer = QtCore.QTimer()
     self.fTimer.setInterval(500)
     self.fTimer.setSingleShot(True)
     self.fTimer.timeout.connect(self.float_timer_done)
     self.oTimer = QtCore.QTimer()
     self.oTimer.setInterval(500)
     self.oTimer.setSingleShot(True)
     self.oTimer.timeout.connect(self.ohmic_timer_done)
     self.bTimer = QtCore.QTimer()
     self.bTimer.setInterval(500)
     self.bTimer.setSingleShot(True)
     self.bTimer.timeout.connect(self.break_timer_done)
     self.backColor = QColor(self.w.sensor_flt.palette().color(
         QPalette.Background)).name()
     mode = hal.get_value('plasmac.mode')
     self.set_mode(mode)
     hal.set_p('estop_or.in0', '1')
     self.w.estop.setStyleSheet('background: red')
Ejemplo n.º 18
0
 def estop_pressed(self):
     if hal.get_value('estop_or.in0') == 0:
         hal.set_p('estop_or.in0', '1')
         self.w.estop.setStyleSheet('background: red')
     else:
         hal.set_p('estop_or.in0', '0')
         self.w.estop.setStyleSheet('background: {}'.format(self.backColor))
Ejemplo n.º 19
0
 def torch_changed(self, halpin):
     if halpin.get():
         if hal.get_value('plasmac.mode') == 0 or hal.get_value(
                 'plasmac.mode') == 1:
             self.B.get_object('arcVoltage').set_value(100.0)
             self.B.get_object('arcVoltageAdj').set_lower(90.0)
         if hal.get_value('plasmac.mode') == 1 or hal.get_value(
                 'plasmac.mode') == 2:
             self.B.get_object('arcOk').set_active(True)
     else:
         self.B.get_object('arcVoltage').set_sensitive(0)
         self.B.get_object('arcVoltageAdj').set_lower(0.0)
         self.B.get_object('arcVoltage').set_value(0.0)
         time.sleep(.1)
         self.B.get_object('arcVoltage').set_sensitive(1)
         self.B.get_object('arcOk').set_active(False)
Ejemplo n.º 20
0
def write_temp_default_material(data):
    with open(tmpMaterialFile, 'w') as fWrite:
        fWrite.write('#plasmac temporary material file\n')
        fWrite.write('\nnumber={}\n'.format(tmpMatNum))
        fWrite.write('name={}\n'.format(tmpMatNam))
        fWrite.write('kerf-width={}\n'.format(data[3]))
        fWrite.write('thc-enable={}\n'.format(data[4]))
        fWrite.write('pierce-height={}\n'.format(data[5]))
        fWrite.write('pierce-delay={}\n'.format(data[6]))
        fWrite.write('puddle-jump-height={}\n'.format(data[7]))
        fWrite.write('puddle-jump-delay={}\n'.format(data[8]))
        fWrite.write('cut-height={}\n'.format(data[9]))
        fWrite.write('cut-feed-rate={}\n'.format(data[10]))
        fWrite.write('cut-amps={}\n'.format(data[11]))
        fWrite.write('cut-volts={}\n'.format(data[12]))
        fWrite.write('pause-at-end={}\n'.format(data[13]))
        fWrite.write('gas-pressure={}\n'.format(data[14]))
        fWrite.write('cut-mode={}\n'.format(data[15]))
        fWrite.write('\n')
    hal.set_p('qtplasmac.material_temp', '{}'.format(tmpMatNum))
    matDelay = time.time()
    while 1:
        if time.time() > matDelay + 3:
            codeWarn = True
            dlg = '\nTemporary materials was not loaded in a timely manner:\n'
            dlg += '\nTry to reload the G-Code file.\n'
            dialog_box('WARNING', dlg)
            break
        if not hal.get_value('qtplasmac.material_temp'):
            break
Ejemplo n.º 21
0
 def _coord(self, v):
     if isinstance(v, str):
         if self.comp is None:
             return hal.get_value(v)
         else:
             return self.comp[v]
     return v
Ejemplo n.º 22
0
 def state_changed(self,halpin):
     if hal.get_value('plasmac.torch-enable') == 1:
         if halpin.get() != self.CUTTING and self.oldState == self.CUTTING:
             self.CUT_DISTANCE = self.CUT_DISTANCE + hal.get_value('plasmac.cut-length')
             if hal.get_value('halui.machine.units-per-mm') == 1:
                 self.builder.get_object('cut-distance').set_label('%0.2f M' %(self.CUT_DISTANCE * 0.001))
             else:
                 self.builder.get_object('cut-distance').set_label('%0.2f\"' %(self.CUT_DISTANCE))
                 self.CUT_TIME = self.CUT_TIME + hal.get_value('plasmac.cut-time')
                 self.display_time('cut-time', self.CUT_TIME)
         elif halpin.get() == self.PROBE_HEIGHT and self.oldState == self.IDLE:
             self.probeStart = time.time()
         elif halpin.get() > self.ZERO_HEIGHT and (self.oldState >= self.PROBE_HEIGHT and self.oldState <= self.PROBE_UP):
             self.PROBE_TIME = self.PROBE_TIME + (time.time() - self.probeStart)
             self.display_time('probe-time', self.PROBE_TIME)
         self.oldState = halpin.get()
Ejemplo n.º 23
0
    def periodic(self):
        if self.builder.get_object('thc-auto').get_active():
            self.halcomp['thc-enable-out'] = self.builder.get_object('thc-enable').get_active()

        mode = hal.get_value('plasmac.mode')
        if mode != self.oldMode:
            if mode == 0:
                self.builder.get_object('kerfcross-enable').show()
                self.builder.get_object('kerfcross-enable-label').show()
                self.builder.get_object('volts-box').show()
            elif mode == 1:
                self.builder.get_object('kerfcross-enable').show()
                self.builder.get_object('kerfcross-enable-label').show()
                self.builder.get_object('volts-box').show()
            elif mode == 2:
                self.builder.get_object('kerfcross-enable').hide()
                self.builder.get_object('kerfcross-enable-label').hide()
                self.builder.get_object('volts-box').hide()
            else:
                pass
            self.oldMode = mode
        self.s.poll()
        homed = True
        for n in range(self.s.joints):
            if not self.s.homed[n]:
                homed = False
        hal.set_p('plasmac.homed', str(homed))
        if homed and self.s.interp_state == linuxcnc.INTERP_IDLE:
            self.builder.get_object('single-cut').set_sensitive(True)
        else:
            self.builder.get_object('single-cut').set_sensitive(False)
        return True
Ejemplo n.º 24
0
def write_temp_default_material(data):
    global lineNum, warnMatLoad
    try:
        with open(tmpMaterialFile, 'w') as fWrite:
            fWrite.write('#plasmac temporary material file\n')
            fWrite.write('\nnumber={}\n'.format(tmpMatNum))
            fWrite.write('name={}\n'.format(tmpMatNam))
            fWrite.write('kerf-width={}\n'.format(data[3]))
            fWrite.write('thc-enable={}\n'.format(data[4]))
            fWrite.write('pierce-height={}\n'.format(data[5]))
            fWrite.write('pierce-delay={}\n'.format(data[6]))
            fWrite.write('puddle-jump-height={}\n'.format(data[7]))
            fWrite.write('puddle-jump-delay={}\n'.format(data[8]))
            fWrite.write('cut-height={}\n'.format(data[9]))
            fWrite.write('cut-feed-rate={}\n'.format(data[10]))
            fWrite.write('cut-amps={}\n'.format(data[11]))
            fWrite.write('cut-volts={}\n'.format(data[12]))
            fWrite.write('pause-at-end={}\n'.format(data[13]))
            fWrite.write('gas-pressure={}\n'.format(data[14]))
            fWrite.write('cut-mode={}\n'.format(data[15]))
            fWrite.write('\n')
    except:
        codeError = True
        errorTempMat.append(lineNum)
    hal.set_p('qtplasmac.material_temp', '{}'.format(tmpMatNum))
    matDelay = time.time()
    while 1:
        if time.time() > matDelay + 3:
            codeWarn = True
            warnMatLoad.append(lineNum)
            break
        if not hal.get_value('qtplasmac.material_temp'):
            break
Ejemplo n.º 25
0
 def refresh(self, line):
     line = " ".join(line.split())
     h = line.split(' ')
     try:
         return str(hal.get_value(h[1]))
     except:
         return ''
Ejemplo n.º 26
0
 def initialized__(self):
     self.w.setWindowTitle('QtPlasmaC Sim')
     self.w.torch_on.hal_pin_changed.connect(self.torch_changed)
     self.w.sensor_flt.pressed.connect(self.float_pressed)
     self.w.sensor_ohm.pressed.connect(self.ohmic_pressed)
     self.w.sensor_brk.pressed.connect(self.break_pressed)
     self.w.arc_ok.clicked.connect(self.arc_ok_clicked)
     self.w.estop.pressed.connect(self.estop_pressed)
     self.fTimer = QtCore.QTimer()
     self.fTimer.setInterval(500)
     self.fTimer.setSingleShot(True)
     self.fTimer.timeout.connect(self.float_timer_done)
     self.oTimer = QtCore.QTimer()
     self.oTimer.setInterval(500)
     self.oTimer.setSingleShot(True)
     self.oTimer.timeout.connect(self.ohmic_timer_done)
     self.bTimer = QtCore.QTimer()
     self.bTimer.setInterval(500)
     self.bTimer.setSingleShot(True)
     self.bTimer.timeout.connect(self.break_timer_done)
     mode = hal.get_value('plasmac.mode')
     self.set_mode(mode)
     hal.set_p('estop_or.in0', '1')
     self.w.estop.setStyleSheet('color: {}; background: {}'.format(
         self.foreColor, self.estopColor))
Ejemplo n.º 27
0
 def user_button_pressed(self, button, commands):
     if not commands: return
     if commands.lower() == 'ohmic-test':
         hal.set_p('plasmac.ohmic-test', '1')
     elif 'probe-test' in commands.lower():
         self.probePressed = True
         self.probeButton = button
         if commands.lower().replace('probe-test', '').strip():
             self.probeTimer = float(commands.lower().replace(
                 'probe-test', '').strip()) + time.time()
         hal.set_p('plasmac.probe-test', '1')
     elif 'cut-type' in commands.lower(
     ) and not hal.get_value('halui.program.is-running'):
         self.cutType ^= 1
         if self.cutType:
             hal.set_p('plasmac_run.cut-type', '1')
             self.builder.get_object(button).set_style(self.buttonOrange)
             self.builder.get_object(button).set_label('Pierce Only')
         else:
             hal.set_p('plasmac_run.cut-type', '0')
             self.builder.get_object(button).set_style(self.buttonPlain)
             self.builder.get_object(button).set_label('Pierce & Cut')
         self.message(
             '\nSwitching between cut types requires re-opening of the program.\n\n'
             'Reload is NOT sufficient.\n\n')
     else:
         for command in commands.split('\\'):
             if command.strip()[0] == '%':
                 command = command.strip().strip('%') + '&'
                 Popen(command, stdout=PIPE, stderr=PIPE, shell=True)
             else:
                 if '{' in command:
                     newCommand = subCommand = ''
                     for char in command:
                         if char == '{':
                             subCommand = ':'
                         elif char == '}':
                             f1, f2 = subCommand.replace(':', "").split()
                             newCommand += self.i.find(f1, f2)
                             subCommand = ''
                         elif subCommand.startswith(':'):
                             subCommand += char
                         else:
                             newCommand += char
                     command = newCommand
                 self.s.poll()
                 if not self.s.estop and self.s.enabled and self.s.homed and (
                         self.s.interp_state == linuxcnc.INTERP_IDLE):
                     mode = self.s.task_mode
                     if mode != linuxcnc.MODE_MDI:
                         mode = self.s.task_mode
                         self.c.mode(linuxcnc.MODE_MDI)
                         self.c.wait_complete()
                     self.c.mdi(command)
                     self.s.poll()
                     while self.s.interp_state != linuxcnc.INTERP_IDLE:
                         self.s.poll()
                     self.c.mode(mode)
                     self.c.wait_complete()
Ejemplo n.º 28
0
    def coords(self):
        try:
            leng = hal.get_value('motion.tooloffset.z') * self.MODEL_SCALING
        except:
            leng = 0
        try:
            xleng = hal.get_value('motion.tooloffset.x') * self.MODEL_SCALING
        except:
            xleng = 0

        x1 = leng
        z1 = -xleng
        x2 = 1  #self.comp["tool-x-offset"]+10
        z2 = -leng / 2
        x3 = 2  #self.comp["tooldiameter"]
        z3 = 0
        return (x1, z1, x2, z2, x3, z3, 0, 1)
Ejemplo n.º 29
0
 def motion_type_changed(self,halpin):
     if hal.get_value('plasmac.torch-enable') == 1:
         if halpin.get() == 1 and self.oldMotionType != 1:
             self.rapidStart = time.time()
         elif halpin.get() != 1 and self.oldMotionType == 1:
             self.RAPID_TIME = self.RAPID_TIME + (time.time() - self.rapidStart)
             self.display_time('rapid-time', self.RAPID_TIME)
         self.oldMotionType = halpin.get()
Ejemplo n.º 30
0
 def pierce_count_changed(self, halpin):
     if hal.get_value('plasmac_stats.state') >= self.TORCH_ON:
         self.PIERCE_COUNT += 1
         self.pierce_count += 1
         self.builder.get_object('pierce-countT').set_label('{:d}'.format(
             self.PIERCE_COUNT))
         self.builder.get_object('pierce-count').set_label('{:d}'.format(
             self.pierce_count))
Ejemplo n.º 31
0
    def merge(self):
        self.old['state'] = self.stat.task_state
        self.old['mode']  = self.stat.task_mode
        self.old['interp']= self.stat.interp_state
        # Only update file if call level is 0, which
        # means we are not executing a subroutine/remap
        # This avoids emiting signals for bogus file names below
        if self.stat.call_level == 0:
            self.old['file']  = self.stat.file
        self.old['paused']= self.stat.paused
        self.old['line']  = self.stat.motion_line
        self.old['homed'] = self.stat.homed
        self.old['tool-in-spindle'] = self.stat.tool_in_spindle
        self.old['motion-mode'] = self.stat.motion_mode
        self.old['spindle-or'] = self.stat.spindle[0]['override']
        self.old['feed-or'] = self.stat.feedrate
        self.old['rapid-or'] = self.stat.rapidrate
        self.old['feed-hold']  = self.stat.feed_hold_enabled
        self.old['g5x-index']  = self.stat.g5x_index
        self.old['spindle-enabled']  = self.stat.spindle[0]['enabled']
        self.old['spindle-direction']  = self.stat.spindle[0]['direction']
        self.old['block-delete']= self.stat.block_delete
        self.old['optional-stop']= self.stat.optional_stop
        self.old['spindle-speed']= self.stat.spindle[0]['speed']
        try:
            self.old['actual-spindle-speed']= hal.get_value('spindle.0.speed-in') * 60
        except RuntimeError:
             self.old['actual-spindle-speed'] = 0
        self.old['flood']= self.stat.flood
        self.old['mist']= self.stat.mist

        # override limits / hard limits
        or_limit_list=[]
        hard_limit = False
        for j in range(0, self.stat.joints):
            or_limit_list.append( self.stat.joint[j]['override_limits'])
            min_hard_limit = self.stat.joint[j]['min_hard_limit']
            max_hard_limit = self.stat.joint[j]['max_hard_limit']
            hard_limit = hard_limit or min_hard_limit or max_hard_limit
        self.old['override-limits'] = or_limit_list
        self.old['hard-limits-tripped'] = bool(hard_limit)

        # active G codes
        active_gcodes = []
        codes =''
        for i in sorted(self.stat.gcodes[1:]):
            if i == -1: continue
            if i % 10 == 0:
                    active_gcodes.append("G%d" % (i/10))
            else:
                    active_gcodes.append("G%d.%d" % (i/10, i%10))
        for i in active_gcodes:
            codes = codes +('%s '%i)
        self.old['g-code'] = codes
        # extract specific G code modes
        itime = fpm = fpr = css = rpm = metric = False
        radius = diameter = False
        for num,i in enumerate(active_gcodes):
            if i == 'G93': itime = True
            elif i == 'G94': fpm = True
            elif i == 'G95': fpr = True
            elif i == 'G96': css = True
            elif i == 'G97': rpm = True
            elif i == 'G21': metric = True
            elif i == 'G7': diameter  = True
            elif i == 'G8': radius = True
        self.old['itime'] = itime
        self.old['fpm'] = fpm
        self.old['fpr'] = fpr
        self.old['css'] = css
        self.old['rpm'] = rpm
        self.old['metric'] = metric
        self.old['radius'] = radius
        self.old['diameter'] = diameter

        # active M codes
        active_mcodes = []
        mcodes = ''
        for i in sorted(self.stat.mcodes[1:]):
            if i == -1: continue
            active_mcodes.append("M%d"%i )
        for i in active_mcodes:
            mcodes = mcodes + ("%s "%i)
            #active_mcodes.append("M%s "%i)
        self.old['m-code'] = mcodes
        self.old['tool-info']  = self.stat.tool_table[0]