随着电子商务的快速发展,物流的重要性也日益凸显,而分拣环节在物流系统中是十分关键的。因此,要有效的保证分拣机构的精准高效运行。目前分拣的识别方式主要靠条形码识别,通过光电开关触发条形码扫描设备等捕获条形码信息,然后由光电开关信号以及延时控制分拣机完成最终的分拣。但是由于光电开关的灵敏度,货物的位置以及条形码粘贴的质量等原因,会造成物流成本的增加和物流效率的降低,给企业造成严重的损失。
可见,提高物流分拣的准确度变得尤为重要。为了解决分拣系统中的分拣错误,提高物流的效率,在做了需求分析的基础上,提出了一种基于ARM-LINUX的物流复检系统设计方案。该复检系统能够提高物流分拣的准确度,解决系统的分拣错误。
1 总体设计
该复检系统通过将安放终端节点在分拣系统的各个出线口,通过CAN总线将各个终端节点与主控节点进行通信,通过以太网主控节点可以访问远端数据库服务器,图1所示即是整个复检系统的架构。终端节点采用的是居于Cortex—M3内核架构的STM32F103RBT6处理器,移植RT-Thread作为软件平台,通过RS232接口获取激光扫码头读取到的一维条码,然后由接口将条码上报到主控节点,利用不同的CAN数据包ID号来标识不同的下线口号。主控通过CAN总线得到不同下线口所对应的终端节点上报的条码信息后,通过以太网查询局域网内的数据库服务器,并将所查询项标识为已查询。在查询完数据库之后,主控节点需要根据结果刷新图形界面的显示,发出报警信号,并通知分拣系统的控制系统分拣出错以实现联动。
主控节点还要将查询结果返回给对应的终端节点,由其来控制下线口的输送装置,执行相应的动作,比如伸缩皮带机的运停。
2 终端节点的设计
2.1 终端节点的硬件设计
终端节点被安装在分拣系统的末端,可以根据实际下线口数配置多个。终端节点主要负责采集前期分拣后货物的条码信息,然后再通过CAN总线上传给主控节点。系统结构框图如图2所示,它显示了终端节点主要的硬件模块,STM32处理器负责控制各个模块,对于终端接口使用的STM32F103RBT6,为了使其正常工作,至少应具备供电电路、复位电路、时钟电路、电源滤波电路、JTAG程序调试下载电路以及启动模式选择电路这几个部分。STM32需要3.3 V供电,而条码扫描器和CAN物理层驱动器需要5 V供电,供电模块的任务就是为系统提供稳定优质的电源。条码扫描器使用高速率高精度的激光条码扫描器,它在下线口处重新采集分拣系统分拣后货物的条码信息,通过RS232总线发送给STM32处理器。CAN模块是为了和主控节点取得可靠的通信,传输终端节点上传的条码等信息以及主控节点发送的控制信息,CAN接口设计如图4所示。皮带机模块是为了根据主控节点发送的控制信息控制下线口出皮带机的运行。无线模块和数据采集模块是为了扩展系统的功能,无线模块可以辅助人工控制皮带机,方便操作人员;数据采集模块可以帮助采集末端设备工作状态、环境温度等信息。
2.2 RT-Thread在STM32F103RBT6上的移植
RT-Thread采用模块化设计,不仪仪包禽一个稳定高效的实时内核,更是一套完备的嵌入式系统软件平台。移植过程中采用ARM公司推出的RealView MDK作为系统的开发工具。目前RealView MDK已经集成了业内最领先的技术,囊括了Vision3集成开发环境以及RealView编译器。支持最新的Cortex—M3核处理器,集成Flash烧写模块,配有Simulation设备模拟,性能分析等功能,使之十分适合RTOS的开发。
2.3 CAN接口程序设计
为了使CAN模块能够正常工作,还要对其编程来控制其完成指定的任务。对CAN的控制通过对其一系列的寄存器的操作来完成,为了方便对寄存器组的操作,按照各个寄存器在内存中的相对地址定义了一个结构体CAN_TypeDef,将CAN寄存器组基地址CAN_BASE强制类型转换为
(CAN_TypeDef*)指针后宏定义为CAN,然后通过CAN指向CAN_TypeDef结构的成员来访问CAN控制器的相关寄存器。在硬件复位以后,CAN控制器进入休眠模式以节省电能。为了正常使用CAN,就需要对其进行初始化,对CAN的初始化需要在初始化模式中进行,通过对CAN->MCR的INRQ位编程为1来进入初始化模式,与此同时硬件会置位CAN->MSR的INAK来应答。在完成初始化后,复位CAN->MCR的INRQ位,在CAN与总线取得同步后,进入正常模式。正常模式中就可以完成报文的正常收发。为发送报文,首先要查询CAN-TSR寄存器,选择一个空的邮箱,设置标识符,数据长度,和待发送数据,然后将TXRQ置位来请求发送。由条码扫描器通过串口发送过来的条码格式为ASSIC码,并且条码长度也有差异,而一个CAN数据报文最多发送八个字节的数据,所以要分多次发送,最后在条码数据的结尾加入‘/r’和‘/n’字符表示一次完整的条码传输。
2.4 系统应用程序的设计
在完成RT-Thread到STM32F103RBT6目标平台的移植之后,接下来的工作就是开发系统应用程序,来实现所需要的功能。应用程序开发的第一步就是完成相关硬件或者外设的初始化。存RT-Thread中,相关的初始化工作可以有两种方法来完成。一种是同一的在board.c文件中编写对应模块的初始化函数,并将其放在rt_hw_board_init函数内调用。另一种方式是放在线程函数中完成。然后进行应用线程的开发,采用多线程技术可以以较小的系统开销,降低应用程序开发的复杂度,提高系统的可靠性。RT-Thread以线程为最小的调度单位,采用基于优先级的全抢占式调度算法。针对本应用,创建了CAN线程、barcode线程、daemon及deal线程这四个主要线程,并通过线程问同步和通信方法进行它们之间的协调。
3 主控节点系统的设计
3.1 主控节点硬件系统的设计
主控节点是整个复检系统的核心,它主要完成条形码信息的处理工作,其硬件的结构如图4所示。主控节点有多个模块组成,各个模块所需电源电压不同,处理器核心、片上外设模块所需电压也不同,这些不同的电压由供电系统提供。触摸屏为系统的输入输出接口,用来显示查询数据库后的条码信息,接收操作员的输入命令。CAN模块由SPI接口的CAN控制器及驱动器组成,用来与终端节点通信,主控节点的CAN接口设计如图5所示。为了通过网络服务数据库,配备了以百兆太网通信接口。RS232接口被用为Linux和引导程序的控制台,用来辅助开发LED模块在实验中用来模拟向分拣系统控制器通报分拣错误。S3C6410作为主控节点的控制核心还协调各个模块的工作。
3.2 主控节点软件系统的设计
主控节点使用Linux作为其软件系统平台,软件系统的结构如图6所示。位于最底层的是设备硬件,为了能够使用这些设备,需要开发相应的设备驱动程序。接着是Linux内核和协议栈,主要有以太网的TCP/IP协议栈和Socket CAN的协议栈。Linux提供了统一的编程接口供应用程序调用。为了方便系统开发,应用软件大多使用库来提高开发效率,本系统中主要部署了QT库、C库以及MySQL库等。最终的复检系统应用程序调用内核编程接口和功能强大的各种库来实现其功能。目标板使用的是ARM S3C6410处理器和Linux操作系统,两者通过以太网和RS232接口连接,采用ARM-UNUX-GCC-4.3.2进行编译开发。选择XP与Fedora9的网络连接方式选择桥接,XP和Fedora9以及目标板需要通过以太网链接在一个局域网中。采用与Linux内核源码一脉相承的U-Boot来对Bootloader进行移植,并对Linux的内核进行开发。最后,对复检系统的应用程序进行开发,QT是一个跨平台的图形界面库,支持Linux、Windows等系统,可方便应用在嵌入式系统中,另外用户需要自行设计Socket CAN系统。本研究中使用用QT的图形界面库来设计主控节点的图形界面,使用Qt Creator中所见即所得的UI开发工具设计图像界面,界面显示通过CAN收到的相应下线通道的货物条码和通道,在查询数据库后,将查询到的货物目的地,运输车辆的号牌最示出来。如果发生错误,会弹出QMassageBox警告。主控节点应用程序流程图如图7所示。
4 结束语
本文详细阐述了物流复检系统各个硬件平台和软件系统的开发,完成了ARM-LIUNUX的交叉编译开发环境的搭建等。实际应用表明,设计的基于ARM-LINUX的物流复检系统能够很好的解决物流分拣系统出现的分拣错误,极具实用价值。而且本文中采用的分拣识别是条形码识别技术,也可以很好的拓展到其他方式,比如电子标签等。