#!/usr/bin/env python # Copyright (c) 2017 Michel Trahan #------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------ # SPINDLE needs access to the Digital, xmlBiesse and linuxcnc.command objects #------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------ #------------------------------------------------------------------------------------ import time class Spindles(object): def __init__(self, d, x, c, dr, sdr): self.digital = d self.x = x self.command = c self.drills = dr self.sidedrills = sdr self.pulseDelay = self.x.getDelay("pulseDelay") #---------------------------------------------------------- # M5 command to stop the spindle #---------------------------------------------------------- def StopSpindleNow(self): self.command.mdi("M5") #, lineno()) #---------------------------------------------------------- #---------------------------------------------------------- def WaitForSpindleToStop(self): #-------------------------------------------------- # test if spindleHasStopped = True: # if not, wait a certain delay, a certain max time #-------------------------------------------------- if self.isSpindleReallyStopped(): return True #--------------------------------------------- # if not stopped, send a M5 command to stop it # wait a certain delay #--------------------------------------------- self.StopSpindleNow() #stopDelay, maxTrials = self.x.getSpindleStopDelay() stopDelay = self.x.getDelay("spindleStop") maxTrials = self.x.getDelay("maxSpindleTrialsToStop") time.sleep(stopDelay) #--------------------------------------------- # then check again if it has stopped #--------------------------------------------- for i in range(1, maxTrials +1): if self.isSpindleReallyStopped(): return True time.sleep(stopDelay) #-------------------------------------------------------- # waited maxTrials * stopDelay seconds, still not stopped #-------------------------------------------------------- return False #---------------------------------------------------------- #---------------------------------------------------------- def isSpindleReallyStopped(self): isSpindleStopped = self.digital.CheckDIN("spindleHasStopped", True) print("isSpindleStopped = %s" % isSpindleStopped) if isSpindleStopped == 1: return True else: return False #---------------------------------------------------------- # raising all spindles ... to make sure they are all raised #---------------------------------------------------------- def raiseALLspindles(self): #------------------------------ # loop through all spindles #------------------------------ #------------------------------------------------ # check first if all spindle are already up #------------------------------------------------ isSpindleALLup = self.digital.CheckDIN("spindleALLup", True) if isSpindleALLup == 0: # nope some are down, so put them all up validSpindle = ("A", "B", "C") for i in validSpindle: self.RaiseSpindle(i) #------------------------------ # loop through all drills #------------------------------ for i in range(1, 34, 1): self.drills.RaiseDrill(i) #------------------------------ # loop through all side drills #------------------------------ for i in range(1, 11, 2): self.sidedrills.RaiseSideDrill(i) #---------------------------------------------------------- #---------------------------------------------------------- def DropSpindle(self,sWhich): isSpindleRaised = self.digital.CheckDOUT("spindle%srise" % sWhich, False) if isSpindleRaised == 1: self.digital.SendDOUT("spindle%srise" % sWhich, 0) # setting to 0 drops it ? isSpindleDropped = self.digital.CheckDOUT("spindle%sdrop" % sWhich, False) if isSpindleDropped == 0: self.digital.SendDOUT("spindle%sdrop" % sWhich, 1) # setting to 1 drops it ? #---------------------------------------------------------- #---------------------------------------------------------- def RaiseSpindle(self,sWhich): isSpindleDropped = self.digital.CheckDOUT("spindle%sdrop" % sWhich, False) if isSpindleDropped == 1: self.digital.SendDOUT("spindle%sdrop" % sWhich, 0) # setting to 0 to raises it ? isSpindleRaised = self.digital.CheckDOUT("spindle%srise" % sWhich, False) if isSpindleRaised == 0: self.digital.SendDOUT("spindle%srise" % sWhich, 1) # setting to 1 to raises it ? #---------------------------------------------------------- #---------------------------------------------------------- def EnergiseSpindle(self, sWhich): self.digital.SendDOUT("spindle%senergise" % "A", 0) # setting to 1 to select it ? self.digital.SendDOUT("spindle%senergise" % "B", 0) # setting to 1 to select it ? self.digital.SendDOUT("spindle%senergise" % "C", 0) # setting to 1 to select it ? self.digital.SendDOUT("spindle%senergise" % sWhich, 1) # setting to 1 to select it ? #---------------------------------------------------------- #---------------------------------------------------------- def ReleaseSpindle(self, sWhich): # pulsed signal #return True #--------------------------------------------------------------------------- # Send the signal to release the spindle #--------------------------------------------------------------------------- self.digital.SendDOUT("spindle%srelease" % sWhich, 1) # Pulse signal time.sleep(self.pulseDelay) # Pulse signal self.digital.SendDOUT("spindle%srelease" % sWhich, 0) # Pulse signal #--------------------------------------------------------------------------- # check if spindle is released #--------------------------------------------------------------------------- isSpindleReleased = self.digital.CheckDIN("spindle%sreleased" % sWhich, True) #--------------------------------------------------------------------------- # if not wait a certain delay and if after delay, still not released, error #--------------------------------------------------------------------------- if not isSpindleReleased: time.sleep(self.x.getDelay("spindleReleaseDelay")) isSpindleReleased = self.digital.CheckDIN("spindle%sreleased" % sWhich, True) if not isSpindleReleased: return False return True #---------------------------------------------------------- #---------------------------------------------------------- def LockSpindle(self, sWhich): #pulsed signal self.digital.SendDOUT("spindle%slock" % sWhich, 1) # Pulse signal time.sleep(self.pulseDelay) # Pulse signal self.digital.SendDOUT("spindle%slock" % sWhich, 0) # Pulse signal #---------------------------------------------------------- #---------------------------------------------------------- def SpindleHasTool(self, sWhich): doesSpindleHasTool = self.digital.CheckDIN("spindle%shastool" % sWhich, True) if doesSpindleHasTool == 0: return False else: return True