APP下载

承德地震监测中心站数字观测仪器原始数据实时绘图APP研发

2021-12-18马广庆张玉林郭亚亚魏娅玲

四川地震 2021年4期
关键词:监测中心服务端服务器端

马广庆,张玉林,郭亚亚,魏娅玲

(1.河北省地震局,河北 石家庄050021;2.河北省地震局承德地震监测中心站,河北 承德067000;3.四川省地震局,四川 成都610041)

目前,承德地震监测中心站的形变、地磁观测仪器已更新为数字化观测仪,如承德、丰宁和宽城地震台的VP型宽频带倾斜仪、FHD-2B质子矢量磁力仪、SQ-70D数字水平摆、DSQ型水管倾斜仪和SS-Y型铟瓦棒伸缩仪等。使用者需要通过这些观测仪器自带的软件(或仪器网址)才可以查看仪器记录的原始数据,且操作过程繁琐(张玉林等,2018)。基于上述问题,承德地震监测中心站拟研发一个基于Windows界面的实时监控系统,该系统能够使承德地震监测中心站所有观测仪器记录的原始数据可以通过一个Windows界面进行实时查看,在此基础上进一步研发基于Andriod系统的原始数据实时显示系统,使原始数据实时查看界面从计算机界面变更为手机界面,实现随时随地均可查看仪器记录数据的功能,为台站仪器运维远程监控提供软件支撑。

1 软件架构设计

应用程序需要并行获取和显示多台仪器的记录数据,因此需要并行调度各个并行的线程(程岩等,2010)。由于台站观测仪器分布在各处,不够集中,为了台站值守人员能够更加方便地查看各个台站仪器的运行状态,将各个分散网址的台站观测仪器数据进行集中汇集,然后通过手机APP将分散的各个台站观测数据展现到手机界面中。该软件采用C/S架构设计:C端即客户端(即手机APP),负责展现仪器数据;S端即服务端,负责收集数据。服务端每一分钟向各个仪器请求一次数据,并将数据保存起来,服务端会保存720分钟(即12小时)的实时观测数据。APP每分钟向服务端请求指定仪器的数据,然后将数据以折线图的形式展示。

手机APP不直接向仪器申请数据,其原因主要有三:一是仪器原因,为保证手机拿到的是最近12小时内的数据,而不只是当前或当天的数据,不仅可以避免凌晨查看到的数据曲线过短,还可以避免有的仪器因只能查看当前数据而导致手机APP需要等待很长时间才能看到波形图;二是仪器有的时候会更新,手机APP也要随着更新,这样就需要将每个APP的用户进行更新,故采用服务端,只需要更新服务端,让服务端与更新的仪器进行适配就可以了;三是与APP的设计有关,可以仅通过服务端的修改而改变APP上仪器数据的展示方式。

1.1 服务器端

承德地震监测中心站拥有14套观测仪器,包括地磁绝对观测FHD-2B仪器2套,VP型宽频带倾斜仪3套,SQ-70D水平摆观测仪1套,DSQ型水管倾斜仪2套、SS-Y型铟瓦棒伸缩仪2套,TJ-II型体应变仪1套和WYY-1\RTP-II\ZKGD-3000M型气象三要素仪各1套,共计45个测项。仪器拓扑结构如图1所示。

图1 承德地震监测中心站前兆仪器结构拓扑图

仪器种类不同,数据来源也各不相同,这些仪器有的使用http协议在SVN内网发布数据,如FHD-2B等,有的需要使用Socket发送指令后再接收数据,如丰宁台SQ-70D水平摆倾斜仪。数据来源多样,形式变化多样,应用程序需要不同命令来实现相应仪器的数据采集。利用http发布数据的仪器,应用程序需要使用http协议与观测仪器进行通信,获取仪器记录数据,其主要过程是应用程序向仪器地址发送索取数据的“请求”,接收仪器收到请求之后返回“响应”和各种异常、错误情况。利用tcp发布数据的仪器,应用程序需要使用tcp协议与仪器建立Socket连接,通过Socket连接获取数据,其主要过程是通过IP和端口与仪器建立连接,向仪器发送“请求”,接收仪器返回“响应”和各种异常、错误情况。仪器返回的数据都是混杂在通信协议各种表意符号中的,数据解析模块可以将关注的数据解析出来。数据解析模块分为两个部分:处理html数据(即http协议返回的数据)和处理tcp协议返回数据。

为了降低仪器之间的影响,例如一台仪器通信出问题而影响其它仪器数据的接收,各数据模块运行于不同线程之中。通过数据锁保证数据同步技术对系统性能造成较大影响,现代线程技术多采用Actor模型实现线程的调度,研究者利用这一技术实现各个线程通过相互传递消息来完成调度,这个消息多是通过原子(程序设计上通过底层保证同一时刻只有一个线程能访问的变量)来实现线程间的过渡。因此系统采用Channel技术来实现Actor模型,在无锁情况下通过消息传递,把数据从一个线程传到其它线程(秦虹,2014)。

服务端设计为多个线程协同工作的模式,具体分为主线程、UI线程、计时线程、服务线程和下载线程。主线程负责服务各部分的协同调度工作及产生各个工作。UI线程是负责服务界面显示的,服务对于界面的需求不大,但考虑使用方便性,还是制作了一个界面。计时线程是为了每间隔一分钟向各个仪器请求数据的计时而设计的。服务线程是提供响应web请求的。下载线程是从各个仪器上下载数据信息的。当主线程启动UI线程、计时线程和服务线程后,计时便开始了。然后主线程会每分钟启动下载线程一次,每台仪器运行着一个下载线程。在下载线程中,数据从仪器中请求,并解析出其中的数据。解析出数据之后,下载线程通过Channel把数据传递给主线程,然后下载线程结束工作,直到下次再由主线程启动。主线程会把数据转发给UI线程,UI线程显示数据并保存数据。服务线程接到Web请求后,通过Channel向UI线程发消息,然后UI将所请求的数据回复给服务线程。线程之间通过Channel技术运行数据交换。服务端保存着各个仪器720分钟(即12个小时)的数据,这样每次APP打开就能有完整的图形出现。

1.2 手机APP客户端

手机APP端模块在Android开发应用程序时主要使用Java语言。在采集数据过程中,需要网络模块和数据解析模块(彭宏伟等,2010)。APP能够实现导航条、菜单、仪器切换等功能,通过嵌入浏览器控件,打开对应的Web页面,实现数据展现等功能,这种混合开发的技术路线也是目前软件开发的主流选择。

软件展示数据的实现:WebView组件是专门用来浏览网页的,在APP界面上添加WebView组件后,就可通过WebView的loadUrl方法来加载指定的网页,同时将WebView的JavaScript的支持打开。通过:webview.getSettings().setJavaScriptEnabled(true)和webview.setWebChromeClient(new WebChromeClient())这两个函数来获得WebView的JavaScript的支持。

前端绘图主要使用Ajax技术和ECharts组件。Ajax即“Asynchronous Javascript And XML”(异步JavaScript和XML),是指一种创建交互式网页应用的网页开发技术。Ajax在浏览器与Web服务器之间使用异步数据传输(HTTP请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。ECharts是一款由百度前端技术部开发的,基于Javascript的数据可视化图表库,提供直观、生动、可交互、可个性化定制的数据可视化图表。前端页面使用Ajax向仪器数据服务发数据请求,当数据从仪器数据服务那里传过来后,页面再使用ECharts将其绘制到屏幕上。

2 程序主要代码

2.1 服务器端主要代码

数据下载//使用http协议下:

void httpDownload(std::string&url,std::string&target,(void*)(parseFunc*)(std::string&body));spawn httpDownload("http://仪器IP/html/DTSJ.HTM"

接收下载信号,并分发下载到各个仪器的下载线程:

void downloadData();

数据流控制主要有两方面工作:一方面是通过上面的下载函数,在下达下载命令时将各个仪器处理分开;另一方面是通过函数实现在UI无事件时执行int idleActionCB()函数。

2.2 基于Android系统APP客户端主要代码

对于手机软件开发来说,大小各异的手机屏幕尺寸带来的麻烦不少。Web技术屏幕适配方面比较复杂。本研究采用MediaQueries(屏幕自适应)这种方法,在CSS中写下不同屏幕下使用不同的CSS来实现屏幕适配,这个方式不但可以进行字体的适配还能实现不同界面显示不同的样式,多个屏幕(600px-900px)自适应代码:<link rel="style sheet"media="screen and(min-width:600px)and(max-width:900px)"href="style.css"type="text/css"/>。用em和rem来代替px(像素点),em根据父标签的字体大小来设置当前标签的宽高或字体大小,rem是根据跟标签的字体大小来适配当前标签的宽高或字体大小,多用百分比来作为宽高的值。

3 效果图展示

系统以Windows64位系统为基础,实现原始数据的实时采集、传输与存储。系统软件目前已经在承德地震监测中心站三个直属台站(宽城、丰宁、承德)投入使用,运行状态良好,在河北省地震局无线内网范围内可以随时随地查看原始数据运行状态。该系统由基于Windows系统服务器端与基于Android系统APP端两部分组成。服务器端提供整个承德地震监测中心站的所有数字化仪器原始数据采集、传输与存储。手机APP端可根据台站需要,生成三个直属台的手机APP软件,每个台值班员工安装本台相应的手机APP软件,便可以在本单位内网范围内随时,随地查看12小时内的原始数据实时监控曲线。服务器端运行效果如图2所示。手机客户端运行效果如图3所示。

图2 基于Windows系统服务器端运行效果

图3 手机端仪器切换与部分原始数据实时监控曲线

4 结论

本研究采用C/S架构,利用Java语言进行程序研发,以分为时间单位进行数据采集,利用channel技术进行数据流向控制,服务器端显示实时原始数据的同时保存12小时内的原始数据,在手机APP端采用数据浏览器,可以随时浏览原始数据实时曲线,目前已投入使用,系统有几个优点:1)可以在内网覆盖的范围内随时浏览本台仪器原始数据观测曲线及原始数据变化范围。2)手机客户端可以自由切换仪器类型,实现坐标系实时转换,更好地展示12小时内原始数据实时动态。3)软件设计过程中,没有设计观测曲线放缩功能,但在旋转屏幕时,可以看到更好的曲线形态,缺点是截取完整的图片比较困难。

软件只能用于原始数据实时监控,不能对原始数据进行预处理,伴随首都圈安全保障力度加大,原始数据需要随时转换以应用于分析会商,因此开发带数据预处理的原始数据实时监控系统是未来发展的方向。

猜你喜欢

监测中心服务端服务器端
Linux环境下基于Socket的数据传输软件设计
新时期《移动Web服务端开发》课程教学改革的研究
开年第一会,11省区打响“当头炮”
砥砺奋进的五年
十二轮中央巡视首度实现全覆盖
学习考察,这十个城市是首选
基于Qt的安全即时通讯软件服务器端设计
基于Qt的网络聊天软件服务器端设计
基于C/S架构的嵌入式监控组态外设扩展机制研究与应用
摸清黑客套路防范木马侵入