1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# -*- coding: utf8 -*-
class Axis(object):
def __init__(self, limits=None, scale={}):
from blinker import Signal
self.limits = limits
self.scale = scale
self.position = None
self.running = None
self.initializing = None
self.initialized = None
self.initiator_minus = None
self.initiator_plus = None
self.initiator_error = None
self.temperature_warning = None
self.onPosition = Signal()
self.onRunning = Signal()
self.onInitializing = Signal()
self.onInitialized = Signal()
self.onInitiatorMinus = Signal()
self.onInitiatorPlus = Signal()
self.onInitiatorError = Signal()
self.onTemperatureWarning = Signal()
def update(self):
last_position = self.position
last_running = self.running
last_initializing = self.initializing
last_initialized = self.initialized
last_initiator_minus = self.initiator_minus
last_initiator_plus = self.initiator_plus
last_initiator_error = self.initiator_error
last_temperature_warning = self.temperature_warning
self.do_update()
if last_position != self.position:
self.onPosition.send(self, position = self.position)
if last_running != self.running:
self.onRunning.send(self, running = self.running)
if last_initializing != self.initializing:
self.onInitializing.send(self, initializing = self.initializing)
if last_initialized != self.initialized:
self.onInitialized.send(self, initialized = self.initialized)
if last_initiator_minus != self.initiator_minus:
self.onInitiatorMinus.send(self, active = self.initiator_minus)
if last_initiator_plus != self.initiator_plus:
self.onInitiatorPlus.send(self, active = self.initiator_plus)
if last_initiator_error != self.initiator_error:
self.onInitiatorError.send(self, error = self.initiator_error)
if last_temperature_warning != self.temperature_warning:
self.onTemperatureWarning.send(self, warning = self.temperature_warning)
def wait_for_stop(self):
self.update()
while self.running:
self.update()
def initiate(self):
raise NotImplementedError()
def goto_absolute(self, target, speed = None):
if self.limits and (target < min(self.limits) or target > max(self.limits)):
raise ValueError()
self.do_goto_absolute(target, speed)
def do_goto_absolute(self, target, speed):
raise NotImplementedError()
def goto_relative(self, offset, speed = None):
raise NotImplementedError()
|