二、修改了负载启动的顺序,先开启辅助继电器使地相通,再开启D+D-继电器 feat: 发布V1.1.23版本,优化负载初始化继电器时序 - 更新所有头文件版本号至V1.1.21~V1.1.23,协议板固件版本更新为0x0127 - 新增纹波滤波相关宏定义与函数,实现继电器闭合后纹波过滤 - 调整负载初始化流程:先下发辅助继电器,等待回码后延迟30ms再打开北向继电器 - 优化D+/D-寄存器上位机显示单位,适配0.001V解析格式 - 补充YMODEM升级文档说明,完善传输校验与重发规则 - 清理冗余调试打印与Allegro工程日志文件
143 lines
6.9 KiB
C
143 lines
6.9 KiB
C
/****************************************************************************
|
|
文件名称 : chrg_roll_sou.h
|
|
完成日期 :
|
|
当前版本号 : V1.1.21
|
|
主要功能 : 实现南向通信轮巡请求命令。以独立线程处理。
|
|
版本历史 : 创建原始版本
|
|
说明 :
|
|
******************************************************************************/
|
|
#include "chrg_south.h"
|
|
#ifndef __CHRG_ROLL_SOU_H__
|
|
#define __CHRG_ROLL_SOU_H__
|
|
|
|
#include <rtthread.h>
|
|
|
|
struct chrg_trim;
|
|
|
|
#define THR_NAME_ROLL_SOU "thr.rollsou"
|
|
|
|
// 单通道批量下发缓存:保存当前需要同步的寄存器列表
|
|
/* 为连续提交初始化、普通启动和动态启动命令预留足够空间。 */
|
|
#define SOU_COM_BATCH_REG_MAX 32
|
|
typedef struct
|
|
{
|
|
rt_uint16_t reg_cnt; // 当前待下发寄存器数量
|
|
rt_uint16_t reg_list[SOU_COM_BATCH_REG_MAX]; // 寄存器地址数组
|
|
rt_uint16_t val_list[SOU_COM_BATCH_REG_MAX]; // 对应寄存器值数组
|
|
rt_uint8_t cur_idx; // 当前下发到第几条
|
|
rt_bool_t pending; // 本通道有待下发批量指令
|
|
rt_int8_t result; // 0:执行中/无结果 1:成功 -1:失败取消
|
|
rt_tick_t next_send_tick; // 非0时下一条命令不得早于该tick发送
|
|
} sou_com_batch_ch_t;
|
|
|
|
// COM批量下发总控结构体
|
|
typedef struct
|
|
{
|
|
sou_com_batch_ch_t ch[TOTAL_SOU_CHS];
|
|
} chrg_rollsou_com_t;
|
|
|
|
// 全局批量下发实例
|
|
extern chrg_rollsou_com_t g_sou_com_batch;
|
|
|
|
|
|
struct chrg_rollsou_t {
|
|
rt_uint8_t run; // 下一轮运行方式 1:自动轮巡 2:LCD触发插入 3:控制台触发插入4.com触发插入
|
|
rt_uint8_t part; // 自动轮巡时,多条命令序号(若存在多条命令时)
|
|
|
|
rt_uint8_t idx; // 自动轮巡时,通道序号
|
|
rt_uint8_t ch; // 触发插入时,切换的通道
|
|
|
|
rt_uint16_t reg; // LCD 触发时,寄存器地址
|
|
rt_uint16_t value; // LCD 触发时,寄存器值
|
|
|
|
rt_uint8_t updata_buf[YMODEM_STX_SIZE];/* 南向升级帧缓存,避免上层缓冲区被提前覆盖 */
|
|
rt_uint16_t leng; /* 当前待发送升级帧的实际长度 */
|
|
rt_int16_t updata_result;/* 最近一次升级帧发送结果 */
|
|
rt_uint8_t send_flag; /* 1:升级帧待发送或正在发送,0:允许提交下一帧 */
|
|
rt_uint8_t mode;// 0 为正常轮询,1为升级,2为校准
|
|
};
|
|
|
|
extern struct chrg_rollsou_t chrgrollsou;
|
|
|
|
/*****************************************************************
|
|
函数名称: chrg_set_sou_reg
|
|
函数描述: 南向通道设置寄存器请求命令
|
|
输入参数: idx:通道 reg:寄存器地址 value:寄存器值
|
|
输出参数: -
|
|
返回说明: -
|
|
其它说明: -
|
|
*****************************************************************/
|
|
extern void chrg_set_sou_reg (eIDX_SOU_CH idx, rt_uint16_t reg, rt_uint16_t value);
|
|
/*****************************************************************
|
|
函数名称: chrg_set_sou_reg_com
|
|
函数描述: com端南向通道设置寄存器请求命令(批量下发机制)
|
|
输入参数: idx:通道 reg:寄存器地址 value:寄存器值
|
|
输出参数: -
|
|
返回说明: -
|
|
其它说明: 每条命令加入批量队列,自动启动顺序下发,全部完成后切回轮巡
|
|
*****************************************************************/
|
|
extern void chrg_set_sou_reg_com (eIDX_SOU_CH idx, rt_uint16_t reg, rt_uint16_t value);
|
|
/*****************************************************************
|
|
函数名称: chrg_roll_sou_thread_entry
|
|
函数描述: 南向通道轮巡请求数据线程体
|
|
输入参数: *data: 本线程信息
|
|
输出参数: -
|
|
返回说明: -
|
|
其它说明: -
|
|
*****************************************************************/
|
|
extern void chrg_roll_sou_thread_entry (void *data);
|
|
|
|
/*****************************************************************
|
|
函数名称: chrg_send_sou_upadata_data
|
|
函数描述: 将一帧升级数据复制到南向升级缓存并唤醒升级发送分支
|
|
输入参数: buf:升级帧数据 leng:升级帧长度
|
|
输出参数: -
|
|
返回说明: 0:提交成功 -1:参数错误 -2:上一帧尚未发送 -3:互斥锁超时
|
|
其它说明: 数据在函数内完成复制,调用者返回后可以立即复用原缓冲区
|
|
*****************************************************************/
|
|
extern int chrg_send_sou_upadata_data(const rt_uint8_t *buf, rt_uint16_t leng);
|
|
extern int chrg_sou_com_batch_add_reg(eIDX_SOU_CH ch, rt_uint16_t reg, rt_uint16_t val);
|
|
extern int chrg_sou_com_batch_submit(eIDX_SOU_CH ch, const rt_uint16_t *regs,
|
|
const rt_uint16_t *vals, rt_uint8_t count);
|
|
/*****************************************************************
|
|
函数名称: chrg_sou_com_batch_cancel
|
|
函数描述: 取消指定通道尚未完成的南向COM批次
|
|
输入参数: ch:南向功率板通道
|
|
输出参数: -
|
|
返回说明: 0:批次已取消 <0:参数或互斥锁错误
|
|
其它说明: 已发送到功率板的当前命令无法撤回,但其后续未发送命令将被清除;
|
|
当前命令的迟到回码会按批次已变更处理,不再推进旧批次
|
|
*****************************************************************/
|
|
extern int chrg_sou_com_batch_cancel(eIDX_SOU_CH ch);
|
|
extern rt_bool_t chrg_sou_com_batch_is_pending(eIDX_SOU_CH ch);
|
|
/*****************************************************************
|
|
函数名称: chrg_sou_com_batch_get_result
|
|
函数描述: 获取指定通道最近一次南向COM批次的执行结果
|
|
输入参数: ch:南向功率板通道
|
|
输出参数: -
|
|
返回说明: 1:全部命令收到匹配回码 0:执行中/无结果 -1:失败取消 -2:参数或锁错误
|
|
其它说明: 用于区分pending清零是正常完成还是重试耗尽后的失败取消
|
|
*****************************************************************/
|
|
extern int chrg_sou_com_batch_get_result(eIDX_SOU_CH ch);
|
|
/*****************************************************************
|
|
函数名称: chrg_sou_measure_once_submit
|
|
函数描述: 请求南向线程优先查询指定通道的一帧P1量测数据
|
|
输入参数: ch:南向功率板通道
|
|
输出参数: -
|
|
返回说明: 0:请求成功或已存在同通道请求 <0:参数或互斥锁错误
|
|
其它说明: 只登记一次性请求,实际切通道、发送0x03和解析仍由南向线程完成
|
|
*****************************************************************/
|
|
extern int chrg_sou_measure_once_submit(eIDX_SOU_CH ch);
|
|
/*****************************************************************
|
|
函数名称: chrg_sou_trim_submit
|
|
函数描述: 根据校准类型组装功率板校准指令并提交到南向COM队列
|
|
输入参数: ch:南向功率板通道 pTrim:已解析的校准参数
|
|
输出参数: -
|
|
返回说明: 0:提交成功 <0:参数、校准模式或队列提交失败
|
|
其它说明: 实际发送、应答校验和重试由RUN_COM分支统一管理
|
|
*****************************************************************/
|
|
extern int chrg_sou_trim_submit(eIDX_SOU_CH ch, const struct chrg_trim *pTrim);
|
|
#endif
|
|
|
|
|