1、大连理工大学城市学院本科生毕业设计(论文)院(系)管理学院专业信息管理与信息系统学生指导教师完成日期2013年6月10日大连理工大学城市学院本科生毕业设计(论文)JAVAANDROID程序跨平台通讯方案分析总计毕业设计(论文)68页表格1表插图18幅I摘要本人从2012年11月至今在沈阳新松机器人自动化股份有限公司移动智能机器人事业部实习,从事AGV自动引导车(AUTOMATEDGUIDEDVEHICLE)车体程序的开发及其操控程序的开发JAVAANDROID端无线遥控程序。近年来,ANDROID这个名词渐渐的走进了人们的视线,由GOOGLE公司研发,基于JAVA语言及LINUX操作系统,方便
2、的开源性,它已被越来越多的电子厂商尤其是手机厂商使用,目前市场上绝大多数的手机和平板电脑都采用这种操作系统。我在公司所从事的项目就是将AGV的控制及监控功能做成JAVA电脑端应用程序和ANDROID手机端的应用程序来实现对AGV车体的远程监视及操控。本论文通过对本人近段时间来的实习经历,讨论JAVA语言在跨平台能力上的优势和可行性,以及ANDROID系统在网络通讯及自动化操控上的能力、优势及可行性。总结出一套JAVAANDROID端跨平台通讯的方案。关键词JAVA;ANDROID;跨平台通讯;设计方案IIABSTRACTIFROM2012SINCENOVEMBERINTERNSHIPINSHE
3、NYANGSIASUNROBOTANDROIDCROSSPLATFORMCOMMUNICATIONDESIGNIII目录第1章引言111研究现状112研究目的213研究思路和内容6第2章系统开发的关键技术研究821开发环境的使用922关于WINDOWS系统下JAVA运行环境的搭建及ANDROID程序开发包的布置和使用10第3章程序的设计1331跨平台方案13311跨平台方案分析1332需求分析13321系统功能分析13322系统设计分析1533网络协议的分析18331网络传输方式的选择18332网络协议的制定1834详细设计21341系统模块介绍21第4章程序的实现和效果分析2341程序功能实
4、现23411网络通信模块23412数据解析模块30413功能实现模块3842功能分析改善56421问题分析57IV422问题改善58第5章现场测试6051自身调试与AGV连调60511自身调试60512与AGV连调6252完善内容62第6章总结65参考文献67致谢68JAVAANDROID程序跨平台通讯方案分析1第1章引言11研究现状本人从2012年11月至今在沈阳新松机器人自动化股份有限公司智能移动机器人事业部实习,从事AGV自动引导车(AUTOMATEDGUIDEDVEHICLE)车体程序的研发及其远程操控终端的研发JAVAANDROID端及JAVAPC端无线检测遥控程序,程序分为PC版及
5、ANDROID版两个版本,功能相同,但运行的平台不同。对于目前的研究现状,首先我想简单的介绍一下AGV自动引导车(以下简称为AGV)的概念无人搬运车AUTOMATEDGUIDEDVEHICLE,简称AGV,指装备有电磁或光学等自动导引装置,能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车,工业应用中不需驾驶员的搬运车,以可充电之蓄电池为其动力来源。一般可透过电脑来控制其行进路线以及行为,或利用电磁轨道ELECTROMAGNETICPATHFOLLOWINGSYSTEM来设立其行进路线,电磁轨道黏贴於地板上,无人搬运车则依循电磁轨道所带来的讯息进行移动与动作。从20世纪80年代以来
6、,自动导引运输车(AGV)系统已经发展成为生产物流系统中最大的专业分支之一,并出现产业化发展的趋势,成为现代化企业自动化装备不可缺少的重要组成部分。在欧、美等发达国家,发展最为迅速,应用最为广泛;在亚洲的日本和韩国,也得到迅猛的发展和应用,尤其是在日本,产品规格、品种、技术水平、装备数量JAVAANDROID程序跨平台通讯方案分析2及自动化程度等方面较为丰富,已经达到标准化、系列化、流水线生产的程度。在我国,随着物流系统的迅速发展,AGV的应用范围也在不断扩展,如何能够开发出能够满足用户各方面需求(功能、价格、质量)的AGV系统技术是未来我们必须面对的现实问题。通过上边的说明,我们可以意识到,
7、随着工业化水平以及科技技术的提高,相比于国外的厂商,中国的智能机器人厂商凭借着价格优势以及不输于国外的质量保障,已经被越来越多的国内外企业所认可,就拿我们公司而言,每年智能移动机器人事业部一个部门的销售额就在一个亿以上,去年(2012)年更是达到了14亿(我所在的这个部门共有115名员工,2012年统计的数据显示,部门每人每年的销售额在110万到130万之间,人均销售额非常大),客户遍及国内各地如蒙牛乳业、XX卷烟厂、北京现代、上海通用,当然也包括其他国家如美国、加拿大、韩国、印度等等(后文中会有介绍),随着机器人技术的日益成熟,越来越多的工厂开始采用AGV技术,其市场前景良好。然而,中国AG
8、V相对于发达国家诸如美国、日本的技术还有很多需要学习和追赶的地方,要做的还有很多。12研究目的一般来说,每台AGV上都存在有一个可以监测车体信息以及修改车体系统参数的控制器,通过一个屏幕可以进行对AGV车体各项参数的观察及修改,与此同时车体上还存在一个8方向的物理手控盒(像是玩具遥控车的遥控器),用来对车体进行简单的有线控制。本人在公司接触的第一个项目是在PC端以及JAVAANDROID手机系统上编制出一个可以完全替代于车体控制器及物理手控盒的程序,从而利用移动终端实现对AGVJAVAANDROID程序跨平台通讯方案分析3车体参数的远程修改、监测及遥控。每个应用AGV的厂区都会随车加装控制台,
9、AGV引导车的工作任务是通过控制台远程下达的,由工作人员将任务指令通过无线AP电台发送到指定IP的AGV上,AGV就会按照指定任务来进行工作1。但对于车体的大部分参数,比如导航传感器参数,PRS雷达监测,伺服驱动器信息等等这些是无法通过控制台获取的,在我所负责的项目完成之前,这些参数只能通过AGV车体上的屏幕来进行查看和修改,虽然在正常使用过程中这些参数的使用频率比较少,但如果车体发生故障需要排查的时候,这些数据是必不可少的,工作人员也必须靠近AGV来查看这些参数。然而,在某些情况下,车体在出现故障或事件报错时,人是无法正常靠近AGV的,下边的例子会说明。在我所负责的项目完成之后,公司第一个将
10、远程操控技术用于实践的项目是国家电网通辽某电厂的电力巡检AGV(图11)JAVAANDROID程序跨平台通讯方案分析4图11电力巡检AGV由于是环境比较特殊的高压电厂,人工进入厂区查看设备可能会有触电危险,所以AGV就代替人进入厂区,通过摄像头将图像数据传回控JAVAANDROID程序跨平台通讯方案分析5制室,工作人员就可以在控制室看到厂区设备的运转情况。类似这样的项目,还有很多,当人无法正常靠近AGV的时候,远程方案就会变得比较重要。公司运用到远程操控的第二个项目,是一种小型的货架搬运机器人(图12)图12货架搬运AGV他的长度也只有15米左右,高度1米左右,在车体上方有一台举升机,通过它将
11、货架托起,移至另一地点后放下,截至此论文结文时,正在杭州参加工业博览会,产品大体上成型,还需进一步完善,销售目标是像京东,阿里巴巴等大型电商OR物流企业。虽然功能相对较简单,但是问题在于这样的小型AGV在一个厂区的使用量是非常大的,通常一套系统会包含上百台这样的小车,同时在厂区移动,搬运货物。这么多的JAVAANDROID程序跨平台通讯方案分析6AGV同时在一个厂区工作,最大的难点有两个,一个是怎样合理调度,安排任务,使其不会发生线路上的冲突,再有一个就是一旦某台车出现故障,现场工作人员很难一下子找到发生故障的那台车对其进行故障分析,这样势必会影响整个厂区的工作(牵一发而动全身,一台车出现故障
12、在某段线路上停止了运行,其他车就无法通过这条线路,造成整个厂区工作的停滞)。远程监控就可以解决这样的问题,之前提到过每个厂区都有控制台,用来给AGV下任务,虽然它不能排查车体的问题,但它可以将发生错误的那台车报告给远程终端,远程终端就可以来查看这台发生错误的AGV哪里出了问题。对于以上两个例子,我们可以了解到远程终端的便捷和重要性,它与之前提到过的控制台不同,更偏向于解决问题,为AGV现场的运行提供了保障。而且对于未来民用,工业乃至军工业来说,远程操控所带来的效率及体验感将会是重要的发展要求和趋势。13研究思路和内容我在公司的任务是开发出一套AGV车体参数远程操控程序,首先,对于系统的选择上,
13、WINDOWS系统的版本是必不可少的。毕竟,AGV车体本身的程序是在WINDOWSCE平台下运行的,且控制台方面的软件也是在WINDOWSXP系统下运行,开发出一套基于WINDOWS系统的版本并将其安装在控制台主机上无疑是最好的选择。然而,在绝大多数情况下,控制台与AGV是有距离的,将查看程序安装在控制台上,虽然可以很方便的查看到车体的各项参数,但如果想要远程控制AGV,想让其行走到某一个点或某一个区域内时,就很难做到精确,毕竟人不在车的旁边,走多了或是走少了,哪怕是几厘米的偏差,对于车体上导航传感器、地JAVAANDROID程序跨平台通讯方案分析7标传感器的影响都是非常大的,会影响车体的运行
14、,而人也无法抱着一台电脑站在AGV面前遥控它,于是,将这套查看程序移植到ANDROID平台的手机上,让工作人员可以拿着轻便的手机在AGV的附近观察、遥控AGV也成为了一种解决方案。选用ANDROID平台具有较大的优势。首先,ANDROID作为一个当今非常流行的手机平台,其市场占有率是非常大的,相对于苹果公司的IOS平台,ANDROID平台在用户基数,编程的简易性,对不同手机的兼容性等等方面都要更胜一筹2。如果选择IOS平台,那么首先得需要学习这个平台的编程语言OBJECTC,非开源的性质导致了要想使用编程出来的软件必须通过官方的APPSTORE商店下载,要知道APPSTORE对于软件上架的审核
15、是有非常严格的要求的,如果软件不能上架,就必须在每台AGV发货前都为其配置一台装有此软件的苹果设备,无论从成本上考虑还是对于今后软件升级等问题的担忧,IOS平台都不及ANDROID平台。反观ANDROID平台,相比于IOS,就有了很多个值得选择的方面,首先,ANDROID平台作为开源平台且编程语言为JAVA语言,在程序的编制工序以及发布工序都比较简便,用户只需要将程序RELEASE好的安装包放入手机存储上安装,便可运行,如需版本升级,将升级版的安装包替换掉原先的安装包,再次进行安装就可以了,且ANDROID程序在编程之初就会让编程者选择此程序兼容的ANDROID版本,比如我编制的这个程序的使用
16、版本为ANDROID23至ANDROID41,几乎涵盖了目前市面上所有的ANDROID版本,也就是说ANDROID系统的手机,其系统版本只要在2341之间,都可以进行安装,大大方便了用户3。IOS平台的使用者只有苹果的IPHONE系列、IPAD系列以及ITOUCH系列产品,望而生畏的高价格一直是其硬伤,然而ANDROID则不同,目前世界上大部分手机厂商都选择ANDROID系统,JAVAANDROID程序跨平台通讯方案分析8手机的价格也是从低到高,基本上能满足各类人群的消费能力,在成本上的优势使其更受到我们的青睐。所以当时我们会议最终决定在ANDROID平台上移植这套远程操控程序。再来说一下对于
17、编程语言的选择,由于涉及到嵌入式及硬件,在我们公司,AGV车体程序以及控制台程序都由C来编写,但对于我要开发的这套远程操控程序,需要同时在WINDOWS以及ANDROID两个操作平台上运行,使用C语言是行不通的,ANDROID平台应用程序的开发语言为JAVA,作为相对于C语言而言的新兴编程语言,其优势在于非常强大的跨平台兼容性,同样作为面向对象的操作语言,JAVA相比C而言,在多种平台上的表现要更好,所以我就使用了JAVA语言完成了这套程序的开发工作。而同样,在选择JAVA的同时,问题也随之而来。AGV车体程序本身是基于C语言编写的,运行车体程序的车体控制器(VCU)的操作平台为WINDOWS
18、CE,所以如果使用JAVA语言及开发ANDROID平台的程序必定会涉及跨语言、跨平台的问题。由此,本论文就在讨论JAVA语言在跨平台能力上的优势和可行性,以及ANDROID系统在网络通讯及自动化操控上的能力、优势及可行性。通过制定远程协议收发数据包打包、解包数据分析数据等一系列步骤总结出JAVAANDROID端及JAVAPC端跨平台通讯的方案。第2章系统开发的关键技术研究按公司要求,AGV车体程序为C语言编写,MICROSOFTVISUALJAVAANDROID程序跨平台通讯方案分析9STUDIO开发平台。ANDROID端程序为JAVA语言编写,ECLIPSE开发平台(需要安装ANDROID开
19、发包)。21开发环境的使用MICROSOFTVISUALSTUDIO快速的应用程序开发高效的团队协作突破性的用户体验提供了高级开发工具、调试功能、数据库功能和创新功能,帮助在各种平台上快速创建当前最先进的应用程序4。作为AGV车体程序的开发环境,公司在成立早期就构建一套完整的AGV系统,对于不同型号的VCU(核心处理器),公司先后使用过EVC40、VC60、VS2005、VS2008几个版本,目前主流VCU采用的VS2005版本编译的车体程序。框架非常大,需要从中找到可以调用的接口,向AGV发送指令。ECLIPSEECLIPSE的插件机制是轻型软件组件化架构。插件架构能支持将任意的拓展加入到现
20、有的环境中。目前使用最多的JAVA开发环境。本人使用的ECLIPSE版本为37,在编制PC端程序的时候可以直接编制,当编制ANDROID端程序的时候需要加载ANDROIDSDKWINDOWS开发包,虽然这两个平台上的程序在界面布JAVAANDROID程序跨平台通讯方案分析10局上大同小异,但JAVA应用程序和ANDROID应用程序的差别还是不小的,在下文中会有对比。22关于WINDOWS系统下JAVA运行环境的搭建及ANDROID程序开发包的布置和使用WINDOWS系统在没有搭建JAVA运行环境之前是无法运行JAVA应用程序的,所以在编制JAVA应用程序之前,需要在WINDOWS平台下安装一些
21、必须用到的工具。首先是JDK(JAVADEVELOPMENTKIT),它是SUNMICROSYSTEMS针对JAVA开发人员发布的产品。自从JAVA推出以来,JDK已经成为使用最广泛的JAVASDK。JDK是整个JAVA的核心,包括JAVA运行环境、JAVA工具和JAVA基础类库。从JDK50开始,提供了泛型等非常实用的功能,其版本也在不断更新,运行效率得到了提高。本程序所用到的JDK版本为JDK7U5。之后是开发平台ECLIPSE,上文中已经阐述过,不再过多讲解。SDK(SOFTWAREDEVELOPMENTKIT,软件开发工具包)被软件开发工程师用于为特定软件包、软件框架、硬件平台、操作系
22、统等建立应用软件的开发工具的集合。本程序所用到的为ANDROIDSDK,就是ANDROID专属的软件开发工具包。在ANDROID中,它为开发者提供了库文件及其他开发所用到的工具。可以简单理解为开发工具包集合,是整体开发中所用到的工具包。ANDROIDSDK包含两个重要的模块ANDROIDSDKMANAGER和ANDROIDVIRTUALDEVICEMANAGER。如图21JAVAANDROID程序跨平台通讯方案分析11图21ANDROIDSDKMANAGER模块上图为ANDROIDSDK中的ANDROIDSDKMANAGER模块,它为整个ANDROID开发工具包提供了几乎现今所有的ANDROI
23、D程序版本,本程序对于ANDROID版本的支持范围为23至41版本,需要所以选择相应的版本包下载,程序才可以支持我所定位的ANDROID版本。JAVAANDROID程序跨平台通讯方案分析12图22ANDROIDVIRTUALDEVICEMANAGER模块上图(图22)为ANDROIDSDK中的ANDROIDVIRTUALDEVICEMANAGER模块,它为开发工具包提供了测试用ANDROID模拟器,当程序以模拟器运行的时候,就会根据我所选择的模拟器打开相应的模拟界面,就如同在电脑屏幕上模拟出一个手机屏幕来进行测试。图中可以看到有三项选项,是我在测试程序时自行建立的模拟器,第一个为屏幕尺寸为10
24、寸的平板电脑模拟器,ANDROID版本为22,第二个为ANDROID403版本的模拟器,第三个为41版本。如果需要其他版本的模拟器可以自行下载并添加。以上为程序编制前所需要准备的内容,对于这些前期工作,我想说,相比于VS而言ECLIPSE的环境搭建非常之繁琐,其中的某些需要网络下载的组件或开发包,由于其下载服务器都处在国外,正常在国内下载,如果不使用代理,或网速不够的,很难下载成功,本人也是经历一波三折才将一套完整的开发环境搭建完。JAVAANDROID程序跨平台通讯方案分析13第3章程序的设计31跨平台方案311跨平台方案分析上文中提到,本程序的版本有两个PC版本和ANDROID版本,一个在
25、WINDOWS平台下运行,另一个在ANDROID平台下运行,他们所要发送的目的地为WINCE平台,这里就涉及到跨平台通讯的问题,怎样在不同操作平台之上收发数据,并保证其可靠性,我总结出以下两点需要注意的地方1必须存在良好的网络通讯环境,无论是有线还是无线,必须保证AGV车体与远程操控程序之间可以相互PING通。(详见331)2必须制定出一套完成的网络通讯接口协议,作为两个程序之间相互传递信息的定义。(详见332)如果满足以上两点,就达到基本的数据包收发要求,而对于数据包的格式,发送的内容,则需要通过通讯接口协议来制定5。32需求分析321系统功能分析对于功能需求,在上文中已经简易的概括过,由于
26、AGV车体本身的工作性质,人员无法近距离监控车体的各项参数,也无法在远程对车体进行手动操作,本程序的设计主要目的就在于实现上边两个功能,使人JAVAANDROID程序跨平台通讯方案分析14对AGV的控制更方便,更直接,交互性更强。当然,除了上边两个方面之外还有一些其他的好处,比如用手机操控这种相对较新颖的方式来吸引更多的购买力,优化公司的形象等等。因为不同的客户对于AGV的功能需求都不尽相同,AGV的功能在正常情况下都是为客户定制的,相对的,我做的这个远程操控程序的具体内容需求也会根据客户的需求而改变,以下内容暂时按照我负责的第一个项目“国家电网通辽电厂电力巡检AGV项目以下简称为电力巡检项目
27、”的需求来分析。首先来说明一下电力巡检项目与之前项目的差别,文章开头介绍了AGV运行的几种导航模式,最常见的导航模式为磁带导引(MAGNETICTAPEGUIDANCE),我们简称磁导,将带磁性的条带铺设成线路,AGV通过自身的导航传感器检测磁条相对于自身的偏移量来前进并实时修正自己的车体姿态(也就是判断自己走没走歪)。而电力巡检这个项目所使用的导航方式并非磁导,而是惯性导航(INERTIALNAVIGATION),将原先的磁条废弃,用一种小型的磁铁(纽扣般大小)替代,在预先设定好的路段上每隔一定的距离放置一枚,AGV向前行进到磁铁位置时通过导航传感器检测磁铁的相对位置,计算出自身的偏移量,并
28、在之后的行驶过程中慢慢调整车体姿态,到下一个磁铁的时候再次重复上边的步骤,两个磁铁之间并没有导航磁条,车体仅仅靠盲走行进。这种导航方式相对于之前的磁导,优点在于节省了大量的地面布置工作。而它的问题在于我们在施工中不能保证每个磁铁放置的位置正好在行进路线的绝对直线上,出现1到2厘米的偏差都很正常,而且我们也不能保证每块小磁铁的磁场强弱都相等,所以,在这个应用到惯性导航的电力巡检项目中,我们必须对每一个磁铁的点进行测试校JAVAANDROID程序跨平台通讯方案分析15对,来确保导航传感器可以通过磁铁获取正确的偏移量,确保车体在运行过程中能够自动纠正自身的偏斜,让它走直线。那么,当车体到达每个点时,
29、我们必须要查看导航传感器的偏移量信号,以及车体在运行中的实时惯导角度,以上这两个信息就成为了项目的定制需求之一。像以上的例子还有很多,不在此一一列举,总结而言就是,对于不同的客户,都会有不同的功能需求,我所开发的程序会根据客户的需求相应增减功能。322系统设计分析对于本人所所制作的这款程序,大体上来说需要满足三个方面的要求,即网络通信,数据包解析,自身功能实现。对于这三个要求,在程序中有相应的模块,与功能相对应的函数、类分别存放在这三个模块(或者JAVA文件)中,JAVA语言习惯用PACKAGE(包)这个概念,所以将这三个模块分别放入了不同的PACKAGE中。当然除了程序功能的实现之外,每个界
30、面的布局也单独分离出了其布局文件,存放在布局PACKAGE中,下面这张图可以看出其各个模块所存放的位置。图31PC端程序的结构上图(图31)为PC端程序的结构,根据功能分为4个PACKAGE,其中第一个(COMSIASUNCONTROLLER)包中包含各个页面功能的实现代码,第二个(COMSIASUNCONTROLLERSERVICE)包中包含两项比较重要的功能,其JAVAANDROID程序跨平台通讯方案分析16中之一是网络通信模块,另一个是数据包解析模块,这两个模块所实现功能的方法下文会详细阐述,第三个(COMSIASUNRUN)包中包含一项,为整个程序的整体布局文件,所有的页面都会调用这个
31、文件中的函数来为自己规定页面大小,程序打开位置等等,第四个(COMSIASUNUI)包中包含每个页面的布局文件,用来规定各个页面的控件及其位置。图32ANDROID端程序的结构上图(图32)为ANDROID端程序的结构,同样根据功能划分位置,与PC端不同,ANDROID应用程序的工程在建立之初就已经为编程人员大体规定了一个文件安放的方案,上图中的文件夹为工程建立之初自动生JAVAANDROID程序跨平台通讯方案分析17成,一般在SRC文件夹中存放功能性代码文件,在RES文件夹中的LAYOUT文件夹下存放页面布局文件(ANDROID中的页面布局文件格式为XML,而功能性代码文件同样为JAVA),
32、需要注意的是,除了以上两个文件夹之外,还有几个文件/文件夹比较有用,比如BIN文件夹中存放这个工程所编制的ANDROID应用程序的安装包,文件格式为APK,RES文件夹下的DRAWABLE文件夹存放与应用程序相关的图片文件(默认值,可修改),ANDROIDMAINFESTXML文件为整个应用程序的全局布局文件,描述了PACKAGE中的全局数据,包括了PACKAGE中暴露的组件ACTIVITIES,SERVICES,等等,它们各自的实现类,各种能被处理的数据和启动位置,它可以定义ACTIVITY启动的位置和时间。在本程序中,SRC文件夹下的COMSIASUNCLIENT包存放功能性代码文件,CO
33、MSIASUNCLIENTSERVER包存放数据包解析以及网络通信代码文件。RES文件夹下的LAYOUT文件夹存放页面布局文件。图33程序的工作流程JAVAANDROID程序跨平台通讯方案分析18上图(图33)粗略体现了远程操控程序工作的流程,工作步骤如下程序首先通过用户的操作,告诉功能实现模块自己想要获得的数据,功能实现模块会将想要获取数据的请求传递给数据包解析模块(DATACODEFORMATJAVA文件)进行进制转换并打包,之后将打包好的数据包传递给网络通信模块(UDPSERVICEJAVA文件),网络通信模块再将数据包通过电台发送到AGV车体上,AGV车体接收到来自于远程操控程序的数据
34、包后解包,获取到远程操控程序的数据请求,再将远程操控程序所请求的数据打包并发送回远程操控程序,程序接收到来自AGV车体的数据包之后,对其进行解包,再将解包后的字符串按位提取并通过功能实现模块转化为各种数据类型的变量显示在程序界面上。对于各个模块的详细介绍,见341节。33网络协议的分析331网络传输方式的选择对于程序内部,数据可以通过函数轻松传递,但程序与AGV车体之间的数据包交换,就必须用到网络电台(无线路由)。在控制台主机上安装有大范围大功率的AP电台,所有的AGV车体上都安装有小功率的SA电台,一般情况下,所有的AGV都必须通过自身的小型电台连接到控制台上,控制台通过辨别每台AGV的IP
35、地址来对每台AGV进行调度。而我所做的远程操控程序要想与AGV连接,也必须通过控制台AP,将PC或者手机连接到控制台AP这个大网络环境中,之后同样通过IP地址来分辨AGV,对其进行控制。332网络协议的制定JAVAANDROID程序跨平台通讯方案分析19网络协议的定义微计算机网络中进行数据交换而建立的规则、标准或约定的集合。网络通信最重要的就是通讯双方协议的制定,由于C编写的AGV车体程序与JAVA编写的远程操控程序所用的字符集不同,因此在这两个终端间输入的命令和请求彼此都不认识,为了能进行通信,规定每个终端都要将各自字符集中的字符先变换为标准字符集的字符后,再变换为该终端字符集的字符。对于协
36、议,我们公司通常使用两种TCP/IP(TRANSMISSIONCONTROLPROTOCOL,传输控制协议)协议和UDP(USERDATAPROTOCOL,用户数据报协议)协议6,而对于本程序的通信,选择了使用UDP协议,原因如下1TCP/IP协议的连接需要经历“3次握手”,而作为一个非连接协议,UDP则不需要建立连接,较前者来说效率更高,虽然UDP协议有“丢包”危险,但由于远程操控程序的收发机制为连续收发(为了可以对参数进行实时监测,正常数据查看请求发送间隔为500毫秒,而对于车体控制请求发送间隔仅为50毫秒),即使在某一次发送或接收中数据包丢包,下一帧数据包也会很快来到,弥补丢包失误。2由
37、于第一条中已经说明,程序需要对参数进行实时监测,数据量非常大,UDP协议没有超时重发机制,传输速度快。当程序的目标是尽快传输尽可能多的信息时,使用UDP协议最为妥当,像QQ、多媒体应用这样的程序就使用UDP协议发送。JAVAANDROID程序跨平台通讯方案分析203由于UDP信息包的标题很短,只有8个字节,相对于TCP的20个字节信息包的额外开销很小,对于系统资源的占用,UDP协议要比TCP/IP协议小得多,PC端两者尚可,但对于手机、PDA端来说,系统资源占用越少越好。为了使远程操控程序连通AGV车体收发数据,我专门制定了一套“AGV以太网通讯接口协议”,由于AGV车体参数众多且不同客户对参
38、数有不同需求,截至目前,这套远程通讯协议依旧在扩容中,每当客户或车体本身需要增加新的参数或者功能时,远程通讯协议的内容会根据未来的需要随时加入新的协议内容。图34网络端口通讯协议上图(图34)中就是协议的一部分,图中可以看出,每一条协议都JAVAANDROID程序跨平台通讯方案分析21存在数据头和协议名,协议名用来判断该协议所请求的内容,其变量类型为USHORT型(JAVA中没有无符号短整型,遂在JAVA程序中以SHORT代替),如我想获取保险杠信息,获取保险杠信息这条协议的协议名为50(也被称为帧头),那么我就向AGV发送一个数据部分有且仅有一个50的数据包,AGV收到这个数据包并解析后,得
39、到50这个数,通过调用协议列表,就知道了这个50代表哪条协议,遂将这条协议所包含的内容从车体程序中提取出来,打包成数据包,发送给远程操控程序。用户在进入到页面中查看信息的时候,程序就会自动将这个页面中包含的协议的帧头以数据包的形式发送给AGV车体,AGV车体再将用户想要查看的信息返回给远程操控程序,这样就实现了数据的传递。34详细设计341系统模块介绍在312中我已经大体上介绍了远程操控程序所包含的模块,下面详细对各个模块做下介绍。首先是整个程序的核心,网络通信模块,为什么说它是程序核心,因为整个程序的大部分任务都是在网络通信中进行的。网络通信模块文件(UDPSERVICEJAVA,PC端及A
40、NDROID端相同)中存在着数据接收和数据发送两个线程,在整个程序启动的时候,这两个线程就被打开,直至程序关闭,线程才结束。可以说相对于其他两个模块,网络通信模块的利用效率是最高的。整个网络通信模块只存在于一个JAVA文件中(由于时间比较紧,在程序架构搭建的时候没有那么完善,将来会对整个程序的架构进行重新规划)。JAVAANDROID程序跨平台通讯方案分析22与网络通信模块相交互的是数据解析模块,它的功能是将从AGV车体接收到的数据进行数据包解包或者将功能实现模块中传递过来的数据进行打包。作为功能实现模块与网络通信模块的桥梁,数据解析模块中包含数据打包函数,数据解包函数,将XX型变量(数据)转
41、换为16进制字符串函数,将16进制字符串转换为XX型变量(数据)函数(由于JAVA中没有像C中类似UNION这样的进制转换方法,所以手动写了一些进制转换函数)等7,这些函数的结构将会在第四章讲解。最后一个模块为功能实现模块,所有的功能性代码都集中在这些模块当中。相对于以上两个模块,功能实现模块与之不同之处在于其文件数量很多,每个独立的页面都会存在一个功能性JAVA文件,以及与它相配套的页面布局文件(此处PC版与ANDROID版略有不同,由于ECLIPSE对于JAVA应用程序的开发并未提供可视化编辑界面,所以PC版的页面布局文件为JAVA格式,其中的控件都是手动输入进去的;而ANDROID版则不
42、同,ANDROID_SDK开发工具包中包含有支持ANDROID版本的可视化编辑界面,添加控件时只需手动拖拽就可以,其页面布局文件格式为XML),功能性文件中包括调用数据解析模块及网络通信模块的函数,为按钮添加监听事件等等。以上为三个模块的职能。JAVAANDROID程序跨平台通讯方案分析23第4章程序的实现和效果分析41程序功能实现本节将对程序代码的实现进行分析。按模块来说,对于程序功能的实现,首先要说的是网络通信模块。411网络通信模块相对于功能实现模块,网络通信模块以及数据解析模块的代码量相对较少,它们在整个程序的运行中一次次的被各个页面反复调用。上文中提到过,网络通信模块最重要的部分为两
43、个线程,一个负责接收数据包,一个负责发送数据包,而网络通信模块本身没有布局页面,所以在PC版程序及ANDROID版程序两个版本中,网络通信模块的代码是大部分是相同的,它们之间的区别只在于调用了不同的库函数以及它们在不同的工程内,文件名都为UDPSERVICEJAVA。下面就对UDPSERVICEJAVA中的代码及函数做以讲解。按照JAVA文件代码的泛用格式,在代码文件的开头都会标注其所在的PACKAGE,方便与其他页面区分,方便其他页面对其函数的调用。下面我们以PC端程序举例,PC端程序的UDPSERVICEJAVA文件就包含在以下这个包中PACKAGECOMSIASUNCONTROLLERS
44、ERVICE对于文件中所用到的库函数,在文件开头会对整个页面中所用到的所有库函数进行声明JAVAANDROID程序跨平台通讯方案分析24IMPORTJAVANETDATAGRAMPACKETIMPORTJAVANETDATAGRAMSOCKETIMPORTJAVANETINETADDRESSIMPORTJAVAUTILHASHMAPIMPORTJAVAUTILMAPIMPORTJAVAUTILVECTORIMPORTJAVAUTILCONCURRENTSEMAPHORE接下来创建一个名为UDPSERVICE的类PUBLICCLASSUDPSERVICEPUBLICDATACODEFORMATC
45、ODEFORMATNEWDATACODEFORMAT实例化一个DATACODEFORMAT,这个就是数据解析模块,在这里实例化为了后文中的使用。PUBLICBOOLEANRECVFLAGFALSE设置一个是否成功接收到服务器数据的标志,用于监测数据是否成功接收。PUBLICSTATICBOOLEANSENDFLAGFALSE设置一个是否成功发送数据的标志,用于控制各页面中数据发送次数。THREADSENDTHREAD数据发送线程。THREADRECVTHREAD数据接收线程。PRIVATESTATICRECEIVEMESSAGERECEIVEMESSAGEJAVAANDROID程序跨平台通讯方
46、案分析25用于调回函数。PRIVATESTATICSEMAPHOREIPPORTSENDSEMP/设置IP与端口号的信号量PRIVATESTATICSEMAPHOREIPPORTRECVSEMPPRIVATESTATICSEMAPHORECMDVECTORSEMP/CMDVECTOR的信号量PRIVATESTATICSEMAPHORESENDSEMP/发送数据的信号量以上为设置信号量。PRIVATESTATICMAPSENDDATABUFFERNEWHASHMAP设置数据缓存区。STATICVECTORCMDVECTORNEWVECTOR发送指令集。PRIVATESTATICVECTORSEN
47、DDATAVECTORNEWVECTOR发送数据集。PUBLICDATAGRAMSOCKETUDPSOCKET创建UDP套接字类DATAGRAMSOCKET。PRIVATESTATICINETADDRESSSERVERADDRESS目标地址。PRIVATEDATAGRAMPACKETSENDPACKET发送的数据报包。PUBLICSTATICSTRINGSERVERIP“1921681210“设置目标路由的IP地址,默认值为1921681210,可更改。PRIVATEINTLOCALPORT12345设置源端口。JAVAANDROID程序跨平台通讯方案分析26PRIVATEINTSERVERP
48、ORT1001设置目标地端口。PUBLICINTWAITTIME0设置线程响应间隔,为了实现实时动态观察,本程序在大部分页面中都实行连续发送数据的模式,每500毫秒向AGV车体发送一则数据获取请求,AGV收到请求后回发需要获取的数据。用响应间隔来控制发送频率的快慢。接下来创建ONCREATE函数,它用来表示一个窗口正在生成,在本程序中的ONCREATE函数中,将上边提到的所有信号量实例化,以及对收发两个线程的实例化并启动。PUBLICVOIDONCREATETRY/创建SOCKETTHISUDPSOCKETNEWDATAGRAMSOCKETLOCALPORTTHISSERVERADDRESSI
49、NETADDRESSGETBYNAMESERVERIP/INITSEMPHOREIPPORTSENDSEMPNEWSEMAPHORE1IPPORTRECVSEMPNEWSEMAPHORE1SENDTHREADSEMPNEWSEMAPHORE1SENDSEMPNEWSEMAPHORE1CMDVECTORSEMPNEWSEMAPHORE1/将SENDSEMP置0,等待ACTIVITY发送请求后再发送数据IPPORTRECVSEMPACQUIRESENDSEMPACQUIRE/启动SENDTHREADSENDTHREADNEWTHREADSENDRUNNABLESENDTHREADSTART/启动RECVTHREADRECVTHREADNEWTHREADRECVRUNNABLEJAVAANDROID程序跨平台通讯方案分析27RECVTHREADSTARTCATCHEXCEPTIONEEPRINTSTACKTRACE接下来的函数,作用为将用户需要传递的信息进行数据转换后发送给AGV车体/将所要发送的数据添加到缓存中PUBLICVOIDADDDATATOBUFFERBYCMDSHORTCMD,SHORTDATASTRINGTEMPDATA“如果该CMD已经有数据,则将之前的数据保存到TEMPDATA中IFSENDDATABUFFERCONTAINSKEY