🔥

Тред (Николай Говоров)


Конечная цель — создать пайплайн, в котором можно отследить полный путь продукта, от первых измерений реактивов в исследовательской лаборатории, и температуры в комнате в этот момент, до упаковки ампулы в коробку.

С другой стороны, мы стараемся избавлять коллег от ненужной бумажной работы — зачем писать измерение с весов в бумажный журнал, если можно было бы собрать его сразу с прибора и тут же связать с данными о исследовании?

Соответственно, мы работаем с двумя основными блоками оборудования: лабораторным (весы, поляриметры, иономеры, жидкостные хроматографы, etc) и производственным оборудование (холодильники, биореакторы, etc), и это два совсем разных кейса.

Лабораторное оборудование, можно условно разделить на обычные приборы, и те у которые есть встроенные комп со своей ОС. Ключевым отличием именно лабораторных железок, в том что они, во-первых, не всегда имеют програмный интерфейс, а во-вторых их много и они разных.

Например, в лабах сотни весов, десятка производителей которые постепенно закупаются 20 лет. На самых новых уже есть какой-то API, на более старых COM порт на принтер чеков. В некоторых есть дополнительный функционал вроде авто-калибровки или измерения влажности, а в других нет.

Другая проблема — не все устройства достаточно производительны чтобы резолвить DNS и могут только открыть TCP-сокет по прямому IP. Другими словами, универсально мы можем гарантировать, что любая железка может записать буфер текста с чеком по IP. Дальше, следите за руками

На каждое устройство написан парсер, который преобразует буфер в текста в универсальную структуру. Берём виртуалку, на ней стартует сервер который занимает промежуток портов, скажет 10000-15000. Порт это id устройства, по порту на каждый тип.

Сервер смотрит на какой порт приехал запрос, выбирает парсер, пробует разобрать чек. Если получилось, то отправляет структуру в очередь на дальнейшую обработку, иначе записывает сырой чек в базу и алертит. Универсальное правило — хранится вообще всё, битые чеки тоже.

Дальше данные будут слинкованы со всем что мы знаем — пользователь который делал измерение, эксперимент, раствор (для весов) пластина (для поляриметра), температура/влажность в помещении. Запись уезжает в базу и с этого момента её менять нельзя.

С этого шага данные доступны на фронте. Базовая задача — построить по ним отчёт, показать кто что и когда. Вроде такого:
notion image

С производственным оборудованием интереснее — установка одинаковые, и часто сделаны нашими конструкторами. С другой стороны, с ними нужно быть осторожнее — будет обидно по глупости испортить 2000 литров клеточной массы созревающую вторую неделю из-за ошибки.
notion image

Сердце каждой установки — ПЛК, программируемый логический контроллер. Это промышленный стандартизированный контроллер в который заведены все датчики, механика, он же подключен к сети. ПЛК может удалённо управляться по протоколу mqtt

Контроллер работает просто — с заданной частотой, он полностью выполняет всю свою программу от и до. На каждом шаге берёт данные из оперативной памяти и использует их как параметры — нужно ли открыть заслонку, или, может поднять температуру.

Для каждого датчика в системе задаётся 4 параметра: hh — верхний аварийный h — верхний предупредительный l — нижний предупредительный ll — нижний аварийный. Соответсвенно, предупредительный означает что что-то идёт не так, аварийный что всё сломалось.

Примерно каждую секунду мы собираем данные с установок и архивируем в Click House. Если есть предупреждения/аварии то рассылаем в алерты инженерам, чтобы бежали чинили.

Дальше вступает веб и позволяет отслеживать данные с этих установок
notion image