已按 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 的“完整路径”列。
backend/app/services/data_service.py 与 viewer/backend/services/indicator_service.py:
detect_cycles 找 second_value >= 30 的长脉冲作为 0° 标记;wave_file.cycle_start 取该长脉冲的上升沿,cycle_end 取下一个 0° 脉冲上升沿;wave_sample_one 保存 [cycle_start, cycle_end) 的一个完整周期;linspace(0, 360),直接把周期起点当作 0°;wave_file.keyphase_info。statistic_pressure_angle 也是用同一口径生成(angle=0 的压力与 wave_sample_one 首值完全一致),所以数据库内的角度表与前端功图是同一套相位。
同一时刻 1/3/5 缸的周期边界完全一致:
cycle_start = 1412,cycle_end = 2958,周期长度 1546 点;25600*60/995.4 ≈ 1543 点,1546 点合理;也就是说:不是每个缸取到了不同的圈,周期长度和键相分割本身是对的。
当前“存储 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) 的最佳位置:
如果按 键相8-0-135 做相位平移,令物理 0° 对应存储角 225°(=360-135):
五缸按 键相8-0-270 平移到存储角 90°:
更可能是角度参考/相位问题,而不是采样数据丢失或取错圈:
0,当前算法等于不做平移,所以用户看到“1 缸完全符合、2 缸大方向符合”;135,5、6 缸为 270/265,而代码完全忽略该字段,所以这几缸的功图相对真实 0° 被整体旋转;cycle_start/cycle_end 完全相同、周期长度正确、8 个键相脉冲完整。更像是首周期的 0° 定义(键相偏置)没对齐,而不是取到了另一圈。请把 CSV 中 1/3/5 缸的原始 CSV 拷到本地后,重点核对:
键相8-0-135 中 135 的含义,是否就是该测点相对气缸 0° 的安装偏置;statistic_pressure_angle 的差异。拿到原始文件后,可以直接对比:
cycle_start=1412 是否就是原始软件认定的 0°;wave_sample_one 首值对比,判断是“数据取错”还是“相位差”。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。原始 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° 不在共享长脉冲起点,而是存在固定相位偏置。
是角度相位/键相偏置问题,不是数据问题,也不是首周期取错圈。
键相0:基本同相(2 缸约 -20°,所以“大方向符合”);键相135:约 220°(≈360-135);键相270/265:约 100°(≈360-270)。_stored_first_cycle、indicator_service.py、statistic_pressure_angle 全链路都直接 linspace(0,360),没有使用 keyphase_info。keyphase_info 末位角度 K,把共享键相角换算成该测点自身角:display_angle = (shared_angle - K) mod 360(方向需用 1 缸/3 缸实测标定一次)。linspace,消除周期内小角度畸变。≈1.9/3.3 附近。