168 lines
5.7 KiB
C
168 lines
5.7 KiB
C
/**
|
||
******************************************************************************
|
||
* @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---------------
|
||
#define R_HOLDING_PRVT_PARAMS_ADR 555
|
||
#define R_HOLDING_PRVT_PARAMS_QNT (sizeof(UPP_PrvtParams_t)/sizeof(uint16_t))
|
||
|
||
// DEFINES FOR INPUT REGISTERS ARRAYS
|
||
#define R_INPUT_ADDR 0 ///< Начальный адрес входных регистров
|
||
#define R_INPUT_QNT (sizeof(UPP_PUI_Values_t)/sizeof(uint16_t)) ///< Количество входных регистров
|
||
|
||
// DEFINES FOR HOLDING REGISTERS ARRAYS
|
||
#define R_HOLDING_ADDR 0 ///< Начальный адрес регистров хранения
|
||
#define R_HOLDING_QNT (sizeof(UPP_PUI_Params_t)/sizeof(uint16_t)) ///< Количество регистров хранения
|
||
|
||
// 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
|
||
{
|
||
|
||
}MB_DataInRegsTypeDef;
|
||
|
||
|
||
/**
|
||
* @brief Входные регистры
|
||
*/
|
||
typedef struct //MB_DataInRegsTypeDef
|
||
{
|
||
|
||
}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;
|
||
|
||
|
||
typedef struct
|
||
{
|
||
|
||
}MB_DataInternalTypeDef;
|
||
extern MB_DataInternalTypeDef MB_INTERNAL;
|
||
|
||
#endif //_MODBUS_DATA_H_
|
||
|
||
/////////////////////////////////////////////////////////////
|
||
///////////////////////TEMP/OUTDATE/OTHER////////////////////
|