EMS 知识库
首页 / knowledge/代码解析/索引

EMS 代码检索入口

下次想问「某某功能在哪实现」,从这里开始。 本目录是对 docs/knowledge/代码解析/ 下 191 份逐文件分析文档的反查层。


一、三种查法(按推荐顺序)

1. 一句话查功能 → 直接问 AI

帮我找削峰填谷在哪实现

AI 会读本目录的表格定位。你不需要记路径。

2. 自己用检索脚本(最快)

在本目录下执行:

node 工具/查找.js -F 电池加热       # ⭐首选:功能 → 函数,直接给 定义文件:行号(含 .h 声明行号)
node 工具/查找.js 削峰填谷          # 综合查:功能定位 + 功能索引 + 函数 + 类型宏 + 全局变量
node 工具/查找.js -g 并机地址        # 只查功能反查表(口语问法也能命中)
node 工具/查找.js -f bat_heat        # 只查函数名(给 文件:行号)
node 工具/查找.js -t SOC_CALIBRATION # 只查类型/宏
node 工具/查找.js -v g_t_logic_info  # 只查全局变量
node 工具/查找.js -d 超时            # 全文搜所有分析文档(最全但慢)
node 工具/查找.js -p midware/bms/bms.c   # 由源文件路径得到文档路径

匹配规则(2026-10-15 起):查询会被切成「整串 + 空白分词 + ASCII 词 + 中文二元组」, 命中词按 idf 加权(语料里越罕见的词权重越高)排序,不再要求整串精确包含。 所以 -g 并机地址 现在能正确返回「并机 SCI 通信常量(主机/从机地址)」这类行 —— 以前它一条都搜不到,因为索引里没有「并机地址」这个连续子串。 中英混合写法(SOC校准、CAN并机、DRM需求响应)也能正确拆分,can 不会误命中 cancel。 若最佳结果覆盖不足你问题的三成,工具会明确说"未找到有效匹配",不会拿噪音糊弄你。

2.1 「功能定位表」是什么

功能定位.tsv 由 工具/生成功能定位.js 生成,是本目录最有用的产物: 把 7 份功能索引的 3195 条(功能问法,符号)解析出来,交叉符号索引补上 定义文件:行号, 并把功能索引里的章节标题一并留档(否则「DRM需求响应」这类问法会命不中 DRM 的行)。

源码改动后要重跑:

node 工具/生成功能定位.js     # 不要忘了这个,-F 模式依赖它

关键词不区分大小写,多个关键词空格分隔表示与。

3. 直接翻表

想知道什么看哪个文件
某功能由哪些函数实现功能索引/*.md(第一列写的是"你会怎么问")
某函数在哪个文件第几行函数索引.tsv(2364 条)
某宏/结构体/枚举在哪定义类型与宏索引.tsv(2787 条)
某全局变量在哪定义、什么类型全局变量索引.tsv(505 条)
某文件的整体职责、状态机、协议帧../<路径>/<文件名>.md

二、顶层路由表:先想清楚功能属于哪一块

你想找的东西去这个功能索引
功率怎么分配、充放电限值、调度策略logic.md
峰谷套利(削峰填谷)、时间段充放电、强制充电logic.md
AC 侧 / DC 侧功率控制、三相不平衡、并网取电限值logic.md
英国 G100、德国 §14a EnWG、奥地利 WLVlogic.md
澳洲 CSIP-AUS / DNSP 调度 / ramp 斜坡logic.md
调频 FCAS/FFR、云端功率调度指令logic.md + net.md
SOC 校准、智能化控制、光伏优先logic.md
油机(柴油发电机)启停logic.md
Backup 后备、UPS、EPO 紧急停机logic.md + midware-platform.md
安装接线自检logic.md
与云端 EMS 服务器通信、上报报文、下行指令net.md
固件升级总流程(EMS/逆变器/电表/BMS/桩/AFCI)net.md
各设备升级的适配层与分包重试net.md + midware-device.md
某厂商逆变器协议、寄存器表、帧格式midware-inverter.md
逆变器安规参数下发、CEI021 自检、曲线(P-V/Q-V 等)midware-inverter.md
并机(主机/从机、CAN/SCI 通道)midware-inverter.md
逆变器通信超时降级、通信丢失判定midware-inverter.md
电表型号识别、电参量、相序自适应、CTmidware-device.md
BMS 协议、电池加热、CAN 下行指令midware-device.md
充电桩(一代 EVC / 二代 EVC-II)midware-device.md
AFCI 电弧保护、故障日志上传midware-device.md
备电盒 BackupBox、油机控制器读数midware-device.md
Modbus RTU/TCP 从站、寄存器地址映射midware-platform.md
SunSpec 协议midware-platform.md
干接点继电器、DRM 需求响应midware-platform.md
以太网 W5500 通道、DHCP/DNS/Socketmidware-platform.md
无线通讯棒 WIFI/4G、P1 抄表midware-platform.md
电量统计、RTC 系统时间midware-platform.md
产线测试 ATE、调试通道midware-platform.md
AES / MD5 / 自研加密、CRC、JSONcommon-data-user.md
HEX / S19 固件文件解析common-data-user.md
串口在线调试 USMARTcommon-data-user.md
故障码定义、故障告警日志、网络事件日志common-data-user.md
系统配置存储、断点续传、Flash 页管理common-data-user.md
启动流程、任务创建、固件版本号common-data-user.md
按键、LCD 显示、LED 指示灯hmi.md
密码认证、菜单导航、参数编辑下发hmi.md

三、目录说明

索引/
├── README.md                  ← 本文件:检索入口 + 路由表
├── 功能索引/                   ← 核心:自然语言功能 → 源文件(共 1776 行表格)
│   ├── logic.md               逻辑调度(18 文件)
│   ├── net.md                 网络应用(20 文件)
│   ├── midware-inverter.md    逆变器协议(42 文件)
│   ├── midware-device.md      电表/BMS/充电桩/AFCI(28 文件)
│   ├── midware-platform.md    接口/以太网/调试/辅助(36 文件)
│   ├── common-data-user.md    工具库/数据/入口(35 文件)
│   └── hmi.md                 人机界面(12 文件)
├── 函数索引.tsv               2364 条:函数名 \t 源文件 \t 行号 \t 模块 \t 文件总行数
├── 类型与宏索引.tsv           2787 条:名称 \t 种类 \t 源文件 \t 行号
├── 全局变量索引.tsv            505 条:变量名 \t 源文件 \t 行号 \t 声明
└── 工具/
    ├── 查找.js                检索脚本
    └── 生成索引.js            重新生成三个 TSV(源码变动后重跑)

TSV 是制表符分隔的纯文本,可直接 grep:

grep -i "bms" 函数索引.tsv | head
grep "g_t_inv_info" 全局变量索引.tsv

四、注意事项

符号索引由脚本机械抽取(工具/生成索引.js):用"顶层大括号配对"把文件切成一串顶层声明,再按声明头分类。

校验过的准确性:

已知边界:

功能索引由归纳整理而来,第一列是"用户可能怎么问"的口语化措辞,允许同义词重复列行;它指路到文件,具体到函数与行号请再看该文件的分析文档。

覆盖边界:本索引只覆盖已文档化的 191 个应用层文件。以下内容不在范围内:

重新生成符号索引:改过源码后在本目录执行

node 工具/生成索引.js

五、一份完整示例

问:「电池加热是怎么控制的?」

  1. node 工具/查找.js 电池加热 → 命中
    • bat_heat_handle / bat_inv_heat_deal → midware/bms/bms.c
    • set_set_bat_heat_cmd 等 → midware/inverter/set/set_comm_usart_s5.c
  2. 打开 ../midware/bms/bms.c.md,看第 4 节「核心逻辑解析」里的加热状态机(NORMAL / INV_HEAT / INV_HEAT_FAULT 迁移条件、3100ms/9100ms 等时间阈值)
  3. 要看源码原文,按 TSV 里的行号去 midware/bms/bms.c 对号入座