基于Qt/E的智能仓储管理便携式终端设计
0 引 言
随着现代物流建设的发展, 仓储管理在物流管理工作中的重要性日益提高, 已成为企业物流管理的核心部分。目前我国仓储管理基本处于人工管理或半自动化管理, 即传统的数据采集方式, 靠人员现场手工记录, 并且手工录入计算机内, 特别是对于一些单体大型仓库、多仓库存储或面积较大的露天场地等, 存在产品信息难以实时获取, 人力劳动的重复以及差错的出现机率增大。此外, 在一些以机械设计加工为主的企业仓储, 在生产加工过程中存在的毛坯、半成品、成品等需要管理, 这些产品型号、品种繁多, 库房产品清理、排查、存储等存在一系列问题[1,2]。为了提高仓储管理的高效性, 通过射频识别实现对物料、订单、人员、设备等信息的实时采集与现场处理, 设计多功能便携式数据终端, 采集的数据可以实时的与控制平台数据库相交换, 这样, 既可实现采集业务数据, 又能现场进行较复杂的业务处理, 避免人工录入出错的可能, 提高工作效率。将便携式终端应用于智能仓储管理系统, 可以解决企业仓储的一些实际性问题。
1 系统方案设计
1.1 终端功能设计
该便携式终端主要以射频技术 (radio frequency identification, RFID) 为基础, 由嵌入式主控模块、人机交互模块、传感器输入模块、以及与PC机或其他通信设备的通讯模块组成。
根据实际所需解决的库房管理问题, 该便携式终端系统设计如图1所示。
主要功能包括:
①产品清点。该系统设计以电子标签作为产品识别和信息采集的技术纽带, 通过手持RFID读写器对产品进行自动识别, 与传统的识别方式相比具有无需直接接触、无需人工干预即可完成数据比对等优点。针对小体积而且规则零件可以采用红外脉冲计数清点功能;对于大型零件产品, 采用压力传感器, 称其质量来清点零件数目。这些功能可以通过无线或有线方式接入各类传感器设备。
②入库/出库管理。入库时对于新增的货物需要登记产品的名称、型号、入库数量、放置位置、产品单位重量等。如果原有数据库存在该产品则只需输入产品型号, 然后增加其库存数目即可。出库时需要登记出库产品型号、出库数量以及领取人编号。
③详细入出库记录。在产品入库、出库的时候系统都会自动生成一个记录数据表, 来记录每一次入库出库产品的型号、数量、入库出库时间 (由系统自动获取) 以及领取人编号。
④产品快速查找、定位。需要查找某种产品时, 只需选择产品查询菜单, 即可在系统的引导下, 输入需要查找的产品的基本信息, 就可以准确查询, 同时如果在库房的每个存放位置安装无线信号接收装置, 则可以发送无线信号点亮货物具体位置的信号灯。这样管理员就能很快找到所需要的货物。
⑤库房环境温度、湿度检测。
⑥数据的实时更新。操作员在任何地点都可以及时通过无线传输得到由系统传过来的出入库预报通知, 根据手持终端的提示进行出入库操作。这样就避免了操作员频繁的穿梭于计算机与库房之间来处理各种出入库单据。该终端还可以与本地计算机数据中心进行数据实时交换, 同时, 在建立计算机互联网络基础上能够实现物品信息的实时共享和互通, 将会把仓储管理带入物联网应用领域。运用物联网技术, 实现企业仓储管理的智能化, 可以有效地掌握原料、产品的流向, 避免发货失误等[3,4]。
1.2 硬件设计
系统硬件框图如图2所示。
本系统核心处理器采用ARM9芯片S3C2440, 是SAMSUNG企业设计的资源丰富、模块体积小、扩展性较强的基于ARM920T核的微处理器, 芯片上集成了分开的16KB指令/数据Cache、外部存储器控制器、集成LCD控制器、4通道DMA、3通道UART、IIC总线等。外围接有人机交互模块、存储器模块、通讯模块、传感器输入模块、电源管理以及实时时钟[5]。其中, 人机交互模块主要是通过触摸屏或键盘按键的响应向系统发出不同的用户请求, 然后通过LCD液晶显示屏将处理结果以直观的方式显示给用户;而存储管理模块主要是由SDRAM和FLASH组成, 它们构建了Linux嵌入式操作系统运行的内存环境以及文件系统、数据库的存储介质;通讯模块则主要包括有线/无线传输通讯子模块, 可以根据实际需要完成数据的交互;传感器输入模块主要有RFID扫描输入模块、库房温湿度监测模块以及红外脉冲计数传感器和压力传感器模块, RFID扫描用于录入产品的进出信息, 将进出信息送给ARM主控单元, 再将信息存储于数据库文件, 同样, 温湿度检测以及库房盘点计数的操作都是通过外围传感器获取信息, 经主控单元处理后反应到LCD界面中。
1.3 App架构
本系统的App包括操作系统App和应用程序两部分。应用程序控制着系统的运作和行为;而操作系统控制着应用程序编程与硬件的交互作用。嵌入式操作系统平台的构建主要包括嵌入式引导程序、操作系统内核、文件系统的实现等[6]。基于Qt/E的智能仓储管理便携式终端的App系统可分为以下5个层次, 如图3所示。
①BootLoader, 是在操作系统启动时所运行的第一个程序, 嵌入式系统通过BootLoader初始化硬件设备、建立系统内存空间映射图, 从而将系统的软硬件环境带到一个合适的状态, 为最终调用操作系统内核做好准备。
②操作系统内核, 本系统采用的是Linux操作系统, 它是整个嵌入式App的核心, 设备驱动程序是连接硬件设备与内核的纽带。
③文件系统, 内核启动之后的运行需要根文件系统的支撑。内核需要从文件系统中装载和运行内核模块以及应用程序。
④QT/Embedded, QT/Embedded是Qt的组成部分之一, 是一个多平台的C++图形界面应用程序框架, 有可视化的图形化开发界面、界面美观、功能较强, 适合于做复杂的应用程序等特点[7]。它用于开发大家所需要的用户图形交互界面应用程序。
⑤用户应用程序的开发, 主要是QT应用程序的编写, 可以通过Qt-creator开发平台来开发QT应用程序。
2 关键模块设计与实现
2.1 RFID数据采集模块
RFID, 即射频识别, 是一种非接触式的自动识别技术, 通过射频信号自动识别目标对象并获取相关数据, 识别工作无须人工干预, 可在许多恶劣环境下正常工作。将RFID模块加装至便携式终端, 其主要功能为对货物的出库、入库、清点货物的信息进行采集、传输[8]。
本系统采用的是超高频915M远距离一体式读卡器, 首先在货物上贴上RFID电子标签, 由于这种远距离一体式读写器既可以读取单个标签也可以一次性批量读取多个标签, 因此可以实现对货物的个体管理或者批量管理。当货物进入RFID读写天线范围后, 标签接受读写器发出的射频信号, 凭借感应电流所获得的能量发送出存储在芯片中的信息, RFID读写器读取信息后, 通过RS232接口将数据传送至ARM主控模块中。该RFID读写器通信参数的默认设置为波特率9 600, 8位数据位, 1位停止位和校验方式。在QT应用程序中首先需要打开串口ttySAC1, 设置与读写器一致的通信参数, 再根据Reader通讯协议, 给读写器发送读写指令, RFID读写器接收后根据命令来对标签进行读写。其命令帧格式如图4所示。
帧格式说明:
● Packet Type 是包类型域, 命令帧包类型固定为0xA0。
● Length是包长域, 表示Length域后帧中字节数。
● Command Data是命令帧中的参数域。
● Status是状态域。
● Check是校验和域, 规定校验范围是从包类型域到参数域最后一个字节为止所有字节的校验和。读写器接收到命令帧后需要计算校验和来检错。
利用RFID读出的电子标签的ID号存入创建好的数据库中, 同时也可与已经存在的信息进行查询比较, 进行入库或出库处理。
2.2 数据库的创建
嵌入式人机界面决定了对数据库的需求, 主要包括体积小巧、功能完善、源码开放等。目前嵌入式数据库有很多, 比如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) ) ") ) ;//创建数据库文件表格
2.3 入库/出库自动实现数据更新
以入库的数据更新为例, 入库时需要录入的信息一般有产品名称、型号、数量、放置位置、单位重量等。
入库实现程序流程图如图5所示。
①如果检测到所输入的产品型号在原始数据库中已存在, 则系统会自动识别并在原有数据上增加其库存数量。
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) ;//对详细记录数据库进行操作
2.4 查找定位模块
完成库存数据的存储后, 为了提高该终端的智能便捷性, 在需要查找某种产品时, 打开快速查找界面, 输入需要查找的产品名称或型号, 就可以准确查询到其基本信息, 界面设计如图6所示。
同时, 也可以增加定位功能按钮, 在此大家增加nRF905无线收发模块, 将所查找的型号以字符串通过nRF905发送给接收装置的nRF905模块, 在库房的一些存放位置安装无线信号接收装置, 接收装置的nRF905由单片机控制, 如果收到的型号属于一段范围内, 则单片机控制点亮具体位置的LED灯, 如图7所示, 管理员通过定位能很快找到所需要的货物。
3 系统功能测试
系统通过测试, 实现了产品信息的RFID识别出入库、存储、准确查找定位, 数据共享等功能。其交互式触摸控制平台测试结果如图8所示。
点击产品入库操作, 实行相应的功能模块即可实现系统设计功能, 图9为产品入库功能设计实现结果。
4 结 语
利用Qt/E所设计的便携式终端可以有效的解决各种环境下的仓储管理系统对数据的采集、检索、存档和统计的实时化, 使管理者更加准确高效的掌握仓储信息, 以及对货物准确快速的查找定位。将此便携式终端根据企业的需求应用于实际生产中, 使管理者能及时、准确、全面地了解到库房物品流通情况, 减少了信息查询时间, 降低了成本, 提高了精度, 将会给企业的管理带来显著的效果。
下一篇: 如何优化供应链提升运行效率
权所有©:上海阳合储运
专业承接上海仓库租赁、亚博取款曝顾秒到账物流、上海电商仓储企业服务与微笑同在"的先进理念不断发展壮大。