CANEmu/Core/Modbus/modbus_data.h

192 lines
5.7 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_
#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////////////////////