Lesson 7 of 20
플런저 펌프 — 네 값을 코드로
steps · speed · interval · loops
논문은 섞기를 네 값으로 적었습니다 — steps · speed · interval · loops.
그리고 그 값이 얼마였는지는 “최적화했다” 고만 적었습니다.
우리는 그 네 값을 레시피 파일에 적습니다. 그러면 다음 사람이 같은 섞기를
재현할 수 있습니다. /mech 6강이 “섞기가 숫자가 되었다” 고 한 것의 코드 판입니다.
- step: mix_beads
device: plunger
params:
volume_ul: 100 # steps → 부피로 바꿔 적는다 (사람이 읽는 단위)
speed_ul_s: 200
interval_s: 0.5
loops: 16
max_duration_s: 120 # 19강의 진행 워치독이 쓴다
레시피 값은 기계에 닿기 전에 검사합니다. “실린더보다 큰 부피” 가 하드웨어까지 내려가면 안 됩니다.
Python
Runs in your browser
취소할 수 있게 만든다
열여섯 번 왕복이 백 초 걸립니다. 그 사이에 사용자가 중지를 누르거나 결함이 잡히면 중간에 멈출 수 있어야 합니다.
async def mix(self, volume_ul, speed_ul_s, interval_s, loops):
for i in range(loops):
if self._abort.is_set(): # 매 회 확인한다
await self._park() # 플런저를 안전한 자리로
raise Aborted("mix 중단 (%d/%d 회)" % (i, loops))
await self._stroke(volume_ul, speed_ul_s)
await asyncio.sleep(interval_s)
요령은 “취소 지점을 루프 안에 둔다” 입니다. 한 번 왕복은 짧으니 그 단위로 끊습니다. 왕복 도중에 끊으면 액체가 실린더에 남습니다.
🤔 Check yourself
섞기 조건을 코드가 아니라 레시피 파일에 두는 까닭으로 가장 알맞은 것은?
Answer 값이 코드에 박혀 있으면 “이 배치는 어떤 조건이었나” 를 답하려면 그때의 소스 코드를 찾아야 합니다. 파일로 빼면 해시 한 줄로 끝납니다.
🤔 Check yourself
취소 확인을 왕복 루프 안에 두는 까닭은?
Answer 취소는 아무 데서나 하면 안 됩니다. 안전하게 끊을 수 있는 자리를 정해 두고 거기서만 끊습니다 — 이 생각이 18·19강의 중단 설계로 이어집니다.