Приветствую, уважаемые Хабравчане! Многие из нас живут в сейсмически нестабильных районах, и, полагаю, землетрясений не любит никто. Как технарю, да и вообще, данная тематика мне была всегда интересна: как и где землетрясения зарождаются, как определяют эпицентр и магнитуду, как производится мониторинг и т. д. И вот так получилось, что мне понадобилось сделать некую пилотную систему для мониторинга в реальном времени показателей нескольких сейсмодатчиков, расположенных достаточно далеко друг от друга и от центра, где эти данные и сохраняются, и обрабатываются. При возможности, хотелось также сделать 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