42 lines
2.7 KiB
Markdown
42 lines
2.7 KiB
Markdown
# Общее ядро команд Modbus
|
||
|
||
Обработка coils и регистров функций 01/03/04/05/06/0F/10 без HAL, UART,
|
||
таймеров, глобальной карты регистров и выделения памяти.
|
||
|
||
Приложение → декодированный запрос → проверка и отображение адреса портом →
|
||
`mb_data_transfer` → банк регистров/битов приложения.
|
||
|
||
| Файл | Назначение и зависимости |
|
||
|---|---|
|
||
| `include/modbus_data.h` | Контракт, только stdint/stddef |
|
||
| `src/modbus_data.c` | Общие ограничения количества, обработка coils и регистров |
|
||
| `ports/stm32-legacy/modbus.c` | Совместимый адаптер старого John; зависит от проектного `rs_message.h` |
|
||
| `tests/test_modbus_data.c` | Границы и проход через все смещения coils 0..15 |
|
||
|
||
Порт сначала вызывает `mb_data_validate`, затем отображает **весь** диапазон
|
||
адресов в память, и только после успешного отображения вызывает transfer.
|
||
Коды возврата соответствуют исключениям Modbus: 0 — успех, 1 — функция,
|
||
3 — значение. Ёмкость данных передаётся в 16-битных словах. Адресная карта,
|
||
права записи, RTU framing, CRC и таймеры остаются обязанностью транспорта.
|
||
|
||
```c
|
||
#include "modbus_data.h"
|
||
uint16_t registers[2] = {123, 456};
|
||
uint16_t response[2];
|
||
uint16_t response_bytes = 0;
|
||
uint8_t status = mb_data_validate(3, 2, 0, 2);
|
||
/* Пример банка уже отображён; реальный порт проверяет адрес до вызова. */
|
||
if (status == 0) {
|
||
status = mb_data_transfer(3, 2, 0, registers, 0,
|
||
response, 2, &response_bytes);
|
||
}
|
||
/* status == 0, response_bytes == 4; сериализацию выполняет транспорт. */
|
||
```
|
||
|
||
Используется в `home/climate/core/STM32_Modbus`, `john103C6T6` и
|
||
`ds18b20-c8t6test`. Два последних подключают один совместимый адаптер;
|
||
климат сохраняет свой master/slave транспорт и диагностические функции.
|
||
Это не замена `pcan_modbus_server`, у которого другой транспортный контракт.
|
||
|
||
Проверка: `python tools/test_shared_libraries.py` из корня templates.
|