RDSS/verify_file_order.py

134 lines
4.0 KiB
Python
Raw Normal View History

2026-03-13 14:16:00 +08:00
#!/usr/bin/env python3
"""
验证bin文件和txt文件的信号顺序是否与debug文件一致
"""
import struct
import sys
sys.path.insert(0, 'd:\\DESIGN\\Git\\RDSS')
from core.encoder import BitFieldEncoder
# 文件路径
base_name = "RC_20ev_D1100KUU_D2100KNN_D3100KEE"
bin_file = f"{base_name}.bin"
txt_file = f"{base_name}_v4.txt"
debug_file = f"{base_name}_debug.txt"
encoder = BitFieldEncoder()
print("=" * 80)
print("验证三个文件的信号顺序是否一致(组内逆序排列)")
print("=" * 80)
# 1. 读取bin文件中的信号数据
print("\n1. 读取bin文件...")
with open(bin_file, 'rb') as f:
# 跳过启动指令(48字节)和停止指令(48字节)
f.seek(96)
# 读取数据部分
data = f.read()
# 每8个字节一个信号
bin_signals = []
for i in range(0, len(data) - 2, 8): # 减去2字节CRC
if i + 8 <= len(data):
signal = struct.unpack('>Q', data[i:i+8])[0]
bin_signals.append(signal)
print(f" bin文件信号数: {len(bin_signals)}")
# 2. 读取txt文件中的信号数据
print("\n2. 读取txt文件...")
with open(txt_file, 'r') as f:
lines = f.readlines()
# 前96个字节是指令启动+停止)
# 从第97个字节开始是信号数据
txt_bytes = [int(line.strip()) for line in lines[96:]]
txt_signals = []
for i in range(0, len(txt_bytes), 8):
if i + 8 <= len(txt_bytes):
signal = 0
for j in range(8):
signal = (signal << 8) | txt_bytes[i + j]
txt_signals.append(signal)
print(f" txt文件信号数: {len(txt_signals)}")
# 3. 从debug文件提取信号前几个
print("\n3. 从debug文件提取信号...")
debug_signals = []
with open(debug_file, 'r', encoding='utf-8') as f:
for line in f:
line = line.strip()
if line and not line.startswith('#') and not line.startswith('-'):
parts = line.split('|')
if len(parts) >= 3:
hex_str = parts[2].strip()
if hex_str.startswith('0x'):
signal = int(hex_str, 16)
debug_signals.append(signal)
print(f" debug文件信号数: {len(debug_signals)}")
# 4. 比较三个文件的信号顺序
print("\n4. 比较信号顺序...")
print("-" * 80)
# 比较前16个信号2组
check_count = min(16, len(bin_signals), len(txt_signals), len(debug_signals))
print(f"\n{check_count}个信号对比:")
print(f"{'序号':<6} {'bin文件':<20} {'txt文件':<20} {'debug文件':<20} {'一致'}")
print("-" * 80)
all_match = True
for i in range(check_count):
bin_sig = bin_signals[i]
txt_sig = txt_signals[i]
debug_sig = debug_signals[i]
match = (bin_sig == txt_sig == debug_sig)
status = "" if match else ""
print(f"{i+1:<6} {bin_sig:016X} {txt_sig:016X} {debug_sig:016X} {status}")
if not match:
all_match = False
print("-" * 80)
# 5. 检查组内逆序排列
print("\n5. 检查组内逆序排列...")
print("-" * 80)
# 检查bin文件的组内顺序
print("\nbin文件组内顺序检查前3组")
for group_idx in range(3):
start_idx = group_idx * 8
end_idx = start_idx + 8
group_signals = bin_signals[start_idx:end_idx]
# 解码信号获取时间戳
timestamps = []
for sig in group_signals:
decoded = encoder.decode(sig)
timestamps.append(decoded['timestamp'])
print(f"{group_idx+1}组信号序号 {start_idx+1}-{end_idx}: 时间戳 = {timestamps}")
# 检查组内是否逆序(时间戳应该递减)
is_descending = all(timestamps[i] >= timestamps[i+1] for i in range(len(timestamps)-1))
if is_descending:
print(f" ✓ 组内逆序排列正确")
else:
print(f" ✗ 组内逆序排列不正确")
print("-" * 80)
# 总结
print("\n" + "=" * 80)
if all_match:
print("✅ 验证通过!三个文件的信号顺序完全一致")
else:
print("❌ 验证失败!三个文件的信号顺序不一致")
print("=" * 80)