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