12/08/2018, 16:47

Thiết lập máy in nhiệt POS/EPS để in trực tiếp qua mạng Lan với Ruby

Trong quá trình nghiên cứu và làm việc thì mình có gặp một số vấn đề đó là kết nối đến máy in hóa đơn nhiệt . Sau khi tìm hiểu và hoàn thiện nó thì mình muốn tóm tắt lại các bước làm để các bạn có thể hình dung ra việc kết nối đến một thiết bị ngoại vi thông qua mạng Lan là như thế nào nhé. 1. ...

Trong quá trình nghiên cứu và làm việc thì mình có gặp một số vấn đề đó là kết nối đến máy in hóa đơn nhiệt . Sau khi tìm hiểu và hoàn thiện nó thì mình muốn tóm tắt lại các bước làm để các bạn có thể hình dung ra việc kết nối đến một thiết bị ngoại vi thông qua mạng Lan là như thế nào nhé.

1. Đôi nét về máy in hóa đơn POS/EPS .

Máy in hóa đơn bán hàng đã được ứng dụng trong hầu hết các siêu thị thông tin hiện nay, bất cứ 1 siêu thị nào cũng không thể thiếu được nó. Phân loại máy in hóa đơn bán hàng Máy in hóa đơn được phân làm 2 loại dựa trên công nghệ in của chúng. Loại in kim (máy in kim): sử dụng các kim để chấm qua một băng mực từ đó sẽ làm hiện mực lên trang giấy in. Loại in nhiệt (máy in nhiệt): được sử dụng ngày càng nhiều hơn và đang là công nghệ tiên tiến nhất hiện nay. Dưới đây là một vài thông số mà mình đánh giá khá cao về nó.

2. Kết nối nó đến mạng Lan.

Phía dưới là một vài thông tin về thiết bị ngoại vi (printer) mà tôi đang nói đến. Kết nối vô cùng đơn giản . Việc tiếp theo là connet đến nó như thế nào thôi. Chúng ta đi tiếp bài viết nào.

1. Thiết lập máy in.

Thứ nhất, máy in này có đặc điểm là chỉ có một cổng ethernet, mà đi kèm cấu hình với một IP tĩnh theo mặc định, chứ không phải là DHCP. Giữ nút chạy giấy và và mở nguồn sau đó thả tay ra khỏi nút kéo giấy thì nó in ra các thiết lập về ip và các cài đặt: Các thông số như thế này . Địa chỉ IP của máy in được thể hiện 192.168.192.168, và subnet mask 255.255.255.0. Muốn nói chuyện với nó, chúng ta cần một máy tính trên subnet- cùng trong trường hợp này số cuối cùng của địa chỉ IP là phần duy nhất mà cần phải được khác nhau.

Trên GNU / Linux, điều này được thực hiện tốt nhất với ifconfig :

sudo ifconfig eth0 192.168.192.169 netmask 255.255.255.0

Nếu bạn sử dụng IP đúng, địa chỉ và netmask, sau đó bạn sẽ có thể ping máy in:

$ sudo ifconfig
eth0      Link encap:Ethernet  HWaddr ...
          inet addr:192.168.192.169  Bcast:192.168.192.255  Mask:255.255.255.0
          ...
$ ping 192.168.192.168
PING 192.168.192.168 (192.168.192.168) 56(84) bytes of data.
64 bytes from 192.168.192.168: icmp_seq=1 ttl=255 time=1.09 ms
64 bytes from 192.168.192.168: icmp_seq=2 ttl=255 time=0.506 ms
...

Máy in này có một giao diện web, và mở cửa trên hai cổng để in:

$ nmap 192.168.192.168
...
PORT     STATE SERVICE
80/tcp   open  http
515/tcp  open  printer
9100/tcp open  jetdirect

Giao diện web sẽ cho phép bạn đặt các thiết lập IP khác nhau, do đó bạn có thể nhận được máy in trong mạng của bạn. Nếu bạn mess up và không thể kết nối, sau đó làm một factory reset: Giữ nút sử dụng trước đó, và sau đó khởi động lại máy in.

Xong. Bây giờ tiến hành sử dụng nó thôi nhé.

2. Sử dụng máy in trên ruby.

Epson cung cấp trình điều khiển cho nhiều nền tảng, có thể phù hợp với trường hợp sử dụng của bạn.

Tuy nhiên, các máy in làm hỗ trợ ESC / POS (Xem Wikipedia ). làm cho nó khá dễ tiếp cận mà không cần trình điều khiển được cài đặt.

Máy in sẽ ngay lập tức in bất kỳ văn bản thông thường mà nó nhận được qua Cảng 9100, từng dòng:

echo "Hello World" | nc 192.168.192.168 9100

ESC lệnh / POS cho phép bạn để định dạng văn bản, mã vạch in, và cắt giấy.

Và dưới đây là cách kết nối mà bạn có thể sử dụng trên Ruby hay bất cứ ngôn ngử lập trình nào nhé. Đơn giản là dùng socket.

require 'socket'
host = '192.168.192.169'
port = 9100

socket = TCPSocket.open(host,port)
socket.print("request")
socket.puts "Ngo Van Tien"

socket.close

Bạn muốn hiểu kỹ hơn về các lệnh này hay muốn tham khảo thêm nhiều ví dụ thì có thể comment bên dưới nhé. Đọc thông tin thêm ở mục tài liệu tham khảo để hiểu rỏ hơn củng như các lệnh có thể dùng của TCPsocket nhé.

https://ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/Socket.html

0