This commit is contained in:
2025-11-05 09:26:36 +03:00
parent 345ab9df8b
commit 461a206fe7
16 changed files with 1012 additions and 418 deletions

View File

@@ -63,8 +63,16 @@
* @endverbatim
*
******************************************************************************/
//#pragma pack(push, pack_modbus, 1)
//#pragma pack(pop, pack_modbus)
#include "modbus_data.h"
#include "rs_message.h"
uint32_t dbg_temp, dbg_temp2, dbg_temp3; // for debug
/* MODBUS HANDLES */
extern UART_HandleTypeDef rs_huart;

View File

@@ -11,10 +11,32 @@
*
*************************************************************************/
#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
/**
@@ -41,19 +63,36 @@
/**
* @brief Регистры хранения
*/
#define MAX_SENSE 30
typedef struct //MB_DataInRegsTypeDef
{
uint16_t sens_Temp[MAX_SENSE];
uint16_t UzptPLUS;
uint16_t UzptMINUS;
uint16_t UzptPLUS_MIN;
/**
* @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;
@@ -61,20 +100,16 @@ typedef struct //MB_DataInRegsTypeDef
/**
* @brief Входные регистры
*/
typedef struct //MB_DataInRegsTypeDef
typedef __PACKED_STRUCT //MB_DataInRegsTypeDef
{
uint16_t set_Temp[MAX_SENSE];
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;
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_INPUT_ADDR 0
#define R_INPUT_QNT 40
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_HOLDING_ADDR 0
#define R_HOLDING_QNT 40
/** MODBUS_DATA_RERISTERS_DEFINES
@@ -110,8 +145,9 @@ typedef struct //MB_DataInRegsTypeDef
* @details Желательно с помощью reserved делать стркутуру кратной 16-битам
*/
typedef union
{
struct __packed {
{
__PACKED_STRUCT
{
unsigned state_val_01:1;
unsigned state_val_02:1;
unsigned state_val_03:1;
@@ -133,19 +169,92 @@ typedef union
}word;
typedef struct //MB_DataCoilsTypeDef
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[2];
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 reserved:15;
unsigned init_Tsens:1;
unsigned Save_Param_to_Flash:1;
unsigned reserved2:14;
}MB_DataCoilsTypeDef;
// DEFINES FOR COIL ARRAYS
#define C_CONTROL_ADDR 0
#define C_CONTROL_QNT 100
/** MODBUS_DATA_COILS_DEFINES
* @}