288 lines
12 KiB
C
288 lines
12 KiB
C
/*
|
||
* communication_protocol.h
|
||
*
|
||
* Created on: 2024年5月18日
|
||
* Author: 34509
|
||
*/
|
||
|
||
#ifndef SOFTWARE_PROTOCOL_COMMUNICATION_PROTOCOL_H_
|
||
#define SOFTWARE_PROTOCOL_COMMUNICATION_PROTOCOL_H_
|
||
|
||
#include "inc/UART.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_Function_Code_Update_Profile = 0xD0, /* 配置文件 */
|
||
SL_Function_Code_Remote_Upgrade = 0xD1, /* 远程升级 */
|
||
}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_Register_Ambient_Temperature = 0x0200, /* 环境温度 */
|
||
SL_Register_Ambient_Humidity = 0x0201, /* 环境湿度 */
|
||
SL_Register_Barometric_Pressure = 0x0202, /* 大气压 */
|
||
SL_Register_Wind_Speed = 0x0203, /* 风速 */
|
||
SL_Register_Wind_Direction = 0x0204, /* 风向 */
|
||
SL_Register_Rainfall = 0x0205, /* 雨量 */
|
||
SL_Register_Optical_Radiation = 0x0206, /* 光辐射 */
|
||
|
||
SL_Register_Leakage_Current_Value = 0x0220, /* 泄漏电流值 */
|
||
SL_Register_Leakage_Current_MaxValue = 0x0221, /* 最大泄漏电流值 */
|
||
SL_Register_Pulse_Frequency = 0x0222, /* 脉冲次数 */
|
||
SL_Register_Zero_Leakage_Current_MaxValue_Statistics = 0x0223, /* 清零最大泄漏电流值统计 */
|
||
SL_Register_Zero_Pulse_Frequency_Statistics = 0x0224, /* 清零脉冲次数统计 */
|
||
|
||
SL_Register_Inclination_AngleX = 0x0230, /* X轴倾角 */
|
||
SL_Register_Inclination_AngleY = 0x0231, /* Y轴倾角 */
|
||
SL_Register_Zero_Inclination_Angle = 0x0232, /* 校零倾角 */
|
||
}SL_MsgRegister;
|
||
|
||
/* 注册状态 */
|
||
typedef enum
|
||
{
|
||
UNREGISTER = 0, /* 未注册 */
|
||
REGISTER_FAIL = 1, /* 注册失败 */
|
||
REGISTER_SUCCESS = 2, /* 注册成功 */
|
||
}SL_REGISTERSTATUS;
|
||
|
||
/* 接入节点类型 */
|
||
typedef enum
|
||
{
|
||
POWERBOX = 1, /* 电源箱子 */
|
||
MICROMETEOROLOGY = 2, /* 微气象 */
|
||
}SL_ACCESSNODETYPE;
|
||
|
||
/* 通信方式 */
|
||
typedef enum
|
||
{
|
||
RS485 = 1,
|
||
RJ45 = 2,
|
||
}SL_COMMUNICATIONMETHODS;
|
||
|
||
/* 指定对齐方式为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_ROReply_pack{
|
||
uint8_t start_Flag[2]; /* 起始标志 */
|
||
uint8_t address[7]; /* 地址 */
|
||
uint8_t function_Code; /* 功能码 */
|
||
uint8_t reply_Register_Number_H; /* 回复字节数长度高八位 */
|
||
uint8_t reply_Register_Number_L; /* 回复字节数长度低八位 */
|
||
uint8_t *content; /* 回复数据内容 */
|
||
uint8_t check_Bit_H; /* 校验位高八位 */
|
||
uint8_t check_Bit_L; /* 校验位低八位 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}SL_Mppt_ROReply_pack;
|
||
#define SL_MPPT_ROReply_PACK_SIZE (sizeof(SL_Mppt_ROReply_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))
|
||
|
||
/* 发送其他帧 (汇聚网关->接入节点) */
|
||
typedef struct _SL_Mppt_SOther_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_SOther_pack;
|
||
#define SL_MPPT_SOTHER_PACK_SIZE (sizeof(SL_Mppt_SOther_pack))
|
||
|
||
/* 收到的其他帧(接入节点->汇聚网关) */
|
||
typedef struct _SL_Mppt_ROther_pack{
|
||
uint8_t start_Flag[2]; /* 起始标志 */
|
||
uint8_t address[7]; /* 地址 */
|
||
uint8_t function_Code; /* 功能码 */
|
||
uint8_t State; /* 准备状态 */
|
||
uint8_t check_Bit_H; /* 校验位高八位 */
|
||
uint8_t check_Bit_L; /* 校验位低八位 */
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}SL_Mppt_ROther_pack;
|
||
#define SL_MPPT_ROTHER_PACK_SIZE (sizeof(SL_Mppt_ROther_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 struct _SL_HEAD_pack{
|
||
uint8_t start_Flag[2]; /* 起始标志 */
|
||
uint8_t uart; /* 串口号,1对应uart1 */
|
||
uint8_t Channel; /* 通道,分时复用时使用 */
|
||
uint8_t lengH; /* 帧长度高八位 */
|
||
uint8_t lengL; /* 帧长度低八位 */
|
||
}SL_Head_pack;
|
||
#define HEAD_PACK_LEN sizeof(SL_Head_pack)
|
||
/* 智能模块与协处理器之间传输数据时的包尾 */
|
||
typedef struct _SL_TAIL_pack{
|
||
uint8_t end_Flag; /* 结束标志 */
|
||
}SL_Tail_pack;
|
||
|
||
/* 读时接收到的帧格式(智能模块->协处理器) */
|
||
typedef struct _SL_Mppt_Rorecv_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_Rorecv_pack rpack;
|
||
SL_Tail_pack tail; /* 包尾 */
|
||
}SL_Mppt_Rorecv_pack1;
|
||
#define SL_MPPT_RORECV_PACK_SIZE1 (sizeof(SL_Mppt_Rorecv_pack1))
|
||
|
||
/* 写时接收到的回复帧格式(智能模块->协处理器) */
|
||
typedef struct _SL_Mppt_WOReply_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
uint8_t start_Flag[2]; /* 起始标志 */
|
||
uint8_t address[7]; /* 地址 */
|
||
uint8_t function_Code; /* 功能码 */
|
||
uint8_t write_Register_Start_Address_H; /* 写入寄存器起始地址高八位 */
|
||
uint8_t write_Register_Start_Address_L; /* 写入寄存器起始地址低八位 */
|
||
uint8_t write_Register_Number_H; /* 写入寄存器个数高八位 */
|
||
uint8_t write_Register_Number_L; /* 写入寄存器个数低八位 */
|
||
}SL_Mppt_WOReply_pack1;
|
||
|
||
/* 扫描广播帧F1(智能模块->协处理器) */
|
||
typedef struct _SL_Mppt_ScanBroadcast_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_Scan_Broadcast_pack bpack;
|
||
SL_Tail_pack tail; /* 包尾 */
|
||
}SL_Mppt_Scan_Broadcast_pack1;
|
||
#define SL_MPPT_SCAN_BROADCAST_PACK_SIZE1 (sizeof(SL_Mppt_Scan_Broadcast_pack1))
|
||
|
||
/* 注册请求帧F2(协处理器->智能模块) */
|
||
typedef struct _SL_Mppt_RegistrationRequest_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_RegistrationRequest_pack rpack;
|
||
SL_Tail_pack tail; /* 包尾 */
|
||
}SL_Mppt_RegistrationRequest_pack1;
|
||
#define SL_MPPT_REGISTRATIONREQUEST_PACK_SIZE1 (sizeof(SL_Mppt_RegistrationRequest_pack1))
|
||
|
||
/* 注册回复帧F3(智能模块->协处理器) */
|
||
typedef struct _SL_Mppt_RegistrationReply_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_RegistrationReply_pack rpack;
|
||
SL_Tail_pack tail; /* 包尾 */
|
||
}SL_Mppt_RegistrationReply_pack1;
|
||
#define SL_MPPT_REGISTRATIONREPLY_PACK_SIZE1 (sizeof(SL_Mppt_RegistrationReply_pack1))
|
||
|
||
/* 发送其他帧(智能模块->协处理器) */
|
||
typedef struct _SL_Mppt_SOther_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_SOther_pack spack;
|
||
SL_Tail_pack tail; /* 包尾 */
|
||
}SL_Mppt_SOther_pack1;
|
||
#define SL_MPPT_SOTHER_PACK_SIZE1 (sizeof(SL_Mppt_SOther_pack1))
|
||
|
||
/* 收到的其他帧(协处理器->智能模块) */
|
||
typedef struct _SL_Mppt_ROther_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_ROther_pack rpack;
|
||
SL_Tail_pack tail; /* 包尾 */
|
||
}SL_Mppt_ROther_pack1;
|
||
#define SL_MPPT_ROTHER_PACK_SIZE1 (sizeof(SL_Mppt_ROther_pack1))
|
||
|
||
/* */
|
||
typedef struct _SL_Mppt_Recv_pack1{
|
||
SL_Head_pack head; /* 包头 */
|
||
SL_Mppt_Recv_pack rpack;
|
||
}SL_Mppt_Recv_pack1;
|
||
|
||
//const uint8_t head_len = sizeof(SL_Head_pack);
|
||
|
||
/* 功能码处理函数 */
|
||
typedef void (*MsgProcFunc)(device_handle device, void*, uint32_t MsgLen);
|
||
typedef struct _SL_FunctionMsgProcTable{
|
||
u_int32_t msgId;
|
||
MsgProcFunc pMsgProc;
|
||
}SL_FuncionMsgProcTable;
|
||
|
||
/* 恢复默认的对齐设置 */
|
||
#pragma pack(pop)
|
||
|
||
extern SL_Mppt_Scan_Broadcast_pack g_Scan_Broadcast_pack;
|
||
|
||
void read_and_process_sensorUart_data(device_handle device);
|
||
void read_and_process_intelligentModuleUart_data(device_handle device);
|
||
void send_uart_data(uint8_t *buff);
|
||
|
||
#endif /* SOFTWARE_PROTOCOL_COMMUNICATION_PROTOCOL_H_ */
|