示例#1
0
    def getNozzleTemperature(self):
        r"""
        getNozzleTemperature method

        reads current nozzle temperature

        returns:
            nozzle temperature
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            # get Temperature
            resp = self._beeCon.sendCmd("M105\n")

            try:
                splits = resp.split(" ")
                tPos = splits[0].find("T:")
                t = float(splits[0][tPos+2:])
                return t
            except Exception as ex:
                logger.error("Error getting nozzle temperature: %s", str(ex))

            return 0
示例#2
0
    def goToBootloader(self):
        r"""
        goToBootloader method

        Resets the printer to Bootloader
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        if self._beeCon.transfering:
            logger.info('File transfer in progress... Can not change to Bootloader\n')
            return None

        logger.info('Changing to Bootloader...\n')

        mode = self.getPrinterMode()

        if mode == 'Bootloader':
            logger.info('Printer Already in Bootloader\n')
            return False

        with self._commandLock:
            self._beeCon.sendCmd('M609\n')
            self._beeCon.reconnect()

        mode = self.getPrinterMode()

        return mode
示例#3
0
    def transferSDFile(self, fileName, sdFileName=None):
        r"""
        transferSDFile method
        
        Transfers GCode file to printer internal memory
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        if os.path.isfile(fileName) is False:
            logger.warning("Gcode Transfer: File does not exist")
            return

        logger.info("Transfer GCode File: %s" % fileName)

        try:

            with self._commandLock:
                self._beeCon.read()

                if sdFileName is not None:
                    self._transfThread = transferThread.FileTransferThread(self._beeCon, fileName, 'gcode', sdFileName)
                else:
                    self._transfThread = transferThread.FileTransferThread(self._beeCon, fileName, 'gcode')

                self._transfThread.start()

        except Exception as ex:
            logger.error("Error starting the print operation: %s", str(ex))
            return False



        return
示例#4
0
    def initSD(self):
        r"""
        initSD method

        inits Sd card
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            # Init SD
            self._beeCon.write("M21\n")

            tries = 10
            resp = ""
            while (tries > 0) and ("ok" not in resp.lower()):
                try:
                    resp += self._beeCon.read()
                    tries -= 1
                except Exception as ex:
                    logger.error("Error initializing SD Card: %s", str(ex))

            return tries
示例#5
0
    def flashFirmware(self, fileName, firmwareString='20.0.0'):
        r"""
        flashFirmware method
        
        Flash new firmware
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        """
        if ('linux' or 'darwin') in platform.system().lower():
            fileName = fileName.translate(None,''.join("'"))
        elif ('win32' or 'cygwin')  in platform.system().lower():
            fileName = fileName.translate(None,''.join('"'))\
        """
        if os.path.isfile(fileName) is False:
            logger.warning("Flash firmware: File does not exist")
            return

        logger.info("Flashing new firmware File: %s", fileName)
        self.setFirmwareString('0.0.0')                  # Clear FW Version

        self._transfThread = transferThread.FileTransferThread(self._beeCon, fileName, 'Firmware', firmwareString)
        self._transfThread.start()

        return
示例#6
0
    def move(self, x=None, y=None, z=None, e=None, f=None, wait=None):
        r"""
        move method

        performs a relative move at a given feedrate current

        arguments:
        x - X axis displacement
        y - Y axis displacement
        z - Z axis displacement
        e - E extruder displacement

        f - feedrate

        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            resp = self._beeCon.sendCmd("G91\n")

            newX = 0
            newY = 0
            newZ = 0
            newE = 0

            if x is not None:
                newX = newX + x
            if y is not None:
                newY = newY + y
            if z is not None:
                newZ = newZ + z
            if e is not None:
                newE = newE + e

            if f is not None:
                newF = float(f)
                commandStr = "G1 X" + str(newX) + " Y" + str(newY) \
                             + " Z" + str(newZ) + " E" + str(newE) + " F" + str(newF) + "\n"
            else:
                commandStr = "G1 X" + str(newX) + " Y" + str(newY) \
                             + " Z" + str(newZ) + " E" + str(newE) + "\n"

            if wait is not None:
                self._beeCon.sendCmd(commandStr)
            else:
                #self._beeCon.sendCmd(commandStr, "3")
                self._beeCon.sendCmd(cmd=commandStr, wait="3", timeout=100)
                
            self._beeCon.sendCmd("G90\n")

            return
示例#7
0
    def cancelCalibration(self):
        r"""
        cancelCalibration method

        Cancels the calibration procedure.
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        self.home()

        return
示例#8
0
    def load(self):
        r"""
        load method

        performs load filament operation
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd("M701\n", "3")
            return
示例#9
0
    def getStatus(self):
        r"""
        getStatus method

        returns the current status of the printer
        """
        mode = self.getPrinterMode()
        if mode == 'Bootloader':
            logger.info('Printer in Bootloader mode')
            return 'Bootloader'
        if mode is None or (mode != 'Firmware' and mode != 'Bootloader'):
            logger.warning('GetStatus: can only get status in firmware')
            return None

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        resp = ''
        status = ''
        done = False

        with self._commandLock:
            while not done:

                while 's:' not in resp.lower():
                    resp += self._beeCon.sendCmd("M625\n")
                    time.sleep(1)

                if 's:3' in resp.lower():
                    status = 'Ready'
                    done = True
                elif 's:4' in resp.lower():
                    status = 'Moving'
                    done = True
                elif 's:5' in resp.lower():
                    status = 'SD_Print'
                    done = True
                elif 's:6' in resp.lower():
                    status = 'Transfer'
                    done = True
                elif 's:7' in resp.lower() or 'pause' in resp.lower():
                    status = 'Pause'
                    self._paused = True
                    done = True
                elif 's:9' in resp.lower() or '_shutdown' in resp.lower():
                    status = 'Shutdown'
                    self._shutdown = True
                    done = True

            return status
示例#10
0
    def goToLoadUnloadPos(self):
        r"""
        goToLoadUnloadPos method

        moves the printer to the load/unload position
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.waitForStatus('M703\n', '3')

        return
示例#11
0
    def beep(self):
        r"""
        beep method

        performs a beep with 2 seconds duration
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd("M300 P2000\n")

            return
示例#12
0
    def startHeating(self, temperature, extruder=0):
        r"""
        startHeating method

        Starts Heating procedure
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._setPointTemperature = temperature

            return self._beeCon.waitForStatus('M703 S%.2f\n' % temperature, '3')
示例#13
0
    def home(self):
        r"""
        home method

        homes all axis
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd(cmd="G28\n", wait="3", timeout=100)

            return
示例#14
0
    def sendCmd(self, cmd, wait=None, timeout=None):
        r"""
        sendCmd method
        
        Sends command to printer
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            if '\n' not in cmd:
                cmd += '\n'

            return self._beeCon.sendCmd(cmd, wait, timeout)
示例#15
0
    def clearShutdownFlag(self):
        r"""
        clearShutdownFlag method
        
        Clears shutdown Flag
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd('M505\n')

            return True
示例#16
0
    def setFirmwareString(self, fwStr):
        r"""
        setFirmwareString method
        
        Sets new bootloader firmware String
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            cmd = 'M114 A' + str(fwStr) + '\n'
            self._beeCon.sendCmd(cmd, 'ok')

            return
示例#17
0
    def setFilamentString(self, filStr):
        r"""
        setFilamentString method

        Sets filament string

        arguments:
            filStr - filament string
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            return self._beeCon.sendCmd('M1000 %s' % filStr)
示例#18
0
    def startSDPrint(self, sdFileName=''):
        r"""
        startSDPrint method

        starts printing selected file
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd('M33 %s' % sdFileName)

            return True
示例#19
0
    def cancelHeating(self):
        r"""
        cancelHeating method

        Cancels Heating
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._setPointTemperature = 0

            return self._beeCon.sendCmd("M704\n", "3")
示例#20
0
    def goToNextCalibrationPoint(self):
        r"""
        goToNextCalibrationPoint method

        Moves to next calibration point.
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd('G132\n')

            return
示例#21
0
    def setBlowerSpeed(self, speed):
        r"""
        setBlowerSpeed method
        
        Sets Blower Speed
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            cmd = 'M106 S' + str(speed) + '\n'
            self._beeCon.sendCmd(cmd)

            return
示例#22
0
    def resumePrint(self):
        r"""
        resumePrint method
        
        Resume print from pause/_shutdown
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd('M643\n')
            self._pausing = False
            self._shutdown = False

            return
示例#23
0
    def getHeatingState(self):
        r"""
        getHeatingState method

        Returns the heating state
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        currentT = self.getNozzleTemperature()

        if self._setPointTemperature > 0:
            return 100 * currentT/self._setPointTemperature
        else:
            return 100
示例#24
0
    def homeXY(self):
        r"""
        homeXY method

        home axis X and Y
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            #self._beeCon.sendCmd("G28 X0 Y0\n", "3")
            self._beeCon.sendCmd(cmd="G28 X0 Y0\n", wait="3", timeout=100)

            return
示例#25
0
    def getFileList(self):
        r"""
        getFileList method

        Returns list with GCode files strored in the printers memory
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        fList = {'FileNames': [], 'FilePaths': []}

        self.initSD()

        with self._commandLock:
            resp = ""
            self._beeCon.write("M20\n")

            while "end file list" not in resp.lower():
                resp += self._beeCon.read()

            lines = resp.split('\n')

            for l in lines:

                if "/" in l:
                    if "firmware.bck" in l.lower():
                        pass
                    elif "firmware.bin" in l.lower():
                        pass
                    elif "config.txt" in l.lower():
                        pass
                    elif "config.bck" in l.lower():
                        pass
                    elif l == "":
                        pass
                    else:
                        fName = l[1:len(l)]
                        fList['FileNames'].append(fName)
                        fList['FilePaths'].append('')

                elif "end file list" in l.lower():
                    return fList

            return fList
示例#26
0
    def pausePrint(self):
        r"""
        pausePrint method
        
        Initiates pause process
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            self._beeCon.sendCmd('M640\n')
            self._pausing = True

            self.stopStatusMonitor()

            return
示例#27
0
    def createFile(self, fileName):
        r"""
        createFile method

        Creates a file in the SD card root directory

        arguments:
            fileName - file name
        """

        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        # Init SD
        self.initSD()

        with self._commandLock:
            fn = fileName
            if len(fileName) > 8:
                fn = fileName[:8]

            cmdStr = "M30 " + fn + "\n"

            resp = self._beeCon.sendCmd(cmdStr)

            tries = 10
            while tries > 0:

                if "file created" in resp.lower():
                    logger.info("SD file created")
                    break
                elif "error" in resp.lower():
                    logger.error("Error creating file")
                    return False
                else:
                    resp = self._beeCon.sendCmd("\n")
                    logger.debug("Create file in SD: " + resp)

                tries -= 1
            if tries <= 0:
                return False

            return True
示例#28
0
    def getPrinterMode(self):
        r"""
        getPrinterMode method

        Returns a string with the current printer mode (Bootloader/Firmware).
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            resp = self._beeCon.sendCmd("M625\n")

            if 'Bad M-code 625' in resp:   # printer in bootloader mode
                return "Bootloader"
            elif 'ok Q' in resp:
                return "Firmware"
            else:
                return None
示例#29
0
    def cancelPrint(self):
        r"""
        cancelPrint method

        cancels current print and home the printer axis
        """
        logger.debug('Cancelling print...')

        self.stopStatusMonitor()

        if self.isTransferring() is True:
            self.cancelTransfer()
            time.sleep(2)  # Waits for thread to stop transferring
            return True

        with self._commandLock:
            self._beeCon.sendCmd("M112\n", "3")

        return True
示例#30
0
    def setNozzleTemperature(self, t):
        r"""
        setNozzleTemperature method

        Sets nozzle target temperature

        Arguments:
            t - nozzle temperature
        """
        if self.isTransferring():
            logger.debug('File Transfer Thread active, please wait for transfer thread to end')
            return None

        with self._commandLock:
            commandStr = "M104 S" + str(t) + "\n"

            # set Temperature
            self._beeCon.sendCmd(commandStr)

            return