Compare commits
2 Commits
0677f2ea15
...
a554000674
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a554000674 | ||
|
|
df5234ffe0 |
@@ -1,183 +0,0 @@
|
|||||||
# AnalyzeCommand 使用指南
|
|
||||||
|
|
||||||
数据分析命令,支持 Ploss 余量分析与 Qfod 标定阈值分析。
|
|
||||||
|
|
||||||
## 命令语法
|
|
||||||
|
|
||||||
```bash
|
|
||||||
WCTDataMiner analyze --type <ploss|qfod> [选项]
|
|
||||||
```
|
|
||||||
|
|
||||||
## 分析类型
|
|
||||||
|
|
||||||
| 类型 | 说明 | 必需参数 |
|
|
||||||
|------|------|----------|
|
|
||||||
| `ploss` | Ploss 余量/delta_p 分析 | `--file` |
|
|
||||||
| `qfod` | Qfod 标定阈值计算 | `--pure`, `--foreign` |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Ploss 分析
|
|
||||||
|
|
||||||
### 语法
|
|
||||||
|
|
||||||
```bash
|
|
||||||
WCTDataMiner analyze --type ploss --file <日志文件路径>
|
|
||||||
```
|
|
||||||
|
|
||||||
### 参数
|
|
||||||
|
|
||||||
| 参数 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| `--file` | 日志文件路径(支持 `.log` 和 `.DAT` 格式) |
|
|
||||||
|
|
||||||
### 输出示例
|
|
||||||
|
|
||||||
```
|
|
||||||
=== Ploss Analysis: sample.DAT ===
|
|
||||||
Total: 35 (TwoLine: 35, Legacy: 0), FOD: 1, Errors: 0
|
|
||||||
Normal margin>2000: 34/34 (100.0%)
|
|
||||||
FOD margin>2000: 1/1 (100.0%)
|
|
||||||
Identity (delta_p = Tx - Rx - pow_loss - ploss): 35/35
|
|
||||||
|
|
||||||
FOD rows (delta_p back-solve):
|
|
||||||
Line 92 [two-line] pow_loss=3394 delta_p=605 ploss=1750 threshold=2000 margin=250
|
|
||||||
-> delta_p'=605
|
|
||||||
rewrite: pow_loss = 3394, delta_p = 605
|
|
||||||
```
|
|
||||||
|
|
||||||
### 输出字段说明
|
|
||||||
|
|
||||||
| 字段 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| **Total** | 总记录数,按格式分类(TwoLine: 两行格式,Legacy: 旧单行格式) |
|
|
||||||
| **FOD** | FOD 标记行数(Field12 == 1) |
|
|
||||||
| **Errors** | 解析错误行数 |
|
|
||||||
| **Normal margin>2000** | 正常行中余量 > 2000 的比例 |
|
|
||||||
| **FOD margin>2000** | FOD 行中余量 > 2000 的比例 |
|
|
||||||
| **Identity** | 恒等式成立行数(delta_p = Tx - Rx - pow_loss - ploss) |
|
|
||||||
|
|
||||||
### FOD 行反解
|
|
||||||
|
|
||||||
当存在 FOD 行时,输出包含 `delta_p'` 反解结果:
|
|
||||||
|
|
||||||
- `delta_p'` = 反解后的 delta_p 值
|
|
||||||
- `rewrite` = 重写后的 header 字段(pow_loss, delta_p)
|
|
||||||
|
|
||||||
### 支持的日志格式
|
|
||||||
|
|
||||||
#### 两行格式(推荐)
|
|
||||||
|
|
||||||
```
|
|
||||||
HEADER-> 18768 2001 -18347 3394 1750 2000 ...
|
|
||||||
FOD-> 12 18801 2001 -18447 3394 1750 2000 0 1750 2000 1 0 0 0 0 0
|
|
||||||
```
|
|
||||||
|
|
||||||
#### 旧单行格式(兼容)
|
|
||||||
|
|
||||||
```
|
|
||||||
FOD-> 0 0 0 12 18801 2001 -18447 3394 1750 2000 0 1750 2000 1 0 0 0
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Field1 十六进制支持
|
|
||||||
|
|
||||||
Field1 支持以下十六进制格式:
|
|
||||||
|
|
||||||
| 格式 | 示例 | 说明 |
|
|
||||||
|------|------|------|
|
|
||||||
| `0x` 前缀 | `0xFF`, `0x0C` | 标准 C 风格十六进制 |
|
|
||||||
| `0` 前缀 | `0FF`, `0C` | 简写十六进制(仅含 A-F 时识别) |
|
|
||||||
| 十进制 | `12`, `255` | 普通十进制 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Qfod 标定
|
|
||||||
|
|
||||||
### 语法
|
|
||||||
|
|
||||||
```bash
|
|
||||||
WCTDataMiner analyze --type qfod --pure <纯手机日志> --foreign <异物日志>
|
|
||||||
```
|
|
||||||
|
|
||||||
### 参数
|
|
||||||
|
|
||||||
| 参数 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| `--pure` | 纯手机充电日志路径 |
|
|
||||||
| `--foreign` | 手机 + 异物充电日志路径 |
|
|
||||||
|
|
||||||
### 输出示例
|
|
||||||
|
|
||||||
```
|
|
||||||
=== Qfod Calibration ===
|
|
||||||
Pure phone: pure.log
|
|
||||||
count=21 min=3 max=5 avg=4.0
|
|
||||||
Foreign object: foreign.log
|
|
||||||
count=7 min=-49 max=-5 avg=-27.7
|
|
||||||
|
|
||||||
Threshold = (pureMax + foreignMin) / 2 = (5 + -49) / 2 = -22
|
|
||||||
Margin: pureMax - threshold = 27 (负为安全), foreignMin - threshold = -27 (正为安全)
|
|
||||||
```
|
|
||||||
|
|
||||||
### 输出字段说明
|
|
||||||
|
|
||||||
| 字段 | 说明 |
|
|
||||||
|------|------|
|
|
||||||
| **count** | 记录条数 |
|
|
||||||
| **min** | ΔQ 最小值 |
|
|
||||||
| **max** | ΔQ 最大值 |
|
|
||||||
| **avg** | ΔQ 平均值 |
|
|
||||||
| **Threshold** | 标定阈值 = (pureMax + foreignMin) / 2 |
|
|
||||||
|
|
||||||
### 标定原理
|
|
||||||
|
|
||||||
1. **纯手机充电**:ΔQ 稳定在正值区间(如 3~5)
|
|
||||||
2. **异物干扰**:ΔQ 衰减到负值区间(如 -49~-5)
|
|
||||||
3. **阈值计算**:取两组数据的中间值,实现最大区分度
|
|
||||||
|
|
||||||
### 安全余量解读
|
|
||||||
|
|
||||||
| 指标 | 期望值 | 说明 |
|
|
||||||
|------|--------|------|
|
|
||||||
| `pureMax - threshold` | **负值** | 纯手机数据不误触发 |
|
|
||||||
| `foreignMin - threshold` | **正值** | 异物数据可靠检出 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 错误处理
|
|
||||||
|
|
||||||
| 场景 | 输出 |
|
|
||||||
|------|------|
|
|
||||||
| 缺少 `--type` | `Required option '--type' was not specified.` |
|
|
||||||
| 未知类型 | `Unknown type: foo. Use 'ploss' or 'qfod'.` |
|
|
||||||
| Ploss 缺少文件 | `Please specify --file for Ploss analysis` |
|
|
||||||
| Qfod 缺少参数 | `Please specify --pure and --foreign for Qfod calibration` |
|
|
||||||
| 文件不存在 | `[filename] FAILED: File not found` |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 典型使用场景
|
|
||||||
|
|
||||||
### 场景 1:产线数据质量检验
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 检查 Ploss 余量是否达标(margin > 2000 比例)
|
|
||||||
WCTDataMiner analyze --type ploss --file "产线数据.DAT"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 场景 2:FOD 事件溯源
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 定位 FOD 行,查看 delta_p' 反解结果
|
|
||||||
WCTDataMiner analyze --type ploss --file "异常日志.log"
|
|
||||||
```
|
|
||||||
|
|
||||||
### 场景 3:Qfod 阈值标定
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# 使用纯净数据 + 异物数据计算最佳阈值
|
|
||||||
WCTDataMiner analyze --type qfod \
|
|
||||||
--pure "pure.log" \
|
|
||||||
--foreign "foreign.log"
|
|
||||||
```
|
|
||||||
|
|
||||||
@@ -38,10 +38,9 @@ if (-not (Test-Path $ProjectCs)) {
|
|||||||
# ── 解析版本号 ─────────────────────────────────────────────────────────────────
|
# ── 解析版本号 ─────────────────────────────────────────────────────────────────
|
||||||
if (-not $Version) {
|
if (-not $Version) {
|
||||||
# 尝试从 csproj 的 <Version> 节点读取
|
# 尝试从 csproj 的 <Version> 节点读取
|
||||||
|
# SDK 风格的 csproj 没有 XML 命名空间,直接用 XPath 查询
|
||||||
[xml]$csprojXml = Get-Content $ProjectCs -Raw
|
[xml]$csprojXml = Get-Content $ProjectCs -Raw
|
||||||
$xmlNs = New-Object System.Xml.XmlNamespaceManager($csprojXml.NameTable)
|
$versionNode = $csprojXml.SelectSingleNode("//Version")
|
||||||
$xmlNs.AddNamespace("ms", "http://schemas.microsoft.com/developer/msbuild/2003")
|
|
||||||
$versionNode = $csprojXml.SelectSingleNode("//ms:Version", $xmlNs)
|
|
||||||
if ($versionNode) {
|
if ($versionNode) {
|
||||||
$Version = $versionNode.InnerText
|
$Version = $versionNode.InnerText
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -8,6 +8,9 @@
|
|||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>12.0</LangVersion>
|
<LangVersion>12.0</LangVersion>
|
||||||
|
|
||||||
|
<!-- 版本信息 -->
|
||||||
|
<Version>1.1.0</Version>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
Reference in New Issue
Block a user