Files
Balsam_167/Doc/GAS_ADDRESS_ALLOCATION.md
Andrey 1e911e5250 Обновить логгер УМП и исправить запуск UART и EEPROM
Перейти на компактные 12-словные записи v4 и сохранять 10 процентов банка после отключения. Добавить трёхсекундное ожидание роста ЗПТ и настраиваемый лимит пусков. Явно инициализировать состояние UART и гарантировать публикацию параметров EEPROM перед запуском Timer2. Сохранить воспроизводимые сборки, регрессионные проверки, документацию и обновлённые результаты сборки; исключить временные артефакты.
2026-10-12 12:25:41 +03:00

98 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сквозная нумерация GAS: распределение адресов
Дата: **9 октября 2026 года**.
УКСС выделен диапазон **0…11999**: общий блок 0 и блоки узлов 1…11, по **1000 ID** каждый. Соответствие технологических слов Modbus текущему профилю 167/v1 и новым ID УМП приведено в [GAS_MODBUS_MAP.md](GAS_MODBUS_MAP.md). Новая нумерация назначена в документации; в прошивке пока действует профиль 167/v1.
## Диапазоны проектов
В новой схеме числа без префикса `0x` — **десятичные**. Каждому номеру узла соответствует блок 1000 адресов с базой `номер × 1000`.
| Проект / семейство | Первый ID | Последний ID включительно | Число адресов | Статус |
|---|---:|---:|---:|---|
| УКСС | 0 | 11999 | 12000 | Выделено: 12 блоков по 1000 ID |
| Остальные проекты | 12000 | 65535 | 53536 | Свободно для последующего распределения |
Границы УКСС в hex: `0x0000…0x2EDF`; свободная область начинается с `0x2EE0`.
Резерв диапазона не означает, что каждый адрес уже реализован. Адреса обозначают логические 16-битные слова; память для незадействованных ID не выделяется. Параметр шириной 32 бита занимает два последовательных слова. Служебные слова также должны входить в выделенный диапазон проекта.
## Узлы УКСС
Номера узлов: **1…11**; **5 и 6 — УМП**. Назначения 1…9 подтверждены в [package.h](../Source/Internal/Include/package.h); служебные адреса 10/11 определены в [cntrl_adr.c](../Source/Internal/cntrl_adr.c).
| Номер | Назначение в текущем коде | Обозначение |
|---:|---|---|
| 1 | Трансформаторный узел 1 | `adr_TRN1` |
| 2 | Трансформаторный узел 2 | `adr_TRN2` |
| 3 | Силовой узел 1 | `adr_POW1` |
| 4 | Силовой узел 2 | `adr_POW2` |
| 5 | УМП 1, LOAD | `adr_LOA1` |
| 6 | УМП 2, LOAD | `adr_LOA2` |
| 7 | Узел ENG1 | `adr_ENG1` |
| 8 | Пульт | `adr_PULT` |
| 9 | Шкаф | `adr_SHKF` |
| 10 | Универсальный адрес / адрес общей посылки | `CNTRL_ADDR_UNIVERSAL`, `ADDR_FOR_ALL` |
| 11 | Адрес терминала | `ADDR_TERMINAL` |
Номер узла, тип платы `Desk` и ID параметра GAS — отдельные величины. Например, УМП 1 имеет `Mode = 5`, а тип обеих плат УМП равен `dsk_LOAD = 6`. Блок номера 10 зарезервирован для роли общего адреса; существующий номер 10 не идентифицирует отдельную физическую плату.
## Назначенные блоки УКСС
Границы включительные. Все блоки содержат по 1000 слов, пересечений нет.
| Область | Первый ID, dec | Последний ID, dec | База, hex |
|---|---:|---:|---|
| Блок 0: общий резерв УКСС | 0 | 999 | `0x0000` |
| Трансформаторный узел 1, номер 1 | 1000 | 1999 | `0x03E8` |
| Трансформаторный узел 2, номер 2 | 2000 | 2999 | `0x07D0` |
| Силовой узел 1, номер 3 | 3000 | 3999 | `0x0BB8` |
| Силовой узел 2, номер 4 | 4000 | 4999 | `0x0FA0` |
| УМП 1, номер 5 | 5000 | 5999 | `0x1388` |
| УМП 2, номер 6 | 6000 | 6999 | `0x1770` |
| Узел ENG1, номер 7 | 7000 | 7999 | `0x1B58` |
| Пульт, номер 8 | 8000 | 8999 | `0x1F40` |
| Шкаф, номер 9 | 9000 | 9999 | `0x2328` |
| Резерв роли общего адреса, номер 10 | 10000 | 10999 | `0x2710` |
| Терминал, номер 11 | 11000 | 11999 | `0x2AF8` |
Правило адресации:
```text
GAS_ID = номер_узла × 1000 + смещение
номер_узла = 0…11
смещение = 0…999
```
## Технологические слова УМП
Для штатного технологического Modbus-адреса `n = 0…127` в новой карте назначено смещение `n`:
```text
УМП 1, номер 5: GAS_ID = 5000 + n → 5000…5127
УМП 2, номер 6: GAS_ID = 6000 + n → 6000…6127
```
| Параметр | Штатный Modbus, hex | УМП 1: новый GAS, dec | УМП 2: новый GAS, dec |
|---|---|---:|---:|
| Первое технологическое слово | `0x0000` | 5000 | 6000 |
| `DAC_go` | `0x0050` | 5080 | 6080 |
| `DAC_stop` | `0x0051` | 5081 | 6081 |
| `LOAD_CAN_TIMEOUT` | `0x0052` | 5082 | 6082 |
| `LOAD_STATUS` | `0x007C` | 5124 | 6124 |
| `LOAD_MAX_ATTEMPTS` | `0x007D` | 5125 | 6125 |
| `LastMode` | `0x007E` | 5126 | 6126 |
| `Commands` | `0x007F` | 5127 | 6127 |
Смещения **128…999** в каждом блоке остаются резервом для расширений. Служебные параметры и новые данные в этих смещениях пока не назначены. Полная таблица всех 128 технологических слов: [GAS_MODBUS_MAP.md](GAS_MODBUS_MAP.md).
## Связь с текущей прошивкой
В существующей реализации база технологических GAS-регистров равна **`0x5000` = 20480**, а дескриптор находится на **`0x5F00` = 24320**. Это локальное окно профиля 167/v1, выбранное независимо от новой схемы сквозной нумерации.
Текущее `0x5000` не означает `5 × 1000`: последнее вычисление даёт **5000 десятичных = `0x1388`**. Для адресации УМП 1 и УМП 2 по номеру узла потребуются разные базы, определяемые по `Mode`.
Штатные адреса Modbus, служебные окна регистратора, паспорта, защиты и EEPROM уже имеют собственные значения. При переносе сквозной карты нужно определить соответствие GAS ↔ адрес протокола: глобальный ID может отличаться от прежнего Modbus-адреса. Это позволяет отдельно согласовать новую нумерацию и совместимость существующих клиентов.
Диапазон УКСС и размеры блоков назначены. Перенос этих ID в обработчики прошивки и размещение служебных параметров в резерве — отдельные изменения реализации.