Shipyard Dashboard — 화면 가이드
================================
.. raw:: html
브라우저에서 ``http://127.0.0.1:8010`` 으로 접속한 다음, 왼쪽 사이드바의 6개
아이콘으로 화면을 오갑니다. 처음 보이는 화면은 ◉ **실시간 모니터링** 입니다.
화면 한눈에 보기
----------------
.. list-table::
:header-rows: 1
:widths: 8 22 18 52
* - 키
- 화면
- 무엇을 보는가
- 언제 쓰는가
* - ◉
- 실시간 모니터링
- 로봇·펜던트·용접기 사이 통신
- 작업 직전 통신 점검, 운전 중 에러 확인, 로봇 IP 변경
* - ◈
- RTDE 실시간
- 용접 전류·전압·아크율·오프셋 등 실시간 그래프
- 용접이 정상적으로 진행되는지 라이브로 보고 싶을 때
* - ▭
- 레코딩
- 과거 용접 데이터 저장·관리
- 한 번의 용접 사이클을 통째로 저장하거나, 동료의 기록을 둘러볼 때
* - ⟁
- 분석 워크스페이스
- 저장된 레코딩의 사후 차트
- 한 사이클을 끝낸 뒤 신호들을 비교·검토할 때
* - ≡
- 로봇 로그
- 로봇이 흘려보낸 텍스트 로그
- 에러가 났을 때 원인을 좇아갈 때, 시퀀스 진행을 따라갈 때
* - ⌥
- GP 매핑
- 신호 이름 매핑·레지스터 정의 편집
- 새 신호가 추가됐을 때 친숙한 이름을 붙여줄 때 (드물게)
각 화면 가이드
--------------
.. note::
◈ ~ ⌥ 화면들의 상세 본문은 후속 단계에서 차례로 채워집니다. 우선 ◉ **실시간
모니터링** 부터 시작합니다.
.. _screen-monitoring:
1. 실시간 모니터링 ◉
^^^^^^^^^^^^^^^^^^^^
.. figure:: ../_static/screenshots/shipyard/monitoring.jpg
:alt: 실시간 모니터링 화면
:width: 100%
◉ 실시간 모니터링 — 상단 Connection Bar + Hero KPI + 그룹 탭 + 레지스터 그리드.
목적
""""
용접기·펜던트·로봇 사이에 오가는 모든 신호를 라이브로 봅니다.
**이 화면이 "로봇이 켜져 있고 통신이 되는가" 를 보는 가장 먼저 가는 곳** 입니다.
화면 구성
"""""""""
위에서 아래로 4영역으로 나뉩니다.
상단 — 연결 표시줄 (Connection Bar)
'''''''''''''''''''''''''''''''''''
좌측에 동그란 인디케이터와 글자 (LIVE / STALE / DOWN).
- **LIVE (녹색)** — 최근 신호가 잘 들어오고 있음
- **STALE (호박색)** — 몇 초 사이 신호가 안 들어옴 (네트워크 지연 가능)
- **DOWN (빨강)** — 연결 끊김
오른쪽에 ``IP : 포트`` 입력 칸과 **Connect** 버튼이 있습니다.
.. tip::
**로봇을 바꿀 때 코드 수정 필요 없음.** 이 IP 입력만 새 주소로 바꾸고
Connect 누르면, 실시간 모니터링뿐 아니라 RTDE 실시간 화면까지 같은 로봇으로
동시 전환됩니다.
Hero 영역 — 핵심 라이브 KPI
'''''''''''''''''''''''''''
가장 눈에 띄는 큰 박스들. 운전 중에 가장 자주 보게 되는 값들이 모여있습니다.
.. list-table::
:header-rows: 1
:widths: 18 22 60
* - 위치
- 표시 내용
- 의미
* - 좌측 큰 박스
- 용접 중 / 무부하
- 현재 용접 여부. 옆에 셀(VL1 ~ HOR), 패스(2/3 같은), 모드(자동/수동) 라벨 같이 표시.
* - 가운데 큰 숫자 1
- 현재 전류 A · 목표 전류
- 실제로 흐르는 용접 전류 + 펜던트가 지령한 값.
* - 가운데 큰 숫자 2
- 현재 전압 V · 목표 전압
- 실제 전압 + 펜던트 지령 전압.
* - 우측 작은 박스 4개
- 하트비트·로봇모드·에러 코드 등
- 통신 살아있는지(HB), UR 컨트롤러 상태, 마지막 에러 코드.
.. tip::
**로봇이 에러를 던지면 우측 작은 박스의 "ROBOT ERR" 가 빨갛게 변하고 코드 번호를
보여줍니다.** 예: ``E121 터치 거리 너무 김`` — 원인과 대처 방법은 그 박스를 클릭하면
하단에 펼쳐집니다.
중간 — 그룹 탭 + 검색
'''''''''''''''''''''
신호들이 보내는 방향에 따라 6 그룹으로 묶여있습니다.
.. list-table::
:header-rows: 1
:widths: 28 18 54
* - 그룹 (탭 라벨)
- 주소 범위
- 무엇을 봐야 하나
* - 로봇 → 팬던트 (R→P)
- 128 ~ 160
- 로봇이 펜던트에게 보내는 상태 보고 (용접 여부, 전류·전압, 셀, 패스, 에러 등).
* - 팬던트 → 로봇 (P→R)
- 161 ~ 199
- 펜던트가 로봇에 내리는 지시 (작업 모드, 셀 선택, 치수, 옵션 비트 등).
* - 로봇 → 용접기 (R→W)
- 201 ~ 210
- 용접기에 보내는 제어 (토치 ON/OFF, 가스체크, 전류·전압 설정 등).
* - 용접기 → 로봇 (W→R)
- 211 ~ 220
- 용접기가 돌려주는 피드백 (WCR 검출, 실제 전류·전압, 송급 속도 등).
* - 용접 조건 (COND)
- 221 ~ 255
- 펜던트가 보낸 용접 파라미터 (위빙·X/Z 오프셋·각도·시작/끝 조건 등).
* - UR 빌트인 (UR)
- 258 이상
- UR 컨트롤러 표준 상태 (Robot mode 등).
오른쪽에 검색창이 있어서 주소(예: ``131``) 또는 한글/영문 이름(예: ``전류``, ``current``)
으로 바로 찾을 수 있습니다.
본문 — 레지스터 그리드
''''''''''''''''''''''
선택된 그룹의 신호들이 격자로 펼쳐집니다. 각 카드는:
- 주소 번호 + 이름
- 현재 값 + 단위
- 작은 스파크라인 (지난 60초 동안의 변화)
- 좌측에 색 띠 (그룹 색)
카드를 **클릭하면** 우측에 상세 패널이 열립니다. 거기서 볼 수 있는 정보:
- **의미(decode)** — 예를 들어 비트필드면 비트별 ON/OFF, enum 이면 라벨,
에러 코드면 원인·조치 텍스트.
- **단위·범위·스케일** — 펜던트가 보낸 값과 실제 값의 환산 규칙.
- **히스토리** — 최근 약 1분간의 값 추이.
체크박스 "예약/미사용 표시" 를 켜면 작업 시트의 공란(Reserved) 까지 같이 보입니다.
기본은 끔 — 사용 중인 활성 신호만 표시.
자주 하는 일
""""""""""""
**다른 로봇으로 전환하기**
상단 IP 입력 → 새 IP 타이핑 → **Connect** 클릭. 모든 화면이 그 로봇으로 따라
움직입니다 (RTDE 실시간 포함).
**작업 직전 통신 점검**
1. 인디케이터가 LIVE 인지
2. ROBOT HB / PEND HB 두 작은 박스의 숫자가 1초마다 올라가는지
3. ROBOT ERR 가 0 인지
**에러 원인 좇기**
ROBOT ERR 박스 클릭 → 우측 상세 패널의 "원인" 과 "조치" 텍스트 확인. 예를
들어 ``E131 WCR 신호 부재`` 는 "1) 용접기 확인 2) 접지 확인" 처럼 다음 단계가
적혀있습니다.
**특정 셀의 패스 상황 확인**
① Hero 의 셀 라벨이 현재 작업 셀(예: VR1) 인지
② 옆 "패스" 라벨이 ``2 / 3`` 같이 진행 상태 표시
③ 더 자세히 보려면 검색창에 ``138`` (전체 중 현재 PATH) 입력 후 카드 클릭
이런 경우 어떻게 하나
"""""""""""""""""""""
**모든 값이 0 / 안 변함**
인디케이터가 DOWN 또는 STALE 인지부터 확인. DOWN 이면 IP/네트워크 문제, STALE 이면
잠시 기다려보고 그래도 회복 안 되면 Connect 다시.
**특정 신호만 0 으로 멈춰있음**
카드 클릭 → 상세 패널의 "상태(status)" 가 "예약(reserved)" 또는 "미사용(unused)"
인지 확인. 작업 시트상 정의되지 않은 슬롯일 수 있습니다.
**Hero 의 셀 라벨이 비어 있음**
펜던트가 아직 셀을 선택하지 않은 상태. 펜던트에서 셀을 고르면 즉시 반영됩니다.
.. _screen-rtde:
2. RTDE 실시간 ◈
^^^^^^^^^^^^^^^^
.. figure:: ../_static/screenshots/shipyard/rtde.jpg
:alt: RTDE 실시간 화면
:width: 100%
◈ RTDE 실시간 — Hero Strip(전류·전압·아크율) + 매핑된 GP 채널 카드 그리드.
목적
""""
용접이 진행되는 동안 **실제 전류·전압·아크율·시임 오프셋이 어떻게 움직이는지**
숫자와 그래프로 동시에 봅니다.
화면 ◉ 와의 차이점: 그쪽은 펜던트·용접기·로봇 사이의 *통신 신호* 를, 여기는
URScript 가 매 사이클마다 보내주는 *측정값* 을 봅니다. 그래서 ◈ 의 업데이트
주기가 훨씬 빠르고 (보통 약 100ms 단위), 차트가 자연스럽게 흐릅니다.
화면 구성
"""""""""
상단 — 상태 표시줄
''''''''''''''''''
좌측에 LIVE / STALE / DOWN 인디케이터, 가운데에 ``LIVE · 125Hz`` 처럼 실제
수신 속도, 우측에 **재시작** 버튼.
.. tip::
여기엔 **IP 입력 칸이 없습니다.** 로봇 IP 변경은 항상 화면 ◉ **실시간 모니터링**
의 ConnectionBar 한 곳에서 합니다. 그쪽에서 바꾸면 이 화면의 RTDE 도 함께 따라
움직입니다.
수동 재시작 버튼은 RTDE 만 끊어졌을 때 (◉ Modbus 는 살아있는데 여기만 STALE)
한 번씩 누르는 용도입니다.
Hero Strip — 가장 자주 보는 KPI
'''''''''''''''''''''''''''''''
상단에 큰 패널 한 줄로 핵심 5종이 묶여있습니다.
.. list-table::
:header-rows: 1
:widths: 22 22 56
* - 위치
- 채널
- 의미
* - 좌측 큰 박스
- 용접 ON/OFF
- 현재 아크 여부. 큰 색깔 라벨로 "용접 중" 또는 "대기".
* - 가운데 큰 숫자 1
- 용접 전류 (A)
- URScript 가 보낸 실제 전류값.
* - 가운데 큰 숫자 2
- 용접 전압 (V)
- 실제 용접 전압.
* - 가운데 큰 숫자 3
- 아크율 (%)
- 단위 시간 중 안정 아크 비율.
* - 우측 작은 박스들
- 기준 전류 · X 오프셋 · Z 오프셋 · Peak 값 · 적분합
- 시임 트래킹 보정 / 안정도 지표.
각 박스 아래 작은 **스파크라인** 으로 최근 약 24초의 변화 추이가 함께 보입니다.
탭 + 검색
'''''''''
세 탭으로 채널을 묶어 보여줍니다.
.. list-table::
:header-rows: 1
:widths: 28 22 50
* - 탭
- 색
- 포함 채널 예
* - 전체
- 회색
- 매핑된 모든 채널을 신호 번호 순으로 한 줄로 보여줌
* - 용접 텔레메트리
- 노란색
- 용접 전류·전압, 아크율, 적분합, Peak 값, WCR 입력, 용접 ON/OFF 등
* - 시임 추적
- 청록색
- X/Z 오프셋, X·Z Up/Ui, BR+/TL−, 터치 ON/OFF, Tri count, X/Y/Z 위치 등
오른쪽 검색창에 채널 이름(예: ``arc``, ``오프셋``, ``BotRight``) 일부만 쳐도
실시간으로 카드가 필터링됩니다.
본문 — 채널 카드 그리드
'''''''''''''''''''''''
카드 한 장이 신호 하나입니다. 카드에 표시되는 것:
- 친숙한 이름 (예: ``용접 전류`` · 영문 alias ``weldCurrent``)
- 현재 값 + 단위 (예: ``238.4 A``)
- 작은 스파크라인 (최근 약 24초)
- 좌측 색 띠 (용접/시임 그룹 구분)
**클릭하면** 우측 패널이 열리고:
- **큰 차트** — 더 긴 시간축으로 추이를 자세히
- **현재 값 / 최근 평균 / 최소·최대** 같은 요약 숫자
- **채널 이름과 번호** (``output_double_register_3`` → ``용접 전류``)
.. note::
gp_mapping.json 의 alias 가 없는 신호 (예: 로봇 자세, 타임스탬프, raw GP 레지스터)
는 이 화면에 **표시되지 않습니다.** 매핑되지 않은 신호도 보고 싶다면 ⌥ **GP 매핑**
화면에서 alias 를 추가하세요. (단, 그 후 대시보드 재시작 필요)
자주 하는 일
""""""""""""
**용접 시작 직전 영점 점검**
- 좌측 큰 박스가 "대기" 인지
- 용접 전류·전압이 0 근처인지
- X / Z 오프셋이 0 또는 직전 보정값에 가까운지
**용접 중 안정도 확인**
- Hero 의 아크율(%) 이 흔들리지 않고 일정 수준 유지되는지
- 용접 전류·전압이 펜던트 지령값 근처에서 안정적으로 진동하는지
- 적분합(allIntegral) 이 정상 증가 패턴을 보이는지
**시임 트래킹 보정 확인**
- "시임 추적" 탭 클릭
- X 오프셋이 ±5mm 범위 안인지
- BR+ / TL− 두 채널이 균형 잡혀 있는지 (한쪽만 크게 튀면 토치 각도 의심)
- X 위치 / Y 위치 / Z 위치 카드로 현재 위치 추적
**한 채널을 깊게 보기**
카드 클릭 → 우측 큰 차트 패널에서 시간축을 길게 봅니다. 평균·최소·최대 숫자도
같이 보여줘서 정상 범위 감을 잡을 때 좋습니다.
이런 경우 어떻게 하나
"""""""""""""""""""""
**카드가 하나도 안 보인다 (그리드가 비어 있음)**
매핑이 안 된 상태입니다. ``gp_mapping.json`` 이 누락되었거나 깨져 있을 수
있습니다. ⌥ **GP 매핑** 화면에서 현재 상태 확인 → 동료 PC 의 파일로 복구.
**LIVE 인데 모든 카드의 값이 0**
대시보드 ↔ 로봇 RTDE 연결은 살아있지만 URScript 가 register 에 값을 안
채우고 있는 상태입니다. 펜던트에서 용접 프로그램이 실행 중인지 먼저 확인.
**상단이 STALE / 빨간 점**
RTDE 만 끊긴 경우. 상단 우측 **재시작** 버튼을 한 번 누르거나, ◉ 실시간
모니터링으로 가서 IP 가 맞는지부터 확인하세요.
**용접은 중인데 좌측 큰 박스가 "대기" 로 표시**
``weldingOnOff`` 채널(``output_double_register_18``) 이 URScript 에서 1로
설정되지 않은 경우. URScript 측 매핑 확인 필요.
**카드 너무 많아서 원하는 거 못 찾겠다**
- "전체" 탭 대신 "용접 텔레메트리" 또는 "시임 추적" 으로 좁히기
- 검색창에 한글 일부 (``오프셋``, ``전류``) 또는 영문 alias 일부 (``arc``, ``peak``) 입력
.. _screen-recordings:
3. 레코딩 ▭
^^^^^^^^^^^
.. figure:: ../_static/screenshots/shipyard/recordings-csv-load.jpg
:alt: 레코딩 화면 — CSV 로드 다이얼로그
:width: 100%
▭ 레코딩 — 라이브러리 + ``csvs/`` 폴더에서 CSV 가져오기 다이얼로그.
목적
""""
한 번의 용접 사이클을 통째로 저장해두고, 나중에 차트로 다시 들여다볼 수 있게
합니다. 라이브 캡처와 외부 CSV 임포트 두 경로가 있고, 저장된 항목은 모두 한
라이브러리에 모입니다.
.. tip::
라이브 캡처는 단순한 RTDE CSV 가 아니라 **세 가지 데이터를 함께 저장** 합니다.
1. **RTDE 시계열** — ``.csv`` (용접 전류·전압·오프셋 등 약 125Hz)
2. **Modbus 스냅샷** — ``.modbus.jsonl`` (펜던트·용접기 통신 약 4Hz)
3. **로그 라인** — ``.logs.jsonl`` (≡ 화면에 흘러간 로봇 텍스트 로그)
세 파일은 같은 이름 + 다른 확장자로 ``backend/recordings/`` 에 같이 저장됩니다.
분석 워크스페이스(⟁) 가 이 셋을 시간축으로 정렬해서 한 화면에 같이 보여줍니다.
화면 구성
"""""""""
화면이 두 영역으로 나뉩니다.
상단 — 새 레코딩 / 라이브 레코딩
''''''''''''''''''''''''''''''''''''''''''''''
**라이브 레코딩이 진행 중이 아닐 때** 는 3가지 시작 카드가 보입니다.
.. list-table::
:header-rows: 1
:widths: 22 78
* - 시작 방법
- 용도
* - **새 레코딩**
- 지금부터 RTDE 신호를 실시간으로 받아 CSV 로 저장. 가장 흔히 쓰는 방법.
* - **CSV 임포트**
- 다른 PC 에서 만든 CSV 파일을 브라우저로 업로드해 라이브러리에 추가.
* - **경로에서 로드**
- ``csvs/`` 폴더에 미리 떨궈둔 파일을 골라서 가져오기. 브라우저 업로드가
막힌 보안 환경용.
**라이브 레코딩 중일 때** 는 큰 빨간 패널이 떠서:
- 깜빡이는 LIVE 인디케이터 + 파일명
- 부제로 NAME · 셀 · 용접 여부
- 큰 글씨로 경과 시간 (``MM:SS``)
- 샘플 수 + 누적 크기 (MB)
- 캡처 중인 라이브 값 6개 미니 박스
- 우측 빨간 **■ 정지 및 저장** 버튼
하단 — 레코딩 라이브러리
''''''''''''''''''''''''
헤더에 "레코딩 라이브러리 · *N* 항목 · 사용량" 이 표시되고, 그 옆에 필터 탭이
있습니다.
.. list-table::
:header-rows: 1
:widths: 26 74
* - 탭
- 보이는 것
* - 전체
- DB·파일 시스템 모두
* - 파일 시스템
- 디스크 CSV 만 (DB 에 안 들어간 상태 — 보통 외부에서 떨궈진 파일)
* - 데이터베이스
- SQLite 인덱스에 등록된 항목 (라이브 캡처·임포트는 모두 여기로 들어감)
오른쪽 검색창에서 **블록 / 작업자 / 파일명** 일부로 즉시 필터링.
각 행에 표시되는 정보 (왼쪽부터)
''''''''''''''''''''''''''''''''''''''''''''''
.. list-table::
:header-rows: 1
:widths: 14 86
* - 컬럼
- 의미
* - SRC
- 출처 배지. **DB** (라이브/임포트로 정식 등록) · **FILE** (디스크에만 있는 CSV) · **IMP** (외부에서 임포트된 항목)
* - FILE / ID
- 파일명 + 그 아래 작은 글씨로 시작 시각 / 메모
* - NAME
- 레코딩 생성 시 입력한 이름 (예: ``0429_welding_VR1_1th``)
* - CELL
- 작업 셀 (VL1 / VL2 / VR1 / VR2 / HOR)
* - WELD
- 실제 용접 여부 (예 / 아니오 / 불명)
* - DURATION
- 캡처 길이 (``MM:SS``)
* - SAMPLES
- 저장된 프레임 수 (125Hz 기준 1분 = 약 7,500)
* - SIZE
- 파일 크기
* - ALARM
- 캡처 동안 발생한 알람 개수 (0 녹색 · 1~5 호박색 · 6+ 빨강)
* - ACTIONS
- **[분석 열기]** / **⤓** 다운로드 / **×** 삭제
새 레코딩 시작 절차
"""""""""""""""""""
1. 상단의 **새 레코딩** 카드 클릭 → 메타데이터 다이얼로그
2. **NAME** 입력 — 파일명에 그대로 반영됩니다 (예: ``12-3F-VL2-test`` →
``rtde_20260515_103214_12-3F-VL2-test.csv``)
3. **셀** 입력 (예: ``VL2``)
4. **실제 용접 여부** 선택 (예 / 아니오 / 불명) — 통계용
5. **메모** — 작업 조건·관찰사항·이상 징후를 자유롭게. 사후 분석할 때 가장
요긴한 정보입니다.
6. 다이얼로그 하단에 **파일명 미리보기** 가 실시간으로 떠서 최종 이름 확인 가능
7. **● 시작** → 빨간 라이브 패널로 전환
8. 작업 끝나면 **■ 정지 및 저장** → 라이브러리 첫 줄에 새 항목이 즉시 추가
.. tip::
NAME 에 사용할 수 없는 문자(공백, 특수기호 등) 는 자동으로 ``_`` 로 바뀝니다.
다이얼로그 하단에 ``⚠ NAME 에서 사용 불가능한 문자는 _로 변환됩니다`` 알림이
뜨면, 미리보기 파일명을 확인하고 원하는 형태인지 점검하세요.
CSV 임포트
""""""""""
다른 PC 에서 만든 CSV 를 가져올 때 두 가지 경로가 있습니다.
**일반 환경 — 브라우저 업로드**
상단 **CSV 임포트** → CSV 파일 선택 → NAME·셀·용접 여부·메모 입력 → 추가.
파일은 자동으로 ``rtde_YYYYMMDD_HHMMSS_.csv`` 형식으로 저장됩니다.
**브라우저 업로드가 막힌 환경 — csvs/ 폴더**
1. USB·공유 폴더 등으로 CSV 를 프로젝트 루트의 ``csvs/`` 폴더에 떨궈둡니다.
2. 상단 **경로에서 로드** → 그 폴더 목록이 다이얼로그에 뜸
3. 파일 선택 + 메타 입력 → 추가
4. **복사 / 이동** 토글로 원본 보존 여부 선택
레코딩 다루기
"""""""""""""
**분석 열기**
행의 **[분석 열기]** 클릭 → 화면 ⟁ **분석 워크스페이스** 로 자동 전환되며 그
레코딩이 활성화됩니다. 같은 행에서 다시 누르면 "열림" 으로 표시.
**다운로드**
**⤓** 클릭 → 브라우저가 즉시 원본 CSV 를 다운로드. 백업·외부 공유용.
**삭제**
**×** 클릭 → 확인 다이얼로그 → CSV 파일 + 사이드카 + DB 기록 모두 제거되며
되돌릴 수 없습니다.
.. warning::
라이브 레코딩 중인 파일은 삭제할 수 없습니다 ("현재 라이브 레코딩 중인
파일입니다. 먼저 중지하세요." 알림). 안전장치입니다.
자주 하는 일
""""""""""""
**용접 1 사이클 캡처**
준비 → **새 레코딩** → 메타 입력 → 시작 → 용접 완료 후 정지.
**과거 레코딩 다시 보기**
라이브러리에서 검색창에 셀명·NAME·날짜 키워드 입력 → **분석 열기**.
**문제 레코딩 백업 후 정리**
알람 개수가 빨간 항목 → **⤓** 다운로드로 외부 보관 → **×** 로 삭제.
**다른 PC 로 옮긴 파일 가져오기**
같은 PC 라면 **CSV 임포트** 한 번. 보안 환경이라면 USB로 ``csvs/`` 에 넣고
**경로에서 로드**.
이런 경우 어떻게 하나
"""""""""""""""""""""
**■ 정지 및 저장 후 라이브러리 첫 줄에 항목이 안 보임**
잠시 후 새로고침 또는 화면 전환 후 복귀. 정상이면 즉시 보입니다. 그래도
없으면 RTDE 가 STALE 상태였는지 (◈ 화면) 점검 — 정지 시점 직전까지 프레임이
안 들어왔으면 빈 캡처일 수 있습니다.
**캡처는 됐는데 SAMPLES 가 0**
RTDE 연결 자체는 살아있었지만 URScript 가 register 에 값을 안 채웠거나
프로그램 미실행 상태. ◈ 화면에서 값이 흐르고 있는지 먼저 확인.
**다운로드 버튼을 눌렀는데 응답 없음**
해당 행의 SRC 가 **FILE** 인데 실제 디스크에서 파일이 사라진 경우. ``×`` 로
행을 정리하세요.
**×를 누르면 "현재 라이브 레코딩 중" 오류**
해당 파일이 지금 캡처 중인 파일과 같다는 뜻. 먼저 **■ 정지 및 저장** 후 다시
삭제 시도.
.. _screen-analysis:
4. 분석 워크스페이스 ⟁
^^^^^^^^^^^^^^^^^^^^^^
.. figure:: ../_static/screenshots/shipyard/analysis-overview.jpg
:alt: 분석 워크스페이스 — 메인 뷰
:width: 100%
⟁ 분석 워크스페이스 — 좌측 변수 브라우저 + 큰 차트 + 두 산점도 + Brush Timeline.
.. figure:: ../_static/screenshots/shipyard/analysis-template.jpg
:alt: 분석 워크스페이스 — Z 아크센싱 템플릿 적용
:width: 100%
사용자 템플릿 "Z 아크센싱" 을 적용한 상태 — 한 번 만들어두면 다른 레코딩에서도 한 번에 같은 차트.
목적
""""
화면 ▭ 에 저장된 레코딩 한 건을 열어 **RTDE 시계열 + Modbus 스냅샷 + 로봇 로그**
세 데이터를 **시간축을 공유하는 한 화면** 으로 나란히 봅니다. 이 화면은 라이브
데이터를 보지 않습니다 — 어디까지나 저장된 파일들의 사후 분석입니다.
같은 분석을 반복할 때를 위해 "어떤 채널이 핀되어 있고 어디를 줌인했는지" 묶음을
**템플릿** 으로 저장해두면, 다음 레코딩에서 한 번에 같은 그림으로 띄울 수 있습니다.
화면 진입
"""""""""
두 가지 경로:
- 화면 ▭ **레코딩** 의 라이브러리 행에서 **[분석 열기]** 클릭 → 자동으로 ⟁
화면 + 그 레코딩 활성화
- 좌측 사이드바의 ⟁ 아이콘 직접 클릭 → 이전에 마지막으로 본 레코딩 자동 로드
레코딩이 하나도 없으면 안내 화면이 떠서 ▭ 로 이동을 권유합니다. 진입 직후 잠깐
"로딩 중" 오버레이가 떴다가 사라지면 데이터 준비 완료입니다.
화면 구성 — 3분할 레이아웃
"""""""""""""""""""""""""""
상단 메타 바 + 그 아래 좌·중·우 3 패널 구조.
::
[메타 바: 파일명·NAME·셀·날짜·다른 레코딩 ▾]
┌─────────┬─────────────────────────────────┬─────────────┐
│ 채널 │ 도구 모음 (핀 칩·표시 모드·템플릿) │ @ 커서 │
│ 사이드바│ RTDE 메인 트랙 │ Modbus │
│ (접이식)│ X·Y 산점도 #1 │ #2 │ 미니 트랙 │
│ │ 마스터 타임라인 │ 메시지 스트림│
└─────────┴─────────────────────────────────┴─────────────┘
좌·우 패널 모두 헤더의 **◂ / ▸** 버튼으로 접을 수 있습니다 (중앙 차트를 넓게
쓰고 싶을 때).
상단 — 메타 바
''''''''''''''
현재 분석 중인 파일 이름·NAME·셀·날짜가 표시되고, **▾ 다른 레코딩** 버튼을
누르면 라이브러리 전체에서 다른 항목을 빠르게 골라 전환할 수 있습니다.
좌측 — 채널 사이드바
''''''''''''''''''''
이 레코딩에 들어있는 채널 목록을 두 그룹으로 보여줍니다.
.. list-table::
:header-rows: 1
:widths: 22 78
* - 그룹
- 내용
* - RTDE
- URScript 가 보낸 채널 (``weldCurrent``, ``xOffset``, ``Arc_percent`` 등)
* - Modbus
- 레코딩 중 함께 캡처된 펜던트·용접기 신호 (``mb_fb_current``, ``mb_wire_feed`` 등)
각 채널 옆의 ⊕ 클릭으로 **핀**, 한 번 더 클릭으로 **해제**. **두 그룹의 핀은
서로 독립** 입니다 (RTDE 핀은 중앙 메인 트랙에, Modbus 핀은 우측 미니 트랙에 표시).
중앙 — RTDE 메인 트랙
'''''''''''''''''''''
상단에 **핀된 RTDE 채널 칩** 들이 색깔별로 나열되고, 우측에 표시 모드 토글:
.. list-table::
:header-rows: 1
:widths: 22 78
* - 모드
- 차트 형태
* - 오버레이
- 핀된 채널을 같은 차트에 색깔별로 겹쳐 그림. 상관관계 시각적으로 비교할 때.
* - 상하분할
- 채널마다 위아래로 분리된 작은 차트. 단위·스케일이 다른 채널 비교할 때.
그 아래 큰 차트가 펼쳐집니다. 가로축은 **마스터 타임라인의 현재 윈도우** 와
공유되므로, 타임라인에서 윈도우를 좁히면 이 차트도 그 구간만 줌인됩니다.
중앙 — X·Y 산점도 #1 / #2
'''''''''''''''''''''''''
RTDE 메인 트랙 아래 좌·우 두 개의 산점도. **X 축은 항상 시간** (마스터 타임라인의
view 와 동기화), **Y 변수만 각 산점도 헤더에서 선택** 합니다.
기본으로 #1 의 Y 는 ``Arc_percent``, #2 의 Y 는 ``zOffset`` 으로 시작합니다.
.. tip::
두 산점도를 동시에 두는 전형적인 조합:
- **#1 Y = Arc_percent** — 아크 안정도가 시간에 따라 어떻게 흔들리는지
- **#2 Y = xOffset** 또는 **zOffset** — 시임 보정값의 시간 추이
메인 트랙 + 두 산점도 모두 같은 X 윈도우를 공유하므로, 한 곳에서 마우스를
움직이면 다른 차트에서도 같은 시점에 십자선이 함께 움직입니다.
중앙 — 마스터 타임라인 (하단)
'''''''''''''''''''''''''''''''''''''''
전체 사이클을 작은 그래프로 보여주고, 그 위에 **드래그 가능한 시간 윈도우** 가
있습니다. 이 윈도우가 위의 모든 차트(메인 트랙 + 두 산점도) 와 우측 패널의 표시
범위를 동시에 결정합니다.
- 가장자리를 드래그 → 윈도우 좌우 끝 조정
- 한가운데를 드래그 → 윈도우 통째로 이동
- 호버 → 위쪽 모든 차트에 십자선이 같은 시점으로 동기화 (값 비교)
우측 — Modbus 미니 트랙 + 메시지
''''''''''''''''''''''''''''''''''''''''''''
같은 시간축을 공유하는 두 영역.
**위쪽 — @ 커서 + Modbus 미니 트랙**
- "@ 커서" 영역에 현재 호버 시점의 모든 핀된 RTDE/Modbus 값이 즉시 표시됩니다
(실제 숫자로 빠른 확인용).
- 그 아래 핀된 Modbus 채널들이 작은 트랙들로 펼쳐집니다. 메인 트랙보다 작지만
**같은 시간축** 이라 RTDE 값과 Modbus 값의 시점 정렬이 쉽습니다.
**아래쪽 — 메시지 스트림**
레코딩 중에 ≡ 화면에 흐르던 로그 라인들이 시간 순서로 표시됩니다. 위에
level 필터 (error / warn / info / debug / sys) 가 있고, 메시지 한 줄을
**클릭하면 마스터 타임라인이 그 시각으로 자동 점프** 합니다.
.. tip::
"에러 직전에 무슨 일이 있었나" 를 빠르게 좇을 때 이 흐름이 가장 강력합니다.
메시지에서 error 라인 클릭 → 그 시점으로 점프 → 메인 트랙에서 그 직전 신호
추이 확인.
템플릿 — 차트 구성 저장/적용
""""""""""""""""""""""""""""
도구 모음 영역에 **템플릿 바** 가 있습니다. 한 번 좋은 조합을 찾으면
"핀된 RTDE 채널 + 핀된 Modbus 채널 + 산점도 Y · Y + 표시 모드" 묶음을 통째로
저장해두고, 다음 레코딩에 같은 조합을 한 번에 적용할 수 있습니다.
기본으로 두 개의 **내장 템플릿** 이 있습니다:
.. list-table::
:header-rows: 1
:widths: 22 78
* - 이름
- 핀된 RTDE 채널
* - X 아크센싱
- ``BotRight_Plus``, ``TopLeft_Minus`` — 산점도 Y 로 ``xOffset``
* - Y 아크센싱
- ``TopRight_Plus``, ``BotLeft_Minus`` — 산점도 Y 로 ``yOffset``
여기에 사용자가 자유롭게 본인의 템플릿을 추가합니다. 저장된 템플릿은 모두
``analysis_templates.json`` 파일에 들어가며, ``git push`` 하면 동료 PC 의 ⟁
화면에도 즉시 보입니다.
새 템플릿 저장하기
''''''''''''''''''
1. 원하는 RTDE 채널을 좌측 사이드바에서 핀
2. 필요하면 Modbus 채널도 핀 (우측 미니 트랙용)
3. 산점도 #1, #2 의 Y 변수 선택
4. 표시 모드 (오버레이 / 상하분할) 결정
5. 템플릿 바 우측의 **💾 현재 저장** 클릭
6. 다이얼로그에서 **이름** 과 **설명** 입력 → 저장
7. 즉시 ``analysis_templates.json`` 파일에 추가됨
템플릿 적용하기
'''''''''''''''
템플릿 바의 드롭다운에서 이름 클릭 → 그 순간 핀·산점도·모드 모두 한꺼번에 바뀝니다.
.. note::
템플릿이 참조하는 채널이 **현재 레코딩에 없으면** 그 채널만 조용히 건너뜁니다.
"X 아크센싱" 템플릿을 적용했는데 핀이 비어 있다면, 이 레코딩에 ``BotRight_Plus`` /
``TopLeft_Minus`` 채널이 캡처되지 않았다는 뜻입니다.
자주 하는 일
""""""""""""
**한 사이클의 안정성 검토**
1. 좌측에서 ``weldCurrent``, ``weldVoltage``, ``Arc_percent`` 핀
2. 메인 트랙 모드를 **오버레이** 로
3. 산점도 #1 Y = ``Arc_percent`` 로 진동 폭 확인
4. 마스터 타임라인에서 안정 구간만 윈도우로 좁히기
**시임 트래킹 보정 검토**
1. 좌측에서 ``BotRight_Plus``, ``TopLeft_Minus``, ``xOffset`` 핀
2. 메인 트랙 모드를 **상하분할** 로 (단위가 다르니까)
3. 산점도 #1 Y = ``xOffset`` 로 보정값 추이 확인
4. 또는 그냥 템플릿 **"X 아크센싱"** 한 번 클릭
**에러 시점 추적**
1. 우측 메시지 패널에서 **error** 만 켜기
2. 에러 라인 한 줄 클릭 → 마스터 타임라인이 그 시각으로 자동 점프
3. 메인 트랙에서 그 직전 신호 추이 확인
4. 필요하면 그 구간을 마스터 타임라인으로 더 좁힘
**Modbus 와 RTDE 동시 비교**
1. 좌측 RTDE 그룹에서 ``weldCurrent`` 핀
2. Modbus 그룹에서 ``mb_fb_current`` 핀
3. 우측 미니 트랙과 중앙 메인 트랙을 동시에 보면, 펜던트가 보고하는 값과 RTDE
신호의 위상차·지연이 한 눈에 들어옵니다.
**같은 분석을 다음 레코딩에 그대로**
첫 레코딩에서 좋은 조합 만들고 → **💾 현재 저장** 으로 템플릿화 → 다음 레코딩
▭ 에서 [분석 열기] → 템플릿 드롭다운에서 이름 클릭. 끝.
이런 경우 어떻게 하나
"""""""""""""""""""""
**열었는데 "데이터 없음" / 빈 차트**
레코딩 CSV 가 비어 있거나 (캡처 도중 RTDE 끊김) 컬럼명이 깨진 경우. ▭ 에서
해당 행의 SAMPLES 가 0 이면 캡처 자체에 문제가 있던 것.
**좌측 사이드바에 Modbus 그룹이 비어 있음**
이 레코딩은 라이브 캡처가 아니라 **외부 임포트** 입니다. ``.modbus.jsonl``
사이드카가 없으니 Modbus 미니 트랙은 비어 있는 것이 정상.
**우측 메시지가 비어 있음**
마찬가지 — 외부 임포트나 캡처 시점에 ≡ 로그에 라인이 없었던 경우. 정상 동작.
**템플릿 적용했는데 핀이 비어 있음**
그 템플릿이 참조하는 채널들이 현재 레코딩에 모두 없다는 뜻. ⌥ GP 매핑 화면
에서 채널 이름을 확인하거나, 다른 레코딩에서 시도해보세요.
**산점도가 한 점에 몰려있음**
Y 변수의 값이 그 구간 동안 거의 안 변한 상태. 마스터 타임라인으로 다른 시간
윈도우를 골라보세요.
**메시지 라인을 클릭해도 타임라인이 점프 안 함**
메시지 항목에 시각 정보가 없는 경우 (raw 텍스트만 들어온 시스템 메시지 등).
다른 라인을 시도해보세요.
.. _screen-logs:
5. 로봇 로그 ≡
^^^^^^^^^^^^^^
.. figure:: ../_static/screenshots/shipyard/logs.jpg
:alt: 로봇 로그 화면 — URSim 으로부터의 라이브 스트림
:width: 100%
≡ 로봇 로그 — 상단 상태(LISTENING/WS/연결된 클라이언트) + 도구 모음 + 라이브 라인 목록.
목적
""""
로봇이 URScript 안에서 출력하는 텍스트 로그를 **라이브 텍스트 스트림** 으로 보고,
필요할 때 ``.log`` 파일로 내려받습니다. 에러 발생 시 원인을 좇거나, 시퀀스 진행
(터치 → 셀 선택 → 용접 시작 → 패스 전환 …) 을 한 줄씩 따라갈 때 사용합니다.
동작 방식 (한 줄 요약)
""""""""""""""""""""""
이 화면은 **로봇이 대시보드 PC 쪽으로 TCP 접속해 한 줄씩 흘려보내는** 구조입니다.
대시보드를 띄우면 자동으로 서버가 같이 떠 있고, 로봇 URScript 가 그 주소·포트로
접속하기만 하면 그 순간부터 모든 라인이 이 화면에 흘러나옵니다.
화면 구성
"""""""""
상단 — 상태 바
''''''''''''''
세 종류의 상태를 보여줍니다.
.. list-table::
:header-rows: 1
:widths: 26 74
* - 항목
- 의미
* - **LISTENING**
- 대시보드 PC 가 해당 포트(기본 9999) 에서 로봇 접속을 받을 준비가 됐는지.
녹색이면 OK. 빨강이면 포트 점유 충돌 등 바인드 실패.
* - **WS**
- 대시보드 ↔ 화면의 실시간 전달 채널 상태. 끊기면 자동 재연결.
* - **연결된 클라이언트**
- 지금 접속해서 로그를 흘려보내고 있는 로봇 IP 목록 (보통 1개).
우측의 **편집** 버튼으로 ``host : port`` 를 즉시 변경할 수 있습니다. 다른 포트로
바꾸려면 로봇 URScript 쪽 설정도 같은 값으로 맞춰야 합니다.
가운데 — 도구 모음
''''''''''''''''''
.. list-table::
:header-rows: 1
:widths: 22 78
* - 도구
- 동작
* - **검색창**
- 메시지·소스·태그에 일부 일치하는 라인만 표시 (실시간 필터링)
* - **level 필터**
- debug / info / warn / error 각각 켜고 끔. 각 라벨 옆에 누적 개수
* - **▶ / ❚❚**
- 일시정지 토글. 잠시 멈춰서 살펴볼 때. 멈춘 동안 들어온 라인은 옆에 ``+N`` 으로 표시
* - **자동 스크롤**
- 새 라인이 들어오면 항상 맨 아래로. 위로 스크롤하면 자동으로 꺼짐 (살펴보는 중으로 간주)
* - **🗑 비우기**
- 서버 버퍼와 화면을 동시에 비움. 확인 다이얼로그 있음
* - **⤓ 다운로드**
- 현재까지의 모든 라인을 ``robot-log-YYYY-MM-DD-HH-MM-SS.log`` 텍스트로 저장
오른쪽에 ``shown / total`` 으로 "현재 보이는 라인 / 누적 라인" 표시.
본문 — 로그 라인 목록
'''''''''''''''''''''
라인 한 줄에 표시되는 것:
- **시각** (예: ``14:23:51.847``)
- **LEVEL** 색깔 배지 — debug(회색) / info(청록) / warn(호박) / error(빨강)
- **source** — 로봇이 라인을 보내며 같이 첨부한 출처 라벨 (예: ``main``, ``touch``)
- **메시지** 본문 — 검색어가 있으면 그 부분만 하이라이트
자동 스크롤이 켜져 있으면 새 라인이 들어올 때마다 맨 아래로 스크롤. 사용자가
위로 한 번 올리면 자동 스크롤이 꺼져서 그 자리에서 살펴볼 수 있습니다. 다시
바닥 근처로 내려가면 자동 스크롤이 재개됩니다.
자주 하는 일
""""""""""""
**로봇이 켜져 있는지 확인**
1. ≡ 화면 진입
2. 상단 LISTENING 이 녹색인지, 연결된 클라이언트 목록에 로봇 IP 가 있는지
3. 아래 텍스트 영역에 라인이 들어오고 있는지
**에러 원인 좇기**
1. 에러가 발생한 직후 **❚❚ 일시정지**
2. 위로 스크롤해서 에러 라인 + 그 직전 몇 줄을 함께 읽기
3. **error** 만 켜고 다른 level 끄면 빠르게 추려짐
4. ⤓ 다운로드로 외부 공유
**특정 작업만 보기**
검색창에 셀명(``VL2``), 작업명(``touch``), 패스 번호 등 키워드 입력 → 실시간
필터링됨. 필터 켠 상태로 새 라인이 들어오면 즉시 반영.
**디버깅 시 상세 보기**
기본으로 debug 는 꺼져 있습니다. 평소 노이즈를 줄이기 위함. 자세히 들여다볼
때만 debug 도 켜세요.
**로그를 동료에게 공유**
⤓ 다운로드 → 받은 ``.log`` 파일을 메신저나 메일로 전달. 시각·level·source·
메시지가 모두 텍스트로 포함되어 있어 그대로 읽을 수 있습니다.
이런 경우 어떻게 하나
"""""""""""""""""""""
**LISTENING 이 빨강 (바인드 실패)**
다른 프로그램이 같은 포트를 점유 중일 가능성이 큽니다. 상단 **편집** 으로
다른 포트(예: 9998) 로 바꿔보거나, ``netstat -ano | findstr :9999`` 로 점유 중인
프로세스 확인 후 종료.
**LISTENING 은 녹색인데 연결된 클라이언트 없음**
로봇 URScript 쪽이 아직 접속을 시도하지 않은 상태. 펜던트에서 프로그램이
실행 중인지, 그 프로그램의 socket_open 인자가 이 화면 상단의 host/port 와
일치하는지 확인.
**라인이 한 번에 너무 많이 쏟아짐**
❚❚ 로 일시정지 후 차분히 살펴봅니다. 또는 level 필터에서 ``info`` 까지 꺼서
``warn`` / ``error`` 만 보기. URScript 측에서도 너무 빈번한 debug 출력은 줄이는
게 좋습니다.
**자동 스크롤이 계속 꺼짐**
화면 안에서 살짝 스크롤만 해도 자동 스크롤이 꺼집니다. **자동 스크롤** 체크
박스를 직접 다시 켜거나, 라인 목록의 맨 아래까지 내려가면 자동 재개됩니다.
**한글이 깨져 표시**
URScript 측에서 라인을 보낼 때 UTF-8 인코딩이 아닐 가능성이 큽니다. 로봇 측
``socket_send_line`` 호출부에서 인코딩 확인 필요.
.. _screen-mapping:
6. GP 매핑 ⌥
^^^^^^^^^^^^
.. figure:: ../_static/screenshots/shipyard/mapping-modbus.jpg
:alt: GP 매핑 — Modbus 명세 탭
:width: 100%
⌥ GP 매핑 — Modbus 명세 탭의 표 보기. 각 행이 한 레지스터, 우측에 JSON 편집 모드 토글.
목적
""""
다른 화면들에 등장하는 친숙한 이름·단위·디코딩 규칙을 직접 편집하는 **관리자용**
화면입니다. 평소 작업에서는 거의 들를 일이 없고, 보통 다음 상황에서만 엽니다.
- URScript 쪽에서 새 GP 신호를 추가했을 때 → 친숙한 이름 붙이기
- Modbus 레지스터에 새 주소가 추가됐을 때 → 의미·단위·비트 정의 적기
- 단위 또는 라벨이 실제와 안 맞아서 수정할 때
.. warning::
이 화면은 대시보드 전체의 표시 규칙을 직접 바꿉니다. 잘못 저장하면 다른
화면이 채널 0개로 빈 채로 보이거나 라벨이 깨질 수 있습니다. **수정 전에 git
으로 현재 상태를 한 번 커밋해두는 것을 권장합니다.**
화면 구성
"""""""""
상단 탭 — 두 종류의 매핑
''''''''''''''''''''''''''''''''''''
화면 위쪽에 두 탭이 있습니다.
.. list-table::
:header-rows: 1
:widths: 22 18 60
* - 탭
- 파일
- 영향 화면
* - **RTDE GP**
- ``gp_mapping.json``
- ◈ RTDE 실시간 — GP 신호 친숙명·라벨·단위
* - **Modbus 명세**
- ``modbus_registers.json``
- ◉ 실시간 모니터링 — 레지스터 의미·비트 디코딩·valueMap
각 탭 안에 두 보기 모드
'''''''''''''''''''''''''''''
같은 데이터를 두 방식으로 다룹니다.
.. list-table::
:header-rows: 1
:widths: 18 82
* - 모드
- 용도
* - **표 보기**
- 한 행 = 한 신호. 검색창으로 원하는 신호 찾고 한 눈에 확인. 읽기 좋음.
* - **JSON 편집**
- 원본 텍스트 에디터. 항목을 추가·삭제하거나 디코딩 규칙을 직접 손볼 때.
표 보기에서 빠른 확인을 하고, 실제 수정은 JSON 편집 모드에서 하는 흐름이
일반적입니다.
상태 표시
'''''''''
각 탭 상단에 현재 출처가 표시됩니다.
- **BACKEND** — 백엔드 파일에 저장된 정의를 불러온 상태
- **LOCAL** — 아직 저장된 파일이 없거나 못 읽어서 프론트엔드 기본값을 표시 중
처음 PC 에서는 ``modbus_registers.json`` 이 없을 수 있고, 이때 **LOCAL** 로
표시됩니다. 한 번 **저장** 누르면 파일이 생기며 **BACKEND** 로 바뀝니다.
RTDE GP 탭 — 친숙명 매핑
""""""""""""""""""""""""
각 행 한 줄에 표시되는 것:
.. list-table::
:header-rows: 1
:widths: 24 22 54
* - 필드
- 예시
- 의미
* - register
- ``output_double_register_3``
- URScript 가 채워주는 RTDE GP 슬롯 이름
* - col
- ``weldCurrent``
- 친숙한 영문 alias (다른 화면의 식별자)
* - label
- ``용접 전류``
- 화면에 보여줄 한글 라벨
* - unit
- ``A``
- 단위. 카드의 숫자 옆에 그대로 붙음
* - scale
- ``1.0``
- 원본값에 곱할 배율. 보통 1.0, 펜던트가 보낸 raw 가 ×10 인 경우 ``0.1``
신호 하나 추가하기
''''''''''''''''''
예: URScript 가 새로 ``output_double_register_32`` 에 와이어 송급 속도를
0~20 m/min 범위로 채우기 시작했다고 가정.
1. RTDE GP 탭 → **JSON 편집** 모드
2. ``mapping`` 배열 마지막에 한 항목 추가:
.. code-block:: text
{ "register": "output_double_register_32",
"col": "wireSpeed", "scale": 1.0,
"label": "와이어 송급 속도", "unit": "m/min" }
3. 우상단 **저장** 클릭 → ``{"saved": true, ...}`` 응답이 잠깐 표시되면 성공
4. **대시보드를 재시작** 합니다 (PowerShell ``Ctrl + C`` → ``python run_shipyard.py``)
5. 다시 접속하면 ◈ RTDE 실시간 화면에 "와이어 송급 속도 m/min" 카드가 새로 보임
.. note::
◈ 화면은 매핑에 정의된 채널만 표시합니다. ``output_double_register_32`` 에
값이 들어와도 매핑이 없으면 화면에 안 나옵니다. 매핑 화면에서 친숙명을 붙여줘야
비로소 보입니다.
Modbus 명세 탭 — 레지스터 정의
""""""""""""""""""""""""""""""
이 탭은 RTDE GP 보다 항목이 훨씬 풍부합니다. 한 항목에 들어가는 키:
.. list-table::
:header-rows: 1
:widths: 18 24 58
* - 키
- 예시
- 의미
* - ``a``
- ``131``
- Modbus 주소
* - ``name``
- ``현재 전류``
- 한글 표시명
* - ``en``
- ``cur_current``
- 영문 alias
* - ``grp``
- ``rp`` / ``pr`` / ``rw`` / ``wr`` / ``pc`` / ``ur``
- 어느 그룹에 묶일지 (탭 분류)
* - ``unit``
- ``A``
- 단위
* - ``kind``
- ``counter`` / ``bool`` / ``enum`` / ``value`` / ``code`` / ``bitfield`` / ``string``
- 디코딩 종류. valueMap·bits·packed 등이 함께 쓰임
* - ``range``
- ``[0, 600]``
- 정상 범위
* - ``status``
- ``active`` / ``reserved`` / ``unused``
- 현재 사용 여부
* - ``valueMap``
- ``{0:'정상', 1:'에러'}``
- enum 디코딩 — 값 → 라벨
* - ``bits``
- ``[{bit:0, name:'토치 ON/OFF'}, ...]``
- 비트필드 디코딩
* - ``errorMap``
- ``{111:{name:'E111 ...', cause:'...', action:'...'}}``
- 에러 코드별 원인/조치 텍스트 — ◉ 실시간 모니터링의 카드 클릭 시 펼쳐짐
여기는 변경하면 즉시 ``modbus_registers.json`` 파일에 저장되고, **다른 PC 도 같은
정의로 시작** 합니다 (git 으로 공유).
저장과 반영 시점
""""""""""""""""
탭에 따라 반영 시점이 다릅니다.
.. list-table::
:header-rows: 1
:widths: 22 38 40
* - 탭
- 저장 시점 동작
- 반영 시점
* - RTDE GP
- 파일이 ``gp_mapping.json`` 으로 저장됨
- **대시보드 재시작 후** ◈ 화면에 반영
* - Modbus 명세
- 파일이 ``modbus_registers.json`` 으로 저장됨
- **브라우저 페이지 새로고침 후** ◉ 화면에 반영
.. tip::
저장 후 응답에 ``mapping_count`` 또는 ``register_count`` 가 함께 뜨므로, 의도한
개수만큼 들어갔는지 한 번 더 확인할 수 있습니다.
기본값으로 되돌리기
""""""""""""""""""""""
탭 우상단의 **재설정** 버튼을 누르면:
- RTDE GP 탭 → ``gp_mapping.json`` 파일 자체가 삭제됩니다. 다음 부팅 시 대시보드는
매핑 없는 상태로 시작 (모든 GP 신호가 raw 이름으로 표시).
- Modbus 명세 탭 → ``modbus_registers.json`` 이 삭제되고, 페이지 새로고침 후
프론트엔드 하드코딩 기본값(약 128개 정의) 으로 돌아갑니다.
.. warning::
재설정은 **확인 다이얼로그 없이 즉시 실행** 됩니다. git 커밋이 안 된 변경사항은
복구가 어렵습니다. 신중하게 사용하세요.
자주 하는 일
""""""""""""
**새 GP 신호에 친숙명 붙이기**
RTDE GP 탭 → JSON 편집 → ``mapping`` 배열에 항목 추가 → 저장 → 대시보드 재시작.
**Modbus 레지스터의 라벨이 실제 펜던트 표기와 다름**
Modbus 명세 탭 → 표 보기 검색에서 주소 입력 → JSON 편집으로 전환해 ``name``
필드 수정 → 저장 → 페이지 새로고침.
**에러 코드에 새 항목 추가**
Modbus 명세 탭 → 주소 ``142`` (로봇 에러) 검색 → JSON 편집에서 ``errorMap`` 에
새 코드 추가 (``name``, ``cause``, ``action`` 세 필드) → 저장 → 새로고침. 이후
◉ 화면에서 그 에러 발생 시 새 텍스트가 펼쳐집니다.
**매핑이 깨졌을 때 동료 파일로 복구**
동료의 ``gp_mapping.json`` / ``modbus_registers.json`` 을 자기 프로젝트 루트에
덮어쓴 후 대시보드 재시작 또는 페이지 새로고침. 또는 ``git checkout`` 으로 마지막
커밋 상태로 복원.
**변경사항을 동료에게 공유**
1. ``git status`` 로 변경된 파일 확인
2. ``git add gp_mapping.json modbus_registers.json``
3. ``git commit -m "GP 매핑: wireSpeed 추가"`` 처럼 의미 있는 메시지
4. ``git push``
동료는 ``git pull`` 후 대시보드 재시작/새로고침 한 번이면 즉시 같은 정의로 시작.
이런 경우 어떻게 하나
"""""""""""""""""""""
**저장 버튼을 눌렀는데 "invalid JSON: ..." 빨간 메시지**
JSON 문법이 깨졌습니다. 마지막 쉼표, 큰따옴표, 중괄호 짝 등을 확인하세요.
JSON 편집기 상단에 줄 번호와 함께 오류 위치가 표시됩니다.
**저장 후 ◈ 화면에 새 신호가 안 보임**
대시보드 재시작 했는지 확인. RTDE GP 매핑은 **부팅 시점에만 적용** 되어서
페이지 새로고침만으로는 반영되지 않습니다.
**저장 후 ◉ 화면이 빈 채로 보임**
``modbus_registers.json`` 에 ``registers`` 배열이 비어 있거나 깨진 상태로 저장된
경우. **재설정** 으로 파일을 삭제하면 프론트엔드 하드코딩 기본값으로 돌아갑니다.
**탭 상태가 LOCAL 인데 저장이 안 됨**
백엔드와 통신이 안 되는 경우. 대시보드가 실제로 떠 있는지 (PowerShell 창),
브라우저 주소가 ``http://127.0.0.1:8010`` 인지 확인.
**다른 PC 에서 같은 매핑인데 다르게 보임**
``git pull`` 이 안 됐거나, 그 PC 에서 임시로 매핑을 수정했을 수 있습니다.
해당 PC 에서 ``git status`` 로 변경 여부 확인.
설정 파일 한눈에 보기
---------------------
이 셋만 깃에 같이 올려두면, 동료 PC 에서도 같은 매핑·정의·템플릿으로 시작합니다.
.. list-table::
:header-rows: 1
:widths: 32 30 38
* - 파일
- 영향 화면
- 어떻게 바꾸나
* - ``gp_mapping.json``
- RTDE 실시간, GP 매핑
- GP 매핑 화면에서 편집 → 저장 → 대시보드 재시작
* - ``modbus_registers.json``
- 실시간 모니터링, GP 매핑
- GP 매핑 화면에서 편집 → 저장 → 페이지 새로고침
* - ``analysis_templates.json``
- 분석 워크스페이스
- 분석 워크스페이스에서 템플릿 저장 → 즉시 반영