一种快速绘制AGV自动分拣系统地图方法的研究
2020-09-03章信华嵇建波
章信华, 嵇建波
(桂林航天工业学院 电子信息与自动化学院, 广西 桂林 541004)
随着我国经济的发展,我国物流产业的发展成就瞩目,物流经济在国民经济中的“先导性作用”更加重要[1]。AGV 由于具有灵活高效、安全可靠、及维修方便等诸多优点,在物流自动化中受到了越来越多厂商的重视[2]。仓储物流中最重要的系统就是AGV自动分拣系统,而建立AGV自动分拣系统的第一步就是要绘制整个仓库的地图,只有把仓库的地图绘制好了,才能正常调度AGV执行分拣任务。
由于实际的地图中包含大量的信息,即使绘制一张简单的调度系统地图也是非常困难的。通过搜索文献,未找到任何关于绘制调度系统地图的文献,看得出来,这是一个新兴的专业领域,还处于保密阶段。一些公司绘制调度系统地图的方法,是直接在调度系统服务器中编码绘制地图,该方法需要先在纸上将地图绘制好,再将地图上的点和线一一绘制出来,工作量非常大,即使是一张简单的地图,也要耗费1周甚至更长时间;另一方面,这种绘图方法导致调度系统和地图完全绑定,每次修改地图,都需要在调度系统中重新编码生成新的地图;所以这是一种耗时长且十分笨拙的绘图方法,有必要提出一种新的绘图方法来解决这个问题。
1 规划地图
在实际的AGV仓储物流系统中,通常有货架、待命区、充电区和上货区,另外还有很多路径上的引导定位点,这些引导定位点相当于实际交通中的十字路口,用于引导AVG左转、右转或者直行,以便执行相应的任务。为了让AGV能够识别货架、待命区、充电区、上货区和引导定位点,要在这些定位点上放置无线射频识别卡(RFID射频卡),当AGV经过这些定位点上的RFID射频卡时,AGV上的RFID阅读器将会读取射频卡的信息,从而让AGV知道当前走到哪个位置了,以便执行相应的动作,例如转弯、卸货、待命、充电和上货。
基于地图的以上特点,故本文在建立地图的时候,将地图规划为只由点和线段组成,点包括5种关键点,分别是:“货架”、“待命区”、“充电区”、“上货区”和“引导定位点”;线段是指任意2个关键点之间的连接,包含单向线段和双向线段;即一张地图是由若干个关键点和若干条线段组成。
AGV调度系统中的AGV小车采用的是磁条导航方式,并在磁条上布置若干个RFID定位点。磁条导航方式和电磁导航方式的工作原理是相似的,差别在于磁条导航方式的导引线是磁条,并且电磁传感器自带激励线圈[3]。无线射频识别技术(Radio Frequency Identification,简称RFID)是一种非接触式的自动识别技术,它通过射频信号自动识别目标对象并获取相关数据,识别工作无须人工干预,可工作于各种恶劣环境[4]。
2 在AutoCAD中绘制地图
作为一款功能强大的通用的绘图平台软件,AutoCAD被广泛使用于机械、电子、航天、建筑等领域,成为行业中被使用最为多的计算机辅助设计软件之一[5]。正是因为AutoCAD具有绘制二维平面图的诸多优点,所以本文选择用AutoCAD来设计仓库中的地图。
正如上文所述,AGV仓储物流系统中,包含有大量的货架、待命区、充电区、上货区和引导定位点。为了形象表示,在AutoCAD中将“引导定位点”画成圆形,将“货架”、“待命区”、“充电区”和“上货区”画成矩形;这些定位点的种类不同,其RFID号码也不同,即它们具有不同的属性。为了能够快速完成地图的绘制,通过在AutoCAD中定义“属性块”来绘制上述定位点。在AutoCAD中,若将图形中每部分对象都定义成图块,需要时直接插入,这样就可以避免重复性工作,同时还可提高绘图的效率和精确度[6]。
综上,在AutoCAD中,定义2种属性块来表示上述定位点,即定义属性块“圆”表示引导定位点,包含的属性有“种类”、“序号”;定义属性块“矩形”表示货架、待命区、充电区和上货区,包含的属性有“种类”、“地址”、“序号”。“种类”表示该定位点是哪一种类型,地址是货架专有的,表示是第几个货架。“序号”表示该定位点上的RFID号码是多少,每个定位点上的RFID号码是唯一的。2种属性块的具体信息如表1所示。
表1 2种属性块的具体信息
在AutoCAD中,属性块“圆”的定义如图1所示,属性块“矩形”的定义如图2所示。
图1 属性块“圆”的定义
图2 属性块“矩形”的定义
定义完上述2种属性块后,接下来就可以根据仓库的实际情况,来规划整个地图了,只需要将上述2种属性块,修改“种类”、“地址”、“序号”等属性,并根据定位点的实际坐标,逐个地插入到地图中,之后采用线段连接相邻2个定位点即可完成整个地图的绘制,非常方便和快捷。地图上的定位点即是RFID点,线段则是2个RFID点之间的磁条。
3 使用VBA脚本导出地图数据
在AutoCAD中绘制好地图后,工人即可按照图纸进行施工,例如,在路面上,贴上地图中绘制的所有磁条等等。另外一方面,需要将该地图导入到AGV调度系统中,AGV调度系统正是根据该地图来调度AGV执行任务的。为了能快速地将AutoCAD中绘制好地图导入到AGV调度系统中,本文采用AutoCAD的二次开发方法,AutoCAD的二次开发方法包括VBA、AutoLisp 、VisualLisp和Objet ARX等4种[7],本文选择使用VBA(Visual Basic for Applications)进行二次开发,主要是因为 VBA具有简单易学、良好的程序员基础、速度快,以及与其他Windows应用程序交互好等优点而得到了广泛的应用[8]。
上文已经在AutoCAD中绘制好了地图,接下来将通过VBA脚本程序,导出地图中所有的关键数据。地图中只包含2种图元,一种是属性块,另一种是连接2个相邻属性块的线段,只要将这2种图元的数据导出到文本文档即可,导出它们的方法是类似的。
首先对于地图中的每一个属性块,包含的关键数据包括:序号(唯一的RFID号码)、X坐标、Y坐标、块种类和货架地址,只需要将这些数据从地图中读取即可。由于在定义属性块的时候,“种类”属性使用的是文本类型,为了方便导出数据,将其转化为数值类型,具体对应关系,如表2所示。
表2 “种类”属性转换表
为了导出地图中每一个属性块数据,只需要在AutoCAD中,通过VBA中的For语句循环检索图形中的所有属性块,并将属性块的坐标、各个属性值读取出来,并保存到相应的数组中即可,相应的核心代码如图3所示。
图3 读取属性块的核心代码
之后需要将该数组的内容导出到文本文档——RFID.txt中,其核心代码如图4示所示。
图4 导出数据的核心代码
其次对于地图中连接2个相邻属性块的线段,包含的关键数据包括:序号、起点序号、终点序号,同样只需要将这些数据从地图中读取即可,采样的方法和读取属性块是类似的,也是通过For语句循环检索图形中的所有线段,并将每条线段的起点坐标和终点坐标读取出来;由于地图上每一个RFID点的坐标是唯一的,所以可以通过一个点的坐标来查找其相应的RFID号码。读取出每一条线段的起点序号和终点序号出来后,将其保存到相应的数组中。之后同样将数据导出到文本文档—RFIDLINE.txt。
4 服务器读取地图数据
调度系统采用的是浏览器/服务器架构模式,该架构是一种以HTTP为传输协议, 客户端通过浏览器访问Web服务器以及与之相连的后台数据库的体系结构[9],用户只需要通过浏览器即可访问运行在服务器中的调度系统了。浏览器端采用JavaScript脚本绘制调度系统的地图,服务器采用C#编程语言完成。
将包含地图数据的文件,放在固定的文件夹中,运行在服务器中的调度系统将读取这2个文本中的地图数据,并在内存中生成仓库地图,以便完成调度AGV的任务。由于服务器中的调度系统是采用C#编程语言编写的,所以只需要使用C#读取文本文件中地图的数据即可,也是通过For语句循环读取文本文档中的每一行的数据,并保存到相应的数组中。读取RFID.txt的核心代码如图5所示,读取RFIDLINE.txt的代码是类似的。读取完这2个文档中的数据后,服务器将拥有了整个地图所有的数据。
图5 C#读取文本文档的核心代码
5 浏览器中绘制地图
服务器读取完地图数据后,下一步的关键是如何将服务器中地图的数据发送到浏览器端,以便在浏览器中绘制地图;本文采用的方法是在浏览器中添加3个隐藏的文本控件,服务器向这3个文本控件发送2个文档的地图数据和多个AGV的坐标数据。浏览器获得地图数据后,即可绘制出整个地图。由于地图的数据是固定的,所以仅需发送一次数据即可,但由于AGV是一直处于工作状态,它们的坐标一直是变动的,所以AGV的坐标是需要周期性发送给浏览器的,从而可以在地图上实时浏览AGV当前的位置。
浏览器获取服务器中的地图数据后,接下来将采用JavaScript脚本来绘制地图,以供用户查看。JavaScript作为一种编程/脚本语言,已经被广泛用于web开发,以增加更多的动态功能和效果,改善最终用户体验[10]。在浏览器中绘制的地图和在AutoCAD中绘制的地图是相同的,同样是将“引导定位点”画成圆形,将“货架”、“充电区”和“上货区”画成矩形;JavaScript脚本语法比较简单,有了地图的数据后,绘制地图的本质只是绘制多个圆形、矩形和线段,JavaScript有专门绘制它们的函数,绘制圆形和矩形的核心代码如图6所示,绘制线段的代码是类似的。
图6 JavaScript绘制圆形和矩形的核心代码
6 测试结果
为了验证该方法的可靠性和快速性,本文参照某公司的物流仓储系统,采用该方法绘制该仓库的地图。首先使用AutoCAD绘制仓库中的地图,该地图包含有4个上货区,16个货架,8个充电区,4条物流线,如图7所示。
图7 物流仓储地图
该图上部RFID号为14、27、40、55的4个矩形框是4个“上货区”,中下部的4行4列共16个矩形框是16个“货架”,最左边和最右边的矩形框是8个“充电区”,圆形点是“引导定位点”。图中最短的线段的长度是1米,其他线段的长度是1米的整数倍;线段包含双向线段和单向线段,单向线段表示AGV只能朝1个方向移动,包括向左、向右和向下单向线段。
接下来使用已经编写好的VBA脚本,导出地图中的所有数据,导出属性块的部分数据如图8所示,导出的部分线段数据如图9所示。
图8 属性块的部分数据
图9 线段的部分数据
之后将这2个地图数据放入调度系统中相应的文件夹中,调度系统运行时,会自动读取它们,生成调度地图;同时调度系统会自动将这2个地图的数据发送到浏览器端,从而在浏览器中绘制出整个地图;在浏览器中显示的地图如图10所示,地图中的“引导定位点”使用圆形绘制,“货架”、“充电区”和“上货区”使用矩形绘制,4台AGV也使用矩形绘制,为了使地图中的各个图形更易分辨,这些图形都采用不同的颜色绘制。用户可以在这个浏览器界面中实时观察所有AGV当前的工作状态,掌控整个调度系统的运行情况。AutoCAD绘制地图的时间,占据了整个过程时间的绝大部分,其他过程都是自动化完成的,通过实际测试,全过程只花了2个小时。
图10 浏览器中的物流仓储地图
7 结论
从图10可以看出,浏览器显示的地图和在AutoCAD绘制的地图完全相同,这证明了这种绘制方法的可行性;另一方面,整个过程只需要在AutoCAD中绘制好相应的地图,再将地图数据导入调度系统即可,说明这种方法操作简单;此外,这种绘图方法使调度系统和地图完全解绑,每次修改地图,调度系统都无需重新编码,只需导入新的地图数据即可;最后,绘制一张地图的时间由原来的1个星期,缩减到现在的2个小时,说明了这种方法的快速性。