aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorroot <root@gar-ex-erdastep.localdomain>2011-12-02 19:18:42 +0100
committerroot <root@gar-ex-erdastep.localdomain>2011-12-02 19:18:42 +0100
commite44a59d65e1556c96756f72235fc2f37a989bfe3 (patch)
tree7b7855cca06e706c7103646b3db3acf17c3df327
parentcdd63b8f7c8adbbec5cb1ee50e8aa4152a69ab5e (diff)
downloadPyMotionControl-e44a59d65e1556c96756f72235fc2f37a989bfe3.tar.gz
PyMotionControl-e44a59d65e1556c96756f72235fc2f37a989bfe3.tar.bz2
scratchpad experiments
-rw-r--r--scratchpad.py109
1 files changed, 109 insertions, 0 deletions
diff --git a/scratchpad.py b/scratchpad.py
index e69de29..56c886d 100644
--- a/scratchpad.py
+++ b/scratchpad.py
@@ -0,0 +1,109 @@
+# -*- coding: utf-8 -*-
+
+import threading
+import rpyc
+import Phytron
+from blinker import Signal
+
+class Constraint:
+ pass
+
+class Stage:
+ def __init__(self, axes):
+ self.axes = axes
+
+ def setTarget(self, target):
+ self.target = target
+
+ def startCycle(self):
+ for ax in self.axes:
+ pass
+
+class Axis(object):
+ def __init__(self, inverted = False, scale={}):
+ self.inverted = inverted
+ self.scale = scale
+ self.position = None
+ self.running = None
+ self.initializing = None
+ self.initialized = None
+ self.initiator_minus = None
+ self.initiator_plus = None
+ self.onPosition = Signal()
+ self.onStarted = Signal()
+ self.onStopped = Signal()
+ self.onInitializing = Signal()
+ self.onInitialized = Signal()
+ self.onInitiatorMinus = Signal()
+ self.onInitiatorPlus = 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
+
+ self.do_update()
+
+ if last_position != self.position:
+ self.onPosition.send(position = self.position)
+
+ if last_running != self.running:
+ if self.running:
+ self.onStarted.send()
+ else:
+ self.onStopped.send()
+
+ if last_initializing != self.initializing:
+ self.onInitializing.send(initializing = self.initializing)
+
+ if last_initialized != self.initialized:
+ self.onInitialized.send(initialized = self.initialized)
+
+ if last_initiator_minus != self.initiator_minus:
+ self.onInitiatorMinus.send(active = self.initiator_minus)
+
+ if last_initiator_plus != self.initiator_plus:
+ self.onInitiatorPlus.send(active = self.initiator_plus)
+
+ def wait_for_stop(self):
+ self.update()
+ while self.running:
+ self.update()
+
+ def initialize(self):
+ if self.running:
+ self.stop()
+ self.wait_for_stop()
+ self.do_initialize()
+ self.wait_for_stop()
+
+class PhytronAxis(Axis):
+ INITIATOR_MINUS = 1
+ INITIATOR_PLUS = 2
+ def __init__(self, ipcomm_axis, max_run_freq, initiator, scale, inverted = False):
+ super(PhytronAxis, self).__init__()
+ self.ipcomm_axis = ipcomm_axis
+ self.max_run_freq = max_run_freq
+ self.initiator = initiator
+
+ def do_update(self):
+ if self.running:
+ self.pos = self.ipcomm_axis.getPosition()
+
+ status = self.ipcomm_axis.getFullStatus()
+ self.running = status.running
+ self.initializing = status.initializing
+ self.initialized = status.initialized
+ self.initiator_minus = status.initiator_minus
+ self.initator_plus = status.initiator_plus
+
+ def do_initialize(self):
+ self.ipcomm_axis.setRunFrequency(self.max_run_freq)
+ if self.initiator == PhytronAxis.INITIATOR_MINUS:
+ self.ipcomm_axis.initializeMinus()
+ if self.initiator == PhytronAxis.INITIATOR_PLUS:
+ self.ipcomm_axis.initializePlus()
+