光纤网络光信实时监测系统项目报告Word文档下载推荐.docx
《光纤网络光信实时监测系统项目报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《光纤网络光信实时监测系统项目报告Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
![光纤网络光信实时监测系统项目报告Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2022-12/10/246df2f4-d037-405a-a70f-b7468ab8c352/246df2f4-d037-405a-a70f-b7468ab8c3521.gif)
1.3光时域反射测距设计依据
光时域反射测距通过使用瑞利散射和菲涅尔反射来表征光纤的特性。
瑞利散射是由于光信号沿着光纤产生无规律的散射而形成,通过测量回到光时域反射设备端口的散射光,可表明因光纤引起的衰减(损耗/距离)程度。
若测试形成的轨迹是一条向下的曲线,它说明了背向散射的功率不断减小(这是由于经过一段距离的传输后发射和背向散射的信号都有所损耗)。
在波长已知情况下,瑞利散射功率与信号的脉冲宽度成比例:
脉冲宽度越长,背向散射功率就越强。
瑞利散射的功率还与发射信号的波长有关,波长较短则功率较强。
如图所示:
图13-1瑞利散射
菲涅尔反射是离散的反射,它是由整条光纤中的个别点而引起的,这些点是由造成反向系数改变的因素组成,例如玻璃与空气的间隙。
在这些点上,会有很强的背向散射光被反射回来。
光时域反射测试模块就是利用菲涅尔反射的信息来定位连接点,光纤终端或断点。
如下图分别表示了机械熔接、法兰盘、连接器断开造成的菲涅尔反射:
图13-2机械熔接
(1)、法兰盘
(2)和连接器(3)断开造成的菲涅尔反射
1.4光网络实时信号监测模块设计目标
1)性能指标
中心波长:
13l0nm±
20nm
事件盲区:
≤1.00m
动态范围:
35/33dB
衰减读出分辨率:
0.01dB
群折射率设置范围:
1.4000~1.6000
光纤连接器:
FC
单系统功耗:
≤30W
测距精度:
光信号动态监测精度:
≤1.00m。
2)系统功能
下位机设备实现光信号的获取、解析、故障判定及故障信息上报,实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。
列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息传输给上位机,由上位机分析后通过发送器发送给地面GSM接收机。
故障通告内容应包括:
光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的经度和纬度及故障发生时间(需在上位机中预植列车图形化运行线路)。
所有故障信息通报信息在上位机保存。
故障信息保存容量大于1000条,断电后信息不丢失。
地面终端可查取保存完毕的故障信息。
第2章项目设计
2.1项目总体设计
光网络实时信号监测系统包含OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块六大功能模块。
设计方案如下图所示。
图2-1光网络实时信号监测系统设计方案
其中:
(1)OTDR模块:
负责定位光路故障点,分析故障类型及故障产生的具体位置;
(2)GSM模块:
负责将故障信息发送至地面接收端,并传递地面接收端的查询信息;
(3)GPS模块:
负责故障时获取列车运行地理位置信息;
(4)下位机管理模块:
负责总体接受和处理来自OTDR、GPS、GSM模块数据,并保证各模块的协同工作,对外输出计算统计结果;
(5)实时监测上位机模块:
完成波形分析、光信号统计信息的获取及在线故障判定;
(6)电源模块:
独立供电,系统功耗<
30W。
2.2研究思路与技术路线
本设计里,主要通过实时监测上位机与下位机设备完成系统功能,其中:
(1)下位机,实现设备光信号的获取、解析、故障判定及故障信息上报;
(2)实时监测上位机,完成波形分析、光信号量的实时获取与在线故障判定。
通过以上设计,可实现:
在列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。
2.3模块选型与设计
系统包括AQ7275OTDR模块、GSM模块、GPS模块、下位机管理模块、实时监测上位机模块及电源模块。
总体硬件架构如下图所示:
图23总体硬件架构图
2.3.1AQ7275OTDR模块介绍
AQ7275OTDR模块实际包含了OTDR接口、滤波、合波等,其功能可简记如下:
图23-1光信号处理示例图
模块功能说明:
1)OTDR接口。
包括激光器发射输出与反射光输入,测试接口与WDM对接。
2)激光器控制电路。
负责激光器的打开与关闭,同时可以控制激光器的工作电路。
3)数据采集电路。
负责将反射回来的光信号转换成数字电信号。
4)FPGA。
根据DSP的命令控制激光器开与关,同时收集数据采集电路的数字信号,在内部进行数据累加,并提供给DSP。
5)DSP。
根据命令控制FPGA,向FPGA读取数据,并按OTDR算法处理数据,将处理结果发送到外部电路。
外部接口电路。
外接通信处理单元。
2.3.2GSM模块设计
工业级双频GSM/GPRS模块,工作频段双频:
900/1800MHz,可以低功耗实现语音、SMS(短信)、数据和传真信息的传输,支持基站定位功能。
项目
特性
工作频段
EGSM900MHz/DCS1800Mhz自动搜索2个频段
发射功率
Class4(2w)@EGSM900M
Class1(1w)@DCS1800M
GPRS连接特性
GPRSmlti-slotclass10/8
GPRSmobilestationclassB/CC
GPRS数据特性
下行传输特性:
最大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卡
工作温度
-40~+85°
C
2.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(默认)、57600
2.3.4下位机管理模块设计
光信号处理模块实现了光信号物理层的解析,而通信与实时监测模块则完成光信号量的实时获取与故障判定。
下位机管理模块通过与FPGA及DSP模块进行通讯,采用滤波技术滤除检测期间无用信息,根据实际现场需要实时获取各类状态数据,并给出故障判定。
一旦检测到光纤工作异常,记录当前的时间和列车运行的地点,并且将这些信息数据传输给上位机。
模块的抗传导、静电放电、浪涌抗扰度等EMC性能均经过专业测试,并参照铁路交通应用标准,可适应与列车的特殊工况。
2.3.5实时监测上位机模块设计
实时监测上位机完成波形分析、光信号统计信息的获取及在线故障判定。
列车实时运行中,一旦发现光信号的故障,即可实时获取环境信息,并将故障信息发送给地面GSM接收终端。
故障通告内容应包括:
光纤长度,事件故障点在光纤长度上所处的位置,光纤串联中可能的故障器件,发生故障时列车行所处的经度和纬度及故障发生时间、速度(需在上位机中预植列车图形化运行线路)。
所有故障信息通报信息在上位机保存。
上位机通过网口与OTDR设备连接,并实时传输数据。
2.3.6电源模块设计
无需车厢额外供电,通过外部自带模块对系统进行供电。
电源模块金属六面屏蔽封装,具有过流保护、短路保护、过压保护等功能,使其安全性、稳定性和可靠性得到充分保障,正适用于铁路列车的特殊工况。
2.3.7软件设计
软件设计功能架构图如下所示:
图23-7软件设计功能架构图
第3章项目实现
在此处项目研发过程中本人主要负责实时监测上位机模块的开发。
因此,项目实现主要围绕该模块。
上位机模块又可以划分为两个模块:
1)Web模块(包括:
浏览器界面和服务器端)
2)Java客户端模块
Web浏览器端采用javascript+css+ajax+jquery,使用定时向服务器端发送ajax请求,请求Web服务器数据,数据采用json格式传输。
浏览器端拿到数据后,开始更新界面。
地图使用XX地图API(javascript版),从服务器端获取的经纬度信息(GPS坐标)转成XX地图特有的经纬度,并以标注的形式显示在地图上(旧事件为洋紫色标注,最新事件为淡绿色标注)。
Java客户端负责与下位机和OTDR设备进行通信,从下位机获取列车经纬度信息,从OTDR设备获取列车事件点信息(光信号故障点集合),完成分析数据之后,发送定义好格式的数据(以字节为单位)给下位机,同时发送HTTPPOST请求(字符串形式)给Web服务器。
3.1数据库连接模块
Web服务器端数据库采用文本文件类型的轻量级数据库sqlite,主要目的是:
提高软件性能、减少时间成本和降低后期维护等。
使用sqlite数据库主要分三部分:
1.加载sqlitejdbc.dll2.使用sqlitejdbc-v037-native.jar3.加载数据库驱动。
图3-1-1Web端架构
图3-1-2数据库连接
3.2Web浏览器端模块
图3-2-1
预定义列车路线:
京沪(北京-上海)、京广(北京-广州)、郑西(郑州-西安)、胶济(青岛-济南)、杭宁(杭州-南京)
部分关键代码如下:
图3-2-2京沪线(封装成数组)
图3-2-3XX地图API
图3-2-4列车事件(故障点集合)显示
同一时间的故障点集合(事件)显示在XX地图的同一标注中。
图3-2-5路线定义
可自由选择线路,默认为显示所有列车路线。
清除事件按钮可初始化sqlite数据库表(删除旧事件列表,重新初始化故障点集合)。
3.3Java客户端模块
主界面如图3-3所示:
图3-3程序主界面
3.3.1程序启动重连
以多线程的形式启动主程序,防止程序主界面出现卡死的现象。
在初始化主界面时,同时启动连接下位机(Socket通信,端口号:
1200IP:
下位机默认)的线程。
如果发现下位未启动则一直尝试重连,直至连接下位机成功,开始测试按钮才能开始点击。
点击开始测试按钮后,开始定时任务,周期60s。
部分关键代码:
图3-3-1
3.3.2保存文件
Java客户端从OTDR设备中获取事件(故障点集合)信息,完成数据的分析后,保存最原始的文件信息为TMP.CSV,方便EXCEL打开查看。
图3-3-2为EXCEL打开效果:
图3-3-2
关键代码:
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();
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);
sb.append("
\r\n"
sb.append("
事件号,距离(km),熔接耗损(db),回波耗损(db),累计耗损(db),db/km,事件类型,区间折射率"
for(inti=20;
i<
arr.length;
i++){
sb.append(arr[i]);
时间,经度,纬度"
sb.append(StringUtils.formatDate(date)+"
"
+lng+"
+lat);
BufferedWriterbw=newBufferedWriter(newOutputStreamWriter(newFileOutputStream(file)));
bw.write(sb.toString());
bw.flush();
bw.close();
returntrue;
}catch(FileNotFoundExceptione){
//e.printStackTrace();
TMP.csv不存在"
}catch(IOExceptione){
数据写入文件时发生错误"
returnfalse;
}
publicstaticbooleandeleteFile(){
if(file.exists()){
if(file.delete()){
删除文件TMP.csv成功"
returntrue;
else{
log.info("
文件TMP.csv不存在,删除失败"
}
3.3.3读取配置文件
配置文件包含下位机IP、PORT和Web服务器配置等信息。
关键代码如图3-3-3所示:
图3-3-3
(1)读取配置文件
Properties文件:
图3-3-3
(2)配置文件
3.3.4Java与下位机Socket通信
下位机软件使用开发语言C++,上位机(PC)使用高级语言Java。
Java和C++的字节顺序在不同机器上会有所不同,下位机软件(C++开发)负责字节顺序(大端、小端)的转化。
上位机软件(Java开发)与下位机(C++开发)采用最底层的数据类型--字节进行通信。
Java与C++TCP通信接口的定义:
TCP通信接口:
获取GPS信息包格式:
操作符号:
4字节,int值为1
报文长度:
4字节
回复GPS信息包格式:
4字节,int值为2
经度:
16字节
纬度:
发生事件变化时,发送数据包格式:
4字节,int值为3
4字节,int
列车位置经度:
列车位置纬度:
当前时间:
时1字节,分1字节,秒1字节,年2字节,月1字节,日1字节,预留1字节整形
事件个数:
事件1,距离:
4字节,float
事件1,衰减:
。
事件n,距离:
事件n,衰减:
字节工具类:
本次项目中上位机软件(Java开发)使用到的数据类型和特定字节大小的转换。
/**
*字节工具类
*@authorjingxuan
*/
publicclassByteUtils{
/**
*intconvertbyte[]
*@paramn
*@return
publicstaticbyte[]int2Bytes(intn){
byte[]b=newbyte[4];
b[3]=(byte)(n&
0xff);
b[2]=(byte)(n>
>
8&
b[1]=(byte)(n>
16&
b[0]=(byte)(n>
24&
returnb;
*byte[]convertint
*@paramb
publicstaticintbytes2Int(byteb[]){
returnb[3]&
0xff|(b[2]&
0xff)<
<
8|(b[1]&
16
|(b[0]&
24;
*floattobyte[]
*@paramf
publicstaticbyte[]float2Bytes(floatf){
intfbit=Float.floatToIntBits(f);
for(inti=0;
4;
i++){
b[i]=(byte)(fbit>
(24-i*8));
intlen=b.length;
byte[]dest=newbyte[len];
System.arraycopy(b,0,dest,0,len);
bytetemp;
len/2;
++i){
temp=dest[i];
dest[i]=dest[len-i-1];
dest[len-i-1]=temp;
returndest;
//时1字节,分1字节,秒1字节,年2字节,月1字节,日1字节,预留1字节
*日期转成8字节byte[]
*@paramdate
publicstaticbyte[]date2Bytes(Datedate){
byte[]b=newbyte[8];
Calendarcal=Calendar.getInstance();
cal.setTime(date);
intyear=cal.get(Calendar.YEAR);
intmonth=cal.get(Calendar.MONTH);
intday=cal.get(Calendar.DAY_OF_MONTH);
inthour=cal.get(Calendar.HOUR_OF_DAY);
intminute=cal.get(Calendar.MINUTE);
intsecond=cal.get(Calendar.SECOND);
//按时、分、秒、年、月、日顺序
b[0]=int2OneByte(hour);
//1字节
b[1]=int2OneByte(minute);
//1字节
b[2]=int2OneByte(second);
System.arraycopy(int2TwoBytes(year),0,b,3,2);
//年,2字节
b[5]=int2OneByte(month+1);
b[6]=int2OneByte(day);
//b[7]保留一字节
publicstaticlongbytes2Long(byte[]b){
longiOutcome=0;
bytebLoop;
for(inti=0;
b.length;
i++){
bLoop=b[i];
iOutcome+=((long)(bLoop&
0x000000ff))<
(8*i);
}
returniOutcome;
publicstaticbyte[]longtoBytes(longl){
byte[]byteArray=newbyte[8];
for