毕业设计-光纤网络光信号实时监测系统项目报告(编辑修改稿)内容摘要:

装,具有过流保护、短路保护、过压保护等功能,使其安全性、稳定性和可靠性得到充分保障,正适用于铁路列车的特殊工况。 软件设计 软件设计功能架构图如下所示: 数 据 传 输 层数 据 解 析 层波 形 绘 制故 障 信 息 分 析数 据 分 析地 理 信 息 分 析外 部 调 用 接 口光 信 号 统 计分 析软 件 架 构 设 计模块调度机制接口安全机制 图 237 软件设计功能架 构图 第 3 章 项目 实现 9 在此处项目研发过程中本人主要负责实时监测上位机模块的开发。 因此,项目实现主要围绕该模块。 上位机模块又可以划分为两个模块 : 1) Web 模块 (包括:浏览器界面和服务器端) 2) Java 客户端 模块 Web 浏览器端采用 javascript+css+ajax+jquery,使用定时向服务器 端 发送 ajax 请求,请求 Web 服务器 数据 , 数据采用 json 格式传输。 浏览器端拿到数据后 , 开始 更新界面。 地图使用百度地图 API( javascript 版),从服务器端获取的经纬度信息( GPS 坐标 )转成百度地 图特有的经纬度,并以标注的形式显示在地图上 (旧事件为洋紫色标注,最新事件为淡绿色标注 )。 Java 客户端 负责 与 下位机 和 OTDR 设备进行通信,从下位机获取列车经纬度信息,从OTDR 设备获取列车事件点信息(光信号故障点集合),完成分析数据之后, 发送定义好格式 的数据 (以字节为单位) 给下位机,同时发送 HTTP POST 请求 (字符串形式) 给Web 服务器。 数据库连接模块 Web 服务器端数据库采用文本文件类型的轻量级数据库 sqlite, 主要目的是: 提高软件 性能、 减少 时间成本和 降低 后期维护等。 使用 sqlite 数据库主要分三 部分:。 10 图 311 Web端架构 图 312 数据库连接 11 Web 浏览器端 模块 图 321 预定义 列车路线: 京沪 (北京 上海) 、京广 (北京 广州) 、郑西 (郑州 西安) 、胶济 (青岛 济南) 、杭宁 ( 杭 州 南京) 部分 关键代码如下: 图 322 京沪线 (封装成 数组 ) 12 图 323 百度地图 API 图 324 列车事件(故障点集合)显 示 同一时间的故障点集合(事件)显示在百度地图的同一标注中。 13 图 325 路线定义 可自由选择线路,默认为 显示 所有列车路线。 清除事件按钮可初始化 sqlite 数据库表 (删除旧事件 列 表 ,重新初始化故障点集合 )。 Java 客户端 模块 主界面如图 33 所示 : 图 33 程序主界面 14 程序启动重连 以 多线程 的形式 启动 主 程序,防止程序 主界面出现卡死的现象。 在初始化主界面时,同时启动连接下位机 ( Socket 通信,端口号: 1200 IP:下位机默认) 的线程。 如果发现下位未启动则 一直尝试重连,直至连接下位机成功,开始测试按钮才能开始点击。 点击开始测试按钮后,开始定时任务,周期 60s。 部分 关键代码: 图 331 保存文件 Java 客户端从 OTDR 设备中获取事件(故障点集合)信息,完成数据的分析后,保存最原始的文件信息为 ,方便 EXCEL 打开查看。 图 332为 EXCEL 打开 效果 : 15 图 332 关键代码: package。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 import。 public class SaveFileUtil { private static final Log log = ()。 public static boolean saveFile(String str,Date date,double lng, double lat){ String[] arr = null。 try{ arr = (\n)。 }catch(NullPointerException e){ (otdr 设备工作不正常 )。 return false。 } File file = new File()。 if(!()){ 16 try { ( 文件不存在,开始创建 )。 ()。 ( 文件创建成功 )。 } catch (IOException e) { // ()。 (创建文件 时,发生错误 )。 return false。 } } try { BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)))。 StringBuilder sb = new StringBuilder()。 String temp。 while( (temp = ()) != null){ (temp)。 (\r\n)。 } (事件号 ,距离 (km),熔接耗损 (db),回波耗损 (db),累计耗损(db),db/km,事件类型 ,区间折 射率 )。 for(int i = 20。 i。 i++ ){ (\r\n)。 (arr[i])。 } (\r\n)。 (时间 ,经度 ,纬度 )。 (\r\n)。 ((date)+,+lng+,+lat)。 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)))。 (())。 ()。 ()。 return true。 } catch (FileNotFoundException e) { // ()。 ( 不存在 )。 } catch (IOException e) { // ()。 (数据写入文件时发生错误 )。 } return false。 17 } public static boolean deleteFile(){ File file = new File()。 if(()){ if(()){ (删除文件 成功 )。 return true。 } } else{ (文件 不存在 ,删除失败 )。 } return false。 } } 读取配置文件 配置文件包含 下位机 IP、 PORT 和 Web 服务器配置等信息。 关键 代码如 图 333 所示: 图 333(1) 读取配置文件 Properties 文件: 图 333(2) 配置文件 18 Java 与下位机 Socket 通信 下位机软件使用开发语言 C++, 上位机( PC)使用高级语言 Java。 Java 和 C++的字节顺 序在不同 机器上会 有所 不同 , 下位机 软件( C++开发 ) 负责 字节顺序 (大端、小端) 的转化。 上位机 软件 ( Java 开发 ) 与 下位机( C++开发 ) 采用最底层 的 数据类型 字节进行通信。 Java与 C++ TCP 通信接口的定义: TCP 通信接口: 获取 GPS 信息包格式: 操作符号: 4字节, int 值为 1 报文长度: 4字节 回复 GPS 信息包格式: 操作符号: 4字节, int 值为 2 报文长度: 4字节 经度 :16 字节 纬度 :16 字节 发生事件变化时,发送数据包格式: 操作符号: 4字节, int 值为 3 报文长度: 4字节, int 列车位置经度 :16 字节 列车位置纬度 :16 字节 当前时间:时 1字节,分 1字节,秒 1字节,年 2 字节,月 1字节,日 1 字节 , 预留 1 字节 整形 事件个数: 4字节, int 事件 1,距离 : 4 字节, float 事件 1,衰减 : 4 字节, float。 事件 n,距离 : 4 字节, float 事件 n,衰减 : 4 字节, float 字节工具类: 本次 项目中 上位机软件 ( Java 开发) 使用到的数据类型和特定字节 大小 的转换。 package。 import。 19 import。 /** * 字节工具类 * @author jingxuan */ public class ByteUtils { /** * int convert byte[] * @param n * @return */ public static byte[] int2Bytes(int n) { byte[] b = new byte[4]。 b[3] = (byte) (n amp。 0xff)。 b[2] = (byte) (n 8 amp。 0xff)。 b[1] = (byte) (n 16 amp。 0xff)。 b[0] = (byte) (n 24 amp。 0xff)。 return b。 } /** * byte[] convert int * @param b * @return */ public static int bytes2Int(byte b。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。