POS机最早用于零售业,但因其方便、快捷的特性,当今已用于生活的各方面。随着POS机的大规模使用,对其通信信息的监控和管理也变得越发重要。通过使用POS机,用户可以很方便地管理日常销售、进出货物等,但相关部门无法透明地对其进行监管。针对这一现象,本文以零售业的POS收款机为例,在不影响票据打印机正常工作的前提下,通过截取打印时的数据,实现了对其通信数据的监控。
1 系统总体方案设计
POS主机与票据打印机的接口方式有并口、串口和USB,但目前应用较多的还是并口,因此本文主要研究的是并口方式。POS收款机的每一笔销售及收款数据都会通过票据打印机打印成销售小票,在POS主机与票据打印机之间加入数据采集装置,每当打印票据时都会同时触发采集器进行数据采集,并通过有线通信方式上传至数据服务器。图1为设计方案结构。
2 硬件设计
本文设计的数据采集器由信号调理单元、通信单元、存储单元、微控制器和供电单元五部分组成。硬件结构框图如图2所示。
6N137有正逻辑和反逻辑两种工作方式,本文使用的是正逻辑方式,如图9所示,使用时需要注意以下几点:
(1) 当6N137工作于正逻辑时,前端供电应独立于系统电源。
(2)由6N137的内部结构可知,PIN2与PIN3之间为发光二极管,发光二极管正向压降1.2 V~1.7 V,正向电流为6.5 mA~15 mA,光敏管导通。若不加限流电阻或阻值很小,6N137仍能工作,但发光二极管导通电流很大,对VCC1有较大冲击,尤其是数字波形较抖时,上升、下降沿的频谱很宽,会造成相当大的尖峰脉冲噪声。因此在可能的情况下,限流电阻尽量取大[2]。
(3)VCC和GND引脚之间必须连接一个高频特性很好的陶瓷电容或固体钽电容CF(容值为0.1 ?滋F或者更大),而且尽可能靠近VCC和GND引脚。此电容可以吸收电源线上的纹波,同时减小光电隔离器接收端开关工作时对电源的冲击。
(4)输出端(PIN6)是集电极开路输出,通常加上拉电阻RL。此电阻若取的太小,会使6N137的耗电增大,加大对电源的冲击,使旁路电容CF无法吸收[2]。
2.2 存储单元
每张票据包含的信息量大小不一,统计发现8 KB能包含绝大数消费者单次购物的信息量。ATmega128A片内集成有4 KB的SRAM,因此需要外部扩展。本文选用Cypress公司的CY62256,具有15 bit地址线和8 bit数据线,容量为32 KB。由于Atmega128A是高速单片机,建议在高速系统中使用74AHC系列地址锁存器[3]。
为使数据掉电不丢失,使用RAMTRON公司的铁电存储器(FRAM)FM24C64,容量64 kbit,可承受一万亿次的擦写操作,带I2C接口[4]。本系统使用8片FM24C64,每片单独存放一张小票的数据。
2.3 通信部分
串行通信方式有EIA-232[5]、 RS-485D等。本文采用RS-485通信,考虑到系统的稳定性,本文分别在前端和后端加入了隔离电路,如图10所示。
2.4 电源部分
本文采用DC-DC电源转化器件,与LDO器件相比,其转换效率更高,热耗散小。典型应用电路见参考文献[6],图11为PIN2(Output)输出波形。
采用DC-DC隔离器使6N137前端供电独立于系统电源,IB050LS-1W在使用时因注意以下几点:
(1)输入和输出端应该加入滤波电路,实验发现在不加入滤波电路的情况下,关闭系统电源,会有自动出纸的现象发生。
(2)推荐使用简单的被动LC电路滤波,并且电感的自谐振频率必须远离于DC-DC模块的典型工作频率,电感的DC电流额定值最好大约两倍于DC-DC模块的额定输出电流值[7]。
3 软件设计
主流程如图12所示,在主循环中,用指令包标志位的0、1状态来表示是否正确接收一个指令包,通过查询其状态来执行往后函数。为提高系统的稳定性,加入了指令防错机制,若上位机发送的指令不符合本系统设定,则返回错误状态数据包。
采集的数据直接缓存在外扩的存储器内,32 KB被均匀分成4块区域,每块区域单独缓存一张小票的数据。并行接口在SPP模式下,速率是50 KB/s~150 KB/s[1],传输一张信息量为8 KB的票据,最长也只需0.16 s。本文的设计思想:在每张票据第一次触发外部中断采集数据的同时打开定时器,如图13所示,1 s后POS主机已将票据的信息传送给票据打印机,缓存区域内也已存有这张票的数据,此时进入定时中断服务函数完成数据的转存。本文使用状态机[6]思想完成数据的转存,如图14所示。输入为0时进入状态0,缓存块0中的数据被转存至第一片FM2C64内,指针指向缓存块1,关定时器,中断返回,其后状态与之类似。
如图15所示,在串口接收中断服务函数内,将ATmega128A自带的各种错误标志位作为第一层筛选条件,读取缓存区的数据后将系统设定值作为第二层筛选条件。满足以上条件表示数据接收正确,将指令包标志位置1,中断返回。
ATmega128A片内集成硬件看门狗,所以本系统并未加入外围看门狗复位电路。本文采用的方式是,设置看门狗典型溢出时间为0.9 s,使用定时器每0.5 s进入中断服务函数喂狗。
4 结果及分析
分别采用针式打印机和热敏打印机对本系统进行测试。往ATmega128A烧写程序前应先配置好熔丝位,对熔丝位的误操作会将芯片锁死。
表1为测试用的6种指令包,首先设定装置所在的地址范围,第1个指令包将设备的地址限定在了0X01~0X50内,起始字节0X24与结束字节0X2A分别为特殊字符S和*,第6个字节与第7个字节为前5个字节的CRC-16校验字,返回相同的数据包表明配置成功;接着第2个指令包将设备的地址设为0X05,之后数据采集装置就可开始工作;指令包3的含义是将设备的地址设定成0X57,然而先前设备的地址已经被限定在了0X01~0X50范围内,指令有误,应返回错误状态数据包。程序中定义了一系列错误状态标志位,以指示不同的错误状态,防止误操作。
第4个指令包发送后,回传第一张小票的数据,需注意返回的数据包中第7个字节起才是票据的数据,将其与打印出的小票进行核对,最后第2和第3个字节是对小票数据进行CRC-16的校验字;与指令5对应的数据包表明存储的第二张小票的数据被清除;而对应于指令6返回的数据包说明小票地址有误。
本文设计的POS收款机数据采集器解决了零售行业中票据信息无法监控的问题,对数据统计和管理具有实际意义。创新地加入了铁电存储器,数据信息频繁擦写的同时延长了设备的有效寿命。随着POS机的发展和仪表的智能化、人性化,可以近一步完善产品功能,从通信方面考虑改用无线方式(如Wi-Fi)完成数据的传送,减少线缆铺设成本。
参考文献
[1] 计算机的并行接口大全[EB/OL].(2010-03-09)[2013-09-24].http://www.elecfans.com/baike/computer/taishiji/20100309183757.html.
[2] 高速光耦6N137应用电路[EB/OL].(2011-03-21)[2013-09-24]. http://wenku.baidu.com/view/43b6857e5acfa1c7aa-00ccff.html.
[3] Atmel Corp..ATmega128A complete[EB/OL].(2011-02-xx)[2013-09-24].http//www.atmel.com/devices/ATMEGA128A.aspx?tab=documents.
[4] Cypress Incorporated. FM24C64B:64Kb Serial 5 V F-RAM Memory[EB/OL].(2013-07-19)[2013-09-24].http://www.cypress.com/?rID=73453
[5] 韦晓茹,蔡志坚,居戬之.AVR单片机ATmega16与计算机串行通信的实现[J].微型机与应用,2012,31(14):30-33.
[6] Teax Instruments Corp..LM2596 simple switcher power con verter 150 kHz 3A step-down voltage regulator[EB/OL]. (2013-04-xx)[2013-09-24].http://www.ti.com/lit/ds/symlink/lm2596.
[7] Delus Corp..模块电源产品选型手册[EB/OL].(2009-xx-xx)[2013-09-24].http://www.delus.cn.