본문 바로가기
hardware_integration/zipher

📘 ZPL, TSC, Zipher… 이건 프로토콜일까? 제조사가 만든 프린터 명령어 세트 소개 | 문법 구조와 사용 방식 | Zipher와 같은 전용 장비의 커맨드 명세 보는 법

by 죄니안죄니 2025. 4. 7.

라벨 프린터나 산업용 장비를 제어하려면 명령어를 전송해야 한다.

그런데 그 명령어는 단순한 문자열이 아니라, 기기 내부에서 해석 가능한 정해진 문법과 규칙을 가진 언어, 즉 일종의 **“통신 프로토콜”**이다.

이번 글에서는 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 텍스트 출력
PRINT 인쇄 시작

🖨️ 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 유틸 함수 예제

👉 한글 인코딩 확인용 샘플 문자열 디버깅 툴

👉


 

 

댓글