Свежая голова

Apr 17, 2022 15:32

Февраль 2019 года. Мюнхен. Весна. Красота...
Мне, однако, сейчас не до красоты. Я жду начала очередного этапа собеседования. С начальником отдела пуско-наладки и сервиса. Начальник, в отличие от собственно "пуско-наладчиков и сервисников", никуда не ездит и не летает, а сидит в офисе. Однако ж дел и у него хватает. Какая-то заморочка на объекте где-то в Андалузии, по этому случаю в комнате для телеконференций галдящая толпа народа. Так что - собеседование чуток задерживается. Наконец, минут на 10 позже назначенного времени, таки начинаем.

- Итак - говорит начальник, подвигая мне сименсовский программатор - вот здесь стандартная функция (FB) управления пневмоцилиндром, с двумя датчиками обратной связи. Я для вас внес в нее пять ошибок разных видов. Ваша задача - за час найти как можно больше, а потом объяснить.
И убежал обратно на телеконференцию.

Задачка оказалась весьма интересной и головоломной. За час я наверно и не управился бы. Однако начальник пришел только через час двадцать, в весьма замученном и загруженном виде.
- Ну как, справились? Рассказывайте.
- Конечно! От простого к сложному. Вот тут - опечатка в названии функции, это тиа-портал (сименсовская среда разработки для ПЛК) сама показывает и исправить предлагает. Вот тут - используется сигнал не с того датчика. Тут - читается выходная переменная, причем значение ей присваивается намного позже. Переменную нужно перенести в статические, на выходе она все равно не нужна. Тут - таймер ждет уставку в миллисекундах,  а входной параметр согласно комментарию - в секундах, нужно масштабирование в тысячу раз. И наконец тут...
Я делаю глубокий вдох в качестве паузы перед длинным объяснением

- тут все хитро. В условии восстановления после состояния аварийного останова или запрета на управление и перемещении в базовое положение (Grundstellungfahrt) - при переходе в состояние конечного автомата "движение в базовую позицию закончено" проверяется не сигнал фактического положения с датчика, а флаг команды на начало перемещения. Соответственно, если, скажем, нажать аварийку, когда пневмоцилиндр на полдороги в базовую позицию - то при инициализации он там и останется, управляющие сигналы на пневмоклапаны останутся неактивны, ошибок нет, зато сигнал готовности и достигнутого положения (Position erreicht) будет выдан. Соответственно, если не повезет - то что-нибудь куда-нибудь в станке может вкрячить. Нужно добавить вот сюда в условие перехода вот этот вот сигнал. Причем при движении в другом направлении этой ошибки нет.
Начальник несколько завис.
- Так...не могли бы вы повторить еще разок и помедленнее?

Хорошо еще, по-английски общаемся. Английский и у меня, и у собеседника не родной, посему вполне друг друга понимаем. По-немецки я бы тогда еще весь язык сломал.

После второго объяснения, с демонстрацией поведения программы в симуляторе, начальник несколько ...хм, озадачился.
- Tja pech!
(на русский культурно переводится примерно как "ах ты ж зараза е*****!")
Потом уже спокойнее:
- так, можешь сейчас повторить на телко? (телеконференции)
Хватаю программатор, и идем в этот самый зал телеконференций. Где в наличии человек  пять из разных отделов, тоже изрядно замученных и загруженных.
А на другом конце телеконференции - пара не менее замученных наладчиков в каком-то цеху металлообработки у клиента в Испании.

Объясняю и показываю. Сперва на "собеседовательном" программаторе. А потом и на программаторе наладчиков через удаленный доступ. Там, разумеется, сидит ровно та же самая ошибка. И ее вылавливают уже третьи сутки. Уже поняли, что проблема возникает, после того как в неудачный момент (один раз из 20) открыть дверь в ячейку робота, и приводит к невыполнению команды на возврат пневмоцилиндра фиксатора аппарели в базовую позицию при перезапуске. С последующим вкрячиванием аппарели, потерей положения привода и далее по списку. Но почему именно - понять не могли.

Устранение ошибки занимает куда меньше времени, чем ее поиск и даже объяснение. Быстренько прогнали пару циклов инициализации и убедились, что теперь все в порядке.

Наладчики поблагодарили нас и отключились, весьма довольные. Я прекрасно понимаю коллег - теперь хоть поспят спокойно. Однако ж народ в комнате телко и не думает расходиться.
- Так-с, а помните, в декабре было замечание из Пльзени? Там, похоже, та же самая причина может быть. И вообще, сколько мы используем эту библиотеку? Ага, стало быть, нужно запланировать ревизию всех машин, выпущенных за крайние 8 месяцев.... Херр Майер, нужно немедленно обновить библиотеку на корпоративном сервере, с уведомлением. Херр Крюгер, давайте начнем с Пльзени, свяжитесь и узнайте, когда можно будет удаленно внести изменения....

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

Лирическое отступление.
А все почему? Не потому, что я такой особо умный. А потому что я тут новенький, а поэтому могу быстро увидеть то, на что у всех местных глаза уже замылились.
Раньше, когда не было всяких там Word и Google Docs с автокоррекцией орфографии и пунктуации на 54 языках, в каждом издательстве была должность, так и называемая "свежая голова". Этот человек работал от силы пару часов в день с утра. И работа его заключалась в чистовом вычитывании текстов перед печатью в типографии. Причем ровно один раз на каждый текст. И "свежая голова" находила-таки незамеченные очепятки, прошедшие через все предыдущие проверки и вычитки.
Видать, и программистам не мешало бы внедрить нечто похожее. Если бюджет позволяет, конечно. Ну, или вот так, собеседующихся к делу приладить

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

Пью пиво и думаю:
ёмаё, а ведь еще-то одну ошибку в программе я так и не нашел!

Poll Чем дело кончилось?

Германия, байки наладчика

Previous post Next post
Up