1、1.3 光时域反射测距设计依据光时域反射测距通过使用瑞利散射和菲涅尔反射来表征光纤的特性。瑞利散射是由于光信号沿着光纤产生无规律的散射而形成,通过测量回到光时域反射设备端口的散射光,可表明因光纤引起的衰减(损耗/距离)程度。若测试形成的轨迹是一条向下的曲线,它说明了背向散射的功率不断减小(这是由于经过一段距离的传输后发射和背向散射的信号都有所损耗)。在波长已知情况下,瑞利散射功率与信号的脉冲宽度成比例:脉冲宽度越长,背向散射功率就越强。瑞利散射的功率还与发射信号的波长有关,波长较短则功率较强。如图所示:图 13-1 瑞利散射菲涅尔反射是离散的反射,它是由整条光纤中的个别点而引起的,这些点是由造
2、成反向系数改变的因素组成,例如玻璃与空气的间隙。在这些点上,会有很强的背向散射光被反射回来。光时域反射测试模块就是利用菲涅尔反射的信息来定位连接点,光纤终端或断点。如下图分别表示了机械熔接、法兰盘、连接器断开造成的菲涅尔反射:图 13-2 机械熔接(1)、法兰盘(2)和连接器(3)断开造成的菲涅尔反射1.4 光网络实时信号监测模块设计目标1) 性能指标 中心波长:13l0nm20nm 事件盲区:1.00m 动态范围:35 / 33dB 衰减读出分辨率:0.01dB 群折射率设置范围:1.40001.6000 光纤连接器:FC 单系统功耗: 30W 测距精度:光信号动态监测精度: 1.00m。2
3、) 系统功能 下位机设备实现光信号的获取、解析、故障判定及故障信息上报,实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息传输给上位机,由上位机分析后通过发送器发送给地面GSM接收机。 故障通告内容应包括:光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的经度和纬度及故障发生时间(需在上位机中预植列车图形化运行线路)。 所有故障信息通报信息在上位机保存。故障信息保存容量大于1000条,断电后信息不丢失。地面终端可查取保存完毕的故障信息。第2章 项目设计2.1 项目总体
4、设计光网络实时信号监测系统包含OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块六大功能模块。设计方案如下图所示。图2-1 光网络实时信号监测系统设计方案其中:(1) OTDR模块:负责定位光路故障点,分析故障类型及故障产生的具体位置;(2) GSM模块:负责将故障信息发送至地面接收端,并传递地面接收端的查询信息;(3) GPS模块:负责故障时获取列车运行地理位置信息;(4) 下位机管理模块:负责总体接受和处理来自OTDR、GPS、GSM模块数据,并保证各模块的协同工作,对外输出计算统计结果;(5) 实时监测上位机模块: 完成波形分析、光信号统计信息的获取及在线
5、故障判定;(6) 电源模块:独立供电,系统功耗 30W。2.2 研究思路与技术路线本设计里,主要通过实时监测上位机与下位机设备完成系统功能,其中:(1) 下位机,实现设备光信号的获取、解析、故障判定及故障信息上报;(2) 实时监测上位机,完成波形分析、光信号量的实时获取与在线故障判定。通过以上设计,可实现:在列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。2.3模块选型与设计系统包括AQ7275 OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块。总体硬件架构如下图所示:图 23总体硬件架构图2.3.1 AQ72
6、75 OTDR模块介绍AQ7275 OTDR模块实际包含了OTDR接口、滤波、合波等,其功能可简记如下:图 23-1 光信号处理示例图模块功能说明:1) OTDR接口。包括激光器发射输出与反射光输入,测试接口与WDM对接。2) 激光器控制电路。负责激光器的打开与关闭,同时可以控制激光器的工作电路。3) 数据采集电路。负责将反射回来的光信号转换成数字电信号。4) FPGA。根据DSP的命令控制激光器开与关,同时收集数据采集电路的数字信号,在内部进行数据累加,并提供给DSP。5) DSP。根据命令控制FPGA,向FPGA读取数据,并按OTDR算法处理数据,将处理结果发送到外部电路。外部接口电路。外
7、接通信处理单元。2.3.2 GSM模块设计 工业级双频GSM/GPRS模块,工作频段双频:900/1800MHz,可以低功耗实现语音、SMS(短信)、数据和传真信息的传输,支持基站定位功能。项目特性工作频段EGSM900MHz/DCS 1800Mhz 自动搜索2个频段发射功率Class4(2w)EGSM 900MClass1(1w)DCS 1800MGPRS连接特性GPRS mlti-slot class 10/8GPRS mobile station class B/CCGPRS数据特性下行传输特性:最大85.6kbps上行传输特性:最大42.8kbps编码格式:CS-1、CS-2、CS-3
8、和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 等编码模式支持回音消除功能支持噪声抑制功能短信(SMS)支持MT/MO/CB/TEXT和PDU模式短信存储设备:SIM卡工作温度-40+85C2.3.3 GPS模块设计GPS模块具有50个通道,追踪灵敏度高达-161d
9、Bm,测量输出频率最高可达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 Binary串口通信波特率4800、9600、38400(默认)、576002.3.4 下位机管理模块设计光信号处理模块实现了光信号物理层的解析,而通信与实时监测模块则完成光信号量的实时获取与故障判定。下位机管理模块通过与FPGA及
10、DSP模块进行通讯,采用滤波技术滤除检测期间无用信息,根据实际现场需要实时获取各类状态数据,并给出故障判定。一旦检测到光纤工作异常,记录当前的时间和列车运行的地点,并且将这些信息数据传输给上位机。模块的抗传导、静电放电、浪涌抗扰度等EMC性能均经过专业测试,并参照铁路交通应用标准,可适应与列车的特殊工况。2.3.5 实时监测上位机模块设计实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。故障通告内容应包括:光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障
11、时列车行所处的经度和纬度及故障发生时间、速度(需在上位机中预植列车图形化运行线路)。所有故障信息通报信息在上位机保存。上位机通过网口与OTDR设备连接,并实时传输数据。2.3.6 电源模块设计无需车厢额外供电,通过外部自带模块对系统进行供电。电源模块金属六面屏蔽封装,具有过流保护、短路保护、过压保护等功能,使其安全性、稳定性和可靠性得到充分保障,正适用于铁路列车的特殊工况。2.3.7 软件设计软件设计功能架构图如下所示:图 23-7 软件设计功能架构图第3章 项目实现在此处项目研发过程中本人主要负责实时监测上位机模块的开发。因此,项目实现主要围绕该模块。上位机模块又可以划分为两个模块:1) W
12、eb模块(包括:浏览器界面和服务器端)2) Java客户端模块 Web浏览器端采用javascript+css+ajax+jquery,使用定时向服务器端发送ajax请求,请求Web服务器数据,数据采用json格式传输。浏览器端拿到数据后,开始更新界面。地图使用XX地图API(javascript版),从服务器端获取的经纬度信息(GPS坐标)转成XX地图特有的经纬度,并以标注的形式显示在地图上(旧事件为洋紫色标注,最新事件为淡绿色标注)。 Java客户端负责与下位机和OTDR设备进行通信,从下位机获取列车经纬度信息,从OTDR设备获取列车事件点信息(光信号故障点集合),完成分析数据之后,发送定
13、义好格式的数据(以字节为单位)给下位机,同时发送HTTP POST请求(字符串形式)给Web服务器。3.1 数据库连接模块Web服务器端数据库采用文本文件类型的轻量级数据库sqlite,主要目的是:提高软件性能、减少时间成本和降低后期维护等。使用sqlite数据库主要分三部分:1.加载sqlitejdbc.dll 2.使用sqlitejdbc-v037-native.jar 3.加载数据库驱动。图3-1-1 Web端架构图3-1-2 数据库连接3.2 Web浏览器端模块图3-2-1预定义列车路线:京沪(北京-上海)、京广(北京-广州)、郑西(郑州-西安)、胶济(青岛-济南)、杭宁(杭州-南京)
14、部分关键代码如下:图3-2-2京沪线(封装成数组)图3-2-3XX地图API图3-2-4列车事件(故障点集合)显示 同一时间的故障点集合(事件)显示在XX地图的同一标注中。图3-2-5 路线定义可自由选择线路,默认为显示所有列车路线。清除事件按钮可初始化sqlite数据库表(删除旧事件列表,重新初始化故障点集合)。3.3 Java客户端模块主界面如图3-3所示:图3-3 程序主界面3.3.1 程序启动重连 以多线程的形式启动主程序,防止程序主界面出现卡死的现象。在初始化主界面时,同时启动连接下位机(Socket通信,端口号:1200 IP:下位机默认)的线程。如果发现下位未启动则一直尝试重连,
15、直至连接下位机成功,开始测试按钮才能开始点击。点击开始测试按钮后,开始定时任务,周期60s。部分关键代码:图3-3-13.3.2 保存文件 Java客户端从OTDR设备中获取事件(故障点集合)信息,完成数据的分析后,保存最原始的文件信息为TMP.CSV,方便EXCEL打开查看。图3-3-2为EXCEL打开效果:图3-3-2关键代码:public class SaveFileUtil private static final Log log = LogFactory.getLog(SaveFileUtil.class); public static boolean saveFile(String
16、 str,Date date,double lng, double lat) String arr = null; try arr = str.split(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();TMP.csv文件创建成功 catch (IOException e) / e.printStackTra
17、ce(); log.error(创建文件TMP.csv时,发生错误 return false; try BufferedReader br = 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),
18、累计耗损(db),db/km,事件类型,区间折射率 for(int i = 20; i 8 & b1 = (byte) (n 16 & b0 = (byte) (n 24 & return b; * byte convert int * param b public static int bytes2Int(byte b) return b3 & 0xff | (b2 & 0xff) (24 - i * 8); int len = b.length; byte dest = new bytelen; System.arraycopy(b, 0, dest, 0, len); byte temp
19、; len / 2; +i) temp = desti; desti = destlen - i - 1; destlen - i - 1 = temp; return dest; / 时1字节,分1字节,秒1字节,年2字节,月1字节,日1字节, 预留1字节 * 日期转成8字节byte * param date public static byte date2Bytes(Date date) byte b = new byte8; Calendar cal = Calendar.getInstance(); cal.setTime(date); int year = cal.get(Calen
20、dar.YEAR); int month = cal.get(Calendar.MONTH); int day = cal.get(Calendar.DAY_OF_MONTH); int hour = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); / 按时、分、秒、年、月、日顺序 b0 = int2OneByte(hour); / 1字节 b1 = int2OneByte(minute);/ 1字节 b2 = int2One
21、Byte(second); System.arraycopy(int2TwoBytes(year), 0, b, 3, 2);/ 年,2字节 b5 = int2OneByte(month+1); b6 = int2OneByte(day); /b7 保留一字节 public static long bytes2Long(byte b) long iOutcome = 0; byte bLoop; for (int i = 0;b.length; i+) bLoop = bi; iOutcome += (long)(bLoop & 0x000000ff) (8 * i); return iOutcome; public static byte longtoBytes(long l) byte byteArray = new byte8; for
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1