#!/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)