Приветствую, уважаемые Хабравчане! Многие из нас живут в сейсмически нестабильных районах, и, полагаю, землетрясений не любит никто. Как технарю, да и вообще, данная тематика мне была всегда интересна: как и где землетрясения зарождаются, как определяют эпицентр и магнитуду, как производится мониторинг и т. д. И вот так получилось, что мне понадобилось сделать некую пилотную систему для мониторинга в реальном времени показателей нескольких сейсмодатчиков, расположенных достаточно далеко друг от друга и от центра, где эти данные и сохраняются, и обрабатываются. При возможности, хотелось также сделать WWW страничку, где можно было бы в реальном времени посмотреть показатели с датчиков. Задача оказалась достаточно нетривиальной, и после того, как был достигнут определённый успех в данном направлении, я решил, что было бы неплохо сделать обзорную статью/мануал по данному вопросу, что в дальнейшем может сильно облегчить кому-то жизнь, особенно учитывая, что информации в Рунете по данному вопросу я не нашёл вообще. А если так взять, в общем-то ни одного HowTo даже в англоязычном интернете я не смог найти, хотя общей и сильно разрозненной информации порядочно. Также я не знал ни одного человека (да их и не так много вообще оказывается), который бы мог направить в нужном направлении, потому до всего пришлось доходить самому, копая Гугл, мануалы и софт с железом.
Итак, эта статья — как настроить сейсмографы фирмы Guralp, снять с них данные и отрисовать в реальном режиме времени на WWW страничке показатели сейсмодатчиков. Также описывается, какой софт используется, где его взять и как настроить.
Сейсмометры:
В моем распоряжении находилось 2 сейсмометра немецкого производства — Guralp CMG-6TD. Данные девайсы представляют собой связку набора датчиков (гироскопов, массы и температуры), ADC, контроллера с определённым объёмом Flash памяти и упакованных в герметичный круглый корпус. С каждого датчика можно снимать данные как в реальном времени (через COM-порт или внутренний TCP сервер, который данный COM-порт делает удалённо доступным), так и просто зарыть его где-то поглубже, а потом скинуть данные на диск через FireWire со внутренней флэшки. Сейсмометры должны определять движение по 3 направлениям: 2 горизонтальным (E,N) и вертикальному (Z). Соответственно при установке на рабочую поверхность, эти датчики центрируются, а также выставляются по компасу. Время часов датчиков синхронизируется по GPS, который подключается непосредственно к самому датчику 15 метровым кабелем. Если GPS подключить нет возможности, то через терминал возможна корректировка встроенного RTC.

А это один из датчиков, установленный на специальном постаменте в подвале сейсмического инстутута в регионе, недалеко от Душанбе

Конечно, аппаратура очень чувствительная и устанавливать ее надо бы в более глубоком месте. Рядом с этим институтом (приблизительно в километре), в соседней горе есть специальная штольня, которая идет в глубь горы на 200 метров. Но это дело будущего.

Схема подключения системы:
Поскольку датчики необходимо располагать достаточно далеко друг от друга, была придумана и создана система связи для передачи данных от датчика, до какого либо узла с интернет подключением. В нашем случае был выбран WiFi, а также соответствующее железо, необходимое для связи на расстоянии в десятки километров.
Схема подключения одного датчика получилась следующая:
Датчик → (ethernet) → WiFi client box → (wifi link) → WiFi AccessPoint → Internet → Central server
Съём данных с датчиков:
Для «забора» данных с датчиков используется фирменная программа «SCREAM» — название программы очень в точку, поскольку, как оказалось, человеку, который с данной аппаратурой не работал ранее, многие вещи даже стандартной настройки довольно неочевидны. Несмотря на то, что производитель снабжает и программу, и аппаратуру довольно неплохим и объемным руководством, на момент, когда добираешься до эксплуатации системы, оказывается что за кадром осталось достаточно много, и вынужден доходить путем очень научного тыка. Вкратце — временами, при разборках с программой, ее очередным зависанием и т. д. — громкая, исконно русская речь была совсем нередким явлением.
SCREAM:
Универсальная программа от производителя для работы со всей линейкой сейсмологического оборудования Guralp. Предназначена для контроля оборудования приема и сохранения данных с сейсмометров в реальном времени. Скачать её можно бесплатно с сайта производителя, правда, ссылка на раздел закачек на сайте отсутствует, и её присылают после прохождения простой регистрации. Есть в 2-х вариантах — под Linux и под Win. Код закрыт, распространяются только бинарники. Из всего зоопарка (в хорошем смысле) дистрибутивов Линукс, я уже лет 15 в работе использую только один — это Debian Linux, соответственно, под ним я и настраивал работу данного программного продукта.
Debian Linux, 64 bit: scream имеется только в виде tar.gz или .rpm пакета (производитель рекомендует CentOS) — и только 32 bit сборка. Для того, чтобы запустить его под 64 битной инсталляцией, необходимо установить пакет ia32libs, который добавит поддержку 32 битных бинарников в 64 битной системе. После этого можно распаковать пакет scream в директорию, где вы планируете его использовать. Запускать его необходимо через прилагающийся .sh скрипт, поскольку он использует собственные библиотеки, и скрипт прописывает к ним путь.
SCREAM программа интерактивная, с GTK интерфейсом, поэтому запускать её нужно из Х-ов, либо под виртуальным Х сервером Xvfb — как это сделал я, если установка X на сервере не нужна.
SCREAM достаточно требователен к процессорным ресурсам, и я много времени и нервов потратил разбираясь с причинами его зависания, которые сильно уменьшились при переносе инсталляции с Dual-Core лаптопа Samsung на двух-ядерный XEON Dell. Хотя, кроме процессора на машинах, все остальное было почти одинаковым (2Г памяти, 250Г HDD), но ситуация изменилась очень чувствительно. Поэтому можно посоветовать, не и��пользуйте машину со слабым процессором в качестве сервера для SCREAM. Хотя кто знает, может он патологически Самсунг не переваривает?
Связываем SCREAM и Guralp CMG-6TD:
Чтобы получить данные с сейсмометра, нужно связать Guralp со SCREAM одним из доступных способов: Через COM порт или посредством TCP-IP. Я опишу процедуру связи только по TCP-IP, для краткости. В Guralp используется TCP-serial сервер производства Lantronix, и к нему имеется Telnet и WWW интерфейс для настройки параметров. По умолчанию Guralp (только при включении) пытается получить IP адрес по DHCP. Детально, как присвоить адрес и попасть на WWW интерфейс описывать не буду, поскольку это детально описано в руководстве. Сосредоточимся на тонкостях и настройке. Заходить на WWW интерфейс нужно исключительно через Internet Explorer, поскольку криво написанные Javascript скрипты и другая начинка интерфейса не работают ни в каком другом браузере, выдавая абсолютно неадекватное содержимое полей ввода, таких как IP адрес и т. д. Поскольку я Windows использую очень редко, то, что под Internet Exploiter можно нормально все настроить — понимание пришло не сразу. Другая тонкость: странички настроек кешируются, и при следующем входе, после применения настроек, показывают старую информацию, обновление не помогает. Поэтому эксплорер нужно закрывать, запускать заново (ну или сбрасывать кэш, что дольше), если нужно играться с настройками.
Поскольку по DHCP устройство пытается получить адрес только после включения, я настроил статический IP адрес.
Теперь, что нигде не описано: Меню Serial Connection
Поскольку данные забираются с устройства, даже если через TCP-IP все равно используя TCP-Serial сервер, тут у нас есть настройка BaudRate — По умолчанию она (обычно) 19200 — но при использовании более высокого SampleRate для съема данных с Guralp может быть смысл её увеличить. Просто так это делать нельзя, так как данная настройка должна соответствовать настройке выходного ком-порта устройства, которое конфигурируется из другого меню, другим способом. Если они не будут соответствовать друг-другу — WWW интерфейс перестанет функционировать, и будет необходимо восстановить работу, используя Telnet, порт 9999, и там вернуть скорость в соответствии со скоростью внутреннего ком-порта устройства.
Меню Connecion: Выбираете тип соединения. В руководстве это описано очень скудно, и только в общих чертах.
Выбираем протокол (TCP) и если локальный порт установлен в 10001, удалённый порт в 1567 и Remote Host в 0.0.0.0, то все нормально — подключиться можно с любого IP (в принципе это настройки по умолчанию)
Scream: Запускаем, затем правой кнопкой мыши щелкаем на Network → Configure, затем в открывшемся окне выбираем вкладку My Client и опять правой кнопкой щелкаем на пустое поле списка сереров → Add TCP Server → Добавляем IP нашего устройства:10001. Заметьте, что порт 10001 используется на самом Guralp. Нажимаем Ок, и выбрав только что добавленный сервер, нажимаем Ctrl+C (Connect).
Если все нормально, в течение минуты наше устройство должно появиться под Network, в левой панели. При выборе устройства, справа, мы увидим список каналов данных — это данные от датчиков, которые можно просмотреть в виде волновых графиков. Если мы увидели датчик, то значит первая часть настройки выполнена, и можно немного поиграться, посмотреть, как сейсмометр реагирует на легкие толчки пальцами по коробке, например.
На данном этапе первая часть эпопеи закончена. Мы имеем установленный софт SCREAM, и датчик, который с ним, собственно, связан, и отдает данные. Теперь с этими данными нужно что-то сделать. SCREAM умеет не только принимать данные с сейсмометров, но и передавать далее по TCP-IP. Главное, чтобы клиент поддерживал SCREAM протокол.

Потратив какое-то время в поисках открытого софта в интернете для обработки сейсмических данных, я остановился на системе «Earthworm» (Земляной червь), поскольку код системы открыт, и есть сотня институтов по всему миру, которые используют эту систему для сбора, автоматизированного анализа и представления сейсмических данных. Обратной стороной медали является то, что система довольно старая, слабо поддерживается, и многие компоненты откровенно кривые и падучие. Но поскольку бесплатной альтернативы не нашёл, пришлось разбираться с ней. Документация, исходный код и бинарники можно найти и скачать отсюда: folkworm.ceri.memphis.edu/ew-doc
В наличие есть 64 битная сборка, но эксплуатация показала что 32 битная версия гораздо менее предрасположена к падениям. Информация по установке системы крайне разрознена, устарелая и рассчитана, скорее, на человека уже знакомого с системой, поэтому разбираться, как её запускать пришлось довольно долго, целая суббота с утра до ночи ушла от момента установки до запуска отрисовки графиков.
EARTHWORM — «И еще земляным червяком!» ((с) шакал из Маугли)
Система построена по принципу многокомпонентости, ядром является бинарник «startstop», который создает необходимые регионы Shared Memory для обмена данными и производит запуск и мониторинг других бинарников. Но, я организовал запуск компонентов отдельно, поскольку в них плохо обрабатываются исключения (в некоторых проблема связи с сервером приводит к аварийному выходу). Соответственно, запускать их необходимо в цикле.
Компоненты:
Поскольку моей базовой целью является не анализ, а только отрисовка данных, я буду использовать только соответствующие этой задаче компоненты:
scream2ew: передача данных от сервера SCREAM во внутренний буфер EARTHWORM
wave_serverV: забор данных из внутреннего буфера, хранение на диске и отдача клиентам по сети
heli_ewII: отрисовка данных на манер helicorder (сейсмограф), и представлен в виде простой WWW страницы. Данные забираются из wave_server
Конфигурационные файлы хранятся в директории run/params и имеют вид daemon_name.d Все использованные мною конфигурационные файлы, можно скачать со странички проекта, которая дана в конце данного обзора. Это может быть очень полезно, поскольку описание параметров, часто, крайне недостаточно.
Итак, устанавливаем Earthworm:
Создаем пользователя earthworm:
Распаковываем бинарную сборку — earthworm_7.4
создаем директории
перемещаем все файлы из директории earthworm_7.4/params в run/params
редактируем earthworm_7.4/environment/ew_linux.bash
для простоты в секции # Or set your own values directly
добавим
Затем создаем симлинку файла параметров:
ln -s /home/earthworm/earthworm_7.4/envoironment/earthworm.d /home/earthworm/run/params/earthworm.d
Это нужно потому, что разные компоненты ищут данный файл в разных директориях.
При запуске компоненты могут не запуститься с ошибкой «невозможно определить свой ID модуля» — модули и их ID прописаны в файле earthworm.d — просто посмотрите в конфигурации модуля как он себя называет (например MOD_SCREAM2EW) и добавьте его в список модулей со следующим ID — там все интуитивно.
После этого нужно создать скрипты запуска:
#param
#startstop.sh
#scream2ew.sh
и еще wave_severV.sh и heli_ewII.sh — для них просто замените название программы в переменной DAEMON скрипта scream2ew.sh. Скрипты сделаны так, что цикл прерывается при обнаружении в /tmp файла имя_скрипта.stop и, соответственно, они последовательно запускаются из старт скрипта из init.d
Все скрипты можно скачать на страничке проекта, и приводить их здесь нет никакого смысла.
Теперь нужно уделить внимание конфигурационным файлам:
startstop — startstop_unix.d
Строчка Process «name» и Class/Priority указывает, какой из бинарников запускать. Мы запускаем только статус. Остальное будет запущено извне, другими скриптами.
Scream2ew — scream2ew.d
Тут в chaninfo необходимо помнить, что осуществляется импорт данных из внешней системы, и данные устройства DUSH0 и потока 6817Z0 импортируются в earthworm как TJ DYU – BHZ 1
Называния каналов TJ DYU и т. д. Произвольные, но нужно соблюдать количество символов каждого компонента
wave_serverV — wave_serverV.d
Тут мы создаем так называемые танки (цистерны) — там хранятся данные, принятые с устройств. Они же могут быть запрошены по сети. Обратите внимание, что созданные каналы DY BHZ TJ — как раз идут в отдельные танки. Также параметр MaxMsgSize 4096 обязателен для работы со SCREAM. Необходимо добавить что wave_serverV не идеален для хранения данных, и в случае если блоки данных с датчика приходят в перемешку, т.е. не соблюдается их очередность по таймстампу, то он данные блоки отвергает. Есть альтернативная реализация wave_server на JAVA — Winston WaveServer — университета Аляски, ссылку на закачку удалось найти только в архивах почтовой переписки пользователей Earthworm, потому привожу ее в конце, в ссылках. Он реальзует некоторые (но не все) фичи и баги оригинального и хранит данные в MySQL базе.
heli_ewII — heli_ewII.d
Здесь указывается, какие потоки данных запрашивать у wave_serverV и как их отрисовывать. Все, достаточно, интуитивно. Параметр количества часов назад не работает, поэтому график при запуске будет пустой, и только через некоторое время (до 15 минут) начнут появляться данные. При запуске данный модуль округляет время и часто хочет продолжить со следующего 15-минутного интервала. Это видно в лог-выводе.
Теперь можно в ручном режиме запустить скрипты в следующей последовательности:
Для целей отладки делать это лучше в разных терминалах, чтобы видеть, какие ошибки выдаются и работают ли они вообще.
Чтобы у wave_server появилось достаточно данных, может пройти пару минут, только потом heli_ewII эти данные обнаружит и сможет их отрисовать.

Конечно, в мире есть большое количество и другого сейсмологического оборудования и программного обеспечения, например Nanometrics, канадского производства, делает очень хорошие, законченные системы, с подключением к спутниковому терминалу. Это означает, что в центре устанавливается HUB VSAT и в отдаленных горных районах, устанавливаются VSAT размером поменее, которые периодически отправляют данные со своих датчиков. Но это уже тема другого обзора.
На этом я хотел бы завершить данную тему. Тема, конечно, очень большая, и предстоит еще разобраться с вопросами автоматизированного анализа данных, вычисления эпицентра и магнитуды толчков. Earthworm содержит достаточно мощный инструментарий для всего этого.
Страничка проекта:
http://seismo.eastera.tj
Конфигурационные файлы и скрипты:
http://seismo.eastera.tj/downloads
Живой helicorder проекта:
http://seismo.eastera.tj/helicorder
Earthworm:
http://folkworm.ceri.memphis.edu/ew-doc/
Альтеративная реализация wave_server на JAVA: http://www.avo.alaska.edu/Software/winston/W_Manual_SR.html
Helicorder страничка Maryland:
http://www.ceri.memphis.edu/seismic/stations/index.html
Итак, эта статья — как настроить сейсмографы фирмы Guralp, снять с них данные и отрисовать в реальном режиме времени на WWW страничке показатели сейсмодатчиков. Также описывается, какой софт используется, где его взять и как настроить.
Сейсмометры:
В моем распоряжении находилось 2 сейсмометра немецкого производства — Guralp CMG-6TD. Данные девайсы представляют собой связку набора датчиков (гироскопов, массы и температуры), ADC, контроллера с определённым объёмом Flash памяти и упакованных в герметичный круглый корпус. С каждого датчика можно снимать данные как в реальном времени (через COM-порт или внутренний TCP сервер, который данный COM-порт делает удалённо доступным), так и просто зарыть его где-то поглубже, а потом скинуть данные на диск через FireWire со внутренней флэшки. Сейсмометры должны определять движение по 3 направлениям: 2 горизонтальным (E,N) и вертикальному (Z). Соответственно при установке на рабочую поверхность, эти датчики центрируются, а также выставляются по компасу. Время часов датчиков синхронизируется по GPS, который подключается непосредственно к самому датчику 15 метровым кабелем. Если GPS подключить нет возможности, то через терминал возможна корректировка встроенного RTC.

А это один из датчиков, установленный на специальном постаменте в подвале сейсмического инстутута в регионе, недалеко от Душанбе

Конечно, аппаратура очень чувствительная и устанавливать ее надо бы в более глубоком месте. Рядом с этим институтом (приблизительно в километре), в соседней горе есть специальная штольня, которая идет в глубь горы на 200 метров. Но это дело будущего.

Схема подключения системы:
Поскольку датчики необходимо располагать достаточно далеко друг от друга, была придумана и создана система связи для передачи данных от датчика, до какого либо узла с интернет подключением. В нашем случае был выбран WiFi, а также соответствующее железо, необходимое для связи на расстоянии в десятки километров.
Схема подключения одного датчика получилась следующая:
Датчик → (ethernet) → WiFi client box → (wifi link) → WiFi AccessPoint → Internet → Central server
Съём данных с датчиков:
Для «забора» данных с датчиков используется фирменная программа «SCREAM» — название программы очень в точку, поскольку, как оказалось, человеку, который с данной аппаратурой не работал ранее, многие вещи даже стандартной настройки довольно неочевидны. Несмотря на то, что производитель снабжает и программу, и аппаратуру довольно неплохим и объемным руководством, на момент, когда добираешься до эксплуатации системы, оказывается что за кадром осталось достаточно много, и вынужден доходить путем очень научного тыка. Вкратце — временами, при разборках с программой, ее очередным зависанием и т. д. — громкая, исконно русская речь была совсем нередким явлением.
SCREAM:
Универсальная программа от производителя для работы со всей линейкой сейсмологического оборудования Guralp. Предназначена для контроля оборудования приема и сохранения данных с сейсмометров в реальном времени. Скачать её можно бесплатно с сайта производителя, правда, ссылка на раздел закачек на сайте отсутствует, и её присылают после прохождения простой регистрации. Есть в 2-х вариантах — под Linux и под Win. Код закрыт, распространяются только бинарники. Из всего зоопарка (в хорошем смысле) дистрибутивов Линукс, я уже лет 15 в работе использую только один — это Debian Linux, соответственно, под ним я и настраивал работу данного программного продукта.
Debian Linux, 64 bit: scream имеется только в виде tar.gz или .rpm пакета (производитель рекомендует CentOS) — и только 32 bit сборка. Для того, чтобы запустить его под 64 битной инсталляцией, необходимо установить пакет ia32libs, который добавит поддержку 32 битных бинарников в 64 битной системе. После этого можно распаковать пакет scream в директорию, где вы планируете его использовать. Запускать его необходимо через прилагающийся .sh скрипт, поскольку он использует собственные библиотеки, и скрипт прописывает к ним путь.
SCREAM программа интерактивная, с GTK интерфейсом, поэтому запускать её нужно из Х-ов, либо под виртуальным Х сервером Xvfb — как это сделал я, если установка X на сервере не нужна.
SCREAM достаточно требователен к процессорным ресурсам, и я много времени и нервов потратил разбираясь с причинами его зависания, которые сильно уменьшились при переносе инсталляции с Dual-Core лаптопа Samsung на двух-ядерный XEON Dell. Хотя, кроме процессора на машинах, все остальное было почти одинаковым (2Г памяти, 250Г HDD), но ситуация изменилась очень чувствительно. Поэтому можно посоветовать, не и��пользуйте машину со слабым процессором в качестве сервера для SCREAM. Хотя кто знает, может он патологически Самсунг не переваривает?
Связываем SCREAM и Guralp CMG-6TD:
Чтобы получить данные с сейсмометра, нужно связать Guralp со SCREAM одним из доступных способов: Через COM порт или посредством TCP-IP. Я опишу процедуру связи только по TCP-IP, для краткости. В Guralp используется TCP-serial сервер производства Lantronix, и к нему имеется Telnet и WWW интерфейс для настройки параметров. По умолчанию Guralp (только при включении) пытается получить IP адрес по DHCP. Детально, как присвоить адрес и попасть на WWW интерфейс описывать не буду, поскольку это детально описано в руководстве. Сосредоточимся на тонкостях и настройке. Заходить на WWW интерфейс нужно исключительно через Internet Explorer, поскольку криво написанные Javascript скрипты и другая начинка интерфейса не работают ни в каком другом браузере, выдавая абсолютно неадекватное содержимое полей ввода, таких как IP адрес и т. д. Поскольку я Windows использую очень редко, то, что под Internet Exploiter можно нормально все настроить — понимание пришло не сразу. Другая тонкость: странички настроек кешируются, и при следующем входе, после применения настроек, показывают старую информацию, обновление не помогает. Поэтому эксплорер нужно закрывать, запускать заново (ну или сбрасывать кэш, что дольше), если нужно играться с настройками.
Поскольку по DHCP устройство пытается получить адрес только после включения, я настроил статический IP адрес.
Теперь, что нигде не описано: Меню Serial Connection
Поскольку данные забираются с устройства, даже если через TCP-IP все равно используя TCP-Serial сервер, тут у нас есть настройка BaudRate — По умолчанию она (обычно) 19200 — но при использовании более высокого SampleRate для съема данных с Guralp может быть смысл её увеличить. Просто так это делать нельзя, так как данная настройка должна соответствовать настройке выходного ком-порта устройства, которое конфигурируется из другого меню, другим способом. Если они не будут соответствовать друг-другу — WWW интерфейс перестанет функционировать, и будет необходимо восстановить работу, используя Telnet, порт 9999, и там вернуть скорость в соответствии со скоростью внутреннего ком-порта устройства.
Меню Connecion: Выбираете тип соединения. В руководстве это описано очень скудно, и только в общих чертах.
Выбираем протокол (TCP) и если локальный порт установлен в 10001, удалённый порт в 1567 и Remote Host в 0.0.0.0, то все нормально — подключиться можно с любого IP (в принципе это настройки по умолчанию)
Scream: Запускаем, затем правой кнопкой мыши щелкаем на Network → Configure, затем в открывшемся окне выбираем вкладку My Client и опять правой кнопкой щелкаем на пустое поле списка сереров → Add TCP Server → Добавляем IP нашего устройства:10001. Заметьте, что порт 10001 используется на самом Guralp. Нажимаем Ок, и выбрав только что добавленный сервер, нажимаем Ctrl+C (Connect).
Если все нормально, в течение минуты наше устройство должно появиться под Network, в левой панели. При выборе устройства, справа, мы увидим список каналов данных — это данные от датчиков, которые можно просмотреть в виде волновых графиков. Если мы увидели датчик, то значит первая часть настройки выполнена, и можно немного поиграться, посмотреть, как сейсмометр реагирует на легкие толчки пальцами по коробке, например.
На данном этапе первая часть эпопеи закончена. Мы имеем установленный софт SCREAM, и датчик, который с ним, собственно, связан, и отдает данные. Теперь с этими данными нужно что-то сделать. SCREAM умеет не только принимать данные с сейсмометров, но и передавать далее по TCP-IP. Главное, чтобы клиент поддерживал SCREAM протокол.

Потратив какое-то время в поисках открытого софта в интернете для обработки сейсмических данных, я остановился на системе «Earthworm» (Земляной червь), поскольку код системы открыт, и есть сотня институтов по всему миру, которые используют эту систему для сбора, автоматизированного анализа и представления сейсмических данных. Обратной стороной медали является то, что система довольно старая, слабо поддерживается, и многие компоненты откровенно кривые и падучие. Но поскольку бесплатной альтернативы не нашёл, пришлось разбираться с ней. Документация, исходный код и бинарники можно найти и скачать отсюда: folkworm.ceri.memphis.edu/ew-doc
В наличие есть 64 битная сборка, но эксплуатация показала что 32 битная версия гораздо менее предрасположена к падениям. Информация по установке системы крайне разрознена, устарелая и рассчитана, скорее, на человека уже знакомого с системой, поэтому разбираться, как её запускать пришлось довольно долго, целая суббота с утра до ночи ушла от момента установки до запуска отрисовки графиков.
EARTHWORM — «И еще земляным червяком!» ((с) шакал из Маугли)
Система построена по принципу многокомпонентости, ядром является бинарник «startstop», который создает необходимые регионы Shared Memory для обмена данными и производит запуск и мониторинг других бинарников. Но, я организовал запуск компонентов отдельно, поскольку в них плохо обрабатываются исключения (в некоторых проблема связи с сервером приводит к аварийному выходу). Соответственно, запускать их необходимо в цикле.
Компоненты:
Поскольку моей базовой целью является не анализ, а только отрисовка данных, я буду использовать только соответствующие этой задаче компоненты:
scream2ew: передача данных от сервера SCREAM во внутренний буфер EARTHWORM
wave_serverV: забор данных из внутреннего буфера, хранение на диске и отдача клиентам по сети
heli_ewII: отрисовка данных на манер helicorder (сейсмограф), и представлен в виде простой WWW страницы. Данные забираются из wave_server
Конфигурационные файлы хранятся в директории run/params и имеют вид daemon_name.d Все использованные мною конфигурационные файлы, можно скачать со странички проекта, которая дана в конце данного обзора. Это может быть очень полезно, поскольку описание параметров, часто, крайне недостаточно.
Итак, устанавливаем Earthworm:
Создаем пользователя earthworm:
adduser earthworm su - earthworm
Распаковываем бинарную сборку — earthworm_7.4
создаем директории
run run/datafiles run/gifs run/params run/scripts
перемещаем все файлы из директории earthworm_7.4/params в run/params
редактируем earthworm_7.4/environment/ew_linux.bash
для простоты в секции # Or set your own values directly
добавим
export EW_HOME=/home/earthworm/ export EW_VERSION=earthworm_7.4 export EW_RUN_DIR=$EW_HOME/run
Затем создаем симлинку файла параметров:
ln -s /home/earthworm/earthworm_7.4/envoironment/earthworm.d /home/earthworm/run/params/earthworm.d
Это нужно потому, что разные компоненты ищут данный файл в разных директориях.
При запуске компоненты могут не запуститься с ошибкой «невозможно определить свой ID модуля» — модули и их ID прописаны в файле earthworm.d — просто посмотрите в конфигурации модуля как он себя называет (например MOD_SCREAM2EW) и добавьте его в список модулей со следующим ID — там все интуитивно.
После этого нужно создать скрипты запуска:
#param
#!/bin/bash HOME=/home/earthworm BIN=$HOME/earthworm_7.4/bin EWE=$HOME/earthworm_7.4/environment PARAM=$HOME/run/params SLEEPTIME=2 . $EWE/ew_linux.bash ulimit -c unlimited
#startstop.sh
#!/bin/bash
DIR=`dirname $0`
ME=`basename $0`
ST=/tmp/$ME.stop
EWENV=/home/earthworm/earthworm_7.4/environment
DAEMON=startstop
. $DIR/param
rm $ST
while true; do
echo Starting $DAEMON . create $st to break cycle, and kill the daemon $DAEMON
$BIN/$DAEMON
if test -f "$ST"; then
echo $ME exitting...
rm $ST
exit 0
fi
echo Restarting in $SLEEPTIME seconds...
sleep $SLEEPTIME
done
#scream2ew.sh
#!/bin/bash
DIR=`dirname $0`
ME=`basename $0`
ST=/tmp/$ME.stop
EWENV=/home/earthworm/earthworm_7.4/environment
DAEMON=scream2ew
. $DIR/param
rm $ST
while true; do
echo Starting $DAEMON . create $st to break cycle, and kill the daemon $DAEMON
$BIN/$DAEMON $PARAM/$DAEMON.d
if test -f "$ST"; then
echo $ME exitting...
rm $ST
exit 0
fi
echo Restarting in $SLEEPTIME seconds...
sleep $SLEEPTIME
done
и еще wave_severV.sh и heli_ewII.sh — для них просто замените название программы в переменной DAEMON скрипта scream2ew.sh. Скрипты сделаны так, что цикл прерывается при обнаружении в /tmp файла имя_скрипта.stop и, соответственно, они последовательно запускаются из старт скрипта из init.d
Все скрипты можно скачать на страничке проекта, и приводить их здесь нет никакого смысла.
Теперь нужно уделить внимание конфигурационным файлам:
startstop — startstop_unix.d
nRing 3 Ring WAVE_RING 1024 Ring PICK_RING 1024 Ring HYPO_RING 1024 MyModuleId MOD_STARTSTOP # Module Id for this program HeartbeatInt 50 # Heartbeat interval in seconds MyClassName OTHER # For this program MyPriority 0 # For this program LogFile 1 # 1=write a log file to disk, 0=don't KillDelay 10 # seconds to wait before killing modules on HardKillDelay 5 # number of seconds to wait on hard shutdown Process "statmgr statmgr.d" Class/Priority OTHER 0
Строчка Process «name» и Class/Priority указывает, какой из бинарников запускать. Мы запускаем только статус. Остальное будет запущено извне, другими скриптами.
Scream2ew — scream2ew.d
MyModuleId MOD_SCREAM2EW # module id for this instance of scream2ew. RingName WAVE_RING # shared memory ring for input/output LogFile 1 # 0 to turn off disk log file; if 1, do log. Verbose 1 # 1=> log every packet. 0=> don't HeartBeatInterval 30 # seconds between heartbeats PortNumber 1567 Server 192.168.88.1 # If specified name or IP-number this module ChanInfo "DUSH0 6817Z0 TJ DYU -- BHZ 1" ChanInfo "DUSH0 6817N0 TJ DYU -- BHN 2" ChanInfo "DUSH0 6817E0 TJ DYU -- BHE 3"
Тут в chaninfo необходимо помнить, что осуществляется импорт данных из внешней системы, и данные устройства DUSH0 и потока 6817Z0 импортируются в earthworm как TJ DYU – BHZ 1
Называния каналов TJ DYU и т. д. Произвольные, но нужно соблюдать количество символов каждого компонента
wave_serverV — wave_serverV.d
MyModuleId MOD_WAVESERVERV # wave_server's module id
RingName WAVE_RING # name of transport ring to get data from
LogFile 1 # 1=write log file to disk; 0=don't
# 2=write to module log but not stderr/stdout
HeartBeatInt 15 # seconds between heartbeats to statmgr
ServerIPAdr 192.168.88.1 # address of machine running wave_server: geops.geophys
ServerPort 16022 # port for receiving requests & sending waves
GapThresh 1.5 # threshhold for gap declaration.
SocketTimeout 11000 # Timeout length in MILLISECONDS for socket calls
ClientTimeout 60000 # Optional. Not recommended feature but it does work.
IndexUpdate 10
TankStructUpdate 1
TankStructFile /home/earthworm/run/datafiles/p1000-1.str
# SCNL Record Logo File Size Index Size File Name New.......
# names size (TYPE_TRACEBUF2 only) (megabytes) (max breaks) (full path) Tank......
Tank DYU BHZ TJ -- 4096 INST_UNKNOWN MOD_WILDCARD 1 10000 /home/earthworm/run/datafiles/p1001.tnk
Tank DYU BHN TJ -- 4096 INST_UNKNOWN MOD_WILDCARD 1 10000 /home/earthworm/run/datafiles/p1002.tnk
Tank DYU BHE TJ -- 4096 INST_UNKNOWN MOD_WILDCARD 1 10000 /home/earthworm/run/datafiles/p1003.tnk
Tank DYU BHM TJ -- 4096 INST_UNKNOWN MOD_WILDCARD 1 10000 /home/earthworm/run/datafiles/p1004.tnk
RedundantTankStructFiles 1
RedundantIndexFiles 1
TankStructFile2 /home/earthworm/run/datafiles/p1000-2.str
InputQueueLen 4000
MaxMsgSize 4096
SocketDebug 0
ReCreateBadTanks 1
QueueReportInterval 5
Тут мы создаем так называемые танки (цистерны) — там хранятся данные, принятые с устройств. Они же могут быть запрошены по сети. Обратите внимание, что созданные каналы DY BHZ TJ — как раз идут в отдельные танки. Также параметр MaxMsgSize 4096 обязателен для работы со SCREAM. Необходимо добавить что wave_serverV не идеален для хранения данных, и в случае если блоки данных с датчика приходят в перемешку, т.е. не соблюдается их очередность по таймстампу, то он данные блоки отвергает. Есть альтернативная реализация wave_server на JAVA — Winston WaveServer — университета Аляски, ссылку на закачку удалось найти только в архивах почтовой переписки пользователей Earthworm, потому привожу ее в конце, в ссылках. Он реальзует некоторые (но не все) фичи и баги оригинального и хранит данные в MySQL базе.
heli_ewII — heli_ewII.d
LogSwitch 1 MyModuleId MOD_HELI_EWII RingName WAVE_RING HeartBeatInt<-->10 wsTimeout 30 # time limit (secs) for any one interaction with a wave server. WaveServer 192.168.88.1 16022 "Dushanbe" GifDir /home/earthworm/run/gifs # S C N L 04 05 06 07 08 09 10 11 12 13 14 15 Comment Plot DYU BHN TJ -- 12 5 +5 TJT 1 1 20 20 15 0.1 0.05 1 "Dushanbe Center N" Plot DYU BHZ TJ -- 12 5 +5 TJT 1 1 20 20 15 0.1 0.05 1 "Dushanbe Center Z" Plot DYU BHE TJ -- 12 5 +5 TJT 1 1 20 20 15 0.1 0.05 1 "Dushanbe Center E" Days2Save 365 # Number of days to display on web page; default=7 UpdateInt 1 # Number of minutes between updates; default=2 RetryCount 2 # Number of attempts to get a trace from server; default=2 Clip 5 SaveDrifts Make_HTML IndexFile welcome.html Debug WSDebug
Здесь указывается, какие потоки данных запрашивать у wave_serverV и как их отрисовывать. Все, достаточно, интуитивно. Параметр количества часов назад не работает, поэтому график при запуске будет пустой, и только через некоторое время (до 15 минут) начнут появляться данные. При запуске данный модуль округляет время и часто хочет продолжить со следующего 15-минутного интервала. Это видно в лог-выводе.
Теперь можно в ручном режиме запустить скрипты в следующей последовательности:
startstop.sh scream2ew.sh wave_serverV.sh heli_ewII.sh
Для целей отладки делать это лучше в разных терминалах, чтобы видеть, какие ошибки выдаются и работают ли они вообще.
Чтобы у wave_server появилось достаточно данных, может пройти пару минут, только потом heli_ewII эти данные обнаружит и сможет их отрисовать.

Конечно, в мире есть большое количество и другого сейсмологического оборудования и программного обеспечения, например Nanometrics, канадского производства, делает очень хорошие, законченные системы, с подключением к спутниковому терминалу. Это означает, что в центре устанавливается HUB VSAT и в отдаленных горных районах, устанавливаются VSAT размером поменее, которые периодически отправляют данные со своих датчиков. Но это уже тема другого обзора.
На этом я хотел бы завершить данную тему. Тема, конечно, очень большая, и предстоит еще разобраться с вопросами автоматизированного анализа данных, вычисления эпицентра и магнитуды толчков. Earthworm содержит достаточно мощный инструментарий для всего этого.
Страничка проекта:
http://seismo.eastera.tj
Конфигурационные файлы и скрипты:
http://seismo.eastera.tj/downloads
Живой helicorder проекта:
http://seismo.eastera.tj/helicorder
Earthworm:
http://folkworm.ceri.memphis.edu/ew-doc/
Альтеративная реализация wave_server на JAVA: http://www.avo.alaska.edu/Software/winston/W_Manual_SR.html
Helicorder страничка Maryland:
http://www.ceri.memphis.edu/seismic/stations/index.html
