Expose the existing registers through Modbus and service CAN using one GAS provider only in M95M02 builds. Include the EEPROM layout/driver, LOAD protection and calibration, firmware identity and shared CCS build workflow. Add transport/profile and SCI8 validation tests, documentation and the checked M95M02 firmware image.
41 KiB
GAS для всех проектов: сопоставление с Modbus, CAN и SETProtocol
Дата анализа: 9 октября 2026 года.
Вывод: GAS можно сделать общим способом описания и доступа к параметрам всех проектов. Практический вариант — единый реестр в templates, профили конкретных устройств и адаптеры существующих протоколов. Modbus, ProtoCAN, SET и старые пакеты TMS обращаются к одним источникам данных. Подключение GAS и замена регистратора — отдельные задачи.
Здесь GAS означает общее адресное пространство; в библиотеке используется название General Address Space. Это логические адреса данных, а не адреса RAM процессора. GAS сам по себе не задаёт UART, CAN ID, CRC, скорость линии или подтверждение команды.
Охват: проекты в K:/git_project, включая newProject и home_proj. Подробно проверены общая библиотека, экспериментальный GAS, ПМ35/167 и описания связанных протоколов. Для остальных проектов указана глубина проверки: наличие каталога или отдельного исходника не означает проверку всей прошивки. Пустые каталоги и непроверенные реализации отмечены явно. Для 167 после анализа реализован GAS только в сборке M95M02 (раздел 5.2); остальные проекты этим анализом не изменены.
1. GAS, протоколы и интерфейсы
| Вариант | Что задаёт | Адресация | Чтение / запись | Каталог параметров | Подтверждение | Применение |
|---|---|---|---|---|---|---|
| GAS / ОАП | Логическую карту и правила доступа | 0x0000…0xFFFF внутри профиля устройства |
Внутренний API/callbacks; обмен зависит от оболочки | Имена, типы, единицы — отдельный реестр | Определяет протокол доступа | Общая основа настроек, графиков и логгеров |
| Modbus RTU | Запрос/ответ, функции, serial framing и CRC16 | Устройство + таблица + нулевой адрес PDU | FC03/04 чтение, FC06/16 запись; конкретная плата реализует подмножество | Вне стандартного кадра | Ответ/exception; broadcast-запись без ответа | Существующие приборы; адаптер к GAS сохраняет старые адреса |
| Modbus TCP | Modbus PDU в TCP с MBAP | Соединение + Unit ID + таблица + адрес | Аналогично RTU на уровне PDU | Внешний каталог | Ответ с Transaction ID | Дополнительный адаптер; сервер на конкретных платах здесь не установлен |
| ProtoCAN GAS | GAS-доступ в формате ProtoCAN | Поля устройства/маршрута ID; MsgType=0x3, адрес в MsgBody |
До 4 слов в classic CAN; DLC=0 — расширение для чтения |
Отдельный каталог | В текущем pcan_gas чтение с ответом, запись без прикладного ACK |
Устройства ProtoCAN и мост; команды требуют проверки результата |
| Legacy CAN Бальзам / ПМ35 | Штатные технологические кадры | Extended ID; адрес/маски в payload | Технологический кадр ПМ35 — до 3 слов | Таблицы проекта | CAN ACK не подтверждает применение команды | Сохранить формат, добавить адаптер к GAS |
| Служебный CAN УМП | Расширенные регистровые запросы/ответы | ID платы + 0x1F00 + token/function/адрес |
Функции 3/6; ответ по 2 слова в кадре | Сигнатура/версия сервиса | token и код результата | Готовый путь к расширениям 167; отличается от ProtoCAN GAS |
| SETGUI v1 | Потоковые кадры A5 5A, sequence, CRC32 |
Регистр/объект согласно сообщению | READ/WRITE, каталог/watch при наличии обработчиков | GAS_CATALOG: тип, масштаб, единица, имя | sequence/ACK/NACK по контракту | Мост, К1921ВК028, приборы DS18B20 с разными наборами сообщений |
| SETProtocol v2 | Общий кадр, READ/WRITE, CATALOG, SUBSCRIBE/PUBLISH, firmware service | source/destination + адрес/ID в payload сервиса | По capabilities устройства | Каталог и версия словаря | sequence, response/status; политика задаётся сервисом | Новые устройства/клиенты; GAS подключается к provider |
| Legacy TMS / ПУИ | Исторические команды/телеметрия | Номер параметра, индекс или адрес памяти по своему контракту | Только операции конкретной прошивки | Вне кадра | По собственному протоколу | Адаптер существующих полей к GAS |
| RS232 / RS485 / USB / Ethernet | Физический интерфейс или транспорт | Порт/соединение | Передача кадров | Не задают | Зависит от стека | RS485 не означает Modbus; CAN не означает ProtoCAN GAS |
Нулевую адресацию PDU, порядок байтов внутри Modbus-регистра и предел FC03 в 125 регистров задаёт спецификация Modbus V1.1b3. Фактические лимиты: GAS-логгер — 125 слов, set_regmap — 124, архив УМП/EEPROM 167 — 120. Порядок слов многорегистрового числа задаётся профилем отдельно.
2. Существующие реализации и общая архитектура
| Реализация | Уже реализовано | Ограничение | Предлагаемая роль |
|---|---|---|---|
templates/c/set-protocol/pcan_gas |
Регионы, storage/callbacks, права, проверка карты, ProtoCAN GAS | uint8_t; блоки могут выполняться частично; запись без ответа |
CAN-адаптер к словарю; C28x требует портирования |
templates/c/set-protocol/set_regmap |
Регионы/каталог, dispatcher 3/6, RTU и служебный CAN | Заголовок связан с byte ABI; C28x-компиляция не проходит | Основа общего dispatcher после отделения word API |
templates/c/gas-logger |
Два банка, capture, snapshot, generation/release, JSON-профиль | Сервис регистрации; не весь словарь и не драйвер связи | Опциональное расширение GAS |
newProject/home/gas |
Стабильные ID, float + time/valid, parameters.def, HR→GAS, график |
Host-пример; нет UART/parser/CRC, записи HR и межпоточной защиты | Пример связи измерения, меню и Modbus |
SETGUI / Android + templates |
Клиенты, модели, каталоги, графики и порты | Возможности зависят от устройства и ревизии | Единое описание данных для всех клиентов |
Объединять нужно контракт и реестр, затем общие части реализации: сейчас модули с названием GAS имеют разные API и модель хранения. Предлагаемый поток: источники данных → профиль GAS → адаптер RTU/ProtoCAN/SET/TMS → клиент; меню и логгеры читают тот же профиль. Простые параметры могут читаться callbacks из существующей RAM: массив на 65 536 регистров не требуется.
| Поле общего профиля | Назначение / правило |
|---|---|
semantic_key |
Стабильный смысл, например ump.commands; имя на экране меняется отдельно |
device/profile/version |
Область применимости адресов: 167, эмулятор и прибор датчиков имеют разные профили |
gas_address, registers |
Логический адрес и ширина; u32 занимает два слова |
type, unit, scale |
Знаковость и raw→физическая величина; неизвестный масштаб не выдумывать |
access, range, command_policy |
RO/RW, диапазоны и проверка условий выполнения записи |
modbus |
Таблица, FC и старый адрес PDU; GAS ID и Modbus-адрес могут различаться |
can/set/legacy |
MsgBody, поле payload, индекс параметра и формат; это не один универсальный CAN ID |
source, validity, time |
RAM/удалённый кэш, достоверность и давность выборки |
word_order, limits, schema_id |
Порядок слов, максимальный блок, версия/CRC профиля |
Для существующего ОАП нормативным источником остаётся doc/setcan/Протокол CAN и ОАП.xlsx. JSON GAS-логгера — отдельный экспериментальный профиль. При внедрении согласовать их и генерировать описания C/Python/клиентов из утверждённого источника. CRC карты обнаруживает несовместимость, но не подтверждает подлинность устройства.
3. Пригодность GAS по всем обнаруженным проектам
Сложность — предварительная инженерная оценка без сроков в днях. «Обзор» означает, что полная карта и сборка проекта не проверены.
Прошивки, стенды и библиотеки
| Проект / каталог | Что подтверждено | Применение GAS | Требования / оценка |
|---|---|---|---|
newProject/templates, SETGUI/third_party/templates |
Общие протоколы, карты и порты; разные checkout | Реестр + независимое от MCU word-ядро | Согласовать ревизию, отделить byte API C28x; средняя |
Balsam_167_periph / ПМ35 / F28335 |
FC03/06, legacy/служебный CAN, УМП, паспорт, EEPROM; GAS 167/v1 для M95M02 | GAS-регионы 0x5000…0x507F и 0x5F00…0x5F07 через RTU и служебный CAN | Реализовано и проверено сборкой/host-тестами; AT25256B без GAS, его BIN совпадает побайтно |
Balsam_166_periph |
Локальный каталог пуст | Собственный профиль 166 | Нужны исходники; текущая поддержка не установлена |
BALZAM_167 / ПМ67 / F2812 |
Legacy CAN, Modbus-таблицы, CMD_STD в коде | Фасад над таблицами/состояниями ПМ67 | C28x-порт и политика записей; высокая |
22220/ural, sibir, leningrad |
В ural/TMS_new_bus найдены исходники обмена; другие варианты не сверены |
Профиль каждого варианта; общие semantic keys | Не переносить карту 167 по названию; аудит вариантов |
K1921BK028/1921vk028 |
GUI transport и ProtoCAN в lib |
Object dictionary/RTC/diagnostics в карте | Providers, синхронизация и карта; средняя |
newProject/KONOR_ds18b20 |
GUI v1 для датчиков; ProtoCAN в src/can.c |
Температуры, качество, опрос, состояние | Сохранить ROM-ID и команды датчиков; средняя |
GUI_18b20 |
Каталог пуст; проект упоминается в документах SETGUI | Профиль датчиков после восстановления кода | Локальная реализация не проверена |
newProject/home/gas |
Host-пример GAS→график/Modbus | Прототип модели параметров | Общее ядро, порт и проверка платы; средняя |
Эмуляторы F407/G474 в templates/ports |
set_regmap, УМП/TMS/IGBT/DAC и MCU-порты |
Первый пилот на готовой карте/каталоге | Порт не доказывает проверку конкретной платы; небольшая/средняя |
newProject/g474/params_AD, winding_analyzer |
STM32-проекты/документы; GAS в обзорном поиске не найден | Измерения, настройки, диагностика | Сверить обмен и назначить профиль; предварительно средняя |
newProject/online_logger, home_proj/stm32h755_logger/online_logger |
Архитектура H755; во второй копии есть OLGR | GAS-настройки/статус, блоковый поток выборок | Согласовать копии, DMA и владение данными; средняя/высокая |
UKSI |
CAN/UART, FreeRTOS, переменные/модули Modbus | Фасад над таблицами | Согласованный доступ задач/ISR; средняя |
can_rs485_do_di_test/tester_CAN_RS_DIO |
Собственные конфигурация/данные Modbus | DO/DI и диагностика обмена | Сохранить протокол испытаний; средняя |
DC_DC_boost_103/DC_DC_DIMA_S, вариант G474 |
Собственные Modbus-модули, разные варианты | Текущие значения, уставки, аварии | Отдельные профили и проверка записей; средняя |
diode_test/Diod_Test |
Собственные interfaces/rs_message, настройки тестера |
Состояние теста и результаты | Wire-формат/FC не полностью проверены; средняя |
ds128b20/new rev, john_proj, DS18B20_Library |
STM32 Modbus в new rev, отдельная библиотека датчиков |
Каналы/качество и конфигурация | Сохранить 1-Wire/ROM-ID; средняя |
UPP-master/upp |
Параметры и ссылки на Modbus в собственном коде | Callback-карта существующих параметров | Сверить обработчики и условия пуска; средняя |
newProject/prolitarski_ups |
ПУИ↔МПСУ: команды 0x54/0x5D, CRC16/Modbus |
Номер параметра→semantic key | Этот формат не Modbus RTU, несмотря на CRC; средняя |
newProject/Optical_tester, test_optical |
STM32-проект/описание измерений первого; обзор второго | Результаты и настройки | Сначала профиль и аудит протокола |
newProject/home/climate, remote_ds18b20_f103 |
Найдены прошивки, библиотеки и документы связи | Температуры, клапаны, состояние | Wire-адаптеры/адреса требуют отдельной сверки |
Lamps-master, UKP |
Обзор каталогов; назначение UKP в README | Параметры при наличии внешнего интерфейса | Реализация GAS/конкретного протокола не установлена |
stm32g474, моторные проекты home_proj |
Найдены проекты управления приводом | Уставки и диагностика | Аудит протокола/времени доступа; быстрый контур остаётся в приложении |
Мосты, адаптеры и клиенты
| Проект / каталог | Текущая роль / глубина проверки | Использование GAS |
|---|---|---|
newProject/can_to_rs / F407 |
Мост, собственные GAS-регистры, каталог/watch GUI v1 | GAS уже есть для своих параметров; удалённые кадры маршрутизируются отдельно |
newProject/esp_parser / ESP32 CAN485 |
CAN/RS485, текст USB/Web, CSV, консоль | Передача GAS-кадров через адаптер кадров; собственный GAS-каталог не подтверждён |
newProject/CANdle_stm32, CANdle_stm32g474 |
USB-CAN/gs_usb, CAN/FDCAN-порты | Транспорт кадров; словарь живёт на целевом узле/в клиенте |
newProject/SETGUI |
Каталоги/графики, Modbus/CAN/SET, экспериментальный GAS-клиент | Основной клиент; общая логика в templates, UI выбирает параметр |
newProject/GUI_Android |
TMS/CAN/SET-клиент, общие порты/ядро | Тот же словарь; полнота нового GAS-логгера здесь не проверена |
newProject/Set_Terminal_28335 |
Старый Delphi-клиент ПМ35 | Сохранить legacy адреса; новые окна требуют обновления клиента |
newProject/CAN_terminal, CANgaroo-0.16.0 |
CAN-клиенты/мониторы; обзор файлов/описаний | Декодирование по профилю; просмотр кадра не доказывает GAS-команды |
newProject/PySetTerminal-master |
Терминал; обзор каталога | Клиент общего профиля после сверки parser |
LogsView, newProject/LogsView |
Просмотр журналов; обзор каталогов | Имена/единицы/масштаб из профиля, без собственного GAS-сервера |
PANE_ROSMORPORT |
Прикладное ПО; обзор каталога | Применимость зависит от данных; протокол не проверен |
Остальные каталоги
Строки ниже включены для полноты инвентаризации. Применимость GAS здесь — архитектурная оценка, а не утверждение о найденной реализации.
| Каталоги | Рассмотрение / применимость |
|---|---|
home_proj/altera, altera_loggerTK, altera_loggerTK_legacy_mixed_20260918, фдеукф; xilinx/cpld, omdazz_sp6; home_proj/zynq |
FPGA/CPLD: GAS через host/MCU-шлюз; быстрый поток со своим форматом. GAS HDL не проверен |
home_proj/DCDC_KONOR, focIhm08M01, g474_nucl_3phase, stm32g474_IHM08, john103C6T6NewVer |
Дополнительные платы: собственные карты не сверены, нужны отдельные profiles |
home_proj/GRBLSTM32F103, zigbeeWB55, HomeAssistant, Flipper, lamp_clock |
Собственные экосистемы; GAS возможен как дополнительная модель, необходимость не установлена |
newProject/home/ChameleonUltra, puty, DSView |
Устройства/анализаторы: общий словарь на стороне клиента при необходимости |
builds_labview, can_rs485_do_di_test/labview, newProject/matlab |
Клиенты/сборки: экспорт карты и клиентский адаптер; исходники доступны не для всех |
newProject/SET_Publisher, TroubleshootingDB, embedded-catalog |
Публикация/документация: хранить версии и описания профилей |
newProject/DOC, home_proj/site_Sveta |
Документы/сайт: публикация реестра; firmware-интеграция не требуется |
newProject/Новая папка, newProject/home/Новая папка |
Организационные/пустые каталоги; поддерживаемый проект не установлен |
4. Конкретные адреса GAS ↔ Modbus ↔ CAN: ПМ35
Это экспериментальный профиль gas_logger_maps/pm35.json, а не карта уже работающей прошивки 167. Семь новых alias — RO: ядро GAS-логгера не реализует запись в них. Управление УМП остаётся отдельной операцией старого протокола.
| Параметр | GAS | Modbus FC03 alias | ProtoCAN GAS MsgBody | Источник / legacy индекс | Формат |
|---|---|---|---|---|---|
| Команды УМП | 0x5000 |
0x5000 = 20480 |
0x5000 |
modbus[0x007F] = 127 |
Маска 16 бит, чтение команд |
| Расчётное задание тока | 0x5001 |
0x5001 = 20481 |
0x5001 |
modbus[0x001C] = 28 |
0.1 мА; не измеренный ток выхода |
| Код ЦАП | 0x5002 |
0x5002 = 20482 |
0x5002 |
modbus[0x007B] = 123 |
Исходный код |
| Начальная уставка | 0x5003 |
0x5003 = 20483 |
0x5003 |
modbus[0x0050] = 80 |
мА по текущему контракту |
| Конечная уставка | 0x5004 |
0x5004 = 20484 |
0x5004 |
modbus[0x0051] = 81 |
мА по текущему контракту |
| ЗПТ1 | 0x5005 |
0x5005 = 20485 |
0x5005 |
Кэш ПМ67; legacy CAN индекс 305 | Raw u16, масштаб отдельно |
| ЗПТ2 | 0x5006 |
0x5006 = 20486 |
0x5006 |
Кэш ПМ67; legacy CAN индекс 8 | Raw u16, свежесть отдельно |
Равенство трёх новых адресов — выбор профиля. Старые Modbus-адреса другие. MsgBody — часть ProtoCAN ID, а 305/8 — индексы старого payload; подставлять одно вместо другого нельзя.
В home/gas сопоставление отличается: напряжение GAS ID 0x0123 → Modbus PDU-адрес 1000; ток 0x0124 → 1001, 1.25 A кодируется как 125. Это демонстрационные адреса, не назначение общих регистров всех приборов.
Занятые и экспериментальные окна
| Профиль | Диапазон | Назначение / следствие |
|---|---|---|
| 167 | 0x0000…0x007F |
Технологические регистры: сохранить адреса/проверки записи |
| 167 | 0x1000…0x100F, 0x1010…0x1087, 0x1100…0x117B |
Статус, курсорное окно, онлайн УМП |
| 167 | 0x1200…0x120B |
Паспорт прошивки, 12 слов |
| 167 | 0x1300…0x1307 |
Защита нагрузки, действующий проверяющий handler |
| 167 / AT25256B | 0x8000…0xBFFF |
RO-окно EEPROM, пересекает тестовый GAS-снимок |
| 167 / M95M02 | 0x8000…0xFFFF + частное quantity/bank |
Банковое EEPROM-чтение: не обычный плоский массив Modbus/GAS |
| Тест GAS ПМ35 | 0x5000…0x5006 |
Семь alias; в firmware 167 не подключены |
| Тест GAS ПМ35 | Статус 0x6000…0x6011, команды 0x6012…0x6014, снимок 0x6100…0x849F |
Снимок конфликтует с EEPROM 167 |
Эмулятор set_emu_server |
0x1300 DAC, 0x1400 IGBT, 0x1500 TMS, 0x2000 архив, 0xA000 таблица DAC |
Другой профиль: одинаковое число адреса может означать другой сервис |
Расчёт полного тестового окна: 0x6000 + 0x0100 + 760 × (7 + 5) = 0x84A0 — конец, не включая. Проверять нужно весь сервис, а не только регистры команд.
Для 167 возможен, например, кандидат base 0x2000: данные такого снимка заняли бы 0x2100…0x449F. Это предложение только для нового профиля 167, не общий назначенный адрес: нужны сверка с ОАП/полной картой, новый JSON/C-профиль и CRC. В эмуляторе 0x2000 уже занят.
5. Ограничения и результаты проверки
| Ограничение | Проверенный факт | Решение |
|---|---|---|
| C28x ядро | gas_logger.c, PM35 source-port, C28x IRQ-port скомпилированы TI 22.6 без ошибок |
Ядро использовать можно; требуется полная firmware-компоновка |
| C28x byte API | pcan_gas.c, set_regmap.c: identifier "uint8_t" is undefined |
Отделить word-map; octet-порт хранит 8-битные значения подходящим типом и явно сериализует |
| Размер C-byte | C28x CHAR_BIT=16; обычный ARM/PC — 8 |
Простого typedef uint8_t=uint16_t недостаточно: проверить ABI/размеры/packing |
| Адреса | Тестовый снимок до 0x849F пересекает EEPROM |
Отдельный профиль и проверка пересечений |
| BIN 167 | Текущее дерево пересобрано: 32472 байта при лимите AT25256B 32508; запас 36 байт. Проба GAS-алиасов: 32524 байта, превышение 16 | При сохранении всех функций проверенный GAS-вариант не помещается; подробности ниже |
| RAM УМП | 2 × 760 × 42 = 63840 слов внутри logs_block[64000] / .logg |
Новые банки нельзя одновременно размещать в той же памяти |
| RAM GAS-логгера | 2 × 760 × 12 = 18240 слов = 36480 физических байт, без контекста/стека |
Другая подтверждённая RAM, меньшая ёмкость или взаимно исключающие варианты |
| Состав записи | УМП 42 слова, тестовый GAS 12 | Сокращение трафика также связано с удалением полей; это не измерение ускорения одинакового журнала |
| Snapshot | Закреплён до RELEASE; нет STOP/автоосвобождения | Согласовать отмену/возобновление, BUSY и одного управляющего клиента |
| CAN-запись | Текущий ProtoCAN GAS без прикладного ACK | Проверять статус/поколение выполнения |
| Источники | PM35 source-port читает локальный кэш; не отправляет CAN-запрос | Только быстрые RAM-чтения под блокировкой; отдельные time/validity |
| Dispatcher 167 | receive_ump() перехватывает адреса от 0x1000 |
Явная маршрутизация GAS-окон без попадания в чужой provider |
| Две copies templates | HEAD: third_party 86ece3ea907c, соседний eab8dc5e0a7f |
Зафиксировать ревизию; старые документы/пути не доказывают поддержку текущей сборкой |
5.1. Предварительная проба EEPROM 167 до внедрения GAS
Условие: сохранить функции проекта, текущую EEPROM AT25256B, настройки сборки и штатные протоколы. Замена регистратора, сокращение полей и переход на другую EEPROM в эту проверку не входят.
| Показатель | Физические байты | Результат |
|---|---|---|
| Полная EEPROM AT25256B | 32768 | 32 KiB |
| Параметры и исторически неиспользуемое последнее слово | 260 | 129 слов × 2 + 2 |
| Лимит загрузочного образа SCI8 | 32508 | 0x7EFC |
| Полная пересборка текущих исходников | 32472 | Свободно 36 байт |
| Проба GAS-алиасов к существующим 128 регистрам | 32524 | Добавлено 52 байта; превышение лимита 16 байт |
| Только общий словарь и преобразование адресов на ПК/шлюзе | +0 в прошивке | Существующий образ помещается; новая GAS-служба на устройстве не появляется |
Проба сделана во временном каталоге: 28 исходных файлов, TI C2000 22.6.0.LTS, текущие -O2 --opt_for_speed=0 --gen_func_subsections=on, FPU32/COFF, существующий generated firmware identity. Использованы действующие linker-файлы и hex2000 -boot -sci8 -b. Контроль SHA-256 подтвердил, что все 28 исходных файлов остались без изменений. Конфигурация и рабочие BIN не изменялись.
Временная копия message.c добавляет чтение/запись тех же регистров через Modbus FC03/FC06 по демонстрационному окну 0x5000…0x507F, сохраняя старые адреса, проверки и обработчики. Это окно используется только для оценки размера и не назначает адреса общего профиля. Каталог GAS, новый CAN-handler и GAS-логгер не добавлялись.
Вывод: проверенная компактная реализация GAS-алиасов при сохранении проекта не помещается в AT25256B. Расход полноценного общего provider и ProtoCAN-доступа пока не измерен. 52 байта — результат конкретной реализации, а не теоретический минимум любого GAS. Поэтому гарантировать размещение GAS в текущем запасе 36 байт нельзя. Общий словарь на ПК/шлюзе можно добавить без увеличения прошивки.
Испытание на плате и полная интеграция библиотек GAS не выполнялись. Другие старые BIN имеют другие размеры; вывод выше относится к пересборке текущего дерева.
Изолированная проверка 09.10.2026: TI cl2000 22.6.0.LTS, --compile_only -v28 -ml -mt --float_support=fpu32 --abi=coffabi --c99 -O2 --opt_for_speed=0, исходники из SETGUI/third_party/templates. Получены три успешных объекта и две неудачи byte API. Результаты создавались во временном каталоге. Это не проверка размера BIN или аппаратных таймингов.
Особенности типов C28x подтверждены также руководством TI, разделы 6.3 и J.3.4.
5.2. Реализовано: GAS только для M95M02
По последующему запросу GAS добавлен в проект под EEPROM_M95M02=1. Оба обработчика — RTU и служебный CAN УМП — используют один word-provider. Новые адреса 0x5000…0x507F отображают существующие 128 регистров, 0x5F00…0x5F07 публикуют сигнатуру и версию профиля 167/v1. Штатные адреса, защита, параметры и логгер сохранены.
| Сборка | До GAS | После GAS | Добавочный размер | Лимит EEPROM для образа | Запас |
|---|---|---|---|---|---|
| AT25256B | 32472 | 32472 | 0 | 32508 | 36 |
| M95M02 | 32764 | 33174 | 410 | 261884 | 228710 |
Единицы — физические байты SCI8. AT25256B проверен сравнением с кодом до внедрения при одинаковом generated identity: BIN идентичен по SHA-256, GAS-символов в MAP нет. RAML0 M95M02 имеет запас 831 слов / 1662 байта. Настройки компилятора и размещение секций не менялись.
Проверены обе целевые сборки TI, валидность boot-таблиц, host-тесты реальных RTU/CAN обработчиков, границы/RO/timeout, CRC и полный 124-словный CAN-снимок. Аппаратное испытание не выполнялось.
Это профиль конкретного устройства поверх его действующих транспортов. Нативный ProtoCAN MsgType=0x3 и GAS-логгер не интегрировались. Полная карта, ограничения и готовый BIN: GAS_167_M95M02.md.
6. Порядок внедрения
| Этап | Результат | Критерий готовности |
|---|---|---|
| 1. Реестр/профили | Общие semantic keys, типы/масштабы/права, старые transport alias | Нет пересечений; источники/направления определены; ОАП согласован |
| 2. Общее ядро | Word-map/callbacks отдельно от byte ABI; C28x и ARM/PC-порты | Совпадают значения, ошибки, границы и операции |
| 3. STM32/host пилот | Чтение одной карты через RTU и существующий CAN/SET | Один источник даёт одинаковые данные через оба транспорта |
| 4. ПМ35/167 | GAS-фасад над штатными регистрами/сервисами | Старый терминал совместим, BIN/MAP проверены, управление/защита работают |
| 5. Остальные MCU | Отдельные профили 166/ПМ67/стендов/приборов | Для каждого проверены адреса, типы, права, память, тайминги |
| 6. Все клиенты | SETGUI/Android/CLI/просмотр журналов используют экспорт профиля | Имена/единицы/версия совпадают, неподдерживаемые сервисы обнаруживаются |
| 7. Логгеры/потоки | GAS-логгер для snapshot; GAS-настройки для OLGR/FPGA | Поля/триггеры сохранены; измерены RAM, IRQ и скорость |
Начать с общего словаря поверх существующих данных, затем подключать транспорты, после этого решать замену логгеров. Высокочастотные выборки передавать блоками со своей временной базой и sequence; GAS описывает каналы, настройки и состояние.
Источники
| Источник | Что проверялось |
|---|---|
| main.c, message.c, ecan.c | Реальные dispatcher/handlers 167 |
| UMP_LOGGER.md, EEPROM_LAYOUT.md, FIRMWARE_IDENTITY.md, UMP_VOLTAGE_PROTECTION.md | Карта, состав записи, паспорт и защита |
| F28335.cmd, log_to_mem.c, manifest | Память и размер сохранённого образа |
| GAS Logger, gas_logger.c, pm35_map.h, pm35.json | Точный экспериментальный профиль/реализация |
| GAS.md, pcan_gas.h | ProtoCAN GAS и ограничения |
| EMULATOR_SERVICES, set_regmap.h | Каталог, dispatcher, byte ABI |
| ОАП, устройства | Нормативный источник и идентичность узла |
| Host GAS, gas.h | Пример ID/значений/HR |
| PROJECT_RELATIONS, FIRMWARE_PROTOCOL_AUDIT, GAS_LOGGER_EXPERIMENT | Клиенты, связи и статус эксперимента |
| CAN_to_RS485, ESP32, KONOR | Мосты/каталоги/датчики |
| CanBalzam7.c, UKSI, ПУИ | Существующие CAN/Modbus/legacy реализации |
| Online Logger | Параметры отдельно от потока OLGR |
Ссылки отражают локальную структуру на дату анализа. HEAD не описывает незакоммиченные изменения. Для строк «обзор» использованы инвентаризация и поиск в собственных исходниках; отсутствие совпадения не доказывает отсутствие протокола.