/** ****************************************************************************** * @file modbus_devid.h * @brief Идентификация устройства Modbus ****************************************************************************** @addtogroup MODBUS_DEVID Device Identificators Tools @ingroup MODBUS_INTERNAL @{ ****************************************************************************** * @details Модуль реализации функции Read Device Identification (0x2B): - Базовая идентификация (Vendor, Product, Revision) - Расширенная идентификация (URL, Model, User fields) - Поддержка потоковой передачи больших объектов @section Объекты идентификации: - VendorName, ProductCode, Revision - обязательные - VendorUrl, ProductName, ModelName - опциональные - User objects - пользовательские поля - Поддержка до 128 пользовательских объектов ******************************************************************************/ #ifndef __MODBUS_DEVID_H_ #define __MODBUS_DEVID_H_ #include "modbus_core.h" ///////////////////////////////////////////////////////////////////// ///////////////---DEVICE IDENTIVICATIONS DEFINES---////////////////// /** @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_DeviceIdentificationTypeDef; extern MB_DeviceIdentificationTypeDef MB_DEVID; void MB_DeviceInentificationInit(void); ///////////////---DEVICE IDENTIVICATIONS DEFINES---////////////////// ///////////////////////////////////////////////////////////////////// /////////////////---DEVICE DIAGNOSTICS DEFINES---//////////////////// /** @brief Структура со диагностической информацией устройства модбас */ typedef struct { uint16_t DiagnosticRegister; struct { uint16_t BusMessage; uint16_t BusCommunicationErr; uint16_t BusExceptionErr; uint16_t SlaveMessage; uint16_t SlaveNoResponse; uint16_t SlaveNAK; uint16_t SlaveBusy; uint16_t BusCharacterOverrun; }Counters; }MB_DiagnosticsInfoTypeDef; extern MB_DiagnosticsInfoTypeDef MB_DINFO; /////////////////---DEVICE DIAGNOSTICS 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 MESSAGE DEFINES---///////////////////// ///////////////////////////////////////////////////////////////////// /////////////////////////---FUNCTIONS---///////////////////////////// //---------PROCESS MODBUS COMMAND FUNCTIONS--------- /** * @addtogroup MODBUS_CMD_PROCESS_FUNCTIONS @{ */ /* Write Object of Device Identification to MessageData */ void MB_WriteSingleObjectToMessage(char *mbdata, unsigned *ind, MB_DeviceObjectTypeDef *obj); /* Write Object of Device Identification to MessageData */ void MB_WriteObjectsToMessage(RS_MsgTypeDef *modbus_msg, unsigned maxidofobj); /* Proccess command Read Device Identification (43/14 - 0x2B/0E) */ uint8_t MB_Proccess_Read_Device_Identification(RS_MsgTypeDef *modbus_msg); /** MODBUS_CMD_PROCESS_FUNCTIONS * @} */ /////////////////////////---FUNCTIONS---///////////////////////////// #endif //__MODBUS_DEVID_H_ /** MODBUS_DEVID * @} */