前言

蛇年伊始,火出圈的除了《哪吒2》登顶中国影史票房第一外,科技圈的DeepSeek国产大模型引爆全球,关于在DeepSeek上的提问无奇不有。就车载通信自动化测试,本文也来蹭蹭热度。作为CAN/LIN协议一致性自动化测试脚本的开发调试人员之一,比较好奇DeepSeek能不能帮助我们进行协议一致性测试脚本的开发及脚本可用性。


提问及回答

在基于Vector工具链的前提下进行协议一致性测试,需要编写CAPL脚本配合接口卡等硬件设备来实现自动化测试。提问时思考一个带有硬件操作属性的case看看DeepSeek是如何创作脚本的。于是,在DeepSeek上提问:我是一名车载通信测试工程师,希望使用CAPL脚本编程实现CAN通信协议的工作电压范围的自动化测试,请帮我写出代码。
在这里插入图片描述
DeepSeek在给出工作电压范围的测试原理、CAPL脚本结构、测试步骤实现、自动化错误处理和硬件控制等分析后,给出了代码的大致流程,看起来与实际测试的流程效果相仿。以下是DeepSeek给出的代码和分析总结:

/*--------------------------------------------------------*/
/* 工作电压范围自动化测试CAPL脚本                          */
/* 作者:AI助手                                           */
/* 修改建议:根据实际硬件接口调整电压控制部分               */
/*--------------------------------------------------------*/

variables
{
  // 测试参数配置
  double normalVoltage = 12.0;     // 标称电压
  double minVoltage = 6.0;         // 最低测试电压
  double maxVoltage = 18.0;        // 最高测试电压
  double stepVoltage = 0.5;        // 电压变化步长
  double tolerance = 0.1;          // 电压容差
  double stabilizationTime = 1000; // 电压稳定时间(ms)
  
  // 测试状态变量
  double currentVoltage;
  int testCaseID = 0;
  int errorCount = 0;
  message CAN1::TestFrame testMsg = {id=0x7A1, dlc=8, byte(0)=0xAA};
}

/*--------------------------------------------------------*/
/* 电源控制接口函数(需根据实际硬件实现)                    */
/*--------------------------------------------------------*/
void SetPowerSupplyVoltage(double voltage)
{
  // 调用实际电源控制接口,例如:
  // dllFunc_SetVoltage(voltage);
  // 此处需要替换为真实硬件控制代码
  
  write("设置电压:%.1fV", voltage);
  currentVoltage = voltage;
}

/*--------------------------------------------------------*/
/* 测试初始化                                              */
/*--------------------------------------------------------*/
on start
{
  // 初始化测试环境
  CAN1.setErrorFrameReporting(1); // 启用错误帧检测
  resetErrorCount();
  
  // 启动测试序列
  testCaseID = 1;
  setTimer(testCaseID, stabilizationTime);
  SetPowerSupplyVoltage(normalVoltage);
}

/*--------------------------------------------------------*/
/* 电压边界测试逻辑                                        */
/*--------------------------------------------------------*/
testcase VoltageTest(double targetVoltage)
{
  double measuredVoltage;
  int preErrorCount;
  
  // 步骤1:设置目标电压
  testStepBegin("设置电压到 %.1fV", targetVoltage);
  SetPowerSupplyVoltage(targetVoltage);
  delay(stabilizationTime);
  
  // 步骤2:验证实际电压(需要硬件支持电压回读)
  // measuredVoltage = dllFunc_ReadVoltage();
  // testVerifyFloat(measuredVoltage, targetVoltage, tolerance);
  
  // 步骤3:发送测试报文并验证通信
  testStepBegin("通信功能验证");
  preErrorCount = testGetErrorCount();
  output(testMsg);
  wait 200; // 等待响应
  
  // 验证条件:正常电压范围时通信应正常,超出范围时允许错误
  if(targetVoltage >= 9.0 && targetVoltage <= 16.0)
  {
    // 应收到ACK且错误计数不增加
    testVerify(testDidMessageAck(testMsg.id));
    testVerify(testGetErrorCount() == preErrorCount);
  }
  else
  {
    // 应检测到通信错误
    testVerify(testGetErrorCount() > preErrorCount);
  }
}

/*--------------------------------------------------------*/
/* 主测试序列                                              */
/*--------------------------------------------------------*/
on timer testCaseID
{
  switch(testCaseID)
  {
    case 1: // 标称电压测试
      VoltageTest(normalVoltage);
      testCaseID++;
      setTimer(testCaseID, 1000);
      break;
      
    case 2: // 最低电压边界测试
      VoltageTest(minVoltage);
      testCaseID++;
      setTimer(testCaseID, 1000);
      break;
      
    case 3: // 最高电压边界测试
      VoltageTest(maxVoltage);
      testCaseID++;
      setTimer(testCaseID, 1000);
      break;
      
    case 4: // 步进扫描测试
      for(double v = minVoltage; v <= maxVoltage; v += stepVoltage)
      {
        VoltageTest(v);
      }
      testCaseID++;
      break;
      
    default:
      testReport("所有测试完成");
      stop();
  }
}

/*--------------------------------------------------------*/
/* 错误帧处理                                              */
/*--------------------------------------------------------*/
on errorFrame CAN1
{
  errorCount++;
  testNote("检测到错误帧,当前计数:%d", errorCount);
}

/*--------------------------------------------------------*/
/* 辅助函数                                                */
/*--------------------------------------------------------*/
int testGetErrorCount()
{
  return errorCount;
}

void resetErrorCount()
{
  errorCount = 0;
}

主要功能说明:
1.测试流程控制:

  • 标称电压测试(通常12V)
  • 最低电压测试(6V)
  • 最高电压测试(18V)
  • 电压步进扫描测试(可选)

2.测试验证项目:

  • 报文ACK确认
  • 错误帧计数
  • 通信响应验证

3.需要根据实际硬件调整的部分:

  • SetPowerSupplyVoltage()函数需要对接实际电源控制设备
  • 电压回读功能需要硬件支持
  • 测试报文ID和内容需要根据实际DBC文件修改

4.测试报告:

  • 使用CAPL内置的testVerify函数生成标准测试报告
  • 通过testNote记录详细测试过程

建议的测试改进方向:

  1. 增加电压缓变测试(斜率测试)
  2. 添加电压瞬态跌落测试
  3. 实现自动测试报告生成功能
  4. 增加总线负载率控制
  5. 添加故障恢复测试(电压恢复正常后的通信恢复验证)

请根据您的实际测试需求调整电压范围、测试步骤和验证条件。实际应用中建议配合CANoe的Test Feature Set使用,可以生成更专业的测试报告。


小结

以上回答内容,DeepSeek考虑的硬件支持实际需要考虑的调整部分、测试结果验证的几个方面等内容,虽然脚本不能直接copy使用,但对于开发脚本来说具有很大的参考意义,并且能够帮助开发者梳理思路,便于开发者在参考测试规范的前提下基于DeepSeek给出的脚本模版进行快速开发及调试。
当然,对于实际测试过程中遇到的相关问题,也可以在DeepSeek上提问看看能不能找到相关未考虑的到错误原因。服务器繁忙哈哈哈哈
在这里插入图片描述

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐