Add a display screen for motor position to taipan fake motors

This commit is contained in:
Douglas Clowes
2013-06-26 17:24:47 +10:00
parent 7d35ca4cf9
commit 99f18f8798

View File

@@ -13,12 +13,8 @@ from galilfactory import GalilFactory
from counterclient import CounterClientFactory from counterclient import CounterClientFactory
from powdersample import CubicPowderSample from powdersample import CubicPowderSample
log.startLogging(sys.stdout) import curses
from displayscreen import Screen
beam_monitor_counter = None
detector_counter = None
beam_monitor_rate = None
nickel = CubicPowderSample()
def stopCallbackM1M2(motor): def stopCallbackM1M2(motor):
global nickel global nickel
@@ -58,10 +54,68 @@ def device_iterator():
m2.doIteration(now) m2.doIteration(now)
s2.doIteration(now) s2.doIteration(now)
def display_iterator():
global screen, devices
try:
rows, cols = screen.stdscr.getmaxyx()
col = 0
for idx in sorted(devices.keys()):
line = 0;
col += 1
screen.stdscr.addstr(line, 13 * (col - 1), idx)
for mtr in sorted(devices[idx].motors.keys()):
line += 1
screen.stdscr.addstr(line, 13 * (col - 1), "%1s:%8.3f" % (mtr, devices[idx].motors[mtr].getPosition()))
if (devices[idx].motors[mtr].motorState == "OFF"):
screen.stdscr.addstr(line, 13 * (col - 1) + 10, " ")
else:
screen.stdscr.addstr(line, 13 * (col - 1) + 10, "*")
except:
raise
finally:
try:
screen.stdscr.refresh()
except:
pass
class MyScreen(Screen):
def __init__(self, stdscr):
Screen.__init__(self, stdscr)
def sendLine(self, txt):
global devices
dev, cmd = line.split(":")
print "Dev:", dev, "Cmd:", cmd
if dev in devices:
myDev = devices[dev]
myDev.protocol = self
myDev.dataReceived(cmd)
def write(self, txt):
try:
newLine = self.lines[-1] + " => " + txt
del self.lines[-1]
self.addLine(newLine)
except:
pass
if __name__ == "__main__":
global screen, devices
basePort = 62034 # Echidna basePort = 62034 # Echidna
basePort = 62134 # Wombat basePort = 62134 # Wombat
basePort = 62430 # Quokka basePort = 62430 # Quokka
basePort = 62730 # Taipan basePort = 62730 # Taipan
#log.startLogging(sys.stdout)
log.startLogging(open(("/tmp/Fake_Galil_%d.log" % basePort), "w"))
beam_monitor_counter = None
detector_counter = None
beam_monitor_rate = None
nickel = CubicPowderSample()
devices = {} devices = {}
for dev in range(0, 6): for dev in range(0, 6):
port = basePort + dev port = basePort + dev
@@ -86,6 +140,15 @@ connector1 = reactor.connectTCP("localhost", 33001, beam_monitor_counter)
connector2 = reactor.connectTCP("localhost", 33000, detector_counter) connector2 = reactor.connectTCP("localhost", 33000, detector_counter)
print "Connector1:", connector1.getDestination() print "Connector1:", connector1.getDestination()
print "Connector2:", connector2.getDestination() print "Connector2:", connector2.getDestination()
stdscr = curses.initscr()
screen = MyScreen(stdscr)
reactor.addReader(screen)
print "stdscr:", stdscr
print "screen:", screen
lc = LoopingCall(device_iterator) lc = LoopingCall(device_iterator)
lc.start(0.05) lc.start(0.05)
dc = LoopingCall(display_iterator)
dc.start(0.5)
reactor.run() reactor.run()