|
一、研究背景及設計方案
RFID 是射頻識別技術(Radio Frequency Identification)的英文縮寫,射頻識別技術是一種非接觸式的自動識別技術,它使用射頻電磁波通過空間耦合(交變磁場或電磁場)在閱讀器和要進行識別、分類和跟蹤的移動物品(物品上附著有RFID 標簽)之間實現無接觸信息傳遞並通過所傳遞的信息達到識別目的的技術。RFID 是一種自動識別和數據捕獲技術,可以提供無人看管的自動監視與報告作業。
RFID 閱讀器的工作原理如下:閱yue讀du器qi通tong過guo天tian線xian發fa送song出chu一yi定ding頻pin率lv的de射she頻pin信xin號hao,當dang標biao簽qian進jin入ru磁ci場chang時shi產chan生sheng感gan應ying電dian流liu從cong而er獲huo得de能neng量liang,發fa送song出chu自zi身shen編bian碼ma和he相xiang關guan信xin息xi被bei讀du取qu器qi讀du取qu並bing解jie碼ma後hou送song回hui到dao計ji算suan機ji中zhong進jin行xing有you關guan處chu理li,。識shi別bie工gong作zuo無wu須xu人ren工gong幹gan預yu,可ke工gong作zuo於yu各ge種zhong惡e劣lie環huan境jing。高gao性xing能neng的deRFID 讀寫器可以同時識別多個物體。
在工業生產線RFID 係統中,由於生產線現場的工作環境複雜,各類電磁幹擾源非常多,采集點的數量多,而通常的RFID 讀寫器,由於采用單片機為主控製器,運算能力弱,本地不具備數據分析和存儲能力,不具備較強的抗幹擾能力,對後台係統數據處理能力要求較高,而在工業生產線上,如果直接將所有采集點(通常多達數百點)所讀取的信息直接傳回服務器,由於要在服務器上shang進jin行xing繁fan重zhong的de數shu據ju分fen析xi和he幹gan擾rao排pai除chu,過guo大da的de數shu據ju量liang和he計ji算suan量liang很hen容rong易yi造zao成cheng服fu務wu器qi端duan的de信xin息xi堵du塞sai,進jin而er影ying響xiang係xi統tong的de穩wen定ding性xing。所suo以yi現xian有you的de解jie決jue方fang案an往wang往wang直zhi接jie使shi用yong價jia格ge昂ang貴gui的de工gong業yePC 機完成前端工作,但這樣無疑大大增加了總體的部署成本。本係統的設計思路見圖(1)通過功能強大的RFID 嵌入式終端,直接在本地完成複雜的標簽讀取,數據糾錯,幹擾排除,信息提取和數據保存等工作,僅將有效信息通過網絡傳輸給後台服務器,這樣就大大降低網絡通信的開銷,降低了服務器的資源占用,從而提高了係統整體的運行效率,提高了穩定性,增加了業務的靈活性。
圖(1) RFID 技術應用於生產線總體示意
二、係統的總體硬件設計
為了達到設計功能和環境需求,本係統底板采用了PCB 6 層設計,機殼加裝了電磁屏蔽網,另外專門配備了PCMCIA 接口用來外接RFID 讀寫模塊,采用的主要元件如下:
① 微處理器(MPU):針對終端需要 高速運算和數據庫操作的需要,並考慮到係統外圍設備的需求情況,本係統采用ARM9 核的SAMSUNG S3C2410 處理器。最高主頻可達203MHz。
② SDRAM 存儲部分采用兩顆Hynix 公司的HY57V561620CT 內存,大小為32M。
③ FLASH 存儲器采用SAMSUNG 公司的K9F1208UOM Nand Flash,大小為64M。
④ RFID 閱讀器模塊:采用了WJ 公司的MPR6000 係列產品,PCMCIA 接口。
⑤ 網絡通信模塊:采用了Realtek 8039 芯片,支持10M/100M 網絡通信。
三、係統的軟件係統介紹
係統的軟件部分主要由Linux 基本係統、RFID 標簽識別解析模塊、嵌入式數據庫操作模塊、網絡通信等模組成,軟件模塊關係如圖(2),下麵簡單介紹一下各模塊的功能和主要函數。
圖(2)軟件係統流程
① Linux 基本係統
由於Linux 成本低,代碼開放,穩定性高,多線程,支持USB、Flash 等多種外設,底層支持TCP/IP 網絡,故本係統將其移植到ARM9 上作為操作係統,內核版本號為2.4.1。由於文件係統涉及數據庫文檔保存,故采用了YAFFS 文件係統,另外就是針對本係統采用的外設和功能對Linux 內核作了相應裁減,以降低其內存占用。提高速度。
② RFID 標簽識別解析模塊
在設計中采用了WJ 公司PCMCIA 接口的RFID 讀寫器模塊MPR6000,該模塊通過UART-over-PC BUS 總線與嵌入式主機進行數據通信,其通信的特點如下:遵循命令-回複的通信模式,首先由係統向RFID 讀寫模塊發命令幀,讀寫模塊在識別到通信包頭的時候讀取命令字,並進行CRC jiucuo,ruguocuowudehuazehulvegaizhen,youxiaodihuazezhixingxiangguanzhiling,bingjiangduqudebiaoqianxinxijijieguobianchengfanhuishujuzhenchuangeixitong,xitongshoudaotongxinzhenshiyetongyangjinxingbaotoushibieheCRC 糾錯,如正確的話就進行解包並取得標簽相關信息。
命令包的格式如下
命令幀範例樣本如下:01 00 0D 11 00 1E 01 18 30 18 2E B7 69 CC通過解包後表示如下內容:從一號天線,以1E 的功率,讀取過濾碼(即標簽前幾位的ID 號)為30 18 2E B7 的RFID EPC Class0 標簽,幀長度為0D,CRC 糾錯碼為69CC。
返回幀的格式如下
返回幀範例樣本如下:01 00 11 01 01 30 18 2E B7 20 00 00 00 00 00 00 74 F6 通過解包後表示如下內容:讀取到一個96bit 的EPC 標簽,標簽ID 為 30 18 2E B7 20 00 00 00 00 00 00 00 ,讀取操作完成,數據幀長度為11,CRC 糾錯碼為74F6。
針對通信幀的特點設計的Linux 平台驅動軟件由以下幾個主要的子函數組成:
1、 unsigned short CalculateBlockCRC16(int len, unsigned char *pBuf);進行CRC計算和驗證
2、 int AppendCRC(void *pBuf, unsigned short CRC);將算出的CRC 值添加到請求包指定位置
3、 int UartSend(void *pBuf,int uart_num);將算出的CRC 及命令字發送到指定串口
4、 int UartRead(unsigned char *pBuf, int uart_num);從指定的串口讀入返回的數據包
5、 int CRCcheck(unsigned char *pBuf, unsigned short CRC);比對得到的CRC與數據包是否正確
6、 int ProcessTag(unsigned char *pBuf, unsigned char Tags[ ]);
處理得到的返回楨,分離出讀取到的條碼 編bian號hao,並bing存cun入ru數shu組zu進jin行xing暫zan存cun,為wei下xia一yi步bu數shu據ju庫ku存cun取qu做zuo好hao準zhun備bei除chu以yi上shang子zi函han數shu外wai,還hai有you其qi它ta相xiang應ying的de函han數shu來lai進jin行xing剔ti除chu幹gan擾rao數shu據ju包bao,處chu理li異yi常chang等deng工gong作zuo,經jing本ben模mo塊kuai處chu理li後hou,已yi經jing可ke以yi確que保bao可ke以yi過guo濾lv絕jue大da多duo部bu分fen的de幹gan擾rao信xin息xi了le,這zhe樣yang處chu理li完wan的de數shu據ju就jiu可ke以yi直zhi接jie進jin行xing數shu據ju庫ku記ji錄lu和he通tong過guo網絡傳輸給後台數據庫了。
③ 嵌入式數據庫操作模塊
嵌入式數據庫是整個係統的重要組成部分,在本係統中采用了開源的小型嵌入式數據庫SQLite,支持SQL 92 標準數據庫操作語句和事務,其工作流程如下:當讀取到條碼時,本模塊將條碼號、讀取時間、條碼內容、采集點編號,操作狀態等信息寫入本地數據庫,從而實現采集數據的本地初步存儲,數據庫在此列舉幾個主要的子函數如下:
1、int Query_Init(string *p_command, struct *p_DB_Status, int type);選擇基本的SQL 操作符符號和初始值設置,為執行數據庫操作做好準備。
2、int Query_Exec(int db,string *p_command,void (* p_fuction) (*str),(void *)&res);選擇數據庫,根據SQL 操作符進行數據庫操作,並將返回數據通過p_function 函數處理。
3、int Query_CallBack(void *p_data, int num, char **value, char **column);將數據庫操作返回的數據列表暫存到數組中,以待下一步處理。
除以上函數外,還預留了相應的接口用來完成前端數據庫和後台數據庫的同步,經測試,平均插入一條數據的時間<=0.01 秒,滿足了係統的即時性上的需求。
④ 網絡通信模塊
本係統的特色就是通過嵌入式Linux 操作係統的網絡底層支持,以多種網絡傳輸途徑,將數據和後台數據服務器進行數據傳輸。在本係統的網絡部分設計中,在局域網內利用Linux係統的提供的TCP/IP 協議支持,在編程中采用了動態與服務器建立連接的方法,在讀取到RFID 芯片並解碼出有效信息的時候,向服務器相應端口發送相應的Socket 請求信息,服務器端接受到請求後建立連接並新建Socket 端口來和終端進行通信;隻(zhi)有(you)在(zai)讀(du)取(qu)數(shu)據(ju)的(de)時(shi)候(hou)數(shu)據(ju)庫(ku)和(he)終(zhong)端(duan)間(jian)才(cai)產(chan)生(sheng)數(shu)據(ju)傳(chuan)輸(shu)和(he)占(zhan)用(yong)服(fu)務(wu)器(qi)端(duan)資(zi)源(yuan),從(cong)而(er)降(jiang)低(di)了(le)網(wang)絡(luo)占(zhan)有(you)率(lv)和(he)服(fu)務(wu)器(qi)端(duan)的(de)負(fu)荷(he),通(tong)信(xin)部(bu)分(fen)終(zhong)端(duan)客(ke)戶(hu)端(duan)部(bu)分(fen)的(de)主(zhu)要(yao)子(zi)函(han)數(shu)如(ru)下(xia):
1、int Net_Init(struct *p_net_Status,int type);初始化通信,根據選擇通信的類型建立和服務器端的網絡連接,取得服務器基本信息,並建立Socket 連接。
2、int Net_Send(string *p_data, int len, struct sockaddr *p_addr);發送指定大小字符串到連結的服務器端口。
3、int Net_Receive(string *p_buffer, int len, struct sockaddr *p_addr);從服務器接受數據(主要是接受指令)到指定緩衝區內。
由於Linux 底層提供了TCP 支持,可以保證通信的可靠性,大大降低了編程複雜度,所以隻要經過簡單的對Socket hanshujinxinglefengzhuanglaishixianshujuwangluochuanshu,peihefuwuqiduanchengxujikejiangbiaoqianxinxibaocundaohoutaidezhushujukuzhong,bingyouhoutaifuwuqigenjutongxinneirongjinxingshujubaocun,fasongkongzhiminglingdengcaozuo。
四、結論
本文中描述的嵌入式RFID 終端讀取器,在冰箱生產線中進行了實用,基本滿足了生產線RFID 係統對前端RFID 標簽數據采集、處理、通信方麵的要求,在功能上和穩定性方麵已經能夠替代現有的工業PC,因為采用了免費的開源Linux 操作係統和開源數據庫Sqlite,大大降低了總體成本,對在生產線上進行RFID 讀寫終端的大量部署非常有利。
本文作者創新點:通過設計使用功能強大的RFID 嵌入式讀寫終端,將抗幹擾、信息提取、日誌保存等功能在終端進行本地處理,從而大大降低了網絡通訊負擔和後台服務器占用,滿足了生產線上的工作環境和需求。
|