9号机_3缸_角度问题初步分析.md 7.3 KB

9 号机 3 缸 2026-04-15 23:15 功图角度问题初步分析

1. 原始文件清单

已按 wave_file.file_name + compressor_data_import.directory_path 生成:

  • 9号机_20260415_2315_原始文件清单.csv(含 1/2/3/4/5/6 缸盖侧、轴侧共 12 个文件)

用户要求重点关注的 1、3、5 缸:

缸 测点 wave_file_id 键相
一缸 压力盖侧 222589 键相8-0-0
一缸 压力轴侧 224154 键相8-0-0
三缸 压力盖侧 239529 键相8-0-135
三缸 压力轴侧 242439 键相8-0-135
五缸 压力盖侧 257776 键相8-0-270
五缸 压力轴侧 260757 键相8-0-270

完整路径见 CSV 的“完整路径”列。

2. 当前算法口径

backend/app/services/data_service.py 与 viewer/backend/services/indicator_service.py:

  1. 用 detect_cycles 找 second_value >= 30 的长脉冲作为 0° 标记;
  2. wave_file.cycle_start 取该长脉冲的上升沿,cycle_end 取下一个 0° 脉冲上升沿;
  3. wave_sample_one 保存 [cycle_start, cycle_end) 的一个完整周期;
  4. 对周期内样本做 linspace(0, 360),直接把周期起点当作 0°;
  5. 整个过程没有读取 wave_file.keyphase_info。

statistic_pressure_angle 也是用同一口径生成(angle=0 的压力与 wave_sample_one 首值完全一致),所以数据库内的角度表与前端功图是同一套相位。

3. 本次核对结果

同一时刻 1/3/5 缸的周期边界完全一致:

  • cycle_start = 1412,cycle_end = 2958,周期长度 1546 点;
  • 995.4 rpm、25600 Hz 下一转理论长度 25600*60/995.4 ≈ 1543 点,1546 点合理;
  • 周期内正好 8 个键相脉冲,第一个为长脉冲(0° 标记)。

也就是说:不是每个缸取到了不同的圈,周期长度和键相分割本身是对的。

当前“存储 0°”处(即周期起点)的压力:

缸 键相 盖侧 0° 轴侧 0°
一缸 0 4.876 3.421
二缸 0 1.906 0.683
三缸 135 2.075 2.374
四缸 135 0.810 1.245
五缸 270 1.686 3.882
六缸 265 0.642 1.917

用户给出的 3 缸实际 0° 约为盖侧 1.9、轴侧 3.3。当前 3 缸存储 0° 是 2.075 / 2.374,轴侧明显偏低,方向对不上。

在三缸存储周期内搜索 (盖≈1.9, 轴≈3.3) 的最佳位置:

  • 约在存储角 337° 处:盖 1.851、轴 3.299,与用户给出的数值最接近。

如果按 键相8-0-135 做相位平移,令物理 0° 对应存储角 225°(=360-135):

  • 盖 1.696、轴 3.741,方向正确(盖下降、轴上升),但数值仍有偏差。

五缸按 键相8-0-270 平移到存储角 90°:

  • 盖 1.865、轴 3.492,同样落在“盖约 1.9、轴约 3.5”附近。

4. 初步判断

更可能是角度参考/相位问题,而不是采样数据丢失或取错圈:

  1. 1、2 缸键相为 0,当前算法等于不做平移,所以用户看到“1 缸完全符合、2 缸大方向符合”;
  2. 3、4 缸键相为 135,5、6 缸为 270/265,而代码完全忽略该字段,所以这几缸的功图相对真实 0° 被整体旋转;
  3. “2/4/6 同级缸”不能解释现象:2 缸对是因为键相 0,4 缸不对是因为键相 135,与缸径级别无关;
  4. “首周期取错”目前证据不足:三个缸的 cycle_start/cycle_end 完全相同、周期长度正确、8 个键相脉冲完整。更像是首周期的 0° 定义(键相偏置)没对齐,而不是取到了另一圈。

5. 需要原始文件确认的点

请把 CSV 中 1/3/5 缸的原始 CSV 拷到本地后,重点核对:

  1. 原始文件表头/列名:是否已有“角度”“曲轴转角”“键相”列;
  2. 原始文件前几行(sample_index 0 附近)盖侧/轴侧压力是否就是用户所说的 1.9 / 3.3;
  3. 原始文件里 0° 到底对应长键相脉冲的上升沿、下降沿还是中心;
  4. 键相8-0-135 中 135 的含义,是否就是该测点相对气缸 0° 的安装偏置;
  5. 原始软件的 P-θ 图在 0° 处取值与 statistic_pressure_angle 的差异。

拿到原始文件后,可以直接对比:

  • 原始 CSV 的时间列/采样序号 → 确认 cycle_start=1412 是否就是原始软件认定的 0°;
  • 原始 CSV 的 0° 行压力 → 与 wave_sample_one 首值对比,判断是“数据取错”还是“相位差”。

6. 附带发现

  • 6 缸盖侧 的 wave_file_id=1162517 来自 test_20260324111644_20260622111644 批次,而其余文件来自 exp_all_device_2026.3.16-2026.4.18...。同一时刻可能存在重复导入,后续分析时建议先确认是否应排除测试批次。
  • 键相偏置是按测点配置的,不是按缸固定:例如 backend/预训练之文件头.csv 中 7 号机三缸盖侧为 键相8-0-270、轴侧为 键相8-0-0。修复时必须逐测点读取 keyphase_info。

7. 原始文件验证(决定性)

原始 CSV 放在 cache/9号机组一三五缸压力_20260415231501/。文件无表头,两列:压力, 键相。

逐点比对 wave_sample_one 与原始文件 raw[1412:2958]:

文件 wave_file_id 样本区间 max|raw-db|
一缸盖 222589 1412:2958 0.000000
一缸轴 224154 1412:2958 0.000000
三缸盖 239529 1412:2958 0.000000
三缸轴 242439 1412:2958 0.000000
五缸盖 257776 1412:2958 0.000000
五缸轴 260757 1412:2958 0.000000

结论:数据库里的首周期与原始文件逐点完全一致,取数没有错。

6 个文件的键相长脉冲起点全部是 1412,脉冲序列也完全相同(79, 276, 468, ...),说明它们用的是同一个键相信号、同一个物理圈,cycle_start/cycle_end 正确。

原始文件中,3 缸 (盖≈1.9, 轴≈3.3) 出现在共享键相坐标的 ≈337°(raw 第 2859 点,1.856 / 3.292);按键相 135° 旋转则出现在 225°(1.696 / 3.741)。两者都说明:真实 0° 不在共享长脉冲起点,而是存在固定相位偏置。

8. 最终结论

是角度相位/键相偏置问题,不是数据问题,也不是首周期取错圈。

  • 数据:原始文件与库内逐点一致(误差 0)。
  • 圈:6 个文件同一键相脉冲、同一圈、周期长度 1546 点正确。
  • 形态:1/3/5 缸归一化后是同一形状,互相关 0.95~0.99,正向优于反向(不是采样方向问题)。
  • 相位:相对旋转量长期稳定,且按键相分组:
    • 1/2 缸 键相0:基本同相(2 缸约 -20°,所以“大方向符合”);
    • 3/4 缸 键相135:约 220°(≈360-135);
    • 5/6 缸 键相270/265:约 100°(≈360-270)。
  • 代码在 _stored_first_cycle、indicator_service.py、statistic_pressure_angle 全链路都直接 linspace(0,360),没有使用 keyphase_info。

9. 修复建议

  1. 逐测点解析 keyphase_info 末位角度 K,把共享键相角换算成该测点自身角:display_angle = (shared_angle - K) mod 360(方向需用 1 缸/3 缸实测标定一次)。
  2. 用 8 个键相脉冲做分段角度,替代均匀 linspace,消除周期内小角度畸变。
  3. 用 1 缸做基线回归:修正后 1 缸应与现在一致;3/4/5/6 缸 0° 应落到用户给出的 ≈1.9/3.3 附近。
  4. 修复只影响显示/角度分箱,不改原始采样与阶段规则。