# 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](https://www.modbus.org/file/secure/modbusprotocolspecification.pdf). Фактические лимиты: 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](https://www.ti.com/lit/ug/spru514y/spru514y.pdf). ### 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](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](../Source/Internal/main.c), [message.c](../Source/Internal/message.c), [ecan.c](../Source/Internal/ecan.c) | Реальные dispatcher/handlers 167 | | [UMP_LOGGER.md](UMP_LOGGER.md), [EEPROM_LAYOUT.md](EEPROM_LAYOUT.md), [FIRMWARE_IDENTITY.md](FIRMWARE_IDENTITY.md), [UMP_VOLTAGE_PROTECTION.md](UMP_VOLTAGE_PROTECTION.md) | Карта, состав записи, паспорт и защита | | [F28335.cmd](../F28335.cmd), [log_to_mem.c](../Source/Internal/log_to_mem.c), [manifest](../Bin/VoltageProtection/UKSSTMS320F28335_voltage_protection.bin.manifest.json) | Память и размер сохранённого образа | | [GAS Logger](../../newProject/SETGUI/third_party/templates/c/gas-logger/README.md), [gas_logger.c](../../newProject/SETGUI/third_party/templates/c/gas-logger/src/gas_logger.c), [pm35_map.h](../../newProject/SETGUI/third_party/templates/c/gas-logger/ports/pm35/pm35_map.h), [pm35.json](../../newProject/SETGUI/third_party/templates/python/set_devices/gas_logger_maps/pm35.json) | Точный экспериментальный профиль/реализация | | [GAS.md](../../newProject/SETGUI/third_party/templates/c/set-protocol/docs/legacy/GAS.md), [pcan_gas.h](../../newProject/SETGUI/third_party/templates/c/set-protocol/include/pcan_gas.h) | ProtoCAN GAS и ограничения | | [EMULATOR_SERVICES](../../newProject/SETGUI/third_party/templates/c/set-protocol/docs/EMULATOR_SERVICES.md), [set_regmap.h](../../newProject/SETGUI/third_party/templates/c/set-protocol/include/set_regmap.h) | Каталог, dispatcher, byte ABI | | [ОАП](../../newProject/SETGUI/third_party/templates/doc/setcan/protocan/OAP.md), [устройства](../../newProject/SETGUI/third_party/templates/doc/setcan/DEVICE_REGISTRY.md) | Нормативный источник и идентичность узла | | [Host GAS](../../newProject/home/gas/README.md), [gas.h](../../newProject/home/gas/firmware/gas.h) | Пример ID/значений/HR | | [PROJECT_RELATIONS](../../newProject/SETGUI/docs/PROJECT_RELATIONS.md), [FIRMWARE_PROTOCOL_AUDIT](../../newProject/SETGUI/docs/FIRMWARE_PROTOCOL_AUDIT.md), [GAS_LOGGER_EXPERIMENT](../../newProject/SETGUI/docs/GAS_LOGGER_EXPERIMENT.md) | Клиенты, связи и статус эксперимента | | [CAN_to_RS485](../../newProject/can_to_rs/README.md), [ESP32](../../newProject/esp_parser/README.md), [KONOR](../../newProject/KONOR_ds18b20/PROTOCOL.md) | Мосты/каталоги/датчики | | [CanBalzam7.c](../../BALZAM_167/Src/balzam_7/CanBalzam7.c), [UKSI](../../UKSI/Core/Src/freertos.c), [ПУИ](../../newProject/prolitarski_ups/doc/MPSU_EXCHANGE_PARAMETERS.md) | Существующие CAN/Modbus/legacy реализации | | [Online Logger](../../home_proj/stm32h755_logger/online_logger/protocol/online_logger_header/README.md) | Параметры отдельно от потока OLGR | Ссылки отражают локальную структуру на дату анализа. HEAD не описывает незакоммиченные изменения. Для строк «обзор» использованы инвентаризация и поиск в собственных исходниках; отсутствие совпадения не доказывает отсутствие протокола.