라벨 프린터나 산업용 장비를 제어하려면 명령어를 전송해야 한다.
그런데 그 명령어는 단순한 문자열이 아니라, 기기 내부에서 해석 가능한 정해진 문법과 규칙을 가진 언어, 즉 일종의 **“통신 프로토콜”**이다.
이번 글에서는 ZPL, TSC, Zipher 등에서 사용하는 명령어 세트가 왜 프로토콜로 간주되는지,
그리고 어떤 방식으로 동작하는지를 실례와 함께 설명한다.
✅ 프로토콜이란?
프로토콜(Protocol) = 데이터를 주고받기 위한 규칙/문법의 집합
- 사람에게는 **문법(grammar)**이 있고,
- 컴퓨터에게는 **프로토콜(protocol)**이 있는 것.
예: HTTP 프로토콜
GET /hello HTTP/1.1
Host: example.com
- 요청 형식, 순서, 응답 구조까지 정해진 규칙대로 통신해야 서버가 이해할 수 있다.
✅ ZPL, TSC, Zipher = 프린터 프로토콜?
정확히 말하면,
- 이들은 **“프린터와 통신하기 위한, 제조사 고유의 명령어 프로토콜”**이다.
- 우리가 흔히 말하는 "ZPL 명령어"도 사실은 Zebra 프린터와 통신하기 위한 응용 계층의 텍스트 기반 프로토콜이야.
🔍 대표적인 명령어 프로토콜 소개
🖨️ ZPL (Zebra Programming Language)
- 제조사: Zebra Technologies
- 통신 방식: 텍스트 기반 ASCII 명령어
- 구조: ^로 시작하는 제어 코드 + 데이터
- 라벨 인쇄, 바코드, 텍스트, 박스 등 위치/크기 제어 가능
✅ 예시:
^XA
^FO100,100^A0N,30,30^FDHello, World!^FS
^XZ
명령어 | 의미 |
^XA | 시작(Start) |
^FO100,100 | 위치 지정 (X, Y) |
^A0N,30,30 | 폰트 지정 |
^FD...^FS | 출력할 내용 (Field Data) |
^XZ | 종료(End) |
🖨️ TSC / TSPL (TSC Standard Print Language)
- 제조사: TSC Auto ID
- 통신 방식: 텍스트 기반
- 구조: 명령어 + 파라미터
✅ 예시:
SIZE 100 mm, 150 mm
GAP 3 mm, 0 mm
TEXT 100,100,"3",0,1,1,"TSC LABEL"
PRINT 1
명령어 | 의미 |
SIZE | 라벨 크기 설정 |
GAP | 라벨 간격 설정 |
TEXT | 텍스트 출력 |
인쇄 시작 |
🖨️ Zipher 전용 프로토콜 (예: Zipher Text Communications Protocol )
- 제조사: Zipher Tech
- 통신 방식: 텍스트 명령어 기반 (String. 다만 형식, 인코딩, 종료 문자를 엄격하게 지켜야 장비가 인식함.)
- 명령 형식: <COMMAND>|파라미터1|파라미터2...<CR>
- 구분자: | (파이프 문자) 로 명령어 파라미터 구분
- 종료: <CR> = '\r' (Carriage Return, ASCII 13) 으로 끝나야 함
- 인코딩 : ASCII 또는 UNICODE(UTF-16LE) 인코딩
- 응답 예시: ACK\r, ERR\r, STS|...\r
✅ 실제 명령어 구조 (문서 기준) :
<COMMAND>|[파라미터1]|[파라미터2]...\r
✅ 예시 (문서에서 발췌한 실제 명령어)
1. 작업 선택
SEL|JobName\\r
2. 라벨 필드 값 전달
SLA|JobName|field1=value1|field2=value2\\r
3. 라벨 인쇄 실행
PRN\\r
4. 상태 요청
GST\\r
단순한 문자열이기 때문에 Socket.write() 또는 OutputStream.write()를 하면된다.
✅ Java 예제 (String 전송 방식)
// 명령어 문자열 (UNICODE 예시)
String command = "SLA|WeightLabel|text=안녕하세요\\r";
// UTF-16LE 인코딩으로 전송
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(), "UTF-16LE")
);
writer.write(command); // ← 그냥 String
writer.flush();
✅ Python 예제 (ASCII 모드 기준)
command = "PRN\\r"
sock.send(command.encode('ascii')) # 그냥 문자열 인코딩해서 전송
✅ 응답 구조
Zipher 프린터는 각 명령에 대해 응답을 반환합니다. (역시 문자열)
명령 | 응답 |
성공 | ACK\r |
실패 | ERR\r |
상태 조회 | `STS |
.
✅ ZPL/TSC/Zipher가 프로토콜인 이유
조건 해당 여부 설명
정해진 문법/구조가 있는가? | ✅ | 각 명령어는 고유 포맷과 의미를 가짐 |
명령어 순서와 의미가 중요한가? | ✅ | 잘못된 명령 순서 → 출력 오류 |
송신자/수신자가 해석 가능한 구조인가? | ✅ | 프린터는 이 명령어를 파싱 후 동작 |
호환성을 위한 표준화 또는 문서화가 있는가? | ✅ | 제조사가 명세서(PDF 등)로 공식 제공 |
즉, 이것은 단순한 “문자열 나열”이 아니라, 양측이 약속한 통신 규칙 = 프로토콜로 볼 수 있다.
🧩 커맨드 명세 보는 법 (실무 기준)
프린터/장비와 연동하기 전에는 다음 정보를 꼭 확인해야 한다:
확인 항목 | 설명 |
📘 명령어 문법 | 어떤 구조로 명령어를 작성하는가? |
📦 데이터 형식 | ASCII? UTF-8? 한글 인코딩 지원 여부 |
🧾 전송 포맷 | 시작/종료 구분자, 구분자, 줄바꿈 등 |
🔄 응답 구조 | 프린터가 응답을 주는가? ACK/NACK? |
🔐 보안 요소 | 인증, 암호화가 필요한가? |
✍️ 정리
ZPL, TSC, Zipher 명령어는 단순한 문자열이 아니라 “장비와 통신하기 위한 프로토콜”이다.
- 명확한 문법과 구조가 있으며,
- 제조사에 의해 정의되고 문서화되어 있고,
- 통신 과정에서 해석과 실행이 이루어진다.
✅ 따라서 이를 이해하고 사용하는 것은 장비 제어의 핵심 역량 중 하나다.
📌 다음 글 예고
다음 편에서는 이 명령어들이 실제로 장비에서 어떻게 처리되는지,
“프레임 구조”와 “명령어 전송 흐름”, “장비 내부의 해석 구조”를 설명할 예정입니다.
👉 목차보기
👉 [4편 보기] 커맨드 프로토콜은 어떻게 작동하는가?
심화
👉 Zipher로 요청 보내고 응답 받는 Java 유틸 함수 예제
👉 한글 인코딩 확인용 샘플 문자열 디버깅 툴
👉
'hardware_integration > zipher' 카테고리의 다른 글
소켓통신은 뭐지? 시리얼포트값 읽기 왜 프론트단이 아닌 서버단에서만 하는거지? (0) | 2025.04.07 |
---|---|
🧾Zipher 프로토콜 - 명령어별 응답 예시 (0) | 2025.04.07 |
⚙️시리얼 통신 vs USB vs TCP/IP 비교 | 물리적 통신 방식의 차이 (RS232, USB, LAN) | 포트 설정, 속도(bps), 거리 제약 | 어떤 경우에 어떤 방식을 선택해야 하는가? (0) | 2025.04.07 |
📘 텍스트 기반 통신이란? 반대개념은 바이너리 통신 | 사람이 읽을 수 있는 명령어의 장점과 한계 | HTTP, JSON, ZPL 등의 텍스트 기반 예시 (0) | 2025.04.07 |
라벨프린트장비 선택 시 체크리스트 (개발/연동 관점) | 실무에서 유용한 장비 분류 기준 (0) | 2025.04.07 |
댓글