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

Как сломать завод за 150 миллисекунд

Страшный сон инженера-пусконаладчика
Инженер у остановленной линии; на обложке надпись «КАК Я СЛОМАЛ ЗАВОД!»
Машины — идеальные свидетели. Видят всё, помнят всё и никогда ничего не рассказывают.
Материал основан на реальных событиях. Имена и отдельные обстоятельства изменены.
Инженер перед длинной линией в тёмном цехе; вдали горит красный сигнал
На этом месте полагается проснуться.

Сон, который не кончился

Этот сон мне снился раз пять. Цех, гул, я у шкафа управления что-то делаю — и гул обрывается. Люди поворачиваются ко мне. Ждут. А я не знаю, что делать.
На этом месте полагается проснуться.
— А почему у нас свет выключился?
Я оторвался от ноутбука.
— В смысле — выключился?
Ноги уже несли меня к шкафу управления. Ноги вообще умнее головы: они первыми понимают, что случилось плохое.
На контроллере — небольшом блоке в шкафу, который командует всей линией, — горело STOP. Не сгорел, не сломался: жив, но командовать перестал.
Линия стояла. Под гулом, оказывается, всё это время пряталась тишина — огромная, как пустой ангар. И остановилась линия ровно тогда, когда к ней подключился я.
«Я сломал завод».
По спине поползла холодная капля. Рядом стоял Пётр Ильич, начальник производства, и молча ждал объяснений. Что ему сказать? Что я ничего не менял? Что только хотел проверить связь? Всё это было правдой — и всё звучало как ложь. У правды не бывает времени на репетиции.
А самое страшное — я действительно не знал, как вернуть всё обратно.
Значит, не сон. Значит, дело.

Обстоятельства

Было обычно. Этого слова следователи не любят больше всего — за ним всегда что-то прячется.
Меня позвали на действующее производство: разобраться с системой управления и, если получится, достать из контроллера программу. Линия работала. Но исходного проекта — той версии программы, которую можно открыть и прочитать, — у заказчика под рукой не было. Актуальных схем тоже. Выходило, что единственный известный экземпляр программы — тот, что работает в самом контроллере.
Задача знакомая. Правда, оборудование оказалось с характером. Вместо оригинального Siemens в шкафу стоял его китайский аналог — похож, как двоюродный брат: черты те же, а что на уме, неизвестно. Связь с ним шла через сторонний преобразователь — посредника между заводской сетью и контроллером. Документация на заводах вообще как зонтик: где-то точно есть, но никогда — там, где дождь.
Я заранее предупредил: для полноценной работы может понадобиться специальный адаптер — чтобы подключить ноутбук к контроллеру напрямую, без посредников.
Сначала решили попробовать через существующую сеть. Вдруг получится? «Вдруг» — самое опасное слово в нашей профессии. Но на работающей линии иначе не начинают: сначала самое простое и самое щадящее.
Ноутбук. Кабель. Программа диагностики. Первое действие — стандартное, как «здравствуйте»: найти контроллер в сети и убедиться, что он отвечает. Ничего не менять, ничего не загружать — только спросить: ты здесь?
Он нашёлся. Только отображался странно: обычно диагностика показывает внутреннее устройство контроллера, а тут — будто открыли дверь на цепочку. Доступ ограничен. Но связь есть, значит, будет и разговор.
Тут-то кто-то из сотрудников и заметил, что погас свет.
Программу я даже не начал выгружать. Я просто постучал в дверь.
Инженер и контроллер с красным сигналом на фоне больших часов
Доказательств — ни против кого.

Что такое 150 миллисекунд

Перезапустили. STOP. Ещё раз. STOP.
— Алексей, ну что? — спросил Пётр Ильич.
— Разбираюсь.
Хорошее слово. Ничего не обещает и ни в чём не признаётся.
Диагностика показала: превышено время выполнения программного цикла. Чтобы стало понятно, что это значит, придётся на минуту заглянуть в шкаф.
Контроллер — это мозг линии. Он весь день делает одно и то же, по кругу, без перерыва. Опрашивает датчики: где деталь, какая температура, нажата ли кнопка. Прогоняет программу: что из этого следует. Отдаёт команды: включить мотор, открыть клапан, остановить конвейер. И снова — датчики, программа, команды. Один такой круг называется циклом. А между делом контроллер ещё и отвечает тем, кто к нему обращается: панели оператора, соседним системам, ноутбуку наладчика. Время на это берётся из того же запаса.
Обычно круг проходит в разы быстрее положенного. Но за ним приглядывает сторож — предельное время цикла. Здесь это 150 миллисекунд, примерно одно моргание. Пока круг укладывается, сторож молчит. Не уложился — возникает ошибка, и контроллер может остановиться сам. Это не каприз, а защита: лучше стоящая линия, чем линия, которой никто толком не управляет.
Вот они, 150 миллисекунд из заголовка. Не время, за которое я всё сломал, а срок, в который контроллер однажды не уложился.
Что произошло, я теперь видел. Почему — вот это и было загадкой.

Подозреваемые

Их было трое.
Номер первый — мой диагностический запрос. По одной из версий, система и без того работала близко к своим 150 миллисекундам — на самой кромке, и никто этого не замечал, потому что никто не спрашивал. А ответить на вопрос — для контроллера тоже работа. Небольшая. Но если запаса нет, хватит и небольшой. Последняя капля. Мотива нет, возможность была, алиби — никакого.
Только одно в эту версию ложилось плохо: контроллер уходил в STOP и после перезапусков. Значит, либо что-то продолжало капать, либо дело было не только в капле.
Номер второй — нестандартный преобразователь, через который шёл весь разговор. Посредники в детективах всегда что-то недоговаривают.
Номер третий — скрытая неисправность, которая сидела в системе тихо и ждала повода. Самый удобный для меня подозреваемый. Именно поэтому я ему и не доверял.
Доказательств — ни против кого.
Контроллер-то знал, почему не успел. Но машины не дают показаний сверх того, о чём их можно спросить. А меня держали на цепочке.
Инженер с ноутбуком перед запертой дверью внутри шкафа управления
Программа в контроллере есть, но он её не показывает.

Тело на месте

Потом пришла мысль похуже: а вдруг программа повреждена или стёрлась? Тогда это уже не остановка, а похороны.
Сведения о памяти: занято около 22%. Не пусто. Похоже, программа на месте.
Я выдохнул. Ненадолго. 22% — это свет в окне: видно, что в квартире кто-то есть, но не видно, жив ли хозяин. А заглянуть внутрь контроллер не давал.
И тут до меня дошла вся изящная подлость ситуации. Программа в контроллере есть, но он её не показывает. Меня позвали, чтобы её достать. Теперь, чтобы его поднять, мне самому нужен её исходный проект.
Которого у меня нет.
Вот, пожалуй, главное, что стоит знать о таких историях. В контроллере лежит то, что он исполняет, — обычно без имён, пояснений и всего, что помогает человеку понять, что тут к чему. Исходный проект — та же программа вместе с пояснениями и конфигурацией, из которой её когда-то собрали. С ним можно понять, что внутри, поправить настройку и загрузить обратно версию, которая точно работает. Без него — гадание у закрытой двери: стоишь и по звуку пытаешься понять, что за ней сломалось. Небольшая неисправность становится большой проблемой не потому, что она большая, а потому, что к ней нет ключа.
Инженер у ноутбука, пока начальник производства ждёт ответа в цехе
Ты приехал помогать, а теперь ждёшь, пока помогут тебе.

Свидетель, который уехал

Время шло. Линия стояла. Чай остыл и подёрнулся плёнкой.
Я искал обходные пути, советовался с коллегами, перечитывал диагностику. Нужен был тот самый адаптер для прямого подключения. Он даже нашёлся в городе. Но человек, у которого он был, уехал и мог отдать его только завтра. Главный свидетель покинул город. Классика.
Завтра. Для стоящей линии это слово звучит как «никогда», только длиннее.
А рабочий телефон звонил: на других объектах тоже ждали консультаций, ответов, помощи.
Очередной звонок. Илья, с другого объекта.
— Слушай, у меня тут такие новости...
— Ничего не говори. У меня тут ещё хуже. Давай потом.
Пауза в трубке — и он понял. Между своими «ещё хуже» не уточняют.
Пётр Ильич заходил каждые полчаса. Не ругался. Это было хуже. Ему было неинтересно, что программа не открывается, а преобразователь нестандартный. Ему нужна была работающая линия. И я его понимал.
Но попробуй объясни человеку, у которого стоит производство, что ты ещё ничего не успел изменить. Что стандартная диагностика не должна так заканчиваться. Особенно когда сам допускаешь: а вдруг виноват именно твой запрос?
Самый тяжёлый допрос — тот, где подозреваемый и следователь сидят в одной голове.

Старые хозяева

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

RUN

Они справились. Вместо STOP — RUN. Никогда не думал, что три буквы могут так отпускать.
Исходный проект у них, по имеющимся сведениям, был. Через него они получили доступ к нужной конфигурации и устранили проблему. У них был ключ, которого не было у меня. Вся разница между «проект есть» и «проекта нет» уместилась в этот день: с ним сбой чинят, без него стоят у закрытой двери.
А главная загадка осталась. Почему контроллер вообще остановился?
Диагностические записи я сохранил. Ошибка времени цикла там есть, чёрным по белому. Только улика — ещё не ответ. Без доступа к программе и конфигурации точную причину установить не удалось.
Линия работает. А доказать заказчику, что это не я её сломал, невозможно.

Висяк

Удобного ответа нет. Может, система давно работала на пределе, а мой запрос это только высветил — как фонарик трещину в стене. Может, подключение и правда спровоцировало остановку. Дело так и осталось открытым.
Такие объекты — правило, а не исключение. Оборудование неизвестного роду-племени. Документация потеряна. Программа осталась у подрядчика, который запускал линию много лет назад. А производство работает — и пока работает, никто не думает, что будет, если однажды контроллер остановится.
Но рано или поздно кому-то приходится открыть шкаф и подключить ноутбук. В тот день это был я.
Говорят, охотник на медведей обычно погибает на сороковом. Не на первом, когда руки трясутся, а на сороковом — когда уже всё умеешь. С мотоциклистами та же статистика. Возможно, тот контроллер был моим сороковым.
Я был уверен, что ничего не случится. Это же Siemens. Пусть в шкафу стоял не оригинал, а двоюродный брат, — фамильные черты я узнал с порога. С такими контроллерами я возился годами и ни разу не обжёгся. Но всегда с нуля: на остановленном оборудовании, где в худшем случае ничего не заработает. Живая линия — совсем другое дело.
Вот, пожалуй, и первопричина. Не преобразователь и не 150 миллисекунд. Уверенность. Попадись мне незнакомый контроллер, я бы остановился у двери: «Ребята, сюда лучше не лезть. Давайте с нуля». Побоялся бы. А бояться, как выяснилось, иногда полезно.
Может, теперь и сон будет другим. Я стою перед контроллером и спрашиваю: «Почему?» А он молчит. Не потому, что не знает. Просто его никто не учил отвечать на этот вопрос.
Раньше я думал, что самое страшное — когда кошмар сбывается.
Оказалось, бывает хуже: когда он сбылся, а ты так и не узнал, что же на самом деле произошло.

А вы бы подключились?

Вас позвали на действующее производство. Линия работает. Нужно достать программу из контроллера. Исходного проекта нет, схем нет, связь — через нестандартный преобразователь. Заказчик просит: ну хотя бы попробуйте.
Вы бы подключились? Или ни шагу без полной документации — понимая, что можете её так и не дождаться?
А если вы по другую сторону — тот, кто просит «ну хотя бы попробуйте», — готовы ли вы к тому, что линия может встать?
И если она всё-таки встанет — кто за это отвечает? Инженер, который подключился? Заказчик, который попросил? Или те годы, за которые потерялись схемы и исходные проекты?
Расскажите, если с вами такое бывало. Особенно — чем кончилось. Может, у кого-то раскрыто дело, которое у меня до сих пор лежит в папке «Нераскрытые».