道路施工进度信息采集系统软件设计

上传人:QQ-1****6396 文档编号:660832 上传时间:2019-07-28 格式:DOC 页数:49 大小:2.51MB
返回 下载 相关 举报
道路施工进度信息采集系统软件设计_第1页
第1页 / 共49页
道路施工进度信息采集系统软件设计_第2页
第2页 / 共49页
道路施工进度信息采集系统软件设计_第3页
第3页 / 共49页
点击查看更多>>
资源描述
本科毕业设计(论文)题目:道路施工进度信息采集系统软件设计 学 院 专 业 学生姓名学生学号指导教师提交日期摘 要本文详细介绍了利用安卓设备对道路施工进度信息采集的系统。道路交通的发展直接影响着国民经济发展,伴随着我国的经济的发展,未来我国道路建设将继续高速发展。然而,道路建设中依然缺乏对施工进度信息的有效采集管理,导致道路总体施工进度缓慢,无法优化调度各个子工作面资源。所以,对各个子工作面施工进度信息的采集汇总,将极大优化施工资源配置,提高整体道路施工进度。故本文设计了道路施工进度信息采集系统,可以对各个子工作面施工进度进行采集汇总存储,也可以将施工进度数据下传给下位机。本文所设计的系统是利用安卓智能手机对各个子工作面进行施工进度信息的采集与上传,利用Qt Creator开发软件开发上位机实现对手机上传的信息进行接收存储管理。道路施工进度信息的上传采用TCP/IP协议以实现数据的可靠传输,利用Qt自带的轻量级内置数据库SQLite对数据进行存储和更新修改等功能。最后继承Qt 的QIODevice类编写串口程序,实现与下位机的数据通信。实验结果表明,本文所设计的道路施工进度信息采集系统可以对各个子工作面的施工进度信息有效收集管理,并传送给下位机进行显示。本设计旨在通过道路施工进度信息采集系统,为道路施工总体规划与资源调配提供良好的信息支持,实现优化各个子工作面的资源调度,提高道路整体施工进度,保证道路施工工程可以按期竣工。关键词:道路施工进度;安卓;Qt Creator;SQLite数据库AbstractThis paper introduces a system using Android devices to acquire the progress information of road construction .The development of road traffic affects the nation economic development directly. With the development of our countrys economy, the road construction will develop in high-speed in the future. However, Road construction is still lack of effective collection and management about construction information, which lead to slowness progress as a whole .whats more, It is difficult to optimize the resources of each working face .For this reason .we designed a system that it can acquires and manages the information of road constructions progress. It is also can transfer the information to lower computer.The article designed system is bases on android phone to acquire progress of each working face. Qt Creator as development software, develop a upper computer to receive and storage the information uploaded by Android Phone through internet .Using TCP/IP protocol to guarantee the reliable transmission of data .then ,Using Qts own lightweight built-in SQLite database for data storage and update, etc. Finally, edit serial program by inheritQIODevice class to realize data communication with the machine.Experimental results show that the system can collect and manage the progress of working face effectively, and transmitted to the machine for display. This design aims to through gather the road construction schedule information to provide a good information support for the management of road construction schedule. Realize the optimization of resource of each working face, improve the overall road construction progress and ensure the road construction project can be finished on schedule.Keyword: road construction progress; Android; Qt Creator; SQLite目 录摘 要IAbstractII第一章 绪 论11.1论文的研究目的11.2 论文的研究背景与意义21.2.1研究背景21.2.2研究意义31.2.3研究现状31.3本文的研究内容3第二章 系统设计方案52.1系统总体方案设计52.2 TCP/IP协议介绍62.3本章小结8第三章 基于安卓平台的道路施工进度信息采集设计93.1操作系统的选型93.2安卓系统的介绍93.3安卓开发环境的搭建103.4道路施工进度信息采集设计与实现123.4.1软件需求123.4.2 软件设计框架133.4.3安卓的Activity技术133.4.4功能设计实现143.5本章小结19第四章 上位机开发204.1开发环境介绍204.2 上位机整体架构204.3各个模块的设计与实现224.3.1道路信息接收模块224.3.2 数据库管理模块264.3.3串口通信模块294.4本章小结32第五章 功能测试及测试结果335.1 信息采集上传测试335.2数据库管理模块测试365.3串口通信模块测试385.4本章小结38结 论39参考文献40附录 实现上位机所编写的类41致谢42III第一章 绪 论1.1论文的研究目的 我国是一个幅员辽阔,并且人口总数超过13亿的国家,对于这样国家而言,交通的发展直接影响着我国国民经济的发展。正所谓“要致富,先修路”,我国政府已经把道路交通基础设施建设作为我国经济发展的排头兵,以促进我国经济继续向前发展。改革开放以来,我国国民经济已经取得了举世瞩目的发展进度,我国的道路基础设施的建设也取得了长足的发展。根据交通运输部发布的中国公路水路交通运输发展报告显示,截止到2012年年底,我国的高速公路通车里程达到9.6万公里,公路总里程达到424万公里1。虽然我国在道路基础设施建设方面取得了巨大的成绩,但是不可否认,我国的道路有效供给仍然不够满足于我国的运输发展的需要。同时,道路建设为了适应我国经济的快速发展以及带动西部及经济欠发达地区的发展,必将保持较快的增长态势。据我国交通部的规划,我国的道路基础设施将继续加快建设,2020年将在全国形成五纵十横的主干线等。目前各个地方的公路建设都在按照计划紧张进行。所以,我国的道路规划建设仍然将继续向前推进和发展2。现阶段比较普遍的组织施工的方式主要包含有依次施工、平行施工和流水施工。依次施工是将工程分割成若干个子工作面,一个一个一次完成。显然这种施工方式现场作业单一,工期长,不利于工程量较大的道路施工工程。平行施工是指几个工程队在同一时间不同空间进行施工。这种方式工期短,而且存在交叉作业。流水施工将工程划分若干个施工段,按工艺划分施工过程,对所有工程按某一时间间隔依次施工。目前道路施工方案大多采用流水施工方式,因为其能充分利用工作面,加速施工进度,是道路建设工程尽早竣工,发挥投资效益。然而目前对各个子工作面施工进度信息的采集方式大多以人工登记并进行汇总,无法提供各个子工作面的工作进度信息实时性,导致道路施工进度总控制室由于未能接收各个自工作面进度实时信息,无法合理调度施工资源。所以设计一款系统来采集各个子工作面的施工进度信息,将给道路施工进度的总控提供更好的信息支持,提高工程的统筹协调,提高各个工作面施工的可操作性和灵活性。总的来说,我国国民经济发展,给道路的建设提供了良好的发展环境,道路的发展反过来又刺激经济的发展。我国的道路建设继续快速发展,道路施工进度信息的采集为道路总体施工建设提供了信息保证,为道路工程建设注入了新的技术。1.2 论文的研究背景与意义1.2.1研究背景 信息采集系统应用了当前比较前沿的科学技术其中包括信息学科的技术、数据通讯技术、计算机技术等。随着移动互联网技术的飞速发展,如何利用现代的移动互联网技术来实现道路施工进度信息的采集将是一个新的课题。伴随着移动互联网技术的发展,Google公司于2008年9月正式发布了Android1.0,接着安卓系统不断更新升级,安卓设备销售量也在呈现逐年增长,根据Strategy Analytics市场调查公司数据显示,单单安卓智能手机2014年的出货量已经超过10亿台,市场占有率已经超过80%。目前人们的日常生活中随处可见安卓设备的踪影,安卓设备在生产中的应用也是屡见不鲜。由于安卓系统的不断更新换代,除了基本的电话、短信等功能外还增加了许多新的功能,比如GPS定位、邮件收发等丰富的功能。正是安卓的强大的信息处理能力和友好的人机交互界面,使得Android设备可以适应不同行业的需求。当然Android设备也是适用于道路施工进度信息采集,对比于传统的采用硬件开发来说,开发的成本较高,维护繁琐,人机交互不够友好等。相反,在Android设备开发道路施工进度信息录入软件,实用性和可操作性都较高。Android是由谷歌公司于2007年11月对外公布的手机操作系统名称,该操作系统是基于Linux平台的开源手机操作系统,该系统的推出与当时的主流塞班和iOS形成了三足鼎立的局势,之后Android操作系统不断升级换代,用户活跃数量不断增加,于2011年8月2日占据的全球48%的市场份额,成为全球第一,结束了塞班的霸主地位3。截止到2015年5月份,安卓系统已经经历了大幅度的改动,由最初的Android1.0升级到现在的Android5.0,功能也越来越丰富,运行和处理速度得到大幅提升。正是谷歌的不懈努力,系统的升级和功能的增加,使得基于Android平台的应用开发者和应用程序不断增加。2014年,Android的应用商店Google Play 的应用数量已经超过苹果应用达到了143万款,开发者总数也超过个苹果APP Store 的28.3万,达到了38.8万。现在越来越多的行业插手移动互联网,把业务范围都扩展到安卓设备端,比如主打社交的“微信”和“陌陌”,有主打购物的应用“淘宝客户端”和“京东手机客户端”,有主打团购的“美团”等等,各行各业都跟随者移动互联网的浪潮,借着安卓设备普及之势,纷纷扩展自己的产品领域3。Android设备功能不断丰富和移动互联网的高速发展,将会给更多行业带来新的发展机遇与发展方式。当前处在道路建设的发展机遇期,将Android平台与道路施工进度信息采集现结合起来,开发基于安卓平台的道路施工进度信息采集软件,将对道路施工进度和道路建设管理带来新的发展模式。1.2.2研究意义 道路施工的按期完成是道路建设规划的基本要求,若某一道路工程施工项目无法如期完成施工进度,将导致后续道路基础设施建设的正常进行,以至于影响整个道路建设的正常进行。甚至于影响该道路的投入使用,其结果将直接带来经济上的损失。显然,道路施工进度对整体道路建设起到了至关重要的作用。 目前绝大多数的道路施工进度的控制都采用预先制定计划,并按照计划进行施工,然而现实中经常出现许多突发情况导致一些子工作面施工进度较快,一些道路的施工进度缓慢,最终的总体道路施工工期将被延长,以至于无法按时竣工。本文将所设计的系统就是能够将所采集的各个子工作面施工进度信息上传到总控制室里,通过电脑的应用程序接收和管理各个子工作面的施工进度信息。并且可以实现数据向下传输到下位机(下位机由三色LED显示各个子工作面的施工进度)进行进度信息展示,方便总控制室人员对每个施工点的信息掌握与合理调配施工资源,最终达到优化资源配置,缩短施工工期的目的。1.2.3研究现状项目施工的进度控制方法主要包括规划、控制和协调。为了保证项目施工进度的正常进行,一般采用动态控制的方式。当实际施工进度与计划进度不一致时,重新调整计划,使得实际进度和计划重新重合。施工进度的控制就是采用这样的不断循环的动态控制方法。施工进度的信息采集也就是施工项目进度控制中的信息反馈。目前道路施工的实际进度主要是通过现场施工人员逐级向上级反馈直至将信息反馈到中央控制室,总控制室将各方面的信息进行收集的统计整理,再做出适当的计划更改使其能够满足原来的进度计划和工期目标。1.3本文的研究内容 第一部分为绪论。主要描述了道路施工进度信息采集系统的研究目的与意义。同时,简要介绍了安卓智能机作为采集设备的背景。并介绍了道路施工进度信息的采集技术与发展趋势,最后介绍了本文的主要研究内容。 第二部分主要介绍道路施工进度信息采集系统的整体设计框架,还要对TCP/IP协议进行介绍,它是本文中数据上传所采用的协议。 第三部分将介绍安卓智能机信息采集的软件设计。其中包括在Windows 平台搭建安卓开发环境,安卓的界面开发和TCPSocket的编程方法。 第四部分详细介绍利用Qt Creator 编写上位机程序实现对数据的处理。其中包括利用Qt 的网路通信模块进行数据接收,利用SQLite 数据库对数据储存更新查询,最后简单介绍上位机与下位机串口通信的实现。 第五部分对本次设计的系统的每个子功能进行测试,并展示测试结果。最后进行系统的整体运行测试。 第二章 系统设计方案2.1系统总体方案设计本设计的要实现的功能是通过安卓智能机作为各个道路施工工作面的施工进度信息的采集录入设备,并通过网络将数据上传到总控制室的上位机上,上位机负责监听和接收信息,并将信息储存到数据库中,同时将数据打包发送给下位机,由下位机负责将施工进度信息数据以LED颜色展示各个工作面的进度信息。控制室人员可以很方便的通过上位机的GUI界面访问数据库,实现对数据的查询、修改、删除等操作。本系统的软件设计的总体设计框架如图2-1,主要由安卓信息采集软件和上位机软件。上位机中包含数据信息接收功能、数据库信息管理功能、串口通信功能。图2-1 道路施工进度信息采集系统软件设计总体框架下位机主要负责接收数据并将各个子工作面的施工进度信息以3色LED灯不同颜色来显示,如施工进度0%用LED灯显示红色表示、施工进度33%用黄色表示、施工进度66%用绿色表示、施工完成用即100%用白色表示。下位机采用STC89S52作为主控芯片,该芯片的串行口是一个能够实现全双工通信的可编程接口。下位机以中断的方式接收PC上应用程序(即上位机)发送过来的数据存储到存储模块中。单片机以一定的周期从存储芯片中读出数据,并将数据传送到LED节点,每个LED节点代表不同的工作面,LED的颜色用来显示各个工作面的施工进度情况。本设计的下位机总体结构如图2-2所示,主要包括串口通信模块、中央控制模块、存储模块、显示模块(其中显示模块由各个LED节点组成)。图2-2下位机总体结构图2.2 TCP/IP协议介绍IP(Internet Protocol,Internet协议 )通常简称IP协议,IP协议使得连接到Internet 上的设备,包括不同类型的计算机或者不同操作系统,只要都使用IP协议,双方就可以互相发送和接收数据。IP协议定义于网络层,他负责将消息从一个主机传送到另一个主机,消息在传送的过程中被分割成一个个数据包。IP协议根据每个包包头所包含的IP地址进行寻址,所以同一个消息报文的IP包可能会经过不同的路由器到达最终的目的主机。由于IP协议是面向无连接的,所以在传送过程中可能出现的异常将导致数据的丢失或出错,所以要保证数据传输的可靠性还要TCP协议的支持。TCP(Transmission Control Protocol,传输控制协议)是一种面向连接和数据流的可靠通信协议4。它能够保证在建立网络虚拟链路链接后,两端可以进行无差错的通信服务。TCP协议位于OSI中的运输层。每一条TCP连接只能有两个端点,即点对点的连接。并且TCP提供全双工的通信方式,TCP在连接的两端都设有缓存,可以再合适的情况下把发送缓存的内容发送出去,在上层应用进程需要的时候对接收缓存的内容进行读取接收。其中需要强调的是,TCP中“面向字节流”中“流”是指流入或流出进程中的数据是以字节序列的方式进行的,TCP把上层应用程序交下来的数据看成无结构的字节流,因此建立TCP连接的两端需要定好协议,才有能力识别收到的数据,提取出有意义的数据。TCP连接的端点叫做套接字(socket),根据RFC793的定义,端口号拼接到IP地址即构成套接字。所以有socket=(IP:port)每个TCP连接有两个端点组成,所以有TCP连接=socket1,socket2=(IP1,port1),(IP2,port2)4这里的socket与接下来应用程序中的联网协议接口API不同。TCP的连接建立需要进行三次握手。首先,TCP客户端向TCP服务端程序发送连接请求。处在监听状态的服务端收到连接请求后,判断是否同意建立连接,若接受连接,则向客户端发送应答确认信号。TCP客户端在接收到服务端的确认后还要给服务端发出确认信号。当服务端接收到客户端的确认信号后,TCP连接便建立起来,接下来两个端点便可以进行全双工通信。图2-3为用三次握手建立TCP连接。图2-3用三次握手建立TCP连接 在完成数据通信后需要断开TCP连接,客户主机和服务器主机都可以释放连接。在释放链接之前双方都处在连接状态。客户向主机发送断开连接请求,并停止发送数据,服务器在接收到客户端的断开连接请求后向客服端发送应答信号并通知上层应用进程,此时只是释放了客户端到服务器的连接,所以服务器仍然可以向客户端发送数据。当服务器确认了连接释放请求后向客户端发送释放连接确认信号,此时服务器不会向客户端发送数据,而是处于等待关闭状态。当客户端收到服务器的确认信号后还要向服务器发送确认信号的确认,在服务器收到客户端的确认信号后,双方都进入关闭状态。所以TCP连接的释放需要经历四次握手,如图2-4所示。图2-4 四次握手释放TCP连接2.3本章小结 本章主要介绍了道路信息采集系统的整体系统架构,其中包括软件设计总体结构和下位机的总体结构。接着,详细介绍了TCP/IP协议,包括TCP的连接建立过程和连接释放过程。第三章 基于安卓平台的道路施工进度信息采集设计3.1操作系统的选型 随着移动互联网的快速发展,截自2013年据我国的手机拥有数量已经超12亿。可见手机的普及度很高,所以选用手机作为道路施工进度信息录入采集设备将是一个十分方便可行的。目前市场上的手机采用的主流系统主要有Android、iOS、Microsoft、blackberry等等,根据Strategy Analytics公布了2014年第二季度智能手机操作系统全球分布情况入图3-1可见,Android操作系统的全球市场份儿已经高达84.6%。而iOS系统市场占有率达13.4%,Microsoft和blackberry平台总和也就只有6.2%。通过这些数据可以看出Android的发展势头很猛而且市场普及率高,非常适合作为软件的开发平台。图3-1 2014年第二季度智能手机市场份额根据以上的数据显示,安卓系统和苹果iOS系统占据了市场90%以上的市场份额。然而由于iOS系统是闭源的。iOS的软件只能运行在苹果设备上,且目前苹果产品价格相对较高。反观安卓系统的开源性,可移植性强,而且安卓手机品类丰富,价格相对便宜。已经有很多行业利用安卓设备的案例。所以在安卓台上进行软件开发具有很好的应用前景和市场价值。3.2安卓系统的介绍 Android系统的底层是建立在Linux系统之上的,该平台有操作系统、中间件、用户界面和应用软件组成5。图3-2显示了Android的系统体系。图3-2 Android系统的体系结构(Android官方文档)安卓系统采用了软件叠加的方式进行构建,各个层实现各自的功能,层与层之间互相分开,当某个层的结构发生变化的时候,只要保证层间的接口不变,其他层就可以不作改变。这种分工使得层与层之间的耦合较低,当底层结构改变时,应用程序可以不作改变。安卓的application frame提供了大量的API供开发者使用,使得开发变得更加简单方便,同时应用程序框架也为软件复用提供了支持。3.3安卓开发环境的搭建安卓软件开发的准备工作就是要搭建出安卓的开发环境。Android的开发可以在不同的操作系统下进行,比如Linux或Windows等,本文中是基于Windows操作系统的开发。所以下面将介绍Windows下的开发环境搭建。在Windows环境下的Android开发环境搭建主要包括3个部分Eclipse、JDK 与Android SDK。Eclipse是有Sun公司开发的跨平台基于Java集成开发环境(IDE),同时它还附带有JDK(Java Development Kit)。JDK是Java语言的软件开发包工具,其中包含有许多Java开发需要的基础类库,和工具,是Java开发的重要组成部分6。SDK(software development kit)是有Google公司推出的软件开发工具包,它采用的是Java语言,所以必须预先安装好JDK。安装好以上各个软件,基本就完成了Android开发环境的搭建。为了能在开发过程中模拟开发软件的运行效果还需要安装AVD(Android Virtual Device,安卓虚拟设备),便可以在Eclipse上Android Virtual Device Manage的创建模拟器。Eclipse软件开发界面入图3-3所示,虚拟机运行图3-4所示图3-3 Eclipse 软件开发界面图3-4 安卓虚拟器运行界面3.4道路施工进度信息采集设计与实现3.4.1软件需求 基于Android智能机的道路施工进度信息采集过程如图3-4所示:图3-5 道路施工进度信息采集过程由于本文设计的数据要上传到总控制室上位机进行存储,所以在手机本地存储中不考虑数据的存储。所以在道路施工进度信息的采集软件设计的关键是道路施工进度信息的录入操作与数据的上传这两个部分。针对数据的录入部分,将通过人机交互的界面布局,只要按照依次填写道路施工信息的各方面内容就完成信息录入工作。而对于数据上传部分,本设计考虑到TCP/IP协议提供可靠的传输协议,并且是全双工的工作方式,而UDP是非面向连接不提供可靠传输。所以采用TCP进行数据上传采用的协议。3.4.2 软件设计框架软件的设计框架是在分析软件需求的情况之下进行的软件设计思路分析,是进行软件设计的基础与必备工作。如图3-6,从图中可以看出软件设计框架。软件的操作过程大致为:进入软件首先是欢迎界面接着自动跳转到道路施工信息录入界面,操作人员依次填写施工路段编号,施工进度,并填写主控制室上位机TCP服务端的的IP与端口号,接着就可以进行数据的上传工作。图3-6 安卓软件框架3.4.3安卓的Activity技术 Activity是安卓的重要组件之一,作为安卓设备中用来显示信息和直接进行人机交互的界面。Activity界面可以放大缩小旋转或者浮动与其他的界面,允许通过一个Activity切换到其他的Activity,页面与页面之间进行切换的时候,被切换的Activity被压入栈中,可以在后面的操作中可以进行弹出堆栈恢复。堆栈遵循“先进后出”的原则,所以可以通过“返回”按钮恢复之前的Activity。图3-7是安卓中Activity的生命周期5。图3-7 Activity生命周期创建一个Activity首先需要在安卓的配置文件AndroidManifest.xml中声明这个Activity。一个Activity一生成就进入onCreat()函数,之后进入onStart()和onResume()进入运行状态,当Activity切换到后台是运行onPause()函数,当Activity不可见后调用 onStop(),只有在关闭Activity才运行onDestory()结束该Acticity组件。在Acticity之间进行切换时,需要使用Intent对象为它们传递信息,一个Intent对象中封装目的Activity的对象,通过startActivity(Intent)来启动Activity。机理是通过AndroidManifest.xml配置文件中的IntentFilter过滤其他的Component,找到具有相同Component属性的Activity,若找不到与之相匹配,系统将会抛出一个异常。3.4.4功能设计实现软件的启动界面可以有软件的整体功能介绍、风格特性等。优秀的软件特别是一些用于商业用途的软件,软件的启动界面可以给人对软件的大致功能等有大致的了解。本次的软件主要功能是进行道路施工进度信息的采集,所以启动界面的背景采用道路施工图案,标题是“道路施工进度信息采集”,启动界面如图3-8所示图3-8 软件的启动界面界面xml布局部分代码如下:RelativeLayout xmlns:android=http:/schemas.android.com/apk/res/android xmlns:tools=http:/schemas.android.com/tools android:id=+id/no1 android:background=drawable/start/启动画面设置背景 android:layout_width=match_parent android:layout_height=match_parent/账号密码输入框和登陆按钮部分功能代码如下:login.setOnClickListener(new Loginlistener();class Loginlistener implements OnClickListener Override public void onClick(View v) /鉴定登陆账号密码是否正确 Intent intent = new Intent();/生成一个Intent对象 intent.setClass(MainActivity.this,ActivitySecond.class);/通过Intent对象启动另外一个Activity MainActivity.this.startActivity(intent); else Toast toast=Toast.makeText(MainActivity.this, 您输入的账号或密码不正确, Toast.LENGTH_LONG); toast.show(); zhanghao.setText(); mima.setText(); zhanghao.setFocusable(true); 其中为登陆按钮绑定监听器,当按下登录按钮时,执行登陆账号密码的校验,若登陆成功则启动intent.setClass(MainActivity.this,ActivitySecond.class)和MainActivity.this.startActivity(intent)启动软件的道路施工进度信息录入界面。若登陆密码错误,将通过Toast toast=Toast.makeText(MainActivity.this, 您输入的账号或密码不正确, Toast.LENGTH_LONG)显示“您输入的账号或密码不正确”并将账号密码输入框清空方便使用者继续重新输入。在道路施工进度信息录入界面如图3-9,要对主控制室上位机的ip、端口号、施工路段编号、道路施工进度信息进行填写之后方可进行数据上传。图3-9 道路施工进度信息录入界面布局部分代码如下:/四个单选按钮功能代码如下:Overrideprotected void onCreate(Bundle savedInstanceState)/创建Activity时自动运行 super.onCreate(savedInstanceState);setContentView(R.layout.activity_activity_second);/加载界面布局edit=(EditText)findViewById(R.id.gongcheng);/获取界面中的施工路段编号输入框对象class OnCheckedChangelistener implements OnCheckedChangeListener Override public void onCheckedChanged(RadioGroup group,int checkid)if (checkid=R.id.radio0)/如果选中第一个单选按钮即“0%”,获取施工进度信息else if(checkid=R.id.radio1)else if(checkid=R.id.radio2)else if(checkid=R.id.radio3) 完成了对施工进度信息的获取之后,要对信息进行上传,为了保证信息的可靠传输,这一采用之前介绍的TCP/IP协议对数据进行传输。手机作为TCP客户端使用Socket构造器来连接指定的服务器,由于建立网络连接和实现网络通信并不是很可靠稳定的,而且所消耗的时间也是不确定的。如果使用UI线程建立网络连接、传输数据将导致UI线程的阻塞,直接表现出界面“卡死”,因此本次设计进行的网络资源访问,数据传输将在新线程中操作。Android应用需要访问网络需要在AndroidManifest.xml配置文件中授予访问互联网权限,配置片段如下: /允许访问网络/允许WiFi操作5 下面部分代码为新线程中的数据传输部分new Thread()Overridepublic void run()try ip=ipaddress.getText().toString();port=Integer.valueOf(portedit.getText().toString();Socket socket =new Socket(ip,port);OutputStream outputStream = socket.getOutputStream();byte buffer = new byte4;buffer=tobytearry(id, progress);/ 数据封装到字节流中outputStream.write(buffer);outputStream.close();socket.close();catch(IOException e) e.printStackTrace();.start();Java中提供了java.net包中含有Socket通信的类7,这里利用Socket构造一个指定IP和端口的TCP连接,通过OutputStream outputStream = socket.getOutputStream()9将连接封装到输出流中,这样就可以通过输出流的操作实现在TCP连接中的数据传输。由于TCP连接中是面向字节流的,所以在传输数据要对数据封装到字节流中,然后通过write()方法发送出去。最后还要对输出流和套接字连接关闭操作。3.5本章小结本章主要介绍了在安卓操作系统下的道路施工进度信息采集软件实现。首先对软件的功能需求和软件架构进行简单的分析。接着介绍了安卓的Activity组件技术。最后详细介绍了数据传输功能的实现方法。第四章 上位机开发4.1开发环境介绍Qt是由奇趣公司于1991年开发的跨平台C+应用程序和UI开发框架,现已被被诺基亚公司收购成为其旗下的编程工具。它具有许多优良特性,比如支持在Windows、Linux、Sunos、SCO等等众多平台下运行。开放Qt源代码库并且开放了原来商业平台的代码,大量的开发文档和丰富的API对开发者提供了有力的支持。Qt是面向对象,对于开发者来说,良好的封装机制使得Qt中各个类的复用性很强。同时提供了信号与槽模式,使得各个元件与关联代码之间很够很好的协作,使得开发变得易于操作。同时Qt也支持动画框架、多媒体框架等等为Qt增加了许多功能1。 本文采用的是Qt Creator 2.3 是一种集成了编辑、设计、帮助、调试分析等于一体的轻量级集成开发环境(IDE),能够让首次接触Qt框架的开发人员迅速上手11。图4-1 Qt Creator 软件开发环境4.2 上位机整体架构 启动上位机后要实现数据的接收与管理并且支持数据的串口通信以实现系统的扩展。所以上位机的整体架构可以分为3个功能模块。如图4-2所示图4-2 上位机整体架构道路信息接收模块主要实现的功能是实现利用TCP/IP协议在PC上运行TCP服务端程序并监听制定的端口。安卓手机客户端作为TCP连接的客户端,当服务端接收到安卓手机客户端的连接请求后,允许连接并接收数据。并对接收到的数据进行存储。数据库管理模块主要是对接收到的数据信息进行存储更新等,当然也允许管理人员手动修改或删除某些数据。也可以进行数据查询操作。串口通信模块主要是对数据库中的一些信息进行打包封装进行传输给下位机。当然在传输之前要对串口进行设置比如传输波特率、数据位数、校验方式等。本次上位机开发中开发的类中各个类的继承关系主要可以通过图4-3层次结构图表示。图4-3 a) 各个模块界面继承QDialog基类 4-3 b) 主界面界面继承QMainWindow基类图4-3 c) 串口通信中类的层次结构 图4-3d) 串口通信中线程类继承关系图4-3 层次结构图4.3各个模块的设计与实现4.3.1道路信息接收模块 (1)界面设计道路信息接收模块的人机交互界面简洁,三个基础按钮“开始监听”、“停止监听”、“退出”作为控制TCP服务端的启动与关闭。同时由于电脑端口有可能被其他应用程序占用,所以设置输入框用于设置监听的端口号,同时能够显示当前电脑的IP地址。人机交互界面如图4-4所示图4-4 道路施工进度信息接收界面Qt 支持XML文件的布局,同时也可以在设计环境中进行拖拽合适的元件,集成环境会根据你的操作生成对应的XML文件。设置好的界面布局文件要在这个类的构造函数中添加UI界面,即ui-setupUi(this);以下代码简单展示“开始监听”按钮的XML代码 开始监听 (2)功能设计实现 Qt提供了QTcpServer 类用于编写TCP服务端的应用程序,而QTcpSocket 类提供了TCP协议的一些常用的接口,利用QIODevice 类实现对数据的发送与接收。图4-5为TCP服务端工作流程图。图4-5 TCP服务端工作流程图首先要在头文件中进行类的申明,这里定义tcp 类继承QDialog,在类中包含有两个最重要的QTcpServer 和QTcpSocket类型的成员变量tcpserver和tcpServerConnection。定义如下: QTcpServer tcpserver;QTcpSocket *tcpServerConnection; 通过Qt的提供的信号与槽的机制为各个按钮组件添加槽函数1。本文在类的构造函数中对按钮与槽函数进行关联。代码如下:connect(ui-startButton,SIGNAL(clicked(),this,SLOT(start(); connect(ui-quitButton,SIGNAL(clicked(),this,SLOT(close();connect(&tcpserver,SIGNAL(newConnection(),this,SLOT(acceptConnection();其中将按钮的单击信号与该类的成员槽函数关联。当按下“开始监听”按钮是,先检查输入框中是否输入端口号,若没有则弹出提示框提示是否使用默认端口12345,若有则获取端口号进行监听。判断服务端是否正在监听该端口,如过建立监听成功,随时等待客户端的连接请求。否则显示错误信息。关键代码如下:port=ui-portEdit-text().toInt();/获取端口while(!tcpserver.isListening()&!tcpserver.listen(QHostAddress:Any,port)当客户端的连接请求到来时,QTcpSocket会产生一个newConnection()信号进而触发槽函数。在槽函数中可以获取已经建立连接的子套接字,这样就可以接收很多客户端的连接,利用nextPendingConnection()函数来获取连接的指针。对每个连接当连接中有数据可以读取时会产生一个readyRead()信号。这里可以通过建立槽函数将连接中的数据的处理放到一个槽函数中进行处理,本设计用updateServerProgress()函数对数据进行处理。接下来一直保持TCP服务端处于监听状态,只有在按下“停止监听”才关闭服务端。这样才不会因为接受了一个连接就关闭服务端,才可以不断的接受来自不同客户端的连接请求。由于TCP连接是面向字节流的。所以在数据接收也是以字节数组的形式从连接中获取数据。在updateServerProgress()函数中,通过readAll()函数将连接子套接字中的数据赋予字节数组。由于字节流是没有结构的。根据双方直接的数据通信进行解析出有意义的数据。字节流的解析代码如下: qint16 id=0; qint16 progress=0; id =qint16(0xff & block0) | (0xff00 & (block1 8); progress=qint16(0xff & block2) | (0xff00 & (block3 8); a.no=id; a.pro=progress;其中a是一个结构,定义了数据几个成员变量。block是接收到的字节数组。通过以上代码把字节流中的数据解析出来存储到结构中。接下来就是要把结构中的数据存储到数据库中。本设计还提供了一些提示功能,增加用户界面的友好性。比如在按下停止监听按钮时,显示本次监听一共更新了多少条数据。实现方法是在每次接收数据的时候,对静态变量进行加一,在显示完后对该静态变量置零操作。同时,在连接过程中出现错误,将以对话框的形式显示错误信息。4.3.2 数据库管理模块(1)SQLite数据库介绍SQLite是一种轻量级的数据库,虽然它没有像oracle、MySQL等等那样强大的数据库功能,但是它非常适用于少量的数据管理而且占用的系统资源很少,只需要几百K的内存就可以运行,而且运行速度比它们都快快,是一种嵌入式的数据库引擎。 SQLite是通过通过编程语言直接进行API调用,只需要基础的数据库知识就可以完成对数据库的基本操作。它不像常见的客户-服务器模式的数据库模式,它是以嵌入到程序中变成程序的一个部分,通过锁定整个数据文件进行对数据库的数据进行数据操作。 SQLite可以说“麻雀虽小五脏俱全”,虽然只有4.43M左右的大小,但支持的数据库大小在2T左右且支持ACID事务,支持多种开发语言例如C+、Java、C#、C、PHP等等(2)数据库模块的界面开发首先总控制室人员可以通过显示全部各个自工作面的施工进度信息来对整体道路施工进度有个整体性的进度了解,所以本设计通过表格的形式将数据库中施工进度表显示在表格中。这里也支持管理人员手动对表格进行数据的修改与更新,也可以通过施工路段号快速查找施工进度信息。所以界面如图4-6所示。图4-6 数据库管理模块(3)数据库模块功能设计实现 Qt通过QtSQL模块模块为数据库的访问提供支持,使得Qt的应用程序与数据库无缝衔接。它为开发人员提供了与具体数据库平台无关的调用接口,极大地简化的数据库的操作,开发人员熟悉SELECT、INSERT、UPDATE、DELETE等基本的SQL操作,便可以通过QSqlQuery直接执行SQL语句并处理返回结果。与此同时还提供了更加高层的抽象类比如QSqlTableModel、QSqlRelationTableModel等,所以Qt对数据库的操作提供了很好的支持。 Qt中内置SQLite,需要在头文件加入#include,在工程的.pro文件中加入QT+=sql来完成数据库开发的必要操作。本设计中通过在SQLite数据库中添加道路施工进度表格的方式对道路施工进度信息进行管理操作。如图图4-7显示了道路施工进度表格创建流程图。图4-7 道路施工进度表格创建流程图 关键代码如下: db=QSqlDatabase:addDatabase(QSQLITE); db.setDatabaseName(test.db); db.open(); query=QSqlQuery:QSqlQuery(db);query.exec(SELECT count(*) FROM sqlite_master WHERE type=table and name=projectprogress);if(query.next()if(query.value(0).toInt() = 0)query.exec(create table projectprogress (id INTEGER(16) PRIMARY KEY, progress INTEGER(16);通过QSqlDatabase类的成员函数addDatabase()建立SQLite的连接并setDatabaseName()函数建立连接名称。通过QSqlQuery类的exec()函数进行底层数据库的操作。通过SELECT count(*) FROM sqlite_master WHERE type=table and name=projectprogressSQL语句查询SQLite数据库中是否存在Projectprogress表格。当表不存在时返回0,通过query.exec(create ta
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸设计 > 毕设全套


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!