/* Дополнительная карта GAS 167/v1 только для новой EEPROM M95M02. Русские пояснения сохранены в UTF-8. */ /* Начинает условие: BALSAM167_GAS_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef BALSAM167_GAS_H /* Определяет защитный символ или переключатель BALSAM167_GAS_H для последующей компиляции. */ #define BALSAM167_GAS_H /* Подключает "eeprom_config.h": выбор профиля физически установленной EEPROM при сборке. */ #include "eeprom_config.h" /* Подключает : настройки и интерфейс stdint. */ #include /* Профиль платы 167/v1 использует словные адреса независимо от транспорта. * Штатные адреса технологических регистров и УМП остаются доступными в обеих сборках. * Дополнительные области GAS присутствуют только при установленной M95M02. */ /* Условие компиляции EEPROM_M95M02: выбранный блок включается в текущий вариант прошивки. */ #if EEPROM_M95M02 /* Задаёт GAS167_REG_BASE = 0x5000U; начало псевдонимов 128 технологических регистров GAS, адрес 0x5000. */ #define GAS167_REG_BASE 0x5000U /* Задаёт GAS167_REG_COUNT = 128U; число технологических слов GAS; скрытое слово modbus[128] в диапазон не входит. */ #define GAS167_REG_COUNT 128U /* Задаёт GAS167_INFO_BASE = 0x5F00U; начало доступного только для чтения дескриптора GAS, адрес 0x5F00. */ #define GAS167_INFO_BASE 0x5F00U /* Задаёт GAS167_INFO_WORDS = 8U; длина дескриптора GAS — восемь 16-битных слов. */ #define GAS167_INFO_WORDS 8U /* Задаёт GAS167_MAX_WORDS = 124U; максимальная длина чтения GAS — 124 слова; служебный CAN требует чётную длину. */ #define GAS167_MAX_WORDS 124U /* Задаёт GAS167_PROFILE_VERSION = 1U; версия карты адресов GAS 167/v1. */ #define GAS167_PROFILE_VERSION 1U #define GAS167_CAPABILITIES 7U /* Бит 0 — RTU, бит 1 — служебный CAN, бит 2 — запись FC06. */ /* Задаёт GAS167_CAPABILITIES = 7U; маска возможностей: бит 0 — RTU, бит 1 — служебный CAN, бит 2 — FC06. */ /* Вызывается транспортами из главного цикла под краткой блокировкой IRQ. * Буфер ответа должен вмещать не меньше GAS167_MAX_WORDS слов uint16_t. * RTU читает 1..124 слова; служебный CAN — чётное число слов 2..124. * Успешное чтение возвращает число слов. Запись или ошибка возвращает адрес/значение. * error: 0 — успех, 1 — функция, 2 — адрес, 3 — значение. * Здесь нет обмена EEPROM, выделения памяти или изменения устройства регистратора. */ /* Проверяет принадлежность адреса одному из двух диапазонов GAS 167/v1; доступно только для M95M02. */ int gas167_contains(uint16_t address); /* Проверяет весь запрос FC03/FC06 до доступа к данным и формирует снимок регистров или дескриптора GAS. */ unsigned gas167_prepare(unsigned function, uint16_t address, uint16_t value, /* Объявляет can — CAN; reply — данные reply. Хранит указатель на данные. */ int can, uint16_t *reply, unsigned *error); /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif