最近开发一个餐饮管理系统,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搞定了两个没有解决过的问题,心情愉快,记之
分享到:
相关推荐
VB打印,使用脚本控制针式打印机. 使用vbscript脚本,使打印与程序分离.
针式打印机套打程序针式打印机套打程序针式打印机套打程序针式打印机套打程序,需要源码的给我留言:sohao0222@126.com
针式打印机万能驱动很好用的驱动,文件小,下载方便,解压安装,方便快捷,是针式打印机良好的运转,杂牌子有部分也能用
爱普生针式打印机控制命令汇总 打印机的有关术语及解释
java实现针式打印机套打功能-支持连续打印 可切换前入纸与后入纸
针式打印机测针程序
EPSON 针式打印机测针软件
如何控制针式打印机走纸如何控制针式打印机走纸
沧田针式打印机驱动是由沧田打印机官方推出的一款通用安装程序,理论上可以支持所有沧田系列的针式打印机,支持usb、并口和串口系列,将打印机与电脑连接,安装驱动后就可以进行文件的打印操作了。 安装教程: 1、...
针式打印机针头测试程序.rar
针式打印机断针补偿调整工具
针式打印机打印头24针测试程序针式打印机打印头24针测试程序针式打印机打印头24针测试程序针式打印机打印头24针测试程序针式打印机打印头24针测试程序针式打印机打印头24针测试程序针式打印机打印头24针测试程序针式...
小巧的方便的针式打印机断针测试软件,方便您在日常生活工作中即时发现针式打印机是否断针,不错的实用程序
针式打印机免驱动测试软件,断针测试。快捷简单的使用。方便判断机器问题,方便看出效果。检测打印机有无异常。
lq630k针式打印机驱动程序,适合EPSON的lq630系列机器,很好
针式打印机断针测试软件合集收集整理了几款大家比较认可的打印机断针测试程序,使用前请您务必连接打印机,并安装相应的打印机驱动.(进行测试)!
自己写的打印机控制程序,可以控制针式打印机,没有问题,已经在工业使用了.为一个公司开发的.
我使用的51单片机连接打印机驱动板,来控制打印机进行打印...爱普生 M-150II针式打印机例程,带中文注释,和使用的单片机手册,资源包括:打印机驱动硬件原理图、打印机和单片机芯片手册,51C语言源代码,全网独一份。
针式打印机万能驱动安装方法,包括爱普生打印机、富士通、OKI、映美等等