frappy_psi.phytron: implement limit switches
This commit is contained in:
parent
06bec41ed3
commit
03c356590b
@ -20,15 +20,12 @@
|
|||||||
#
|
#
|
||||||
# *****************************************************************************
|
# *****************************************************************************
|
||||||
|
|
||||||
"""driver for phytron motors
|
"""driver for phytron motors """
|
||||||
|
|
||||||
limits switches are not yet implemented
|
|
||||||
"""
|
|
||||||
|
|
||||||
import time
|
import time
|
||||||
from frappy.core import Done, Command, EnumType, FloatRange, IntRange, \
|
from frappy.core import Done, Command, EnumType, FloatRange, IntRange, \
|
||||||
HasIO, Parameter, Property, Drivable, PersistentMixin, PersistentParam, \
|
HasIO, Parameter, Property, Drivable, PersistentMixin, PersistentParam, \
|
||||||
StringIO, StringType, IDLE, BUSY, ERROR, Limit
|
StringIO, StringType, IDLE, BUSY, ERROR, Limit, BoolType
|
||||||
from frappy.errors import CommunicationFailedError, HardwareError
|
from frappy.errors import CommunicationFailedError, HardwareError
|
||||||
from frappy.features import HasOffset
|
from frappy.features import HasOffset
|
||||||
from frappy.states import HasStates, status_code, Retry
|
from frappy.states import HasStates, status_code, Retry
|
||||||
@ -66,6 +63,8 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
|
|||||||
|
|
||||||
encoder_mode = Parameter('how to treat the encoder', EnumType('encoder', NO=0, READ=1, CHECK=2),
|
encoder_mode = Parameter('how to treat the encoder', EnumType('encoder', NO=0, READ=1, CHECK=2),
|
||||||
default=1, readonly=False)
|
default=1, readonly=False)
|
||||||
|
check_limit_switches = Parameter('whethter limit switches are checked',BoolType(),
|
||||||
|
default=0, readonly=False)
|
||||||
value = PersistentParam('angle', FloatRange(unit='deg'))
|
value = PersistentParam('angle', FloatRange(unit='deg'))
|
||||||
status = PersistentParam()
|
status = PersistentParam()
|
||||||
target = Parameter('target angle', FloatRange(unit='deg'), readonly=False)
|
target = Parameter('target angle', FloatRange(unit='deg'), readonly=False)
|
||||||
@ -186,11 +185,14 @@ class Motor(HasOffset, HasStates, PersistentMixin, HasIO, Drivable):
|
|||||||
self.hw_stop()
|
self.hw_stop()
|
||||||
|
|
||||||
def read_status(self):
|
def read_status(self):
|
||||||
|
hexstatus = 0x100
|
||||||
for _ in range(3):
|
for _ in range(3):
|
||||||
sysstatus = self.communicate(f'{self.address:x}SE')
|
sysstatus = self.communicate(f'{self.address:x}SE')
|
||||||
try:
|
try:
|
||||||
sysstatus = sysstatus[1:4] if self.axis == 'X' else sysstatus[5:8]
|
sysstatus = sysstatus[1:4] if self.axis == 'X' else sysstatus[5:8]
|
||||||
hexstatus = int(sysstatus, base=16)
|
hexstatus = int(sysstatus, base=16)
|
||||||
|
if not self.check_limit_switches:
|
||||||
|
hexstatus &= 0xfcf # ignore limit switch bits
|
||||||
status_items = formatStatusBits(hexstatus & 0xf7, self.status_bits)
|
status_items = formatStatusBits(hexstatus & 0xf7, self.status_bits)
|
||||||
if status_items:
|
if status_items:
|
||||||
status = ERROR, ', '.join(status_items)
|
status = ERROR, ', '.join(status_items)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user