/** ************************************************************************** * @file modbus_data.h * @brief Заголовочный файл с описанием даты MODBUS. * @details Данный файл необходимо подключается в rs_message.h. После rs_message.h * подключается к основному проекту. * * @defgroup MODBUS_DATA * @ingroup MODBUS * @brief Modbus data description * *************************************************************************/ #include "stdint.h" //--------------DEFINES FOR REGISTERS--------------- // DEFINES FOR ARRAYS /** * @addtogroup MODBUS_DATA_RERISTERS_DEFINES * @ingroup MODBUS_DATA * @brief Defines for registers Структура дефайна адресов @verbatim Для массивов регистров: R__ADDR - модбас адресс первого регистра в массиве R__QNT - количество регистров в массиве @endverbatim * @{ */ /** * @brief Скорость обмена */ typedef enum //MB_SpeedTypeDef { MB_9600bs = 0x0000, ///< Скорость 9600 б/с MB_14400bs = 0x0001, ///< Скорость 14400 б/с MB_19200bs = 0x0002, ///< Скорость 19200 б/с MB_31250bs = 0x0003, ///< Скорость 31250 б/с MB_38400bs = 0x0004, ///< Скорость 38400 б/с MB_56000bs = 0x0005, ///< Скорость 56000 б/с MB_57600bs = 0x0006, ///< Скорость 57600 б/с MB_115200bs = 0x0007, ///< Скорость 115200 б/с mb16bit = 0x1000, ///< костыль чтобы enum был 16-битный... или забить на enum, пока не определился }MB_SpeedTypeDef; /** * @brief Контроль четности */ typedef enum //MB_ParityCtrlTypeDef { NoParityCtrl = 0x0000, ///< контроля нет EvenParityCtrl = 0x0400, ///< четный контроль OddParityCtrl = 0x0600, ///< нечетый контроль }MB_ParityCtrlTypeDef; /** * @brief Регистры хранения для уставок параметров МКЗТЭ */ typedef struct //MB_DataHoldRegsTypeDef { uint16_t Warning_Setpoints[85]; /*!< @brief Адреса 0-84: Уставки «Предупреждение» @details Задает пороговое напряжение, при достижении которого будет сформирован сигнал «Предупреждение». Максимальное значение (записываемое в регистр) - 1100 (1,1 В *1000) */ uint16_t Errors_Setpoints[85]; /*!< @brief Адреса 85-169: Уставки «Авария» @details Задает пороговое напряжение, при достижении которого будет сформирован сигнал «Авария». Максимальное значение (записываемое в регистр) - 1100 (1,1 В *1000) */ uint16_t Commands_Mode; /*!< @brief Адрес 170: Уставка «Команды» @details Принимаемые значения: - 0x0000 – стандартная работа - 0x0001 – запрет опроса ТЭ (активен только обмен с ЛСУ ЭС, ТЭ не контролируются) */ uint16_t reserved; ///< Адрес 171 зарезервирован uint16_t MZKTE_Network_Adress; /*!< @brief Адрес 172: Уставка «Сетевой адрес МЗКТЭ» @details При удачной записи этого регистра ответный фрейм не отправляется */ MB_SpeedTypeDef Modbus_Speed:16; /*!< @brief Адрес 173: Уставка «Скорость обмена» @details Принимаемые значения описаны в @ref MB_SpeedTypeDef. При удачной записи этого регистра ответный фрейм не отправляется */ MB_ParityCtrlTypeDef Parity_Control:16; /*!< @brief Адрес 174: Уставка «Команды» @details Принимаемые значения описаны в @ref MB_ParityCtrlTypeDef. При удачной записи этого регистра ответный фрейм не отправляется */ }MB_DataHoldRegsTypeDef; /** * @brief Номер неисправности МЗКТЭ */ typedef enum //MB_MZKTEErrorsTypeDef { No_Err = 0x00, ///< Неисправность отсутствует Err_Digit_5V_Power = 0x01, ///< Неисправность цифрового источника питания +5 В Err_Analog_15V_5V_3V_Power = 0x02, ///< Неисправность аналогового источника питания (±15 В/+5 В/+3,3 В) Err_SCI_5V_Power = 0x03, ///< Неисправность источника питания последовательных интерфейсов микроконтроллера +5 В Err_24V_Power = 0x04, ///< Неисправность источника питания +24 В Program_Err_1 = 0x05, ///< Программная ошибка 1 Program_Err_2 = 0x06, ///< Программная ошибка 2 Program_Err_3 = 0x07, ///< Программная ошибка 3 Program_Err_4 = 0x08, ///< Программная ошибка 4 Program_Err_5 = 0x09, ///< Программная ошибка 5 Program_Err_6 = 0x0A, ///< Программная ошибка 6 Program_Err_7 = 0x0B, ///< Программная ошибка 7 Program_Err_8 = 0x0C, ///< Программная ошибка 8 }MB_MZKTEErrorsTypeDef; /** * @brief Сборный параметр * @details Информация о состоянии МЗКТЭ */ typedef union //MB_MZKTEStatusTypeDef { uint16_t all; ///< Доступ к регистру целиком struct { unsigned TE_ErrActive:1; /*!< @brief Бит [0]: Авария на ТЭ @details Состояния: - 0 - напряжения на всех ТЭ выше аварийных порогов, задаваемых уставками «Авария» - 1 - напряжение на одном или нескольких ТЭ достигло или ниже аварийного порога, задаваемого уставкой «Авария» */ unsigned TE_WarnActive:1; /*!< @brief Бит [1]: Предупреждения на ТЭ @details Состояния: - 0 - напряжения на всех ТЭ выше предупредительных порогов, задаваемых уставкой «Предупреждение» - 1 - напряжение на одном или нескольких ТЭ достигло или ниже предупредительного порога, задаваемого уставкой «Предупреждение» */ unsigned Opros_TE:1; /*!< @brief Бит [2]: Разрешение опроса ТЭ @details Состояния: - 0 – опрос ТЭ разрешен - 1 – опрос ТЭ запрещен */ unsigned MZKTE_ErrStatus:2; /*!< @brief Биты [4:3]: Состояние МЗКТЭ @details Состояния: - 0 - МЗКТЭ функционирует нормально. Идет опрос ТЭ. - 1 - неисправность МЗКТЭ, при которой МЗКТЭ может выполнять свои основные функции (некоторые программные ошибки из @ref MB_MZKTEErrorsTypeDef) - 2 - Неисправность МЗКТЭ, при которой выполнение основных функций не представляется возможным (ошибки 1-3 и некоторые программные ошибки из @ref MB_MZKTEErrorsTypeDef) */ unsigned reserved:3; ///< Биты [7:5] зарезервированны MB_MZKTEErrorsTypeDef MZKTE_Error:8; /*!< @brief Биты [15:8]: Номер неисправности МЗКТЭ @details Номера неисправностей описаны в @ref MB_MZKTEErrorsTypeDef */ }param; ///< Доступ к регистру по параметрам }MB_MZKTEStatusTypeDef; /** * @brief Входные регистры для контроля состояния МЗКТЭ */ typedef struct //MB_DataInRegsTypeDef { uint16_t U_TE[85]; /*!< @brief Адреса 0-84: Текущие значения напряжения ТЭ @details Значения передаются умноженными на 1000 (т.е. если Uтэ = 0,625 В, то будет передано число 625) */ MB_MZKTEStatusTypeDef Status; /*!< @brief Адрес 85: Сборный параметр @details Информация о состоянии МЗКТЭ @ref MB_MZKTEStatusTypeDef */ }MB_DataInRegsTypeDef; // DEFINES FOR REGISTERS ARRAYS #define R_INREG_ADDR 0 #define R_INREG_QNT 86 #define R_HOLDREG_ADDR 0 #define R_HOLDREG_QNT 175 // DEFINES FOR REGISTERS LOCAL ADDRESSES //#define R_SET_ERROR(_te_num_) 0 /** MODBUS_DATA_RERISTERS_DEFINES * @} */ //----------------DEFINES FOR COILS----------------- /** * @addtogroup MODBUS_DATA_COILS_DEFINES * @ingroup MODBUS_DATA * @brief Defines for coils @verbatim Структура дефайна Для массивов коилов: C__ADDR - модбас адресс первого коила в массиве C__QNT - количество коилов в массиве (минимум 16) @endverbatim * @{ */ /** * @brief Флаги исключения ТЭ из алгоритма формирования сигналов «Предупреждение» и «Авария» * @details В случае установки нулевого значения конкретной ячейки значение напряжения ТЭ, * связанного с этой ячейкой, не будет учитываться при формировании сигналов «Предупреждение» и «Авария» */ typedef struct //MB_DataCoilsTypeDef { union { struct { uint64_t TE0_63; ///< Ячейки ТЭ №0-63 uint32_t TE64_84:21; ///< Ячейки ТЭ №64-84 }all; struct { unsigned TE0_Exclude:1; unsigned TE1_Exclude:1; unsigned TE2_Exclude:1; unsigned TE3_Exclude:1; unsigned TE4_Exclude:1; unsigned TE5_Exclude:1; unsigned TE6_Exclude:1; unsigned TE7_Exclude:1; unsigned TE8_Exclude:1; unsigned TE9_Exclude:1; unsigned TE10_Exclude:1; unsigned TE11_Exclude:1; unsigned TE12_Exclude:1; unsigned TE13_Exclude:1; unsigned TE14_Exclude:1; unsigned TE15_Exclude:1; unsigned TE16_Exclude:1; unsigned TE17_Exclude:1; unsigned TE18_Exclude:1; unsigned TE19_Exclude:1; unsigned TE20_Exclude:1; unsigned TE21_Exclude:1; unsigned TE22_Exclude:1; unsigned TE23_Exclude:1; unsigned TE24_Exclude:1; unsigned TE25_Exclude:1; unsigned TE26_Exclude:1; unsigned TE27_Exclude:1; unsigned TE28_Exclude:1; unsigned TE29_Exclude:1; unsigned TE30_Exclude:1; unsigned TE31_Exclude:1; unsigned TE32_Exclude:1; unsigned TE33_Exclude:1; unsigned TE34_Exclude:1; unsigned TE35_Exclude:1; unsigned TE36_Exclude:1; unsigned TE37_Exclude:1; unsigned TE38_Exclude:1; unsigned TE39_Exclude:1; unsigned TE40_Exclude:1; unsigned TE41_Exclude:1; unsigned TE42_Exclude:1; unsigned TE43_Exclude:1; unsigned TE44_Exclude:1; unsigned TE45_Exclude:1; unsigned TE46_Exclude:1; unsigned TE47_Exclude:1; unsigned TE48_Exclude:1; unsigned TE49_Exclude:1; unsigned TE50_Exclude:1; unsigned TE51_Exclude:1; unsigned TE52_Exclude:1; unsigned TE53_Exclude:1; unsigned TE54_Exclude:1; unsigned TE55_Exclude:1; unsigned TE56_Exclude:1; unsigned TE57_Exclude:1; unsigned TE58_Exclude:1; unsigned TE59_Exclude:1; unsigned TE60_Exclude:1; unsigned TE61_Exclude:1; unsigned TE62_Exclude:1; unsigned TE63_Exclude:1; unsigned TE64_Exclude:1; unsigned TE65_Exclude:1; unsigned TE66_Exclude:1; unsigned TE67_Exclude:1; unsigned TE68_Exclude:1; unsigned TE69_Exclude:1; unsigned TE70_Exclude:1; unsigned TE71_Exclude:1; unsigned TE72_Exclude:1; unsigned TE73_Exclude:1; unsigned TE74_Exclude:1; unsigned TE75_Exclude:1; unsigned TE76_Exclude:1; unsigned TE77_Exclude:1; unsigned TE78_Exclude:1; unsigned TE79_Exclude:1; unsigned TE80_Exclude:1; unsigned TE81_Exclude:1; unsigned TE82_Exclude:1; unsigned TE83_Exclude:1; unsigned TE84_Exclude:1; }bit; ///< Биты для доступа к каждой ячейке ТЭ }Exclude; ///< Юнион для исключения ТЭ }MB_DataCoilsTypeDef; // DEFINES FOR COIL ARRAYS #define C_TE_EXCLUDE_ADDR 0 #define C_TE_EXCLUDE_QNT 84 /** MODBUS_DATA_COILS_DEFINES * @} */ //-----------MODBUS DEVICE DATA SETTING------------- // MODBUS DATA STRUCTTURE /** * @brief Структура со всеми регистрами и коилами модбас * @ingroup MODBUS_DATA */ typedef struct // mzkt modbus data { MB_DataInRegsTypeDef InRegs; ///< Modbus input registers @ref MB_DataInRegsTypeDef MB_DataCoilsTypeDef Coils; ///< Modbus coils @ref MB_DataCoilsTypeDef MB_DataHoldRegsTypeDef HoldRegs; ///< Modbus holding registers @ref MB_DataHoldRegsTypeDef }MB_DataStructureTypeDef; extern MB_DataStructureTypeDef MB_DATA; ///////////////////////////////////////////////////////////// ///////////////////////TEMP/OUTDATE/OTHER//////////////////// //typedef enum //MB_MZKTECommandsTypeDef //{ // StandartMode = 0x00, ///< Стандартная работа // Opros_TE_Disable = 0x01, ///< Запрет опроса ТЭ (активен только обмен с ЛСУ ЭС, ТЭ не контролируются) //}MB_MZKTECommandsTypeDef; ///** // * @brief Состояние МЗКТЭ // */ //typedef enum //MB_MZKTEErrStatusTypeDef //{ // MZKTE_OK = 0x0, ///< МЗКТЭ функционирует нормально. Идет опрос ТЭ. // NonCritical_Err = 0x1, ///< Неисправность МЗКТЭ, при которой МЗКТЭ может выполнять свои основные функции (некоторые программные ошибки из @ref MB_MZKTEErrorsTypeDef). // Critical_Err = 0x2, ///< Неисправность МЗКТЭ, при которой выполнение основных функций не представляется возможным (ошибки 1-3 и некоторые программные ошибки из @ref MB_MZKTEErrorsTypeDef) // //}MB_MZKTEErrStatusTypeDef; //typedef enum //{ // TE_No_Err = 0x0, ///< Напряжения на всех ТЭ выше аварийных порогов, задаваемых уставками «Авария» // TE_Err = 0x1, ///< Напряжение на одном или нескольких ТЭ достигло или ниже аварийного порога, задаваемого уставкой «Авария» //}MB_TEErrActiveTypeDef; //typedef enum //{ // TE_No_Warn = 0x0, ///< Напряжения на всех ТЭ выше предупредительных порогов, задаваемых уставкой «Предупреждение» // TE_Warn = 0x1, ///< Напряжение на одном или нескольких ТЭ достигло или ниже предупредительного порога, задаваемого уставкой «Предупреждение» //}MB_TEWarnActiveTypeDef; //typedef enum //{ // OprosTE_Enable = 0x0, ///< Опрос ТЭ разрешен // OprosTE_Disable = 0x1, ///< Опрос ТЭ запрещен (см. регистр хранения 170) //}MB_OprosTETypeDef;