/* * 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_ */