start
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| start [2024/10/22 20:03] – Imported from DOCX administrator | start [2024/11/28 18:38] (текущий) – [Материнская плата] administrator | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| - | ====== | + | ====== |
| - | ===== ===== | + | В устройстве выделяется 3 уровня программного обеспечения: |
| + | * верхний (пользовательский интерфейс оператора " | ||
| + | * основной (программное обеспечение основного вычислительного модуля); | ||
| + | * аппаратный (программное обеспечение модуля обладающего своим MCU); | ||
| - | | № байта | + | ===== Пользовательский интерфейс оператора (верхний уровень) ===== |
| - | | 0 | Start байт | + | Данный уровень программного обеспечения предназначен для взаимодействия оператора с прибором. |
| - | | 1 | Количество байт данных | + | Он обеспечивает: |
| - | | | + | * авторизацию пользователя в системе; |
| - | | | + | * логирование действий пользователя; |
| - | | | + | * отправки команды на выполнение рецепта; |
| - | | | + | * логирование действий элементов системы при выполнении рецепта; |
| - | | N | Данные | + | * остановку выполнения рецепта; |
| - | | N+3 | Stop байт | + | * логирование результатов выполнения рецепта; |
| - | | | | | | | + | * отображение в удобном для пользователя виде результатов выполнения рецепта (таблицы, |
| + | С точки зрения физического уровня пользовательский интерфейс (далее GUI) взаимодействует с основным вычислительным модулем (далее материнская плата) посредством USB, RS-232/485, Ethernet (LAN, Wi-Fi, GSM), Bluetooth. GUI отправляет команды управления (номера рецептов) в материнскую плату, где находится модуль исполнения рецептов, | ||
| + | |||
| + | Структура посылки верхнего уровня. | ||
| + | ^ № байта ^ | ||
| + | | 0 | ||
| + | | 1 | ID устройства | ||
| + | | 2 | Количество байт данных | 1…255 | ||
| + | | 3 | ID команды | ||
| + | | 4 | ID команды | ||
| + | | 5 | Данные | ||
| + | | 3 | ... | ||
| + | | N | ||
| + | | N+3 | ||
| - | ===== Структура посылки ===== | + | Перечень |
| + | ^ № П/П ^ ID команды ^ Описание | ||
| + | | 1 | 0x1000 | ||
| + | | 2 | 0x1001 | ||
| + | | 3 | 0x1002 | ||
| + | | 4 | 0x1003 | ||
| + | | 5 | 0x1004 | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID устройства | ||
| - | | 3 | Тип сообщения | ||
| - | | 4 | …\\ Данные | ||
| - | | | ::: | | | | | ||
| - | | N | ::: | 0x00…0xFF | ||
| - | | N+3 | Stop байт | ||
| - | ===== Перечень | ||
| - | | № | ID команды | ||
| - | | 1 | 0x1000 | ||
| - | | 2 | 0x1001 | ||
| - | | 3 | 0x1002 | ||
| - | | 4 | | | | ||
| - | | 5 | | | | ||
| - | | 6 | | | | ||
| - | | 7 | | | | ||
| - | | 8 | | | | ||
| - | | 9 | | | | ||
| + | ===== ПО материнской платы (основной уровень) ===== | ||
| + | Под основным уровнем программного обеспечения подразумевается программа выполняемая в основном вычислительном модуле. | ||
| + | Задачи данного программы уровня: | ||
| + | * Выполнение основной логике прибора (Модуль исполнения рецептов). В данном случае в приборе реализованы алгоритмы всех возможных рецептом. Каждый рецепт имей свой идентификатор доступный пользователя ПК. Так же данная программа хранит в себе все тайминги для выполнения рецептов и ключевые значения для проверки правильности его выполнения. В данном уровне кода реализованы все алгоритм сценариев отработки ошибок. Что имеется в виду — ошибка аппаратного уровня (модуля) может повлиять на работу не только самого модуля но и других узлов входящих в состав прибора. По этому основной уровень программного обеспечению все цело и полностью владеет информацией критериях ошибок от каждого из модулей и алгоритма поведения всего прибора при возникновении такой ошибки в одном из модулей. | ||
| + | * Возможность конфигурирования (Конфигурационный модуль). Основной код программы должен обеспечить получение от пользователя конфигурационных данных своего узла. Разбить эти данные на соответствующие конфигурационные параметры и отправить их соответствующему модулю аппаратного уровня. В случае отсутствие и аппаратного модуля (узла) своего собственного MCU (данный модуль подключен на прямую к вычислительному модулю по одному из физических интерфейсов SPI, I2C, UART и является ведомой периферией для вычислительного модуля), | ||
| + | * Взаимодействие с GUI (Модуль взаимодействия с GIU) производится через отправку следующих сообщений: | ||
| - | ===== Перечень типов сообщений протокола нижнего | + | a. Применить свойство. |
| + | б. Выполнить команду. | ||
| + | в. Вычитать | ||
| + | г. Отправить сообщение | ||
| + | Для такого взаимодействия доступны следующие физические интерфейсы (USB, RS-232/485, Ethernet (LAN, Wi-Fi, GSM), Bluetooth). | ||
| - | | № | ID команды | + | ==== Модуль |
| - | | 1 | 0xAA | Команда | | + | Задача модуля разложить рецепт согласно таблицы рецептов на выполняемые шаги и перечень устройств задействованных в данном шаге. |
| - | | 2 | 0xBB | Сообщение | + | |
| - | | 3 | 0xCC | Ошибка | | + | |
| + | ==== Конфигурационный модуль ==== | ||
| - | Команда установки времени (0x1000) | + | ==== Модуль взаимодействия с GIU ==== |
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x10 | ::: | Старший байт | ||
| - | | 4 | Устанавливаемое время | ||
| - | | … | ::: | … | | | | ||
| - | | 10 | ::: | … | | | | ||
| - | | 11 | Контрольная сумма | ||
| - | | 12 | ::: | 0x00…0xFF | ||
| - | | 13 | Stop байт | ||
| - | Формат упаковки времени | ||
| - | | № байта | + | ===== Аппаратный уровень ===== |
| - | | 4 | 0-7 | Миллисекунды | + | Данный уровень относится к модулям, |
| - | | 5 | 8-15 | ::: | 1…255 | + | 1. Самодостаточность: |
| - | | 6 | 16-21 | Минуты | + | 2. Зависимое: При всей своей самодостаточности устройство полностью зависимо от команд вычислительного модуля. По этим подразумевается |
| - | | ::: | 22-23 | Резерв не используется | + | |
| - | | 7 | 24-28в | + | |
| - | | ::: | 29-30 | Резерв не используется | + | |
| - | | | + | 3. уникальность. Каждый модуль будет иметь свой уникальный идентификатор (расширение на будущее). |
| - | | 8 | 32-36 | День месяца | + | (отработка данного подхода на модуле управления шаговыми двигателями) |
| - | | ::: | 37-39 | День недели | + | |
| - | | 9 | 40-44 | Месяц | + | |
| - | | ::: | 45-47 | Резерв не используется | + | |
| - | | 10 | 48-54 | Год | + | |
| - | | ::: | 55 | Резерв не используется | + | |
| - | **День недели** | ||
| - | Понедельник - 1 | ||
| - | Вторник - 2 | ||
| - | Среда - 3 | ||
| - | Четверг - 4 | ||
| - | Пятница - 5 | ||
| - | Суббота - 6 | ||
| - | Воскресенье – 7 | ||
| - | Ответ на команду установки времени | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | Текущая дата и время на приборе | ||
| - | | 3 | ::: | … | Минуты | | | ||
| - | | 4 | ::: | … | Час | | | ||
| - | | 5 | ::: | | День недели | | | ||
| - | | 6 | ::: | | Число | | | ||
| - | | 7 | ::: | | Месяц | | | ||
| - | | 8 | ::: | | Год (количество лет от 2023) | | | ||
| - | | 9 | Контрольная сумма | ||
| - | | 10 | ::: | 0x00…0xFF | ||
| - | | 11 | Stop байт | ||
| - | Команда выбора рецепта (0x1001) | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x10 | ::: | Старший байт | ||
| - | | 4 | № рецепта | ||
| - | | 5 | Контрольная сумма | ||
| - | | 6 | ::: | 0x00…0xFF | ||
| - | | 7 | Stop байт | ||
| - | Ответ на команду выбора рецепта | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | № выбранного рецепта | ||
| - | | 3 | Контрольная сумма | ||
| - | | 4 | ::: | 0x00…0xFF | ||
| - | | 5 | Stop байт | ||
| - | STEP_DRIVER | ||
| - | STEPDRIVE_SET_DIRECTION (0x2000) | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x20 | ::: | Старший байт | ||
| - | | 4 | ID двигателя | ||
| - | | 5 | Направление движения | ||
| - | | 6 | Контрольная сумма | ||
| - | | 7 | ::: | 0x00…0xFF | ||
| - | | 8 | Stop байт | ||
| - | STEPDRIVE_SET_SPEED(0x2001) | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x20 | ::: | Старший байт | ||
| - | | 4 | ID двигателя | ||
| - | | 5 | Скорость\\ uint32_t \\ мм/ | ||
| - | | 6 | ::: | | ::: | | | ||
| - | | 7 | ::: | | ::: | | | ||
| - | | 8 | ::: | | ::: | | | ||
| - | | 9 | Контрольная сумма | ||
| - | | 10 | ::: | 0x00…0xFF | ||
| - | | 11 | Stop байт | ||
| - | STEPDRIVE_SET_PARAMETERS (0x2002) | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x20 | ::: | Старший байт | ||
| - | | 4 | ID двигателя | ||
| - | | 5 | Направление движения | ||
| - | | 6 | Скорость\\ uint32_t \\ мм/ | ||
| - | | 7 | ::: | | ::: | | | ||
| - | | 8 | ::: | | ::: | | | ||
| - | | 9 | ::: | | ::: | | | ||
| - | | 10 | Контрольная сумма | ||
| - | | 11 | ::: | 0x00…0xFF | ||
| - | | 12 | Stop байт | ||
| - | ENABLE_ENCODER_CONTROLL | + | ====== Система моделирования ====== |
| + | Целью моделирования является описание и отладка полного алгоритма работы анализатора в связке с пользовательским интерфейсом. Модель должна описывать все физические взаимосвязи работы устройства с целью моделирования реальных перемещений при отработке алгоритмов управления, | ||
| + | 1.Набор и количество плат драйверов периферийных устройств и необходимые конфигурации драйверов для управления конкретным анализатором | ||
| + | 2.Набор рецептов и настроек системы автоматизации, | ||
| + | 3.Схему подключения гидравлики и электроники внутри прибора. | ||
| + | 4.В перспективе также появляется возможность генерирования модели микрофлуидного блока на основании гидравлической схемы, заложенной в модели, | ||
| + | Система моделирования должна иметь вложенную систему, | ||
| + | {{ : | ||
| + | Пользовательский интерфейс отправляет команды управления в материнскую плату контроллера, | ||
| + | После составления модели ее части (рецепты, | ||
| - | | № байта | + | Система моделирования подразделяется |
| - | | 0 | Start байт | | | | | + | Модель таблицы рецептов |
| - | | 1 | Количество байт данных | + | Задача модели разложить рецепт согласно таблицы |
| - | | 2 | ID команды | 0x03 | | Младший байт | | + | |
| - | | 3 | ::: | 0x20 | ::: | Старший байт | | + | |
| - | | 4 | ID двигателя | + | |
| - | | 5 | Использование\\ энкодера | + | |
| - | | 6 | Контрольная сумма | + | |
| - | | 7 | ::: | 0x00…0xFF | + | |
| - | | 8 | Stop байт | + | |
| + | ===== Девайсы ===== | ||
| + | | ||
| - | STEPDRIVE_COMAND_INIT | + | ==== Материнская плата ==== |
| + | Девайс материнская плата представляет из себя устройство которое слушает заданный порт | ||
| + | ==== Драйвер ==== | ||
| + | Драйвер обеспечивает управление | ||
| + | {{ : | ||
| + | === Описание структуры взаимодействия === | ||
| + | По каналу 1 (от GUI) на материнскую плату приходит номер рецепта. Материнская плата получив рецепт раскладывает его на под рецепты согласно таблице рецептов. То есть разбивает рецепт на устройства задействованные в нем и порядок положений для каждого устройства для выполнения заданного рецепта. Так же на материнской плате хранится логика положений согласно которой происходит построение последовательности движений по положениям (пример: | ||
| - | Команда первичной инициализации | + | ==== Шаговый двигатель ==== |
| + | входные внутренние параметры: количество шагов на оборот (например SRP = 200) входные внешние параметры: | ||
| - | | № байта | + | ==== Концевик ==== |
| - | | 0 | Start байт | | | | | + | входные внутренние параметры: позиция упора (например limitPosition) |
| - | | 1 | Количество байт | + | |
| - | | 2 | ID команды | 0x00 | | Младший байт | | + | |
| - | | 3 | ::: | + | |
| - | | 4 | ID двигателя | + | |
| - | | 5 | Контрольная сумма | + | |
| - | | 6 | ::: | 0x00…0xFF | + | |
| - | | 7 | Stop байт | + | |
| + | ==== Редуктор ==== | ||
| - | STEPDRIVE_COMAND_ HOME (0x2101) | + | входные внутренние параметры: |
| + | входные внешние параметры: | ||
| + | выходные параметры (состояние): | ||
| - | Команда возвращение двигателя в нулевую позицию | + | ==== Винтовая передача ==== |
| - | | № байта | + | public class Leadscrew( |
| - | | 0 | Start байт | + | |
| - | | 1 | Количество байт данных | + | |
| - | | 2 | ID команды | + | ) : ModelConstructor(context) { |
| - | | 3 | | + | |
| - | | 4 | ID двигателя | + | |
| - | | 5 | Контрольная сумма | + | |
| - | | 6 | | + | |
| - | | 7 | Stop байт | + | |
| + | public fun torqueToForce( | ||
| + | stateOfTorque: | ||
| + | ): DeviceState< | ||
| + | NumericalValue(torque.value / leverage.value ) | ||
| + | } | ||
| - | STEPDRIVE_COMAND_ GO_STEPS | + | public fun degreesToMeters( |
| + | stateOfAngle: | ||
| + | offset: NumericalValue< | ||
| + | ): DeviceState< | ||
| + | offset + NumericalValue(degrees.value * 2 * PI / 360 * leverage.value | ||
| + | } | ||
| - | Команда пройти расстояние в мм | + | } |
| - | | № байта | Определение | + | ===== Комбайны ===== |
| - | | 0 | Start байт | + | Комбайном является устройство |
| - | | 1 | Количество байт данных | + | |
| - | | 2 | ID команды | + | |
| - | | 3 | ::: | 0x21 | ::: | Старший байт | | + | |
| - | | 4 | ID двигателя | 0 -255 | Внутренний | + | |
| - | | 5 | Расстояние необходимое пройти\\ uint32_t | + | |
| - | | 6 | ::: | | ::: | | | + | |
| - | | 7 | ::: | | ::: | | | + | |
| - | | 8 | ::: | | ::: | | | + | |
| - | | 5 | Контрольная сумма | + | |
| - | | 6 | ::: | 0x00…0xFF | + | |
| - | | 7 | Stop байт | + | |
| + | ==== Плоттер ==== | ||
| + | В состав плоттера входят два двигателя, | ||
| - | STEPDRIVE_COMAND_JOGGE | + | ==== Шприц ==== |
| + | Движение поршня шприца осуществляется путем воздействия двигателя. | ||
| + | Входными параметры поршня: | ||
| + | Выходные параметры текущий объём в мл. Для расчёта необходимо вычислить перемещение поршня в мм (rodDisplacement = transmissionCoefficient * rotationSpeed). Текущий объём = volume * rodDisplacement / rodLength | ||
| - | Однократная команда движение на заданное количество шагов (количество может быть как конфигурируемым там и зашитым внутри прошивки) | ||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x21 | ::: | Старший байт | ||
| - | | 4 | ID двигателя | ||
| - | | 5 | Контрольная сумма | ||
| - | | 6 | ::: | 0x00…0xFF | ||
| - | | 7 | Stop байт | ||
| - | |||
| - | |||
| - | STEPDRIVE_COMAND_STOP (0x2104) | ||
| - | |||
| - | Однократная команда остановки действия применяется к командам 2100 - 2102 | ||
| - | |||
| - | | № байта | ||
| - | | 0 | Start байт | ||
| - | | 1 | Количество байт данных | ||
| - | | 2 | ID команды | ||
| - | | 3 | ::: | 0x21 | ::: | Старший байт | ||
| - | | 4 | ID двигателя | ||
| - | | 5 | Контрольная сумма | ||
| - | | 6 | ::: | 0x00…0xFF | ||
| - | | 7 | Stop байт | ||
start.1729627412.txt.gz · Последнее изменение: 2024/10/22 20:03 — administrator
