-
Notifications
You must be signed in to change notification settings - Fork 0
/
reverse_loops.py
143 lines (103 loc) · 4.83 KB
/
reverse_loops.py
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import jmri
import time
import sys
sys.path.append('C:\\Users\\steve\\JMRI\\jython')
import alex
import loco
from jmri_bindings import *
from myroutes import *
class SouthReverseLoopToSouthSidings(alex.Alex):
def go(self):
# check we have a throttle
if self.loco.throttle is None:
self.getLocoThrottle(self.loco)
# check there's a siding that will accommodate us
siding = self.loco.selectSiding(SOUTH_SIDINGS)
if self.loco.block is None:
self.loco.setBlock(SOUTH_REVERSE_LOOP)
else:
b = layoutblocks.getLayoutBlock(SOUTH_REVERSE_LOOP).getBlock()
if self.loco.block != b:
raise RuntimeError("loco " + self.loco.nameAndAddress() + " is in " + self.loco.block.getDisplayName() + " not South Reverse Loop")
if self.isBlockOccupied(self.loco.block) is False:
raise RuntimeError("South Reverse Loop is not occupied")
lock = self.getLock("South Link Lock")
self.loco.status = loco.MOVING
routes = [ROUTEMAP[SOUTH_REVERSE_LOOP][1]] + self.requiredRoutes("FPK P1")
self.shortJourney(True, self.loco.block, "South Link", 0.3, stopIRClear=IRSENSORS["South Link Clear"], routes=routes)
routes = self.requiredRoutes(siding)
self.shortJourney(False, self.loco.block, siding, 0.4, routes=routes, stopIRClear=IRSENSORS[siding.getId()])
self.unlock(lock)
self.loco.status = loco.SIDINGS
return False
class SouthSidingsToSouthReverseLoop(alex.Alex):
def go(self):
# check we have a block and the block is occupied
if not self.loco.southSidings():
raise RuntimeError("I'm not in the South Sidings!")
print "boo"
# check we have a throttle
if self.loco.throttle is None:
self.getLocoThrottle(self.loco)
self.getLock("South Link Lock")
self.loco.status = loco.MOVING
routes = self.requiredRoutes(self.loco.block) + self.requiredRoutes("FPK P1")
self.shortJourney(False, self.loco.block, "South Link", 0.5, routes=routes, stopIRClear=IRSENSORS["South Link Clear"])
# now go in the reverse loop
self.loco.forward()
self.loco.setSpeedSetting(0.4)
self.reverseLoop(SOUTH_REVERSE_LOOP)
self.loco.status = loco.SIDINGS
return False
class NorthReverseLoopToNorthSidings(alex.Alex):
def go(self):
# check we have a throttle
if self.loco.throttle is None:
self.getLocoThrottle(self.loco)
# check there's a siding that will accommodate us
siding = self.loco.selectSiding(NORTH_SIDINGS)
if self.loco.block is None:
self.loco.setBlock(NORTH_REVERSE_LOOP)
else:
b = layoutblocks.getLayoutBlock(NORTH_REVERSE_LOOP).getBlock()
if self.loco.block != b:
raise RuntimeError("loco " + self.loco.nameAndAddress() + " is in " + self.loco.block.getDisplayName() + " not North Reverse Loop")
if self.isBlockOccupied(self.loco.block) is False:
raise RuntimeError("North Reverse Loop is not occupied")
lock = self.getLock("North Link Lock")
self.loco.status = loco.MOVING
routes = [ROUTEMAP[NORTH_REVERSE_LOOP][1]] + self.requiredRoutes("PAL P1")
self.shortJourney(True, self.loco.block, "North Link", 0.5, stopIRClear=IRSENSORS["North Link Clear"], routes=routes)
routes = self.requiredRoutes(siding)
self.shortJourney(False, self.loco.block, siding, 0.4, routes=routes, stopIRClear=IRSENSORS[siding.getId()])
self.unlock(lock)
self.loco.status = loco.SIDINGS
return False
class NorthSidingsToNorthReverseLoop(alex.Alex):
def go(self):
# check we have a block and the block is occupied
if not self.loco.northSidings():
raise RuntimeError("I'm not in the South Sidings!")
print "boo"
# check we have a throttle
if self.loco.throttle is None:
self.getLocoThrottle(self.loco)
self.getLock("North Link Lock")
self.loco.status = loco.MOVING
routes = self.requiredRoutes(self.loco.block) + self.requiredRoutes("PAL P1")
self.shortJourney(False, self.loco.block, "North Link", 0.5, routes=routes, stopIRClear=IRSENSORS["North Link Clear"])
# now go in the reverse loop
self.loco.forward()
self.loco.setSpeedSetting(0.4)
self.reverseLoop(NORTH_REVERSE_LOOP)
self.loco.status = loco.SIDINGS
return False
loc = loco.Loco(68)
# loc.setBlock(SOUTH_REVERSE_LOOP)
# SouthReverseLoopToSouthSidings(loc).start()
loc.setBlock("Sth Sidings 1")
SouthSidingsToSouthReverseLoop(loc, None, None).start()
#loc.setBlock(NORTH_REVERSE_LOOP)
#NorthReverseLoopToNorthSidings(loc).start()
#loc.setBlock("Nth Sidings 4")
#NorthSidingsToNorthReverseLoop(loc).start()