/** ******************************************************************************* * @file modbus_devid.h * @brief Идентификаторы устройства Modbus ******************************************************************************* @addtogroup MODBUS_DEVID Device Identifications Tools @ingroup MODBUS_INTERNAL @brief Функции для работы с идентификаторами устройства ******************************************************************************* * @details Модуль реализации функции Read Device Identifications (0x2B): - Базовая идентификация (Vendor, Product, Revision) - Расширенная идентификация (URL, Model, User fields) - Поддержка потоковой передачи больших объектов @section devobj Объекты идентификации: - VendorName, ProductCode, Revision - обязательные - VendorUrl, ProductName, ModelName - опциональные - User objects - пользовательские поля - Поддержка до 128 пользовательских объектов ******************************************************************************/ #ifndef __MODBUS_DEVID_H_ #define __MODBUS_DEVID_H_ #include "modbus_core.h" #ifdef MODBUS_ENABLE_DEVICE_IDENTIFICATIONS ///////////////////////////////////////////////////////////////////// ///////////////---DEVICE IDENTIVICATIONS DEFINES---////////////////// /** * @addtogroup MODBUS_DEVID * @{ */ #if MODBUS_NUMB_OF_USEROBJECTS > 0 #define MODBUS_DEVICE_CONFORMITY 0x83 #else #define MODBUS_DEVICE_CONFORMITY 0x82 #endif /** @brief Структура для объекта (идентификатора устройства модбас) */ typedef struct { unsigned length; char *name; }MB_DeviceObjectTypeDef; /** @brief Структура со идентификаторами устройства модбас */ typedef struct { MB_DeviceObjectTypeDef VendorName; MB_DeviceObjectTypeDef ProductCode; MB_DeviceObjectTypeDef Revision; MB_DeviceObjectTypeDef VendorUrl; MB_DeviceObjectTypeDef ProductName; MB_DeviceObjectTypeDef ModelName; MB_DeviceObjectTypeDef UserApplicationName; MB_DeviceObjectTypeDef Reserved[0x79]; MB_DeviceObjectTypeDef User[MODBUS_NUMB_OF_USEROBJECTS]; }MB_DeviceIdentificationsTypeDef; extern MB_DeviceIdentificationsTypeDef MB_DEVID; void MB_DeviceInentificationInit(void); ///////////////---DEVICE IDENTIVICATIONS DEFINES---////////////////// ///////////////////////////////////////////////////////////////////// ////////////////////---MODBUS FUNCTION DEFINES---//////////////////// /** * @brief Инициализация объектов * @details С помозью этого дефайна инициализируются объекты в @ref MB_DeviceInentificationInit */ #define MB_ObjectInit(_p_obj_, _userstring_) \ (_p_obj_)->length = sizeof(_userstring_);\ (_p_obj_)->name = _userstring_; /** * @brief Инициализация пользовательских объектов * @details С помозью этого дефайна инициализируются пользовательские объекты в MB_DeviceInentificationInit */ #define MB_UserObjectInit(_pinfostruct_, _user_numb_) MB_ObjectInit(&(_pinfostruct_)->User[_user_numb_], MODBUS_USEROBJECT##_user_numb_##_NAME) /** MODBUS_DEVID * @} */ ////////////////////---MODBUS MESSAGE DEFINES---///////////////////// ///////////////////////////////////////////////////////////////////// /////////////////////////---FUNCTIONS---///////////////////////////// /** * @addtogroup MODBUS_DEVID * @{ */ /* Записать Один Объект Идентификатора в массив данных */ void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj); /* Записать Массив Объектов Идентификатора в массив данных */ void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj); /** MODBUS_DEVID * @} */ /** * @addtogroup MODBUS_CMD_PROCESS_FUNCTIONS * @{ */ /* Обработать функцию Read Device Identifications (43/14 - 0x2B/0E) */ uint8_t MB_Process_Read_Device_Identifications(RS_MsgTypeDef *modbus_msg); /** MODBUS_CMD_PROCESS_FUNCTIONS * @} */ /////////////////////////---FUNCTIONS---///////////////////////////// #endif //MODBUS_ENABLE_DEVICE_IDENTIFICATIONS #endif //__MODBUS_DEVID_H_