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
79
80
|
#!/usr/bin/python2
# -*- encoding: utf-8 -*-
STAGE_POSITION_STORE = '/var/lib/erdastep/laststageposition'
import Phytron
import MotionControl.MotionStage, MotionControl.PhytronAxis, MotionControl.Service
from MotionControl.MotionStage import MotionStage
from MotionControl.PhytronAxis import PhytronAxis
ipcomm = Phytron.IPCOMM('/dev/ttyERDASTEP', axes=4)
axis_x = PhytronAxis( ipcomm[0], \
max_run_freq = 825, \
initiator = PhytronAxis.INITIATOR_PLUS, \
initiator_position = 221786, \
limits = (-179000, 221000), \
scale = {'mm': 8000} )
axis_y = PhytronAxis( ipcomm[1], \
max_run_freq = 825, \
initiator = PhytronAxis.INITIATOR_PLUS, \
initiator_position = 115256, \
limits = (-285000, 115000), \
scale = {'mm': 8000} )
axis_z = PhytronAxis( ipcomm[2], \
max_run_freq = 500, \
initiator = PhytronAxis.INITIATOR_PLUS, \
# FIXME: Z zero position needs yet to be determined
initiator_position = 217952, \
limits = (-183000, 217000), \
scale = {'mm': 8000} )
axis_phi = PhytronAxis( ipcomm[3], \
max_run_freq = 1000, \
initiator = PhytronAxis.INITIATOR_MINUS, \
initiator_position = -273432, \
limits = (-273000, 271000), \
scale = {'°': 1600} )
stage_axes = (axis_x, axis_y, axis_z, axis_phi)
stage = MotionStage(stage_axes)
def load_stage_position_store():
try:
position = tuple( [int(line.strip()) for line in open(STAGE_POSITION_STORE)] )
except:
return
for i,p in enumerate(position):
ipcomm[i].position = p
def update_stage_position_store():
# try:
store = open(STAGE_POSITION_STORE, 'w')
store.writelines([str(axis.position)+'\n' for axis in ipcomm])
store.close()
# except:
# pass
def onCycleTermination(sender):
update_stage_position_store()
stage.onCycleFinished.connect(onCycleTermination)
stage.onCycleAborted.connect(onCycleTermination)
if __name__ == "__main__":
from rpyc.utils.server import ThreadedServer
from MotionControl.Service import Service
load_stage_position_store()
stage.update()
Service.stage = stage
server = ThreadedServer(Service, port = 12345)
server.start()
|