陳 勇,王宏偉
(重慶郵電大學網絡化控制與智能儀器儀表教育部重點實驗室,重慶400065)
隨著現代物流建設的發展,倉儲管理在物流管理工作中的重要性日益提高,已成為企業物流管理的核心部分。目前我國倉儲管理基本處于人工管理或半自動化管理,即傳統的數據采集方式,靠人員現場手工記錄,并且手工錄入計算機內,特別是對于一些單體大型倉庫、多倉庫存儲或面積較大的露天場地等,存在產品信息難以實時獲取,人力勞動的重復以及差錯的出現機率增大。此外,在一些以機械設計加工為主的企業倉儲,在生產加工過程中存在的毛坯、半成品、成品等需要管理,這些產品型號、品種繁多,庫房產品清理、排查、存儲等存在一系列問題[1-2]。為了提高倉儲管理的高效性,通過射頻識別實現對物料、訂單、人員、設備等信息的實時采集與現場處理,設計多功能便攜式數據終端,采集的數據可以實時的與控制平臺數據庫相交換,這樣,既可實現采集業務數據,又能現場進行較復雜的業務處理,避免人工錄入出錯的可能,提高工作效率。將便攜式終端應用于智能倉儲管理系統,可以解決企業倉儲的一些實際性問題。
該便攜式終端主要以射頻技術(radio frequency identification,RFID)為基礎,由嵌入式主控模塊、人機交互模塊、傳感器輸入模塊、以及與PC機或其他通信設備的通訊模塊組成。
根據實際所需解決的庫房管理問題,該便攜式終端系統設計如圖1所示。

圖1 系統方案設計Fig.1 System design
主要功能包括:
①產品清點。該系統設計以電子標簽作為產品識別和信息采集的技術紐帶,通過手持RFID讀寫器對產品進行自動識別,與傳統的識別方式相比具有無需直接接觸、無需人工干預即可完成數據比對等優點。針對小體積而且規則零件可以采用紅外脈沖計數清點功能;對于大型零件產品,采用壓力傳感器,稱其質量來清點零件數目。這些功能可以通過無線或有線方式接入各類傳感器設備。
②入庫/出庫管理。入庫時對于新增的貨物需要登記產品的名稱、型號、入庫數量、放置位置、產品單位重量等。如果原有數據庫存在該產品則只需輸入產品型號,然后增加其庫存數目即可。出庫時需要登記出庫產品型號、出庫數量以及領取人編號。
③詳細入出庫記錄。在產品入庫、出庫的時候系統都會自動生成一個記錄數據表,來記錄每一次入庫出庫產品的型號、數量、入庫出庫時間(由系統自動獲取)以及領取人編號。
④產品快速查找、定位。需要查找某種產品時,只需選擇產品查詢菜單,即可在系統的引導下,輸入需要查找的產品的基本信息,就可以準確查詢,同時如果在庫房的每個存放位置安裝無線信號接收裝置,則可以發送無線信號點亮貨物具體位置的信號燈。這樣管理員就能很快找到所需要的貨物。
⑤庫房環境溫度、濕度檢測。
⑥數據的實時更新。操作員在任何地點都可以及時通過無線傳輸得到由系統傳過來的出入庫預報通知,根據手持終端的提示進行出入庫操作。這樣就避免了操作員頻繁的穿梭于計算機與庫房之間來處理各種出入庫單據。該終端還可以與本地計算機數據中心進行數據實時交換,同時,在建立計算機互聯網絡基礎上能夠實現物品信息的實時共享和互通,將會把倉儲管理帶入物聯網應用領域。運用物聯網技術,實現企業倉儲管理的智能化,可以有效地掌握原料、產品的流向,避免發貨失誤等[3-4]。
系統硬件框圖如圖2所示。

圖2 系統硬件設計Fig.2 Hardware design
本系統核心處理器采用ARM9芯片S3C2440,是三星公司設計的資源豐富、模塊體積小、擴展性較強的基于ARM920T核的微處理器,芯片上集成了分開的16KB指令/數據Cache、外部存儲器控制器、集成LCD控制器、4通道DMA、3通道UART、IIC總線等。外圍接有人機交互模塊、存儲器模塊、通訊模塊、傳感器輸入模塊、電源管理以及實時時鐘[5]。其中,人機交互模塊主要是通過觸摸屏或鍵盤按鍵的響應向系統發出不同的用戶請求,然后通過LCD液晶顯示屏將處理結果以直觀的方式顯示給用戶;而存儲管理模塊主要是由SDRAM和FLASH組成,它們構建了Linux嵌入式操作系統運行的內存環境以及文件系統、數據庫的存儲介質;通訊模塊則主要包括有線/無線傳輸通訊子模塊,可以根據實際需要完成數據的交互;傳感器輸入模塊主要有RFID掃描輸入模塊、庫房溫濕度監測模塊以及紅外脈沖計數傳感器和壓力傳感器模塊,RFID掃描用于錄入產品的進出信息,將進出信息送給ARM主控單元,再將信息存儲于數據庫文件,同樣,溫濕度檢測以及庫房盤點計數的操作都是通過外圍傳感器獲取信息,經主控單元處理后反應到LCD界面中。
本系統的軟件包括操作系統軟件和應用程序兩部分。應用程序控制著系統的運作和行為;而操作系統控制著應用程序編程與硬件的交互作用。嵌入式操作系統平臺的構建主要包括嵌入式引導程序、操作系統內核、文件系統的實現等[6]。基于Qt/E的智能倉儲管理便攜式終端的軟件系統可分為以下5個層次,如圖3所示。

圖3 系統軟件結構Fig.3 Software framework
①BootLoader,是在操作系統啟動時所運行的第一個程序,嵌入式系統通過BootLoader初始化硬件設備、建立系統內存空間映射圖,從而將系統的軟硬件環境帶到一個合適的狀態,為最終調用操作系統內核做好準備。
②操作系統內核,本系統采用的是Linux操作系統,它是整個嵌入式軟件的核心,設備驅動程序是連接硬件設備與內核的紐帶。
③文件系統,內核啟動之后的運行需要根文件系統的支持。內核需要從文件系統中裝載和運行內核模塊以及應用程序。
④QT/Embedded,QT/Embedded是Qt的組成部分之一,是一個多平臺的C++圖形界面應用程序框架,有可視化的圖形化開發界面、界面美觀、功能較強,適合于做復雜的應用程序等特點[7]。它用于開發我們所需要的用戶圖形交互界面應用程序。
⑤用戶應用程序的開發,主要是QT應用程序的編寫,可以通過Qt-creator開發平臺來開發QT應用程序。
RFID,即射頻識別,是一種非接觸式的自動識別技術,通過射頻信號自動識別目標對象并獲取相關數據,識別工作無須人工干預,可在許多惡劣環境下正常工作。將RFID模塊加裝至便攜式終端,其主要功能為對貨物的出庫、入庫、清點貨物的信息進行采集、傳輸[8]。
本系統采用的是超高頻915M遠距離一體式讀卡器,首先在貨物上貼上RFID電子標簽,由于這種遠距離一體式讀寫器既可以讀取單個標簽也可以一次性批量讀取多個標簽,因此可以實現對貨物的個體管理或者批量管理。當貨物進入RFID讀寫天線范圍后,標簽接受讀寫器發出的射頻信號,憑借感應電流所獲得的能量發送出存儲在芯片中的信息,RFID讀寫器讀取信息后,通過RS232接口將數據傳送至ARM主控模塊中。該RFID讀寫器通信參數的默認設置為波特率9 600,8位數據位,1位停止位和校驗方式。在QT應用程序中首先需要打開串口ttySAC1,設置與讀寫器一致的通信參數,再根據Reader通訊協議,給讀寫器發送讀寫指令,RFID讀寫器接收后根據命令來對標簽進行讀寫。其命令幀格式如圖4所示。

圖4 RFID讀寫器命令幀格式Fig.4 Command frame format of RFID reader
幀格式說明:
· Packet Type是包類型域,命令幀包類型固定為0xA0。
· Length是包長域,表示Length域后幀中字節數。
· Command Data是命令幀中的參數域。
· Status是狀態域。
· Check是校驗和域,規定校驗范圍是從包類型域到參數域最后一個字節為止所有字節的校驗和。讀寫器接收到命令幀后需要計算校驗和來檢錯。
利用RFID讀出的電子標簽的ID號存入創建好的數據庫中,同時也可與已經存在的信息進行查詢比較,進行入庫或出庫處理。
嵌入式人機界面決定了對數據庫的需求,主要包括體積小巧、功能完善、源碼開放等。目前嵌入式數據庫有很多,比如 Oracle、Sybase、MySQL、SQLite等[9]。本便攜式終端所選擇的是SQLite類型數據庫,SQLite是一種小型嵌入式數據庫。SQLite是一個小型的C語言鏈接庫,這個鏈接庫本身就完全包含數據庫引擎的功能,可以方便地運用于嵌入式系統中。SQLite支持大多數標準的SQL92語句,支持多表、索引、事務、視圖和觸發等一系列用戶接口及驅動。簡單易用,運行速度快,同時提供了豐富的數據庫接口[10]。
在Qt應用程序開發中我們可以利用QSQLITE數據庫驅動來添加SQLite數據庫文件。
QsqlDatabasedb=QSqlDatabase:: addDatabase(“QSQLITE”);//添加數據庫驅動
db.setDatabaseName(“kufang.db:”);
db.open()//打開數據庫
QSqlQuery query;//以下執行相關QSL語句
query.exec(QObject::tr("create table ku(型號 Integer,名稱 varchaer(20),數量 Integer,放置位置varchaer
(20),單重varchar(20))"));//創建數據庫文件表格
以入庫的數據更新為例,入庫時需要錄入的信息一般有產品名稱、型號、數量、放置位置、單位重量等。
入庫實現程序流程圖如圖5所示。

圖5 入庫管理程序流程圖Fig.5 Process flow chart of storage
①如果檢測到所輸入的產品型號在原始數據庫中已存在,則系統會自動識別并在原有數據上增加其庫存數量。
b=rkcount.toInt(&ok,10);//利用 Qstring::toInt()將數量輸入lineEdit內容轉為十進制數
a=query.value(2).toInt();//提取表中庫存量
c=a+b;//算出增加后的值
query.prepare("update ku set Count=?where Type='"+rktype+"'");//更新數據表中的庫存量
query.bindValue(0,c);
query.exec();
②如果數據庫中沒有原始數據,則插入新的產品信息。
query.exec("insert into ku values()");
③在更新完產品信息后,我們需要將該操作記錄到詳細記錄列表,此時需要記錄的是此次入庫產品的型號、數量以及入庫時間。
QDateTime time=QDateTime::currentDateTime();
QString str=time.toString("yyyy-MM-dd hh:mm:ss dddd");//獲取系統時間
QSqlQuery query2(db2);//對詳細記錄數據庫進行操作
完成庫存數據的存儲后,為了提高該終端的智能便捷性,在需要查找某種產品時,打開快速查找界面,輸入需要查找的產品名稱或型號,就可以準確查詢到其基本信息,界面設計如圖6所示。

圖6 快速查找界面設計Fig.6 Interface design of quick search
同時,也可以增加定位功能按鈕,在此我們增加nRF905無線收發模塊,將所查找的型號以字符串通過nRF905發送給接收裝置的nRF905模塊,在庫房的一些存放位置安裝無線信號接收裝置,接收裝置的nRF905由單片機控制,如果收到的型號屬于一段范圍內,則單片機控制點亮具體位置的LED燈,如圖7所示,管理員通過定位能很快找到所需要的貨物。

圖7 nRF905無線收發模塊Fig.7 Wireless transmission module of nRF905
系統通過測試,實現了產品信息的RFID識別出入庫、存儲、準確查找定位,數據共享等功能。其交互式觸摸控制平臺測試結果如圖8所示。
點擊產品入庫操作,執行相應的功能模塊即可實現系統設計功能,圖9為產品入庫功能設計實現結果。


利用Qt/E所設計的便攜式終端可以有效的解決各種環境下的倉儲管理系統對數據的采集、檢索、存檔和統計的實時化,使管理者更加準確高效的掌握倉儲信息,以及對貨物準確快速的查找定位。將此便攜式終端根據企業的需求應用于實際生產中,使管理者能及時、準確、全面地了解到庫房物品流通情況,減少了信息查詢時間,降低了成本,提高了精度,將會給企業的管理帶來顯著的效果。
[1]董彥龍.我國倉儲物流現狀及其優化[J].商業時代,2006,16:24-26.DONG Yan-long.The status quo and optimization of China's logistics[J].Commercial Times,2006,16:24-26.
[2]秦惠林,朱杰.便攜式終端在智能倉儲管理系統中的應用[J].中國流通經濟,2006,7:38-40.QIN Hui-lin,ZHU Jie.The application of portable terminal in the intelligent warehouse management system[J].China Business and Market,2006,7:38-40.
[3]李忠成.智能倉儲物聯網的設計與實現[J].計算機系統應用.2011,20(7):11-15.LI Zhong-cheng.Design and Implementation of the Internet of Things in Intelligent Warehouse Management[J].Computer systems & applications,2011,20(7):11-15.
[4]李玲娟.IoT的數據管理與智能處理[J].中興通訊技術,2011,17(1):38-41.LI Ling-jian.Data Management and Intelligent Processing in IoT[J].ZTE communications,2011,17(1):38-41.
[5]何劍鋒,栗楠.基于ARM 920T嵌入式Linux/Qt4的點菜系統設計[J].計算機應用,2011(6):43-46.HE Jian-feng,LI Nan.Design of Meal-ordering System Based on ARM920T Embedded Linux/Qt4[J].Journal of Computer Applications,2011(6):43-46.
[6]王浩南,劉益成.基于嵌入式Linux系統下QT開發[J].電腦開發與應用,2010(1):11-13.WANG Hao-nan,LIU Yi-cheng.Development of Qt based on Embedded Linux[J].Computer development& application,2010(1):11-13.
[7]宋榮.基于Qt/Embedded的嵌入式系統GUI開發[J].機電工程,2009,26(4):90-92.SONG Rong.Development of embedded system GUI based on Qt/Embedded[J].Mechanical & Electrical Engineering Magazine,2009,26(4):90-92.
[8]李章林,盧桂章.基于RFID的廣義物流中的移動智能終端設計[J].自動化與儀表,2007,22(1):1-4.LI Zhang-lin,LU Gui-zhang.Design for the Smart Portable Terminal in Broad-sense Supply Chain Based on RFID[J].Automation & Instrumentation,2007,22(1):1-4.
[9]曾云,胡頻.嵌入式數據庫在QT中的應用研究與實現[J].國外電子測量技術,2010,9(9):73-76.ZENG Yun,HU Pin.Study and application of embedded database in QT software[J].Foreign Electronic Measurement Technology,2010,9(9):73-76.
[10]MICHAEL Owens.The Definitive Guide to SQLite[M].US:Apress,2006,5:35-40.