/** ************************************************************************** * @file modbus_data.h * @brief Заголовочный файл с описанием даты MODBUS. * @details Данный файл необходимо подключается в rs_message.h. После rs_message.h * подключается к основному проекту. * * @defgroup MODBUS_DATA * @ingroup MODBUS * @brief Modbus data description * *************************************************************************/ #ifndef _MODBUS_DATA_H_ #define _MODBUS_DATA_H_ // DEFINES FOR INPUT REGISTERS ARRAYS #define R_INPUT_ADDR 0 #define R_INPUT_QNT 2000 // DEFINES FOR HOLDING REGISTERS ARRAYS #define R_HOLDING_ADDR 0 #define R_HOLDING_QNT 2000 // DEFINES FOR COIL ARRAYS #define C_CONTROL_ADDR 0 #define C_CONTROL_QNT 1000 #include "stdint.h" #include "ds18b20_driver.h" #include "PROJ_setup.h" //--------------DEFINES FOR REGISTERS--------------- // DEFINES FOR ARRAYS /** * @addtogroup MODBUS_DATA_RERISTERS_DEFINES * @ingroup MODBUS_DATA * @brief Defines for registers Структура дефайна адресов @verbatim Для массивов регистров: R__ADDR - модбас адресс первого регистра в массиве R__QNT - количество регистров в массиве При добавлении новых массивов регистров, необходимо их добавить в функцию MB_DefineRegistersAddress if(MB_Check_Address_For_Arr(Addr, Qnt, R__ADDR, R__QNT) == NO_ERRORS) { *pRegs = MB_Set_Register_Ptr(&, Addr); // начало регистров хранения/входных } @endverbatim * @{ */ /** * @brief Регистры хранения */ /** * @brief Определить размер структуры в регистрах модбас (16-бит слова) */ #define mb_sizeof(_struct_) (sizeof(_struct_)/sizeof(uint16_t)) /** * @brief Определить количество резервных байт для выравнивания * @details Выравнивает так, чтобы количество регистров в _struct_ и reserved равнялось _align_. * */ #define mb_fill_rsv(_align_, _struct_) ((_align_ > mb_sizeof(_struct_)) ? (_align_ - mb_sizeof(_struct_)) : 0) typedef __PACKED_STRUCT//MB_DataInRegsTypeDef { uint16_t sens_Temp[MAX_SENSE]; uint16_t reserve[mb_fill_rsv(1000, uint16_t[MAX_SENSE])]; DS18B20_Drv_t ID; uint16_t reserve1[mb_fill_rsv(200, DS18B20_Drv_t)]; uint16_t num_Tsens; }MB_DataInRegsTypeDef; /** * @brief Входные регистры */ typedef __PACKED_STRUCT //MB_DataInRegsTypeDef { uint16_t set_Temp[MAX_SENSE]; uint16_t reserve[mb_fill_rsv(100, uint16_t[MAX_SENSE])]; uint16_t set_hyst[MAX_SENSE]; uint16_t reserve1[mb_fill_rsv(100, uint16_t[MAX_SENSE])]; }MB_DataHoldRegsTypeDef; /** 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) При добавлении новых массивов коилов, необходимо их добавить в функцию MB_DefineCoilsAddress if(MB_Check_Address_For_Arr(Addr, Qnt, C__ADDR, C__QNT) == NO_ERRORS) { *pCoils = MB_Set_Coil_Reg_Ptr(&, Addr); } @endverbatim * @{ */ /** * @brief Коилы * @details Желательно с помощью reserved делать стркутуру кратной 16-битам */ typedef union { __PACKED_STRUCT { unsigned state_val_01:1; unsigned state_val_02:1; unsigned state_val_03:1; unsigned state_val_04:1; unsigned state_val_05:1; unsigned state_val_06:1; unsigned state_val_07:1; unsigned state_val_08:1; unsigned state_val_09:1; unsigned state_val_10:1; unsigned state_val_11:1; unsigned state_val_12:1; unsigned state_val_13:1; unsigned state_val_14:1; unsigned state_val_15:1; unsigned state_val_16:1; } state_val_bit; uint16_t all; }word; typedef union { __PACKED_STRUCT { unsigned Temp1_relay_isOn :1; unsigned Temp2_relay_isOn :1; unsigned Temp3_relay_isOn :1; unsigned Temp4_relay_isOn :1; unsigned Temp5_relay_isOn :1; unsigned Temp6_relay_isOn :1; unsigned Temp7_relay_isOn :1; unsigned Temp8_relay_isOn :1; unsigned Temp9_relay_isOn :1; unsigned Temp10_relay_isOn :1; unsigned Temp11_relay_isOn :1; unsigned Temp12_relay_isOn :1; unsigned Temp13_relay_isOn :1; unsigned Temp14_relay_isOn :1; unsigned Temp15_relay_isOn :1; unsigned Temp16_relay_isOn :1; } state_val_bit; uint16_t all; }RELAY_Struct; typedef union { __PACKED_STRUCT { unsigned Temp1_isConnected :1; unsigned Temp2_isConnected :1; unsigned Temp3_isConnected :1; unsigned Temp4_isConnected :1; unsigned Temp5_isConnected :1; unsigned Temp6_isConnected :1; unsigned Temp7_isConnected :1; unsigned Temp8_isConnected :1; unsigned Temp9_isConnected :1; unsigned Temp10_isConnected :1; unsigned Temp11_isConnected :1; unsigned Temp12_isConnected :1; unsigned Temp13_isConnected :1; unsigned Temp14_isConnected :1; unsigned Temp15_isConnected :1; unsigned Temp16_isConnected :1; } state_val_bit; uint16_t all; }STATUS_TSENS; typedef __PACKED_STRUCT { int temp ; unsigned Temp_relay_on :1; unsigned Temp_relay_off :1; unsigned is_connect:1; }Temp_sens; extern Temp_sens temp_sens ; typedef __PACKED_STRUCT { word coils[3]; //32 uint16_t reserve1[mb_fill_rsv(128/16, word[3])]; STATUS_TSENS status_tSens[MAX_SENSE/16]; //32 uint16_t reserve2[mb_fill_rsv(128/16, STATUS_TSENS[MAX_SENSE/16])]; RELAY_Struct relay_struct[MAX_SENSE/16*2];//16 2 реле на 1 датчик uint16_t reserve3[mb_fill_rsv(128/16, RELAY_Struct[MAX_SENSE/16*2])]; unsigned init_param:1; unsigned init_Tsens:1; unsigned Save_Param_to_Flash:1; unsigned reserved2:14; }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; /** * @brief Структура для объекта Modbus * @ingroup MODBUS_DATA */ typedef struct { unsigned length; char *name; }MB_DeviceObjectTypeDef; /** * @brief Структура для объектов Modbus * @ingroup MODBUS_DATA */ typedef struct { MB_DeviceObjectTypeDef VendorName; MB_DeviceObjectTypeDef ProductCode; MB_DeviceObjectTypeDef Revision; MB_DeviceObjectTypeDef VendorUrl; MB_DeviceObjectTypeDef ProductName; MB_DeviceObjectTypeDef ModelName; MB_DeviceObjectTypeDef UserApplicationName; }MB_DeviceIdentificationTypeDef; void MB_DevoceInentificationInit(void); #endif //_MODBUS_DATA_H_ ///////////////////////////////////////////////////////////// ///////////////////////TEMP/OUTDATE/OTHER////////////////////