您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 无线仓库管理解决方案
无线仓库管理解决方案1.需求分析1.1仓库管理现状随着计算机技术的普及,越来越多的中小企业已经开始使用计算机(数据库)开进行仓库管理。经调查,大多数的小型企业仍然采用用笔记账,再统一录入数据库的模式。这样,办公室并不能获得最新的库存情况从而不能做出正确的决策。另外,有些公司仓库离办公室(数据库服务器)较远,一来一回也耽误了时间。于是,用高效的方案来解决仓库库存与数据库同步的问题是迫在眉睫的事情。1.2无线仓库管理的优点无线仓库管理最大的亮点在于实时性。仓库管理人员在入库的时候,只需要在手持设备上输入相应的产品以及数量,即可以实时地更新数据库,为办公室人员获得最新的库存信息提供了保证。相对于有线传输,无线传输省去了布线的麻烦。这也是目前流行的方案。1.3开发限制由于经济基础等条件制约,采用的硬件并不能实现长距离通讯。但要声明的是,这只是个解决方案,只提供思路。如果要应用到实际,将结合实际情况对硬件做出相应的更改。2.概要设计2.1部署图无线手持设备无线服务器端数据库服务器2.2进程视图2菜单选择数量选择发送数据接收数据处理数据更新数据库初始化无线3.详细设计3.1硬件说明(1)开发板:SPCE061AEMUBOARD61板是SPCE061AEMUBOARD的简称,是以凌阳16位单片机SPCE061A为核心的精简开发-仿真-实验板,大小相当于一张扑克牌,是“凌阳科技大学计划”专为大学生、电子爱好者等进行电子实习、课程设计、毕业设计、电子制作及电子竞赛所设计的,也可作为单片机项目初期研发使用。61板除了具备单片机最小系统电路外,还包括有电源电路、音频电路(含MIC输入部分和DAC音频输出部分)、复位电路等,采用电池供电。板上自带两个16位输入/输出接口。无线射频芯片自带的驱动程序使用IOB的低8位,MzL02-12864LCD模组自带的驱动程序使用IOA。而61板上的三个按键KEY1、KEY2、KEY3是直接和IOA的最低3位相连的(参考61板的电路原理图1),造成按键对显示模组干扰的问题。于是,解决方案将使用IOA的高8位作为无线射频nRF2401芯片的接口,IOB作为MzL02-12864LCD模组的接口。详细驱动的改动下面会有说明。3图1PCB图(2)nRF2401无线射频芯片发送端(配套61板)nRF2401A及其外围电路如图2,包括nRF2401A芯片部分、稳压部分、晶振部分、天线部分。电压VDD经电容C1、C2、C3处理后为芯片提供工作电压;晶振部分包括Y1、C9、C10,晶振Y1允许值为:4MHz、8MHz、12MHz、16MHz,如果需要1Mbps的通信速率,则必须选择16MHz晶振。天线部分包括电感L1、L2,用来将nRF2401A芯片ANT1、ANT2管脚产生的2.4G电平信号转换为电磁波信号,或者将电磁波信号转换为电平信号输入芯片的ANT1、ANT2管脚。为方便与61板的连接,模组提供了两个接口J1、J2,其中J1为nRF2401A的控制端口和通道1的收发通道,J2为预留端口,是通道2的接收通道。J1接口为10Pin的插孔,其布局和61板的I/O端口布局一致,可以直接插接到61板的I/O端口使用。J2预留,如果需要采用双通道接收时,可以将J2对应的3根信号线引出,接到单片机的I/O上即可。4图2nRF2401电路原理图图3接口电路图对应的I/O连接和功能描述如表所示。接收端(NewMsgUSB2401)NewMsg-NetUSB3模块是NewMsg公司自行研发的PC端无线数据收发模块,其并配备CYPRESS公司的USBSLAVE芯片EZUSB_FX2LP68013和射频芯片NRF2401,以2.4G的无线频段进行无线数据传输,并通过USB2.0协议同PC进行高速通信,保证了高速通信质量,并且在无线通信协议上实现了严格的数据校验机制,保证了数据的可靠通信。NewMsg-NetUSB3模块可进行本机地址和发送地址的配置,实现多点PC和PC,PC和电子系统的数据传输。5(3)MzL02-12864LCD模组MzL02-12864为一块128X64点阵的LCD显示模组,模组上的LCM采用COG技术将控制(包括显存)、驱动器集成在LCM的玻璃上,接口简单、操作方便;为方便用户的使用,铭正同创在LCM的基础上设计了MzL02-12864模组,将模组所必需的外围电容电阻集成到模组上,并引出多种形式的引线接口方便用户使用。MzL02-12864模组与各种MCU均可进行方便简单的接口操作。3.2编码实现3.2.1寄存器设置以及驱动更改前面提到由于LCD模组使用16位IOA作为接口,而IOA0/1/2与KEY1/2/3直接相连(详细翻阅PCB图),这导致的结果是,按键按下时会对LCD模组进行干扰。于是便选择IOB作为LCD模组的接口,IOA高8位作为无线射频的接口。详细驱动更改如下:查看《SPCE061A中文编程手册》,找到IOA和IOB的读写寄存器地址分别为7000H和7005H,每个寄存器16位。如图:LCD模组接口说明,如下表:打开LCD模组的接口头文件LCD_PortConfig.h,宏定义LCD模组在IOB读写寄存的偏移量:6然后把驱动宏定义的IOA全部改成IOB,并且添加IOB相应寄存器的地址的宏定义:无线射频模组的驱动更改相应比较简单,参照数据手册,把原来的偏移地址(低8位)0x0010……0x0020改成(高8位)0x0100……0x2000,然后把所有指向IOB地址的地方重新指向IOA的地址即可。3.2.2主菜单介面制作介绍:由于开发板:SPCE061AEMUBOARD只有4个KEY,一个用于RESET,剩下只有三个KEY,为了能够实现多个介面之间的转换,我们用01键代表向下转换,02键代表向上转换,04键代表确定。01键和02键都有循环切换菜单的功能。我们设计的菜单是用一个个图片组成。每切换一个菜单我们就换一张图片。图片之间的切换并没有减慢我们系统的速度。我们的菜单主要由以下图片组成:这些图片通过DM的制作就可以变为一个个数组。在显示时只要调用这些数组就可以了。菜单的制作主要是调用函数voidLCD501_Bitmap(intx,inty,unsignedint*p),这个函数主要是用来显示图片的。用来显示我们的菜单。在一开机时,就显示第一第图片,然后就处于等待状态,当接收到01KEY的信息时,就开始换下一张图片。当接收到02KEY信息时就开始选项上一张图形,并把它们显示出来。当接收到04KEY时就进了另一个介面,用于输入订单的数量。这个下面有3.2.3中有详细的介绍。下图为它的流程图:#defineLCD_EP0x1000#defineLCD_RW0x0800#defineLCD_A00x0400#defineLCD_RE0x0200#defineLCD_CS0x0100#defineP_IOB_DATA(volatileunsignedint*)0x7005#defineP_IOB_BUFFER(volatileunsignedint*)0x7006#defineP_IOB_DIR(volatileunsignedint*)0x7007#defineP_IOB_ATTRIB(volatileunsignedint*)0x700873.2.3数量选择界面功能介绍:通过61板上的3个按键(key1,key2,key3)实现数字的输入。输入数字为3位,即输入范围是从0至999。输入范围可以根据实际应用需要进行修改。进入本功能菜单后,屏幕的上方会显示“addhundry”,表示初始状态下每按一次key1,该数字将增加100。下方显示“000”,表示初始数量为0。如果此时5次key1,则屏幕上的值为“500”,即此时输入数量值是500。key2用于决定每次输入的大小,如按下key2后,上方显示“addten”表示每按一次key1数字增加10,如果显示“addone”表示每按一下key1增加1。当某一位上的数为9时,再增加1后则重新置为0。在进入“addone”之后想对百位或十位数字进行修改,可以按key2进入其他模式进行输入。当输入结束后,按key3退出数量输入功能,进入发送功能。流程图:开始8变量说明:unsigneddata[3]用于存放百位,十位和个位数的值,方便对于各位数的操作和输出显示。每一位的初始值为0,最大值是9,如果达到9之后再发出1请求(按下key1),则该位的值重新置为0。charshow[4]前三位分别存放data中的三个数字对应的字符,即‘0’-‘9’,第四位存放的是‘\0’,因为数量值是以字符串的形式输出到显示屏,而字符串的需要以‘\0'为结束标志。chardisplay[3][15]用于存放输入模式的提示信息,包括“addhundry”,“addten”,“addone”。inti用于计算当前所处的输入模式,当i=0,处于“addhundry”模式,当i=1,处于“addten”,当i=2,处于“addone”模式。i的初始值为0,当key2被按下,如果i值为2,则将i置为0,否则将i值加1。函数说明:delay()延时函数,由于按下按键后会产生抖动,即按下一次会产生多个按键信号,程序也会相应的做出多次处理,这样就无法得到预期的效果。为了获取稳定的按键信息,须要Addhundry按键加100Key1Addten按键加10Key1Key2Addone按键Key2加1Key1Key2结束Key3Key3Key39避开这段抖动期。这时就要使用这个延时函数。intputdata()实现数量的输入和数据发送。初始模式为“addhundry”,数量的初始值为“000”。按下key2键选择输入模式,key1键决定每一位数的大小。由于按键的数量限制,本功能只能单向递增,所以函数循环输入的方式,即在到达极限值的时候再增加就会回到初始值。如在达到“addone”模式后,再按下key2键就会回到“addhundry”模式;在按下key1键后如果该位数已经为9,则会被重新置为0。数据输入结束后,按下key3键退出,程序会将输入的各位数字分别发到计算机端,由计算机端完成对数据的处理。之所以将数字分位发送,是因为发送模块最大只能发送8位二进制数,分开发送可以消除对输入数据极限值的限制。发送结束后退出本函数。3.3.3发送功能发送前首先配置接收端(PC)的地址Address[5]={0x00,0x00,0x00,0x00,0x01};调用驱动的nRF2401_Intial()、nRF2401_Mode(1)、nRF2401_SetAddress(Address,5)进行无线初始化。在数量选择菜单按下key4后,触发发送函数nRF2401_SendByte(),把商品编号和数量一起发送(用Delay函数进行延时)。为了演示,约定商品编号为01~06,分别对应6种不同的教材。函数nRF2401_SendByte():参数TxData为传进来的数据(字节)。CE宏定义为无线射频的使能端,偏移地址为0x0200,对应IOA9接口。调用函数nRF2401_WriteByte(),先把接收端地址写入缓冲,然后再把数据TxData写入缓冲(nRF2401数据报格式)。最后实现发送的功能。3.3.4接收端PC由于PC端不涉及嵌入式的开发,此处只做简单说明。接收端采用NewMsg公司的无线射频产品NetUSB2401,用的芯片与嵌入式设备相同,是nRF2401。在程序初始化的时候,按照嵌入式设备端的设置,把通道、收发频率、接受宽度设为一致,然后设置好地址。根据发送端发来的商品编号从数据库获取当前数量,然后加上发送端发来的数量,最后voidnRF2401_SendByte(unsignedintTxData){unsignedinti;//*P_IOA_Dir|=DATA;*P_IOA_Buffer|=CE;Delay_Us(10);//for(i=0;iAddrByteCnt;i++){nRF2401_WriteBy
本文标题:无线仓库管理解决方案
链接地址:https://www.777doc.com/doc-1248263 .html