小票打印机/热敏打印机 - (爱宝 A8007) 打印机的介绍,编程方式和安装
访问量: 7434
参考:
制作通用打印机小票程序
先给个脚本,可以直接运行:
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. 会看到这个图:
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. 记得对字体要分别设置(英文的设置一次,中文的设置一次。)