Испытательная лаборатория строительных материалов в Ташкенте проверяет бетон, кирпич и арматуру для застройщиков. Программу для её стендов, на которой сейчас работают лаборанты, сделал Евгений Росляков. Разрабатываю программы с 2016 года, работаю как самозанятый: договор, оплата по этапам, закрывающие документы. Живу в Москве и с лабораторией работал удалённо: мне дали доступ к стендовому компьютеру и прислали записи испытаний.
Главный стенд — гидравлический пресс, который давит на бетонные кубы до разрушения. Датчик силы и датчик перемещения подключены к плате сбора данных. Испытание длится несколько минут, а его результат идёт в протокол, по которому застройщик принимает партию бетона.
Сбор данных был написан в LabVIEW много лет назад, и эта часть работала надёжно. Проблемы были вокруг неё. Интерфейс оператора вырос из инженерной отладки: десятки индикаторов, кнопки без подписей, настройки калибровки на том же экране, что и кнопка «Старт». Однажды лаборант случайно сдвинул коэффициент датчика, и неделю испытаний пришлось перепроверять.
Протоколы делала отдельная утилита на REALBasic, которую написал бывший сотрудник. Она читала файлы испытаний и собирала документ. На новом компьютере утилита запускалась через раз, исходники нашлись, но старая среда разработки на нём уже не ставилась.
Первым делом решил, что не трогать. Сбор данных в LabVIEW точный, проверенный и привязан к плате сбора, у лаборатории на него действующая лицензия. Переписывать его ради красоты значило бы рисковать главным: точностью измерений. Поэтому LabVIEW остался ядром, а всё вокруг него я сделал заново.
Ядро на LabVIEW превратил в тихую службу без интерфейса. Она отвечает только за сбор: старт, стоп, поток значений силы и перемещения, сохранение сырого файла. С внешним миром общается через локальный канал по простому текстовому протоколу.
Интерфейс оператора — новое Windows Desktop приложение на C#, написанное в Microsoft Visual Studio. Экран испытания простой: номер образца, кнопка «Начать», большой график силы во время нагружения и результат после разрушения. Калибровка и настройки вынесены в отдельный раздел с паролем инженера лаборатории. Коэффициенты датчиков больше нельзя сдвинуть случайно.
Несколько вещей сделал через Windows API. Стендовый компьютер работает в режиме киоска: при включении сразу открывается программа, рабочего стола и лишних окон лаборант не видит. Во время испытания система не уходит в сон и не перезагружается ради обновлений. Если программу закрыли посреди испытания, служба сбора данных продолжает писать файл, и результат не теряется.
Утилиту на REALBasic разобрал по исходникам. Из неё взял формулы пересчёта силы в прочность с учётом размера куба и шаблон протокола, согласованный с застройщиками. Формулы проверил на архиве прошлых испытаний: новые протоколы совпали со старыми цифра в цифру. Протокол теперь собирается в той же программе одной кнопкой и сохраняется в PDF.
Журнал испытаний ведётся автоматически: кто, когда, какой образец, какой результат. Перепечатать протокол можно в любой момент, исправить результат задним числом нельзя.
Лаборант работает с понятным экраном и не может случайно сломать настройку. Новый сотрудник лаборатории освоил стенд за одну смену, по короткой памятке.
Протоколы выходят сразу после испытания, без переноса файлов во внешнюю утилиту. Цифры совпадают с прежними, а журнал защищает лабораторию при спорах с застройщиками: видно, когда и кем сделано каждое испытание.
Ядро сбора данных осталось тем же, что и было, поэтому повторная проверка стенда метрологами не понадобилась. Это была одна из причин не переписывать LabVIEW.
Ограничение честное: лаборатория по-прежнему зависит от LabVIEW и его лицензии. Если когда-нибудь придётся уходить с этой среды, переписывать надо будет только службу сбора данных, а интерфейс и протоколы останутся.
Сейчас подключаем к той же программе второй стенд, для испытаний арматуры на разрыв.
Если у вас стенд с программой, которая выросла из отладки и пугает новых сотрудников, напишите мне через freelance.ru. Посмотрю, что можно оставить, а что лучше пересобрать.