c936441c83
本轮把"自研代码落在门禁之外"的口子收掉,同时落地 LVGL 特性裁剪与 L3 保护定值/元件框架。 门禁(.pre-commit-config.yaml,26 个钩子) - 新增 scripts/check_lv_conf_sync.py + 钩子 lv-conf-sync:比对两份 lv_conf.h 的**生效值**(未定义则取 lv_conf_internal.h 兜底默认), 抓 MISMATCH / LVGL 不认的宏名 / 同文件重复定义 - 顶层 exclude 删掉 simulator/:其下 21 个 tracked 文件全是本项目自研 代码,生成物(build/、SDL2/、tests/ref/、shot*)已在 .gitignore; doc-links 的 exclude 同步删除 - lv-conf-sync 的 files: 覆盖两端配置 → 只改 simulator/lv_conf.h 也触发 (pre-commit 4.x 已移除 always: true,实测只告警并跳过,无兜底开关) - 新增 prot-set-unit-test / prot-elm-unit-test 两个主机侧单测钩子 - S11(2.3.5) 判定细化:禁的是"用路径找文件",尖括号系统头带子目录 (如 <sys/stat.h>)不再误报;全仓库复核仅 2 处项目代码判定变化 模拟器代码整改(纳入钩子后暴露,全部修代码而非豁免) - cppcheck 4 处:sim_syslog.c 判空分支内解引用 p_epoch(真实 bug)、 2 处 struct tm 未初始化、1 处指针可加 const - coding-standard 61 处:44 处函数左大括号并到右括号同行、8 处补函数 注释、3 处补文件头注释块、2 处 __ 前缀保护宏改 XXX_H、2 处 sprintf 改 snprintf(写入字节数与原来完全一致) LVGL 特性裁剪(F-1/F-2/F-3) - 两端 lv_conf.h 对齐同一特性子集:删 26 个 LVGL 9.3 不存在的选项名、 3 处重复定义,10 项靠默认值隐式生效的改为显式固化 - 实测对镜像体积中性;价值在防漂移,且模拟器 golden 回归跑的正是固件 实际编译的配置 L3 软件侧 - App/algo/prot_set.* Q10 定值模型(范围校验 / 整表 all-or-nothing / 校验和封存-自检-闭锁)+ prot_elm.* 通用"滞回+定时限"元件框架 7 实例 - test/host/prot_set、test/host/prot_elm 主机侧单测;uvprojx 挂载两处 文档同步 - pre-commit使用说明:§2.8 S11 口径、§2.15 lv-conf-sync 详解、新增 §5.5 复盘(教训:exclude 只写真正不该进钩子的路径) - AGENTS.md、UI_设计架构 §1.4 第 10 条、RAM 分析、审查报告刷新与销项 验证 - @build BUILD_OK 0/0(Code=194276 RO=15872 RW=876 ZI=139892) - 模拟器重建:菜单 8 状态像素逐字节一致(池 5368 B)、11 内容页黄金参考 全过(往返 5448 B)、remo sink 0/25600 位差异、--logtest/--cfgtest PASS - 全仓库 cppcheck / coding-standard / no-mojibake --all-files 全过 - check_doc_links --all 129/0;check_mem_numbers --check 内存数字一致 - 端到端:往 simulator/lv_conf.h 注入一行漂移 → 钩子 FAIL(exit 1)
85 lines
3.8 KiB
C
85 lines
3.8 KiB
C
/*
|
||
* 模块名称:保护元件框架(L3,P1 子集)
|
||
* 模块功能:通用"越限 + 返回系数滞回 + 定时限"元件核 + 实例表(数据驱动,
|
||
* 同 phasor 实例表模式)。判据为**纯逻辑**(吃测量值 + 定值),
|
||
* 主机侧可离线单测;出口/SOE(L4)与任务编排为后续。
|
||
*
|
||
* V0.1 有效实例(N-18:仅 TPAFE 三路):
|
||
* OC1/OC2/OC3 三段式相间过流(A 相 IA,L3-1)
|
||
* OL 过负荷(A 相 IA,L3-3)
|
||
* OV/UV 过压/欠压(UA,L3-4)
|
||
* 3U0 零序过压(UN 外部零序电压通道,L3-6)
|
||
* ⚠ 过频/低频(L3-5)随频率测量算法(P2)落地,本表暂不含。
|
||
*
|
||
* 与参考系统的口径差异(有意简化,均已在规划文档登记):
|
||
* - 返回门槛 = 定值 × 返回系数(参考经 CN_SET_RET 独立定值,等价);
|
||
* - 返回**即时**(参考 GRly_TimeRelay 带 10 ms 返回延时——V0.1 无出口硬件,
|
||
* 抖动只影响日志,P4 接出口时再补返回延时);
|
||
* - 复压/方向/无压无流闭锁(dwSetFyCtrl 类)随 P2/P3 元件扩展;
|
||
* - 工程量↔码值换算系数暂为 1(L1-5 标定未实现,同 phasor 层口径)。
|
||
*
|
||
* 线程约定:init 内核启动前;eval/run 仅保护消费者任务上下文(P1 阶段 = 单测;
|
||
* 板端接线随 protectTask 立项,走栈预算 + IWDG 心跳门禁)。
|
||
*
|
||
* 创建日期:2026-10-11
|
||
*/
|
||
#ifndef PROT_ELM_H
|
||
#define PROT_ELM_H
|
||
|
||
#include <stdint.h>
|
||
|
||
/* 元件实例编号(枚举序 = 实例表序 = 测量数组序) */
|
||
typedef enum {
|
||
PE_OC1 = 0, /* 过流 Ⅰ 段(IA) */
|
||
PE_OC2, /* 过流 Ⅱ 段(IA) */
|
||
PE_OC3, /* 过流 Ⅲ 段(IA) */
|
||
PE_OL, /* 过负荷(IA) */
|
||
PE_OV, /* 过压(UA) */
|
||
PE_UV, /* 欠压(UA,欠量方向) */
|
||
PE_3U0, /* 零序过压(UN) */
|
||
PE_COUNT
|
||
} prot_elm_id_t;
|
||
|
||
/* 单元件状态快照(读侧拷贝语义,见 prot_elm_state) */
|
||
typedef struct {
|
||
uint8_t enabled; /* 本拍投入(定值投退 && 未闭锁) */
|
||
uint8_t picked; /* 越限启动(滞回后电平) */
|
||
uint8_t asserted; /* 定时限到点(动作) */
|
||
uint32_t pick_ms; /* 本次启动起始时基(0 = 未启动过;asserted 延时观测用) */
|
||
} prot_elm_state_t;
|
||
|
||
/*
|
||
* 函数功能:复位全部元件状态(定值不动;幂等,内核启动前可调)
|
||
*/
|
||
void prot_elm_init(void);
|
||
|
||
/*
|
||
* 函数功能:纯判据步进——按当前定值(prot_set RAM)+ 给定测量值推进所有元件
|
||
* 入口参数:now_ms - 单调时基(tick ms,回绕安全:差值法)
|
||
* meas - PE_COUNT 个测量值(工程量:A / V),NULL 视为全 0
|
||
* 返 回 值:无
|
||
* 限定条件:仅保护消费者任务上下文;调用方保证定值已装载
|
||
* 函数说明:越限方向由实例表决定;投退=0 或定值闭锁(L5-1)→ 状态复位、
|
||
* 不判据。延时判定用 (uint32_t)(int32_t)(now - t0) >= dly,回绕安全。
|
||
*/
|
||
void prot_elm_eval(uint32_t now_ms, const float meas[PE_COUNT]);
|
||
|
||
/*
|
||
* 函数功能:适配层——从 phasor 使用区取 rms 组装测量数组后调 prot_elm_eval
|
||
* 入口参数:now_ms - 同上
|
||
* 说明:phasor 未就绪(-2,未满一周波)的实例本拍按"测量=上一拍值"处理会
|
||
* 引入陈旧判据 → 直接**整拍跳过**(不 eval),与 adc_task 跳拍同口径。
|
||
*/
|
||
void prot_elm_run(uint32_t now_ms);
|
||
|
||
/* 状态快照拷贝(NULL 安全;越界全零) */
|
||
void prot_elm_state(prot_elm_id_t id, prot_elm_state_t *out);
|
||
|
||
/* 动作位图(bit i = 元件 i asserted),供 L4 出口 / 心跳日志 */
|
||
uint32_t prot_elm_active_mask(void);
|
||
|
||
/* 实例名(ROM 常量,日志用) */
|
||
const char *prot_elm_name(prot_elm_id_t id);
|
||
|
||
#endif /* PROT_ELM_H */
|