Эта статья — ответ на ранее опубликованную статью про IT на заводах. Я почитал и понял, что мне есть что об этом рассказать. Вопросы оттуда же и немного больше. Сразу уточню, что я не работал непосредственно на заводах, а работал в компании, которая предоставляла услуги по автоматизации производственных линий разным предприятиям, но в основном ориентированные на работу с весами и дозированием.
Что привело в промышленность?
Это была моя самая первая работа программистом после самой первой работы — крупье в казино. В далёком октябре 2008-го я пришёл на собеседование с полным отсутствием знаний SQL, очень базовым знанием Delphi и некоторыми знаниями, которые успел получить до этого в школе и универе (основы Basic, Prolog, List, C++). Так себе кандидат, но никто не горел желанием идти туда работать. Мне так и сказали: «Ты только приходи. Мы тебя всему научим.» И я пришёл.
Началось всё с автоматизации первого бетонного завода, которая должна быть готова через пару месяцев, к Новому году. Первым делом я взялся переписывать то, что было сделано предыдущим программистом и разбираться, что за зверь такой — RS-232 и протокол ModbusRTU, который я должен буду использовать для управления некими МДВВ и Мастером.
Первый блин был не комом, но подгорел немного. Но видеть, как оживает сначала одна железка, лежащая у тебя на столе, а потом целая линия на заводе — сравнимо разве что с первым сексом. Итог: приходит оператор на работу, включает всё железо, обогреватель в своей коморке и тепловую пушку в помещении с дозаторами,, садится за комп, запускает программу, выбирает нужный рецепт бетона, задаёт массу и жмёт на «Пуск». Сказка на этом заканчивается и начинается реальность. Щебень застыл на морозе и ещё не отогрелся. Оператор берёт кувалду и начинает бить по дозатору. Через несколько секунд щебень пошёл. Оператор возвращается и продолжает следить за процессом. И это лишь первая из десятков всевозможных проблем и затыков в производстве. И никакие сложности не должны мешать работать программе и железу (шкафу электроники и с управляющими реле).
Интересные задачи
Каждый раз было что‑то интересное. Самый запомнившийся проектом был, пожалуй, проект на создание экспериментального «аналога» американской установки по разделению материала на грязный (превышающий определённый радиоактивный фон) и чистый. Началось с того, что можно было сделать всё существенно проще и дешевле, но хотели «как у них». Когда установка была готова, её увезли, но вскоре (через несколько месяцев простоя где‑то на складе, когда при заказе она нужна была «вчера», как обычно) оказалось, что уже что‑то не работает. Так у меня случилась командировка на закрытое предприятие в закрытом городе. т. е. мало просто попасть в город, минуя посты, так ещё и предприятие охраняется как будто там суперсолдат выращивают. Пропускная похлеще, чем в аэропорту. И в складском помещении в 20 метрах от здания, на двери которого знак радиоактивной опасности, стояла наша установочка, которую мы благополучно оживили. Почему же она стояла без дела? Ждали главное действующее лицо — экспериментальный датчик из‑под Москвы, из другого научного центра. На выходе из предприятия я лишился ноутбука, т.к. он оказался оформлен недолжным образом, а выносить что попало оттуда нельзя. Как водится, всё было решено к утру.
Спустя ещё несколько месяцев установка‑таки оказалась там, где должна быть (наверно). И теперь предстояла уже её настройка с тем самым датчиком (своего рода особый счётчик Гейгера), который ещё и передавать информацию может. Так меня вызвали второй раз и я впервые оказался в Питере. Проездом. В Сосновый Бор. На другое закрытое предприятие. При входе ознакомили с инструкцией на случай радиоактивного заражения, одели в халат и дали специальное оборудование собой, а ещё талончик на обед. Пройдя через проходную и долго почти через всю территорию в самом последнем складском помещении с надписью 0,7 мкЗв на стене (если правильно помню. Хотя могло быть и 7). От входа в прямой видимости за деревьями где‑то в паре километров были видны градирни ЛАЭС.Половина помещения было заставлено ящиками, к которым не было большого желания подходить, а в середине свободного пространства была наша установочка. Так себе идея — пытаться настроить тонкое оборудование в помещении, в котором в десяти метрах от нас фон превышает тот, который считается «чистым» для материала. Тем не менее, у нас были оба образца и мы плодотворно поработали.
О прочих впечатлениях. На последнем этапе производства цемента такой шум от тысяч шаров, перемалывающих в огромных барабанах готовый продукт, что можно орать со всей дури собеседнику в ухо и тебя не услышат.
Сложно ли быть руководителем в ИТ?
Я бы не мог ответить на этот вопрос, если бы однажды мой начальник не сказал: «Я устал, я ухожу.» Он начал компанию, когда я ещё пешком под столом ходил. Через год он сказал, что теперь точно уходит, но за этот год что‑то поменялось у меня в голове и я предложил ему просто переоформить фирму на меня. Так и сделали. Коротко: это был полезный опыт.
Если подробнее, то я был к этому максимально не готов. Я понял, что ненавижу бухгалтерские процессы. Один день в месяц из‑за этого я не любил свою работу. Разрабатывать ПО — как это просто! Быть директором без опыта и знаний для этого — это очень трудно! Но интересно! Надо искать клиентов, встречаться с ними (зачастую в других городах), договариваться, считать стоимость, обсуждать ТЗ, составлять договор, делегировать задачи, договариваться с подрядчиками, собирать оборудование, писать ПО (я продолжал этим заниматься, тем более, что на тот момент процессы уже были отлажены), устанавливать оборудование, приезжать по запросу «у нас ничего не работает» и объяснять, как не надо и как надо делать, приезжать снова, подписывать акт выполненных работ, получать деньги, приезжать снова, но уже за деньги, допиливать функциональность по запросу и т. д.
Мой офис был дома, два других сотрудника работали по факту наличия работы (занимаясь в свободное время своими делами). На дворе был 2013-й год. У нас была удалёнка ещё за много лет до того, как это стало мейнстримом.
Сложно договариваться с безопасностью?
Странный вопрос. Договориться можно о чём угодно. Даже о возврате ноута из закрытого предприятия. А главные вопросы безопасности в нашем случае — это безопасность труда. Это не работа с табличками в офисе. Тут железо работает, которое легко может лишить конечности или даже жизни. Поэтому все возможные ситуации должны быть предусмотрены. И кнопка экстренной остановки в программе, и кнопка стопа в релейном шкафе, и отдельные средства защиты на этапе производства/монтажа оборудования (тросик экстренной остановки вдоль конвейера, датчик открытия крышки бетонного смесителя и т. д.). Так что защите здоровья с нашей стороны уделялось особое внимание.
Касательно безопасности ещё стоит упомянуть юридическую. Перед тем, как начать делать аналог американской установки, нам прислали договор, который стоило очень внимательно прочитать. По нему получалось, что при любом чихе мы должны были нести всевозможные издержки, а заказчик — ничего. По договору получалось так, что мы должны были начать делать за свой счёт, потом заказчик мог передумать и просто расторгнуть договор. В итоге мы бы остались без денег с никому не нужным железом. Три месяца я общался с их юристами, объясняя, почему мне это не нравится. В итоге наша взяла. Был подписан наш стандартный договор с добавлением одного абзаца из их договора. Заказчики были адекватными, но даже если вы им всецело доверяете, в договоре нужно исключить всевозможные моменты, где вы можете просто остаться без денег.
Импортозамещение как-то влияло на твою работу?
Компания с самого основания сначала занималась разработкой собственных контроллеров, а затем перешла на использование промышленных российского производства и до самого последнего года использовали только российское оборудование (кроме компьютеров, конечно). т. е. мы занимались импортозамещением, когда это ещё не было...
Но в одной из последних работ поступил заказ на подсчёт количества наполненных пакетов для наполнителей кошачьих туалетов. (Тогда я узнал, что некоторые иностранные наполнители от российских отличаются лишь упаковкой.) Было три контроллера (на двух из которых работали)., из которых надо было собирать информацию о количестве отдозированного материала. И я понял, что это прекрасная возможность использовать Raspberry Pi! В магазине была куплена китайская пластиковая коробочка, заказан китайский блок питания, умещающийся в неё, использован китайский переходник USB/RS-485 с «Алишки» (российский был сделан по спецификации и потому были проблемы со стартом на Линуксе, а китайский просто всегда работал). Также был куплен светодиод и на 3D‑принтере распечатано крепление на дин‑рейку для «малинки» (фото ниже). В итоге программа на Go при запуске начинала мигать светодиодом, информируя о том, что работает, и, постоянно опрашивая контроллеры, в нужный момент сохраняла полученную информацию. А потом уже специально обученный сотрудник в программе на Delphi печатал отчёты за смену.
А стек разработки в промышленном IT-кластере отличается от стека классических IT компаний?
Смотря какая промышленность. У нас было всё очень просто. Программа на Delphi, БД Firebird, отчёты на MS Excel, OOo Calc (предок Libre Office) или Fast Reports. Одна разработка была на Go, как написал выше.
Не все программы нужно или могут быть написаны как обычное приложение. Несколько программ было написано для программируемых контроллеров с использованием CoDeSys. Там внутри 5 языков, которые можно комбинировать. Мне всегда хватало трёх из них: блок‑схемный (FBD), паскалеподобный (ST) и ассемблероподобный (IL). Особенность разработки для контроллеров в том, что написанный код будет выполняться в бесконечном цикле и нужно писать его, учитывая эту особенность.
В целом, на предприятии можно использовать что угодно, в зависимости от задач.
Как насчёт тусовок IT-шников для заводов?
Странный вопрос, но какой есть. IT‑шники, работающие для предприятий, ничем не отличаются от остальных и также посещают разные мероприятия. Просто у нас есть ещё и куча интересных промышленных выставок, где можно что‑то новое и интересное найти. Например, гибкий шнек для подачи цемента. Никогда не использовали, но звучит интригующе...
И пара слов о разработке
На этой работе я как нигде после понял, что такое распараллеливание и синхронизация потоков, а ещё применял разные популярные паттерны, ещё не зная об их существовании.
Работа с оборудованием. Только синхронная и бесконечная. У меня обычно было три очереди команд: на работу с весовыми контроллерами, на работу с управляющими контроллерами и ошибки. Всё это отображалось на главной форме приложения (мнемосхеме). Отдельный поток постоянно проверял очереди, постоянно подкидывая команд на чтение, когда очередь команд заканчивалась. Команды на запись имели более высокий приоритет и добавлялись в начало. Отдельный таймер на форме постоянно читал полученные данные из устройств и отображал на мнемосхеме в виде анимации, полос загрузки, чисел и т. д. Анимацией мы показывали состояние оборудование (открыто/закрыто или включено/выключено), в случае несоответствия ожидаемого состояние с реальным рядом мигала черепушка красным цветом. Полосы загрузки показывали заполнение дозатора относительно заданного веса. и т. д.
При дозировании бетона можно двигаться шаг за шагом, а можно сделать по‑умному. Если смеситель у нас на 0,5 кубов, а нужно 1,2, то мы дозируем три раза по 0,4. т. е. каждый дозатор и смеситель должны отработать по 3 раза. Таким образом, когда отрабатывает дозатор и материал сбрасывается в смеситель, он не ждёт следующего цикла, а сразу же начинает свой, если этот не последний. Но они не могут сбрасывать, пока не отработает предыдущий цикл в смесителе. Тут была довольно занимательная работа с потоками, отдельным для каждого дозатора, системы сброса и смесителя.
Но для особых случаев предусмотрен и ручной режим, когда оператор самостоятельно курсором управляет оборудованием и начинает дозирование после ручного ввода нужных значений.
Результаты дозирования сохраняются в базу, чтобы потом использовать для разного рода отчётов. В т..ч. при ручном дозировании, чтобы не было возможности что‑то отгрузить налево. В этом, как правило, и состоит задача автоматизации в России. Лишь в одном случае делали ускоренный переход с ручного дозирования на автоматику, т.к. завод получил заказ на поставку бетона для строительства моста и нужна определённая точность дозирования. Наша система, даже с учётом погрешностей датчиков, на новом оборудовании обычно укладывалась в 0,5%.
Заключение
Вот такая у меня была работа. Сложная, но невероятно интересная!
Ещё можно написать про другие командировки. Про отладку на заводе с 8 утра до полуночи, про ледяные, шумные, пыльные помещения. Про крики по рации: «Останавливай!» Про споры и маты. Про неработающие датчики, выходящее из строя оборудование, заваленный с горкой смеситель и т. д. Но это было действительно увлекательно и я рад, что получил такой интереснейший опыт.
С тех пор я ни раз думал о том, чтобы вернуться к разработке для предприятий (не только ПО, но и железа), но что‑то мне подсказывало (особенно в последние годы), что уже не стоит. Пусть этим занимаются другие. Хотя однажды нашим соседям предстоит восстанавливать целые города и им понадобится очень много бетона хорошего качества и любая помощь. Так что посмотрим...
Комментарии (18)
lumen_xp
02.08.2024 00:08+3Смотрю опять на фото с пром. площадок и опять капает кровь из глаз из-за качества монтажа кабельных проводок. Ну неужели нельзя сделать нормально???? Людям потом это эксплуатировать и как-то поддерживать в рабочем состоянии нужно. Кидаем витуху на донгл RS485 и плевать что моножила, плевать что клеммник сдохнет при втором перемонтаже. У нас нет 1000 руб на промежуточный клеммник, только хардкор, все что пришло с поля сразу в железо суем. Витуха промышленная 6 категории и коннектов из днс самый дешевый, опять же зачем думать когда нужно делать, отвалится после ПНР - забота не наша.
zerocooolx
02.08.2024 00:08Ладно моножила витая, вот когда на ней сэкономили и она ещё и алюминиевая с омеднением ...
lumen_xp
02.08.2024 00:08+2Смотрю опять на фото с пром. площадок и опять капает кровь из глаз из-за качества монтажа кабельных проводок. Ну неужели нельзя сделать нормально???? Людям потом это эксплуатировать и как-то поддерживать в рабочем состоянии нужно. Кидаем витуху на донгл RS485 и плевать что моножила, плевать что клеммник сдохнет при втором перемонтаже. У нас нет 1000 руб на промежуточный клеммник, только хардкор, все что пришло с поля сразу в железо суем. Витуха промышленная 6 категории и коннектов из днс самый дешевый, опять же зачем думать когда нужно делать, отвалится после ПНР - забота не наша.
andmerk93
02.08.2024 00:08+3Ты так говоришь, как будто это не требования заказчика, чтоб "побыстрее и подешевле".
kompilainenn2
02.08.2024 00:08Когда заказчик не шарит, то ему втюхивают задорого шлак, говорю, как заказчик
alexhu
02.08.2024 00:08+1А зимой ещё костры по всему заводу, что-бы отогреть воду, воздух, гидравлику и другие материалы.
freemanon
02.08.2024 00:08+1Для распбери есть корпуса на din-рейку
8street
02.08.2024 00:08+1Не приведи господь ставить малинку в промышленность. Лучше уж пром. компьютер на линуксе, у которого и корпус защищен и температурные режимы нужные.
ProgerMan Автор
02.08.2024 00:08Конечно, лучше. Но не всегда это нужно. Всё зависит от того, что хочет заказчик. Нужно было быстро и дёшево решить одну конкретную задачу. Помещение не жаркое, сухое, почти без пыли. Было сделано по ТЗ. Заказчика всё устроило. Ежемесячно были отчёты о порядка миллиона отгруженных мешков и после этапа дозирования сотрудники уже не могли незаметно вынести с собой мешок-другой.
К тому же, если заказчик просит условное решение за $100, а вы решаете использовать железо за $200, то вы не только не получите прибыль, но и заплатите из своего кармана.И ту же экспериментальную установку из статьи мы могли сделать существенно компактнее, гораздо производительнее и раза в 2 дешевле. Но заказчик отказался от нашего предложения, потому что надо было "как у них". Кто мы такие, чтобы спорить? Сделали всё по ТЗ. Результат устроил. Хотя, мне кажется, намучались они потом с ней.
UranusExplorer
02.08.2024 00:08+10Ох. Как это все очень знакомо. Я учился на инженера-электроника, немало лет после выпуска проработал именно в промышленной автоматизации. Именно по той же самой причине - было интересно копаться с железками и хотелось делать что-то "в реальном мире". Тоже программировал и налаживал шкафы автоматики и скады для разных производств (в основном нефтегаз), потом ещё по "сарафанному радио" новые заказчики начали выходить уже непосредственно на меня и предлагать работу. Но потом разочаровался в профессии, сменил специализацию и возвращаться обратно не хочу от слова совсем.
А причин, о которых обычно умалчивают в таких воодушевляющий статьях, несколько.
Первая - это постоянные разъезды. Сначала в этом, конечно, есть свой драйв и элемент приключения, но потом начинает угнетать. Потому что далеко не всегда "командировка" - это съездить куда-нибудь неподалеку или в большой город на пару дней. Нередко (когда запускается большой объект, или же просто идёт наладка чего-то принципиально нового) ехать придется на всю неделю, а потом ещё на всю неделю, а потом ещё на всю неделю, и так далее. И такое ощущение, что жизнь проходит мимо, и вся жизнь - это лишь работа. Твои друзья проводят время вместе, занимаются интересными хобби, гуляют с девушками, а ты появляешься дома только на выходные (и то не всегда), а все остальное время сидишь в какой-нибудь богом забытой дыре, где из развлечений только алкоголизм и созерцание советской архитектуры (а иной раз и архитектуры нет, тогда созерцание грибов). И это если у тебя ещё семьи нету, если есть, то совсем труба. И живёшь нередко в командировках либо в единственный на городок убитой гостинице (не видавшей ремонта с советских времён), либо в общаге с вахтовиками (вообще не советую). Плюс переработки, но не то чтобы тебя заставляют их делать, о нет, ты захочешь их сам - потому что пока работа не сделана, ты так и будешь постоянно ездить на этот объект, и в твоих личных интересах сделать все как можно быстрее чтобы вернуться обратно раньше.
Второе - общий технический уровень в плане разработки. Даже в наши дни на некоторых вполне серьезных и уважаемых предприятиях в отрасли до сих пор не слышали про git и контроль версий, а версионирование делается копированием в новую папочку на сетевом диске. За фразу "давайте вот тут добавим юнит-тесты" могут дать в морду. А уж как асушники и эмбеддеры пишут на языках общего назначения (когда МЭКовских и скадо-скриптовых языков для какой-то задачи не хватает) можно вообще слагать легенды, об этом отличная статья была.
Третье - это отношение к работникам со стороны руководства. Многие руководители подобных предприятий застряли в 90-х годах и не собираются оттуда выползать. Там можно встретить и "я начальник, ты дурак" в чистом виде, и "вас очередь за забором стоит", да и в целом отношение типа "я сам всю жизнь за копейки пахал, с чего это я этим буду платить много? перебьются!". Нередко огромное количество "Александров Ивановичей" и "Евгений Николаевичей", каждый со своим мнением, обожающих служебки и перекладывание ответственности. Ну и сама профессия такая, что часто приходится в одиночку делать работу четверых (ты и программист, и наладчик, и аналитик-технолог, и черт знает кто ещё). В итоге ты смотришь на своих бывших сокурсников, которые пошли по другому пути и работают в "чистом" IT, на удалёнке (работая на столицы или даже на забугор), либо в уютных офисах, со всякими плюшками (ДМС, поездки на конференции, и прочие бенефиты), при этом имея гораздо меньше ответственности и мозгое@#ли, при сопоставимом оплате получают зарплаты в полтора-два, а то и в три раза больше, и становится совсем грустно.
Поэтому я ушел из этой отрасли. Долгое время меня остаавливало именно мышление типа "тут интересно, железки, реальное производство, а там в айти только тупой вебдев и перекладывание джейсонов из микросервиса в микросервис". Оказалось, что я сильно ошибался, и кроме "перекладывания джейсонов" "там" есть ещё огромное количество всего интересного и не банального. При этом с гораздо более комфортными условиями и гораздо более высокой оплатой. А на заводе пусть кто-нибудь другой автоматизирует.
Willy64
02.08.2024 00:08+1приходится в одиночку делать работу четверых (ты и программист, ...
и электромонтажник и КИПовец и постановщик задач.
Согласен практически со всем, но хочу добавить, что при такой работе быстро растет кругозор и навык решения разных задач, что может помочь в карьере. Впридачу появляется много профессиональных связей и репутация в отличие от постоянной работы в одном офисе.
Вопрос про контроль версий - как его осуществлять, если в среде разработки он не предусмотрен (а простой архив проекта занимает 100Мб и более)? Таких всё ещё полно даже среди самых современных.
slonpts
02.08.2024 00:08А почему не годятся отдельные git клиенты, коих под любую платформу хватает - TortoiseGit, SourceTree и т.д? Или консольный git для любителей хардкора.
Willy64
02.08.2024 00:08+2Потому что "проект" хранится как БД и нет возможности работать с текстом программ отдельно от среды программирования.
UranusExplorer
02.08.2024 00:08Git и подобные позволяют работать и с бинарными блобами, даже с большими на сто мегабайт. Да, diff'в красивые уже будет не посмотреть, как и конфликты удобно не разрулить, но это всё-таки гораздо лучше, чем копировать вручную по папочкам.
Ну и речь не только про отсталые среды разработки (да и у них эта вся отсталость от лени сделать нормально, потому как например код программы на ST или скрипта в скаде - это чистый текст, да и для визуальных языков и разметки варианты контроля версий тоже существуют).
Проблема в том, что люди, привыкшие работать так, свои привычки переносят и на другие вещи, например, когда нужно написать уже на C# или простигосподи Delphi какой-нибудь адаптер для выгрузки отчётов из БД скады в БД какой-нибудь другой системы на производстве, или DLL'ку на C++ для OPC-сервера чтобы добавить какой-нибудь редкий протокол, там будет все то же самое, даже если среда разработки все прекрасно позволяет (мол, здесь так принято, дела страдали, и мы будем страдать, зачем нам все эти хипстерские штуки).
oldnomad
02.08.2024 00:08Ох, как всё знакомо...
Когда-то в программистской молодости я наблюдал как толпа из примерно сотни очень раздражённых мужчин вручную затаскивает на высоту пятого этажа цепь нории (вертикального конвеера), порванную из-за разгона до запредельной скорости. И размышлял над тем, что эти мужчины сделали бы с программистом, перепутавшим оператор сравнения. Код был не мой, но с тех пор я очень внимательно тестирую свои программы. В продуктовой разработке такой наглядный опыт получить сложнее.
vR4eslav
Спасибо за статью! Сейчас очень многие недооценивают, кмк, железячное программирование, хотя более не-рутинного программирования в большинстве случаев я себе не представляю, когда кругозор требуется не только в редакторе кода, но и в реальной жизни. Не говоря о том, что квалификация выходит за рамки программирования, что создаёт гигантский иммунитет к выгоранию посредством интересных новых задач. Make factories great again!