为什么您现在使用的消费机会扣错款呢?
产品好不好只有用过的人才知道,家家都说自己的产品好,还真没见过说自己不好的。不过好不好从技术层面上还是很容易分辨的,下面是本人在消费机设计的一点心得,当初是为了帮一位坛友分析他选购的消费机有时会扣错钱的原因,现在从新整理了一下,感兴趣的朋友建议参考一下,选哪家的产品不重要,重要的是别选错了产品而后悔。
关于从卡内扣钱,那就先从卡和设备的数据交换来说吧:
- 刷卡--->设备(读到卡内余额)
- 写卡<---设备(计算新余额,从卡片扣款)
可以看出在每次的交易过程中,其实都是消费机的读卡芯片和卡在做无线RF通讯,并且都是主从问答方式进行的,也就是说消费机告诉卡“我要扣款5元”,卡片处理扣款后,再应答给消费机说“我已经完成扣款了”。
其实在真实的交易过程中,消费机读卡芯片调用的任何一个命令,都需要和卡进行几次无线RF通讯,一个完整的交易流程下来,可能需要几十次无线RF通讯,而其中任何一个步骤出现问题都有可能造成异常,如何处理才是考验各个厂家的经验和技术,如果不考虑硬件设计水平的技术因素,这也是有经验的厂家为什么产品质量好的另一个根本原因!
一般在正常的交易过程中是不会出现问题的,但是非接触式IC卡的特点就是“刷卡”,很可能因为刷卡动作不规范,或者消费机本身读卡性能不稳定,造成在交易的某一步骤无线RF通讯发生错误。从而造成了不扣款、0元卡或者0xFFFF的巨额卡,如果还出现了其他的扣款异常问题,那就说明这家设备不是一般的差,而是非常的差。因为这说明这家产品不仅仅是在极限情况会出现异常扣款情况,还有其他程序BUG造成扣款计算错误!
程序BUG造成的问题就不说了,那可以说是千奇百怪无法尽述,不过很遗憾现在充斥市场的消费机大多数都或多或少存在此类问题,深究其因无非就是行业门槛低、商家恶意竞争、企业利润差、员工待遇低,人员流动大、技术无积累、人员没经验等等等等。在此不再阐述,各位商家有则改之无则加勉,共同进步!
这里仅举几个简单的例子说说极限情况吧:
- 假设是在交易的最后一步,卡已经扣款成功,并且向设备发送了“我已经完成扣款了”的应答,但是此时卡片已经被人拉出了感应区,这时设备上的读卡芯片没有收到这个应答,此时设备要如何处理呢?
- 假设是在交易的倒数第二步出现问题,设备说“我要扣款5元”,但是此时卡片已经被人拉出了感应区,也就是卡片根本就没收到通知要扣款,设备又要如何处理呢?
其实非接触式IC卡的能量来源是由读卡设备向卡发送的固定频率电磁波与卡内LC串联谐振产生的电荷,当卡正在消费机感应临界区进行读写操作时,突然离开感应区而没电了,那肯定会造成读写卡异常!
上述问题其实是非接触式射频卡的固有特性,并且是不可避免的。如何解决要从硬件PCB设计和硬件编程两方面着手:
首先硬件的PCB“体质”是非常重要的,因为很多厂家的产品读卡性能实在是不敢恭维,而且这种产品的比率还很大,基本占了市场上80%的份额。曾经我们的产品也一直希望突破更远的读卡距离,于是在各个途径寻找解决办法,并且遇到了很多“砖家”,都自称其产品读卡距离很好,结果实际一测,好一点的也就是5CM,诚实一点的一般都是和产品说明书标称值差不多在3CM左右。当时还专门咨询对方的技术人员,提出读卡距离怎么那么短啊,对方很惊讶的答复说:“这个距离还嫌短啊?M1卡就是这个距离。”,听语气就知道他们已经到了极限。
曾经还遇到一个厂家的产品,自称可以达到10CM的读卡距离,最后实测发现是8CM左右,而且就在这8CM的距离内,竟然有3个明显的断层,向厂家询问为什么有断层啊,对方的答复竟然是:“有断层不影响使用啊!”。这种哭笑不得的答复真让人觉得无法沟通,有三个断层等于有五个临界区,出错机率当然更大,断层其实比读卡距离近的危害性更大!而且在后续的测试中发现,这家的产品扣款经常出错,而且还有读卡模块死机不读卡的情况出现。
在经过无数次的深入测试和研究之后,我们的设备现在读卡距离非常好,常规都是7CM以上,并且经过严格测试绝无“断层”!相对来说机器的感应区范围很大,这在硬件层面上就已经保证用户刷卡不易出错。
虽然3CM也能读卡、7CM也是读卡,都是读卡可是实际使用起来差别却是巨大的。这种3CM的距离在刷卡时当然要很注意,因为不小心卡就出了感应区了,出错的几率当然也就大大增加。难道他们不想增大刷卡距离吗?当然不是不想,而是很难做到——既要距离远又要没有断层和死机现象!因为这其中牵扯到较深层次的核心技术问题,在此就不再详述。
M1读卡距离的调整是一个非常难的技术难题,采用较小的天线面积,调的远了有死机和断层的问题、调的近了读卡不理想。这个和芯片厂家NXP的设计有很大关系,做过EM卡读卡设备的应该很有体会,如果是EM卡,基本上不需要怎么调整外部参数,就可以达到20CM左右的距离,但是很可惜M1卡真的是太娇气了,PCB稍有变化,还是使用原来的参数就可能会造成读卡距离变化奇大,这里有博文一篇可窥一斑:http://user.qzone.qq.com/426003742/blog/1272723694
网上还遇到很多的所谓砖家说非常容易,但是很可惜,从业十多年遇人无数我还真没遇到过真正的高人,也许是本人没有仙缘吧。各个都说挺简单,但是每当本人虚心求教的时候却发现,有的人竟然连M1卡都没实际搞过。有人说的竟然还是不同厂家类型的卡片,根本不是NXP的M1卡,并且振振有词的说:“都是TypeA卡,都是遵循ISOXXXX标准的,全都是一样的嘛!”,真的是无知者无畏啊,无法沟通。
虽然读卡距离问题解决后可以减少大部分的异常情况,但是这也不是绝对的,问题肯定还是会有,具体原因也就是上面描述的,刷卡时的每次交易,都是经过射频卡与设备的多次无线通讯。如果设备使用的是CPU是传统的低档C51单片机时,由于处理速度比较慢,加上还要同时处理LCD显示、键盘输入以及与上位机通讯等等其他任务,相对来说读卡速度就会大受影响。这样虽然读卡感应区较大,但是刷卡时虽然卡早已进入感应区,但是设备的CPU还没来得及处理读卡任务,而当CPU正式开始处理读卡时,用户却已将卡拉出了感应区,这样同样会造成上面所说的异常情况。
所以说不但要距离远、无断层,并且还要速度足够快!
以上都是从硬件PCB的角度来谈这个问题,下面再从硬件编程方面简单说几句吧。
有一点需要特别注意的是,即便都是采用ARM内核的不同厂家,由于编程上的设计机制不同,采用相对较为简单的阻塞式编程机制和异步并发编程机制之间的性能差异还是非常巨大的,并不是用了ARM就一定可以做到响应速度快,这和硬件程序设计者的能力有极大的关系。
举个最简单的例子,以前用过DOS操作系统的人都知道,DOS系统没有多任务的概念,程序是顺序执行的,因此效率非常低,程序运行起来经常有“卡卡”的感觉;而进入Windows操作系统以后,由于其基于多任务时间片设计机制,我们才可以有边听音乐边写博客这样的“并行”感受。
同理在一卡通行业,如果硬件开发人员技术水平不足,在系统中采用的是相对简单的传统阻塞式编程,则会大大的降低硬件的刷卡响应速度,这也是很多厂家的产品强制要求在提取数据或下载卡片时不能刷卡,或者此时键盘、显示等都停止响应的根本原因。而之所以大部分设计者放弃高效的异步并发处理机制,而习惯采用低效的阻塞式机制,最根本的原因就是设计复杂度和编程难度相差巨大,还是那句话,不是不想,而是没做到。
而我们的设备采用的是ARM内核,借助其CPU的强大计算能力,再配合编程上全部采用“异步并发”的多任务机制,从而可以在提取数据、大量下载卡片的同时随时响应刷卡,性能表现极其优异!所以说不但硬件设计有高低之分,软件设计也是差异巨大,即便是一样的硬件平台,不同的硬件编程人员所设计的产品可能在功能和性能上差距巨大。并且即便是个编程高手,但是如果没有深厚的行业应用经验,依然不能开发出功能强大、性能稳定的成熟产品,这就是科技以人为本的最佳体现。
所以说:消费机做出来容易,想做好真的很难!!!