134 lines
4.0 KiB
Python
134 lines
4.0 KiB
Python
#!/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)
|