Зеленое счастье и никаких наркотиков!

суббота, августа 22, 2015

Старая работа

Может быть вы помните, я работал на заводе производящем фармацевтические продукты. Я занимался разработкой программы мониторинга микроклимата в чистых помещениях. В одиночку. В самом начале нам обещали что наймут еще программистов, но как-то не случилось. Помимо мониторинга, мне пришлось писать систему контроля давления в них же - но это совсем малая система, буквально в сотню строк.
Скорее всего у вас возникла мысль - "Как можно, такое ответственное дело доверять одиночке, лучше купить продукт у крутого поставщика". О, я до сих пор склоняюсь к подобной мысли, но меня всегда останавливают мои знания. Знания о SCADA системах и поставщиках. SCADA - supervisory control and data acquisition, диспетчерское управление и сбор данных. Они застряли в прошлом. В далеком прошлом. Не смотря на заявления поставщиков, о том что они поставляют вам самую современную, самую разнадёждную, самую безопасную систему - скорее всего это не так.
Во первых - не самую безопасную. Вся безопасность держится на том, что удалённый доступ к SCADA затруднён. Для всех. Для пользователей, для администраторов, для разработчиков. Если это старая система, то грузом разных протоколов, каких-то железных ограничениях и т.д. Если это новая система, то отделением локальной сети от интернета - физически. Но это не спасает от проникновения - доказательство Stuxnet (не смотря на это, я сохраняю точку зрения о том, что нужно физически разграничивать сеть производства от сети с доступом к интернету, не зачем злоумышленникам облегчать работу). С полным дублированием проводки и сетевого оборудования. Почитайте сводки с последних хакатонов на хабре, где предлагалось взломать суперсовременную SCADA систему от именитой компании. Порвали как грелку, при этом о том что такое SCADA хакеры узнали на самом хакатоне. Их безопасность основана на том, что никто не знает о них ничего, а если где и что прорывается, всё это дело замалчивается и скрывается. Наркоманская игла и банда продавцов сдерживает клиентов.
Во-вторых, не самую современную. Практически всегда, SCADA системы застревают в прошлом. Может показаться, что это связано с тем что системы должны быть надёжны и поддерживать кучу разномастного оборудования со временем. Скорее всего, программисты которые придумывали эту систему,  не ожидали что она будет жить ТАК ДОЛГО, маркетологи продолжают ехать на мертвой лошади и впаривают эти системы всем подряд. Все системы с которыми я знаком, обладали такими ФИЧАМи: Проприетарный, закрытый наглухо протокол обмена данными с железом, завязанный на железку, а если и есть возможность использования открытых протоколов она или затруднена или за отдельную плату через железку, которая в принципе на хер не нужна. Проприетарная, закрытая база данных. В лучшем случае, жесткая завязка на Oracle или MS SQL. Проприетарный способ отображения данных. Т.е. например, дёрнуть данные из таблицы в БД, а потом отобразить их на страничке - нетривиальная задачка для практически любой подобной системы. Еще и за большие деньги или отдельной железкой. Любой глюк с системой, и нужно ждать патч от поставщика. Месяцами. А то и годами.
В-третьих надёжность под вопросом. Система падает из-за того что в сети с железкой помимо ПК и железки есть еще кто-то. Просто со временем отключается система логирования, а вы об этом узнаёте через год, или перестает отдавать какие-либо данные, потому что у вас слетела лицензия или сгорел ключ. Ощущение что пользуешься системой, которая еще не прошла все этапы разработки - открытая альфа.
Купил такую систему - сел на иглу. Будут брать большие деньги за каждый чих. Для поставщиков вы просто баран с которого нужно стричь бабло. Любой шаг в сторону от запланированного поведения - зарежут на мясо. Хотите поменять систему потом? А как же оборудование за много денег? Оплатите покупку железных конвертеров из проприетарного протокола в новые проприетарный, а еще купите лицензию на ПО на каждую железку. А через некоторое время вы обнаружите что имеет две одинаково дёрмовые системы.
Есть исключения но их очень мало. Я вообще только об одной системе слышал, которая реально крута, но она совсем не популярна - т.к. у нее нет богатых спонсоров, а делается буквально одним человеком. Хотя, судя по статье на хабре, у этой системы хороший создатель, который явно видит все косяки существующих систем, и имеет богатый опыт общения с различными SCADA.
С чисто эстетической точки зрения,  99% SCADA систем выглядят как УГ, хотя поставщик будет бегать рядом с системой с горящими глазами и кричать что у них все красиво-красиво (на самом деле нет, просто погуглите SCADA и посмотрите картинки). Конечно SCADA должны работать быстро, а не показывать красоты с шейдерами, которые забирают на себя кучу ресурсов. Но, почему-то они всегда работают медленно. У вас проект на 10 точек, интерфейс без крутой графики тормозит и тупит. 1000? - получайте работу еще медленее.
Поставщики любят кричать смотрите какие красивые графики система отрисовывает. Во-первых - некрасивые. Во-вторых, вам их покажут скорее всего на бумаге. На компьютере (не самом слабом) 100 значений нарисует еще как нибудь, 1000 уже задумается, 100000 скорее всего вам надоест ждать. При этом система написана на С++ или Си. Если вы думаете что 100k значений это много, то посчитайте 10 датчиков по 1 значению в 5 секунда за 1 месяц - это около 520k значений. Нескромное заявление, но я написал систему которая отрисовывала на "тормозном" flash миллионы значений за секунды, за 5-15 секунд вместе с загрузкой данных Postgresql -> Ruby on Rails -> AS3. При этом можно было приблизить график, рассмотреть некоторые моменты подробнее и т.д. А уж с сотнями тысяч значений можно было работать не напрягаясь.

Основные проблемы самописных SCADA:
1) Разработчик может уволиться и вся система летит в тартарары, если не сможете его заменить. У нас прошло всё безболезненно, и я нанял достойную замену. Решается разграничением задач и нормальным проектированием ПО, а не загрузкой одного разработчика кучей непосильных задач. Ну и используйте свободное ПО. Я работал на Linux + PostgreSQL + Python - система опроса и Ruby on Rails +  JS + AS3 - отображение данных.
2) Поддержка и внедрение нового железа. Основная проблема, большую часть времени я занимался реверс инженерингом чужих протоколов. Занятные задачи, но надёжность такого решения - как повезёт. Например Bolid - вполне удачно получилось взломать. Работает даже лучше чем их собственные разработки, которые реальная задница.
3) Сертификация - практически всегда, системы со SCADA нужно сдавать и сертифицировать, и это реально головная боль. Особенно в фармацевтике. НИКТО не знает как сертифицировать самописные системы в GMP. Но, есть в этом и плюс, потому что проверяющие, то же не знают как их сертифицировать, поэтому может прокатить более-менее стандартные протоколы. Особенно в России. Собственно я остановился на самом начале сертификации, т.к. мне подвернулась работа поинтереснее.

Вообще SCADA это место где крутится прорва денег, и она очень похожа на голубой океан, где плавают пара толстых ленивых хищников. Один маленький, юркий стартап, может заставить его наполниться кровью соперников...

Главное, не забывать, что подобные системы прочно связаны с миром реальным...

Добрых событий.

8 комментариев:

  1. А я давно тебе говорил что нужно мутить стартап по теме

    ОтветитьУдалить
    Ответы
    1. Немного забавно, но сегодя наткнулся на статью http://habrahabr.ru/company/dsec/blog/265021 хехе, не я один такой.

      Удалить
    2. нет инвайта( не показывает эту статью

      Удалить
    3. Прикольно, не знал что так бывает. А вообще зарегистрирован, чтобы хотя бы read only аккаунт был?

      Удалить
  2. К сожалению, я ничего не понимаю в программировании, но знаю, что чем дольше думаешь над чем-то, то меньше желания это делать. Если есть возможность, если вы видите потенциал, попробуйте - что вы теряете? А теперь представте что вы можете получить ))

    ОтветитьУдалить
    Ответы
    1. Головную боль? Мне совсем не хочется заниматься SCADA системами.

      Удалить
  3. Ради хорошей прибыли можно было бы и рискнуть. Жаль я в этом не разбираюсь((

    ОтветитьУдалить