class ClaussAxis(AbstractHardwarePlugin, AbstractAxisPlugin):
    def _init(self):
        Logger().trace("ClaussAxis._init()")
        AbstractHardwarePlugin._init(self)
        AbstractAxisPlugin._init(self)
        self._hardware = ClaussHardware()

    def _defineConfig(self):
        AbstractAxisPlugin._defineConfig(self)
        AbstractHardwarePlugin._defineConfig(self)
        self._addConfigKey("_speedSlow", "SPEED_SLOW", default=DEFAULT_SPEED_SLOW)
        self._addConfigKey("_speedNormal", "SPEED_NORMAL", default=DEFAULT_SPEED_NORMAL)
        self._addConfigKey("_speedFast", "SPEED_FAST", default=DEFAULT_SPEED_FAST)
        self._addConfigKey("_parkPosition", "PARK_POSITION", default=DEFAULT_PARK_POSITION)
        if self.capacity == "yawAxis":
            self._addConfigKey("_parkEnable", "PARK_ENABLE", default=False)
        else:
            self._addConfigKey("_parkEnable", "PARK_ENABLE", default=True)

    def __getSpeed(self):
        """ Return the speed value according to manual speed setting.

        @return: speed
        @rtype float
        """
        if self._manualSpeed == "slow":
            speed = self._config["SPEED_SLOW"]
        elif self._manualSpeed == "normal":
            speed = self._config["SPEED_NORMAL"]
        elif self._manualSpeed == "fast":
            speed = self._config["SPEED_FAST"]

        return speed

    def init(self):
        Logger().trace("ClaussAxis.init()")
        self._hardware.setAxis(AXIS_TABLE[self.capacity]),
        AbstractHardwarePlugin.init(self)

    def shutdown(self):
        Logger().trace("ClaussAxis.shutdown()")
        self.stop()
        if self._config["PARK_ENABLE"]:
            self._hardware.drive(float(self._config["PARK_POSITION"]), self.__getSpeed())
        AbstractHardwarePlugin.shutdown(self)
        AbstractAxisPlugin.shutdown(self)

    def read(self):
        pos = self._hardware.read() - self._offset
        return pos

    def drive(self, pos, useOffset=True, wait=True):
        Logger().debug("ClaussAxis.drive(): '%s' drive to %.1f" % (self.capacity, pos))
        currentPos = self.read()
        # Logger().debug("ClaussAxis.drive(): currentPos=%.1f" % currentPos)

        # checkLimits defined in Papywizard user conf (usually +360 - 360°)
        self._checkLimits(pos)

        if useOffset:
            pos += self._offset
            # Logger().debug("ClaussAxis.drive(): useOffset=True, pos=%.1f, offset=%.1f" % (pos, self._offset))

        # Only move if needed
        if abs(pos - currentPos) > 0.0 or not useOffset:
            # Logger().debug("ClaussAxis.drive(): Do move, pos=%.1f, currentPos=%.1f, useOffset=%s" % (pos, currentPos, useOffset))
            self._hardware.drive(pos, self.__getSpeed())

            # Wait end of movement
            if wait:
                self.waitEndOfDrive()

    def waitEndOfDrive(self):
        while self.isMoving():
            time.sleep(config.SPY_REFRESH_DELAY / 1000.0)
        # self.waitStop()

    def startJog(self, dir_):

        # Restrict manual moving to high or low limit (user defined)
        if dir_ == "+":
            maxPos = -float(self._config["HIGH_LIMIT"])
        elif dir_ == "-":
            maxPos = float(self._config["LOW_LIMIT"])
        # Logger().debug("ClaussAxis.startJog(): maxPos=%s" % maxPos)
        self._hardware.startJog(dir_, self.__getSpeed(), maxPos)

    def stop(self):
        self.__driveFlag = False
        self._hardware.stop()
        self.waitStop()

    def waitStop(self):
        pass

    def isMoving(self):
        return self._hardware.isMoving()
Beispiel #2
0
class ClaussAxis(AbstractHardwarePlugin, AbstractAxisPlugin):
    def _init(self):
        Logger().trace("ClaussAxis._init()")
        AbstractHardwarePlugin._init(self)
        AbstractAxisPlugin._init(self)
        self._hardware = ClaussHardware()

    def _defineConfig(self):
        AbstractAxisPlugin._defineConfig(self)
        AbstractHardwarePlugin._defineConfig(self)
        self._addConfigKey('_speedSlow',
                           'SPEED_SLOW',
                           default=DEFAULT_SPEED_SLOW)
        self._addConfigKey('_speedNormal',
                           'SPEED_NORMAL',
                           default=DEFAULT_SPEED_NORMAL)
        self._addConfigKey('_speedFast',
                           'SPEED_FAST',
                           default=DEFAULT_SPEED_FAST)
        self._addConfigKey('_parkPosition',
                           'PARK_POSITION',
                           default=DEFAULT_PARK_POSITION)
        if self.capacity == 'yawAxis':
            self._addConfigKey('_parkEnable', 'PARK_ENABLE', default=False)
        else:
            self._addConfigKey('_parkEnable', 'PARK_ENABLE', default=True)

    def __getSpeed(self):
        """ Return the speed value according to manual speed setting.

        @return: speed
        @rtype float
        """
        if self._manualSpeed == 'slow':
            speed = self._config['SPEED_SLOW']
        elif self._manualSpeed == 'normal':
            speed = self._config['SPEED_NORMAL']
        elif self._manualSpeed == 'fast':
            speed = self._config['SPEED_FAST']

        return speed

    def init(self):
        Logger().trace("ClaussAxis.init()")
        self._hardware.setAxis(AXIS_TABLE[self.capacity]),
        AbstractHardwarePlugin.init(self)

    def shutdown(self):
        Logger().trace("ClaussAxis.shutdown()")
        self.stop()
        if self._config['PARK_ENABLE']:
            self._hardware.drive(float(self._config['PARK_POSITION']),
                                 self.__getSpeed())
        AbstractHardwarePlugin.shutdown(self)
        AbstractAxisPlugin.shutdown(self)

    def read(self):
        pos = self._hardware.read() - self._offset
        return pos

    def drive(self, pos, useOffset=True, wait=True):
        Logger().debug("ClaussAxis.drive(): '%s' drive to %.1f" %
                       (self.capacity, pos))
        currentPos = self.read()
        #Logger().debug("ClaussAxis.drive(): currentPos=%.1f" % currentPos)

        # checkLimits defined in Papywizard user conf (usually +360 - 360°)
        self._checkLimits(pos)

        if useOffset:
            pos += self._offset
            #Logger().debug("ClaussAxis.drive(): useOffset=True, pos=%.1f, offset=%.1f" % (pos, self._offset))

        # Only move if needed
        if abs(pos - currentPos) > 0. or not useOffset:
            #Logger().debug("ClaussAxis.drive(): Do move, pos=%.1f, currentPos=%.1f, useOffset=%s" % (pos, currentPos, useOffset))
            self._hardware.drive(pos, self.__getSpeed())

            # Wait end of movement
            if wait:
                self.waitEndOfDrive()

    def waitEndOfDrive(self):
        while self.isMoving():
            time.sleep(config.SPY_REFRESH_DELAY / 1000.)
        #self.waitStop()

    def startJog(self, dir_):

        # Restrict manual moving to high or low limit (user defined)
        if dir_ == '+':
            maxPos = -float(self._config['HIGH_LIMIT'])
        elif dir_ == '-':
            maxPos = float(self._config['LOW_LIMIT'])
        #Logger().debug("ClaussAxis.startJog(): maxPos=%s" % maxPos)
        self._hardware.startJog(dir_, self.__getSpeed(), maxPos)

    def stop(self):
        self.__driveFlag = False
        self._hardware.stop()
        self.waitStop()

    def waitStop(self):
        pass

    def isMoving(self):
        return self._hardware.isMoving()