Конечная цель — создать пайплайн, в котором можно отследить полный путь продукта, от первых измерений реактивов в исследовательской лаборатории, и температуры в комнате в этот момент, до упаковки ампулы в коробку.
С другой стороны, мы стараемся избавлять коллег от ненужной бумажной работы — зачем писать измерение с весов в бумажный журнал, если можно было бы собрать его сразу с прибора и тут же связать с данными о исследовании?
Соответственно, мы работаем с двумя основными блоками оборудования: лабораторным (весы, поляриметры, иономеры, жидкостные хроматографы, etc) и производственным оборудование (холодильники, биореакторы, etc), и это два совсем разных кейса.
Лабораторное оборудование, можно условно разделить на обычные приборы, и те у которые есть встроенные комп со своей ОС.
Ключевым отличием именно лабораторных железок, в том что они, во-первых, не всегда имеют програмный интерфейс, а во-вторых их много и они разных.
Например, в лабах сотни весов, десятка производителей которые постепенно закупаются 20 лет.
На самых новых уже есть какой-то API, на более старых COM порт на принтер чеков.
В некоторых есть дополнительный функционал вроде авто-калибровки или измерения влажности, а в других нет.
Другая проблема — не все устройства достаточно производительны чтобы резолвить DNS и могут только открыть TCP-сокет по прямому IP.
Другими словами, универсально мы можем гарантировать, что любая железка может записать буфер текста с чеком по IP.
Дальше, следите за руками
На каждое устройство написан парсер, который преобразует буфер в текста в универсальную структуру.
Берём виртуалку, на ней стартует сервер который занимает промежуток портов, скажет 10000-15000.
Порт это id устройства, по порту на каждый тип.
Сервер смотрит на какой порт приехал запрос, выбирает парсер, пробует разобрать чек.
Если получилось, то отправляет структуру в очередь на дальнейшую обработку, иначе записывает сырой чек в базу и алертит.
Универсальное правило — хранится вообще всё, битые чеки тоже.
Дальше данные будут слинкованы со всем что мы знаем — пользователь который делал измерение, эксперимент, раствор (для весов) пластина (для поляриметра), температура/влажность в помещении.
Запись уезжает в базу и с этого момента её менять нельзя.
С этого шага данные доступны на фронте.
Базовая задача — построить по ним отчёт, показать кто что и когда.
Вроде такого:
С производственным оборудованием интереснее — установка одинаковые, и часто сделаны нашими конструкторами.
С другой стороны, с ними нужно быть осторожнее — будет обидно по глупости испортить 2000 литров клеточной массы созревающую вторую неделю из-за ошибки.
Сердце каждой установки — ПЛК, программируемый логический контроллер. Это промышленный стандартизированный контроллер в который заведены все датчики, механика, он же подключен к сети.
ПЛК может удалённо управляться по протоколу mqtt
Контроллер работает просто — с заданной частотой, он полностью выполняет всю свою программу от и до.
На каждом шаге берёт данные из оперативной памяти и использует их как параметры — нужно ли открыть заслонку, или, может поднять температуру.
Для каждого датчика в системе задаётся 4 параметра:
hh — верхний аварийный
h — верхний предупредительный
l — нижний предупредительный
ll — нижний аварийный.
Соответсвенно, предупредительный означает что что-то идёт не так, аварийный что всё сломалось.
Примерно каждую секунду мы собираем данные с установок и архивируем в Click House. Если есть предупреждения/аварии то рассылаем в алерты инженерам, чтобы бежали чинили.
Дальше вступает веб и позволяет отслеживать данные с этих установок