- 1.05 MB
- 31页
- 1、本文档共5页,可阅读全部内容。
- 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
- 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
- 文档侵权举报电话:19940600175。
'2郑州大学毕业设计(项目报告)题目:光纤网络光信号实时监测系统指导教师:李翠霞职称:副教授学生姓名:李文豪学号:20107760224专业:计算机科学与技术(软件开发JAVA)院(系):软件学院完成时间:2013-12-92013年12月9日5
目录第1章项目概述11.1项目背景11.2项目来源11.3光时域反射测距设计依据11.4光网络实时信号监测模块设计目标2第2章项目设计42.1项目总体设计42.2研究思路与技术路线42.3模块选型与设计52.3.1AQ7275OTDR模块介绍52.3.2GSM模块设计62.3.3GPS模块设计72.3.4下位机管理模块设计72.3.5实时监测上位机模块设计72.3.6电源模块设计82.3.7软件设计8第3章项目实现83.1数据库连接模块93.2Web浏览器端模块113.3Java客户端模块133.3.1程序启动重连143.3.2保存文件143.3.3读取配置文件173.3.4Java与下位机Socket通信183.3.5从OTDR设备采集数据223.3.6事件是否发生变化算法243.3.7发送HTTPPOST25第4章项目总结264.1项目技术总结264.1.1前台页面技术264.1.2服务器和桌面客户端技术264.3个人收获与体会284.4参考资料2929
第1章项目概述1.1项目背景近年来,多个路局报告了进入维护期的二型车光纤网络线路故障的事件。以西安路局为例,就该问题做了故障统计,统计结果如下:序号动车组列号发生次数1CRH2036A42CRH2092C203CRH2093C174CRH2094C35CRH2096C86CRH2149C2013年6月当动车组发生恒速打闪问题以后,伴随部分动车失流,如果长时间不能自复位,则列车速度将会下降,司机需要重新提手柄加速并恒速。因光纤隐蔽走线,且在地面测试光纤状态性能均良好,故障仅在运行期出现,因此不能锁定光纤精确故障位置。当前采取高级修时整体更换被怀疑车厢的车底光缆、连接器电钩光纤模块的办法,更换过程中需要拆除LJB箱、车钩、辅助空压机、空调等各种设备,且无法进行责任判定。1.2项目来源该项目来自网新智能技术有限公司的真实项目,该项目用于解决多个路局的光信号故障问题。1.3光时域反射测距设计依据光时域反射测距通过使用瑞利散射和菲涅尔反射来表征光纤的特性。瑞利散射是由于光信号沿着光纤产生无规律的散射而形成,通过测量回到29
光时域反射设备端口的散射光,可表明因光纤引起的衰减(损耗/距离)程度。若测试形成的轨迹是一条向下的曲线,它说明了背向散射的功率不断减小(这是由于经过一段距离的传输后发射和背向散射的信号都有所损耗)。在波长已知情况下,瑞利散射功率与信号的脉冲宽度成比例:脉冲宽度越长,背向散射功率就越强。瑞利散射的功率还与发射信号的波长有关,波长较短则功率较强。如图所示:图13-1瑞利散射菲涅尔反射是离散的反射,它是由整条光纤中的个别点而引起的,这些点是由造成反向系数改变的因素组成,例如玻璃与空气的间隙。在这些点上,会有很强的背向散射光被反射回来。光时域反射测试模块就是利用菲涅尔反射的信息来定位连接点,光纤终端或断点。如下图分别表示了机械熔接、法兰盘、连接器断开造成的菲涅尔反射:图13-2机械熔接(1)、法兰盘(2)和连接器(3)断开造成的菲涅尔反射1.4光网络实时信号监测模块设计目标1)性能指标l中心波长:13l0nm±20nm29
l事件盲区:≤1.00ml动态范围:35/33dBl衰减读出分辨率:0.01dBl群折射率设置范围:1.4000~1.6000l光纤连接器:FCl单系统功耗:≤30Wl测距精度:光信号动态监测精度:≤1.00m。1)系统功能l下位机设备实现光信号的获取、解析、故障判定及故障信息上报,实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息传输给上位机,由上位机分析后通过发送器发送给地面GSM接收机。l故障通告内容应包括:光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的经度和纬度及故障发生时间(需在上位机中预植列车图形化运行线路)。l所有故障信息通报信息在上位机保存。故障信息保存容量大于1000条,断电后信息不丢失。地面终端可查取保存完毕的故障信息。29
第2章项目设计2.1项目总体设计光网络实时信号监测系统包含OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块六大功能模块。设计方案如下图所示。图2-1光网络实时信号监测系统设计方案其中:(1)OTDR模块:负责定位光路故障点,分析故障类型及故障产生的具体位置;(2)GSM模块:负责将故障信息发送至地面接收端,并传递地面接收端的查询信息;(3)GPS模块:负责故障时获取列车运行地理位置信息;(4)下位机管理模块:负责总体接受和处理来自OTDR、GPS、GSM模块数据,并保证各模块的协同工作,对外输出计算统计结果;(5)实时监测上位机模块:完成波形分析、光信号统计信息的获取及在线故障判定;(6)电源模块:独立供电,系统功耗<30W。2.2研究思路与技术路线本设计里,主要通过实时监测上位机与下位机设备完成系统功能,其中:(1)下位机,实现设备光信号的获取、解析、故障判定及故障信息上报;29
(1)实时监测上位机,完成波形分析、光信号量的实时获取与在线故障判定。通过以上设计,可实现:在列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。2.3模块选型与设计系统包括AQ7275OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块。总体硬件架构如下图所示:图23总体硬件架构图2.3.1AQ7275OTDR模块介绍AQ7275OTDR模块实际包含了OTDR接口、滤波、合波等,其功能可简记如下:图23-1光信号处理示例图模块功能说明:1)OTDR接口。包括激光器发射输出与反射光输入,测试接口与WDM对接。2)激光器控制电路。负责激光器的打开与关闭,同时可以控制激光器的工作电路。29
1)数据采集电路。负责将反射回来的光信号转换成数字电信号。2)FPGA。根据DSP的命令控制激光器开与关,同时收集数据采集电路的数字信号,在内部进行数据累加,并提供给DSP。3)DSP。根据命令控制FPGA,向FPGA读取数据,并按OTDR算法处理数据,将处理结果发送到外部电路。外部接口电路。外接通信处理单元。2.3.2GSM模块设计工业级双频GSM/GPRS模块,工作频段双频:900/1800MHz,可以低功耗实现语音、SMS(短信)、数据和传真信息的传输,支持基站定位功能。项目特性工作频段EGSM900MHz/DCS1800Mhz自动搜索2个频段发射功率Class4(2w)@EGSM900MClass1(1w)@DCS1800MGPRS连接特性GPRSmlti-slotclass10/8GPRSmobilestationclassB/CCGPRS数据特性下行传输特性:最大85.6kbps上行传输特性:最大42.8kbps编码格式:CS-1、CS-2、CS-3和CS-4支持通常用于PPP连接的PAP协议内嵌TCP/IP协议,支持TCP/UDP通信,支持FTP/HTTP服务支持分组广播控制信道(PBCCH)支持CSD(电路交换)传输速率:2.4/4.8/9.6/11.4kbps支持非结构化补充数据业务(USSD)音频特性支持HalfRate、FullRate、EnhancedFullRate、Adaptivemutirate等编码模式支持回音消除功能支持噪声抑制功能短信(SMS)支持MT/MO/CB/TEXT和PDU模式短信存储设备:SIM卡29
工作温度-40~+85°C2.3.3GPS模块设计GPS模块具有50个通道,追踪灵敏度高达-161dBm,测量输出频率最高可达5Hz。项目特性接口特性TTL,兼容3.3v/5V单片机系统接收特性50通道,GPSL1(1575.42Mhz)C/A码,SBAS:WAAS/EGNOS/MSAS定位精度2.5Mcep(SBAS:2.0CEP)更新速率最大5Hz捕获时间冷启动:27s(最快)温启动:27s热启动:1S捕获追踪灵敏度-161dBm通信协议NMEA(默认)/UBXBinary串口通信波特率4800、9600、38400(默认)、576002.3.4下位机管理模块设计光信号处理模块实现了光信号物理层的解析,而通信与实时监测模块则完成光信号量的实时获取与故障判定。下位机管理模块通过与FPGA及DSP模块进行通讯,采用滤波技术滤除检测期间无用信息,根据实际现场需要实时获取各类状态数据,并给出故障判定。一旦检测到光纤工作异常,记录当前的时间和列车运行的地点,并且将这些信息数据传输给上位机。模块的抗传导、静电放电、浪涌抗扰度等EMC性能均经过专业测试,并参照铁路交通应用标准,可适应与列车的特殊工况。2.3.5实时监测上位机模块设计29
实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。故障通告内容应包括:光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的经度和纬度及故障发生时间、速度(需在上位机中预植列车图形化运行线路)。所有故障信息通报信息在上位机保存。故障信息保存容量大于1000条,断电后信息不丢失。地面终端可查取保存完毕的故障信息。上位机通过网口与OTDR设备连接,并实时传输数据。2.3.6电源模块设计无需车厢额外供电,通过外部自带模块对系统进行供电。电源模块金属六面屏蔽封装,具有过流保护、短路保护、过压保护等功能,使其安全性、稳定性和可靠性得到充分保障,正适用于铁路列车的特殊工况。2.3.7软件设计软件设计功能架构图如下所示:图23-7软件设计功能架构图第3章项目实现29
在此处项目研发过程中本人主要负责实时监测上位机模块的开发。因此,项目实现主要围绕该模块。上位机模块又可以划分为两个模块:1)Web模块(包括:浏览器界面和服务器端)2)Java客户端模块Web浏览器端采用javascript+css+ajax+jquery,使用定时向服务器端发送ajax请求,请求Web服务器数据,数据采用json格式传输。浏览器端拿到数据后,开始更新界面。地图使用百度地图API(javascript版),从服务器端获取的经纬度信息(GPS坐标)转成百度地图特有的经纬度,并以标注的形式显示在地图上(旧事件为洋紫色标注,最新事件为淡绿色标注)。Java客户端负责与下位机和OTDR设备进行通信,从下位机获取列车经纬度信息,从OTDR设备获取列车事件点信息(光信号故障点集合),完成分析数据之后,发送定义好格式的数据(以字节为单位)给下位机,同时发送HTTPPOST请求(字符串形式)给Web服务器。3.1数据库连接模块Web服务器端数据库采用文本文件类型的轻量级数据库sqlite,主要目的是:提高软件性能、减少时间成本和降低后期维护等。使用sqlite数据库主要分三部分:1.加载sqlitejdbc.dll2.使用sqlitejdbc-v037-native.jar3.加载数据库驱动。29
图3-1-1Web端架构图3-1-2数据库连接29
3.2Web浏览器端模块图3-2-1预定义列车路线:京沪(北京-上海)、京广(北京-广州)、郑西(郑州-西安)、胶济(青岛-济南)、杭宁(杭州-南京)部分关键代码如下:图3-2-2京沪线(封装成数组)29
图3-2-3百度地图API图3-2-4列车事件(故障点集合)显示同一时间的故障点集合(事件)显示在百度地图的同一标注中。29
图3-2-5路线定义可自由选择线路,默认为显示所有列车路线。清除事件按钮可初始化sqlite数据库表(删除旧事件列表,重新初始化故障点集合)。3.3Java客户端模块主界面如图3-3所示:图3-3程序主界面3.3.1程序启动重连以多线程的形式启动主程序,防止程序主界面出现卡死的现象。在初始化主界面时,同时启动连接下位机(Socket通信,端口号:1200IP:下位机默认)的线程。如果发现下位未启动则一直尝试重连,直至连接下位机成功,开始测试按钮才能开始点击。点击开始测试按钮后,开始定时任务,周期60s。部分关键代码:29
图3-3-13.3.2保存文件Java客户端从OTDR设备中获取事件(故障点集合)信息,完成数据的分析后,保存最原始的文件信息为TMP.CSV,方便EXCEL打开查看。图3-3-2为EXCEL打开效果:图3-3-2关键代码:packagecn.com.insigma.utils;importjava.io.BufferedReader;importjava.io.BufferedWriter;29
importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.util.Date;importorg.apache.commons.logging.Log;importorg.apache.commons.logging.LogFactory;publicclassSaveFileUtil{privatestaticfinalLoglog=LogFactory.getLog(SaveFileUtil.class);publicstaticbooleansaveFile(Stringstr,Datedate,doublelng,doublelat){String[]arr=null;try{arr=str.split("n");}catch(NullPointerExceptione){log.error("otdr设备工作不正常");returnfalse;}Filefile=newFile("TMP.csv");if(!file.exists()){try{log.info("TMP.csv文件不存在,开始创建");file.createNewFile();log.info("TMP.csv文件创建成功");}catch(IOExceptione){//e.printStackTrace();log.error("创建文件TMP.csv时,发生错误");returnfalse;}}try{BufferedReaderbr=newBufferedReader(newInputStreamReader(newFileInputStream(file)));StringBuildersb=newStringBuilder();Stringtemp;while((temp=br.readLine())!=null){sb.append(temp);29
sb.append("rn");}sb.append("事件号,距离(km),熔接耗损(db),回波耗损(db),累计耗损(db),db/km,事件类型,区间折射率");for(inti=20;i>8&0xff);b[1]=(byte)(n>>16&0xff);b[0]=(byte)(n>>24&0xff);returnb;}/***byte[]convertint*@paramb*@return*/publicstaticintbytes2Int(byteb[]){returnb[3]&0xff|(b[2]&0xff)<<8|(b[1]&0xff)<<16|(b[0]&0xff)<<24;}/***floattobyte[]*@paramf*@return*/publicstaticbyte[]float2Bytes(floatf){intfbit=Float.floatToIntBits(f);byte[]b=newbyte[4];for(inti=0;i<4;i++){b[i]=(byte)(fbit>>(24-i*8));}intlen=b.length;byte[]dest=newbyte[len];System.arraycopy(b,0,dest,0,len);bytetemp;for(inti=0;i>=8;}29
returnbyteArray;}/***intconvert1byte*@paramnum*@return*/publicstaticbyteint2OneByte(intnum){return(byte)(num&0xff);}/***intconvertbyte[](length=2)*@paramnum*@return*/publicstaticbyte[]int2TwoBytes(intnum){byte[]b=newbyte[2];b[1]=(byte)(num&0xff);b[0]=(byte)(num>>8&0xff);returnb;}/***shortconvertbyte[]*@paramb*@return*/publicstaticshortbytes2Short(byte[]b){return(short)(b[1]&0xff|(b[0]&0xff)<<8);}}3.3.5从OTDR设备采集数据上位机软件(Java)使用Java本地方法(JNI)调用DLL文件,从而驱动OTDR设备获取OTDR设备中保存的事件信息。上位机软件负责解析事件信息(解析成List集合)。加载DLL文件:关键代码:29
图3-3-5(1)DLL文件:图3-3-5(2)DLL文件解析数据成List:publicstaticListdecodeString(Stringmsg){//存放故障点的集合Listlist=newArrayList();//解析数据String[]arr=null;try{arr=msg.split("n");}catch(NullPointerExceptione){log.error("otdr设备工作不正常");returnlist;}//从第20行开始解析数据booleanflag=false;//标志是否是最后一个故障点try{for(inti=20;i=3){//故障距离(单位:米)floatdistance=Float.parseFloat(msgContent[1])*1000;event.setDistance(formatFloat2(distance));//损耗没耗损为0.0(单位:db)if(isNotNull(msgContent[2])){floatloss=Float.parseFloat(msgContent[2]);event.setLoss(formatFloat2(loss));}else{event.setLoss(0.0f);//默认衰减}}list.add(event);}}catch(Exceptione){//System.out.println(msg);log.error("解析事件时发生错误!");//e.printStackTrace();}returnlist;}3.3.6事件是否发生变化算法上位机软件(Java开发)从下位机获取经纬度,从OTDR设备获取事件(故障点集合)。完成事件的分析,如果事件发生变化(对比上次事件),则上位机软件(Java开发)负责向下位机发送最新事件信息;否则,不发送。下位机负责向GSM终端(Android客户端)发送短信。关键代码如下:packagecn.com.insigma.utils;importjava.util.List;29
importcn.com.insigma.pojo.Event;/***对比事件点*@authorJingxuan**/publicclassContrastList{//对比故障列表,看故障点是否发生变化publicstaticintCompareEvent(ListcurrentEventList,ListlastEventList){intflag=0;//0没发生变化1变化if(lastEventList.size()==0&¤tEventList.size()!=0){//上次测试没故障点发生,当前测试有故障点发生flag=1;}elseif(currentEventList.size()==0&&lastEventList.size()!=0){//当前事件列表为空,上次故障列表不为空flag=1;}elseif(currentEventList.size()!=lastEventList.size()){//故障点个数发生变化flag=1;}elseif(currentEventList.size()==currentEventList.size()){//故障点个数没发生变化//分析故障点for(inti=0;i=1){return1;29
}return0;}}3.3.7发送HTTPPOST如果上位机软件(Java开发)检测到事件发生变化,开始向下位机发送最新事件信息的同时也向Web服务器发送HTTPPOST请求(包含最新事件信息)。上位机软件采用Apache组织的开源工具HTTPCLIENT发送HTTPPOST请求。关键代码入图3-3-7所示:图3-3-7发送HTTPPOST请求第4章项目总结4.1项目技术总结4.1.1前台页面技术前台使用百度地图API(Javascript版本)、jquery、CSS等技术或工具。在js脚本中使用jquery的ajax函数29
定时向服务器发送请求,请求事件列表,服务器接收到请求之后,查询sqlite数据库中的event表(存放事件信息)。浏览器和服务器的数据交互格式为gson,js脚本拿到服务器返回的gson格式的事件信息后,开始解析数据,从而更新浏览器界面。本次开发过程中,大量使用百度地图的API,开发项目之前大致了解百度地图API类的使用。页面布局使用CSS+DIV,按钮、字体和窗体样式等也都使用了CSS技术。使用jquery这个开源的js框架,减少开发成本、提高开发效率、降低js代码的复杂度和减少js脚本的书写量。Ajax技术可以动态无刷新更新界面,提高用户体验,给用户视觉上的享受,而且还能减少服务器端压力,降低服务器流量的浪费,从而减少开发成本。4.1.2服务器和桌面客户端技术(1)Servlet:servlet是在服务器上运行的小程序。这个词是在Javaapplet的环境中创造的,Javaapplet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用CGI(CommonGatewayInterface)应用程序完成的。然而,在服务器上运行Java,这种程序可使用Java编程语言实现。在通信量大的服务器上,Javaservlet的优点在于它们的执行速度更快于CGI程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。(2)JNI:JNI是JavaNativeInterface的缩写,中文为JAVA本地调用。从Java1.1开始,JavaNativeInterface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。(3)SQLite:SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。(4)HttpComponents:HTTP协议(超文本传输协议)也许是当前互联网领域最重要的协议。Web服务(WebServices)、基于网络的应用和网络计算的增长对HTTP协议角色的扩展作用远胜于用户驱动的Web浏览器(译者按:HTTP协议的最初目的可能正是为浏览器提供良好的支持),同时不断增长的更多应用也需要HTTP协议的支持。基于对HTTP协议良好的支持和扩展的设计,HttpComponents也许会被正在构建HTTP客户端或者服务器端应用的人所感兴趣:比如WEB浏览器、网页蜘蛛(爬虫)、HTTP代理、WEB服务库、或是基于调整或扩展HTTP协议的分布式通信系统。(5)Commons-logging:29
CommonsLogging(JCL)提供的是一个Java的日志接口,同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中间件/日志工具开发者一个简单的日志操作抽象,允许程序开发人员使用不同的具体日志实现工具。用户被假定已熟悉某种日志实现工具的更高级别的细节。JCL提供的接口,对其它一些日志工具,包括Log4J,AvalonLogKit,andJDK1.4等,进行了简单的包装,此接口更接近于Log4J和LogKit的实现。29
4.2技术创新及特点(1)jQuery极大的方便了程序员对js脚本的开发,缩短开发时间、提高开发效率、也提高了用户体验。(2)使用百度地图API(javascript版本),熟悉了百度地图API的使用,在一次开发的基础上,方便开发者进行二次开发,节约开发成本,提高开发效率。(3)AJAX使得Web页面可以局部刷新,大量减少数据交互产生的流量、节约服务器宽带、缓解服务器压力、界面上提高用户体验。(4)JNI的使用使得Java可以调用C/C++。Java在处理硬件方面,性能和效率远远不如C/C++,当我们的项目在高层次上必须使用Java,而底层必须使用C/C++时,我们可以采用JNI技术,使用java代码调用由C/C++生成的DLL文件,从而可以提高性能和效率上的硬性要求。(5)项目中使用了日志管理功能,使用日志管理方便后期维护和故障排查。(6)项目中使用了Java桌面应用程序直接向Web服务器发送HTTPPOST请求的技术,使得桌面应用程序直接可以安全的与Web服务器交互。(7)项目中大量使用封装和设计模式等思想,避免重复造车轮子,重用代码,提高开发效率,较少开发周期。4.3个人收获与体会不知不觉,时间如白驹过隙匆匆在指尖溜走。看着满地的泛黄的落叶,不禁感叹时间沧桑与无奈。在浙大网新实训的四个月中,有同学的陪伴,有老师的照顾。一路走来,也不觉得多么累。在实训过程中也学到不少知识,在学校的大部分都是理论性知识,真正用于项目实战的并不多。在实训过程中,巩固了理论基础,把从书本上学到的理论性知识用实战来巩固、消化,从而提高理解能力和感悟力。实训中,老师也讲授了不少的书写代码的技巧,对于我们提高开发效率无疑是有很大帮助的。IDE工具的使用技巧提高我们的开发效率,IDE的帮助减少代码书写的错误,IDE工具的使用更能自动生成关键代码,减少开发时间、缩短开发周期、节约开发成本。本项目是我在网新智能技术有限公司实习的时候参加的项目,该项目为真实的项目的,用来解决实际工业中的问题。在拿到项目的需求分析文档后,我明白了自己的任务。我的主要任务是实时监测上位机软件模块的开发,该模块又可以主要分两个模块:Web和桌面客户端,要求开发语言必须是Java。首页,我面临的第一个问题是:Java调用C++的DLL文件。公司的有经验的前辈告诉我要使用JNI,花了一个下午的时间,我明白了Java使用JNI调用DLL的过程。在开发Web界面时,我遇到的第一个问题是:GPS坐标和百度的经纬度坐标怎么转化?查阅了一些资料,最后发现,百度地图API本身提供的有GPS、谷歌坐标与百度地图坐标之间的转化工具类。第二个问题是:如何服务器端向浏览器端推送数据?在刚遇到这个问题时,我脑袋一片空白,不知道如何处理。但是,老师常说:“内事找百度,外事找谷歌“。首页,我找了百度,然后就发现了问题的解决方案,使用pushlet这个开源的框架。但是,当我真正使用pushlet的时候,有些问题更难解决了。搞了两天,我找到了另外的解决方案---定时发送Ajax请求,后来才发现定时发送ajax请求完全可以解决此问题。当我在Web服务器端使用sqlite文本文件数据库的时候,遇到了项目中最经典的一个难题---调用DLL文件。Sqlite为嵌入式数据库,如果想使用它,必须加载DLL文件。但是,使用类似普通java项目加载DLL文件的方法不能解决问题,sqlite数据库仍然无法使用。最后发现,在普通java项目中的PATH和web项目中的PATH是不同的,web项目中PATH包含两部分:jre中的PATH和TOMCAT的PATH29
。除此之外,DLL文件放置的位置和普通java项目也有很大的不同---除了类加载路径存放一份DLL,启动TOMCAT的目录也必须存放一份DLL。本次项目中遇到很多问题,上面叙述的是一些经典问题。遇到问题是可喜的,因为这代表要解决这些问题,解决这些问题之后,我的解决问题的能力又得到了锻炼。本次项目的完成,我要感谢我在实习公司的指导老师---陈小波与一些帮助我的师兄和前辈们。陈小波老师,在C++方面帮助我很多,在解决JNI上离不开小波老师的帮助。在硬件方面,我不是很懂,幸得公司的前辈们指点,教授了我一些设备的使用和知识。在开发过程中,硬件方面问题迎刃而解。最后,要感谢的是我大学的辅导员—文佳老师和毕业设计指导老师—李翠霞老师。在文佳老师的辛苦教育和帮助下,我将要度过四年的大学的生活,在大学的成长离不开文佳老师。李翠霞老师在毕业设计上给予我很大帮助,通过项目的审核和毕业设计的要求,我更加明白了项目需求分析和文档的重要性。四年的大学生活将要画上一个完美的句号,感谢那些曾经帮助过我和鼓励过我的朋友们,是你们的关怀,让我这颗小树苗更加茁壮成长,让我在面对风雨时,更能昂首挺胸。4.4参考资料1.HttpComponents:http://baike.baidu.com/link?url=tAprjSt9r5_RU4JQUAtSyRlhWKTY0U9S00Vw0npSJZ4cy0emUnyoo4f_tQdUsW7pJ4dRCaAJ5n347uNQQ2u8_qhttp://hc.apache.org/2.servlethttp://baike.baidu.com/view/25169.htm3.SQLitehttp://baike.baidu.com/view/19310.htm4.commons-logginghttp://commons.apache.org/proper/commons-logging/5.《Java设计模式》清华大学出版社耿祥义张跃平著29'
您可能关注的文档
- 建设项目报告表-苏州工业园区——智慧社区
- 省某某出版集团绩效薪酬管理改革项目报告
- 临清市哥德精密轴承制造有限公司年产300万套轴承项目报告表
- 甘肃省白银市白银区白银区中小企业创业基地--盛泰纯净水暨果品饮料生产线项目报告表
- 多功能时尚便携u盘项目报告书正文原版153716369.doc
- 建设项目报告表-南通经济技术开发区
- 青岛云路新能源科技有限公司十万吨级非晶带材一期项目报告书 前言
- 《张家口市宏业建筑材料制造有限公司新建年产吨建筑涂料项目报告》
- 丽水青山精线项目报告表毕业论文初稿.doc
- 甘肃省酒泉市金塔县金塔县北河湾循环经济产业园-年产3000吨8-氨基-1-萘酚-3,6-二磺酸单钠盐染料中间体建设项目报告书全本
- 建设项目报告表-昌乐
- 西安风追司马文化产业投资有限公司曼蒂苑项目报告书
- a06165境内机构和个人发包工程作业或劳务项目报告表
- 甘肃省天水市麦积区甘肃天水百花小镇项目报告书全本
- 北川玫瑰谷项目报告书
- 中国食品储运设备企业十二五战略规划咨询项目报告
- 汶上联威年产50万套钢制车轮及配件项目报告表
- 银川综合保税区网站项目报告