单维锋,李 军
(防灾科技学院,河北三河 065201)
地震前兆观测设备模拟通信软件关键技术研究*
单维锋,李 军
(防灾科技学院,河北三河 065201)
遵循“中国数字地震观测网络技术规程”相关标准,设计了一套基于 Java语言的前兆观测设备模拟通信软件。介绍了通信指令原语、数据包格式定义以及模拟通信软件的总体设计,详述了模拟通信软件中的几个关键技术,包括如何同时模拟多个前兆设备,应用观察者设计模式实时更新设备状态信息,使用套接字技术和多线程技术启动或停止模拟设备,通过“心跳”线确认远端 Socket是否关闭等。该软件可以模拟大多数 “十五”前兆观测设备的通信原语,一方面为台站技术人员以及地震专业学生了解前兆设备的功能、通信指令、以及数据包的数据格式提供了一个模拟环境,有效地提高了教学效果和培训质量,另一方面也为开发前兆设备相关软件提供了模拟支撑环境。
前兆观测设备;模拟通信软件;套接字;多线程;观察者设计模式
地震前兆台网的主要任务就是获取重力、地磁、形变、地电、流体等地球物理和地球化学观测数据,为地震预报、科学研究和社会应用提供基础数据。在地震行业领域,地震前兆观测是日常获取地震观测信息的重要手段之一。
地震前兆观测设备的种类很多,如数字水位仪、气象三要素观测仪、地电仪和相对重力仪等。各种观测设备的观测物理量、采样率、数据存储等方面不尽相同(中国地震局,2005)。
随着 “十五”国家建设项目的推进,网络化前兆仪器安装相继完成,全国各省级地震局的台网中心甚至台站都已经接入互联网(何案华等,2008)。为了采集、传输、存储和管理各种前兆观测数据,各省局台网中心或台站根据现有设备特点开发了多种计算机管理系统,以提高工作效率(牛从达等,2005)。目前,前兆观测设备的数据汇集工作由中国地震前兆台网数据管理系统(以下简称管理系统)完成,该系统还负责台站、区域中心、国家中心和学科台网中心之间的数据同步交换并对地震专业用户提供数据服务。
由于管理系统的高度自动化和智能化,不利于专业人员了解设备的内部工作原理、数据格式和通信协议。操作人员严重依赖于管理系统获取数据或监控设备状态。一旦管理系统出现问题,操作人员很难找到错误、手动获取数据、查看设备状态或直接控制设备。
此外,在对相关技术人员培训、教学以及设备通信软件开发过程中,也需要了解设备的工作原理、数据格式和通信指令等内容。由于涉及的设备种类非常多,搭建真实的实验环境不仅费用昂贵,而且还需要合适的实验场地。
因此,研究和开发一套前兆观测设备模拟通信软件(以下简称模拟软件)就非常必要。模拟软件可以模拟大多数 “十五”地震前兆观测设备,遵从 “中国数字地震观测网络技术规程——地震前兆台网专用设备网络通信”标准(地壳运动监测工程研究中心,2005)(以下简称通信规程),能够根据客户端发送的指令,模拟不同设备产生相应格式的数据包并发送给客户端。利用模拟软件,可以模拟多种前兆设备的通信指令原语、返回相应数据包,有利于教师、受训人员和学生了解设备的通信原理、通信指令以及数据格式等信息,通过模拟软件有效地避免了对实际观测设备的频繁访问,降低了对正常运行设备的干扰。
模拟软件主要实现客户端与设备端通信指令原语的模拟。客户端向设备端发送通信指令和相关参数,设备端收到指令原语后,进行解释并执行相应动作、返回执行结果。指令原语主要分为数据传输类、设备控制类和设备监视类。数据传输类原语包括获取整体测量数据、当前测量数据和实时测量数据等原语。设备控制类原语包括设置工作参数、设备重新启动等。设备监视类原语包括获取设备状态信息、运行日志、工作参数等原语(地壳运动监测工程研究中心,2005)。
例如,获取当前测量数据通信指令原语格式定义如下:
get /length+ ID+dat+5
指令原语含义:客户端通过指令获取设备端最近整 5分钟采样的样本,如果没有采样样本,取最近的 1个样本。
其中,“get”为命令关键字;“ ID”为设备标识符,即出厂时厂家给设备分配的唯一 ID号,通信规程规定命令中的 ID号必须和设备本身的 ID号完全一致,才可以执行该命令(王秀英等,2008)。
“length”为指令长度字,即除指令原语固有格式外指令的字节数总和;“dat”为数据传输命令字;“+”为分隔符。
指令必须通过 TCP/IP协议发送,因此在发送该指令前,必须通过 81端口建立到特定设备的Socket连接,然后再发送具体命令。
当设备接收到上述命令后,会将最新整 5分钟采样的样本或最近一个样本按如下格式打包,并通过 TCP/IP协议发回给客户端。
$数据包信息长度 数据包内容 ack
其中,“$”为返回信息起始符;“数据包信息长度”是指数据包的具体内容的字节总数,不含“数据包信息长度”本身和以“ ”表示的分隔符;“数据包内容”是设备端最新整 5分钟采样的样本,如果没有采样样本,取最近的 1个样本;“ ”为换行符,用于分隔各个信息;若该仪器不支持该命令,返回“$err ”字符串。
通信规程仅仅规定了各种设备必须提供的命令以及命令格式,并没有规定各具体设备内部数据格式。设备采样率和测项不同,不同设备同一命令返回的数据也不同,如水温仪获取当前测量数据指令的返回数据如下:
$79
79 105601 11006 431320060705 01 01 4313 15.9684 15.9684 15.9684 15.9684 15.9684
ack
其中,79表示数据的字节数;105601表示起始时间为 10点 56分 01秒;11006是台站代码;431320060705为设备 ID编号;第一个 01为采样率,表示分采;第二个 01表示通道数为 1个;4313为测量分项代码,即井表层水温;15.968 4、15.968 4、15.968 4、15.968 4、15.968 4分别为最近 5个观测数据的值。
如果是磁通门磁力仪设备,则返回的数据包含变化记录垂直分量、变化记录水平分量等 4个测项数据。
所以,在实际模拟软件开发过程中,必须实际测试每种模拟设备的具体数据格式,有针对性地进行模拟。
模拟软件分设备端模拟软件子系统和客户端模拟软件子系统。设备端模拟软件子系统主要模拟实现各种前兆观测设备接收客户端模拟软件发送的各种通信指令,并对指令进行分析,进而执行相关指令,将运行结果按照规定的数据包格式打包,并发送给客户端模拟软件。客户端模拟软件子系统主要完成连接设备端模拟软件、发送各种通信指令原语、收到指令后解析观测数据。模拟软件的工作流程如图 1所示。
当某个具体设备启动后,设备一直处于侦听状态,如果此时有客户端发送连接请求,设备将产生一个新的工作线程用来处理与该客户端的交互。客户端首先发送登录指令,服务器端根据指令中的用户名和密码查找数据库,判断是否正确,如果用户名和密码都正确,则返回 “$ack ”字符串,表示登录成功;返回 “$err ”字符串,表示失败。登录成功后,工作线程继续等待接受客户端的其他指令请求,并根据不同的指令,模拟执行不同的操作,并将模拟执行产生的数据按照规定的格式打包,并发送回客户端。直至客户端关闭连接或设备端关闭或者设备端空闲超时自动关闭。
图1 模拟软件工作流程Fig.1 Workflow of simulation system
模拟软件可以同时模拟多个设备,每个设备可以同时接受多个客户端的连接。通过前文的分析可知,模拟设备具有一些共同的功能,如启动、停止、用户登录、获取当前数据、获取配置参数、获取运行日志等。将这些功能封装在一个 ITen-FiveDevice的接口中。对于一些共同的操作,如登录、启动、停止等功能在 TenFiveDeviceAbstract类中实现,而大部分设备具有的不同的具体功能实现则由每个具体的设备类(如:DSQ、G M4、WYY等)负责进行重载,相关类图如图 2所示。
图2 模拟设备类图Fig.2 Diagram of s imulation devices
模拟软件为用户提供了一个可视化操作界面,用户可以方便的操作各种模拟设备,包括启动、停止、添加、删除、修改设备等。模拟软件启动时,先从数据库中加载所有的设备信息到内存中,每个设备就是一个 Device对象,所有设备组成一个链表结构 DeviceList。模拟设备在运行过程中,用户连接数、运行状态等信息会随着客户端的连接与断开或发出的各种通信指令不同而发生变化,界面上的信息需要和各设备内存结构中的信息保持一致。在此,采用观察者设计模式,使界面上的设备状态和内存中的设备对象状态保持一致。观察者设计模式的工作原理是让多个观察者对象同时监听某个主题对象(被观察者),当这个主题对象的状态发生变化时,它会通知所有观察者对象,使这些观察者对象能够自动更新各自的行为或状态。观察者模式的优点在于,它在观察者和被观察者之间建立一种抽象、松散的耦合关系,并且支持广播通信,被观察者会向所有登记过的观察者发送通知消息。
在 J2SDK中的 java.util包中,为 Java程序设计人员提供了实现观察者模式的几个类和接口,主要有 java.util.Observer接口和 java.util.Observable类(卢苇,杨少波,2008)。java.util.Observer接口是观察者对象接口,它定义了一个 update方法,用于在收到被观察者对象发出的消息后,定义如何更新自己的状态或行为。java.util.Observable类是一个被观察对象或数据,通过其提供的 addObserver方法注册一个观察对象,通过 notifyObservers方法通知所有的观察者调用自身的 update方法更新自身状态或行为。
在本模拟软件中,DeviceList对象可以被视为一个被观察对象,它继承了 Observable类,DataT-able封装了界面上的 JTable控件,用于显示 DeviceList对象中各设备对象相关信息,实现了 Observer接口,是一个观察者。观察者模式相关类及其之间的关系如图 3所示。
图3 观察者模式相关类及其关系Fig.3 Relative classes and their relationship of observer design pattern
当模拟设备启动、停止时,或者因为超时而自动断开时都会导致设备的状态发生改变(即 Device对象的 status属性发生改变),当有一个客户端连接或断开时,也会导致设备的客户端连接数目(clientNumber属性)发生变化。当这些操作发生时,将 Device对象的 operation属性设置为 update,并调用如下代码通知观察者进行更新:
setChanged();//设置改变
notifyObservers(device);//通知更新
被观察者发送更新通知(notifyObservers方法)时,将Device对象作为参数传递给观察者。观察者DataTable对象接收到更新通知后,自动调用 update方法,更新界面上设备相关信息。
在模拟软件实现中,管理员可以随时在设备端管理界面上停止、启动某个设备。启动一个设备即建立一个监听套接字,然后调用其 accept方法,在指定的端口进行监听,等待客户端的连接,如果连接成功,就新创建并启动一个线程,在线程内部处理和客户端的交互。模拟设备的启动方法的算法描述如下。
在本模拟系统中,如果设备对象 Device直接继承 Thread类,而将上述模拟设备的启动方法内容置于其 run方法内,虽然可以启动设备进行监听,但是当停止监听后无法重新启动。原因在于一个线程执行完指定的任务后就消亡了,无法调用线程对象的 start方法再次启动该线程(Sun Microsystems,2003)。
因此,在模拟软件中,将监听任务单独实现在 TenFiveDeviceServerThread类中,它继承了 Runnable接口,将启动方法放在 TenFiveDeviceServerThread类的 run方法中,并且其构造函数中包含一个类型为 Device的参数,与相应的设备进行关联。
Device类的 startServer方法算法如下:首先,构造一个 TenFiveDeviceServerThread对象;然后,构造一个线程对象,并启动该线程;最后,更新界面状态。
当需要停止设备监听时,可以调用 Device对象的 stopServer方法。
由此可见,设备(Device类)包括一个 Ten-FiveDeviceServerThread对象,而一个 TenFiveDeviceServerThread对象包括多个客户端工作线程对象(TenFiveWorkThread),每个工作线程对象内有一个命令解析对象 parser,负责对收到的客户端命令进行解析并调用设备相应的方法,打包模拟数据。其 UML关系图见图 4。
模拟软件客户端和设备端通过 Socket建立连接,当设备端停止模拟时,客户端软件的界面状态需要实时更新。在整个通信过程中,客户端主动请求设备端,而设备端一直处于被动响应模式。当设备端停止时,客户端并不能立刻知道设备端的状态,只有在下一次请求时才会出现异常。因此,在客户端和设备端之间应该建立一条“心跳”线来检测两者之间链路是否畅通。Java中的 Socket类提供了一个 sendUrgentData方法(Sun Microsystems,2003),它会往输出流发送一个字节的数据,用于测试对方 Socket是否已经关闭。只要对方Socket的 SO_OOB INL INE属性(默认值)没有打开,就会自动舍弃这个字节,因此设备端不需要添加任何处理该消息的相关代码。在模拟软件中,当 Socket连接成功后,会启动一个定时器,每隔 1秒钟就通过 sendUrgentData方法发送一个字节数据,确认设备端是否关闭,如果设备端已经关闭,sendUrgentData方法将会抛出异常,在异常处理代码中关闭客户端相关连接即可。
图4 设备、线程类 UML图Fig.4 UML diagram of device
设备端模拟软件子系统能够实现设备的添加、修改、删除以及查看详细信息,在设备列表中,选择一个具体设备后,可以启动或停止监听。客户端模拟软件子系统通过指定模拟设备的 IP地址和端口号连接到一个运行中的模拟设备,然后发送登录、获取数据等指令,并将返回数据显示在界面上。
模拟软件能够模拟绝大部分通信指令。模拟的设备包括水管倾斜仪、竖直摆钻孔倾斜仪、测氡仪、数字式温度计等多种 “十五”设备。设备端模拟软件子系统界面如图 5所示,客户端模拟软件子系统界面如图 6所示。
图5 设备端模拟软件子系统界面Fig.5 U Iof device side of simulative system
图6 客户端模拟软件子系统界面Fig.6 U Iof client side of simulative system
该模拟软件界面友好、简单实用、易于操作,能够模拟大部分 “十五”前兆观测设备,为台站工作人员、教师、学生学习和了解前兆设备通信协议、设备功能、观测数据格式提供了模拟环境支持,同时也为各种前兆设备相关通信软件的开发提供模拟支撑环境,在实际开发中,可以直接连接该模拟软件,避免对实际观测设备的频繁访问,具有较大的应用价值。
地壳运动监测工程研究中心 .2005.中国数字地震观测网络技术规程——地震前兆台网专用设备网络通信 [M].北京:地震出版社.
何案华,赵刚,王军,等 .2008.串口前兆仪器的因特网接入方案与配套软件开发[J].地震研究,31(3):279-283.
卢苇,杨少波 .2008.J2EE项目实训——UML及设计模式 [M].北京:清华大学出版社 .
倪泰山,阙云彩,李祥,等 .2009.基于B/S结构的地震台站综合信息管理系统的设计与实现[J].地震研究,32(1):89-93.
牛从达,王峰,李倩,等 .2005.云南分布式地震观测数据库系统的设计与实现[J].地震研究,28(4):398-402.
王秀英,周振安,刘爱春 .2008.“十五”地震前兆观测设备网络通信规程应用探讨[J].大地测量与地球动力学,28(4):131-135.
中国地震局 .2005.中国地震前兆台网技术规程[M].北京:地震出版社.
SunMicrosystems.Class Thread[EB/OL].(2003-01-01)[2010-05- 22]. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Thread.html.
SunMicrosystems.sendUrgentData[EB/OL].(2003-01-01)[2010-05-22].http://java.sun.com/j2se/1.4.2/docs/api/java/net/Socket.html#sendUrgentData(int).
Research on Key Technologies of Simulative Commun ication System of Earthquake Precursory Observation Devices
S HAN W ei-feng,L I Jun
(Institute of D isaster Prevention,Sanhe065201,Hebei,China)
A ccording to“Stipulation on N et Comm unication for D evices in China Geophysical and Geochem ical O bservatory N e tw ork”,a sim ulative comm unication system of precursory observation devices based on java programm ing language is designed.Firstly,the paper introduces the comm unication prim itives,data package form at and high-level architecture.Secondly,several key technologies of sim ulative comm unication system are argued in detail,such as how to sim ultaneously sim ulate m ultiple p recursor equipm ent,updating devices'status using observer pattern,using socket and m ultithreading technologies to start/stop s im ulative device,using “heart”m essage to judge w hether the rem ote socket is closed or not.The s im ulative comm unication system realizes m ost comm unication pr im itives and provides a sim ulative environm ent for students to understand the functions,comm unication prim itives and data package form at of precursory observation devices,w hich enhances the teaching effects and training quality,on the other hand it provides a support environm ent for developm ent of sim ulation softw are.
precursory observation devices,sim ulative comm unication softw are,socket,m ultithreading,observer design patten
TP311.52
A
1000-0666(2010)04-0365-06
2010-03-15.
中国地震局教师科研基金(20090101)和防灾科技学院防灾减灾青年科技基金(200905)联合资助 .