Требования к приборам и расходникам
Различайте номинальное описание модели прибора и текущую конфигурацию физического экземпляра этой модели.
Описание модели прибора должно содержать:
- ссылку на схему в объекте schema (as in 🔗 1. Версионирование схемы);
- номер ревизии описания;
- уникальный идентификатор модели (as in 🔗 FMT-001);
- непустое название title;
- непустой номер изделия part_number;
- короткое описание модели;
- список совместимых защитных колпачков supported_sleeves;
- список совместимых планшетов supported_plates;
- описание нагревателей;
- описание двигателей;
- описание посадочных мест;
- список максимально поддерживаемых моделью capabilities.
Используйте в capabilities модели идентификаторы возможностей из [LINK: DEVICE-CAPABILITIES].
| tag | description | g-codes |
|---|---|---|
| motion_absolute | поддерживается движение осей в абсолютном режиме | G0, G1 |
| homing | поддерживается уход в нулевую позицию | G28 |
| mixing_time | поддерживается перемешивание по времени | M56 |
| mixing_cycles | поддерживается перемешивание по количеству циклов | M57 |
| motion_configuration | поддерживается управление скоростью перемещения | M789 |
| temperature_control | поддерживается ручное управление нагревателем | M104, M105 |
| temperature_wait | поддерживается ожидание достижения целевой температуры | M109 |
| sleeves_detection | поддерживается проверка наличия защитных насадок | M410, M411 |
| offsets_configurations | поддерживается работа с предустановленными наборами оффсетов | M420 |
| plate_detection | поддерживается проверка наличия планшетов | M600 |
| uv_sterilization | поддерживается УФ-стерилизация | x |
| status_leds | поддерживается управление RGB-светодиодами | M300, M301, M302 |
| notify_beeper | поддерживается управление buzzer | M500, M501 |
| safety_interlocks | поддерживается контроль двери, кнопки питания | x |
| power_management | поддерживается контроль цепей питания, управление питанием | x |
Описание двигателя модели должно содержать:
- код оси одной буквой;
- название оси;
- параметр микрошага;
- минимальную и максимальную координату в мм (as in 🔗 UNIT-001);
- минимальную и максимальную скорость в мм/мин (as in 🔗 UNIT-005).
Достаточное количество информации для преобразования в команды перемещения в формате G-Code
Описание посадочного места должно содержать:
- порядковый номер от 1 до 5;
- координата в мм (as in 🔗 UNIT-001);
- список capabilities;
- если в capabilities указан heating, локальный heater_id нагревателя модели.
Описывайте возможности каждого места
| tag | description |
|---|---|
| heating | доступен нагреватель |
Описание нагревателя модели должно содержать:
- локальный строковый id;
- минимальную и максимальную температуру в градусах Цельсия (as in 🔗 UNIT-003).
Описание экземпляра прибора должно содержать:
- ссылку на схему в объекте schema (as in 🔗 1. Версионирование схемы);
- номер ревизии описания;
- уникальный uid физического прибора (as in 🔗 FMT-001);
- model_uid модели прибора;
- непустой serial_number;
- версии программного обеспечения и firmware;
- оффсеты двигателей;
- адреса нагревателей;
- список фактически доступных capabilities.
- DEV-008 Ссылка экземпляра на модель (RefinedBy)
- DEV-009 Идентификация экземпляра (RefinedBy)
- DEV-010 Версии программного обеспечения экземпляра (RefinedBy)
- DEV-011 Оффсеты двигателей экземпляра (RefinedBy)
- DEV-012 Адреса нагревателей экземпляра (RefinedBy)
- DEV-013 Возможности экземпляра (RefinedBy)
- DEV-015 Ревизия описания экземпляра (RefinedBy)
- DEV-016 Экспорт описания экземпляра (RefinedBy)
Связывайте экземпляр с моделью через model_uid в формате UUID. Ссылка должна указывать на существующее описание модели прибора.
Храните uid экземпляра неизменным в течение срока службы прибора. Храните заводской серийный номер в непустом serial_number.
Указывайте текущие software_version и firmware_version экземпляра непустыми строками.
Описывайте оффсет двигателя объектом с однобуквенным кодом axis и числовым offset_mm в миллиметрах. Код оси должен существовать в описании модели, а в одном описании экземпляра ось не должна повторяться.
Связывайте адрес нагревателя с локальным heater_id из модели. Адрес должен быть целым числом от 1 до 255; heater_id и адрес не должны повторяться в одном описании экземпляра.
Используйте в capabilities экземпляра идентификаторы из 🔗 DEVICE-CAPABILITIES. Список описывает фактически доступную конфигурацию, а не временную работоспособность устройства.
Каждая capability экземпляра должна присутствовать в capabilities связанной модели. Допускайте отсутствие у экземпляра части возможностей модели.
Увеличивайте revision описания экземпляра после изменения software, firmware, оффсетов, адресов нагревателей или фактически доступных capabilities.
Формат описания экземпляра должен позволять управляющему ПО экспортировать собственную идентичность и текущую конфигурацию без включения оперативного состояния, ошибок и измерений.
Описание расходника должно содержать объект schema со значениями:
- name -- syntol.labware.*;
- revision -- положительная целочисленная ревизия схемы (as in 🔗 1. Версионирование схемы).
Не храните в описании планшета список совместимых колпачков и не храните в описании гребёнки список совместимых планшетов.
Модель прибора должна определять допустимые планшеты и колпачки независимыми списками. Принадлежность расходников этим спискам является достаточной проверкой совместимости.
Описание планшета должно содержать объект schema со значениями:
- name — syntol.labware.plate;
- revision — положительная целочисленная ревизия схемы (as in 🔗 1. Версионирование схемы).
Поле labware_kind должно иметь значение plate.
Описание планшета должно содержать изготовителя manufacturer, каталожный номер catalog_number и тип упаковки package_type.
Неизвестное значение должно быть записано как null, а не как пустая строка или предполагаемое значение.
Описание планшета должно содержать положительные габариты расходника width, depth и overall_height в объекте dimensions_mm (as in 🔗 UNIT-001).
Объект well_layout должен содержать положительные целые rows, columns и total_wells.
Количество лунок должно удовлетворять равенству rows * columns = total_wells.
Объект well должен содержать bottom_offset_mm и top_offset_mm — высоты внутреннего дна и верхней границы лунки в миллиметрах относительно поверхности, на которую установлен планшет (as in 🔗 UNIT-007).
Заданные значения должны быть конечными неотрицательными числами, причём bottom_offset_mm < top_offset_mm.
Объект well должен содержать объёмы на одну лунку в микролитрах (as in 🔗 UNIT-002):
- положительный общий объём total_volume_ul — физическую вместимость лунки;
- положительный эффективный объём effective_volume_ul — наибольший объём жидкости, который не вытесняется наружу при полном погружении совместимого защитного колпачка.
Оба значения должны быть заданы числами, отличными от null, причём total_volume_ul > effective_volume_ul.
Значение effective_volume_ul не должно определять совместимость планшета и колпачка и не должно использоваться для расчёта уровня жидкости после погружения колпачка.
Значение должно быть безопасным для полного погружения любого защитного колпачка, совместимого с планшетом согласно модели прибора.
Запрещайте неизвестные поля верхнего уровня и вложенных стандартных объектов.
Дополнительные данные разрешается хранить только в необязательном объекте extensions. Имя каждого расширения должно быть пространством имён из строчных латинских букв и цифр с разделителем ., _ или -; например, syntol.migration.source.
Массив liquid_height_curve.points должен содержать не менее двух объектов с конечными неотрицательными volume_ul и height_mm.
Точки должны быть расположены по строго возрастающему объёму и строго возрастающей высоте. Точку (0 uL, 0 mm) разрешается добавлять только при наличии подтверждённых измерений, что нулевая высота соответствует внутреннему дну лунки.
Допустимую погрешность высоты определите до приёмки справочников. Добавляйте точки около дна и переходов формы, если проверка выявляет недостаточную точность. Не добавляйте точку (0, 0) без подтверждения её применимости. GeoJSON не используется: пары описывают физическую зависимость, а не географические координаты. Исполнитель выполняет интерполяцию. Этот документ определяет её смысл и эталонные результаты.
Храните зависимость высоты жидкости от объёма как массив пар в JSON.
Задавайте объём в микролитрах на одну лунку, а высоту в миллиметрах.
Относите таблицу к лунке без погружённого колпачка.
Храните не менее двух точек с конечными неотрицательными значениями.
Располагайте точки по строго возрастающему объёму и строго возрастающей высоте.
Описание гребёнки защитных колпачков должно содержать:
- объект schema с name: syntol.labware.sleeve-comb и положительной целочисленной ревизией revision (as in 🔗 1. Версионирование схемы);
- labware_kind со значением sleeve_comb.
Описание гребёнки должно содержать изготовителя manufacturer и номер детали изготовителя mpn.
Неизвестное значение должно быть записано как null, а не как пустая строка или предполагаемое значение.
Описание гребёнки должно содержать положительные целые rows и columns.
Ряды возрастают вдоль ширины, столбцы — вдоль глубины гребёнки при виде сверху.
Описание гребёнки должно содержать положительные размеры в миллиметрах (as in 🔗 UNIT-001):
- overall_height_mm — общую высоту гребёнки;
- working_length_mm — длину рабочей части колпачка;
- rod_diameter_mm — наружный диаметр погружаемой части.
Длина рабочей части не должна превышать общую высоту гребёнки.
Запрещайте неизвестные поля верхнего уровня.
Дополнительные данные разрешается хранить только в необязательном объекте extensions с именами в пространствах имён по правилу 🔗 2.3.9. Расширения описания планшета.