如何校验txt文件中0x100电气单元报文发送时间间隔是否合规
报文时间校验功能实现方案
核心实现逻辑
- 先从所有报文中筛选出EU ID为
0x100的条目,同步存储每条的报文ID、时间戳(转成整数类型) - 遍历筛选后的
0x100报文列表,依次计算相邻两条报文的时间差 - 若时间差不等于50毫秒,将后一条报文的ID存入异常ID列表
完整实现代码
def detect_timing_anomalies(): # 存储筛选后的0x100报文,格式为(报文ID, 时间戳ms) eu_100_msgs = [] # 存储异常报文ID anomaly_ids = [] with open('100.txt', 'r', encoding='utf-8') as file: # 逐行处理报文,跳过空行 for line in file: line = line.strip() if not line: continue # 分割字段,自动过滤多个空格的情况 fields = line.split() # 判断是否为0x100的报文 if fields[2] == "0x100": msg_id = int(fields[0]) timestamp = int(fields[1]) eu_100_msgs.append((msg_id, timestamp)) # 校验相邻报文的时间差 for i in range(1, len(eu_100_msgs)): prev_time = eu_100_msgs[i-1][1] curr_time = eu_100_msgs[i][1] time_diff = curr_time - prev_time if time_diff != 50: anomaly_ids.append(eu_100_msgs[i][0]) # 输出结果 print("异常报文ID列表:", anomaly_ids) return anomaly_ids
代码说明
- 用
split()代替split(" "),自动处理字段之间的多个空格、制表符等分隔情况,避免出现空字段的问题 - 提前将时间戳转成整数类型,避免字符串对比的逻辑错误
- 单独存储0x100的报文列表后再计算间隔,不需要遍历所有原始报文做对比,逻辑更清晰
- 如果需要允许小范围的时间误差(比如±1ms),可以把判断条件改成
if abs(time_diff - 50) > 1即可
内容的提问来源于stack exchange,提问作者IrrationalName
相关产品推荐
相关产品推荐

