- 实习目的
在实习单位的实际生产生活中,条码的应用对产品的出入库管理、生产下线量管理、营销客户服务、产品质量追溯、产品外观形象等都有一定的提升。然而原来的条码应用方面也暴露出一些缺陷与不足,具体体现如下。
1.原条码需要人工逐包扫描,一车装载几十上百包产品,扫描工作量大,漏扫的概率高。
2.原条码扫描方式采用DT-930采集器读取,需要正面贴近条码才能获取条码内容,识别距离非常短,对产品堆放方位有一定要求,完全符合条码扫描要求的堆放现场难以操作,对于堆放中遮挡掉的条码无法采集。
3.打印在合格证上的条码易被污染、损坏,导致无法读取。
上述问题的存在,对实习单位进一步提高产品生产、销售、质量的管理水平有了一定的影响,降低生产、销售、质量信息化管理追求的精细化、及时性、准确性、追溯性的要求及目标。本次产品合格证中的RFID应用项目就是在总结以往条码应用的经验基础上,针对暴露出的问题,采用RFID射频技术,在原条码系统基础上,以最小的成本,设计开发出来的应用系统,在此信息系统的支撑下对公司管理工作水平及现场工作效率都会有一定的提高。
本次实习为提升实习单位生产生活中的产品管理水平,通过java技术结合RFID射频技术,实现产品发货流程的信息化管理。
- 实习内容
(一)项目介绍
(1)项目概述
本项目中,实现了一个基于RFID射频技术的发货系统,该系统分为三部分,分别为带有RFID读写模块的树莓派开发板,java客户端和Web客户端。客户可以通过Web客户端进行订单的管理,仓库操作管理员可以通过java端驱动RFID读写进行货物的管理以及订单批次的分配,系统管理员可以java客户端完成权限管理。
(2)数据库介绍
1. 用户表 user
表名:user | ||
字段名 | 字段类型 | 备注 |
user_id | INT | 主键,自增 |
user_name | VARCHAR(40) | 用户名称 |
user_email | VARCHAR(40) | 用户邮箱 |
user_password | VARCHAR(40) | 用户密码 |
user_permission | VARCHAR(40) | 用户权限 |
user_type | INT | 用户类型 |
备注:对于客户,使用邮箱作为账号进行登录,对于员工,可以使用id进行登录。用户权限为一串“0”或“1”组成的字符串,如果第k位上为1,代表这个用户具有第k个功能的权限。用户类型,0为系统管理员,1为操作管理员,2为用户。
2. 订单表 order
表名:od | ||
字段名 | 字段类型 | 备注 |
od_id | INT | 主键,自增 |
od_date | DATE | 订单最后修改时间 |
od_status | INT | 订单状态 |
od_userId | INT | 外键,订单所属用户的编号 |
备注:订单状态为0或1,0代表未提货,1代表已提货。
3. 商品表 goods
表名:goods | ||
字段名 | 字段类型 | 备注 |
goods_id | INT | 主键,自增 |
goods_name | VARCHAR(40) | 商品名称 |
goods_price | DOUBLE | 商品价格 |
4. 订单内容表ordered_goods
表名:og | ||
字段名 | 字段类型 | 备注 |
og_id | INT | 主键,自增 |
og_orderId | INT | 外键,订单的编号 |
og_goodsId | INT | 外键,商品的编号 |
og_number | INT | 订货的数量 |
5. 批次表 batch
表名: batch | ||
字段名 | 字段类型 | 备注 |
batch_id | INT | 主键,自增 |
batch_goodsId | INT | 外键,生产的商品的编号 |
batch_number | INT | 本批次生产的商品数量 |
6. 仓库表 warehouse
表名:wh | ||
字段名 | 字段类型 | 备注 |
wh_id | INT | 仓库编号 |
wh_name | VARCHAR(40) | 仓库名称 |
wh_location | VARCHAR(40) | 仓库地点 |
7. 提货单 pick up
表名: pu | ||
字段名 | 字段类型 | 备注 |
pu_id | INT | 主键,自增 |
pu_date | DATE | 提货时间 |
pu_van | VARCHAR(40) | 提货的车牌号 |
8. 货物表 product
表名:product | ||
字段名 | 字段类型 | 备注 |
product_id | INT | 一批中的物号 |
product_batchId | INT | 外键,所属批次号 |
product_whId | INT | 外键,所属仓库的编号 |
product_status | INT | 货物状态 |
product_puId | INT | 外键,所属提货单的编号 |
9. 订单-提货表 order - pick up
表名:op | ||
字段名 | 字段类型 | 备注 |
op_id | INT | 主键,自增 |
op_orderId | INT | 外键,订单编号 |
op_puId | INT | 外键,提货单编号 |
(3)数据流图
(4)用例图分析
1. 用户管理模块
2. 订单管理模块
3. 仓储管理模块
4. 发货系统
(二)生产过程认知
在生产过程中,由于RFID技术的部分限制,有以下几个技术难点:
(1)RFID标签数据获取
第一,从读写器收到的数据为16进制码,需要根据16进制解析出正确的条码信息。第二,如何过滤出有效条码信息。读写器在不停的工作,会将工作区内所有的RFID标签信息全部接收,这导致会有大量的重复数据。例如:读写器20毫秒采样一次,第一个采样周期,会采集所有标签数据。第二个采样周期,还会采集所有的在工作区内的标签数据,两次采集的数据只有少量变化,需要过滤掉重复数据,保留有效数据,每秒有50个采集周期,每辆车通过扫描区需要20秒时间,有1000个采样周期,最高时16万条记录在半分钟的时内处理完成。
(2)无人值量守扫描
正常情况是读写器是待机状态,车辆通过扫描区前,人员启动读写器进入扫描状态。完成扫描后,人工触发停止事件,程序处理标签数据,处理完成后存入数据库。现在,由于车辆扫描点和发货班较远,没有人员操作扫描程序,需要计算机自动识别出车辆和有效的数据,并且自动判断扫描完成后存数据库。我们通过随车RFID卡和车辆的合理间隔解决了这一问题。
(3)条码的分配算法
条码获取后要分配到相应的交货单上,这些条码数据才有意义。条码的扫描数据分配到交货单的最直观的方法是保管员手工分配,但是由于每车都有上百包的产品,手工分配不能满足现场的工作需求。所以只能通过计算机的自动分配,保管员确认的方法。条码分配的算法难在分支太多不利于验证。简单分一下就有四种情况:一单一批、一单多批、多单一批、多单多批这四个情况。这是正确装车和正确扫描的情况,如果产品装错了一种情况就翻一倍变成八种情况。如果再有批次不一致,判断情况以翻一倍变成16种情况。这是可以预见的常见情况,还有不常见的情况。如何分析归纳出这些算法的共同点,找出其中的规律,用有限的几种算法满足绝大多数情况,其余的部分用一个特殊的算法统一处理。我们目前用了两个算法解决了这一问题。解决方案的缺点是算法过于复杂,读懂程序需要大量的时间,不利于日后的维护。
(三)负责内容介绍
本人负责java端的开发,在java客户端中,我开发了以下几个模块:用户管理模块、批次录入模块、货物查看模块、仓储管理模块、订单分派模块。以下是各模块的简单介绍:
(1)用户管理模块
系统管理员可以访问此模块,并查看所有用户基本信息,同时可以在点击某用户后,查看其各功能权限,点击“开始修改”按钮后,即可通过权限对应的开关来设置该用户的权限,点击“提交”后,修改将生效。
(2)批次录入模块
在本模块中,操作管理员对于新生成出来的一批货物,先选择该货物类型,完成选择后,输入该批货物的数量,随后将通过RFID读写器逐次写入RFID标签并将货物信息录入到数据库中,RFID标签需要贴在货物上。
(3)货物查看模块
在本模块中,操作管理员可以通过RFID读写器,读取货物上的RFID标签信息,此时程序将显示该货物的具体信息以及其二维码,该图片可以进行下载和打印。
(4)仓储管理模块
在该模块中,操作管理员可以在选择“入库”和“出库”之后,点击批量扫描,程序将驱动RFID读写器进行批量读取,在完成读取后,若是入库操作,需要选择某一个仓库进行批次录入,如果是出库操作可以直接点击“提交”完成出库。
(5)订单分配模块
在该模块中,操作管理员首先需要选择某一订单,随后通过刷取该订单客户的客户权限卡进行授权,授权完毕后可以看到订单的具体内容,并进行批次的分配,分配完批次后,可以通过点击“开始检验”按钮跳转至检验界面,在该界面中,通过扫描所有车上的RFID标签获取该车次所载的货物,并进行比对,如果比对有问题将弹出警告。
(四)完成情况介绍
(1)登录注册界面
(2)用户权限管理界面
(3)批次录入界面
(4)货物查看界面
(5)仓储管理界面
(6)订单分配界面
(7)实物展示
三、个人总结
在本次毕业实习中,最大的收获是了解了完整的项目过程,从需求分析到编码,到最后的测试。在项目进行过程中,也碰到了许多问题,例如RFID标签读写模块的代码编写,由于本专业不涉及硬件方面知识,对于RFID射频技术的应用,是从完全不了解到能够使用,能够将其应用,这个过程锻炼了我的自我学习能力。在java客户端的编码中,首次尝试了广泛应用于生产生活中的软件三层架构,体验了软件最佳实践对编码效率以及后期维护的提升,这种降低各模块之间耦合度的编程思想极大得降低了我后期测试时对代码的修改难度,因为各模块之间已约定了数据传输的各类格式,对小模块的修改不会影响其他模块,这让代码的健壮性更加强。