192 lines
5.7 KiB
C
192 lines
5.7 KiB
C
/**
|
||
**************************************************************************
|
||
* @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_
|
||
|
||
#include "stdint.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 Регистры хранения
|
||
*/
|
||
typedef struct //MB_DataInRegsTypeDef
|
||
{
|
||
uint16_t RESERVED;
|
||
}MB_DataInRegsTypeDef;
|
||
|
||
|
||
/**
|
||
* @brief Входные регистры
|
||
*/
|
||
typedef struct //MB_DataInRegsTypeDef
|
||
{ // Адрес:
|
||
uint16_t CAN_BITRATE_KBPS; // 0
|
||
uint16_t CAN_PERIOD; // 1
|
||
|
||
uint16_t CAN_ID_HI; // 2
|
||
uint16_t CAN_ID_LO; // 3
|
||
uint16_t CAN_DLC; // 4
|
||
|
||
uint16_t reserved[11]; // ...
|
||
|
||
uint16_t CAN_DATA_0; // 16
|
||
uint16_t CAN_DATA_1; // 17
|
||
uint16_t CAN_DATA_2; // 18
|
||
uint16_t CAN_DATA_3; // 19
|
||
uint16_t CAN_DATA_4; // 20
|
||
uint16_t CAN_DATA_5; // 21
|
||
uint16_t CAN_DATA_6; // 22
|
||
uint16_t CAN_DATA_7; // 23
|
||
}MB_DataHoldRegsTypeDef;
|
||
|
||
|
||
// DEFINES FOR INPUT REGISTERS ARRAYS
|
||
#define R_INPUT_ADDR 0
|
||
#define R_INPUT_QNT 1
|
||
|
||
// DEFINES FOR HOLDING REGISTERS ARRAYS
|
||
#define R_HOLDING_ADDR 0
|
||
#define R_HOLDING_QNT 25
|
||
|
||
|
||
/** 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 struct //MB_DataCoilsTypeDef
|
||
{ // Адрес:
|
||
unsigned START_POLLING:1; // 0
|
||
unsigned START_SINGLE_FRAME:1; // 1
|
||
|
||
unsigned HEADER_IDE:1; // 2
|
||
unsigned HEADER_RTR:1; // 3
|
||
|
||
unsigned reserved:12; // ...
|
||
|
||
unsigned FLIP_SRS:1; // 16
|
||
unsigned FLIP_IDE:1; // 17
|
||
unsigned FLIP_RTR:1; // 18
|
||
unsigned FLIP_R1:1; // 19
|
||
unsigned FLIP_R0:1; // 20
|
||
unsigned FLIP_MSGID_BIT:1; // 21
|
||
unsigned FLIP_DATA_BIT:1; // 22
|
||
unsigned FLIP_CRC_BIT:1; // 23
|
||
unsigned DISABLE_STUFF_BITS:1; // 24
|
||
}MB_DataCoilsTypeDef;
|
||
|
||
// DEFINES FOR COIL ARRAYS
|
||
#define C_CONTROL_ADDR 0
|
||
#define C_CONTROL_QNT 25
|
||
|
||
/** 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////////////////////
|