Procházet zdrojové kódy

修文档校验: 版本注记/文档源里的 markdown 反引号改为中文引号(校验把落单反引号当残留标记)

zhouyang.xie před 6 dny
rodič
revize
a21ac0c42c

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 62 - 63
app_common/app_common_guanlan/version.py


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 22 - 23
docs/src/系统设计说明_观澜_2.85.2.md


+ 20 - 20
docs/src/需求分析_观澜_2.85.2.md

@@ -123,7 +123,7 @@
 
 | 版本 | 日期 | 用户令要点 | 变化级别 |
 |---|---|---|---|
-| 2.85.2 | 2026-10-05 | 修「执行重算」第 ⑦ 步失败:`kb_ingest.py` 把 `_install_root` 误写成 `_p._ins | 小(patch) |
+| 2.85.2 | 2026-10-05 | 修「执行重算」第 ⑦ 步失败:「kb_ingest.py」 把 「_install_root」 误写成 「_p._ins | 小(patch) |
 | 2.85.1 | 2026-10-05 | 措辞政策定案:以实时接口用词为准;3 条差异改判为「基线旧快照用词」 | 小(patch) |
 | 2.85.0 | 2026-10-05 | 清产物后给友好空态 | 中(minor) |
 | 2.84.1 | 2026-10-05 | 清产物/重算后工作台自动重取数;实测空数据各页显示空态 | 小(patch) |
@@ -148,11 +148,11 @@
 | 2.80.0 | 2026-10-04 | 页签精简+ 删除页头模式按钮 | 中(minor) |
 | 2.79.1 | 2026-10-04 | 入库「整页外壳对比」工具;回滚一次导致挂载失败的外壳对齐尝试 | 小(patch) |
 | 2.79.0 | 2026-10-04 | 工作台补全套时间窗控件;门户装配改分阶段 | 中(minor) |
-| 2.78.4 | 2026-10-04 | 修 `/detail/v2` 空白:vite base 由相对 `./` 改为绝对 `/web/` | 小(patch) |
+| 2.78.4 | 2026-10-04 | 修 」/detail/v2「 空白:vite base 由相对 」./「 改为绝对 」/web/「 | 小(patch) |
 | 2.78.3 | 2026-10-04 | 修「点登录不进工作台」:iframe 内捕获期接管 4 个入口 + 外层 hashchange | 小(patch) |
 | 2.78.2 | 2026-10-04 | 修「登录后进不了工作台」:补 /detail/v2 路径判定 + 修 TDZ;门户三入口改 target=_top | 小(patch) |
 | 2.78.1 | 2026-10-04 | 修门户正文出现原始标记文字:装配口径照 portal_build.py | 小(patch) |
-| 2.78.0 | 2026-10-04 | 门户整页化 + `/detail/v2` 指向 Vue 工作台 | 中(minor) |
+| 2.78.0 | 2026-10-04 | 门户整页化 + 」/detail/v2「 指向 Vue 工作台 | 中(minor) |
 | 2.77.0 | 2026-10-03 | 修「不居中」:补 v2.9.2 的外层容器 .wrap | 中(minor) |
 | 2.76.1 | 2026-10-03 | 门户模式标题取门户自身;真机两版并排结果记档 | 小(patch) |
 | 2.76.0 | 2026-10-03 | 结构对拍 10/10 全部一致 | 中(minor) |
@@ -162,7 +162,7 @@
 | 2.73.0 | 2026-10-03 | component 收敛到 +1;9/10 稳定达标 + 记录两处待办 | 中(minor) |
 | 2.72.0 | 2026-10-03 | energy / generation / fault 结构一致;component 收敛到 +6 | 中(minor) |
 | 2.71.0 | 2026-10-03 | decision 结构一致+ energy/generation 图表改用 v2.9.2 的 SVG 渲染器 | 中(minor) |
-| 2.70.0 | 2026-10-03 | 新版根路径 `/` = 门户;工作台走 `#workbench` | 中(minor) |
+| 2.70.0 | 2026-10-03 | 新版根路径 」/「 = 门户;工作台走 」#workbench「 | 中(minor) |
 | 2.69.0 | 2026-10-03 | 新增 v-unwrap 指令:消除 v-html 宿主多出的一层 ⇒ vibration / assistant 结构一 | 中(minor) |
 | 2.68.0 | 2026-10-03 | overview 结构对齐 | 中(minor) |
 | 2.67.0 | 2026-10-03 | Fault 页图表改用 v2.9.2 的 SVG 渲染器+ 结构判据透明化 | 中(minor) |
@@ -800,7 +800,7 @@
 
 适用性目标分三层写清。**入口不换**:安装、落位、重算、页面与验收的入口和流程与样本场完全一致,现场人员不需要学第二套操作。**口径不散**:场名、机组数与机组清单、机型参数、原始件路径、判据阈值与界面单位都从配置取,不在代码里写死;一旦写死,多场并存时就会静默串场。**缺件不造**:新场某一族数据没到位时,系统如实标注缺件并按缺族降级,绝不拿别的场的数字顶替,也不把样本场的阈值当成新场的阈值。
 
-本章有两个词要先定义。「本场」指**当前被选中的场**,由配置选定,不必然等于本文取数的样本风电场;「换场」指从一场切到另一场运行的整套动作(改配置、放数据、重跑、按检查表复验),不是把两场的数据混在一棵树里。本章沿用的占位符与附录 A 一致:`<场>`、`<场站>`、`<机型>` 按实际风电场替换。
+本章有两个词要先定义。「本场」指**当前被选中的场**,由配置选定,不必然等于本文取数的样本风电场;「换场」指从一场切到另一场运行的整套动作(改配置、放数据、重跑、按检查表复验),不是把两场的数据混在一棵树里。本章沿用的占位符与附录 A 一致:」<场>「、」<场站>「、」<机型>「 按实际风电场替换。
 
 本章需求与《数据要求说明_观澜_2.85.2.docx》《系统设计说明_观澜_2.85.2.docx》配套使用:本章讲「换场要满足什么」,数据要求说明讲「要向新场收哪些数据、哪些可以裁剪」,《设计说明》讲「配置在哪一层生效、哪些参数属于场相关层」。
 
@@ -808,25 +808,25 @@
 
 ### 11.2 场配置化需求
 
-场相关的一切取值都落在场定义文件 `app_ETL/configs/farms/<场>.yaml` 里,它是场相关事实的**唯一真源**:代码只读它,不在代码里写场名、机组数或原始件路径。当前场由环境变量 `WINDSCADA_FARM=<场>` 或程序内的 set_current() 选择,命令行脚本与服务走同一条路。
+场相关的一切取值都落在场定义文件 」app_ETL/configs/farms/<场>.yaml「 里,它是场相关事实的**唯一真源**:代码只读它,不在代码里写场名、机组数或原始件路径。当前场由环境变量 」WINDSCADA_FARM=<场>「 或程序内的 set_current() 选择,命令行脚本与服务走同一条路。
 
 表 11-1 场配置化需求(FR-44 至 FR-46)
 
 | 编号 | 需求描述 | 输入 | 输出 | 验收判据 | 依据文件 |
 |---|---|---|---|---|---|
-| FR-44 | 场定义必须有七个必填键:`name`、`n_turbines`、`turbines`、`src_10min`、`src_alarm`、`store`、`rated_kw`;缺任何一个都在装载时响亮报出缺少的键名,绝不带病进入分析 | 场定义文件 `app_ETL/configs/farms/<场>.yaml` | 通过校验的场对象 | 七个必填键逐个在位;人为删去任一键时启动即报错并打印所缺键名 | src/windscada/config.py 的 REQUIRED 与 _expand() |
-| FR-45 | 当前场由 `WINDSCADA_FARM=<场>` 或 set_current() 选择,切换只改选择不改代码;以 `app_ETL/configs/farms/<场>.yaml` 为准(历史 json 兼容);选到未定义的场,或选到「文件存在但不是场定义」的机型与物理约束 profile 时,必须报未知场并列出可用场 | 环境变量或选择调用、场定义文件 | 当前场对象与其派生的原始件根、标准仓与契约路径 | 换到另一份场定义后,重算与页面取到的是新场的路径与机组数,没有一处残留上一场的取值(不串场) | src/windscada/config.py 的 farm() 与 set_current() 与 available() |
-| FR-46 | 场站目录按规则扫描辨识而不写死:场定义里的场站名与目录名完全相同者优先,其次是场名写法互为子串,再次是单站唯一性并标注「凭唯一性」;多个目录且都不匹配时如实报未识别并列出扫到的目录,不猜 | `data/raw` 下一级目录、场定义 | 辨识结论与依据、本场原始件根 | 四条规则的依据逐条可打印;未识别时页面显示无数据并给出约定位置而不是空路径 | src/windscada/config.py 的 station_scan() 与 station_report();FR-37 |
+| FR-44 | 场定义必须有七个必填键:」name「、」n_turbines「、」turbines「、」src_10min「、」src_alarm「、」store「、」rated_kw「;缺任何一个都在装载时响亮报出缺少的键名,绝不带病进入分析 | 场定义文件 」app_ETL/configs/farms/<场>.yaml「 | 通过校验的场对象 | 七个必填键逐个在位;人为删去任一键时启动即报错并打印所缺键名 | src/windscada/config.py 的 REQUIRED 与 _expand() |
+| FR-45 | 当前场由 」WINDSCADA_FARM=<场>「 或 set_current() 选择,切换只改选择不改代码;以 」app_ETL/configs/farms/<场>.yaml「 为准(历史 json 兼容);选到未定义的场,或选到「文件存在但不是场定义」的机型与物理约束 profile 时,必须报未知场并列出可用场 | 环境变量或选择调用、场定义文件 | 当前场对象与其派生的原始件根、标准仓与契约路径 | 换到另一份场定义后,重算与页面取到的是新场的路径与机组数,没有一处残留上一场的取值(不串场) | src/windscada/config.py 的 farm() 与 set_current() 与 available() |
+| FR-46 | 场站目录按规则扫描辨识而不写死:场定义里的场站名与目录名完全相同者优先,其次是场名写法互为子串,再次是单站唯一性并标注「凭唯一性」;多个目录且都不匹配时如实报未识别并列出扫到的目录,不猜 | 」data/raw「 下一级目录、场定义 | 辨识结论与依据、本场原始件根 | 四条规则的依据逐条可打印;未识别时页面显示无数据并给出约定位置而不是空路径 | src/windscada/config.py 的 station_scan() 与 station_report();FR-37 |
 
 ### 11.3 机组与机型可替换
 
-机组数、台号、机型与主机制造商(OEM)的差异不进入引擎:引擎按场对象给出的机组清单与额定容量工作,机型差异通过**机型—场站数据契约** `app_ETL/configs/contracts/<机型>_<场>.yaml` 落到列名、单位与阈值上。换机型等于换契约,不改引擎。
+机组数、台号、机型与主机制造商(OEM)的差异不进入引擎:引擎按场对象给出的机组清单与额定容量工作,机型差异通过**机型—场站数据契约** 」app_ETL/configs/contracts/<机型>_<场>.yaml「 落到列名、单位与阈值上。换机型等于换契约,不改引擎。
 
 表 11-2 机组与机型替换需求(FR-47)
 
 | 编号 | 需求描述 | 输入 | 输出 | 验收判据 | 依据文件 |
 |---|---|---|---|---|---|
-| FR-47 | 机组清单、机组数、额定容量与机型参数一律取自场定义与机型契约;`turbines` 同时支持逐台列举与「前缀加台号区间」两种写法,且 `n_turbines` 与 `turbines` 必须自洽;机型的拓扑差异(例如有无齿轮箱)只体现在契约与阈值层,不产生引擎分支 | 场定义的 `turbines`、`n_turbines`、`rated_kw`;`app_ETL/configs/contracts/<机型>_<场>.yaml` | 逐台循环范围、列名与单位映射、额定容量 | 换一个机组数不同的场后,矩阵行数与台账件数随 `n_turbines` 变化;同一份判据代码在有机型差异的两场上都能跑完 | src/windscada/config.py 的 _expand();app_ETL/configs/farms/<场>.yaml;app_ETL/configs/contracts/<机型>_<场>.yaml |
+| FR-47 | 机组清单、机组数、额定容量与机型参数一律取自场定义与机型契约;」turbines「 同时支持逐台列举与「前缀加台号区间」两种写法,且 」n_turbines「 与 」turbines「 必须自洽;机型的拓扑差异(例如有无齿轮箱)只体现在契约与阈值层,不产生引擎分支 | 场定义的 」turbines「、」n_turbines「、」rated_kw「;」app_ETL/configs/contracts/<机型>_<场>.yaml「 | 逐台循环范围、列名与单位映射、额定容量 | 换一个机组数不同的场后,矩阵行数与台账件数随 」n_turbines「 变化;同一份判据代码在有机型差异的两场上都能跑完 | src/windscada/config.py 的 _expand();app_ETL/configs/farms/<场>.yaml;app_ETL/configs/contracts/<机型>_<场>.yaml |
 
 ### 11.4 数据源形态可适配与缺族降级
 
@@ -891,10 +891,10 @@
 
 | 类别 | 检查项 | 通过口径 | 对应需求 |
 |---|---|---|---|
-| 配置 | 场定义七个必填键齐全且自洽 | 装载无报错;`n_turbines` 与 `turbines` 的台数一致;`rated_kw` 与本场容量一致 | FR-44 |
-| 配置 | 选择当前场的方式生效 | `WINDSCADA_FARM=<场>` 或 set_current() 选定后,取到的路径与机组数都属本场,无上一场残留 | FR-45 |
+| 配置 | 场定义七个必填键齐全且自洽 | 装载无报错;」n_turbines「 与 」turbines「 的台数一致;」rated_kw「 与本场容量一致 | FR-44 |
+| 配置 | 选择当前场的方式生效 | 」WINDSCADA_FARM=<场>「 或 set_current() 选定后,取到的路径与机组数都属本场,无上一场残留 | FR-45 |
 | 配置 | 场站目录辨识有依据 | 辨识结论与依据可打印;未识别时指向约定位置而不是空路径 | FR-46 |
-| 配置 | 机型契约按机型就位 | `app_ETL/configs/contracts/<机型>_<场>.yaml` 在位,列名与单位可加载 | FR-47 |
+| 配置 | 机型契约按机型就位 | 」app_ETL/configs/contracts/<机型>_<场>.yaml「 在位,列名与单位可加载 | FR-47 |
 | 配置 | 判据参数按场标定 | 阈值、时间窗锚点、限电窗、温度档带宽逐项有值,或有「本场不判该轴」的明确省略记录 | FR-50 |
 | 数据 | 各族源件按约定目录与命名就位 | 体检结论为结构合规;冲突默认拦下;同尺寸件可反复跳过 | FR-36 |
 | 数据 | 源件形态能被取数层读到 | 各族消费者实跑到数;同台多件合并行数与重叠行数如实打印 | FR-48 |
@@ -915,10 +915,10 @@
 
 | 需求 | 配置项或真源 | 验收方式 | 换场时的动作 |
 |---|---|---|---|
-| FR-44 | `app_ETL/configs/farms/<场>.yaml` 的 `name`、`n_turbines`、`turbines`、`src_10min`、`src_alarm`、`store`、`rated_kw` | 装载报错清单为空;台数与机组清单一致 | 新建或改写场定义并填齐七个必填键 |
-| FR-45 | `WINDSCADA_FARM=<场>` 或 set_current();`app_ETL/configs/farms/<场>.yaml` | 换场后路径与机组数无残留(不串场) | 设定场选择并确认取到本场路径 |
-| FR-46 | `data/raw/<场站>` 的目录名与场名写法 | 辨识依据逐条打印;未识别时报出扫到的目录 | 按约定改名或补场名写法 |
-| FR-47 | `turbines`、`n_turbines`、`rated_kw`;`app_ETL/configs/contracts/<机型>_<场>.yaml` | 机组数变化则矩阵行数与台账件数随之变化 | 换机型契约,台号按实际替换 |
+| FR-44 | 」app_ETL/configs/farms/<场>.yaml「 的 」name「、」n_turbines「、」turbines「、」src_10min「、」src_alarm「、」store「、」rated_kw「 | 装载报错清单为空;台数与机组清单一致 | 新建或改写场定义并填齐七个必填键 |
+| FR-45 | 」WINDSCADA_FARM=<场>「 或 set_current();」app_ETL/configs/farms/<场>.yaml「 | 换场后路径与机组数无残留(不串场) | 设定场选择并确认取到本场路径 |
+| FR-46 | 」data/raw/<场站>「 的目录名与场名写法 | 辨识依据逐条打印;未识别时报出扫到的目录 | 按约定改名或补场名写法 |
+| FR-47 | 」turbines「、」n_turbines「、」rated_kw「;」app_ETL/configs/contracts/<机型>_<场>.yaml「 | 机组数变化则矩阵行数与台账件数随之变化 | 换机型契约,台号按实际替换 |
 | FR-48 | 取数层的族入口;类目归档库与同台补充件;场级字段语义登记 | 合并行数与重叠行数打印;类目库不计变化 | 按现场形态落位并体检 |
 | FR-49 | 各族在位情况与缺件标注 | 每一族缺失都有可复核的缺件说明;无造数 | 能补的补件,补不了的如实记账 |
 | FR-50 | 场定义与机型契约里的参数段 | 同系统在两场不同阈值下判级可各自复算;省略项写明不判该轴 | 按新场标定阈值、时间窗锚点、限电窗与温度档带宽 |
@@ -1027,7 +1027,7 @@
 | 按场裁剪的收资清单与必须性分级 | docs/src/数据要求说明_观澜_2.85.2.md |
 | 场无关引擎与场相关参数的分层与换场作业单 | docs/src/系统设计说明_观澜_2.85.2.md |
 
-表中 `<场>`、`<场站>`、`<机型>` 为占位符,按实际风电场替换。
+表中 」<场>「、」<场站>「、」<机型>「 为占位符,按实际风电场替换。
 
 ## 附录 B 术语表
 
@@ -1064,7 +1064,7 @@
 | 容忍口径 | tolerate | 重算链允许某步返回特定退出码而不打断整条链,且明确「容忍不等于通过」 | scripts/rebuild_all.py |
 | 核对锚点 | — | 重算后应达到的条数指标,用于快速判断数据是否真的进去了 | docs/输入数据放置指导_v0.1.md §4 |
 | 收资 | — | 向现场收集原始数据与资料的过程与其清单要求 | docs/现场收资接入_v0.1.md |
-| 场定义 | farm config | 一个场的最小事实集合:名称、机组数与机组清单、原始件路径、标准仓与额定容量;落 `app_ETL/configs/farms/<场>.yaml` | src/windscada/config.py 的 REQUIRED |
+| 场定义 | farm config | 一个场的最小事实集合:名称、机组数与机组清单、原始件路径、标准仓与额定容量;落 」app_ETL/configs/farms/<场>.yaml | src/windscada/config.py 的 REQUIRED |
 | 换场 | — | 从一场切到另一场运行的整套动作:改配置、放数据、重跑、按检查表复验 | 本文 §11.9 |
 | 缺族降级 | — | 某族数据缺失时按缺件如实标注并降低该族功能,不造数、不用他场数字顶替 | 本文 FR-49 |
 | 按场标定 | — | 把阈值、时间窗锚点、限电窗、温度档带宽等场相关参数按本场取值 | 本文 FR-50 |

binární
docs/数据要求说明_观澜_2.85.2.docx


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 41 - 45
docs/版本记录.md


binární
docs/系统设计说明_观澜_2.85.2.docx


binární
docs/需求分析_观澜_2.85.2.docx


Některé soubory nejsou zobrazeny, neboť je v těchto rozdílových datech změněno mnoho souborů