포장 라인 라벨 자동 발행
공장 포장 라인의 컨베이어. 라인 옆 PC 한 대에 바코드 스캐너 1~2대와 ZPL 라벨 프린터가 연결되고, 서버나 상위 시스템 없이 단말 한 대가 라인 한 곳을 맡습니다.
소·중포장 순서 스캔
소포장과 중포장을 순서대로 읽어야 한 건으로 셉니다
컨베이어에 스캐너만 달아 개수를 세면 읽히지 않은 것과 두 번 읽힌 것이 그대로 수량이 됩니다. 박스에 몇 개가 들어갔는지는 결국 사람이 다시 셉니다.
이 라인은 컨베이어에 스캐너 두 대를 두어 앞쪽이 소포장, 뒤쪽이 중포장을 읽습니다. 단말이 스캐너에 TCP 로 접속해 값을 받고, 끊긴 스캐너는 5초마다 다시 연결합니다. 두 스캐너의 데이터가 밀리초 간격으로 도착해도 짝이 섞이지 않도록 프레임을 잘라 검증하는 단계와 저장하는 단계를 나누고, 저장은 도착 순서대로 한 건씩 진행합니다. 소포장보다 중포장이 먼저 들어오거나 이미 짝이 찬 상태에서 또 들어오면 경고만 띄우고 세지 않습니다. 스캐너가 NOREAD 를 보내면 그 스캐너 카드가 붉게 바뀌고 그 건은 저장도 집계도 되지 않습니다. 스캐너를 한 대만 두는 라인이면 중포장만 읽도록 설정 하나로 갈립니다.
박스에 들어간 수량을 사람이 세지 않고, 짝이 맞은 것만 수량이 됩니다.
박스바코드 발행
정해진 수량이 차면 박스 라벨이 그 자리에서 나옵니다
박스를 닫은 뒤 라벨을 따로 뽑으면 라벨과 박스가 어긋나거나 발행을 빠뜨리는 건이 생깁니다. 어느 박스에 어느 소포장이 들어갔는지도 남지 않습니다.
짝이 맞은 스캔이 타겟수량에 이르면 단말이 박스 바코드를 채번합니다. 번호는 생산라인 세 자리와 날짜, 업체코드 세 자리에 다섯 자리 일련번호를 붙인 것이고, 일련번호는 그날 그 라인·업체의 마지막 번호를 읽어 하나를 더합니다. 채번한 번호와 발행 시각은 방금 센 스캔 기록에 되돌아가 적히므로, 소포장 바코드와 중포장 바코드가 어느 박스 라벨로 묶였는지 한 줄에 남습니다. 라벨은 프린터로 ZPL 을 직접 보내 업체명·제품명·수량과 Code128 박스 바코드를 한 장에 냅니다. 수량을 채우지 못한 채 라인을 정리해야 하면 강제인쇄로 지금까지의 기록을 묶어 발행하고, 라벨을 붙이지 않는 시간에는 출력사용을 꺼 둡니다.
저장이 실패한 건은 수량이 오르지 않아 라벨도 나오지 않습니다. 라인에서 바로 알아차리도록 그렇게 두었습니다.
프린터 좌표 보정
라벨이 밀려 나오면 좌표 두 칸만 고칩니다
같은 명령을 보내도 프린터마다 인쇄 원점이 조금씩 다릅니다. 라벨이 한쪽으로 밀려 나오면 대개 붙이는 사람이 손으로 위치를 맞춥니다.
이 단말은 환경설정에 시작 좌표 X·Y 를 두고, 라벨을 만들 때 글자와 바코드, 표 괘선의 좌표에 이 값을 더해 보냅니다. 프린터를 거꾸로 놓아야 하는 자리를 위해 180도 회전도 같은 카드에 두었습니다. 고친 값은 출력하기로 그 자리에서 확인합니다. 프린터 목록에는 이름에 제조사 문자열이 든 것만 걸러 올려, 같은 PC 에 잡힌 사무용 프린터가 섞이지 않게 했습니다.
프린터를 바꾸거나 자리를 옮겨 라벨이 밀려도 라인에서 숫자만 고쳐 끝냅니다.
서버 없는 단독 단말
서버 없이 라인 옆 PC 한 대로 동작합니다
포장 라인 하나 때문에 서버와 회선을 두기는 어렵습니다. 서버를 두면 통신이 끊긴 동안 라인이 라벨을 내지 못하고, 그 시간의 기록은 결국 종이로 돌아갑니다.
서버도 상위 시스템 연동도 없이 라인 옆 PC 한 대에 설치하는 프로그램으로 만들었습니다. 스캔 기록은 그 PC 안 데이터베이스에 쌓이고, 프린터와 스캐너 대수, 타겟수량, 보관기간, 생산라인, 업체코드, 업체명, 제품명은 단말이 스스로 갖습니다. 이 여덟 가지 중 하나라도 비어 있으면 메인 화면에서 환경설정으로 보내 운영을 시작하지 못하게 막았습니다. 보관기간을 15일이나 30일로 정해 두면 스캔이 저장될 때마다 지난 기록이 지워져 현장 PC 의 저장 공간이 계속 늘지 않습니다. 필요한 기간은 이력조회에서 작업일자로 꺼내 엑셀로 내려받고, 프로그램을 껐다 켜도 같은 날 진행 중이던 수량은 이어집니다.
단말 한 대가 라인 한 곳을 맡고, 상위 서버나 회선 없이 그 라인에서 라벨이 나갑니다.