/** * @file message.h * @brief Форматы команд, размеры ответов и API обработки Modbus-сообщений. * * CMD_TO_TMS описывает точную раскладку принятого кадра, включая CRC. Поля и * ANSWER_LEN/REPLY_LEN согласованы с удалённым мастером; структура использует * целевые типы DSP, поэтому не должна сериализоваться простым memcpy на PC. */ #ifndef MESSAGE_H #define MESSAGE_H typedef unsigned char CHAR; #define ANSWER_LEN 0x80 //70 // 16+16+16+16+6 #define REPLY_LEN 0x19 #define byte_hi byte_1 #define byte_lo byte_0 typedef struct { unsigned char Address; // Адрес контроллера unsigned char Number; // Номер команды BAITE byte0; BAITE byte1; BAITE byte2; BAITE byte3; BAITE byte4; BAITE byte5; BAITE byte6; BAITE byte7; unsigned char crc_lo; unsigned char crc_hi; unsigned char add_byte; } CMD_TO_TMS; extern int modbus[]; /** Принимает запрос чтения регистров и подготавливает соответствующий ответ. */ void ReceiveCommandModbus3(RS_DATA *rs_arr); /** Принимает запрос записи одного регистра и применяет разрешённый параметр. */ void ReceiveCommandModbus6(RS_DATA *rs_arr); /** Отправляет текущий блок телеметрии ответом прикладной функции 4. */ void SendCommandModbus4(RS_DATA *rs_arr); /** Разбирает ответ функции 4, полученный от ведомого устройства. */ void ReceiveAnswerModbus4(RS_DATA *rs_arr); /** Сохраняет текущий массив параметров в EEPROM. */ void Save_params(void); /** Загружает параметры из EEPROM и заменяет некорректные значения безопасными. */ void Load_params(void); /** Заполняет параметры значениями для выбранного в package.h варианта платы. */ void Default_params(void); #endif //MESSAGE_H