Доброго времени суток, всем! Сегодня пятница, и лучших традициях Хабра, надеюсь мой сегодняшний пост будет хорошей темой в завершении рабочей недели! С моей последней публикации прошло уже больше года, и за это время произошло достаточно много новых интересных событий, о которых сейчас мне бы и хотелось поведать всем заинтересованным, кто продолжает следить за темой.

Все предыдущие мои статьи по данной тематике можно найти через поиск.

Начать хочу с того, что в конце прошлого года назрела некоторая критическая масса, которая заставила меня все же сесть и запустить процесс выпуска новой версии моей скада-системы. Опыт и наработки, накопленные за это время, стали основой для совершенно новой концепции продукта, но при условии сохранения его архитектурной целостности и идеологии. Итак, сейчас готовится к выпуску новая версия моей скады под номером 2.0!

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

Очень чесались руки переделать единый редактор проекта — нужно было привести его к концепции MDI. Этого требовало юзабилити, да и вообще здравый смысл. Также давно уже витала в воздухе идея совершенно нового движка графического интерфейса. В прошлых своих статьях я немного делал об этом заметки и показывал свои примерные прототипы. Теперь же эти идеи и прототипы легли в основу новой архитектуры графического движка и самого редактора графики. Используя наработки по графике — конечно же, были модифицированы редакторы алгоритмов, как графический (FBD), так и скриптовый (C#). Пока что здесь все ограничилось юзабилити и рюшечками, но в основу алгоритмического движка новой системы я стал закладывать идеи для дальнейшего расширения его возможностей, но это будет тема будущих статей (я надеюсь).

Самое главное, что серьезно меня тормозило от выхода на путь разработки новой версии — это та ошибка, которую допускают многие разработчики подобных систем, когда доходит до стадии развития и разработки новых версий — преемственность этих версий. Это очень серьезный камень преткновения, который на любой гладкой дороге дает серьезную помеху, о которую запинается чуть ли не каждый по ней идущий. Очень сложно сделать новое, которое не будет отрицать или не поддерживать старое, зачастую потому что это реально новое и старое уже не может быть втиснуто в рамки этой новой концепции. А ведь большинство пользователей — это не старое и новое, а это непрерывная линия, которая тянется от старого к новому и не может просто так взять и прерваться, потому что разработчик продукта решил, что новое будет так и все старое надо переделать, или отказаться от него. Эта проблема меня тормозила достаточно серьезно. Но, я немного помозговал ее и решил попробовать один интересный путь, который, как мне кажется, сможет минимизировать проблемы при переходе на новую систему. И даже более того — новая система сможет интегрироваться в существующие старые версии проектов и постепенно, шаг за шагом, даст разработчику возможность выполнить плавный переход на новую версию уже существующих и действующих систем. Но, подробности этой идеи чуть дальше по тексту.

Единая среда разработки с поддержкой MDI.


Перевод среды разработки на мультидокументную архитекутру потребовал некоторой возни, и судя по текущему состоянию этих дел, возня с мелочевкой еще предстоит порядочная. Но, по крайней мере, организация окон системы и их докирование — теперь выглядит и работает по-человечески. К сожалению, у меня теперь нет столько свободного времени, поэтому данная статья не будет изобиловать картинками и видеороликами, я постараюсь показать немного, но по конкретным вещам:



Новый графический движок


Самая основная деталь системы, которая была переписана с нуля. И даже не просто переписана — я создал, по сути, совершенно новый графический движок системы на базе новых для меня технологий. При этом я попытался заложить в него идеи, которые станут основой для того, чтобы реально разделить инженерный и дизайнерский труд на два отдельных направления, но, нацеленных на единый результат при разработке интерфейсов пользователя.

Я, как инженер практик, считаю уже давно, что творческая составляющая не подлежит обучению и тренировке, талант он не рождается в ходе упорных кропотливых разработок. Так может рождаться и совершенствоваться мастерство, не более. Хоть ковыряйте меня вилкой, но никто никогда не убедит меня, что талант можно привить и улучшить. Не верю я в грамотного инженера, который нарисует красивый, и главное удобный интерфейс! На практике мне такое не встречалось. Придумать идею его удобности — да! Нарисовать — НЕТ! Категорично! Это талант! А он — штука редкая в сочетании с инженерной мыслью. Поэтому, всегда стремился к тому, чтобы труд по разработке графических интерфейсов был всегда разделен на два направления: дизайн, реализация. Как говорится: Кесарю – кесарево, а слесарю -… И только так можно сделать это удобным, красивым и функциональным. И обе эти составляющие должны делать два разных по профессии человека: дизайнер (дизайн) и инженер (реализация). В новой системе графики я решил максимально упростить поддержку переходов от макета дизайна к его реализации и обратно, сделать его сквозным. То есть, то, что делает эскизами инженер — может быть передано как есть (в векторе, а не рисунками) дизайнеру, а затем от дизайнера вернуть как есть (в векторе, а не рисунками) обратно в скаду, и продолжить редактировать графику средствами скады дальше, не ломая того, что сделал дизайнер. На сегодняшний день, везде, где доходит дело до подобных методов разработки интерфейса — обмен с дизайнером и обратно ведется только на уровне графических картинок, которые используются максимум как подложка, или как фон, не более. Хочу чтобы инженеры перестали быть художниками, и делали свои задачи, а художники могли наиболее адекватно принимать и возвращать макеты инженерам. Это одна из целей будущей системы.

И вторая главная задача графики в новой системе — снизить процессорную нагрузку. В текущей 1-й версии моей скады вся графика процессоро-зависимая, поэтому в крупных решениях это начинало проявляться. Также это влияло на интерактивные возможности графического интерфейса, ограничивая некоторые возможности по взаимодействию с пользователем.



Новые редакторы алгоритмов


В этой части все улучшения в основном коснулись только внешнего вида отображения и удобства работы с алгоритмами: для визуального языка — новая графическая оболочка и отрисовка, а для текстового — новый редактор со своими плюшками в стиле студии. Также, в рамках новой версии я начал проработку некоторых новых вещей, которые просили пользователи, правда пока их делаю только на уровне ядра вычислителя и пока не выносил их наружу. Планирую, что скоро можно будет разрабатывать свои собственные блоки FBD на базе скриптового языка, а также подключить скриптовый язык в графические экраны, где можно будет напрямую работать с их содержимым, или наоборот дополнять интерфейс пользовательскими компонентами.

Совместимость с предыдущей версией.


Как уже сказал выше — одна из частых проблем большинства разработчиков скада — это поддержка наследования наработок при переходе на новые версии. Все заявляют, что наследование есть и можно перенести все старое в новое, но, как показывает практика — перечень «нюансов» и «ограничений» зачастую сводит на нет такие заявления, и даже то, что вроде есть, может быть использовано не более чем для «поиграться». Не утверждаю, что это поголовный трабл, но — он зачастую имеет место быть и очень часто.

Для себя решил, что заставить сделать это дело более-менее грамотно позволит только одно — запретить на время разработки загружать и сохранять системе проекты в ее родном новом формате, а делать загрузку проектов только в формате предыдущей версии. Даже чтобы отладить какую-то функцию — надо сначала создать проект с ней в версии 1.0 и только потом открывать его в версии 2.0 и выполнять проверку. А если функция совсем новая — то для проверки создавать простой проект с нуля.

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

К концу этого месяца планирую раздать предварительную версию для опробования среди пользователей системы и получить обратную связь. Но будет это сделано только среди тех, кто сейчас реально работает с текущей 1-й версией системы.

В дополнение к совместимости — было принято решение, что на уровне сетевого протокола новая версия будет полностью соответствовать спецификации 1-й версии. Это даст возможность, имея готовую наработку в 1-й версии, открыть ее в новой версии 2.0 и конвертировать, например узлы АРМов, или добавить новые с новой графикой и запустить их уже в рамках реально работающей системы. Благодаря поддержке одной и той же спецификации — эта процедура должна предоставить плавный переход на новую версию системы без ломания всего, что есть, и глобального перелопачивания и переделывания всего подряд. Посмотрим, оправдает ли себя моя задумка. Практика покажет, а также обратная связь от разработчиков и пользователей тоже.

Текущие дела. Что нового в моей профессиональной деятельности


Теперь несколько слов про те новые дела, которые произошли за 2016-й год. В начале прошлого года ко мне обратился представитель одной немецкой компании. Как оказалось — он и его инженеры достаточно пристально следили за моей разработкой, моими публикациями и внедрениями моей системы. Их компания — это российское представительство очень крупного немецкого разработчика систем для автоматизации, разрабатывающего решения не только для диспетчеризации, но и логистики, транспорта, энергетики и многих других задач аж с 1969 года. Это очень именитый и серьезный европейский бренд, программное обеспечение которого управляет очень серьезными и крупными системами практически по всему миру. В силу политики импортозамещения в их компании начал назревать вопрос о переносе процесса разработки программных решений, ориентированных на российский рынок, в Россию. А под это дело им понадобился человек, который мог бы стать неким тим-лидом такой команды разработчиков и постепенно бы стал архитектором этих решений. Поразмыслив, они пришли к такому выводу: зачем мы будем нанимать со стороны человека, которого мы не знаем заранее не понимаем, сможет ли он осилить поставленную задачу, если сейчас перед ними есть такой человек, который уже самостоятельно прошел все эти этапы и что называется «собаку съел» на этих задачах при разработке своей скада-системы.

В итоге — они решили предложить мне поучаствовать в их предприятии, и почти всю первую половину 2016-го года я провел в процессе обсуждения моего участия и моей роли в их задачах. Были согласованы условия, мои позиции, и мою кандидатуру утвердил их совет директоров. И вот в августе 2016 мы сошлись на том, что я начну работать у них на позиции руководителя проектов и до конца 2016-го года буду заниматься пока изучением их основной системы на практике, чтобы через полгода, когда придет пора запускать разработку – я, хотя бы буду иметь уже опыт и знания по их комплексу, а не приду с нуля и рвану сразу в бой с нулевыми базовыми знаниями их системы.

И да, предвижу ваши вопросы — стоп, а как же моя скада и моя разработка!??
Когда мы вели переговоры, мне сразу была озвучена их позиция: да, они понимают, кого они приглашают к себе, и они понимают, что просто так взять и бросить свою разработку я не смогу. Поэтому предлагая мне участие и плотную занятость в их проекте, они официально готовы к тому, что моя разработка так и остается моей вторым направлением деятельности, и я буду ей уделять свое время и силы при условии, что это не будет влиять на наши совместные дела, а также не будет возникать конфликтов интересов. С их стороны они будут давать мне возможности для выделения времени под свои задачи и у нас не будет совсем строгой муштры в рабочем процессе. За последние чуть больше полугода — мы вполне хорошо соблюдаем эти условия с обеих сторон. Если же конфликты интересов будут возникать — то мы будем стараться их решать в совместном диалоге и поиске решений и компромиссов. Однако, учитывая масштабы и задачи, решаемые моей и их системами – такое вряд ли случится, а скорее, наоборот — на общих отраслевых секторах наши системы смогут предоставить хорошо вертикально-интегрированные единые решения.

Меня эти условия вполне устроили, а то, что они предложили мне — это действительно очень необычное и очень перспективное направление не только по моим интересам, но и по возможностям, а также профессиональному росту, который я бы даже себе никогда и представить не мог.

Вот так я теперь работаю на два направления: одно сейчас стало моей основной работой, а второе продолжает развиваться и расти все также с моим участием и под моим руководством.

За эти полгода я поездил по командировкам на объекты, выполнил своими руками установку и поддержку их системы, чтобы получить практический опыт и базовые знания о ее архитектуре. С октября месяца прошлого года я получил также дополнительную должность ведущего разработчика в их дочерней компании, а с января месяца 2017-го стартовал процесс по той задаче, для которой они меня и пригласили, и теперь я начинаю выполнять еще одну свою новую должность — технического руководителя разработки и в будущем тим-лида команды разрабочтиков, которых еще, в скором времени, предстоит нанять.

Сейчас ведется перенос в Россию полного цикла разработки новой скада-системы для задач диспетчеризации, которая будет включать все наработки немецких разработчиков, и весь их колоссальный опыт и методики. И на текущем этапе я составляю документацию на единую техническую спецификацию по этой новой системе: прорабатываем требования на нее, а также формируем окружение для ведения единого пространства разработки.

Мое рабочее расписание на этот год теперь расписано на два основных офиса: Москва-Берлин. И вот сейчас я нахожусь как раз в Берлине и составляю документ этой технической спецификации, работая в центральном берлинском офисе с ведущими немецкими разработчиками и архитектором той части системы, которую я буду вести в России. Еще ровно год назад, и даже меньше — я бы вообще вряд ли смог себе представить то, чем я сейчас занимаюсь, и где я буду находиться, какие двери будут открыты для меня. Сейчас я перенимаю серьезный опыт и начинаю достаточно интересное направление, основой для которого стал мой энтузиазм, мои разработки и идеи, которые я не побоялся воплотить в жизнь и довести до практических реализаций, которые увидели профессионалы мирового уровня и высоко оценили эти результаты и проделанную мной работу, и даже предложили стать членом их команды, о чем можно было только мечтать.

Жизнь — она интересная штука, она действительно становится непредсказуемо-интересной, если ты живешь и стараешься жить ей, а не плыть по течению и повиноваться общим законам бытия и каким-то меркам и мнениям, которые пытаются доказать тебе, что то, что ты задумал — невозможно. Я сейчас все больше убеждаюсь, что все, что невозможно — так потому, что никто никогда не пытается это сделать, потому что так считают все и все смиренно принимают эту позицию. Но если что-то делать и гореть чем-то, стараться изучать что-то новое — то впереди ждут открытия и события, которые немногим раньше казались именно тем невозможным, что недостижимо!

Народ! Дерзайте и идите вперед. Несмотря на любой скептицизм и завистников! За горизонтами — новые еще более увлекательные горизонты, главное — не останавливаться и не бросать то, что начали! Труд — он всегда окупается. Возможно, мой пример — станет наглядным интересным примером для многих других. И я буду искренне рад, если он станет практическим примером для кого-то начать что-то менять в своей жизни. Надеюсь, впереди я еще не раз смогу порадовать вас новыми увлекательными публикациями, тем более, что сейчас появилось еще больше интересных тем для этого! До скорых встреч!

P.S. Приятно, что благодаря моим статьям и моей разработке — меня стали узнавать. Получается забавно, когда человек, общаясь со мной некоторое время по другим темам, в какой-то момент вдруг неожиданно узнает, что да, я тот самый Роман, который скаду написал, а он следил за моими публикациями и разработкой. Привет Роману Поваляеву! Роман, готовься, то, что сейчас происходит и над чем я сейчас работаю – похоже, будет проходить частичные испытания и на ваших объектах, так что, еще надеюсь не раз пересечемся!

А еще хочу попинать Анпилова Леонида за его издевательство над админами. А админам сказать — не таскайте ему больше мои статьи с Хабра, мы с Леонидием давние друзья и он, собака такая, над вами издевается, скрывая этот факт каждый раз как вы ему мои статьи показываете Леонидий, готовься — теперь тебя будут бить! Возможно ногами (с) Я тебя сдал! )
Поделиться с друзьями
-->

Комментарии (9)


  1. oldbay
    17.02.2017 12:42

    Очень хорошо что ваши статьи о «написании скады» дали вам билет в будущее. Удачи вам!


  1. lzb_j77
    17.02.2017 15:22

    Крутотенюшка! Белейше завидую.


  1. FForth
    18.02.2017 00:58

    Вы, как инженер-практик, считаете что основное предназначение SCADA отоброазить красивые технологические картинки? SCada без красивых «картинок» бессмыслены? Или Вым это делать интересно и не затратно думать об остальном фцнкционале Scada системы.


    1. Romer
      18.02.2017 11:07
      +1

      Вы вырываете из контекста. Я сейчас вел рассказ про новую систему и рассказал только про те подсистемы, которые были основательно переделаны. По графике — движок был переделан вообще с нуля поэтому и написал про это. А десятки других подсистем скады (архивация, журналирование событий, дейстрия оперативного персонала, обмен по сети, обмен по интерфейсам, горячее резервирование, авторизация и управление правами, первичная обработка и прочие прочие) по большей части перешли как есть. Но это не значит, что их вообще нет. Не делайте, пожалуйста, выводов о системе на основании прочитанного 1 абзаца.


  1. denismaster
    18.02.2017 10:10

    Что вы используете для нового графического движка? OpenGL или DirectX?


    1. Romer
      18.02.2017 11:08

      В основе лежит DirectX.


  1. coracio
    18.02.2017 19:30

    Вы используете графическую подсистему WPF или у вас самописный движок с использованием DirectX?


    1. Romer
      18.02.2017 19:35
      +1

      Нет, это не полностью самописный движок над DirectX, как обертка используется подсистема WPF.


  1. blaze79
    24.02.2017 13:18

    и я когда-то писал скаду…