/* Обработка Modbus, заводские параметры и сохранение настроек. Русские пояснения сохранены в UTF-8. */ /* Начинает условие: MESSAGE_H ещё не определён; защищает повторное включение или задаёт значение сборки. */ #ifndef MESSAGE_H /* Определяет защитный символ или переключатель MESSAGE_H для последующей компиляции. */ #define MESSAGE_H /* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef unsigned char CHAR; /* Задаёт ANSWER_LEN = 0x80; данные ANSWER_LEN. */ #define ANSWER_LEN 0x80 //70 // 16+16+16+16+6 /* Задаёт REPLY_LEN = 0x19; данные REPLY_LEN. */ #define REPLY_LEN 0x19 /* Задаёт byte_hi = byte_1; данные byte_hi. */ #define byte_hi byte_1 /* Задаёт byte_lo = byte_0; данные byte_lo. */ #define byte_lo byte_0 /* Начинает объявление типа, используемого структурами и интерфейсами этого модуля. */ typedef struct /* Открывает составной блок или описание полей; следующие строки принадлежат этому уровню вложенности. */ { /* Объявляет Address — адрес. */ unsigned char Address; // Адрес контроллера /* Объявляет Number — данные Number. */ unsigned char Number; // Номер команды /* Продолжает список аргументов, полей или выражение BAITE byte0;; порядок элементов сохраняется. */ BAITE byte0; /* Продолжает список аргументов, полей или выражение BAITE byte1;; порядок элементов сохраняется. */ BAITE byte1; /* Продолжает список аргументов, полей или выражение BAITE byte2;; порядок элементов сохраняется. */ BAITE byte2; /* Продолжает список аргументов, полей или выражение BAITE byte3;; порядок элементов сохраняется. */ BAITE byte3; /* Продолжает список аргументов, полей или выражение BAITE byte4;; порядок элементов сохраняется. */ BAITE byte4; /* Продолжает список аргументов, полей или выражение BAITE byte5;; порядок элементов сохраняется. */ BAITE byte5; /* Продолжает список аргументов, полей или выражение BAITE byte6;; порядок элементов сохраняется. */ BAITE byte6; /* Продолжает список аргументов, полей или выражение BAITE byte7;; порядок элементов сохраняется. */ BAITE byte7; /* Объявляет crc_lo — данные crc_lo. */ unsigned char crc_lo; /* Объявляет crc_hi — данные crc_hi. */ unsigned char crc_hi; /* Объявляет add_byte — данные add_byte. */ unsigned char add_byte; /* Продолжает список аргументов, полей или выражение } CMD_TO_TMS;; порядок элементов сохраняется. */ } CMD_TO_TMS; /* Объявляет modbus — массив технологических регистров; слово int на C28x занимает 16 бит. Память определена в другом модуле. */ extern int modbus[]; /* Обслуживает чтение регистров FC03 с проверкой адреса, длины и формированием ответа RTU. */ void ReceiveCommandModbus3(RS_DATA *rs_arr); /* Обслуживает одиночную запись FC06, проверяя доступность регистра и допустимость значения. */ void ReceiveCommandModbus6(RS_DATA *rs_arr); /* Объявляет интерфейс функции SendCommandModbus4; реализация вызывается через этот прототип. */ void SendCommandModbus4(RS_DATA *rs_arr); /* Объявляет интерфейс функции ReceiveAnswerModbus4; реализация вызывается через этот прототип. */ void ReceiveAnswerModbus4(RS_DATA *rs_arr); /* Сохраняет технологические регистры в область параметров, отделённую от загрузочного образа EEPROM. */ void Save_params(void); /* Читает сохранённые регистры из области параметров EEPROM и применяет настройки платы. */ void Load_params(void); /* Объявляет восстановление заводских параметров; для LOAD функция задаёт тайм-аут свежести CAN 2000 мс. */ void Default_params(void); /* Закрывает условный блок препроцессора; дальнейшие строки относятся к внешнему уровню. */ #endif //MESSAGE_H