最近开发一个餐饮管理系统,web方式实现,我开发收银员使用的前端界面,中间有两个功能,打印小票和VIP磁卡刷卡。打印小票就是到超市买完东西以后打印的那种小票,VIP磁卡刷卡就是在收银时,顾客提供VIP卡,收银员在界面上点“读卡”按钮,然后在读卡器上刷一下,程序就直接拿到磁卡上的VIP会员号。
这两个功能很多程序员都实现过,不是什么复杂的功能,但问题在于,我是一个通常意义上的php程序员,只开发过那些通常意义上的网站,从来没有想到过要用php去和打印机、读卡器这些设备打交道。
用c、java这些来干这件事情会更简单一些,但我只会php,perl名言说:“对一个拿着锤子的人来说,所有的问题看上去都像是钉子”,默念着这句名言,我划着php这条“小破船”出海了。
系统的环境是linux,收银员使用firefox,这台机器既是服务器,也是前端,打印机和读卡器(型号:HCE-302)都同时连接在这台机器上。
针式打印机这一块解决起来比我想象的要简单,重新编译编译一下内核,把并口驱动起来,然后就有/dev/lp0设备可以使用了,只要向这个设备echo内容就可以打印出来。php生成打印内容,然后用fopen()、fwrite()几个函数就可以搞定,蛮简单的。
读卡器就比较复杂一些,问题有以下几个:
1、从来没有接触过串口设备,有恐惧感
2、和打印不同,打印只需要写,而读卡器需要先发送读卡命令,然后读卡器上的灯会亮起来,然后再刷一次卡(刷卡的时间不定),最后把卡的内容读回来,流程上要复杂一些
3、读写命令的格式需要研究
解决问题之后再回顾问题的时候都有一种轻松感,但问题还没有解决之前感觉一点也不轻松。读卡器光盘上附带了一些c、delphi、vb例程,给我的感觉就是非这些语言不可,php怎么能够也搞定这种事情?而且还是和串口设备通讯!
总之按照打印机的解决方法,先把串口驱动起来再说,/dev/ttyS0顺利的出现了,然后就echo 'xxxx' > /dev/ttyS0,果然没反应;)
接下来的工作就是阅读读卡器的开发手册和google,两个同事也在旁边出了不少主意,一个以前有很丰富的串口开发经验,不过都是在Windows下,而且是用c,这次linux/php读写串口是老革命遇上新问题,不过在读写命令上给了很好的帮助,另外一个同事硬件经验丰富,串口设备的波特率/读写位/xxoo什么的都是他给我说的,总之,我是站在两个巨人的肩膀上,呵呵
废话不说,上干货
首先,需要用stty设置一下串口(知其然不知其所以然):
/bin/stty -F /dev/ttyS0 raw ispeed 9600 ospeed 9600 cs8 -ignpar -cstopb -echo
读卡器的读磁道2命令是:"Esc ]"(没有")
发送到读卡器的命令需要用16进制的ascii编码,"Esc ]"编码为"\x1b\x5d"
echo -e "\x1b\x5d" > /dev/ttyS0之后,果然看到读卡器的灯亮起来了,另外开一个终端,cat /dev/ttyS0也可以在刷卡后看到数据读出
简化的php读卡程序如下:
$handle = fopen('file:///dev/ttyS0', 'w+');
if ($handle === false) die('open /dev/ttyS0 failed');
if (fwrite($handle, "\x1b\x5d") === false) echo 'write /dev/ttyS0 failed';
$content = '';
while (true) {
$code = fread($handle, 1);
if (preg_match('/^\d$/', $code)) $content .= $code;
if ($code === '?') break;
}
fclose($handle);
echo $content;
一番折腾之后,还是fwrite()/fread()上场,unix的设备文件机制的确很NB
现在我已经实现了收银员点“读卡”按钮,ajax发起请求,php返回磁卡内容这个功能
用php搞定了两个没有解决过的问题,心情愉快,记之
分享到:
相关推荐
针式打印机以其经济实惠和耐用性著称,但在编程中对其进行控制可能需要一些特殊的技巧。 首先,让我们理解VBScript的基本概念。VBScript是Visual Basic Scripting Edition的缩写,它是一种轻量级、解释型的脚本语言...
3. **打印机命令语言**:每个针式打印机都有其特定的打印机控制语言(PCL或ESC/P等),开发者需要理解和掌握这些语言,以便编写正确的控制序列。例如,ESC/P是 Epson 打印机常用的语言,包含了各种控制序列,如设置...
相较于喷墨打印机和激光打印机,针式打印机在耐用性和成本效益上具有优势,尤其适合长期大量打印的需求。 "针式打印机万能驱动V3.0.rar" 是一个针对针式打印机的驱动程序压缩包,版本号为V3.0,表明这是一个经过多...
针式打印机测试软件 DOS版是一款专门针对针式打印机进行性能检测和校准的应用程序,它运行在DOS操作系统环境下,并且适用于32位系统。在信息化发展的早期阶段,针式打印机因其耐用、成本低和适合大量打印发票、单据...
针式打印机断针测试软件合集是一个非常实用的资源包,专为检查和评估针式打印机的打印头状况而设计。针式打印机以其耐用性和成本效益在某些领域,如发票打印、多层表格打印等,仍占有一定市场。然而,由于其工作原理...
对于如何精确地控制针式打印机的走纸,以下将详细介绍几种常用的方法和技术。 #### 一、基本命令集介绍 针式打印机通常支持不同的指令集,其中最为广泛使用的是EPSON ESC/P指令集。EPSON ESC/P是一种专门用于控制...
针式打印机套打程序是一种专为针式打印机设计的应用软件,它允许用户通过电脑来控制打印机进行精确的多层复写或套打操作。在商业和办公环境中,针式打印机常用于打印多联表格、发票、收据等,因为它们能够穿透多层...
本文将详细解析EPSON针式打印机测针软件,帮助用户更好地理解和使用这一工具。 针式打印机以其独特的打印原理,能够在各种介质上实现清晰、持久的打印效果,尤其适合打印发票、收据等需要长期保存的文档。然而,...
总之,Java和SpringBoot为我们提供了强大的工具来实现针式打印机的套打功能,无论是简单的文档打印还是复杂的多联单据处理,都能通过编程灵活控制。关键在于理解打印服务模型,正确配置打印参数,并进行充分的测试以...
针式打印机免驱动测试软件是一种专门用于检测和评估针式打印机功能的实用工具。它无需安装额外的驱动程序,即可快速、简便地进行打印机性能测试,尤其适用于判断打印头是否出现断针问题,以及整体打印机是否存在其他...
以下是对爱普生针式打印机控制命令的详细解释。 一、打印机基本术语 1. PCL(Printer Control Language):一种打印机语言,由惠普开发,用于控制打印机的输出。爱普生针式打印机虽然不直接支持PCL,但通过特定的...
针式打印机断针检测是维护和管理这类打印机的重要环节,特别是在商业或办公环境中,它们常用于打印发票、收据和多层复写纸。本文将详细介绍爱普生和得实针式打印机的断针检测软件及其相关知识。 首先,我们要明白...
针式打印机的核心组成部分包括打印头、色带、驱动电机和控制系统。打印头由一系列细小的金属针组成,这些针按照指定的模式快速击打色带来留下墨迹。测针程序的主要功能就是检测这些针是否正常工作,包括针的运动精度...
"针式打印机针头测试程序"是为了帮助用户检测和评估针式打印机的针头工作状况而设计的应用。 首先,我们来看"24针测试程序.exe"。这通常是一个专门针对24针打印头的测试软件。24针指的是打印机内部有24根独立的打印...
标题中的“爱普生针式打印机断针测试和屏蔽软件”指的是一个专门针对爱普生品牌针式打印机的工具,它的主要功能是检测打印机是否存在断针问题,并且提供相应的屏蔽功能,以帮助用户应对因断针导致的打印问题。针式...
针式打印机断针测试软件的使用对于维护打印机的健康状态至关重要,尤其是对于那些依赖针式打印机进行发票、单据打印的企业和个人。定期进行断针检测不仅可以延长打印机的使用寿命,还可以降低维护成本,提高工作效率...
断针是针式打印机中常见的故障,由于打印头的针头在高速击打色带时可能会因磨损或应力过大导致断裂,这将直接影响打印质量和效率。该工具提供了断针补偿功能,帮助用户通过微调参数来优化打印效果,减少因断针导致的...
当打印机接收到打印指令时,这些针会在驱动电机的控制下快速击打色带,通过色带的颜色转移在纸上形成文字和图像。如果其中一根或几根针断裂,打印的字符会出现缺失或不清晰,影响整体打印效果。 断针检测工具的使用...
DELI得力DE-620KII针式打印机是一款高性能的针式打印机,采用先进的技术和材料,具有时尚外观、可靠性高、节能设计等特点。该产品适用于税务、企业财务、保险、电信等行业部门用户,满足用户对高速、可靠、经济的...