Initial commit: CCU621_M firmware project with BLE debug link support.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -0,0 +1,214 @@
|
||||
#ifndef MDU_COMM_TASK_H
|
||||
#define MDU_COMM_TASK_H
|
||||
|
||||
#ifdef __cplusplus /*C++编译环境下兼容C语言*/
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*------ Exported includes(头文件) ----------------------*/
|
||||
#include "mdu_comm/mdu_interface.h"
|
||||
#include "bsp_include.h"
|
||||
#if MDU_UULN_EN
|
||||
#include "mdu_comm/mdu_uuln_comm.h"
|
||||
#endif
|
||||
#include "mylog/mylog.h"
|
||||
|
||||
|
||||
/*------ Exported macro(宏定义) -------------------------*/
|
||||
#define MDU_CAN_PRINT_FLAG (0) //模块报文 调试打印标志
|
||||
|
||||
|
||||
#define MODULE_BROADCAST_ADDR 0x9F //广播地址
|
||||
#define MODULE_PILE_ADDR 0xA0 //主机地址
|
||||
|
||||
#define MODULE_MDU_FIRST_ADDR 0x80 //充电模块首地址
|
||||
|
||||
#define MODULE_CMD_HEARTBEAT 0x40 /* 模块心跳命令 */
|
||||
#define MODULE_CMD_SETTING 0x80 /* 定值设置命令 */
|
||||
#define MODULE_CMD_GETTING 0x82 /* 定值查询命令 */
|
||||
#define MODULE_CMD_REMOTE_CONTROL 0x05 /* 遥控命令 */
|
||||
#define MODULE_CMD_GROUP_SET 0x03 /* 组号设置命令 */
|
||||
|
||||
#define MODULE_CMD_HEARTBEAT_ACK 0x41 //心跳应答
|
||||
#define MODULE_CMD_SETTING_ACK 0x81 //定值设置应答
|
||||
#define MODULE_CMD_GETTING_ACK 0x83 //定值查询应答
|
||||
#define MODULE_CMD_YXYC_20 0x20 //遥信遥测20帧
|
||||
#define MODULE_CMD_YXYC_21 0x21 //遥信遥测21帧
|
||||
#define MODULE_CMD_TEMP 0xE6 //温度查询帧
|
||||
|
||||
#define MODULE_TEMP_OFFSET (50) //模块温度偏移量,50
|
||||
|
||||
#define MODULE_ALL (0xFF) //模块接收数据 全部清空
|
||||
/*------ Exported struct(结构体定义) --------------------*/
|
||||
|
||||
#define Mdu_Comm_LOG(fmt, ...) \
|
||||
MYLOG_MSG(TASK_ID_MduComm,fmt, ##__VA_ARGS__) //任务打印
|
||||
|
||||
typedef enum {E_MDU_IDLE = 0, E_MDU_WORK = !E_MDU_IDLE} E_MDU_WORK_STATE;
|
||||
|
||||
|
||||
//模块状态 枚举
|
||||
typedef enum
|
||||
{
|
||||
E_MDU_STATE_NONE=0, //未通信
|
||||
E_MDU_STATE_NORMAL, //正常
|
||||
E_MDU_STATE_FAULT, //故障
|
||||
}E_MDU_STATE;
|
||||
|
||||
|
||||
//模块故障告警数据
|
||||
typedef union
|
||||
{
|
||||
U8_T u8_mdu_alarm;
|
||||
struct
|
||||
{
|
||||
U8_T b0_other:1; //其他故障,0正常,1故障
|
||||
U8_T b1_relief:1; //泄放故障
|
||||
U8_T b2_fan:1; //风扇故障
|
||||
U8_T b3_DC_short:1; //直流输出短路
|
||||
U8_T b4_overTemp:1; //过温
|
||||
U8_T b5_DC_UV:1; //直流输出欠压
|
||||
U8_T b6_DC_OV:1; //直流输出过压
|
||||
U8_T b7_AC_IN:1; //交流输入故障
|
||||
}bit_mdu_alarm;
|
||||
}U_MDU_ALARM_DATA;
|
||||
|
||||
|
||||
typedef union {
|
||||
uint8_t raw; // 原始字节值
|
||||
|
||||
struct {
|
||||
uint8_t operationCommand : 4; // Bit3~Bit0: 操作指令
|
||||
/*0x01 --- 快速开机(绝缘检测阶段使用)
|
||||
0x02 --- 停止充电(保留分组信息)
|
||||
0x03 --- 软起开机(预启动阶段使用)
|
||||
0x04 --- 显示地址(显示模块通信地址)
|
||||
0x05 --- 参数修改
|
||||
0x06 --- 停止充电(自动清除分组信息)
|
||||
*/
|
||||
uint8_t voltageRange : 1; // Bit4: 电压输出范围选择
|
||||
uint8_t powerContactor : 1; // Bit5: 功率分配回路接触器状态
|
||||
uint8_t mainContactor : 1; // Bit6: 充电回路主接触器状态
|
||||
uint8_t reserved : 1; // Bit7: 预留
|
||||
} bits;
|
||||
}U_MDU_YK_DEVICE_STATUS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
U_MDU_YK_DEVICE_STATUS u_dev_state; //设备状态 包含功率分配回路接触器状态、充电回路主接触器状态等数据
|
||||
|
||||
U16_T u16_needVol; //需求电压 精度0.1
|
||||
U16_T u16_oneMdu_needCur; //单模块需求电流 精度0.1
|
||||
U16_T u16_battVol; //电池电压 精度0.1
|
||||
}S_MDU_RemoteCtlrData;
|
||||
typedef enum {
|
||||
SEND_MODE_UNICAST, ///< 单点发送:命令发送给特定目标设备
|
||||
SEND_MODE_BROADCAST ///< 广播发送:命令发送给所有设备
|
||||
}E_CommandSendMode;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//充电模块接收状态 结构体
|
||||
typedef struct
|
||||
{
|
||||
E_MDU_STATE e_state; //模块状态 未通讯、通信正常、故障
|
||||
E_MDU_WORK_STATE e_work_state; //模块工作状态 空闲、工作
|
||||
|
||||
U8_T u8_groupNo; //模块组号
|
||||
U8_T u8_GrpMode; //分组模式:【遥测分组模式:0固定分组,1动态分组】
|
||||
|
||||
U16_T u16_outVol; //输出电压 精度0.1
|
||||
U16_T u16_outCur; //输出电流 精度0.1
|
||||
|
||||
U16_T u16_outtimecnt; //通信超时计数
|
||||
|
||||
U_MDU_ALARM_DATA u_alarm_data; //故障告警数据 0x20 遥信遥测帧上送
|
||||
|
||||
#if MDU_UULN_EN
|
||||
U_UULN_MDU_STATUS u_uuln_state; //优优绿能模块状态保存
|
||||
E_TrueHiLo_Status e_TrueHiLo_Status; //高低压状态读取 1: 1000V 2: 500V
|
||||
#endif
|
||||
|
||||
//模块温度读取使能
|
||||
#if( MDU_TEMP_READ_EN == 1)
|
||||
S8_T s8_mdutemp_1; //模块温度1 进风口温度 单位摄氏度 注意有正负号 范围是 -127 ~ 127
|
||||
S8_T s8_mduPara_2; //模块温度2 模块PFC温度 单位摄氏度 注意有正负号 范围是 -127 ~ 127
|
||||
#endif
|
||||
}S_MDU_STATE;
|
||||
//充电模块控制命令 结构体
|
||||
typedef struct
|
||||
{
|
||||
E_CMD e_mdu_start_flag; //模块启停状态控制 ON / OFF
|
||||
U8_T u8_mdu_in_pile; //模块归属枪号 0未分配 1-N分配枪号
|
||||
U8_T u8_swh_flag; //模块对应输出回路继电器 闭合标志
|
||||
U8_T u8_mdu_fault_num; //模块故障次数 区分不充电正常,一充电就报错 直接就不能用得了-暂未使用
|
||||
}S_MDU_CTRL;
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_mdu_addr; //模块地址 0x80/0x60
|
||||
S_MDU_CTRL s_ctrl; //模块控制
|
||||
S_MDU_STATE s_state; //模块状态
|
||||
}S_MDU_ONE_DATA; //单模块数据
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_on_group_num; //模块组内模块数量 已分组模块数量
|
||||
U8_T u8_work_state; //模块组工作状态 0空闲 1工作 --组内有一个模块输出 则是工作
|
||||
U_MDU_YK_DEVICE_STATUS u_yk_dev_state; //遥控命令状态
|
||||
U16_T u16_needVol; //需求电压 0.1V
|
||||
U16_T u16_oneMdu_needCur; //单模块需求电流 0.1A 流程控制计算号后直接使用
|
||||
U16_T u16_battVol; //电池电压 0.1V
|
||||
U16_T u16_outVol; //模块组内输出电压0.1V-- 指已投入充电回路的模块
|
||||
U16_T u16_outCur; //模块组内输出电流0.1A
|
||||
}S_MDU_GROUP_DATA;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
U8_T u8_mdu_type; //模块类型
|
||||
U8_T u8_mdu_num; //模块数量
|
||||
U8_T u8_mdu_group_num; //模块组数量-- 枪数量
|
||||
|
||||
U8_T u8_mdu_usable_num; //可用模块数量 所有通信正常 且无故障模块
|
||||
U8_T u8_mdu_using_num; //在用模块的数量 所有以分配模块
|
||||
|
||||
U8_T u8_can_send_cnt; //can报文发送数量 用于报文发送延时
|
||||
U16_T u16_timer; //周期计数值
|
||||
U32_T u32_runing_time; //任务运行时间 刚插枪延时5秒再判断通信超时
|
||||
|
||||
U8_T u8_recv_most_pack[20]; //多包数据接收 最多2包,2*7=14个字节数据
|
||||
|
||||
//模块参数读取使能 -- 默认同一主机使用的模块参数一致 - 查询第一个可通信的模块参数
|
||||
#if( MDU_PARA_READ_EN == 1)
|
||||
U16_T u16_mduPara_MaxOutVol; //模块参数 最大输出电压 精度0.1
|
||||
U16_T u16_mduPara_MinOutVol; //模块参数 最小输出电压 精度0.1
|
||||
U16_T u16_mduPara_MaxOutCur; //模块参数 最大输出电流 精度0.1
|
||||
U16_T u16_mduPara_MinOutCur; //模块参数 最小输出电流 精度0.1
|
||||
#endif
|
||||
|
||||
S_MDU_ONE_DATA s_mdu[MDU_MAX_NUM]; //模块状态
|
||||
S_MDU_GROUP_DATA s_mdu_group[GUN_MAX_CNT]; //模块组状态
|
||||
|
||||
}S_MDU_DATA;
|
||||
/*------ Exported variables(变量定义) -------------------*/
|
||||
|
||||
/*------ Exported function prototypes (函数声明) -------*/
|
||||
|
||||
void v_MduCanMsg_send(CAN_DATA* can_data);
|
||||
U8_T u8_MduCanMsg_recv(CAN_DATA *rx_can_data);
|
||||
void v_mdu_clear_recv_data(U8_T u8_id);
|
||||
|
||||
void v_mdu_data_summ(void);
|
||||
|
||||
/* STM32 状态 CAN 数据获取接口 */
|
||||
U8_T u8_stm_status_get_gun_plug(U8_T u8_gunNo); // 0:A枪 1:B枪 返回0未插枪 1插枪
|
||||
U8_T u8_stm_status_get_di(U8_T u8_index); // 0:DI1 1:DI2 返回0/1
|
||||
|
||||
|
||||
void v_Mdu_Comm_task(void *argument);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* MDU_COMM_TASK_H */
|
||||
Reference in New Issue
Block a user