实时波形服务,实现 SeedLink 协议
SeedLink 是一种实时数据采集协议,也是实现该协议的 客户端-服务器 软件。SeedLink 协议基于 TCP。 所有的连接均由客户端发起。在握手阶段,客户端可以使用简单 ASCII码命令订阅指定的台站和流。当握手完成,一个 SeedLink packets
流发送至客户端,该流包含一个 8 字节的 SeedLink 头(含序列号),接着是 512 字节的 Mini-SEED 记录。每一个台站的包总是按 FIFO 顺序传输。一个 SeedLink 服务的数据源可以是由 SeedLink 插件支持的任何东西 – 一段发送数据至 SeedLink 服务的小程序。插件受 SeedLink 服务控制,例如,如果插件崩溃或超时,该插件将自动重启。由插件提供的数据可以是 Mini-SEED 形式,或者附有时间信息的未加工的整数采样。在后面,SeedLink 服务使用 流处理器
创建目标数据流并生成 Mini-SEED 包。
下表列印了 SeedLink 插件支持的数采设备和数据采集系统。
数采/DAS | 插件工具 |
---|---|
SeedLink | GFZ |
LISS | Chad Trabant (IRIS) |
Quanterra Q330 | Jet Spring; ISTI; Chad Trabant; GFZ |
Quanterra Q380/Q680, Q4120 | GFZ |
Earth Data PS2400/PS6-24 | GFZ |
Lennartz M24 | Lennartz Electronic GmbH |
Geotech DR24 | GFZ |
Nanometrics HRD24 | GFZ; Recai Yalgin |
Guralp DM24 | GFZ |
SARA SADC10/18/20/30 | GFZ |
RefTek RTPD | GFZ |
NRTS | GFZ |
NAQS | Chad Trabant; Matteo Quintiliani |
SCREAM | Reinoud Sleeman (KNMI) |
Earthworm | Chad Trabant (IRIS) |
Antelope | Chad Trabant (IRIS) |
WIN | GFZ |
Lacrosse 2300 Weather Station | GFZ |
Reinhardt MWS5/MWS9 Weather Station | GFZ |
Generic MODBUS/TCP devices | GFZ |
一个 SeedLink 会话,开始于打开 TCP/IP 连接,结束于关闭 TCP/IP 连接。会话期间,以下步骤依序执行:
TCP/IP 连接建立后,服务器最初不会发送任何数据,而是等待客户端启动握手。握手期间,客户端发送 SeedLink 命令至服务器。这些命令用于设置连接模式、流选择器、请求包序号以及开始数据传输。SeedLink 命令由 0 个或几个参数组成,之间空格分隔,由<cr>
(后跟可选的<lf>
)结尾。SeedLink 命令可分为两类:行为命令(action commands)和修正命令(modifier commands)。行为命令执行诸如启动数据传输的功能;修正命令用于限定或编辑行为命令的功能。当服务器接到一个修正命令,返回OK
应答,表示命令已接受。如果服务器无法识别命令或命令包含无效参数,返回ERROR
。在未接收到前一命令的响应之前,客户端不会再发送任何命令。如果发生网络错误或超时,客户端将关闭连接并重启新的会话。数据传输将会在服务器接收到 DATA、FETCH、TIME 或 END 等命令时启动。一旦数据传输开始,除了 INFO 命令外,不会再有命令发送至服务器。
下图显示了单站模式和多站模式下的握手流程:
握手完成后,服务器开始传输数据包,每个包由 8 字节 SeedLink 头和 512 字节 Mini-SEED 记录组成。SeedLink 头是一个 ASCII 字符串,由SL
和 6 位十六进制的包序号组成。每个台站有自属的序号。如果使用单个 TCP 通道请求多个台站,客户端将查看 Mini-SEED 头内容来判定台站名称(或保存每个台站的当前序号)。序号格式统一,作为命令 DATA 或 FETCH 的参数,用于从特定的包中开始数据传输。因技术原因,会为每个节点重新分配序列号。使用同一序列号与备选服务器通信是不可能的。在特定节点中,单个台站的序列号是连续的,并以FFFFFF
包围。这可用于客户端进行序列间距
检测(数据丢失或软件错误)。
由两行消息组成的应答(均由<cr><lf>
结尾)。第一行包含 SeedLink 版本号,第二行包含台站或数据中心描述。主要用于通过 telnet 测试 SeedLink 服务器。
显示台站列表。主要用于通过 telnet 测试 SeedLink 服务器。
关闭连接。主要用于通过 telnet 测试 SeedLink 服务器。
转成多台站模式,用于通过单个 TCP 通道传输多个台站的数据。
多台站模式握手结束。
如果不使用模式,所有的选择器均被取消。模式是一个正选择器,以匹配 Mini-SEED 流的传输。模式可以是一个负选择器(使用前导!
)以阻止一些 Mini-SEED 流的传输。一个选择器只能用于一个单个的 SELECT 请求。一个 SeedLink 包在匹配任何正选择器而不匹配负选择器时将被发送至客户端。选择器的通用格式为 LLCCC.T
:LL
是位置,CCC
是通道,T
是类型(事件、校正、小块、时间或长记录)。LL
、.T
和LLCCC.
可以省略,表示任意。可以使用?
替代L
和C
。
多台站模式时,设置当前台站为实时模式,(可选的)设置当前序列号为 n;单台站模式时,以实时模式从第 n 个包或下一个有效包中开始数据传输。如果使用 begin time,旧的包均被过滤掉。开始时间为 6 个由逗号分隔的十进制数:年、月、日、时、分、秒。
工作同 DATA,但会设置台站为拨号模式。
提取从 begin time 至 end time 的时间窗口。
请求一个 INFO 包,该包包含内嵌 Mini-SEED 日志的 XML 数据。level 可为:ID、 CAPABILITIES、 STATIONS、 STREAMS、 GAPS、 CONNECTIONS、 ALL.
要实现 SeedLink 插件,需要 SeisComP 分发中的两个文件:plugin.h
和plugin.c
。这两个文件中定义了以下公共函数:
int send_raw3(const char *station,
const char *channel,
const struct ptime *pt,
int usec_correction,
int timing_quality,
const int32_t *dataptr,
int number_of_samples)
发送未加工包(32 位整数采样数组)至 SeedLink。参数:
input
元素int send_raw_depoch(const char *station,
const char *channel,
double depoch,
int usec_correction,
int timing_quality,
const int32_t dataptr,
int number_of_samples)
同 send_raw3() 除了时间根据 1970-01-01 计量。
int send flush3(const char *station,
const char *channel)
刷所有关联通道的 Mini-SEED 数据流。所有缓冲区数据将被发出,根据需要创建未填充
的 Mini-SEED 记录。
int send_mseed(const char *station,
const void *dataptr,
int packet_size)
发送一个 Mini-SEED 包至 SeedLink。参数:
int send_log3(const char *station,
const struct ptime *pt,
const char *fmt,
...)
发送日志消息至 SeedLink(LOG 流)。参数:
下面的配置文件用于 SeedLink 及插件。
*.ini
文件有些不明显的语法。它们包含 0 个或多个区段,每个区段的开头为在方括号中的区段名称。区段名称不可以包含空格和方括号。每个区段包含 0 个或多个条目 – 定义 和 赋值。定义由关键字和名称组成,空格分隔,如station EDD
。赋值由参数和值组成,等号分隔,如network = GE
。
seedlink.ini
由 ~/.seiscomp3/seedlink.cfg
和 etc/seedlink.cfg
生成。
根元素stream
,依序包含proc
元素。proc
元素包含一个或多个tree
元素,tree
元素依序包含input
和node
元素。每个插件通道都有一个input
元素;如果丢失,则忽略该通道,并显示下列信息:
Jun 24 12:56:28 st55 seedlink: EDD channel X ignored
etc/defaults/seedlink.cfg
etc/seedlink.cfg
~/.seiscomp3/seedlink.cfg
Seedlink 服务器(TCP/IP)
Guralp DM24 (serial 插件)
Geotech DR24 (serial 插件)
EarthData PS6-24 (serial 插件)
Earthworm 输出服务器 (TCP/IP)
Earthworm 被动输出服务器 (TCP/IP)
Mini-SEED 文件插件
Nanometrics HRD24 (serial 插件)
LISS 服务器 (TCP/IP)
Lennartz M24
SEP064 USB Seismometer Interface
MK6
MseedScan
MWS (serial 插件)
NAQS (TCP/IP)
NAQS (TCP/IP) with nmxptool
NRTS (TCP/IP)
Antelope ORB (TCP/IP)
Quanterra Q330 (UDP/IP)
RefTek RTPD (TCP/IP)
SADC10/18/20/30 (serial 插件)
SCREAM! 服务器 (TCP/UDP/IP) 插件
SCREAM! 服务器插件
WAGO Controller (T-Elektronik)
Wave24
WIN server