SeisComP3 文档

seedlink

实时波形服务,实现 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 连接。会话期间,以下步骤依序执行:

  • 打开连接
  • 握手
  • 传输 SeedLink 包

握手

TCP/IP 连接建立后,服务器最初不会发送任何数据,而是等待客户端启动握手。握手期间,客户端发送 SeedLink 命令至服务器。这些命令用于设置连接模式、流选择器、请求包序号以及开始数据传输。SeedLink 命令由 0 个或几个参数组成,之间空格分隔,由<cr>(后跟可选的<lf>)结尾。SeedLink 命令可分为两类:行为命令(action commands)和修正命令(modifier commands)。行为命令执行诸如启动数据传输的功能;修正命令用于限定或编辑行为命令的功能。当服务器接到一个修正命令,返回OK应答,表示命令已接受。如果服务器无法识别命令或命令包含无效参数,返回ERROR。在未接收到前一命令的响应之前,客户端不会再发送任何命令。如果发生网络错误或超时,客户端将关闭连接并重启新的会话。数据传输将会在服务器接收到 DATAFETCHTIMEEND 等命令时启动。一旦数据传输开始,除了 INFO 命令外,不会再有命令发送至服务器。 下图显示了单站模式和多站模式下的握手流程:

握手:单站模式 vs 多站模式

数据传输

握手完成后,服务器开始传输数据包,每个包由 8 字节 SeedLink 头和 512 字节 Mini-SEED 记录组成。SeedLink 头是一个 ASCII 字符串,由SL和 6 位十六进制的包序号组成。每个台站有自属的序号。如果使用单个 TCP 通道请求多个台站,客户端将查看 Mini-SEED 头内容来判定台站名称(或保存每个台站的当前序号)。序号格式统一,作为命令 DATAFETCH 的参数,用于从特定的包中开始数据传输。因技术原因,会为每个节点重新分配序列号。使用同一序列号与备选服务器通信是不可能的。在特定节点中,单个台站的序列号是连续的,并以FFFFFF包围。这可用于客户端进行序列间距检测(数据丢失或软件错误)。

命令

HELLO

由两行消息组成的应答(均由<cr><lf>结尾)。第一行包含 SeedLink 版本号,第二行包含台站或数据中心描述。主要用于通过 telnet 测试 SeedLink 服务器。

CAT

显示台站列表。主要用于通过 telnet 测试 SeedLink 服务器。

BYE

关闭连接。主要用于通过 telnet 测试 SeedLink 服务器。

STATION station code [network code]

转成多台站模式,用于通过单个 TCP 通道传输多个台站的数据。

END

多台站模式握手结束。

SELECT [pattern]

如果不使用模式,所有的选择器均被取消。模式是一个正选择器,以匹配 Mini-SEED 流的传输。模式可以是一个负选择器(使用前导!)以阻止一些 Mini-SEED 流的传输。一个选择器只能用于一个单个的 SELECT 请求。一个 SeedLink 包在匹配任何正选择器而不匹配负选择器时将被发送至客户端。选择器的通用格式为 LLCCC.TLL是位置,CCC是通道,T是类型(事件、校正、小块、时间或长记录)。LL.TLLCCC.可以省略,表示任意。可以使用?替代LC

DATA [n [begin time]]

多台站模式时,设置当前台站为实时模式,(可选的)设置当前序列号为 n;单台站模式时,以实时模式从第 n 个包或下一个有效包中开始数据传输。如果使用 begin time,旧的包均被过滤掉。开始时间为 6 个由逗号分隔的十进制数:年、月、日、时、分、秒。

FETCH [n [begin time]]

工作同 DATA,但会设置台站为拨号模式。

TIME [begin time [end time]]

提取从 begin timeend time 的时间窗口。

INFO level

请求一个 INFO 包,该包包含内嵌 Mini-SEED 日志的 XML 数据。level 可为:ID、 CAPABILITIES、 STATIONS、 STREAMS、 GAPS、 CONNECTIONS、 ALL.

插件接口

要实现 SeedLink 插件,需要 SeisComP 分发中的两个文件:plugin.hplugin.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。参数:

  • station:台站 ID,必须匹配 seedlink.ini 中定义的一个台站
  • channel: 通道 ID,参考 streams.xml 中的input元素
  • pt: 数组中首个采样的时间
  • usec_correction:写入 SEED 数据头的校正时间
  • timing_quality:计时质量百分比(0-100)
  • dataptr:有符号 32 位采样数组
  • number_of_samples: 采样数组长度
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。参数:

  • station:台站 ID
  • dataptr:512 字节的 mini-SEED 包
  • packet_size:必须为 512
int send_log3(const char *station,
              const struct ptime *pt,
              const char *fmt,
              ...)

发送日志消息至 SeedLink(LOG 流)。参数:

  • station:台站 ID
  • pt: 消息的时间戳
  • fmt: 格式化字符串,用于 printf()

下面的配置文件用于 SeedLink 及插件。

  • plugins.ini - SeedLink 插件配置文件
  • seedlink.ini - SeedLink 主配置文件
  • filters.fir - SeedLink 递减 FIR 过滤器的系数
  • streams.xml - SeedLink 流配置文件

*.ini文件有些不明显的语法。它们包含 0 个或多个区段,每个区段的开头为在方括号中的区段名称。区段名称不可以包含空格和方括号。每个区段包含 0 个或多个条目 – 定义赋值。定义由关键字和名称组成,空格分隔,如station EDD。赋值由参数和值组成,等号分隔,如network = GE

seedlink.ini

seedlink.ini~/.seiscomp3/seedlink.cfgetc/seedlink.cfg 生成。

streams.xml

根元素stream,依序包含proc元素。proc元素包含一个或多个tree元素,tree元素依序包含inputnode元素。每个插件通道都有一个input元素;如果丢失,则忽略该通道,并显示下列信息:

Jun 24 12:56:28 st55 seedlink: EDD channel X ignored

配置

etc/defaults/seedlink.cfg
etc/seedlink.cfg
~/.seiscomp3/seedlink.cfg

q330 扩展

chain 扩展

绑定

配置

chain

Seedlink 服务器(TCP/IP)

dm24

Guralp DM24 (serial 插件)

dr24

Geotech DR24 (serial 插件)

edata

EarthData PS6-24 (serial 插件)

ewexport

Earthworm 输出服务器 (TCP/IP)

ewexport_pasv

Earthworm 被动输出服务器 (TCP/IP)

fs_mseed

Mini-SEED 文件插件

hrd24

Nanometrics HRD24 (serial 插件)

liss

LISS 服务器 (TCP/IP)

m24

Lennartz M24

minilogger

SEP064 USB Seismometer Interface

mk6

MK6

mseedscan

MseedScan

mws

MWS (serial 插件)

naqs

NAQS (TCP/IP)

nmxp

NAQS (TCP/IP) with nmxptool

nrts

NRTS (TCP/IP)

orb

Antelope ORB (TCP/IP)

q330

Quanterra Q330 (UDP/IP)

reftek

RefTek RTPD (TCP/IP)

sadc

SADC10/18/20/30 (serial 插件)

scream

SCREAM! 服务器 (TCP/UDP/IP) 插件

scream_ring

SCREAM! 服务器插件

wago

WAGO Controller (T-Elektronik)

wave24

Wave24

win

WIN server