58 lines
2.2 KiB
C
58 lines
2.2 KiB
C
/**
|
||
* @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
|