Loading...
Searching...
No Matches
E:/.WORK/STM32/Diod_Test/diode_tester/Core/Modbus/__modbus_data.h
/**
******************************************************************************
* @file modbus_data.h
* @brief Определения структур данных Modbus устройства
******************************************************************************
@defgroup MODBUS_DATA Modbus Registers Map
@ingroup MODBUS
@brief Определение карты регистров и коилов
******************************************************************************
* @details
Файл содержит объявления структур данных, доступных через Modbus:
- Holding Registers (R/W) - регистры хранения
- Input Registers (R/O) - входные регистры
- Coils (R/W) - дискретные выходы
@section datinit Базовая настройка под устройство:
1. Настроить диапазоны адресов
- @ref R_INPUT_ADDR и @ref R_INPUT_QNT для входных регистров
- @ref R_HOLDING_ADDR и @ref R_HOLDING_QNT для регистров хр анения
- @ref C_COILS_ADDR и @ref C_COILS_ADDR для коилов
3. Настроить структуры данных:
- @ref MB_DataInRegsTypeDef
- @ref MB_DataHoldRegsTypeDef
- @ref MB_DataCoilsTypeDef
@section datexpert Расширенная настройка под устройство:
1. Добавить новый массив с нужными данными.
2. Добавить дефайны для определения его начального адреса и количества элементов
3. Добавить проверку адресов в MB_DefineRegistersAddress/MB_DefineCoilsAddress.
Пример:
@code
#define R_USER_ADDR 555
#define R_USER_QNT 16
uint16_t user_regs[16];
//...
else if(MB_Check_Address_For_Arr(Addr, Qnt, R_USER_ADDR, R_USER_QNT) == ET_NO_ERRORS)
{
*pRegs = MB_Set_Register_Ptr(&user_regs, Addr-R_USER_ADDR); // ВАЖНО!
// -R_USER_ADDR нужен чтобы взять адрес относительно начала массива
}
else
{
return ET_ILLEGAL_DATA_ADDRESS;
}
@endcode
******************************************************************************/
#ifndef _MODBUS_DATA_H_
#define _MODBUS_DATA_H_
#include "stdint.h"
//--------------SIZES OF DATA---------------
// DEFINES FOR INPUT REGISTERS ARRAYS
#define R_INPUT_ADDR 0 ///< Начальный адрес входных регистров
#define R_INPUT_QNT 16 ///< Количество входных регистров
// DEFINES FOR HOLDING REGISTERS ARRAYS
#define R_HOLDING_ADDR 0 ///< Начальный адрес регистров хранения
#define R_HOLDING_QNT 16 ///< Количество регистров хранения
// DEFINES FOR COIL ARRAYS
#define C_COILS_ADDR 0 ///< Начальный адрес коилов
#define C_COILS_QNT 16 ///< Количество регистров коилов
//--------------DEFINES FOR REGISTERS---------------
// DEFINES FOR ARRAYS
/**
* @addtogroup MODBUS_DATA_RERISTERS_DEFINES Registers structures
* @ingroup MODBUS_DATA
* @brief Стуруктура регистров (входных и хранения)
@code
Для массивов регистров:
R_<NAME_ARRAY>_ADDR - модбас адресс первого регистра в массиве
R_<NAME_ARRAY>_QNT - количество регистров в массиве
@endcode
* @{
*/
/**
* @brief Регистры хранения
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t in[16];
}MB_DataInRegsTypeDef;
/**
* @brief Входные регистры
*/
typedef struct //MB_DataInRegsTypeDef
{
uint16_t out[16];
}MB_DataHoldRegsTypeDef;
/** MODBUS_DATA_RERISTERS_DEFINES
* @}
*/
//----------------DEFINES FOR COILS-----------------
/**
* @addtogroup MODBUS_DATA_COILS_DEFINES Coils Structure
* @ingroup MODBUS_DATA
* @brief Структура коилов
@code
Структура дефайна
Для массивов коилов:
C_<NAME_ARRAY>_ADDR - модбас адресс первого коила в массиве
C_<NAME_ARRAY>_QNT - количество коилов в массиве (минимум 16)
@endcode
* @{
*/
/**
* @brief Коилы
* @details Желательно с помощью reserved делать стркутуру кратной 16-битам
*/
typedef struct //MB_DataCoilsTypeDef
{
unsigned reserved:16;
}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////////////////////
MB_DataCoilsTypeDef
Коилы
Definition __modbus_data.h:130
MB_DataHoldRegsTypeDef
Входные регистры
Definition __modbus_data.h:100
MB_DataInRegsTypeDef
Регистры хранения
Definition __modbus_data.h:91
MB_DataStructureTypeDef
Структура со всеми регистрами и коилами модбас
Definition __modbus_data.h:146
MB_DataStructureTypeDef::HoldRegs
MB_DataHoldRegsTypeDef HoldRegs
Modbus holding registers MB_DataHoldRegsTypeDef.
Definition __modbus_data.h:151
MB_DataStructureTypeDef::Coils
MB_DataCoilsTypeDef Coils
Modbus coils MB_DataCoilsTypeDef.
Definition __modbus_data.h:149
MB_DataStructureTypeDef::InRegs
MB_DataInRegsTypeDef InRegs
Modbus input registers MB_DataInRegsTypeDef.
Definition __modbus_data.h:147