摘 要: 以RISC架構(gòu)的微控制器為核心,通過分析日常使用較多的零售POS機(jī),結(jié)合帶糾錯(cuò)機(jī)制的通信方式,設(shè)計(jì)POS收款機(jī)數(shù)據(jù)采集器。采用熱敏POS機(jī)和針式POS機(jī)對(duì)設(shè)計(jì)樣品進(jìn)行了測(cè)試,結(jié)果表明,該設(shè)備采集的準(zhǔn)確率符合要求,具有較好的應(yīng)用前景。
關(guān)鍵詞: POS機(jī);票據(jù)打印機(jī);信號(hào)調(diào)理;數(shù)據(jù)存儲(chǔ)
POS機(jī)最早用于零售業(yè),但因其方便、快捷的特性,當(dāng)今已用于生活的各方面。隨著POS機(jī)的大規(guī)模使用,對(duì)其通信信息的監(jiān)控和管理也變得越發(fā)重要。通過使用POS機(jī),用戶可以很方便地管理日常銷售、進(jìn)出貨物等,但相關(guān)部門無法透明地對(duì)其進(jìn)行監(jiān)管。針對(duì)這一現(xiàn)象,本文以零售業(yè)的POS收款機(jī)為例,在不影響票據(jù)打印機(jī)正常工作的前提下,通過截取打印時(shí)的數(shù)據(jù),實(shí)現(xiàn)了對(duì)其通信數(shù)據(jù)的監(jiān)控。
1 系統(tǒng)總體方案設(shè)計(jì)
POS主機(jī)與票據(jù)打印機(jī)的接口方式有并口、串口和USB,但目前應(yīng)用較多的還是并口,因此本文主要研究的是并口方式。POS收款機(jī)的每一筆銷售及收款數(shù)據(jù)都會(huì)通過票據(jù)打印機(jī)打印成銷售小票,在POS主機(jī)與票據(jù)打印機(jī)之間加入數(shù)據(jù)采集裝置,每當(dāng)打印票據(jù)時(shí)都會(huì)同時(shí)觸發(fā)采集器進(jìn)行數(shù)據(jù)采集,并通過有線通信方式上傳至數(shù)據(jù)服務(wù)器。圖1為設(shè)計(jì)方案結(jié)構(gòu)。
2 硬件設(shè)計(jì)
本文設(shè)計(jì)的數(shù)據(jù)采集器由信號(hào)調(diào)理單元、通信單元、存儲(chǔ)單元、微控制器和供電單元五部分組成。硬件結(jié)構(gòu)框圖如圖2所示。
6N137有正邏輯和反邏輯兩種工作方式,本文使用的是正邏輯方式,如圖9所示,使用時(shí)需要注意以下幾點(diǎn):
(1) 當(dāng)6N137工作于正邏輯時(shí),前端供電應(yīng)獨(dú)立于系統(tǒng)電源。
(2)由6N137的內(nèi)部結(jié)構(gòu)可知,PIN2與PIN3之間為發(fā)光二極管,發(fā)光二極管正向壓降1.2 V~1.7 V,正向電流為6.5 mA~15 mA,光敏管導(dǎo)通。若不加限流電阻或阻值很小,6N137仍能工作,但發(fā)光二極管導(dǎo)通電流很大,對(duì)VCC1有較大沖擊,尤其是數(shù)字波形較抖時(shí),上升、下降沿的頻譜很寬,會(huì)造成相當(dāng)大的尖峰脈沖噪聲。因此在可能的情況下,限流電阻盡量取大[2]。
(3)VCC和GND引腳之間必須連接一個(gè)高頻特性很好的陶瓷電容或固體鉭電容CF(容值為0.1 ?滋F或者更大),而且盡可能靠近VCC和GND引腳。此電容可以吸收電源線上的紋波,同時(shí)減小光電隔離器接收端開關(guān)工作時(shí)對(duì)電源的沖擊。
(4)輸出端(PIN6)是集電極開路輸出,通常加上拉電阻RL。此電阻若取的太小,會(huì)使6N137的耗電增大,加大對(duì)電源的沖擊,使旁路電容CF無法吸收[2]。
2.2 存儲(chǔ)單元
每張票據(jù)包含的信息量大小不一,統(tǒng)計(jì)發(fā)現(xiàn)8 KB能包含絕大數(shù)消費(fèi)者單次購(gòu)物的信息量。ATmega128A片內(nèi)集成有4 KB的SRAM,因此需要外部擴(kuò)展。本文選用Cypress公司的CY62256,具有15 bit地址線和8 bit數(shù)據(jù)線,容量為32 KB。由于Atmega128A是高速單片機(jī),建議在高速系統(tǒng)中使用74AHC系列地址鎖存器[3]。
為使數(shù)據(jù)掉電不丟失,使用RAMTRON公司的鐵電存儲(chǔ)器(FRAM)FM24C64,容量64 kbit,可承受一萬億次的擦寫操作,帶I2C接口[4]。本系統(tǒng)使用8片F(xiàn)M24C64,每片單獨(dú)存放一張小票的數(shù)據(jù)。
2.3 通信部分
串行通信方式有EIA-232[5]、 RS-485D等。本文采用RS-485通信,考慮到系統(tǒng)的穩(wěn)定性,本文分別在前端和后端加入了隔離電路,如圖10所示。
2.4 電源部分
本文采用DC-DC電源轉(zhuǎn)化器件,與LDO器件相比,其轉(zhuǎn)換效率更高,熱耗散小。典型應(yīng)用電路見參考文獻(xiàn)[6],圖11為PIN2(Output)輸出波形。
采用DC-DC隔離器使6N137前端供電獨(dú)立于系統(tǒng)電源,IB050LS-1W在使用時(shí)因注意以下幾點(diǎn):
(1)輸入和輸出端應(yīng)該加入濾波電路,實(shí)驗(yàn)發(fā)現(xiàn)在不加入濾波電路的情況下,關(guān)閉系統(tǒng)電源,會(huì)有自動(dòng)出紙的現(xiàn)象發(fā)生。
(2)推薦使用簡(jiǎn)單的被動(dòng)LC電路濾波,并且電感的自諧振頻率必須遠(yuǎn)離于DC-DC模塊的典型工作頻率,電感的DC電流額定值最好大約兩倍于DC-DC模塊的額定輸出電流值[7]。
3 軟件設(shè)計(jì)
主流程如圖12所示,在主循環(huán)中,用指令包標(biāo)志位的0、1狀態(tài)來表示是否正確接收一個(gè)指令包,通過查詢其狀態(tài)來執(zhí)行往后函數(shù)。為提高系統(tǒng)的穩(wěn)定性,加入了指令防錯(cuò)機(jī)制,若上位機(jī)發(fā)送的指令不符合本系統(tǒng)設(shè)定,則返回錯(cuò)誤狀態(tài)數(shù)據(jù)包。
采集的數(shù)據(jù)直接緩存在外擴(kuò)的存儲(chǔ)器內(nèi),32 KB被均勻分成4塊區(qū)域,每塊區(qū)域單獨(dú)緩存一張小票的數(shù)據(jù)。并行接口在SPP模式下,速率是50 KB/s~150 KB/s[1],傳輸一張信息量為8 KB的票據(jù),最長(zhǎng)也只需0.16 s。本文的設(shè)計(jì)思想:在每張票據(jù)第一次觸發(fā)外部中斷采集數(shù)據(jù)的同時(shí)打開定時(shí)器,如圖13所示,1 s后POS主機(jī)已將票據(jù)的信息傳送給票據(jù)打印機(jī),緩存區(qū)域內(nèi)也已存有這張票的數(shù)據(jù),此時(shí)進(jìn)入定時(shí)中斷服務(wù)函數(shù)完成數(shù)據(jù)的轉(zhuǎn)存。本文使用狀態(tài)機(jī)[6]思想完成數(shù)據(jù)的轉(zhuǎn)存,如圖14所示。輸入為0時(shí)進(jìn)入狀態(tài)0,緩存塊0中的數(shù)據(jù)被轉(zhuǎn)存至第一片F(xiàn)M2C64內(nèi),指針指向緩存塊1,關(guān)定時(shí)器,中斷返回,其后狀態(tài)與之類似。
如圖15所示,在串口接收中斷服務(wù)函數(shù)內(nèi),將ATmega128A自帶的各種錯(cuò)誤標(biāo)志位作為第一層篩選條件,讀取緩存區(qū)的數(shù)據(jù)后將系統(tǒng)設(shè)定值作為第二層篩選條件。滿足以上條件表示數(shù)據(jù)接收正確,將指令包標(biāo)志位置1,中斷返回。
ATmega128A片內(nèi)集成硬件看門狗,所以本系統(tǒng)并未加入外圍看門狗復(fù)位電路。本文采用的方式是,設(shè)置看門狗典型溢出時(shí)間為0.9 s,使用定時(shí)器每0.5 s進(jìn)入中斷服務(wù)函數(shù)喂狗。
4 結(jié)果及分析
分別采用針式打印機(jī)和熱敏打印機(jī)對(duì)本系統(tǒng)進(jìn)行測(cè)試。往ATmega128A燒寫程序前應(yīng)先配置好熔絲位,對(duì)熔絲位的誤操作會(huì)將芯片鎖死。
表1為測(cè)試用的6種指令包,首先設(shè)定裝置所在的地址范圍,第1個(gè)指令包將設(shè)備的地址限定在了0X01~0X50內(nèi),起始字節(jié)0X24與結(jié)束字節(jié)0X2A分別為特殊字符S和*,第6個(gè)字節(jié)與第7個(gè)字節(jié)為前5個(gè)字節(jié)的CRC-16校驗(yàn)字,返回相同的數(shù)據(jù)包表明配置成功;接著第2個(gè)指令包將設(shè)備的地址設(shè)為0X05,之后數(shù)據(jù)采集裝置就可開始工作;指令包3的含義是將設(shè)備的地址設(shè)定成0X57,然而先前設(shè)備的地址已經(jīng)被限定在了0X01~0X50范圍內(nèi),指令有誤,應(yīng)返回錯(cuò)誤狀態(tài)數(shù)據(jù)包。程序中定義了一系列錯(cuò)誤狀態(tài)標(biāo)志位,以指示不同的錯(cuò)誤狀態(tài),防止誤操作。
第4個(gè)指令包發(fā)送后,回傳第一張小票的數(shù)據(jù),需注意返回的數(shù)據(jù)包中第7個(gè)字節(jié)起才是票據(jù)的數(shù)據(jù),將其與打印出的小票進(jìn)行核對(duì),最后第2和第3個(gè)字節(jié)是對(duì)小票數(shù)據(jù)進(jìn)行CRC-16的校驗(yàn)字;與指令5對(duì)應(yīng)的數(shù)據(jù)包表明存儲(chǔ)的第二張小票的數(shù)據(jù)被清除;而對(duì)應(yīng)于指令6返回的數(shù)據(jù)包說明小票地址有誤。
本文設(shè)計(jì)的POS收款機(jī)數(shù)據(jù)采集器解決了零售行業(yè)中票據(jù)信息無法監(jiān)控的問題,對(duì)數(shù)據(jù)統(tǒng)計(jì)和管理具有實(shí)際意義。創(chuàng)新地加入了鐵電存儲(chǔ)器,數(shù)據(jù)信息頻繁擦寫的同時(shí)延長(zhǎng)了設(shè)備的有效壽命。隨著POS機(jī)的發(fā)展和儀表的智能化、人性化,可以近一步完善產(chǎn)品功能,從通信方面考慮改用無線方式(如Wi-Fi)完成數(shù)據(jù)的傳送,減少線纜鋪設(shè)成本。
參考文獻(xiàn)
[1] 計(jì)算機(jī)的并行接口大全[EB/OL].(2010-03-09)[2013-09-24].http://www.elecfans.com/baike/computer/taishiji/20100309183757.html.
[2] 高速光耦6N137應(yīng)用電路[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] 韋曉茹,蔡志堅(jiān),居戩之.AVR單片機(jī)ATmega16與計(jì)算機(jī)串行通信的實(shí)現(xiàn)[J].微型機(jī)與應(yīng)用,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..模塊電源產(chǎn)品選型手冊(cè)[EB/OL].(2009-xx-xx)[2013-09-24].http://www.delus.cn.