Сократить запись логгера УМП до 12 слов формата v4
This commit is contained in:
+44
-38
@@ -2,7 +2,7 @@
|
||||
|
||||
Текущая логика дискретов описана в [SIFU_START_STOP.md](SIFU_START_STOP.md):
|
||||
CAN-фронты обрабатываются при приёме, импульсы снимаются таймером, STOP
|
||||
имеет приоритет. Формат записи v2 и интерфейс SetGUI сохранены.
|
||||
имеет приоритет. Компактный формат записи v4 совпадает с исполнением 167.
|
||||
|
||||
## Назначение и работа оператора
|
||||
|
||||
@@ -13,8 +13,9 @@ CAN-фронты обрабатываются при приёме, импуль
|
||||
Общий RS-адрес 16 здесь не рекомендуется: ответ содержит собственный адрес,
|
||||
и SetGUI проверяет совпадение адресов. CAN-настройки: [PERIPH28335_CAN.md](PERIPH28335_CAN.md).
|
||||
|
||||
Перенесён протокол v2 из 167: 40 слов на запись, два банка по 800 записей.
|
||||
Существующий SetGUI понимает эту прошивку без изменений программы.
|
||||
Используется формат v4 из 167: 12 слов на запись вместо прежних 40;
|
||||
ёмкость исполнения 166 сохранена — два банка по 800 записей.
|
||||
Для чтения нужен SetGUI с поддержкой компактного формата v4, как для 167.
|
||||
Кнопки записи управляют регистратором; команду запуска УМП подаёт контроллер.
|
||||
|
||||
1. **Начать запись** включает только регистратор, не пуск УМП.
|
||||
@@ -45,7 +46,8 @@ EEPROM не используется: под отключением в этой
|
||||
## Память и точность
|
||||
|
||||
Использована существующая секция `.logg` по адресу 0x200000: 64000
|
||||
16-битных слов. Два банка по 800 записей × 40 слов занимают её целиком.
|
||||
16-битных слов. Два банка по 800 записей × 12 слов используют 19200 слов;
|
||||
размер выделенной секции сохранён. Одна запись занимает 24 байта вместо 80.
|
||||
Текущий банк кольцевой. При триггере сохраняются последние до 399 записей,
|
||||
добавляется событие отключения, оставшаяся половина банка отведена
|
||||
постинтервалу. При 20 мс это до примерно 8 секунд до отключения и 1 секунды
|
||||
@@ -61,7 +63,7 @@ EEPROM не используется: под отключением в этой
|
||||
одинаковую отметку; порядок сохраняется порядком записей. На перезапуске
|
||||
регистратора счётчик продолжает прежнюю шкалу, при перезагрузке платы — 0.
|
||||
|
||||
Онлайн-опрос возвращает три последних записи каждые 40 мс. Он не гарантирует
|
||||
Онлайн-опрос возвращает до десяти последних записей каждые 40 мс. Он не гарантирует
|
||||
передачу каждого события при высоком CAN-трафике, медленном UART или паузах
|
||||
GUI. Номера записей позволяют убрать дубликаты и явно показать пропуски.
|
||||
Полный сохранившийся фрагмент следует читать кнопкой архива. Частота 20 мс
|
||||
@@ -73,7 +75,12 @@ GUI. Номера записей позволяют убрать дублика
|
||||
EEPROM, выделения памяти или копирования целого банка. Реальную задержку
|
||||
прерываний и длительность критических секций нужно измерить на F28335.
|
||||
|
||||
## Состав записи: 40 слов
|
||||
## Состав записи v4: 12 слов
|
||||
|
||||
Состав и позиции полей совпадают с компактным логгером 167. Убраны сырые
|
||||
данные АЦП и CAN, ошибки, счётчики, код и калибровки ЦАП, состояние разгона
|
||||
и прочие дополнительные диагностические поля. Управление нагрузкой 166,
|
||||
ёмкость банка и секундный постинтервал отключения сохранены.
|
||||
|
||||
| Слова | Данные | Единицы/смысл |
|
||||
|---|---|---|
|
||||
@@ -81,33 +88,21 @@ EEPROM, выделения памяти или копирования целог
|
||||
| 2 | Событие | 1 период, 2 CAN RX, 3 изменение I/O, 4 RS-команда, 5 конец постинтервала |
|
||||
| 2, бит 8 | Триггер отключения | флаг поверх причины события |
|
||||
| 2, бит 9 | Усечён постинтервал | установлен в конечном снимке |
|
||||
| 3 | Commands / modbus[0x7F] | все 16 бит, в том числе пуск, сброс, инициализация и калибровка ЦАП |
|
||||
| 3 | Commands & 0xC0 | только пуск УМП (бит 7) и сброс УМП (бит 6) |
|
||||
| 4 | Входы OMEGA, Start_1, Res_in | биты 0,1,2, активный уровень приведён к 1 |
|
||||
| 5 | START_DPTB, STOP_DPTB, RES_OUT_2 | биты 0,1,2, активный уровень приведён к 1 |
|
||||
| 6 | IMPowse | остаток импульса, мс |
|
||||
| 7 | WAKEpowse | остаток инициализации, тики DAC_FREQ |
|
||||
| 8 | modbus[0x7B] | 12-битный код, переданный функцией dSEND в ЦАП |
|
||||
| 9 | modbus[0x1C] | расчётное задание в 0.1 мА; GUI/CSV переводит в мА |
|
||||
| 10–13 | sens_data[0..3] | измеренные сигналы, знаковое 16-битное значение в исходном масштабе |
|
||||
| 14–17 | modbus[0..3] | маски ошибок измерений |
|
||||
| 18 | CAN заголовок | адрес регистра в младших 13 битах и маска трёх слов в старших |
|
||||
| 19–21 | Три слова последнего принятого CAN-кадра | без преобразования |
|
||||
| 22 | Счётчик записанных CAN RX | младшие 16 бит |
|
||||
| 23 | CanTimeOutErrorTR | младшие 16 бит счётчика тайм-аутов CAN TX |
|
||||
| 24–25 | Фиксированные границы разгона 166 | 6 и 16 мА; это не регистры настройки |
|
||||
| 26–28 | DAC_min(), DAC_max(), DAC_cal() | коды калибровки и ручного задания ЦАП |
|
||||
| 29–30 | DAC_04, DAC_20 | значения соответствующих регистров |
|
||||
| 31–32 | count_load, time_dac | положение и длительность разгона в тиках |
|
||||
| 33–34 | Эффективные границы разгона 166 | 60 и 160 в 0.1 мА; GUI показывает 6 и 16 мА |
|
||||
| 35 | kod | целочисленное положение, используемое Anal_output |
|
||||
| 36–39 | adc_table_lem[0..3] | ADCRESULT2..5 после сдвига на 4, диапазон 0..4095 |
|
||||
| 6 | modbus[0x1C] | расчётное задание в 0.1 мА; GUI/CSV переводит в мА |
|
||||
| 7–8 | Фиксированные начальная и конечная уставки 166 | 6 и 16 мА; это не регистры настройки |
|
||||
| 9 | ЗПТ1: U1 + U2 | ПМ67, регистр 306 / нулевой CAN-индекс 305, В |
|
||||
| 10 | ЗПТ2: U3 + U4 | ПМ67, регистр 9 / нулевой CAN-индекс 8, В |
|
||||
| 11 | Резерв | всегда ноль; чётная длина нужна для парной передачи CAN |
|
||||
|
||||
**Отправленный код ЦАП не является измеренным током выхода.** В этом проекте
|
||||
не установлено, какой вход аппаратно измеряет ток ЦАП. При включённом
|
||||
**Расчётное задание тока не является измеренным током выхода.** При включённом
|
||||
`cCalibrDac` отправляется `DAC_cal()`, а расчётное задание 0x1C остаётся
|
||||
результатом алгоритма разгона. Для диагностики это различие сохранено.
|
||||
В 166 каналы «АЦП 0..3» берутся из `adc_table_lem`, обновляемой в режиме
|
||||
нагрузки. Таблица `adc_table_tpl` в этом режиме не обновляется и не используется.
|
||||
результатом алгоритма разгона. Сырой код ЦАП и каналы АЦП в запись v4 не входят.
|
||||
Напряжения обновляются по подтверждённым маской словам CAN даже при остановленной
|
||||
записи: первый снимок содержит последние принятые значения. До первого приёма
|
||||
они равны нулю; отдельного флага свежести в формате v4 нет.
|
||||
|
||||
Управляющая формула 166 сохранена: `sinus = 10/16 * count_load + 2/16 * time_dac`.
|
||||
Регулируемый разгон и ограничители 167 не переносились. Поля границ показывают
|
||||
@@ -128,9 +123,9 @@ FC03, 0x1000, 16 слов:
|
||||
|
||||
| Смещение | Значение |
|
||||
|---|---|
|
||||
| 0,1 | 0x554D, версия 2 |
|
||||
| 0,1 | 0x554D, версия 4 |
|
||||
| 2,3 | состояние и число записей выбранного источника |
|
||||
| 4,5 | 40 слов в записи, 800 записей в банке |
|
||||
| 4,5 | 12 слов в записи, 800 записей в банке |
|
||||
| 6 | период периодических снимков, мс |
|
||||
| 7,8 | счётчик времени, младшее/старшее слово |
|
||||
| 9,10 | Desk (требуется 6 / dsk_LOAD), Mode |
|
||||
@@ -148,15 +143,17 @@ FC06:
|
||||
- 0x1002: хронологический индекс первой записи окна 0..799;
|
||||
- 0x1003: источник окна, 0 — текущий остановленный банк, 1 — архив отключения.
|
||||
|
||||
FC03, 0x1010, до 120 слов: окно до трёх записей от установленного индекса.
|
||||
FC03, 0x1010, до 120 слов: окно до десяти записей от установленного индекса.
|
||||
Для CAN длина должна быть кратна 12 словам: 12, 24, ..., 120; прежние
|
||||
блоки v2 по 40 или 80 слов отклоняются как обрывающие компактную запись.
|
||||
Чтение текущего банка этим окном во время записи не выдаёт изменяющиеся
|
||||
данные. GUI сначала останавливает его; архив можно читать при работающем
|
||||
текущем банке. После всех блоков GUI повторно проверяет поколение архива;
|
||||
при замене во время чтения результат не подменяет предыдущий график.
|
||||
|
||||
FC03, 0x1100, ровно 124 слова: онлайн-блок. Слова 0,1 — 32-битный номер
|
||||
первой записи, 2 — число записей 0..3, 3 — поколение архива, далее до трёх
|
||||
записей по 40 слов. Неиспользованные слова равны нулю. Окно онлайн не
|
||||
первой записи, 2 — число записей 0..10, 3 — поколение архива, далее до десяти
|
||||
записей по 12 слов. Неиспользованные слова равны нулю. Окно онлайн не
|
||||
зависит от курсора/выбора архива. Разделение 0x1010 и 0x1100 предотвращает
|
||||
пересечение двух окон.
|
||||
|
||||
@@ -167,7 +164,14 @@ CRC и разбор стандартного ответа GUI использую
|
||||
|
||||
## Проверка и запуск
|
||||
|
||||
Перенесены регистратор и RS/CAN-доступ из коммитов 167 `df71922` и `a3633d8`.
|
||||
Для компактного формата v4 пройден host-тест настоящего `log_to_mem.c`
|
||||
с MSVC 14.30.30705. Модули `log_to_mem.c`, `ecan.c` и `message.c`
|
||||
скомпилированы TI C2000 22.6.0.LTS с COFF, FPU32 и O1 без ошибок.
|
||||
Полная линковка и обновление образов BIN/HEX для этой правки не выполнялись.
|
||||
|
||||
Первоначально регистратор и RS/CAN-доступ перенесены из коммитов 167
|
||||
`df71922` и `a3633d8`. Приведённые ниже результаты полной сборки относятся
|
||||
к исходному формату v2 до сокращения полей.
|
||||
Сборка всех 27 C/ASM-файлов и линковка TI C2000 22.6.1.LTS (Debug, COFF,
|
||||
FPU32, O1) прошли. Остались шесть прежних предупреждений в measure.c/peripher.c.
|
||||
В MAP: RAML0 занято 0x38D1 из 0x4000 слов, .ebss — 0xFA9 из 0x3000,
|
||||
@@ -176,8 +180,10 @@ FPU32, O1) прошли. Остались шесть прежних предуп
|
||||
Сборка проверки лежит вне репозитория, штатные файлы Bin не заменены.
|
||||
|
||||
Host-тест компилирует настоящий log_to_mem.c с подменой GPIO/IRQ.
|
||||
Проверяет кольцо, архив, переполнение постинтервала, онлайн-окно, CAN-протокол,
|
||||
готовность именно 166, фиксированные границы и четыре канала АЦП.
|
||||
Проверяет кольцо, архив, переполнение постинтервала, онлайн-окно из десяти
|
||||
12-словных записей, CAN-протокол v4, готовность именно 166, фиксированные
|
||||
уставки 6/16 мА, маску команд и получение ЗПТ из трёх позиций CAN-кадра.
|
||||
Сторожевые значения контролируют границу записи и разделение банков.
|
||||
Запуск из корня 166: `py -3 tests/ump_logger/run_test.py` (Clang/lld или MSVC
|
||||
в PATH); при необходимости передать `--compiler "полный путь к cl.exe"`.
|
||||
Тест не проверяет физические GPIO, тайминги прерываний и 16-битную ABI TI.
|
||||
@@ -186,7 +192,7 @@ Host-тест компилирует настоящий log_to_mem.c с подм
|
||||
начать запись → подать CAN-пуск → подать отключение → через секунду прочитать
|
||||
архив. Сверить START/STOP с физическими выходами и измерениями, повторить с
|
||||
разрывом RS/CAN. Проверить период 1 мс и задержки IRQ под нагрузкой.
|
||||
Тесты существующего SetGUI (`test_ump_logger.py`, `test_ump_logger_can.py`,
|
||||
Для первоначального формата v2 тесты SetGUI (`test_ump_logger.py`, `test_ump_logger_can.py`,
|
||||
`test_periph28335_tab.py`) в окружении Qt 5: **47 passed**. Проверены протокол,
|
||||
онлайн/архив, CAN-фрагменты, графики, курсоры и CSV.
|
||||
Проверка на устройстве не выполнялась.
|
||||
|
||||
Reference in New Issue
Block a user