Skip to content

Commit 075d3fe

Browse files
committed
adds comments
1 parent 2e8bf49 commit 075d3fe

File tree

1 file changed

+42
-15
lines changed

1 file changed

+42
-15
lines changed

opentrons/drivers/motor.py

Lines changed: 42 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,12 @@ def _copy_defaults_to_settings(self):
127127
if key not in self.saved_settings[n]:
128128
self.saved_settings[n][key] = val
129129

130+
def _set_step_per_mm_from_config(self):
131+
for axis in 'xyz':
132+
value = self.saved_settings['config'].get(
133+
self.CONFIG_STEPS_PER_MM[axis])
134+
self.set_steps_per_mm(axis, value)
135+
130136
def _apply_settings(self):
131137
self.serial_timeout = float(
132138
self.saved_settings['serial'].get('timeout', 0.1))
@@ -205,27 +211,24 @@ def disconnect(self):
205211

206212
def connect(self, device):
207213
self.connection = device
208-
self.reset_port()
214+
self.toggle_port()
209215
log.debug("Connected to {}".format(device))
216+
217+
self.turn_off_feedback()
210218
self.versions_compatible()
211-
# set the previously saved steps_per_mm values for X and Y
212219
if self.ignore_smoothie_sd:
213-
for axis in 'xyz':
214-
self.set_steps_per_mm(
215-
axis, self.saved_settings['config'].get(
216-
self.CONFIG_STEPS_PER_MM[axis]))
220+
self._set_step_per_mm_from_config()
221+
217222
return self.calm_down()
218223

219224
def is_connected(self):
220225
return self.connection and self.connection.isOpen()
221226

222-
def reset_port(self):
227+
def toggle_port(self):
223228
self.connection.close()
224229
self.connection.open()
225230
self.flush_port()
226231

227-
self.turn_off_feedback()
228-
229232
def pause(self):
230233
self.halted.clear()
231234
self.stopped.clear()
@@ -273,6 +276,13 @@ def send_command(self, command, **kwargs):
273276
return response
274277

275278
def write_to_serial(self, data, max_tries=10, try_interval=0.2):
279+
"""
280+
Sends data string to serial ports
281+
282+
Returns data immediately read from port after write
283+
284+
Raises RuntimeError write fails or connection times out
285+
"""
276286
log.debug("Write: {}".format(str(data).encode()))
277287
if self.is_connected():
278288
try:
@@ -286,7 +296,7 @@ def write_to_serial(self, data, max_tries=10, try_interval=0.2):
286296
log.warn(msg)
287297
raise RuntimeError(msg)
288298
elif max_tries > 0:
289-
self.reset_port()
299+
self.toggle_port()
290300
return self.write_to_serial(
291301
data, max_tries=max_tries - 1, try_interval=try_interval
292302
)
@@ -297,6 +307,12 @@ def write_to_serial(self, data, max_tries=10, try_interval=0.2):
297307
raise RuntimeError(msg)
298308

299309
def wait_for_response(self, timeout=20.0):
310+
"""
311+
Repeatedly reads from serial port until data is received,
312+
or timeout is exceeded
313+
314+
Raises RuntimeWarning() if no response was recieved before timeout
315+
"""
300316
count = 0
301317
max_retries = int(timeout / self.serial_timeout)
302318
while self.is_connected() and count < max_retries:
@@ -313,13 +329,19 @@ def wait_for_response(self, timeout=20.0):
313329
log.debug(
314330
"Waiting {} lines for response.".format(count)
315331
)
316-
raise RuntimeWarning('no response from serial port')
332+
raise RuntimeWarning(
333+
'No response from serial port after {} seconds'.format(timeout))
317334

318335
def flush_port(self):
319336
while self.readline_from_serial():
320337
time.sleep(self.serial_timeout)
321338

322339
def readline_from_serial(self):
340+
"""
341+
Attempt to read a line of data from serial port
342+
343+
Raises RuntimeWarning if read fails on serial port
344+
"""
323345
msg = b''
324346
try:
325347
msg = self.connection.readline()
@@ -329,10 +351,17 @@ def readline_from_serial(self):
329351
raise RuntimeWarning('Lost connection with serial port') from e
330352
if msg:
331353
log.debug("Read: {}".format(msg))
354+
self.detect_limit_hit(msg) # raises RuntimeWarning if switch hit
355+
356+
return msg
357+
358+
def detect_limit_hit(self, msg):
359+
"""
360+
Detect if it hit a home switch
332361
333-
# detect if it hit a home switch
362+
Raises RuntimeWarning if Smoothie reports a limit hit
363+
"""
334364
if b'!!' in msg or b'limit' in msg:
335-
# TODO (andy): allow this to bubble up so UI is notified
336365
log.debug('home switch hit')
337366
self.flush_port()
338367
self.calm_down()
@@ -343,8 +372,6 @@ def readline_from_serial(self):
343372
axis = ax
344373
raise RuntimeWarning('{} limit switch hit'.format(axis.upper()))
345374

346-
return msg
347-
348375
def set_coordinate_system(self, mode):
349376
if mode == 'absolute':
350377
self.send_command(self.ABSOLUTE_POSITIONING)

0 commit comments

Comments
 (0)