摘要:RFID系統具有數據量大、識別時間短、抗干擾能力強、保密性高、費用較低等優點,被廣泛應用于倉儲管理領域;首先介紹了RFID技術的工作原理、特點和優勢,然后對基于FRID技術的煙草出入庫系統進行功能設計及流程分析,最后,介紹了介紹了系統實現過程中的難點與相應的解決方案。
關鍵詞:射頻識別;RFID標簽;讀寫器;倉儲管理
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2011)04-0813-04
Design and Implementation of Tobacco Input/output Warehouse Management System Based on RFID
JIN Kang-fu1,2
(1.Jinhua Tobacco Monopoly Administration, Jinhua 321000, China; 2.Zhejiang Tobacco Corporation Jinhua Filiale, Jinhua 321000, China)
Abstract: RFID systems with the advantages such as large quantity of data, short recognition time , anti-interference capability ,confidentiality and lower cost, are widely used in Warehouse Management. first, the characteristic, construction and advantage of automated stereo warehouse and RFID are recommended. Secondly, system function analysis and work flow analysis are included in research work. Finally,it puts forward difficulties in the process of system implementation and the corresponding solution.
Key words: RFID; electronic tag; reader; warehouse management
近年來,國家煙草專賣局提出了打造數字煙草管理的目標:統一領導、科學發展、突出應用、信息共享,積極推進煙草企業從傳統商業模式向現代流通模式的轉變。傳統的煙草倉儲管理模式主要依賴于人工管理,在煙草物流管理、營銷管理、專賣管理及日常辦公中都存在著作業時間長、效率低、工作錯誤率高、信息傳遞慢等問題,把RFID技術應用于煙草出入庫可以有效解決上述問題,基于此,本文提出了一個基于FRID技術的煙草出入庫系統的應用解決方案。
1 RFID技術概述
射頻識別技術——RFID,是英文“Radio Frequency Identification”的縮寫,它綜合利用了集成電路技術、無線收發技術、電磁場理論的應用技術、數據編碼解碼技術等很多領域的相關技術,通過無線射頻的方式進行非接觸雙向數據通信,對目標加以識別并獲取相關數據,能同時識別多個高速運動的目標,且識別過程無需人工干預的非接觸式自動識別技術。
1.1 RFID 組成
典型的 RFID 系統主要由RFID標簽、讀寫器、RFID 中間件和數據庫服務器四部分組成,如圖1所示;其中, RFID標簽(Electronic Tag) 放在需要被識別的物體上,是由 IC芯片和無線通信天線組成,其內置有射頻天線,可以和讀寫器進行通信;讀寫器(Reader)在 RFID 系統中扮演著重要的角色,讀寫器是對RFID標簽進行讀/寫操作的設備,是RFID系統的關鍵終端,主要負責與RFID標簽的雙向通信,同時接受來自于主機系統的控制指令; 中間件是是一種面向消息的、可以接受應用軟件端發出的請求、對指定的一個或者多個讀寫器發起操作并接收、處理后向應用軟件返回結果數據的特殊化軟件,其位于客戶機服務器的操作系統之上,管理計算資源和網絡通信; 數據庫服務器具有強大的存儲和計算能力,所有RFID標簽和讀寫器的信息都存在數據庫中,這樣可以減輕標簽和讀寫器的負擔,加速讀寫速度。
1.2 RFID 基本原理
RFID 系統的基本原理是:當系統需要讀取標簽數據時,由讀寫器通過發射天線發送特定頻率的射頻信號,當RFID標簽進入有效工作區域時,其天線通過耦合產生感應電流,標簽內的芯片獲得能量被激活,使得RFID標簽將自身存儲的數據信息通過內置射頻天線發送出去;讀寫器的接收天線接收到從標簽發送來的調制信號,經天線調節器傳送到讀寫器,讀寫器對接收的信號進行解調和解碼,之后,將數據送到RFID中間件,RFID中間件將數據進行過濾、冗余、轉換等處理,將標簽內部的數據識別出來,然后,送至后臺主機系統進行相關處理;主機系統根據邏輯運算識別該標簽的身份,針對不同的設定做出相應的處理和控制,最終發出指令信號控制讀寫器完成不同的讀寫操作。
1.3 RFID 優點
RFID技術可以實現無須直接接觸、無須人工干預、無須光學可視即可實現一次識別多個物品,操作方便快捷,可以適應各種惡劣的環境等,它在物流倉儲中的運用將產生明顯的效果,具有入庫驗收時間短、效率高,查詢方便迅速,盤點準確快捷,適應環境能力強,穿透性好,揀貨效率高及物品存放安全等優點,總之,在整個過程中,使用 RFID 最大的好處就是提高日常運作效率,降低日常運作成本,提高企業倉儲管理的整體效率,這使得RFID技術可廣泛地應用于物流、航空、畜牧業、移動商務、票證管理、生產線自動化等各個行業,被認為是21世紀最具發展前景的十項技術之一。
2 煙草出入庫系統設計
系統開發采用 B/S 為核心的分布式網絡拓撲結構, 操作系統采用Windows XP , 程序開發運行環境采用 Microsoft VC++6.0 作為前臺開發工具軟件,后臺應用數據庫服務器軟件采用Microsoft SQL Server2005 。系統以RFID標簽作為產品識別和信息采集的信息源,在倉庫出入口處設置讀寫器對煙草的RFID標簽進行識別,通過SQL Server2005數據庫服務器獲取煙草的詳細信息進而生成入庫清單;在出庫時,生成出庫清單后可自動完成與訂單的校核工作。系統的數據流程圖如圖2所示。
2.1 到貨入庫掃碼
商業到貨入庫掃碼(只討論省外煙入庫)主要的任務是:對省外來的件煙逐件進行采集入庫,同時要將采集到的件煙條碼,按照在商業到貨入庫掃碼軟件設置好的組包數,組包寫入到垛信息中心數據庫里,用于垛信息寫入。
2.2 垛信息寫入
垛信息寫入主要的任務是:將在商業到貨入庫掃碼環節采集入庫并且組包好的省外煙,在碼垛好后,用藍牙掃描槍采集某一條碼包里的任意一件煙的件碼(即對應托盤上實物上的任意一件煙的件碼),從垛信息中心數據庫中調出此托盤上實物對應的條碼包,通過垛信息寫入軟件控制RFID固定設備,寫入到托盤上的RFID標簽里面,以方便分揀領用時整托盤出庫掃碼。
2.3 分揀領用出庫環節
分揀領用出庫的主要任務是:通過分揀領用出庫掃碼軟件控制RFID固定讀寫器,讀取托盤上的RFID標簽里件煙信息,或者通過PDA采集單件煙的件碼,再將信息會送給分揀領用出庫掃碼軟件,達到分揀出庫掃碼的效果。
3 系統實現關鍵技術
3.1 數據庫連接
系統采用關系數據庫SQL server2005作為數據庫結構設計,SQL server2005數據庫是由表格組成的,它以關系模型及二維表格形式組織和存放數據。在數據表結構中,數據以行和列的形式存儲在數據庫中,行用于存儲數據屬性信息,列用于存儲數據的屬性。系統采用ADO鏈接SQL server2005,方法如下:
1) 引入ADO庫文件
使用ADO前必須在工程的stdafx.h頭文件里用直接引入符號#import引入ADO庫文件,以使編譯器能正確編譯。代碼如下所示:
用#import引入ADO庫文件
#import \"c:\\program files\\common files\\system\\ado\\msado15.dll\"no_namespaces rename(\"EOF\" adoEOF\")
2) 初始化OLE/COM庫環境
由于ADO庫是一組COM動態庫,所以,在調用ADO前,必須初始化OLE/COM庫環境。代碼如下所示:
BOOL CMyAdoTestApp::InitInstance()
{
if(!AfxOleInit())
{
AfxMessageBox(“初始化OLE出錯!”);
return FALSE;
}
……
}
3) 利用建立好的連接,通過Connection、Command對象執行SQL命令,或利用Recordset對象取得結果記錄集進行查詢、處理。
4) 使用完畢后關閉連接釋放對象。
3.2 數據通信
計算機通過串口與讀寫器連接,實現RFID數據采集。實現過程中是使用MsComm控件編程方法實現了串口通信。具體實現方法如下:打開“Project->Add To Project->Components and Controls->Registered Activex Controls”,然后選擇控件:Microsoft Communication Control,version 6.0插入到當前的工程中。這樣就將類 CMSComm 的相關文件 mscomm.cpp 和 mscomm.h 一并加入到了工程中。
1) 定義串口對象:
CMSComm m_MSComm;
2) 串口初始化
DWORD style=WS_VISIBLE;
if(!m_MSComm.Create(NULL,style,CRect(0,0,0,0),this,IDC_MSCOMM));
{
TRACE0(\"創建OLE失敗!\\");
return -1;
}
if(m_MSComm.GetPortOpen()) //如果串口是打開的,則行關閉串口
{
m_MSComm.SetPortOpen(FALSE);
}
m_MSComm.SetCommPort(1); //選擇COM1
m_MSComm.SetInputMode(1); //以二進制方式讀寫數據
m_MSComm.SetSettings(\"9600,n,8,1\"); //波特率9600無檢驗位,8個數據位,1個停止位
m_MSComm.SetRThreshold(1); //接收緩沖區有1個及1個以上字符時,將引發接收數據的OnComm事件
m_MSComm.SetInBufferSize(1024); //接收緩沖區
m_MSComm.SetOutBufferSize(1024);//發送緩沖區
m_MSComm.SetInputLen(0); //設置當前接收區數據長度為0,表示全部讀取
if(!m_MSComm.GetPortOpen())
{
m_MSComm.SetPortOpen(TRUE);
}
Else
{
m_MSComm.SetOutBufferCount(0);
AfxMessageBox(“打開串口1出錯!”);
}
3) 串口數據讀寫:
MSComm 類的讀寫函數比較簡單:GetInput()和SetOutput()。
//發數據:在對話框對加入 按鈕 控件并給你添加消息
void CTest_mscommDlg::OnSend()
{
int i,Count;
Count=m_SendData.GetLength(); // m_SendData為全局變量,待發送的數據
CByteArray m_Array;
m_Array.RemoveAll();
m_Array.SetSize(Count);
for(i=0;im_Array.SetAt(i,m_SendData[i]);
m_MSComm.SetOutput(COleVariant(m_Array));
}
//收數據:給串口控件添加消息
void CTest_mscommDlg::OnOnCommMscomm()
{
VARIANT m_input;
char *str,*str1;
int k,nEvent,i;
CString str2,m_RcvData;
nEvent=m_Comm.GetCommEvent();
if(nEvent==2)
{
k=m_Comm.GetInBufferCount(); //接收緩沖區的字符數目
if(k>0)
{
m_input=m_Comm.GetInput();
str=(char*)(unsigned char*)m_input.parray->pvData;
}
i=0;
str1=str;
while(i { i++; str1++; } *str1=''''\\0''''; str2=(const char*)str; //清除字符串中的不必要字符 m_RcvData=(const char *)str; } //數據顯示處理 } 3.3 讀標簽設計 讀標簽是系統開發中的最常用功能,也是最關鍵的功能, 其中,實現標簽號讀取的程序代碼如下: unsigned char CTagShu;//標簽數變量 unsigned char CTagHao; //標簽號數組 unsigned char QValue; unsigned char CBank, Coffset,CTagLen; //標簽號的塊地址,與塊內偏移量,以及標簽長度. unsigned char CMatchLen; //用于匹配的長為0,即不匹配標簽,對所有標簽都進行操作。 unsigned char CMatch[16]; //匹配數據變量數組。 int i; // 參數初始化 CTagShu=0x00; QValue = 2; CBank = 1; Coffset=0; CTagLen = 12; CMatchLen = 0; //啟動多標簽讀。 status =SeRFIDGen2_MultiRead(g_RAddr,QValue,CBank,Coffset,CTagLen,CMatchLen,CMatch); //參數說明: g_hCom:傳入串口句柄,g_RAddr:讀寫器地址 if (status==ERR_NONE) { SeRFIDGen2_End(g_RAddr); SeRFIDpub_BufGetTagNum(g_RAddr,CTagShu); for(i=0;i { //從讀寫器緩沖區中取一個標簽數據,同時讀寫器刪除該組標簽數據(CTagHao[])。 status = SeRFIDpub_BufGetOneAndClear(g_RAddr, CTagHao); if (status==ERR_NONE) { printf(“標簽號為:”); for(int i=1;i 開始 printf(\"%02X \",CTagHao[i]); //輸出標簽號 } } } 4 結束語 作為無線識別技術發展的最新成果,RFID技術以其支持快速讀寫、非可視識別、移動識別、多目標識別、定位及長期跟蹤管理等多方面的優勢,顯現出巨大的市場潛力,為供應鏈過程中生產、倉儲、加工、運輸等各個環節都帶來的效率的極大提升,本文設計了一種基于RFID的煙草出入庫管理系統,通過該系統可以自動記錄入庫、出庫信息,使倉儲管理中心可以實時地了解貨物位置、貨物存儲情況等,提高倉儲管理的效率。 參考文獻: [1] 寧煥生,張彥.RFID與物聯網射頻、中間件、解析與服務[M].北京:電子工業出版社,2008. [2] 康東.射頻識別(RFID)核心技術與典型應用開發案例[M].北京:人民郵電出版社,2008. [3] 單承贛.射頻識別(RFID)原理與應用[M].北京:電子工業出版社,2008. [4] 高飛.物聯網核心技術——RFID原理與應用[M].北京:人民郵電出版社,2010.