역할: "전극 집고 -> 씻고 -> EIS 측정하고 -> 도금해라"라는 전체 컨베이어 벨트의 타임라인을 쥐고 있는 메인 상태 머신입니다.
통제권: 전체 실험의 흐름을 통제합니다. 특정 검사 단계를 생략하거나 순서를 뒤바꿀 때 (예: "시간 없으니 사전 EIS 검사는 빼고 바로 도금(CP)으로 넘어가") 조작해야 하는 최상위 스위치입니다.
역할: 최상위 모듈의 호출을 받아 실제 기계 장치를 구동하는 하위 구동부입니다.
통제권: 특정 순간의 단위 동작을 통제합니다. 로봇 팔의 세부적인 동선을 지시하거나 주사기를 조작할 때(move_to_tube), 또는 전위차계에 가할 전압/전류의 구체적인 크기와 시간 레시피를 바꿀 때(chi) 조작합니다.
역할: 로봇 모터가 움직여야 할 목적지를 정량적인 수치로 변환해 주는 물리적 지도입니다.
통제권: 하드웨어의 배치(Layout)를 통제합니다. 비커 랙을 실수로 건드려 위치가 틀어졌거나, 새로운 규격의 비커를 가져왔을 때 로봇 팔의 영점(Calibration)을 다시 잡기 위해 조작합니다.
역할: 하드웨어나 통신망이 물리적인 한계로 뻗었을 때 시스템을 강제로 살려내는 심폐소생술입니다.
통제권: 예외 상황(Exception)을 통제합니다. 장비가 무한 대기(Deadlock)에 빠지거나 윈도우 COM 포트가 꼬였을 때, 사람의 개입 없이 코드가 스스로 프로세스를 셧다운 시키고 재연결하게 만들기 위해 조작합니다.
조작할 곳: chi(case, filename, ...) 함수 내부의 각 case 블록.
방법: * 도금 시간을 늘리려면 case 1에서 tc = 1200(초)를 원하는 시간으로 늘립니다.
성능 평가 전압 범위를 바꾸려면 case 2나 case 4에서 Ev1, Ev2 값을 수정합니다.
조작할 곳: 스크립트 맨 아래 testrun(robot_id) 함수 또는 별도의 디버깅 스크립트 작성.
방법: * 전체 실험 루프(RobotControlThread)를 주석 처리하고, move_to_tube(1, robot, x좌표, y좌표, 0, 0) 한 줄만 작성해서 실행하면 로봇이 딱 그 위치로만 이동합니다. 하드웨어 캘리브레이션을 검증할 때 필수적인 방법입니다.
수정 위치 1 (기준점): move_to_tube 함수 내부의 좌표 오프셋 수식
수정 위치 2 (높낮이): move_to_tube 호출 시 파라미터로 넘기는 z_height 및 z_down
수정 위치 3 (작업 순서): electrode_positions.txt, working_positions.txt 파일
도금 시간을 늘리거나, 성능 측정 전압의 범위를 변경해야 할 때 수정합니다.
if case == 1:
# Change 'tc' to adjust the electrodeposition time (in seconds)
tc = 1200
elif case == 2:
# Adjust Ev1 and Ev2 to change the voltage sweep range for CV
Ev1 = 0.3
Ev2 = 1.2
시간 단축을 위해 불필요한 검사를 빼거나, 랩실 인터넷이 끊겨서 AI(GPT)가 판독 에러를 뿜으며 시스템을 멈춰 세울 때 응급조치하는 곳입니다.
수정 위치: run_chi_experiments 내부의 메인 루프
수정 방법: * 특정 공정을 빼고 싶다면 해당 move_to_tube(..., chi_case=...) 줄의 맨 앞에 #을 붙여 주석 처리합니다.
AI 통신 장애 시, AI 판독 함수(analyzer.analyze_...)를 주석 처리하고 변수에 1(합격)을 강제 할당하여 무조건 통과시킵니다.
# Bypass AI inspection during network errors and force a 'Pass' decision
# cp_decision = analyzer.analyze_cp(...)
cp_decision = {"decision": 1}