가상 시리얼 관리자
가상 시리얼 관리자(pdcomm-vserial-manager)는 랩을 화면에서 편집하고 실행하는 GUI입니다. 내부에서는 pdcomm-vserial run을 실행하고 같은 제어 명령을 보냅니다. 그래서 GUI에서 만든 랩 파일을 명령줄과 MCP 서버에서도 그대로 씁니다.
관리자는 자기와 같은 폴더의 pdcomm-vserial을 실행합니다. 다른 위치의 프로그램을 쓰려면 관리자를 시작하기 전에 환경 변수 PDCOMM_VSERIAL_BIN에 경로를 지정합니다.
화면 구성
섹션 제목: “화면 구성”

| 영역 | 내용 |
|---|---|
| 도구 모음 | Open은 랩 파일을 열고, Save는 아래 JSON 편집기의 내용을 저장합니다. Load JSON into form은 편집기에서 고친 JSON을 양식에 다시 읽어 들입니다. |
| Lab | Pacing(진행 방식), Wiring(배선), Trace(추적 파일)를 정합니다. |
| 포트 표 | 포트마다 Port(노드 이름), Endpoint type, Endpoint, Baud, Data bits, Parity, Stop bits, Receive FIFO를 정합니다. |
| Add port, Remove port | 포트를 추가하거나 선택한 포트를 지웁니다. |
| 상태와 Start lab | 상태(Stopped, Starting, Running, Stopped with an error)를 보여 주고 랩을 시작하거나 멈춥니다. |
| 실행 포트 표 | 실행 중인 랩의 Port, Endpoint type, Open with(응용 프로그램이 열 경로나 주소)를 보여 줍니다. |
| Faults and cables | 실행 중인 랩에 결함을 주입하고 케이블을 분리하거나 연결합니다. |
| JSON 편집기와 로그 | 왼쪽은 양식이 만든 랩 JSON, 오른쪽은 실행 결과와 오류입니다. |
Wiring에서 고르는 배선은 포트 표의 순서에 적용합니다.
| Wiring | 연결 |
|---|---|
| Null-modem cable (RS-232 / RS-422) | 첫째와 둘째 포트 |
| Two-wire RS-485 bus | 모든 포트 |
| Four-wire RS-422 / RS-485 bus | 첫째 포트가 마스터, 나머지가 슬레이브 |
| Loopback plug | 첫째 포트 |
Endpoint type과 Endpoint는 다음과 같이 씁니다.
| Endpoint type | Endpoint |
|---|---|
| Pseudo terminal | 비워 두거나 링크 경로(예: /tmp/pdcomm-plc) |
| Port driver | 드라이버 포트 번호(예: 0) |
| RFC 2217 server, Raw TCP server | 수신 대기 주소(예: 127.0.0.1:7001). 비워 두면 127.0.0.1:0입니다. |
Receive FIFO의 **16550 (14 / 4 idle)**은 16550 UART처럼 모아서 전달하고, Per character는 문자마다 전달합니다.
랩 시작하기
섹션 제목: “랩 시작하기”-
관리자를 시작합니다. 기본 양식에는 의사 터미널 포트
a,b가 널 모뎀으로 이어져 있습니다. -
포트 이름, 속도, 형식을 바꿉니다. 바꿀 때마다 JSON 편집기의 내용이 갱신됩니다.
-
추적 기록이 필요하면 Write a trace를 선택하고 파일 경로를 입력합니다.
-
Start lab을 누릅니다. 상태가 Running으로 바뀌고 실행 포트 표의 Open with에 응용 프로그램이 열 경로가 나타납니다. 로그에는
Lab started with 2 ports가 나타납니다.

-
응용 프로그램에서 Open with의 경로를 엽니다.
-
끝나면 Stop lab을 누릅니다. 상태가 Stopped로 바뀌고 로그에
Lab stopped가 나타납니다.
랩이 실행 중일 때는 양식과 JSON 편집기, Open, Load JSON into form을 쓸 수 없습니다. 실행 중인 랩은 시작할 때의 설정을 유지하기 때문입니다. Faults and cables는 랩이 실행 중일 때만 쓸 수 있습니다.
결함 주입과 케이블 분리
섹션 제목: “결함 주입과 케이블 분리”

-
Port에서 포트를 고르고 결함 종류를 고른 뒤 Inject를 누릅니다. 그 포트가 다음에 받는 문자 하나에 적용합니다.
결함 효과 Drop next character 문자를 버립니다. XOR next character 오른쪽 숫자(0~255)로 비트를 뒤집습니다. Parity error, Framing error, Overrun, Break 해당 수신 오류를 표시합니다. Noise character 오른쪽 숫자의 잡음 문자 하나를 프레이밍 오류와 함께 즉시 전달합니다. -
Cable에서 포트를 고르고 Unplug나 Plug in을 누릅니다. 분리한 포트는 송신하지도 수신하지도 않습니다.
명령이 성공하면 로그에 Done이, 거부되면 Refused: <원인>이 나타납니다.
RS-485 버스 만들기
섹션 제목: “RS-485 버스 만들기”Add port로 포트를 추가하고 Wiring을 Two-wire RS-485 bus로 바꿉니다. 모든 포트가 반이중 쌍 하나를 공유합니다. RTU처럼 문자 간격이 중요한 프로토콜은 Pacing을 **Realistic (character time)**으로 둡니다.


버스에서 Modbus RTU를 실행하는 과정은 가상 RS-485 버스에서 Modbus RTU 시험하기에서 설명합니다.
고급 설정과 오류
섹션 제목: “고급 설정과 오류”양식에는 자주 쓰는 설정만 있습니다. 결함 확률, RS-485 드라이버 제어, 브리지 같은 설정은 JSON 편집기에서 직접 고치거나 Open으로 랩 파일을 엽니다. 설정은 pdcomm-vserial 명령과 랩 파일에서 설명합니다. 편집기의 JSON에 문법 오류가 있으면 랩을 시작하지 않고 로그에 Invalid lab JSON: <원인>을 표시합니다.


문법은 맞지만 랩 파일이 잘못되었으면 상태가 Stopped with an error로 바뀌고, 로그에 pdcomm-vserial: <원인>을 표시합니다. 원인별 해결 방법은 랩 파일 오류를 참고합니다.