rfid仓库管理系统_第1页
rfid仓库管理系统_第2页
rfid仓库管理系统_第3页
rfid仓库管理系统_第4页
rfid仓库管理系统_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于RFID的仓储管理系统——移动设备应用程序开发WAREHOUSEMANAGEMENTSYSTEMBASEDONRFID——SMARTDEVICEAPPLICATIONDEVELOPMENT专业:姓名:指导教师姓名:申请学位级别:学士论文提交日期:学位授予单位:天津科技大学摘要随着供应链管理的快速发展,作为微观物流最重要表现形式的仓储管理的高效运作机制越来越受到重视。货物在仓库中的流通速度直接影响到其在整个供应链中的流通,而提高仓库中货物的流通速度和工人的工作效率的根本就是优化和配置仓储管理中的流程。仓储管理是指从收货、入库、检验、码放、存储直到出库的流程过程。一般而言,信息化的发展使每个物流企业都有一套自己的仓储管理系统,但仅停留在人工信息阶段,即对收货、入库、出库、盘点等操作进行人工干预,这就造成了操作效率低出错率高的弊端。因此仓储管理自动化是非常值得研究的。RFID是当前在供应领域最为热门的话题,RFID不但可以满足一般的数据读写功能,还具有穿透性、环境无关性以及可重复使用等特性,这些特性可以充分满足仓储管理的需要。本系统将要实现仓储管理中各个环节的自动化,整个入货和出货环节的信息获取完全由RFID射频器扫描完成,从最大程度上提高仓库的利用率与工作人员的工作效率。本文在详细分析了用户需求的基础上,研究了基于RFID技术的仓储管理系统移动设备应用程序的设计和实现。关键词:WMS;WindowsMobile;SyncServicesforADO.NET;RFIDABSTRACTWiththedevelopmentofsupplychainmanagementasthemostimportantmanifestationofmicrologistics,theefficientoperationofwarehousemanagementmechanismhavebeenobtainingmoreandmoreattentioninthisfield.Thecirculationspeedofthegoodsinthewarehouseaffectitscirculationinthewholesupplychaincurrently.Toimprovethecirculationspeedofthegoodsinthewarehouseandtheefficiencyoftheworkersismostdependonoptimizationandconfigurationoftheprocessinthestoragemanagement.Warehousemanagementistheprocessfromgoodsreception,goodsstorage,checking,warehousingtothegoodsrelease.Generallyspeaking,thedevelopmentofinformationtechnologyhasenabledeachlogisticscorporationtomaintainasetofWarehouseManagementSystemontheirown.ButsuchsystemstillremainsatthestageofInformationartificialanglewhichis,tointroducemanualworkstoprocedureslikereceipt,storage,release,andcheckmanagement.Thisisleadtotheun-efficiencyandthehighrateoferroroccurring.Soitisworthyofstudyingtheautomationofwarehousemanagement.RFIDisthehottesttopicinSupplyChainfield.RFIDnotonlyhasthefunctionofgeneralreadandwritebutalsohasthecharacteristicsofusedrepeatedly,transparentreadingandenvironmentfreewhichcantakeasthemostsuitablefacilitytobeusedinthewholesupplychaintotrackingproducts.Thissystemistorealizetheautomationofeachlinkinthewarehousemanagement.TheinformationacquisitionofthereceptionandreleaseofthegoodswillbedonewiththeRFIDradiofrequency.Thesystemwillmostlyimprovetheutilizationratioofwarehouseandtheefficiencyoftheworkers.ThispaperbasedonadetailedanalysisofnecessaryofcustomsandstudythedesigningandrealizationofsmartdeviceapplicationwhichbasedontheRFIDwarehousemanagement.Keywords:WMS;WindowsMobile;SyncServicesforADO.NET;RFID天津科技大学2009届本科生毕业设计目录TOC\o"1-2"\h\z\u第一章引言 1第一节课题背景及意义 1第二节射频识别技术及其应用领域 1第二章 系统开发环境及关键技术 3第一节系统开发环境 3第二节关键技术 5第三章系统总体设计 10第一节系统需求分析 10第二节系统总体结构 14第三节移动设备系统功能分析及模块设计 16第四章系统详细设计 17第一节数据库设计 17第二节与底层RFID射频读卡器通信的实现 21第三节上层托管代码对底层DLL导出函数的调用 26第四节数据同步的实现 27第五节手持设备程序设计与实现 29第六节叉车移动PC程序设计与实现 33第五章结束语 37参考文献 38致谢 39第一章引言第一节课题背景及意义市场竞争日益激烈,提高生产效率、降低运营成本,对于企业来说至关重要。仓储管理广泛应用于各个行业,设计及建立整套的仓储管理流程,提高仓储周转率,减少运营资金的占用,使冻结的资产变成现金,减少由于仓储淘汰所造成的成本,是为企业提高生产效率的重要环节[1]。目前,仓储管理系统通常使用条码标签或是人工仓储管理单据等方式支持自有的仓储管理。但是条码的易复制、不防污、不防潮等特点,和人工书写单据的繁琐性,容易造成人为损失,使得现在国内的仓储管理始终存在着缺陷[2]。随着无线射频电子标签这一最新科技产品的投入应用,可以从根本上解决上述的问题。基于射频识别(RFID)技术,主要完成的任务是通过自动化增加生产力并限制人工干涉,避免人为错误;获利快速的后勤管理,取得即时的供应链动态资料,实现供应链之完全可视化,加速物流的运送并改善对运送的掌握;减少多余的资料录入并且提高资料的正确性。其优势有:缩短作业流程;改善盘点作业质量;增大配送中心的吞吐量;降低运转费用;信息的传送更加迅速、准确,实现远距离、动态的自动识别、一次识别多个标签。[3]-[6]第二节射频识别技术及其应用领域(一)射频识别技术简介无线射频识别是一种非接触式的自动识别技术,它通过射频识别信号自动识别目标对象并获得相关的数据,识别工作无需人工干预,可工作于各种恶劣环境。RFID技术可识别高速运动的物体并可用于识别多个标签,操作快捷方便。概括起来说是一种应用电磁波频谱,以非接触无视觉方式,传递特别识别信息的。[7]技术。无线射频识别的距离从几厘米到几十米,且根据读写的方式,可以输入数千字节的信息,同时,还具有极高的保密性和不可伪造性。[8]-[10]最基本的RFID系统由标签、阅读器和天线等三部分组成。标签(Tag)由耦合元件及芯片组成,每个标签具有唯一的电子编码,附着在物体上标识目标对象;阅读器(Reader)是读取(有时还可以写入)标签信息的设备,可设计为手持式或固定式;天线(Antenna)在标签和阅读器间传递射频信号。RFID系统的工作原理是:阅读器通过天线发送出一定频率的射频信号;当RFID标签进入阅读器工作场时,其天线产生感应电流,从而RFID标签获得能量被激活并向阅读器发送出自身编码等信息[11]。阅读器接收到来自标签的载波信号,对接收的信号进行解调和解码后送至计算机主机进行处理;计算机系统根据逻辑运算判断该标签的合法性,针对不同的设定做出相应的处理和控制,发出指令信号;RFID标签的数据解调部分从接收到的射频脉冲中解调出数据并送到控制逻辑,控制逻辑接收指令完成存储、发送数据或其他操作。与条码技术相比,RFID具有明显的优势。条形码是只读的,需要对准目标、一次只能读一个而且容易破损;而RFID标签是可擦写的,使用时不需要对准目标、可同时读取多个、存储量大、坚固可全天候使用,不需人力介入操作。从概念上来说,两者很相似,但两者之间最大的区别是条形码是“可视技术”,扫描仪在人的指导下工作,只能接收它视野范围内的条形码。相比之下,RFID不要求看见目标。RFID标签只要在读写器的作用范围内就可以被读取。RFID读写器对快速移动中的RFID标签具有“群采”能力,也就是说可同时辨识读取数个快速移动中的RFID标签,而条形码则必须逐一静态扫描[12]。RFID读写器还能够穿透纸张、木材和塑料等非金属、非透明的材质,进行穿透性通信,而条形码扫描仪则必须在没有物体阻挡的情况下,才可以辨读条形码。RFID标签巨大的信息存储量也是条形码不可比肩的,RFID标签最大容量有数兆字符,而二维条形码最大的容量是2000至3000字符[13]。(二)射频识别技术应用领域物流:物流过程中的货物追踪,信息自动采集,仓储应用,港口应用,邮政,快递。零售:商品的销售数据实时统计,补货,防盗。制造业:生产数据的实时监控,质量追踪,自动化生产。服装业:自动化生产,仓储管理,品牌管理,单品管理,渠道管理。医疗:医疗器械管理,病人身份识别,婴儿防盗。身份识别:电子护照,身份证,学生证等各种电子证件。防伪:贵重物品(烟,酒,药品)的防伪,票证的防伪等。资产管理:各类资产(贵重的或数量大相似性高的或危险品等)交通:高速不停车,出租车管理,公交车枢纽管理,铁路机车识别等。食品:水果,蔬菜,生鲜,食品等保鲜度管理图书馆:书店,图书馆,出版社等应用汽车:制造,防盗,定位,车钥匙航空:制造,旅客机票,行李包裹追踪军事:弹药,枪支,物资,人员,卡车等识别与追踪第二章 系统开发环境及关键技术系统的开发环境采用Microsoft公司的可视化开发环境VisualStdio2008作为主要开发工具。系统的移动设备部分建立在.NETCompactFramework框架之上,利用此框架提供的托管类编写移动设备窗体,通过建立C++的dll工程来实现手持设备与底层射频器的通信,最后使用平台调用服务(PlatformInvocationServices),完成托管代码与非托管代码的交互操作。移动数据库采用SQLServerCompact3.5.移动设备模拟器采用WindowsMobile6模拟器。第一节系统开发环境(一)VS2008开发环境简介VisualStdio2008是微软公司推出的开发环境。是目前最流行的windows平台应用程序开发环境。VisualStudio2008在三个方面为开发人员提供了关键改进:快速的应用程序开发、高效的团队协作、突破性的用户体验。VisualStudio2008是一套完整的开发工具,用于生成ASP.NETWeb应用程序、XMLWebservices、桌面应用程序和移动应用程序。VisualBasic、VisualC#和VisualC++都使用相同的集成开发环境(IDE),这样就能够进行工具共享,并能够轻松地创建混合语言解决方案。另外,这些语言使用.NETFramework的功能,它提供了可简化ASPWeb应用程序和XMLWebservices开发的关键技术。在08的版本中特别加入了“本地数据缓存”项目以支持SyncServicesforADO.NET的数据同步技术。.NETFramework提供了用于解决常见编程任务的构建基块(预制的软件),从而能够快速构造具有出色的最终用户体验的紧密联系的应用程序。在.NETFramework模型业务流程上有效构建的紧密联系的应用程序有利于在异类环境中实现系统集成。.NETFramework3.5是在.NETFramework3.0的基础上构建的更高版本。得到增强的功能领域包括基类库、Windowsworkflowfoundation、WindowsCommunicationFoundation、WindowsPresentationFoundation和WindowsCardSpace此套移动设备应用程序就是建立在vs2008下精简版的.NETFramework3.5框架之上。(二)本系统移动设备应用程序开发平台1..NETFramework精简版类库图2-1.NETCompactFramework框架.NetCompactFramework,顾名思义,即精简版的.Net开发框架(如图2-1)。他和SmartDeviceExtensions(SDE)forVisualStudio.NET一起,将更强的开发能力和强大的编程平台带到了手持设备的开发工作中[14]。.NETCompactFramework是一个硬件无关的运行环境,他主要用在手持设备上,包括:个人数据助理(PDAs),移动电话,机顶盒和各种运行WindowCE.NET操作系统嵌入式设备。是专为移动设备设计的便携式小型.NETCLR具有.NETFramework子集的属性,支持多种语言开发。.NETFramework精简版简化了在智能设备上开发应用程序的过程。它有两个主要组件:公共语言运行库和.NETFramework精简版类库[15]。运行时是.NETFramework精简版的基础,它负责在执行时管理代码,提供内存管理和线程管理等核心服务,同时又确保代码的安全性和准确性。针对运行时的代码称为托管代码,不针对运行时的代码称为非托管代码或本机代码。就象其他面向对象的类库一样,.NETFramework精简版类型可用于完成许多常见的编程任务,包括界面设计、利用XML、数据库访问、线程管理和文件输入/输出等。2.SQLServerCompact3.5MicrosoftSQLServerCompact3.5是一种压缩数据库,很适合嵌入到移动应用程序和桌面应用程序中。SQLServerCompact3.5为开发本机和托管应用程序的开发人员提供了与其他SQLServer版本通用的编程模型。SQLServerCompact3.5只需占用很少的空间即可提供关系数据库功能:强大的数据存储、优化查询处理器以及可靠、可扩展的连接。SQLServerCompact3.5是可以部署在智能设备和计算机上的压缩数据库。通过手动复制和安装.cab文件,或者通过MicrosoftVisualStudio2008,可以将SQLServerCompact3.5部署在智能设备上。对于计算机,SQLServerCompact3.5具有单独的安装程序。(MicrosoftSQLServerCompact3.5体系结构如图2-2所示。)图2-2SQLServerCompact3.5体系结构在SQLServerCompact3.5体系结构中,客户端环境是由一个或多个支持的设备组成的,而应用程序和SQLServerCompact3.5在这些设备上进行部署。当设备不包含网络连接时,可以使用MicrosoftActiveSync将SQLServerCompact3.5连接到服务器环境。服务器环境由运行MicrosoftInternet信息服务(IIS)的一台或多台计算机以及SQLServer的一个实例或为异类数据源传播的数据组成。可以在同一台计算机上运行IIS和SQLServer,也可以在多台计算机上对其进行配置。IIS是在服务器和客户端之间连接和交换数据所必需的。第二节关键技术(一)平台调用服务(P/Invoke)在.NETCompactFramework的支持下,可以方便高效地开发出适合于移动设备的应用程序,而不需要去考虑特定的硬件环境。.NETCompactFramework向开发者屏蔽了硬件底层的细节,使开发者可以集中精力于业务逻辑的解决方案。作为.NETFramework的一个子集,.NETCompactFramework只提供了.NETFramework的一部分功能,因此有时在实现一些功能时不得不借助于WindowsCEAPI。另外还存在一些第三方的组件/资源,或以动态链接库形式提供,或者已经是COM组件。相对于.NETCompactFramework,它们都属于非托管资源。我们需要一种功能,实现由托管环境访问这些非托管资源。和.NETFramework一样,平台调用P/Invoke(PlatformInvocationServices)提供托管代码调用驻留于DLL中的非托管函数的功能。(P/Invoke原理如图2-3)图2-3P/Invoke原理图一般来讲P/Invoke适用于以下三种情况.NETCompactFramework没有实现某功能,需要借助WindowsCEAPI;已有DLL或COM组件等资源,希望能充分利用,减少开发成本和风险;鉴于DLL的执行性能和反编译能力都可能高于.NETCompactFramework,借助DLL提高程序性能和安全性。(二)SyncServiceForADO.NET数据同步MicrosoftSyncFramework是支持应用程序、服务和设备进行协作和脱机访问的一个综合性同步平台。SyncFramework提供的技术和工具可以从不同地点访问数据、共享数据以及获取脱机数据。通过使用SyncFramework,开发人员可以构建同步生态系统,通过在任意网络上使用任意协议,将任意应用程序与任意存储中的任意数据集成在一起。1.客户端与服务器同步概述使用SyncServicesforADO.NET,可以通过双层、N层和基于服务的体系结构同步来自不同来源的数据。面向客户端与服务器同步的SyncServicesAPI提供了一组用于在数据服务与本地存储之间同步数据的组件,而不是仅仅用于复制数据库及其架构。应用程序正越来越多地用于移动客户端,如便携式计算机和设备。由于这些移动客户端与中央服务器没有连贯或可靠的网络连接,因此对于这些应用程序而言,能够在客户端上使用数据的一份本地副本十分重要。同等重要的一点是:在网络连接可用时,需要能够将数据的本地副本与中央服务器同步。SyncServicesAPI以ADO.NET数据访问API为蓝本,提供了一种直观的数据同步手段。SyncServices对构建依靠连续网络连接的应用程序这一工作进行了合乎逻辑的扩展,使我们得以针对断续连接的网络环境开发应用程序。2.用于客户端与服务器同步的体系结构SyncServicesforADO.NET能够实现SQLServerCompact3.5SP1客户端数据库与服务器数据库或任何其他数据源之间的同步,如以XML形式提供股票报价的服务。在同步两个数据库方面,SyncServices支持使用为之提供了ADO.NET提供程序的任何服务器数据库的双层和N层体系结构。在对客户端数据库和其他类型的数据源进行同步方面,SyncServices支持基于服务的体系结构。与双层或N层体系结构相比,此体系结构需要编写更多的应用程序代码;但是,它不需要开发人员采取另一种不同的方式进行同步。基于服务的体系结构(如图2-4所示)。这种体系结构包括一个客户端数据库,但是不包括服务器数据库或对应的服务器同步提供程序和同步适配器。若要使用这种体系结构,应用程序必须能够通过自定义代理和自定义服务与同步代理进行通信。它们提供的功能必须与服务器同步提供程序和同步适配器通常提供的功能相同,例如检索要同步的变更。由于移动设的数据同步不支持双层体系结构,因此采用这种基于服务的体系结构。图2-4基于服务的体系结构(三)WindowsCommunicationFoundation(WCF)1.什么是WindowsCommunicationFoundation?Web服务中包含了用于应用程序间通信的标准协议,它在全球范围内的广泛采纳改变了软件开发。例如,如今Web服务提供的功能包括安全性、分布式事务协调和可靠的通信。Web服务所发生的这些改变的效益应反映在开发人员所使用的工具和技术方面。设计WindowsCommunicationFoundation(WCF)的目的是为分布式计算提供可管理的方法,提供广泛的互操作性,并为服务定位提供直接的支持。WCF通过一种面向服务的新型编程模型简化了关联应用程序的开发。通过提供分层的体系结构,WCF支持多种风格的分布式应用程序开发。WCF通道体系结构在底层提供了异步的非类型化消息传递基元。而建立在此基础之上的是用于进行安全可靠的事务处理数据交换的各种协议功能,以及广泛的传输协议和编码选择。类型化编程模型(称为“服务模型”)设计用来降低分布式应用程序的开发难度,并为ASP.NETWeb服务、.NETFramework远程处理和企业服务领域的专业开发人员,以及将要从事WCF开发的人员提供熟悉的开发体验。该服务模型的特点在于它将Web服务的概念直接映射到.NETFramework公共语言运行库(CLR)中的对应内容,包括将消息灵活且可扩展地映射到用诸如VisualC#或VisualBasic等语言实现的服务。该服务模型提供支持松散耦合和版本管理的序列化功能,并提供与诸如消息队列(MSMQ)、COM+、ASP.NETWeb服务、Web服务增强(WSE)等现有.NETFramework分布式系统技术以及很多其他功能的集成和互操作性。2.WindowsCommunicationFoundation体系结构(如图2-5)图2-5WCF体系结构协定定义消息系统的各个方面,服务运行时层包含仅在服务实际运行期间发生的行为,即该服务的运行时行为。消息传递层由通道组成,通道是以某种方式对消息进行处理(例如通过对消息进行身份验证)的组件。一组通道也称为“通道堆栈”。有两种类型的通道:传输通道和协议通道。传输通道读取和写入来自网络(或外部的某些其他通信点)的消息,某些传输通道使用编码器来将消息(表示为XMLInfoset)转换为网络所使用的字节流的表示形式,或将字节流表示形式转换为消息。传输通道的示例包括HTTP、命名管道、TCP和MSMQ,编码的示例包括XML和优化的二进制文件。服务的最终形式为程序,与其他程序类似,服务必须在可执行文件中运行。这称为“自承载”服务。某些服务(如IIS或Windows激活服务(WAS))“被承载”,即在外部代理管理的可执行文件中运行。通过WAS,可以在运行WAS的计算机上部署WCF应用程序时自动激活该应用程序,还可通过可执行文件(.exe文件)的形式来手动运行服务,服务也可作为Windows服务自动运行,COM+组件也可作为WCF服务承载。第三章系统总体设计第一节系统需求分析(一)系统需求分析概述仓储管理系统(WMS)作为某一公司的核心业务系统,利用计算机软件模拟实施仓储管理的系统流程,其综合性要求要达到简明实用、提高仓储管理的质量和效率的目的。将物资集中放置在一定的场所需要利用科学的方法进行管理,并且实现高效准确的出入库操作,在保证基本效率的前提下及时地将货物更新信息提交到服务器数据;上层的管理系统要保证货物在存储期间数量不发生变化、维护相应的出入库记录和定期盘点信息。在货物存储时要达到空间利用的最大化,劳动力和设备要达到最大程度和最有效的利用,货物能够方便地存取,在需要时能够做到快速的定位。另一方面,此管理系统要实现高效准确的出入货验证审核机制,使得在有限的工作时间内在无差错的基础上更多数量地完成入货和出货的操作,从最大程度上节省人力资源消耗,避免人为因素导致错误的发生。此外,此管理系统还要确保能高效地完成货物种类和数量上的统计以及管理存储空间与货物对应关系的工作。实施定期的盘点工作是实现存储空间的最大程度的利用和确保物资数量的无误的前提,因此高效的盘点功能必不可少。(二)传统仓储业务流程弊端分析及问题改进1.传统业务分析入库时仓储管理人员接到入库作业指令,根据入库物品情况,选择仓库,安排物品存放区域。仓储作业人员根据入库作业的入库物品清单,与随车清单和实物进行核对,对入库物品进行验收。采用条码扫描方式清点及检查到货总量、单位包装量等。验收完成后,根据库位安排计划由仓储作业人员将货物存放到指定区域,仓储管理人员完成相应的信息记录工作,并输入到计算机中。出库时工作人员在接到出库作业指令后,了解相关作业细节,找到相应货物的存放位置。仓储作业人员根据出库清单,进行人工理货,并将物品集结在出货区。核对车牌号和驾驶人员证件,核对出货清单与随车清单是否一致,按核对后的清单进行装车。仓储管理人员完成相应的信息记录工作。盘点时根据盘点计划选择要盘点的仓库,库区等,并制定盘点表,生成盘点清单。仓储作业人员手工依次遍历要盘点的仓库、库区等,对盘点清单的相应项目进行抄录填写。盘点结束后,管理人员将盘点信息输入到计算机中,与计算机中的数据进行比对。2.存在问题及使用RFID技术后的改进方案在入库和出库作业中存在的最大问题是物品入库验证和出库理货时需要一个一个扫描物品条码,盘点作业需要记录每个货位上的物品还要将物品信息输入到信息系统中,这样经两次周转提高了出错率。这三个作业流程中所存在问题的本质就是数据采集效率、准确率以及作业流程的问题。从仓储作业效率来看,数据采集效率及准确率至关重要,条码要一个一个扫描,平均扫一个需要2-3秒钟,会大大降低效率。使用RFID电子标签可以实现了物品的自动入出库、自动盘点,增加了查询和盘点精度,加快了入出库的流转速度。利用RFID技术可以大大优化上述仓储业务流程。在入库方面货物与入库物品清单核对环节由射频器扫描完成,提高了核查效率。将货物与货位绑定的环节也有系统完成,最后系统会将相应信息提交到数据库,降低了出错几率。在出库方面,出库货物与货位核查、出库单审核工作都由系统完成。出库完成后系统会删除数据库中的相应货物信息,更新或未使用信息。在盘点方面,员工只需扫描货位与货物,核查工作由系统完成并返回核查结果,于过去的人工核查相比大大提高了盘点效率和质量。(三)引入RFID技术后的详细业务流程流程1.货物入库供货准备阶段供应商在供货前,将货物装入托盘,然后将托盘上的货物信息写入托盘上RFID电子标签中。货物信息包括产品编号、批次号、日期、数量等。同时供应商还应通过互联网提供入库清单,以便收货方在收货前进行核查检验。货物接收阶段(如图3-1)货物运输至仓库,仓库工作人员持手持设备进行核查。依次核查货单中的Pallet数量、每个Pallet中的Cargo数量,以及每个Cargo中的货物箱数。每完成一个Pallet便修改相应的托盘IfComplete标志,当所有的托盘核查完毕此单货物即验收完毕,可以入库。货物入位阶段(如图3-2)货物接收无误后,叉车驾驶员接到入位命令后选择一个合适的货位,通过车载终端(触摸屏)应用程序发出扫描指令,控制车前读取器对托盘电子标签和货位电子标签进行扫描,此时托盘ID号和货位ID号会显示在车在终端上。点击“核查托盘”系统会给出提示:此托盘是否已经过货物接收阶段的检验,如确认以检测工作人员点击“物资数量修改”将新的物资信息添加到数据库。当所有的Cargo(一个托盘下的不同批次的货物)全部入库后返回上一界面,点击“绑定托盘”将此托盘与扫描出的货位绑定,将信息入库,记录到系统,重复上述操作,直至货物全部入库到位。图3-1货物接收图3-2货物入位2.货物出库(如图3-3)叉车司机接到出货命令后,在车载终端上调出今日的出货单,选择相应的出货单。此时系统会提示该出货单所需托盘的信息,包括:货位,托盘电子标签号列表。操作人员仅需按系统提示货位读取托盘电子标签.如果读错托盘,报系统提示错误信息,司机重新选择托盘。如果托盘正确,选择此PalletID,进入物资更新界面,更新次托盘下所有相关物资的数量,然后返回上一界面,点击“分离绑定”将相应的托盘与货位分离。当所有托盘出库与更新操作完成后此次出货完成。图3-3出库流程3.货物盘点工作人员要定期进行货物数量的盘点,以保证实际的货物与系统记录中的一致。进入货物盘点界面,扫描托盘标签获取托盘ID,然后点击获取库存量,系统会显示出此托盘中所有货物的箱数;之后工作人员依次扫描次托盘的每个箱标签,每扫描一次数量加一,最后与系统给出的数量进行比对,完成盘点。第二节系统总体结构(一)系统体系结构与射频器硬件实现本系统的体系结构主要分为两大区域:仓储办公系统区和仓库存储与收货区。(如图3-4)图3-4系统体系结构1.系统体系结构仓储办公系统区仓储办公系统区的核心是一个基于B/S结构的WMS(仓储管理系统),它主要负责整个仓储体系的数据存储与管理并且完成与仓库管理区与收货区的数据交互与同步。主要包括人员身份验证,仓库管理,货物管理,货位管理,出库单管理与入库单管理。仓库管理区仓库管理区主要负责货物接收,货物入库,货物盘点,货物出库等功能。这些功能在具体实现上都是基于RFID技术的,在进行相应的操作时使用RFID射频读取器扫描相应的托盘、货位等RFID标签以获取相应的托盘与货位的信息。2.射频器硬件实现射频器的硬件系统采用RC500射频芯片结合51单片机与WindowsMobile手持设备通过串口进行通信。(二)系统软件架构从软件架构角度此系统可划分为三层体系结构:运行在上层服务器的WMS仓储信息管理系统;中间基于WindowsMobile的数据交换及同步层以及下层的RFID数据采集层。(如图3-5)图3-5系统软件架构1.上层服务器的WMS仓储信息管理系统层。此层主要负责相关信息的管理;主要包括:用户管理、货品管理、货品种别管理、供应商管理、仓库管库位管理、入库单录入、入库单编辑、发货单录入、发货单编辑、货位与托盘关系管理等等,并且为下层提供所需的相关数据。2.下层的RFID数据采集层。此层主要利用基于RFID的射频器从相应的托盘标签与货位标签中提取相关的货物信息与货位信息。3.中间基于WindowsMobile的数据交换及同步层。此层主要完成收集下层RFID射频器采集的数据,同时通过数据同步将下层采集的数据传至上层的数据库服务器并且从上层的WMS系统获取入货单等相关信息供下层收货、出货时进行检验,在上下两层之间起到桥梁的作用。第三节移动设备系统功能分析及模块设计(一)移动设备的主要功能分析此系统中的移动设备主要包括手持PDA与车载移动终端,主要要完成以下功能:工作人员进行身份验证。在货物入库前对此批货物的数量和种类进行检验。货物入库时将货位与托盘绑定并且更新物资记录。定期进行货物盘点。在货物出库时进行托盘检验。在货物出库后将托盘与货位解绑定,并且更新物资记录。(二)系统模块设计图3-6系统模块系统的模块大致分为手持终端模块与车载终端模块(如图3-6)1.手持终端模块登陆验证模块、货物接收模块、货物盘点模块。2.车载终端模块登陆验证模块、货物入库模块、货物出库模块、数据同步模块。第四章系统详细设计第一节数据库设计(一)数据库设计原则数据库设计主要是进行数据库的逻辑设计,即将数据按一定的分类、分组系统和逻辑层次组织起来,是面向用户的。数据库设计时需要综合企业各个部门的存档数据和数据需求,分析各个数据之间的关系,按照DBMS提供的功能和描述工具,设计出规模适当、正确反映数据关系、数据冗余少、存取效率高、能满足多种查询要求的数据模型。为了更好地组织数据和设计出实际应用数据库,应该注意如下问题:关系数据结构的建立。在进行了数据基本结构的规范化重组后,还必须建立整体数据的关系结构。建立关系数据结构涉及三方面内容:确定关联关系;确定单一的父系关系结构;建立整个数据库的关系结构。(二)移动设备数据表设计表4-1仓库工作人员信息表(MUser)列名数据类型是否主键非空UserIDvarchar(20)TTPWDvarchar(20)FTNAMEvarchar(20)FFSEXvarchar(20)FFSOLEvarchar(20)FF仓库工作人员信息表用于存放仓库工作人员的信息,仓库收货员与叉车司机在进行收货和入库操作前需要先进行身份验证。其中UserID设为主键。表4-2入库单信息表(InForm)列名数据类型是否主键非空InformIDvarchar(20)TTIfCompletebitFTInDatedatetimeFF入库单信息表用于向收货员提供某一入库单的相关信息供入库员在检查货物时进行比对,当入库员从手持终端发出某一货单的信息请求时系统会从此表提取相关信息显示在手持终端。表4-3出库单信息表(OutForm)列名数据类型是否主键非空OutformIDvarchar(20)TTIfCompletebitFTOutformDatedatetimeFF出库单信息表记录相关的出库货物信息,其功能与入库信息表类似。表4-4货物批次信息表(Cargo)列名数据类型是否主键非空CargoIDvarchar(20)TTItemIDvarchar(20)FTPalletIDvarchar(20)FTCartonQudecimal(18,0)FTEvCartonQudecimal(18,0)FTUnitvarchar(10)FTIfCompletebitFT货物批次信息表记录了某一托盘中不同批次货物的信息,每一个批次的货物有其相应的货物ID和箱数量等信息。货物入库前从此表提取相关货物的数量信息更新至物资信息记录表。表4-5物资信息记录表(Inventory)列名数据类型是否主键非空InventoryIDintTTItemIDvarchar(20)FTWareHouseIDintFTQuantitydecimal(10,2)FT物资信息记录表记录了某一种货物的数量。表4-6托盘信息表(Pallet)列名数据类型是否主键非空PalletIDvarchar(20)TTInformIDvarchar(20)FFOutformIDvarchar(20)FF托盘信息表标识了某一个托盘是属于哪一个入库单或出库单的,也可以说记录了某一批要出库或入库的货物都包含哪些托盘。表4-7货位信息表(Store)列名数据类型是否主键非空StoreIDvarchar(20)TTWareHouseIDintFTIsEmptybitFT货位信息表记录了某一仓库的货位的使用情况,当某一次出货或入货操作完成以后修改相关货位的IsEmpty字段以标识次货位的使用情况。表4-8货位托盘关系表(Store_Pallet)列名数据类型是否主键非空StoreIDvarchar(20)TTPalletIDvarchar(20)TTIfBindbitFTOperDatevarchar(20)FTOperTyprvarchar(10)FT货位托盘关系表记录了在某一批货物入库以后某一具体的托盘与某一货位的绑定情况,在每次入货或出货操作的最后对此表的信息进行更新。(三)数据表关联图图4-1仓库与货位关系图此关系标明了某一货位是属于哪个仓库的。

图4-2托盘与批次关系表此关系标明了某一批次的货物是属于哪个托盘的,一个托盘包括很多批次的货物,而不同批次的货物种类可以是相同的。图4-3托盘与入库单关系、托盘与出库单关系此关系标明了某一入库单或某一出库单都包含哪些托盘,系统提取相关的信息显示在手持终端以供入货员在入货操作时进行核查。图4-4物资表与批次表通过货物表的Item字段关联此关系标明某一托盘下的某一批次的货物的具体种类(用ItemID唯一标识),Inventory表与Cargo表通过Items表建立联系,在入库时从Cargo中提取某一种货物的数量,通过查询ItemID字段将货物数量信息更新至Inventory表。第二节与底层RFID射频读卡器通信的实现(一)与RFID射频器通信的原理基于WindowsMobile的手持设备是通过串口与RFID射频器进行通信的。上层的WindowsMobile应用程序将相应的十六进制命令串写入串口以调用运行在射频芯片上的函数。完成一次阅读要依次调用以下操作:打开端口开启RC500天线初始化标签类型寻找标签防冲撞(二)具体实现代码1.工程建立时注意事项在VS2008中新建CPP工程,选择SmartDevice的Win32SmartDeviceProject注意要选择Applicationtype里的DLL,Additionaloptions选择Emptyproject.(如图4-5)图4-5C++的dll工程2.实现代码及说明以下为DLL文件的头文件,其中包含所有提供给上层托管代码的函数接口声明和调用射频芯片上函数的串口命令字数组。头文件//声明dll导出函数关键字宏定义#defineDLLAPIextern"C"__declspec(dllexport)//声明串口句柄HANDLEhComm;boolz1;//以下为声明各种操作的串口命令子数组//开启RC500天线BYTErf_antenna_sta[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x0C,0x01,0x00,0x0D};//向射频芯片初始化标签类型BYTErf_init_type[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x08,0x01,0x41,0x48};//再次开启RC500天线BYTErf_antenna_sta1[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x0C,0x01,0x01,0x0C};//寻TYPE_A型标签BYTErf_request[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x01,0x02,0x52,0x51};//防冲撞BYTErf_anticoll[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x02,0x02,0x04,0x04};//激活TYPE_A标签BYTErf_select[13]={0xAA,0xBB,0x09,0x00,0x00,0x00,0x03,0x02,0x0C,0x4B,0xD9,0x07,0x98};BYTErf_select2[13]={0xAA,0xBB,0x09,0x00,0x00,0x00,0x03,0x02,0xAC,0xCF,0x36,0x08,0x5C};//验证密钥BYTErf_M1_authentication2[17]={0xAA,0xBB,0x0D,0x00,0x00,0x00,0x07,0x02,0x60,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x65};//读取标签数据BYTErf_M1_read[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x08,0x02,0x00,0x0A};BYTErf_M1_read1[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x08,0x02,0x01,0x0B};BYTErf_M1_read2[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x08,0x02,0x02,0x08};BYTErf_M1_read3[10]={0xAA,0xBB,0x06,0x00,0x00,0x00,0x08,0x02,0x03,0x09};BYTEinBuff[1024];DWORDcByte=1;//以下为将作为DLL导出函数的接口声明//初始化串口DLLAPIboolcomopen(intBaud);//读取射频芯片返回给上位机的有效数值串DLLAPIboolRead();//清空串口的一个缓冲区DLLAPIintRead1();//发出开启RC500天线的命令DLLAPIboolWrite_rf_antenna_sta();//发出向射频芯片初始化标签类型的命令DLLAPIboolWrite_rf_init_type();//发出开启RC500天线的命令DLLAPIboolWrite_rf_antenna_sta1();//发出寻TYPE_A型标签的命令DLLAPIboolWrite_rf_request();//发出防冲撞的命令DLLAPIboolWrite_rf_anticoll();//发出激活TYPE_A标签的命令DLLAPIboolWrite_rf_select();DLLAPIboolWrite_rf_select2();//发出验证密钥的命令DLLAPIboolWrite_rf_M1_authentication2();//发出读取标签数据的命令DLLAPIboolWrite_rf_M1_read();DLLAPIboolWrite_rf_M1_read1();DLLAPIboolWrite_rf_M1_read2();DLLAPIboolWrite_rf_M1_read3();CPP文件此CPP文件中定义将串口命令字数组包装在函数接口中,包括射频芯片初始化函数、读标签函数、接收串口字符串函数。#include<windows.h>#include"cpph01.h"//此函数为打开串口操作boolcomopen(intBaud){ DCBdcb1; if(hComm>0) { CloseHandle(hComm); } printf("%d\n",hComm); hComm=CreateFile(TEXT("COM1:"),GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,0,NULL); printf("%d\n",hComm); if(hComm==INVALID_HANDLE_VALUE) { MessageBox(NULL,TEXT("OpentheCOMFailed!"),TEXT("SetBaud"),MB_OK); } else//初始化串口结构控制块结构体 { boolb1; boolb2; dcb1.DCBlength=sizeof(dcb1);b1=GetCommState(hComm,&dcb1);dcb1.BaudRate=Baud;dcb1.fParity=FALSE;dcb1.fNull=FALSE;dcb1.StopBits=ONESTOPBIT;dcb1.Parity=NOPARITY;dcb1.ByteSize=8;b2=SetCommState(hComm,&dcb1); if(!b2) { MessageBox(NULL,TEXT("InitialComFailed!"),TEXT("SetBaud"),MB_OK); } else { returntrue; } }}此CPP文件其余函数主要操作皆为读写串口操作,主要核心为调用WriteFile和ReadFile两个WindowsAPI函数。第三节上层托管代码对底层DLL导出函数的调用在解决方案中添加一个C#的SmartDevice工程。在解决方案的命名空间中添加一个类,在其中完成DLL中各导出函数的类包装以供此解决方案中所有的窗体调用。代码如下,此处以comopen_Call函数为例,其余函数完全相同internalclassWrapper{[DllImport("CppProject.dll")]internalstaticexternboolcomopen(intBaud);publicboolcomopen_Call(intBaud){boolz1=false;z1=comopen(Baud);returnz1;}}此类完成将CppProject.dll中comopen函数的包装,体现了面向对象的封装性,包装后对外提供的接口为comopen_Call,(演示如图4-6)图4-6射频器读取演示第四节数据同步的实现(一)使用WCF添加移动设备的“本地数据缓存项目”由于数据同步技术SyncServicesforADO.NET对移动设备不支持双层的直接本地数据缓存同步模式,因此需要建立基于服务的同步结构。在解决方案中添加名为MiddleTierServiceLibrary的WCF工程,然后在此项目中添加“本地数据缓存项目”,在之后弹出的配置向导中选的本机为服务器,选择WMS数据库作为同步数据源,之后选择WMS中与移动设备相关的数据表作为同步数据表;此时此解决方案中便添加了WMS数据源。最后在智能设备项目中添加对此WCF的WEB引用。(如图4-7)图4-7添加本地数据缓存当数据源添加完成后会在智能设备项目中生成wms.sdf移动数据库文件以及wmsDataSet.xsd文件,wmsDataSet.xsd文件包含所有表的TableAdapter,可以在其中添加sql操作函数接口。(如图4-8)红线圈出的为自己添加的sql操作接口,可以在程序中通过TypedTableAdapter对象调用。图4-8.xsd文件图示(二)移动设备数据库与服务器数据库数同步的实现代码//在同步时将鼠标形状设置为等待图标Cursor.Current=Cursors.WaitCursor;//TheWCFService//新建一个在WCF服务中定义的同步服务类wmsCacheWebRef.wmsCacheSyncServicewebSvcProxy=newMixedSolution.wmsCacheWebRef.wmsCacheSyncService();//TheRemoteServerProviderProxy(远程服务提供者代理)//ServerSyncProvider提取与服务器数据存储区进行通信并将同步代理与该数据存储区的特定实现隔离//的一般服务器同步提供程序//ServerSyncProviderProxy类为ServerSyncProvider提供一个包装,构造函数参数为对与//ServerSyncProvider进行通信的服务的引用Microsoft.Synchronization.Data.ServerSyncProviderProxyserverProvider=newMicrosoft.Synchronization.Data.ServerSyncProviderProxy(webSvcProxy);//TheSyncAgent//SyncAgent.RemoteProvider属性获取或设置一个派生自//ServerSyncProvider的对象,该对象用于与远//程数据存储区进行通信wmsCacheSyncAgentsyncAgent=newwmsCacheSyncAgent();syncAgent.RemoteProvider=serverProvider;//从客户端的角度定义数据更改流的方向//Bidirectional为首次同步期间客户端通常从服务器下载架构和初始数据集//执行后续同步时,客户端将更改上载到服务器,然后从服务器下载更改syncAgent.Store_Pallet.SyncDirection=Microsoft.Synchronization.Data.SyncDirection.Bidirectional;//Synchronizethedatabases//syncAgent.Synchronize()在本地和远程数据存储之间同步数据,返回一个SyncStatistics对象,其中//包含同步会话的统计信息Microsoft.Synchronization.Data.SyncStatisticsstats=syncAgent.Synchronize();//ReloadtheDataSet/Datagridfromthelocaldatabase//刷新本地数据库DataSetstore_PalletTableAdapter.Fill(wmsDataSet.Store_Pallet);MessageBox.Show("ChangesDownloaded:"+stats.TotalChangesDownloaded.ToString()+"\r\n"+"ChangesUploaded:"+stats.TotalChangesUploaded.ToString());Cursor.Current=Cursors.Default;以上代码实现了WMS中store_Pallet表的数据同步操作第五节手持设备程序设计与实现(一)登陆验证(如图4-9)登陆Form实现仓库收货人员的身份验证。在F1User_loginForm中添加mUser的TableAdapter控件,调用mUserTableAdapter的GetDataBy1UserID方法,参数为用户名文本框的值(即为查询条件)。此函数返回查询where条件为选定的用户名的行数据集。图4-9登陆界面图4-10主菜单(二)主菜单(如图4-10)功能为选择手持设备将要完成的操作。当点击某一功能页面的按钮,按钮会触发生成相应的窗体对象,代码如下:FormXfx=newFormX();//构造一个新的窗体对象fx.Show();//调用此对象的Show方法显示次窗体(三)货物接收图4-11货物接收收货员进入收货界面(如图4-11)后输入今天的时间在日期文本框,下面的ASN列表会连动地列出今日所有的收货单ID号。具体实现:在F2ASN_ListForm中添加listBox控件,将其数据源属性设为inFormBindingSource,DisplayMember属性设为inFormID,此时inForm表中所有的inFormID都会被显示在ListBox中;于是在wmsDataSet.xsd文件中的InForm表的InFormTableAdapter中添加新的查询:FillByInformDate,具体语句如下SELECTInformID,IfComplete,InformDateFROMInFormWHERE(InformDate=@Param2)在加载F2_ASN_List窗体时调用inFormTableAdapter对象的FillByInformDate,参数为日期文本框的内容以实现只将今天的入货单记录集填充到wmsDataSet,代码如下:privatevoidF2_ASN_List_Load(objectsender,EventArgse){//TODO:Thislineofcodeloadsdataintothe'wmsDataSet.InForm'table.Youcanmove,orremoveit,asneeded.//this.inFormTableAdapter.Fill(this.wmsDataSet.InForm);this.inFormTableAdapter.FillByInformDate(this.wmsDataSet.InForm,textBox1.Text.ToString());}点击选择按钮进入下一界面,此界面会根据入库单ID列出此单下所有的托盘ID,相应的Pallet数量会显示在下面的文本框里。具体实现:在wmsDataSet.xsd的Pallet添加FillByInformID查询。具体语句如下:SELECTPalletID,IfCompleteFROMPalletWHERE(InformID=@Param2)调用palletTableAdapter的FillByInformID方法实现ListBox显示当前入货单的托盘ID。点击扫描Pallet按钮,调用CppProject.dll中的读函数将标签数据独到手持设备与ListBox中列出的PalletID进行比对,如果有匹配的就将Pallet数量文本框的数字减一,若最后其值减为“0”则说明此批货的托盘数量正确。具体实现:if(textBox2.Text!="0"){stringsqF41=textBox2.Text.ToString();intiF41=Convert.ToInt32(sqF41);iF41--;textBox2.Text=iF41.ToString();}else{textBox2.Text="托盘数量正确";}点击ASN完成,InForm表的IfComplete字段会被置为true说明此单货物已经完成入库(在所有的货全部检验完成后才返回此页点击此按钮)。具体实现:在InFormTableAdapter添加UpdateQueryByInformID更新:UPDATEInFormSETIfComplete=@p4WHERE(InformID=@p6)代码:this.inFormTableAdapter.UpdateQueryByInformID(true,label5.Text.ToString());其中label5.Text值为入库单ID执行前后结果(如图4-12)图4-12执行结果下一界面进入Cargo数量验证,其实现方法与Pallet验证相同(如图4-13)点击Pallet完成后执行结果(如图4-14)图4-13Cargo数量验证图4-14执行结果最后进行每个Cargo中货物箱数的检验,其实现用到的技术与Pallet和Cargo检验类似,界面(如图4-15),盘点操作界面(如图4-16)图4-15Cartons数量验证图4-16盘点第六节叉车移动PC程序设计与实现 (一)登陆与主菜单登陆与主菜单界面(如图4-17,4-18)其实现与手持终端的相同图4-17登陆图4-18主菜单(二)货物入库1.托盘入库验证在进入托盘入库验证界面后,叉车司机分别扫描托盘标签与货位标签,相应的ID号会显示在对应的文本框里。点击核查托盘,系统会检测此托盘是否已经过收货人员的检验,核查结果系统会以MessageBox和Label的形式反馈给叉车司机。(如图4-19)图4-19托盘验证具体实现:在wmsDataSet.xsd中的PalletTableAdapter中添加查询:GetDataBy2PalletID(@Param2)语句如下:SELECTIfCompleteFROMPalletWHERE(PalletID=@Param2)此查询返回对应PalletID托盘记录的IfComplete字段以实现对托盘入库权限的检验。触发按钮代码如下:privatevoidbutton6_Click(objectsender,EventArgse){stringsF7;//定义一个wmsDataSet.PalletDataTable类型的变量用以接收//GetDataBy2PalletID函数返回的记录集wmsDataSet.PalletDataTablenewPalletRowF7;newPalletRowF7=this.palletTableAdapter.GetDataBy2PalletID(textBox1.Text);sF7=newPalletRowF7[0].IfComplete.ToString();if(sF7=="True")label6.Text="此托盘已经检验完毕,可以入库";elselabel6.Text="此托盘未经检验,不可入库";}2.托盘绑定的实现在进行托盘入库验证后,系统进入物资数据更新操作,完成后返回上一界面进行托盘与货位的绑定。点击此按钮将更新Store表的货位使用信息和Store_Pallet表的托盘与货位关系信息。具体实现:Store表的更新在Store的TableAdapter新建

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论