小票打印机/热敏打印机 - (爱宝 A8007) 打印机的介绍,编程方式和安装

访问量: 82

参考: 制作通用打印机小票程序

先给个脚本,可以直接运行:

puts "=== before require "

require 'socket'

sleep 0.1
client = TCPSocket.new '192.168.1.181', 9100
sleep 0.1

# 发现偶尔有的机器, 需要分别设置才行。
# 设置英文字体。 和 数字
client.write "\x1B\x21\x30 english 汉字"   
# 设置中文字体
client.write "\x1C\x21\x0C 汉字 english 123".encode 'gbk', 'utf-8'  

content = "你好,我是第三行"
puts "== encoding: #{content.encoding}"

content = content.encode 'gbk', 'utf-8'
puts "== after , encoding: #{content.encoding}"

client.write content

client.write "\n\n\n\n\n\n\n\n"

client.write "\x1D\x56\x01"
sleep 0.1

client.close

puts "=== done"

我们的一个项目中,设计到了 餐饮系统。

餐饮系统用的比较多的,是小票打印机。往往用在后厨,让后厨师傅看到了出菜。

也会用在前台,打印小票,作为预结单据。

虽然用触摸屏可以替代,但是触摸屏的特点是造价昂贵,屏幕在1000-2000元, 整机大概在 3000以上。

小票打印机,最贵的 三口打印机(网口,USB, 串口电话线)也就是400块。

所以,小票打印机还是有很大市场的。

这个打印机的用法跟其他打印机不同:

1. 有两种打印方式:

1.1 本地打印机,可以根据windows的系统来打印。 网页上是啥,就可以打印出啥来。特别方便。 前提是需要在windows上安装驱动程序。

1.2 非本地(网口/USB口打印机), 只能通过socket通讯来打印。  好处是不需要驱动。非常方便

所有的小票/热敏打印机,无论是58宽度,还是80宽度,无论是啥品牌,都是一样的。

都遵循着 EPSON 的ESC POS打印机的 编程规范来的。具体见:  http://siwei.me/system/resources/W1siZiIsIjIwMTcvMTEvMjMvMThfNDNfMzhfOTUzXzU4Xy5wZGYiXV0/58%E4%B8%AD%E6%96%87%E6%97%A0%E7%BA%BF%E7%83%AD%E6%95%8F%E6%89%93%E5%8D%B0%E6%9C%BA%E8%AF%B4%E6%98%8E%E4%B9%A6.pdf

基本上,都是通过使用(原生的,不是websocket) socket 来发送请求。实现打印, 切纸,等功能。 

socket 端口统一都是 9100.  下面是入门:

require 'socket'

sleep 0.1  # 记得要睡 0.1 s , 有时候打印机会出现低温情况,下面语句都一样. 每次执行完,记得睡一下。
# 详细原因还不知道。 建议在 连接, 切纸时,必须 sleep 0.1 
s = TCPSocket.new('192.168.1.181', 9100);

# 打印 普通的字符串。
s.write "hihihi"
puts s.read(5)

# 打印3个换行。 
s.write "hihihi\n\n\n"  
# 换两行并切纸 ,但是慎用,可能会引起打印机死机。 
# 出现死机时,重启打印机,或者 回复打印机配置到出产情况(按住feed不放,开机,持续按feed 20秒,看到两个红灯闪两下之后,松手,就会看到
# 打印机打印出当前状态。   ip地址已经变更,需要重新配置ip)
s.write "\x0a\x0a\x1d\x56\x01"  
(参考: http://www.360doc.com/content/11/1101/10/8005503_160738911.shtml    1d 56 00)

# 以下高级功能,使用 EPSON 的ESC POS打印机函数

# 加粗
client.write "\x1B\x21\x08  bold ..."

# 倍高
client.write "\x1B\x21\x10  2x height..."

# 倍宽
client.write "\x1B\x21\x20  2x width...\n"

# 倍宽, 倍高 (仅对英文和数字生效)
client.write "\x1B\x21\x30 2x width, height..."

# 仅对汉字生效。 所以,实际操作中,最好每次调用的时候,都要分别设置下 英文和中文。
client.write "\x1C\x21\x0C 2X 汉字你好啊123 abc".encode("gbk", "utf-8")

s.close

这里需要注意的是,任何内容,都要查看 “编程手册”来。例如, 字体2x宽是 20, 2x高是 10, 那么又是倍宽,又是倍高,就要 \x30 。  这个是根据手册中看到的(2进制数字,8位的话,4,5,6位都是1 才行。通过二进制到16进制的在线转换,就可以了,点击这里:http://tool.oschina.net/hexconvert/

在“编程手册”中,要注意这么几个点:

1. 选择字符大小:   GS ! n 

2. 选择对齐方式:  ESC a n

3. 选择字体: ESC M n

4. 选择打印模式:  ESC ! n  (加粗,加高,加宽,下划线等)

5. 设置左边距:  GS L nL nH

关于小票打印机的安装和调试:

安装: 

1. 根据网络打印机提供的软件, 设置这些打印机的IP,成为固定的。(这一步往往需要打印机跟电脑用网线直连,具体见说明书)

2. 要把小票打印机跟 要跟它沟通的设备(例如电脑)放在同一局域网 。 (例如网段都是 192.168.1.x)

3. 运行更改iP的程序. (简易程序在这里下载,完整程序见网盘。https://pan.baidu.com/s/1hrSekpY

4. 会看到这个图:

配置打印机ip

5. 点击“设置按钮”,就可以了。(会发现,本机先是ip改变,然后改变打印机ip, 最后给出红字成功。 打印机也会打出新的ip地址。最后本机地址恢复)

调试:

1. 按钮 feed 表示出纸,

2. 当feed与paper键同时变红(不闪烁)时,表示缺纸

3. 放纸时,那个纸筒中间的小棍子,不用实打实的放在那里。 很宽松的一扔就行,不会影响打印机的出纸的。

4. 关机后, 按住feed, 不放,同时开电源,2秒后松手, 打印机会打印自动检测的纸片

5. 长按feed 20秒,回到初始状态。

6. 如果 客户端通过socket发送给打印机命令,打印机无法识别或者出错时,会  FEED, PAPER 同时红色闪烁,大约5秒闪一次,一次闪两下。

7. 调试时,建议电脑跟打印机挨着。

8. 注意: 各种命令要放在每一行的行首,才会被识别为命令。 (虽然有时候也行)

9. 注意: 打印机的工作温度是 0 - 40度。过高过低都会影响打印效果。 而且我们打印的时候,程序要适当的发送请求,不要一股脑发送出去。 这个在ipad端没问题,但是在windows端的 ruby程序,就会引起打印机不工作(不响应socket,  又不报错) . 解决办法是在关键点sleep 0.1 秒。 关键点是: 切纸,连接等。 具体还需要进一步的摸索。

另外,估计在刚开机的时候,需要几秒钟的预热时间。所以,这里最好在程序中,对打印机的状态做个判断。

10. 记得对字体要分别设置(英文的设置一次,中文的设置一次。)

订阅/RSS Feed

Subscribe

分类/category