Добрый день, читатели!
Предыстория
С чего обычно начинаются веселые проекты?
-
Фазы проработки гипотезы и предпроектной проработки решили не делать
-
Фазу проектирования закончили фразой Вовки из Тридевятого царства «ладно, и так сойдет», только вместо дров, которые кидал Вовка – были проектные решения, а вместо печки – моя будущая психика.
-
«Ядром» для советчика должна была стать технологическая модель от иностранной компании, софт которой не обновлялся несколько десятилетий, а точность была под большим вопросом. Как она выиграла в тендере? Захотели разнообразия.
-
Спустя несколько месяцев реализации вся команда разбежалась, включая локального менеджера и руководителя проекта, который собственно проект и инициировал. Остался только недавно принятый в команду молодой эксперт, которого втянули в эту пирамиду, но к его счастью – он еще не знал масштаба катастрофы и единственной его проблемой было отсутствие задач.
-
Главный выбранный подрядчик в лице IT-дочки вашей компании неожиданно отказался от выполнения обязательств, сославшись на нехватку ресурсов.
-
На роль руководителя проекта был приглашен ведущий-инженер технолог производства с околонулевым опытом управления командой (ваш покорный слуга).
-
Предыдущая команда при переходе на следующий этап на защите проекта «немного слукавила», не выполнив половину пунктов, которые обязана была сделать в рамках 1 этапа. Предполагалась работа в режиме советчика — выдача рекомендаций по ведению технологического процесса на интерфейсе пользователя в операторной. Ни созданных тегов для передачи уставок, ни подключенных тегов к модели, ни интерфейса пользователя – не было, как сказал бы Олег Тинькофф, НИ-..-Я
Отступление
Советую также прочитать предыдущую обзорную статью про RTO и отличную статью моих бывших коллег. Это сейчас с высоты накопленного опыта мы можем похвастать несколькими уникальными в России проектами удаленного интеллектуального автопилота производства, а начинали с ранее описанных вводных и прокладывать эту дорожку к успеху было довольно интересно.
Для тех, кто решил отложить эти статьи на потом, коротко изложу — целью проектов RTO является повышение уровня эффективности и автоматизации производства. При этом, находясь в иерархии между системами планирования производства ERP, управления производственными процессами MES и непосредственного контроля за технологическим процессом, следующей значимой составляющей в данном проекте помимо самой технологической модели является его ИТ-архитектура. О ней сейчас и поговорим.
Особенности IT-архитектуры RTO
Организация инфраструктуры передачи данных имеет ряд особенностей по сравнению с другими «советчиками», ведь если мы говорим не об открытом, а закрытом контуре, то предполагается не просто выдача рекомендаций оператору пульта управления, а непосредственная отправка сигнала от сервера с моделью с распределенную систему управления производства (РСУ).
Важную роль при реализации мер защиты играет сегментация сети передачи данных. Существуют решения, где модель расположена внутри технологической сети передачи данных (ТСПД) и не связаны корпоративной сетью передачи данных (КСПД). Однако, на мой взгляд, целевым решением является именно удаленный автопилот, т.е. размещение модели в корпоративной сети. В противном случае рано или поздно вы поймаете следующие ситуации:
-
Ой, не можем найти инженера поддержки в наш великолепный город Мухосранск
-
Ой, единственный инженер поддержки в отпуске, а потенциальные замены не могут оформить срочную командировку из-за своих планов
-
Ой, товарищи инженеры, решение локальное, поэтому прогрузка новой версии модели каждый раз требует от вас выезда на площадку. А что вам не нравится?
-
Ой, для прогрузки изменений в модель требуется ожидание в несколько месяцев до остановочного ремонта производства, поскольку вносить изменения «на ходу» запрещено из-за риска «уронить» управление в ходе прогрузки изменений.
Итого, наилучшим решением будет вынесение модели в КСПД при обеспечении инфраструктуры передачи данных (корректировок) из КСПД в ТСПД и наоборот.
-
Данное архитектурное решение позволяет обслуживать текущую модель и «выкатывать» в PROD ее новые версии дистанционно, без необходимости разработчикам присутствовать на производственной площадке.
-
В случае сбоев в системе, планового технического обслуживания или необходимости доработки функционала подобное оформление инфраструктуры обеспечивает снижение потерь экономического эффекта за счет сокращения времени простоя системы.
-
Решение кадровой проблемы на производствах – я думаю, все прекрасно понимают, как сложно загнать высококлассного специалиста, умеющего моделировать реакционные и ректификационные процессы в условный Усть-Кут или Новый Уренгой. Удаленная поддержка дает нам возможность держать разработчиков в комфортной локации и удерживать значимых кадров.
Перейдем к главному.
Для обеспечения безопасной передачи данных между RTO и АСУТП должна быть организована специальная буферная зона ДМЗ ОКИИ (демилитаризованная зона объектов критической информационной инфраструктуры), которая включает в себя систему обеспечения информационной безопасности(СОИБ).
СОИБ включает в себя множество мер защиты и процессов для контроля как периметра АСУТП и передаваемых технологических данных, так и обеспечивает инфраструктурные процессы по обслуживанию системы, включая:
-
систему идентификации и аутентификации
-
систему обновлений ПО
-
антивирусную защиту
-
сервис сбора событий
-
сервис резервного копирования
-
систему сетевого мониторинга
-
эшелонирование и сегментацию
Полный перечень требований к СОИБ ОКИИ можно посмотреть на сайте ФСТЭК приказ №239 от 25.2017. Конкретные протоколы передачи данных, ПО для обеспечения работоспособности этой схемы и удовлетворению СОИБ — это конкретика, которая не разглашается по правилам ИБ, да и сугубо индивидуальная для каждой компании, поэтому я бы и рад рассказать, но смысла мало, а проблем потенциальных — много.
Ближе к делу, Excel — твой выход
У нас было:
-
dll модель иностранного вендора формата black-box (направил данные для расчета в Excel – получил результат JSON-файлом)
-
MES c удобной надстройкой Proficy historian для обмена данными с Excel
-
Требования в сжатые сроки сделать простую визуализацию для регулярной демонстрации полученных данных модели пользователям (не забываем, пилотный проект, модель не откалибрована, требуется постоянно показывать результаты расчетов заказчику
Выбран был Excel с самописной моделью обработки данных и оптимизации расчетов на VBA как самый простой и быстрый вариант. Код был написан по всем канонам ООП, а решение было лаконичным и состояло всего лишь из ~3000 строк кода. Теперь пройдемся по оптимизатору. Не думаю, что многие в курсе, но в надстройках экселя можно выбрать «поиск решения» и у вас будет возможность проводить оптимизацию одним из трех солверов (линейный, понижающего градиента, эволюционный).
Первое время мы вручную проводили расчеты в excel, пока наш доблестный разработчик осваивал VBA и писал код будущей шайтан-машины. Затем по мере разрастания кода плавно перешли на автоматический расчет каждого модуля, а их в RTO несколько.
-
Сбор данных. При помощи другой надстройки в Excel обеспечивался коннект к системе MES, откуда собирались данные по тегам для будущего расчета.
-
Проверка данных. В зависимости от логики, некоторые данные критически важны «сырые», т.е. текущие и без них расчет невозможен. Где-то можно настроить логику замены на среднее за последний успешный период. А часть данных хоть и на первый взгляд нормальные, не Bad’ы какие-нибудь и не нули, но имеют регулярную системную ошибку.
-
Согласование данных. Как раз таки инструмент, который лечит эти регулярные ошибки. Например, сведение материального баланса. Вошло 500т, а вышло 480. Кто врет? Собираем все расходомеры, составы потоков и путем минимизации суммарной ошибки через опять же оптимизацию сводим мат. баланс и приводим данные к более достоверным.
-
Расчет текущего режима. Подключаемся к нашей DLL-модели, бросаем в нее данные через call-функцию, написанную Python-скриптом, получаем ответ в виде JSON, парсим обратно в Excel в нужные переменные и ячейки.
-
Ввод ограничений. Оператор на интерфейсе пользователя вводит значения технологических (давление, температура и т.д.) и производственных (выход продукции, загрузка конкретных линий производства, потребление сырья или энергоресурсов) ограничений, которые нам пригодятся в п.7.
-
Расчет режимов для оптимизации. От текущего режима делаем шаги вверх/вниз по каждой варьируемой переменной, полученные сценарии пропускаем через модель согласно п.4.
-
Оптимизация. С помощью выбранного солвера и его настроек подбираем баланс между рассчитанными режимами, в стиле «щепотку Х, половину Y и другую половину Z». На выходе имеем оптимизированный сценарий работы, который уперся минимум в 1 ограничение и имеет максимальную маржу среди остальных сценариев.
-
Отправка данных. Конфигурация файла для отправки на сервер пользователя с отображением на интерфейсе итогов оптимизации. В каждой из ссылок про RTO в разделе отступление есть пример интерфейса.
Теперь про сам код.
SolverOk SetCell := Cells(row, column), MaxMinVal := 1, byChange :=
Целевая функция из окна оптимизации, показанной ранее. Какую ячейку оптимизируем, как оптимизируем (мин, макс, целевое значение), какие ячейки изменяем.
SolverAdd CellRef: = Cells(Row, Column).Address(), Relation := 2, FormulaText := 50
Добавление ограничений: берём значение ограничения для ячейки Cells, устанавливаем для него отношение «<=» (цифра 1), и значение не больше которого она может быть (цифра 50). Realation 3 — «+>», 2 — «=». Чтобы все прелести тут не расписывать, дам ссылку.
'параметры решателя - ключевое: линейная модель, решаем Симплекс-Методом SolverOptions MaxTime:=50, Iterations:=10, precision:=0.1, assumeLinear:=True, StepThru:=True, Estimates:=1, Derivatives:=1, SearchOption:=1, IntTolerance:=3, Scaling:=True, Convergence:=0.01, AssumeNonNeg:=True
Функция SolverSolve вернёт нам некое число. Если это 0, то солвер нашёл решение и мы сохраняем его. Иначе можем не сохранять. Естественно, нюансов впереди вас будет ждать уйма, например еще не успели произвестись одни внутренние калькуляции (на листах, ячейках, переменных) а код пошел шагать дальше и отправил неполный или неточный пакет данных на внешнюю калькуляцию. Лечилось так
Do While Application.CalculationState = xlDone Loop
Ну или вы хотите дать оператору время на ввод ограничений, прежде чем запустится оптимизация. Скажем, 30 минут.
TimeExpire = Now + TimeValue("00:30:00")
Ну и все, еще чуть чуть и на выходе имеем уже готовое решение для оптимизации производства с годовым эффектом в сотни миллионов рублей.
Эпизод IV. Новые проблемы
Трудности начались дальше при попытке в 2022г сделать из советчика полноценный удаленный автопилот, чтобы люди, приезжающие к вам на завод, выглядели так

По всем известным причинам многие ключевые поставщики оборудования ушли с российского рынка либо потеряли сертификаты ФСТЭК. Перед руководителями проектов возникли следующие задачи:
-
поиск и тестирование необходимых аналогов на доступном для России рынке;
-
доработка оборудования и ПО под требования компаний;
-
проведение ПМИ/ПСИ для получения согласования и включения в вендор-лист
-
необходимость пересмотра спецификаций оборудования;
-
корректировки технорабочих проектов (ТРП).
На смену привычным всем Yokogawa, Asus, Cisco, Siemens, Dell и прочим пришли Huawei, Infowatch, Провенто, Fortigate и другие хорошие ребята. Реализация проектов уехала на 2023 год, а реестры выученных уроков пополнились десятком строчек.
Следующим вызовом стала необходимость перехода на групповую управляемую учетную запись gMSA. Оказалось, что под данной учеткой не работают приложения, запускать можно только службы, к которым Excel с его интерфейсом не относятся. Пришлось переписывать решение на Python и искать в команду Гарри Поттера. Но это уже другая история.
Заключение
Реализация подобных проектов подарит вам
-
возможность гордиться уникальностью данного решения, ведь мало кто осмелится потратить пару лет своей жизни на согласование канала передачи данных в блок ТСПД, поскольку «не хватало нам еще, чтобы какая-то там моделька управляла заводом»(с)
-
уникальный опыт создания из говна и палок крутого продукта с огромным экономическим эффектом, а ведь умение делать из воздуха деньги – это хорошая заметка в резюме и волки где-то на Уолл-Стрит читая его воскликнут “АУФ” и захотят провернуть с вами пару мутных схем
-
навык превращения waterfall проекта в agile, поскольку сроки для проекта, в котором доля НИОКР составляющая, совершенно непредсказуемые. Пробовали в компании, не знакомой со словом agile, продлить 5 раз сроки?
-
опыт работы в условиях, когда доверие внешнему подрядчику больше, чем своим IT дочкам. Один пример озвучивал, а другой — ожидание в 6мес для проведения ПМИ ключевого оборудования для проекта силами другой IT-дочки, которая имитировала работу и ничего не делала по факту ибо «рук нет».
Так что, мой вамсовет — делайте как надо. Как не надо — не делайте. Спасибо за внимание!
ссылка на оригинал статьи https://habr.com/ru/articles/864312/
Добавить комментарий