/** ****************************************************************************** * @file modbus_data.h * @brief Определения структур данных Modbus устройства ****************************************************************************** @defgroup MODBUS_DATA Modbus Registers Map @ingroup MODBUS @brief Определение карты регистров и коилов ****************************************************************************** * @details Файл содержит объявления структур данных, доступных через Modbus: - Holding Registers (R/W) - регистры хранения - Input Registers (R/O) - входные регистры - Coils (R/W) - дискретные выходы @section datinit Базовая настройка под устройство: 1. Настроить диапазоны адресов - @ref R_INPUT_ADDR и @ref R_INPUT_QNT для входных регистров - @ref R_HOLDING_ADDR и @ref R_HOLDING_QNT для регистров хранения - @ref C_COILS_ADDR и @ref C_COILS_ADDR для коилов 3. Настроить структуры данных: - @ref MB_DataInRegsTypeDef - @ref MB_DataHoldRegsTypeDef - @ref MB_DataCoilsTypeDef @section datexpert Расширенная настройка под устройство: 1. Добавить новый массив с нужными данными. 2. Добавить дефайны для определения его начального адреса и количества элементов 3. Добавить проверку адресов в MB_DefineRegistersAddress/MB_DefineCoilsAddress. Пример: @code #define R_USER_ADDR 555 #define R_USER_QNT 16 uint16_t user_regs[16]; //... else if(MB_Check_Address_For_Arr(Addr, Qnt, R_USER_ADDR, R_USER_QNT) == ET_NO_ERRORS) { *pRegs = MB_Set_Register_Ptr(&user_regs, Addr-R_USER_ADDR); // ВАЖНО! // -R_USER_ADDR нужен чтобы взять адрес относительно начала массива } else { return ET_ILLEGAL_DATA_ADDRESS; } @endcode ******************************************************************************/ #ifndef _MODBUS_DATA_H_ #define _MODBUS_DATA_H_ #include "stdint.h" //--------------SIZES OF DATA--------------- #define R_HOLDING_PRVT_PARAMS_ADR 555 #define R_HOLDING_PRVT_PARAMS_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t)) // DEFINES FOR INPUT REGISTERS ARRAYS #define R_INPUT_ADDR 0 ///< Начальный адрес входных регистров #define R_INPUT_QNT (sizeof(UPP_PUI_Values_t)/sizeof(uint16_t)) ///< Количество входных регистров // DEFINES FOR HOLDING REGISTERS ARRAYS #define R_HOLDING_ADDR 0 ///< Начальный адрес регистров хранения #define R_HOLDING_QNT (sizeof(UPP_PUI_Params_t)/sizeof(uint16_t)) ///< Количество регистров хранения // DEFINES FOR COIL ARRAYS #define C_COILS_ADDR 0 ///< Начальный адрес коилов #define C_COILS_QNT 16 ///< Количество регистров коилов //--------------DEFINES FOR REGISTERS--------------- // DEFINES FOR ARRAYS /** * @addtogroup MODBUS_DATA_RERISTERS_DEFINES Registers structures * @ingroup MODBUS_DATA * @brief Стуруктура регистров (входных и хранения) @code Для массивов регистров: R__ADDR - модбас адресс первого регистра в массиве R__QNT - количество регистров в массиве @endcode * @{ */ /** * @brief Регистры хранения */ typedef struct //MB_DataInRegsTypeDef { }MB_DataInRegsTypeDef; /** * @brief Входные регистры */ typedef struct //MB_DataInRegsTypeDef { }MB_DataHoldRegsTypeDef; /** MODBUS_DATA_RERISTERS_DEFINES * @} */ //----------------DEFINES FOR COILS----------------- /** * @addtogroup MODBUS_DATA_COILS_DEFINES Coils Structure * @ingroup MODBUS_DATA * @brief Структура коилов @code Структура дефайна Для массивов коилов: C__ADDR - модбас адресс первого коила в массиве C__QNT - количество коилов в массиве (минимум 16) @endcode * @{ */ /** * @brief Коилы * @details Желательно с помощью reserved делать стркутуру кратной 16-битам */ typedef struct //MB_DataCoilsTypeDef { unsigned reserved:16; }MB_DataCoilsTypeDef; /** MODBUS_DATA_COILS_DEFINES * @} */ //-----------MODBUS DEVICE DATA SETTING------------- // MODBUS DATA STRUCTTURE /** * @brief Структура со всеми регистрами и коилами модбас * @ingroup MODBUS_DATA */ typedef struct // tester 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; typedef struct { }MB_DataInternalTypeDef; extern MB_DataInternalTypeDef MB_INTERNAL; #endif //_MODBUS_DATA_H_ ///////////////////////////////////////////////////////////// ///////////////////////TEMP/OUTDATE/OTHER////////////////////