ds18b20-MODBUS/john103C6T6/Modbus/modbus_data.h
2025-11-07 16:22:00 +03:00

283 lines
7.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
**************************************************************************
* @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_<NAME_ARRAY>_ADDR - модбас адресс первого регистра в массиве
R_<NAME_ARRAY>_QNT - количество регистров в массиве
При добавлении новых массивов регистров, необходимо их добавить в функцию MB_DefineRegistersAddress
if(MB_Check_Address_For_Arr(Addr, Qnt, R_<NEW_ARRAY>_ADDR, R_<NEW_ARRAY>_QNT) == NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&<NEW_ARRAY>, 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_<NAME_ARRAY>_ADDR - модбас адресс первого коила в массиве
C_<NAME_ARRAY>_QNT - количество коилов в массиве (минимум 16)
При добавлении новых массивов коилов, необходимо их добавить в функцию MB_DefineCoilsAddress
if(MB_Check_Address_For_Arr(Addr, Qnt, C_<NEW_ARRAY>_ADDR, C_<NEW_ARRAY>_QNT) == NO_ERRORS)
{
*pCoils = MB_Set_Coil_Reg_Ptr(&<NEW_ARRAY>, 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]; //48
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; //384
unsigned init_Tsens:1; //385
unsigned Save_Param_to_Flash:1; //386
unsigned reserved2:13;
}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;
#endif //_MODBUS_DATA_H_
/////////////////////////////////////////////////////////////
///////////////////////TEMP/OUTDATE/OTHER////////////////////