mppt/App/inc/sl_protocol.h

159 lines
6.3 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.

/*
* sl_protocol.h
*
* Created on: 2024年6月20日
* Author: psx
*/
#ifndef APP_INC_SL_PROTOCOL_H_
#define APP_INC_SL_PROTOCOL_H_
#include "debug.h"
#include "uart_dev.h"
/* 功能码 */
typedef enum
{
SL_Function_Code_Read_Register = 0x30, /* 读寄存器数据 */
SL_Function_Code_Write_Register = 0x10, /* 写寄存器数据 */
SL_Function_Code_Broadcast_Scan = 0xA0, /* 广播扫描 */
SL_Function_Code_Registration_request = 0xA1, /* 注册请求 */
}SL_MsgFunctionCode;
/* 寄存器地址 */
typedef enum
{
SL_Register_Registration_Status = 0x0000, /* 注册状态 */
SL_Register_address = 0x0001, /* 地址 */
SL_Register_Access_Node_Type = 0x0002, /* 接入节点类型 */
SL_Register_Communication_Methods = 0x0003, /* 通信方式 */
SL_Register_Battery_Voltage = 0x0100, /* 电池电压 */
SL_Register_Battery_temperature = 0x0101, /* 电池温度 */
SL_Register_Remaining_Battery_Bower = 0x0102, /* 电池剩余电量 */
SL_Register_Solar_Open_Circuit_Voltage1 = 0x0103, /* 太阳能开路电压1 */
SL_Register_Solar_Open_Circuit_Voltage2 = 0x0104, /* 太阳能开路电压2 */
}SL_Mppt_MsgRegister;
/* 注册状态 */
typedef enum
{
UNREGISTER = 0, /* 未注册 */
REGISTER_FAIL = 1, /* 注册失败 */
REGISTER_SUCCESS = 2, /* 注册成功 */
}SL_REGISTERSTATUS;
#define chang_8_to_16(L,H) (L | (H<<8))
/* 指定对齐方式为1字节 */
#pragma pack(push,1)
/* 读时接收到的帧格式(汇聚网关->接入节点) */
typedef struct _SL_Mppt_Rorecv_pack{
uint8_t start_Flag[2]; /* 起始标志 */
uint8_t address[7]; /* 地址 */
uint8_t function_Code; /* 功能码 */
uint8_t read_Register_Start_Address_H; /* 读取寄存器起始地址高8位 */
uint8_t read_Register_Start_Address_L; /* 读取寄存器起始地址低八位 */
uint8_t read_Register_Number_H; /* 读取寄存器个数高八位 */
uint8_t read_Register_Number_L; /* 读取寄存器个数低八位 */
uint8_t check_Bit_H; /* 校验位高八位 */
uint8_t check_Bit_L; /* 校验位低八位 */
uint8_t end_Flag; /* 结束标志 */
}SL_Mppt_Rorecv_pack;
#define SL_MPPT_RORECV_PACK_SIZE (sizeof(SL_Mppt_Rorecv_pack))
/* 写时接收到的帧格式(汇聚网关->接入节点) */
typedef struct _SL_Mppt_Worecv_pack{
uint8_t start_Flag[2]; /* 起始标志 */
uint8_t address[7]; /* 地址 */
uint8_t function_Code; /* 功能码 */
uint8_t write_Register_Start_Address_H; /* 写寄存器起始地址高8位 */
uint8_t write_Register_Start_Address_L; /* 写寄存器起始地址低八位 */
uint8_t write_Register_Number_H; /* 写寄存器个数高八位 */
uint8_t write_Register_Number_L; /* 写寄存器个数低八位 */
uint8_t *content; /* 写入的内容 */
uint8_t check_Bit_H; /* 校验位高八位 */
uint8_t check_Bit_L; /* 校验位低八位 */
uint8_t end_Flag; /* 结束标志 */
}SL_Mppt_Worecv_pack;
#define SL_MPPT_WORECV_PACK_SIZE (sizeof(SL_Mppt_Worecv_pack))
/* 扫描广播帧F1汇聚网关->接入节点) */
typedef struct _SL_Mppt_ScanBroadcast_pack{
uint8_t start_Flag[2]; /* 起始标志 */
uint8_t address[7]; /* 地址 */
uint8_t function_Code; /* 功能码 */
uint8_t check_Bit_H; /* 校验位高八位 */
uint8_t check_Bit_L; /* 校验位低八位 */
uint8_t end_Flag; /* 结束标志 */
}SL_Mppt_Scan_Broadcast_pack;
#define SL_MPPT_SCAN_BROADCAST_PACK_SIZE (sizeof(SL_Mppt_Scan_Broadcast_pack))
/* 注册请求帧F2接入节点->汇聚网关) */
typedef struct _SL_Mppt_RegistrationRequest_pack{
uint8_t start_Flag[2]; /* 起始标志 */
uint8_t address[7]; /* 地址 */
uint8_t function_Code; /* 功能码 */
uint8_t register_Length_H; /* 寄存器长度高八位 */
uint8_t register_Length_L; /* 寄存器长度低八位 */
uint8_t registration_Status_H; /* 注册状态高八位 */
uint8_t registration_Status_L; /* 注册状态低八位 */
uint8_t access_Node_ID[7]; /* 接入节点ID */
uint8_t access_Node_Type_H; /* 接入节点类型高八位 */
uint8_t access_Node_Type_L; /* 接入节点类型低八位 */
uint8_t check_Bit_H; /* 校验位高八位 */
uint8_t check_Bit_L; /* 校验位低八位 */
uint8_t end_Flag; /* 结束标志 */
}SL_Mppt_RegistrationRequest_pack;
#define SL_MPPT_REGISTRATIONREQUEST_PACK_SIZE (sizeof(SL_Mppt_RegistrationRequest_pack))
/* 注册回复帧F3汇聚网关->接入节点) */
typedef struct _SL_Mppt_RegistrationReply_pack{
uint8_t start_Flag[2]; /* 起始标志 */
uint8_t address[7]; /* 地址 */
uint8_t function_Code; /* 功能码 */
uint8_t register_Length_H; /* 寄存器长度高八位 */
uint8_t register_Length_L; /* 寄存器长度低八位 */
uint8_t registration_Status_H; /* 注册状态高八位 */
uint8_t registration_Status_L; /* 注册状态低八位 */
uint8_t check_Bit_H; /* 校验位高八位 */
uint8_t check_Bit_L; /* 校验位低八位 */
uint8_t end_Flag; /* 结束标志 */
}SL_Mppt_RegistrationReply_pack;
#define SL_MPPT_REGISTRATIONREPLY_PACK_SIZE (sizeof(SL_Mppt_RegistrationReply_pack))
/* */
#define RECV_LENGTH 20
typedef struct _SL_Mppt_Recv_pack{
uint8_t start_Flag[2]; /* 起始标志 */
uint8_t address[7]; /* 地址 */
uint8_t function_Code; /* 功能码 */
uint8_t recv_Data[RECV_LENGTH]; /* 其他部分 */
}SL_Mppt_Recv_pack;
/* 功能码处理函数 */
typedef void (*MsgProcFunc)(device_handle device, void*, uint32_t MsgLen);
typedef struct _SL_FunctionMsgProcTable{
u_int32_t msgId;
MsgProcFunc pMsgProc;
}SL_FuncionMsgProcTable;
/* 寄存器处理表 */
typedef uint16_t (*RegProcFunc)(void*);
typedef struct _SL_RegProcTable{
uint32_t regId;
RegProcFunc pRegProc;
}SL_RegProcTable;
/* 恢复默认的对齐设置 */
#pragma pack(pop)
void read_and_process_uart_data(device_handle device);
uint16_t CheckFunc(uint8_t *arr_buff, uint8_t len);
int randomDelay();
uint8_t Check_485_bus_busy(device_handle device);
#endif /* APP_INC_SL_PROTOCOL_H_ */