光纤网络光信号实时监测系统项目报告.docx

上传人:牧羊曲112 文档编号:1704487 上传时间:2022-12-15 格式:DOCX 页数:31 大小:866.74KB
返回 下载 相关 举报
光纤网络光信号实时监测系统项目报告.docx_第1页
第1页 / 共31页
光纤网络光信号实时监测系统项目报告.docx_第2页
第2页 / 共31页
光纤网络光信号实时监测系统项目报告.docx_第3页
第3页 / 共31页
光纤网络光信号实时监测系统项目报告.docx_第4页
第4页 / 共31页
光纤网络光信号实时监测系统项目报告.docx_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《光纤网络光信号实时监测系统项目报告.docx》由会员分享,可在线阅读,更多相关《光纤网络光信号实时监测系统项目报告.docx(31页珍藏版)》请在三一办公上搜索。

1、2郑州大学毕业设计(项目报告)题 目: 光纤网络光信号实时监测系统 指导教师: 李翠霞 职称: 副教授 学生姓名: 李文豪 学号: 20107760224 专 业: 计算机科学与技术(软件开发JAVA) 院(系): 软件学院 完成时间: 2013-12-9 2013年12月9日5目 录第1章 项目概述11.1 项目背景11.2 项目来源11.3 光时域反射测距设计依据11.4 光网络实时信号监测模块设计目标2第2章 项目设计42.1 项目总体设计42.2 研究思路与技术路线42.3模块选型与设计52.3.1 AQ7275 OTDR模块介绍52.3.2 GSM模块设计62.3.3 GPS模块设计

2、72.3.4 下位机管理模块设计72.3.5 实时监测上位机模块设计72.3.6 电源模块设计82.3.7 软件设计8第3章 项目实现83.1 数据库连接模块93.2 Web浏览器端模块113.3 Java客户端模块133.3.1 程序启动重连143.3.2 保存文件143.3.3 读取配置文件173.3.4 Java与下位机Socket通信183.3.5 从OTDR设备采集数据223.3.6 事件是否发生变化算法243.3.7 发送HTTP POST25第4章 项目总结264.1 项目技术总结264.1.1 前台页面技术264.1.2 服务器和桌面客户端技术264.3 个人收获与体会284.

3、4 参考资料2929第1章 项目概述1.1 项目背景近年来,多个路局报告了进入维护期的二型车光纤网络线路故障的事件。以西安路局为例,就该问题做了故障统计,统计结果如下:序号动车组列号发生次数1CRH2036A42CRH2092C203CRH2093C174CRH2094C35CRH2096C86CRH2149C2013年6月当动车组发生恒速打闪问题以后,伴随部分动车失流,如果长时间不能自复位,则列车速度将会下降,司机需要重新提手柄加速并恒速。因光纤隐蔽走线,且在地面测试光纤状态性能均良好,故障仅在运行期出现,因此不能锁定光纤精确故障位置。当前采取高级修时整体更换被怀疑车厢的车底光缆、连接器电钩

4、光纤模块的办法,更换过程中需要拆除LJB箱、车钩、辅助空压机、空调等各种设备,且无法进行责任判定。1.2 项目来源该项目来自网新智能技术有限公司的真实项目,该项目用于解决多个路局的光信号故障问题。1.3 光时域反射测距设计依据光时域反射测距通过使用瑞利散射和菲涅尔反射来表征光纤的特性。瑞利散射是由于光信号沿着光纤产生无规律的散射而形成,通过测量回到光时域反射设备端口的散射光,可表明因光纤引起的衰减(损耗/距离)程度。若测试形成的轨迹是一条向下的曲线,它说明了背向散射的功率不断减小(这是由于经过一段距离的传输后发射和背向散射的信号都有所损耗)。在波长已知情况下,瑞利散射功率与信号的脉冲宽度成比例

5、:脉冲宽度越长,背向散射功率就越强。瑞利散射的功率还与发射信号的波长有关,波长较短则功率较强。如图所示:图 13-1 瑞利散射菲涅尔反射是离散的反射,它是由整条光纤中的个别点而引起的,这些点是由造成反向系数改变的因素组成,例如玻璃与空气的间隙。在这些点上,会有很强的背向散射光被反射回来。光时域反射测试模块就是利用菲涅尔反射的信息来定位连接点,光纤终端或断点。如下图分别表示了机械熔接、法兰盘、连接器断开造成的菲涅尔反射:图 13-2 机械熔接(1)、法兰盘(2)和连接器(3)断开造成的菲涅尔反射1.4 光网络实时信号监测模块设计目标1) 性能指标l 中心波长:13l0nm20nml 事件盲区:1

6、.00ml 动态范围:35 / 33dBl 衰减读出分辨率:0.01dBl 群折射率设置范围:1.40001.6000l 光纤连接器:FCl 单系统功耗: 30Wl 测距精度:光信号动态监测精度: 1.00m。2) 系统功能l 下位机设备实现光信号的获取、解析、故障判定及故障信息上报,实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息传输给上位机,由上位机分析后通过发送器发送给地面GSM接收机。l 故障通告内容应包括:光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的

7、经度和纬度及故障发生时间(需在上位机中预植列车图形化运行线路)。l 所有故障信息通报信息在上位机保存。故障信息保存容量大于1000条,断电后信息不丢失。地面终端可查取保存完毕的故障信息。第2章 项目设计2.1 项目总体设计光网络实时信号监测系统包含OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块六大功能模块。设计方案如下图所示。图2-1 光网络实时信号监测系统设计方案其中:(1) OTDR模块:负责定位光路故障点,分析故障类型及故障产生的具体位置;(2) GSM模块:负责将故障信息发送至地面接收端,并传递地面接收端的查询信息;(3) GPS模块:负责故障时获取

8、列车运行地理位置信息;(4) 下位机管理模块:负责总体接受和处理来自OTDR、GPS、GSM模块数据,并保证各模块的协同工作,对外输出计算统计结果;(5) 实时监测上位机模块: 完成波形分析、光信号统计信息的获取及在线故障判定;(6) 电源模块:独立供电,系统功耗 30W。2.2 研究思路与技术路线本设计里,主要通过实时监测上位机与下位机设备完成系统功能,其中:(1) 下位机,实现设备光信号的获取、解析、故障判定及故障信息上报;(2) 实时监测上位机,完成波形分析、光信号量的实时获取与在线故障判定。通过以上设计,可实现:在列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息

9、发送给地面GSM接收终端。2.3模块选型与设计系统包括AQ7275 OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块。总体硬件架构如下图所示:图 23总体硬件架构图2.3.1 AQ7275 OTDR模块介绍AQ7275 OTDR模块实际包含了OTDR接口、滤波、合波等,其功能可简记如下:图 23-1 光信号处理示例图模块功能说明:1) OTDR接口。包括激光器发射输出与反射光输入,测试接口与WDM对接。2) 激光器控制电路。负责激光器的打开与关闭,同时可以控制激光器的工作电路。3) 数据采集电路。负责将反射回来的光信号转换成数字电信号。4) FPGA。根据DS

10、P的命令控制激光器开与关,同时收集数据采集电路的数字信号,在内部进行数据累加,并提供给DSP。5) DSP。根据命令控制FPGA,向FPGA读取数据,并按OTDR算法处理数据,将处理结果发送到外部电路。外部接口电路。外接通信处理单元。2.3.2 GSM模块设计 工业级双频GSM/GPRS模块,工作频段双频:900/1800MHz,可以低功耗实现语音、SMS(短信)、数据和传真信息的传输,支持基站定位功能。项目特性工作频段EGSM900MHz/DCS 1800Mhz 自动搜索2个频段发射功率Class4(2w)EGSM 900MClass1(1w)DCS 1800MGPRS连接特性GPRS ml

11、ti-slot class 10/8GPRS mobile station class B/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)音频特性支持Half Rate、Full Rate、Enhanced Full Rate、Adaptive mutirate

12、等编码模式支持回音消除功能支持噪声抑制功能短信(SMS)支持MT/MO/CB/TEXT和PDU模式短信存储设备:SIM卡工作温度-40+85C2.3.3 GPS模块设计GPS模块具有50个通道,追踪灵敏度高达-161dBm,测量输出频率最高可达5Hz。项目特性接口特性TTL,兼容3.3v/5V单片机系统接收特性50通道,GPS L1(1575.42Mhz) C/A码,SBAS:WAAS/EGNOS/MSAS定位精度2.5Mcep(SBAS:2.0CEP)更新速率最大5Hz捕获时间冷启动:27s(最快)温启动:27s热启动:1S捕获追踪灵敏度-161dBm通信协议NMEA(默认)/UBX Bin

13、ary串口通信波特率4800、9600、38400(默认)、576002.3.4 下位机管理模块设计光信号处理模块实现了光信号物理层的解析,而通信与实时监测模块则完成光信号量的实时获取与故障判定。下位机管理模块通过与FPGA及DSP模块进行通讯,采用滤波技术滤除检测期间无用信息,根据实际现场需要实时获取各类状态数据,并给出故障判定。一旦检测到光纤工作异常,记录当前的时间和列车运行的地点,并且将这些信息数据传输给上位机。模块的抗传导、静电放电、浪涌抗扰度等EMC性能均经过专业测试,并参照铁路交通应用标准,可适应与列车的特殊工况。2.3.5 实时监测上位机模块设计实时监测上位机完成波形分析、光信号

14、统计信息的获取及在线故障判定。列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。故障通告内容应包括:光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的经度和纬度及故障发生时间、速度(需在上位机中预植列车图形化运行线路)。所有故障信息通报信息在上位机保存。故障信息保存容量大于1000条,断电后信息不丢失。地面终端可查取保存完毕的故障信息。上位机通过网口与OTDR设备连接,并实时传输数据。2.3.6 电源模块设计无需车厢额外供电,通过外部自带模块对系统进行供电。电源模块金属六面屏蔽封装,具有过流保护、短路保护

15、、过压保护等功能,使其安全性、稳定性和可靠性得到充分保障,正适用于铁路列车的特殊工况。2.3.7 软件设计软件设计功能架构图如下所示:图 23-7 软件设计功能架构图第3章 项目实现在此处项目研发过程中本人主要负责实时监测上位机模块的开发。因此,项目实现主要围绕该模块。上位机模块又可以划分为两个模块:1) Web模块(包括:浏览器界面和服务器端)2) Java客户端模块 Web浏览器端采用javascript+css+ajax+jquery,使用定时向服务器端发送ajax请求,请求Web服务器数据,数据采用json格式传输。浏览器端拿到数据后,开始更新界面。地图使用百度地图API(javasc

16、ript版),从服务器端获取的经纬度信息(GPS坐标)转成百度地图特有的经纬度,并以标注的形式显示在地图上(旧事件为洋紫色标注,最新事件为淡绿色标注)。Java客户端负责与下位机和OTDR设备进行通信,从下位机获取列车经纬度信息,从OTDR设备获取列车事件点信息(光信号故障点集合),完成分析数据之后,发送定义好格式的数据(以字节为单位)给下位机,同时发送HTTP POST请求(字符串形式)给Web服务器。3.1 数据库连接模块Web服务器端数据库采用文本文件类型的轻量级数据库sqlite,主要目的是:提高软件性能、减少时间成本和降低后期维护等。使用sqlite数据库主要分三部分:1.加载sql

17、itejdbc.dll 2.使用sqlitejdbc-v037-native.jar 3.加载数据库驱动。图3-1-1 Web端架构图3-1-2 数据库连接3.2 Web浏览器端模块图3-2-1预定义列车路线:京沪(北京-上海)、京广(北京-广州)、郑西(郑州-西安)、胶济(青岛-济南)、杭宁(杭州-南京)部分关键代码如下:图3-2-2京沪线(封装成数组)图3-2-3百度地图API图3-2-4列车事件(故障点集合)显示同一时间的故障点集合(事件)显示在百度地图的同一标注中。图3-2-5 路线定义可自由选择线路,默认为显示所有列车路线。清除事件按钮可初始化sqlite数据库表(删除旧事件列表,重

18、新初始化故障点集合)。3.3 Java客户端模块主界面如图3-3所示:图3-3 程序主界面3.3.1 程序启动重连以多线程的形式启动主程序,防止程序主界面出现卡死的现象。在初始化主界面时,同时启动连接下位机(Socket通信,端口号:1200 IP:下位机默认)的线程。如果发现下位未启动则一直尝试重连,直至连接下位机成功,开始测试按钮才能开始点击。点击开始测试按钮后,开始定时任务,周期60s。部分关键代码:图3-3-13.3.2 保存文件Java客户端从OTDR设备中获取事件(故障点集合)信息,完成数据的分析后,保存最原始的文件信息为TMP.CSV,方便EXCEL打开查看。图3-3-2为EXC

19、EL打开效果:图3-3-2关键代码:package .insigma.utils;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.Outp

20、utStreamWriter;import java.util.Date;import mons.logging.Log;import mons.logging.LogFactory;public class SaveFileUtil private static final Log log = LogFactory.getLog(SaveFileUtil.class);public static boolean saveFile(String str,Date date,double lng, double lat)String arr = null;try arr = str.split(

21、n);catch(NullPointerException e)log.error(otdr设备工作不正常);return false;File file = new File(TMP.csv);if(!file.exists()try log.info(TMP.csv文件不存在,开始创建);file.createNewFile();log.info(TMP.csv文件创建成功); catch (IOException e) /e.printStackTrace();log.error(创建文件TMP.csv时,发生错误);return false;try BufferedReader br

22、= new BufferedReader(new InputStreamReader(new FileInputStream(file);StringBuilder sb = new StringBuilder();String temp;while( (temp = br.readLine() != null)sb.append(temp);sb.append(rn);sb.append(事件号,距离(km),熔接耗损(db),回波耗损(db),累计耗损(db),db/km,事件类型,区间折射率);for(int i = 20; i 8 & 0xff);b1 = (byte) (n 16 &

23、 0xff);b0 = (byte) (n 24 & 0xff);return b; /* * byte convert int * param b * return */public static int bytes2Int(byte b) return b3 & 0xff | (b2 & 0xff) 8 | (b1 & 0xff) 16| (b0 & 0xff) 24;/* * float to byte * param f * return */public static byte float2Bytes(float f) int fbit = Float.floatToIntBits(

24、f);byte b = new byte4;for (int i = 0; i (24 - i * 8);int len = b.length;byte dest = new bytelen;System.arraycopy(b, 0, dest, 0, len);byte temp;for (int i = 0; i len / 2; +i) temp = desti;desti = destlen - i - 1;destlen - i - 1 = temp;return dest;/ 时1字节,分1字节,秒1字节,年2字节,月1字节,日1字节, 预留1字节/* * 日期转成8字节byte

25、 * param date * return */public static byte date2Bytes(Date date) byte b = new byte8;Calendar cal = Calendar.getInstance();cal.setTime(date);int year = cal.get(Calendar.YEAR);int month = cal.get(Calendar.MONTH);int day = cal.get(Calendar.DAY_OF_MONTH);int hour = cal.get(Calendar.HOUR_OF_DAY);int min

26、ute = cal.get(Calendar.MINUTE);int second = cal.get(Calendar.SECOND);/ 按时、分、秒、年、月、日顺序b0 = int2OneByte(hour); / 1字节b1 = int2OneByte(minute);/ 1字节b2 = int2OneByte(second);/ 1字节System.arraycopy(int2TwoBytes(year), 0, b, 3, 2);/ 年,2字节b5 = int2OneByte(month+1);/ 1字节b6 = int2OneByte(day);/ 1字节/b7 保留一字节ret

27、urn b; public static long bytes2Long(byte b) long iOutcome = 0; byte bLoop; for (int i = 0; i b.length; i+) bLoop = bi; iOutcome += (long)(bLoop & 0x000000ff) (8 * i); return iOutcome; public static byte longtoBytes(long l)byte byteArray = new byte8; for (int i=0; i= 8; return byteArray; /* * int co

28、nvert 1 byte * param num * return */public static byte int2OneByte(int num) return (byte) (num & 0xff);/* * int convert byte(length = 2) * param num * return */public static byte int2TwoBytes(int num) byte b = new byte2;b1 = (byte) (num & 0xff);b0 = (byte) (num 8 & 0xff);return b;/* * short convert

29、byte * param b * return */public static short bytes2Short(byte b)return (short)(b1 & 0xff | (b0 & 0xff) 8);3.3.5 从OTDR设备采集数据上位机软件(Java)使用Java本地方法(JNI)调用DLL文件,从而驱动OTDR设备获取OTDR设备中保存的事件信息。上位机软件负责解析事件信息(解析成List集合)。加载DLL文件:关键代码:图3-3-5(1)DLL文件:图3-3-5(2)DLL文件解析数据成List:public static List decodeString(String

30、 msg)/存放故障点的集合List list = new ArrayList();/解析数据String arr = null;try arr = msg.split(n);catch(NullPointerException e)log.error(otdr设备工作不正常);return list;/从第20行开始解析数据boolean flag = false; /标志是否是最后一个故障点tryfor(int i = 20; i = 3)/故障距离(单位:米)float distance = Float.parseFloat(msgContent1)*1000;event.setDist

31、ance(formatFloat2(distance);/损耗 没耗损为0.0(单位:db)if(isNotNull(msgContent2)float loss = Float.parseFloat(msgContent2);event.setLoss(formatFloat2(loss);elseevent.setLoss(0.0f); /默认衰减list.add(event);catch(Exception e)/System.out.println(msg);log.error(解析事件时发生错误!);/e.printStackTrace();return list;3.3.6 事件是

32、否发生变化算法上位机软件(Java开发)从下位机获取经纬度,从OTDR设备获取事件(故障点集合)。完成事件的分析,如果事件发生变化(对比上次事件),则上位机软件(Java开发)负责向下位机发送最新事件信息;否则,不发送。下位机负责向GSM终端(Android客户端)发送短信。关键代码如下:package .insigma.utils;import java.util.List;import .insigma.pojo.Event;/* * 对比事件点 * author Jingxuan * */public class ContrastList /对比故障列表,看故障点是否发生变化public

33、 static int CompareEvent(List currentEventList, List lastEventList)int flag = 0; /0没发生变化 1变化if(lastEventList.size() = 0 & currentEventList.size() != 0) /上次测试没故障点发生,当前测试有故障点发生flag = 1;else if(currentEventList.size() = 0 & lastEventList.size() != 0) /当前事件列表为空,上次故障列表不为空flag = 1;else if(currentEventList

34、.size() != lastEventList.size() /故障点个数发生变化flag = 1;else if(currentEventList.size() = currentEventList.size() /故障点个数没发生变化/分析故障点for(int i = 0; i currentEventList.size();i+) /按顺序进行比较Event currentEvent = currentEventList.get(i);Event lastEvent = lastEventList.get(i);if(comparePoint(currentEvent.getDistance(), lastEvent.getDistance() = 1) /不同一

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号