Initial commit: my SECS2 project
This commit is contained in:
66
usr/protocol/proto_Modbus.h
Normal file
66
usr/protocol/proto_Modbus.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#ifndef _PROTO_MODBUS_H_
|
||||
#define _PROTO_MODBUS_H_
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#define MODBUS_DEFAULT_ID (0x01)
|
||||
#define MODBUS_SENDBUF_LEN (512U)
|
||||
|
||||
#define U16_DATA_L (0)//<2F><>16λ
|
||||
#define U16_DATA_H (1)//<2F><>16λ
|
||||
|
||||
#define BIG_ENDIAN (0)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||
#define LITTLE_ENDIAN (1)//С<><D0A1><EFBFBD><EFBFBD>
|
||||
|
||||
typedef struct _ModbusCommunicationSendBuf{
|
||||
u8 SendBuffer[MODBUS_SENDBUF_LEN];
|
||||
u16 Len;
|
||||
}ModbusCommunicationSendBuf_t;
|
||||
|
||||
typedef struct _ModbusAnalysisData
|
||||
{
|
||||
u8 ID; /*ModbusID*/
|
||||
u8 Func; /*<2A><><EFBFBD>ܺ<EFBFBD>*/
|
||||
u16 StartAddress; /*<2A><>ʼ<EFBFBD><CABC>ַ*/
|
||||
u16 RegNumber; /*<2A>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
u8 *wDataAddress; /*д<><D0B4><EFBFBD>Ĵ<EFBFBD><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ַ*/
|
||||
}ModbusAnalysisData_t;
|
||||
|
||||
typedef enum _ModbusErrorCode
|
||||
{
|
||||
ModbusErrorCode_Success = 0x00,
|
||||
ModbusErrorCode_IllegalFunction = 0x01,
|
||||
ModbusErrorCode_IllegalAddr = 0x02,
|
||||
ModbusErrorCode_IllegalData = 0x03,
|
||||
ModbusErrorCode_DeviceBusy = 0x06
|
||||
}ModbusErrorCode_e;
|
||||
|
||||
typedef struct proto_Modbus_t proto_Modbus_t;
|
||||
struct proto_Modbus_t
|
||||
{
|
||||
u8 ID;
|
||||
u16 (*DataRead)(u16); /*Modbus<75><73><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
ModbusErrorCode_e (*DataWrite)(u16,u16); /*Modbusд<73><D0B4><EFBFBD><EFBFBD>*/
|
||||
void (*Init)(void); /*<2A><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
void (*Task)(void); /*<2A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
||||
void (*DataAnalysis)(u8 *,u16,void *); /*<2A><><EFBFBD>ݽ<EFBFBD><DDBD><EFBFBD>*/
|
||||
};
|
||||
|
||||
u16 ModbusCrc16(u8 *pData, u16 Len);
|
||||
u16 FloatTOu16(float FloatData,unsigned char HorL);
|
||||
u16 u32TOu16(u32 u32Data,unsigned char HorL);
|
||||
u32 u8TOu32(u8 *p_u8Data,unsigned char u8Endian);
|
||||
u16 u8TOu16(u8 *p_u8Data,unsigned char u8Endian);
|
||||
|
||||
void u32TOu8(u32 u32Data,u8 *pData,u8 Endian);
|
||||
void u16TOu8(u16 u16Data,u8 *pData,u8 Endian);
|
||||
|
||||
u32 u32_EndianConv(u32 Data);
|
||||
u16 u16_EndianConv(u16 Data);
|
||||
|
||||
void ModbusReadData(u8 Id,u16 Addr,u16 Num,void (*UsartSendBuffer)(u8 *,u16 ));
|
||||
void ModbusWriteMultipleData(u8 ID,u16 Addr,u16 Num,u16 *Data,void (*UsartSendBuffer)(u8 *,u16 ));
|
||||
void ModbusyWriteOnlData(u8 ID,u16 Addr,u16 Value,void (*UsartSendBuffer)(u8 *,u16 ));
|
||||
u8 ModbusAnalysis(ModbusAnalysisData_t *pModbus, u8 *pData, u16 len);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user