Добавлен CAN-доступ к регистратору УМП через отдельный канал ответов

This commit is contained in:
2026-09-21 00:49:53 +03:00
parent df719229b7
commit a3633d8ede
6 changed files with 254 additions and 5 deletions

113
Doc/PERIPH28335_CAN.md Normal file
View File

@@ -0,0 +1,113 @@
# periph_28335: общая панель RS/CAN и регистратор УМП
## Где находятся панели
В верхнем ряду вкладок, рядом с **Altera Logic**, появилась **periph_28335**.
Внутри неё:
- **Dima / CAN terminal** — существующий CAN-терминал, его проекты, узлы и настройки адаптера;
- **rs232_periph_28335** — существующие операции RS232/485, Modbus и настройки COM;
- **Логгер УМП** — единая панель графиков и архива для обоих транспортов.
В общей группе CAN остались «Шина CAN / мост» и «DevBoard_V1».
В общей группе RS232/485 остался RS_TERMINAL_2812.
Терминалы сохраняют свои соединения: перенос вкладок не создаёт новые порты.
## Онлайн и чтение по CAN
1. Откройте **periph_28335 → Dima / CAN terminal → Настройки**.
2. Выберите Candle/gs_usb либо SLCAN/Lawicel и канал адаптера.
Для штатной прошивки Бальзам 167 используется CAN 250000 бит/с.
Нажмите «Подключить».
3. Перейдите в соседнюю вкладку **Логгер УМП**.
4. В строке **Связь логгера** выберите **CAN · адаптер Dima**.
5. Укажите **CAN-плата (Mode)**: физический номер платы в прошивке, 1..16.
Платы нагрузки Бальзам 167 имеют номера 5/6; выбирайте фактически подключённую.
Это не RS-адрес 16 и не индекс строки таблицы Dima. Выбор проекта в Dima
не меняет CAN-адрес регистратора: он явно определяется этим полем.
6. Нажмите **Начать запись** или **Онлайн**, если запись на плате уже идёт.
Остальные действия, флажки, легенда, единицы мА и CSV одинаковы для RS и CAN.
7. После команды отключения и секунды постинтервала нажмите
**Прочитать отключение**. Запись текущего банка на плате продолжается.
Кнопка **Настройки связи** открывает настройки выбранного транспорта.
Состояние адаптера/порта и адреса CAN постоянно отображаются над графиком.
**Прервать обмен** останавливает чтение GUI, не посылая команду остановки
регистратора или УМП. При переключении канала/платы незавершённые запросы
отменяются, поздние ответы не продолжают старую цепочку.
Для RS выберите **RS232/485** и настройте COM в соседней RS-панели:
обычно 115200, адрес 16. Сообщения «не подключён» и «занят запросом» разделены.
Отключение RS-порта не останавливает CAN-просмотр. CAN-разрыв не мешает RS.
Демо, если оно включено в сборке, по-прежнему работает без физической платы.
## Изменения прошивки
Для CAN требуется новая прошивка этой ветки. Предыдущая версия регистратора
умела отдавать данные только через Modbus. Старая плата игнорирует новые
служебные запросы; GUI сообщает о тайм-ауте без изменения команд УМП.
- MBOX0: прежняя передача технологических данных, ID 0xBA0010 + Mode - 1.
- MBOX1: прежний приём команд, ID 0xBA0000 + Mode - 1; дополнительно
распознаётся служебный заголовок 0x1F00 и длина ровно 8 байт.
- MBOX2: отдельные ответы регистратора, ID 0xBA0020 + Mode - 1.
Биты маски записи регистров у служебного запроса равны нулю. Обработчик
перехватывает его до изменения modbus[] и до журналирования CAN-команд:
опрос собственного журнала не заполняет журнал.
Запрос ставится в очередь из ISR. Основной цикл формирует целый снимок
под короткой блокировкой IRQ и отправляет максимум один кадр за вызов
UMP_CAN_service(). Ожидания передачи в цикле нет. Перед следующим
фрагментом приоритет отдаётся ожидающей штатной телеметрии MBOX0.
Если ACK служебного mailbox не приходит 250 тиков таймера, передача
отменяется. При этом штатные CAN-команды и MBOX0 не отменяются.
По CAN доступны те же расширенные адреса 0x1000 / 0x1010 / 0x1100,
состав записи и версия снимка 2. Новый протокол не даёт писать через
служебный запрос в технологические адреса 0..127.
## Формат кадров
CAN 2.0B, расширенный ID, 8 байт данных. Порядок соответствует существующей
прошивке: MDL (слова 1,2), затем MDH (заголовок, слово 0). Каждое слово
содержит сначала старший байт.
Запрос: `[адрес BE16, значение/длина BE16, 0x1F00 BE16, token:function BE16]`.
Функция 3 — чтение, 6 — запись; token — номер запроса 1..255.
Ответ: `[данные0 BE16, данные1 BE16, (0x1F00+индекс) BE16, token:error BE16]`.
Номер фрагмента 0..61, в нём два слова снимка. Ошибка 0 означает успех,
1 — неизвестная функция, 2 — неверный адрес/диапазон, 3 — запрещённое значение.
У записи успешный ответ содержит эхо адреса и значения.
Пример: Mode=5, token=7, чтение статуса 16 слов.
Запрос ID `0x00BA0004`, данные `10 00 00 10 1F 00 07 03`.
Ответы ID `0x00BA0024`, восемь фрагментов по два слова.
Онлайн-снимок из 124 слов передаётся 62 фрагментами.
GUI принимает только ответ выбранной платы с номером текущего запроса,
восстанавливает порядок фрагментов, игнорирует одинаковые дубликаты и
отклоняет противоречащие. Неполный снимок не попадает на график.
После потери подтверждения записи GUI прямо сообщает, что команда могла
выполниться; автоматического повторного старта регистратора нет.
Онлайн показывает последние три записи из полного снимка. При высокой
нагрузке шины/низкой скорости возможны пропуски онлайн-отображения;
они считаются существующим счётчиком. Архив читается целиком по блокам.
Предполагается один активный читатель архива: его курсор общий для RS/CAN.
Одновременное управление архивным курсором из двух независимых программ
не поддерживается.
## Проверки и ограничения
Пройдены тесты протокола, сборки всех 62 фрагментов, неверного адреса/токена,
пропущенных и повторных фрагментов, ACK и ошибок, отмены при смене канала,
иерархии вкладок и сохранения RS/демо. Набор тестов выполнен на Qt 6 и Qt 5.
В прошивке проверен настоящий код формирования ответов через host-тест;
изменённые C-файлы прошли проверку синтаксиса Clang с исходными заголовками.
Сборка TI/CCS, проверка MAP и испытание CAN на реальной плате ещё требуются.
Особенно проверить тайминги IRQ и приоритет штатной телеметрии на нагруженной
шине. Файлы прошивки Bin/*.out/hex не заменены. Архив остаётся в ОЗУ:
команда отключения фиксирует его, пропадание питания стирает.