You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何校验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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 01:21:03