地震前兆设备接口软件的设计与研究

2019-02-12 04:02:00李贵元何思源钟李彬刘华姣徐文海
四川地震 2019年4期
关键词:前兆台网数据包

李贵元,何思源,钟李彬,刘华姣,徐文海

(四川省地震局成都地震基准台,四川 成都 611730)

《地震前兆台网专用设备网络通信》规定了中国地震前兆台网专用设备基于以太网接口网络化功能的技术要求,包括前兆台网专用设备的通信接口、设备信息、运行功能、数据格式、通信协议和访问安全控制的约定,以太网接口是设备通信的必备标准接口。规程是“中国数字地震观测网络”分项“中国地震前兆台网”之《中国地震前兆台网技术规程》的组成部分,适用于“中国地震前兆台网”建设。地震前兆台网设备是指可用于测量重力、地磁、地壳形变、地电和地下流体各个学科的观测对象的设备以及台站辅助观测设备。地震前兆设备接口软件的设计需严格遵守地震前兆台网专用设备网络通信规定,主要针对地电和地磁的设备接入进行研究。本文主要采用基于TCP/IP协议的SOCKET连接技术,设计能够在行业网络环境下实现对仪器控制与参数读取的接口软件,主要功能有收集测量数据、设定工作参数、查看状态信息、调取工作日志等。软件数据通信通过以太网、采用基于TCP/IP协议的SOCKET连接的前兆台网专用设备与客户端的数据信息交换。客户端通过上传命令字和相关参数,设备端解析原语后执行相应动作,返回执行结果。接口软件可在地震前兆设备调试、教学实践、仪器故障原因判定等工作中应用。

1 前兆设备接口软件系统设计

1.1 软件需求分析

图1 前兆设备网络连接示意图

成都地震台有GM-4磁通门磁力仪、FHDZ-M15自动化地磁台站系统、ZD8M地电仪、ZD9A地电场仪等数字化前兆设备,各前兆设备的网络连接如图1所示。成都地震台作为地球物理学实践教育基地,承担教学实践的工作,如何在实习教学中,对重力、地磁、地电仪器状态信息进行教学演示,使实践人员更清楚设备如何进行通信、如何进行数据传输以及在故障中如何对指定IP地址的服务器告警,了解SNTP协议在仪器校时的工作机制具有重要意义。前兆设备接口软件主要从仪器数据、仪器参数、参数设置等几方面进行设计,使软件能应用于监测人员与设备交互的日常工作之中,辅助监测人员深入了解前兆仪器在通信、数据存储、远程控制等方面的原理。

1.2 软件总体设计

软件主要通过TCP/IP协议连接前兆设备,对每一套接入的设备分配对应内存和软件资源,利用Socket(IP:Port)对设备发起连接请求,仪器做出应答,使用设置好的用户名和密码登陆设备。软件依照规程的协议实现监测数据、工作参数、设备告警、参数设定(何案华等,2008)等4个模块。软件流程图如图2所示。考虑到连接设备时,设备同时也承担着数据采集任务,规程规定在连接仪器30 s后没有操作,连接自动断开,以保障整个观测系统的稳定运行。在软件设计中,各个功能操作应在登录后30 s内完成操作,若需要持续连接,可以考虑以合法的空操作指令作为心跳帧,在30 s内向设备发起请求来维持连接。在读取监测数据时,存在数据量过大的问题,对于秒采样的磁通门磁力仪单测项的数据量一天是86 400字节(王秀英等,2009),在同时读取15天的数据时要考虑速度较慢的问题。在数据传输过程中,软件发送数据传输指令,设备端响应数据传输命令,依据命令将相应的测量数据发送到接口软件(王秀英等,2008)。软件再接收数据进行数据处理。获取工作参数、告警信息、设定仪器参数功能与数据传输过程类似。

1.3 关键技术分析

图2 通用接口软件流程图

在连接设备中,值得注意的是,在设备连接中一定要保证正确的设备ID号和上位机运行所应用的端口号。根据规程,设备ID由12个字符表示,一般前4个字符为“X”加设备的测项代码,中间4个字符为厂家自定义标志,后4个字符为设备序列号。测项代码遵照《地震及地震前兆测项分类与代码(DB/T 3-2011)》的规定,设备序列号由4个阿拉伯数字组成。连接成功后使用缺省的用户名和密码即可登录设备。在选用Socket时,主要比较了CAsyncSocket类和CSocket类之间的区别,其中在CAsyncSocket类中逐个封装了WinSock API,这个类基于非常了解网络通信,目的是为了在MFC中使用WinSock,开发者有能力处理诸如阻塞、字节顺序和在Unicode与MBCS间转换字符的任务。提供更方便的接口以自动处理这些任务,CSocket类是由CAsyncSocket类继承下来的,它提供了比CAsyncSocket类更高的WinSock API接口。CSocket类和CSocketFile类可以与CArchive类合作起来管理发送和接收的数据,这使得管理数据收发更加便利。CAsyncSocket类是异步通信,CSocket类是同步通信;前者是非阻塞模式,后者是阻塞模式。CAsyncSocket类异步效率高,但是更容易出错,而内置了多线程机制的CSocket类能够保证数据的顺序交付,提高了效率。在接口软件的设计中,最终采用了CSocket类作为核心组件实现与前兆设备的数据收发管理机制。

2 软件编码分析

2.1 通讯协议分析

数据传输协议采用基于SOCKET连接的HTTP(Hyper Text Transfer Protocol)协议,支持指令方式和网页方式。本文中仅使用了指令方式,通信协议采用的是HTTP 1.1版本,相较于HTTP 1.0,HTTP 1.1支持持久连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,允许客户端不用等待上一次请求结果返回就可发送下一次请求,能有效降低系统交互时间,提高效率。客户端发送一个请求消息到设备端包含请求行、请求头部、空行和请求数据4个部分(见图3)。使用HTTP请求消息结构分析来解析用户登录设备过程,用户登录设备端的协议定义如图4所示。

图3 HTTP请求消息结构

图4 用户登录协议结构

使用HTTP的GET请求,前两个字段分别为请求方法名和固定的空格,第三个字段是除指令原语固有格式外指令的字节数总和,ID字段需要的唯一的设备ID参数,lin字段是命令字,表示协议功能,取login的lin为用户登录功能,username和password表示用户登录的参数。最后为固定格式空格加上协议版本号。客户端发送请求后,设备端验证登录连接正常,返回$ack 。验证登录连接不正常,返回$nak 。若仪器端接收到错误指令,返回$err 。对于更复杂一点的协议,协议的固定格式还是一致,唯一的区别在于参数列表发生了变化,比如获取整体观测数据,最多可以获取15天的观测数据,协议结构如图5所示。

图5 获取整体测量数据协议结构

协议的主体结构与上一协议一致,此处不再赘述,主要分析协议功能和参数列表,该协议的命令字是dat,表示功能为获取观测数据,n是获取数据的天数,最大取值为15,只能获取的观测数据为15天,day0即获取当天的数据,day1为前一天数据,以此类推。虽m可以取值到255,但最多到day14为有效参数。在客户端发出请求后,正常执行返回信息格式,格式为:$第一个数据包信息长度 第一个数据包内容 第二个数据包信息长度 第二个数据包内容 ……最后一个数据包信息长度 最后一个数据包内容 ack 。其中$为返回信息起始符。信息长度是指数据包的具体内容的字节总数,不含“信息长度”本身和以“ ”表示的分隔符。数据包内容是以天为单位的测量数据, 为换行符,用于分隔各个信息。若数据传输参数指定的某天数据不存在,则将对应天的数据包信息长度置为0,不传输该天数据包内容。若仪器端接收到错误指令,返回$err 。

2.2 核心模块

使用了封装的SocketClient实现数据通信,分别设置了Socket连接、Socket重新连接、Socket断开连接等函数。在新建的线程中间接收并分发数据给指定的函数处理。下例是线程中处理数据的代码:

DWORD WINAPI MyThreadFunction1(LPVOID lpParam)

{

SocketClient* c = (SocketClient*)lpParam; //取得SocketClient类的对象

memset(recvBuff, 0, sizeof(recvBuff));

while (c->isConnected){ //连接可用的时候

int ret, num = 100, err;

ret = recv(c->sockClient, recvBuff, num, 0); //接收Socket数据

if (ret == SOCKET_ERROR)

{

err = WSAGetLastError();

if (err == WSAEWOULDBLOCK)

{ continue; }

else if (err == WSAETIMEDOUT){} //超时。

else if (err == WSAENETDOWN){} //连接断开。

else //其他错误。

break;

}

else {

isGetData = TRUE;

//break; //接受成功,退出线程

}

}

return 0;

}

数据发送模块使用的发送函数的代码:

int SocketClient::sendData(char *data, int length)

{

hThread1 = CreateThread( // 开启接收线程

NULL, // 默认安全属性

0, // 使用默认栈大小

MyThreadFunction1, // 线程函数名称

this, // 线程函数参数

0, // 使用默认创建标志

NULL); // 返回函数标识符

int res = send(this->sockClient, data, length, 0); //数据发送

return res;

}

图6 软件主界面

2.3 软件实现

前兆设备接口软件主要分为4个模块(见图6),分别是数据获取、设备控制、设备监视、工作参数。首先是Socket连接设备,连接成功后,才能使用账号信息登录设备。之后才能实现对设备的管理控制。

2.4 软件测试

软件使用了台站代码为51×××、设备ID为3120IGEA××××的崇州地震台的GM-4磁通门磁力仪为例,对软件进行测试,该软件完成了预期的效果,能够获取准确的设备状态信息、设备网络参数以及相应的各项功能。图7、图8为软件在获取设备信息的测试情形。

图7 设备状态信息获取

图8 设备网络参数获取

3 认识与讨论

在使用地震观测网络技术规程开发前兆设备接口软件中,有以下几点认识:(1)地震前兆设备支持多种传输协议,实现了FTP,HTTP1.1等通用的应用层传输协议,为用户多渠道获取观测数据提供了方法。(2)地震观测网络技术规程为前兆设备远程监控提供了解决方案,可以实现多平台、多终端的数据监控和故障处理判定。(3)地震接口软件的实现为Android/iOS移动设备接入地震专用仪器验证了技术可行性,为地震数据在移动终端展示提供了解决方案。(4)本次研制的接口软件能够获取设备的状态信息、网络信息、供电状况,能在设备原理案例学习、仪器故障判定等工作中发挥作用,以期前兆设备接口软件能在后续工作中有更大范围的推广应用。

猜你喜欢
前兆台网数据包
地球物理台网仪器维修信息管理的研究与实现
地震研究(2021年1期)2021-04-13 01:05:30
推进报台网深度融合 做强区级融媒体中心
传媒评论(2018年10期)2019-01-17 01:33:16
哪些现象是地震前兆
SmartSniff
西藏地震应急流动台网浅析
西藏科技(2016年9期)2016-09-26 12:21:39
MRG9000媒资卫士在市级电视台全台网的应用
右肝区不适或疼痛是肝癌表现的前兆吗
肝博士(2015年2期)2015-02-27 10:49:46
基于Libpcap的网络数据包捕获器的设计与实现
腾冲地电场震前的前兆异常分析
地震研究(2014年3期)2014-02-27 09:30:57
全国前兆台网“九五”系统台站接入的设计与实施*
地震研究(2013年3期)2013-12-14 09:30:56