首页 > 其他分享 >LIN协议的诊断测试(附CAPL自动化代码)

LIN协议的诊断测试(附CAPL自动化代码)

时间:2024-06-17 22:30:35浏览次数:11  
标签:脚本 LIN 节点 CAPL 自动化 msg 报文

文章目录


前言

本文暂不谈及3类从节点诊断等LIN诊断协议的具体深入内容,主要了解一下LIN的主从节点诊断如何在CANoe进行测试,以及涉及数据链路层的LIN相关诊断测试实战如何进行CAPL自动化用例编写。


一、概述

1.主节点

主节点通常是高性能ECU,主节点可以用CAN线进行诊断测试。通过节点的CAN diag_req\diag_resp报文进行DTC信息读取。

2.从节点

从节点通常是不参与复杂数据通信的执行器ECU,通常从节点能够传输简单的诊断信息,比如错误信息标志位。LIN从节点诊断使用诊断帧来传输诊断或配置信息,包含8个字节数据。标识符:
a.主机请求帧(主节点发送帧头+主节点发送应答) 0x3C
b.从机应答帧(主节点发送帧头+从节点发送应答) 0x3D

二、从节点诊断测试

1.CANoe ISC方式

需要开启主模式,通过Frames定义3C、3D周期报文,间隔100-150ms。具体报文设置如下图,缺点是每测一个DUT都要新建一次ISC诊断报文。
在这里插入图片描述
因此,该方法适用于节点级手动测试或者回归测试复现相关问题。

2.CAPL自动化脚本方式

LIN网络上新增node,加入CAPL脚本,如下。脚本中发送3C后给一个100ms定时器,时间太短不行(从节点没初始化完成)。

/*@!Encoding:936*/
/*-------------CAPL脚本实现LIN诊断3C、3D报文发送---------------------*/
includes
{
  
}

variables
{
  linFrame *msg;
  linFrame *msg1;
  msTimer header_msg_send;
}

on timer header_msg_send
{
  output(msg1);  
}

void LIN_Diag_Simulation()
{
  msg.id = 0x3C;
  msg.msgChannel = 20;
  msg.dlc=8;
  msg.rtr = 1;
  msg.byte(0) = 0x03;
  msg.byte(1) = 0x02;
  msg.byte(2) = 0x10;
  msg.byte(3) = 0x01;
  msg.byte(4) = 0x00;
  msg.byte(5) = 0x00;
  msg.byte(6) = 0x00;
  msg.byte(7) = 0x00;
  output(msg);
  write("TEST SUCCESS");
  
  msg1.id = 0x3D;
  msg1.msgChannel = 20;
  msg1.dlc=8;
  msg1.rtr = 1;
  settimer(header_msg_send,100);
}

on key 'a'
{
  LIN_Diag_Simulation();
  write("go to");
}

注意:如下图,脚本方式发送诊断命令,从节点不能失效处理,否则没有3D应答帧。原因:从节点失效,LDF文件中定义的3D报文失效,LIN通讯始终是遵循LDF文件调度。(踩坑:不能认为有从节点样件就失效掉该节点)。

在这里插入图片描述

三、主节点诊断测试

主节点的诊断测试数据链路层主要涉及到帧超时时间(高低压)、节点丢失、应答错误故障码等用例,下面将具体节点级测试中脚本优化和需要注意的地方进行说明。

1.帧超时时间(高低压)&节点丢失

脚本核心在于处理仿真从节点的丢失与正常发送。实现方式:在vTESTStudio中使用系统变量,关联至Simulation Setup从节点Node中的CAPL脚本(如下)进行节点的激活与失效,仿真实现节点丢失。

/*--------触发节点丢失及恢复  add qhz 2022.10.15------------------------*/
on sysvar sysvar::LIN_Simulation::linActivate
{
  if (@sysvar::LIN_Simulation::linActivate==1)
  {
     linactivateResps("node name1"); //恢复指定节点
     linactivateResps("node name2");
     write("仿真节点发送报文,%d",linactivateResps("node name2"); //打印结果
  }   
  else
  {
    linDeactivateResps("node name1"); //丢失指定节点
    linDeactivateResps("node name2");
    write("停止节点发送报文,%d",linDeactivateResps("node name2"); //打印结果
  }
}

Trace现象:从节点报文先正常发出,linDeactivateResps方法生效后出现错误帧。
在这里插入图片描述

2.应答错误故障码

处理从节点报文应答错误脚本。实现方式:在vTESTStudio中使用系统变量,关联至从节点node中的CAPL脚本(如下)进行仿真实现节点的应答错误响应控制。推荐使用下面的优化方式2代码。

/*原脚本
  存在问题:在VTEST中调用linSetRespError不生效,不确定哪个从节点生效?
  可以使用SetBusContext(GetBusNameContext("网段name"))函数进行环境通道配置
*/
int count = 1;
for(j=0;j<count;j++)    // 1次response_error为1,之后为0
{ 
  linSetRespError(1);    // 设置\重置调用从节点的响应错误标志   0:reset  1:set
  testWaitForTimeout(200);
}
linSetRespError(0); 

/*优化方式1
  实现:使用系统变量进行CAPL脚本关联,CAPL脚本加在从节点node中进行调用
  缺点:每测一个network都需要加一次CAPL脚本,麻烦
*/
//case脚本通过关联的系统变量去执行Node中的脚本
for(j=0;j<count;j++)    // 1次response_error为1,之后为0
{ 
  @sysvar::LIN_Simulation::linSetResp = 1;
  testStep("","记录设置响应错误标志时刻,便于trace定位");
  testWaitForTimeout(200);
  @sysvar::LIN_Simulation::linSetResp = 0;
}
@sysvar::LIN_Simulation::linSetResp = 0;

//Node中的脚本如下:
on sysvar sysvar::LIN_Simulation::linSetResp
{
  if (@sysvar::LIN_Simulation::linSetResp==1)
  {
     linSetRespError(1);
  }   
  else
  {
    linSetRespError(0);
  }
}

/*优化方式2
  实现:使用setSignal函数直接改变应答错误信号值,把应答信号name存在配置文件中
*/
for(j=0;j<count;j++)    // 1次response_error为1,之后为0
{ 
  setSignal(SignalName,1);
  testStep("","记录设置响应错误标志时刻,便于trace定位");
  testWaitForTimeout(200);
}
setSignal(RepSignalName,0);

Trace现象:从节点应答报文正常发出后,linSetRespError(1)生效会使得报文中的ErrResp信号置为1,如下图。

在这里插入图片描述


使用CAPL自动化脚本执行过程中,在调用linGotoSleep等CAPL自带函数的时候,可能会存在函数不生效的情况。例如:添加LDF文件后,脚本调用linwakeup()方法trace窗口没有唤醒报文发出。这是需要检查ISC配置,第二个图标不能勾选。
在这里插入图片描述
图标2的含义是:激活或停用CAPL命令过滤,用于控制分配网络的LIN主控功能。如果点击激活,则会忽略linGotoSleep等CAPL函数。

总结

LIN协议相对于CAN协议而言内容较为简单,但实际协议一致性测试过程中,仍然也有很多地方需要去考虑。特别是本文介绍的从节点诊断如何进行测试、主节点的诊断自动化脚本如何合理化、状态管理如何测试以及之前文章提到的休眠唤醒测试细节点等等,都值得设计、推敲来满足测试要求。

标签:脚本,LIN,节点,CAPL,自动化,msg,报文
From: https://blog.csdn.net/weixin_43441058/article/details/139591295

相关文章

  • 嵌入式 Linux 基础:环境配置(Debian 12 安装配置)
    目录一、安装虚拟机1、安装VMwareWorkstationPro注册博通官网注册账号下载VMwareWorkstationPro2、虚拟机安装Debian12下载Debian12镜像虚拟机设置配置(安装)debian12配置debian12环境3、配置Debian12软件设置Flatpak和Flathub安装微信二、其他开发环境配置一、安......
  • Linux安装JDK环境
     1.下载安装官网地址:https://www.oracle.com/java/technologies/downloads/?er=221886#java11本地包下载后传入路径/usr/local/下。 不使用xftp也可以直接拖入。如果无法拖入需要安装上传下载文件包:#安装上传下载文件包yuminstalllrzsz-y解压......
  • 【Linux 12】进程控制
    文章目录......
  • 史上最全最详细的适合新手的从零搭建一个Linux的HTTP服务器
    一.概念梳理    http(hyper-text-transmission-protocol)超文本传输协议,顾名思义就是传输超文本(html)的协议,具体地来说,我们不需要知道html怎么写,我们只需要梳理服务器的数据接收和响应.具体业务具体分析,你们可以自行丰富内容,这里只做最简单的功能演示.http协......
  • Linux – menuconfig讲解
    menuconfig1.简介        menuconfig是一套图像化配置工具,由ncurses库提供软件支持。ncurses库提供了一系列的函数以便使用者调用它们去生成基于文本的用户界面。        menuconfig本身的软件只负责提供menuconfig工作的这一套逻辑,比如说通过上下左右调整......
  • ARM Linux 设备树详细介绍(2)共二篇
    承接上文,第一篇        3.Device&Tree引发的BSP和驱动变更        有了DeviceTree后,大量的板级信息都不再需要,譬如过去经常在arch/arm/plat-xxx和arch/arm/mach-xxx实施的如下事情:        1.注册platform_device,绑定resource,即内存、......
  • ssh-key-deploy:一个在Windows上创建ssh密钥并且自动部署到Linux服务器上的小工具
    ssh-key-deploy简介使用Python编写的一个在Windows上创建ssh密钥并且自动部署到Linux服务器上的小工具。功能特点创建具有自定义名称和可选密码的SSH密钥。列出本地存储的所有SSH密钥。将SSH密钥安全地上传到远程服务器。使用直观的命令行界面进行操作,支持菜单导航。友好......
  • APP自动化测试工具-Appium
    官网:https://appium.io/docs/zh/latest/快速入门1.安装Appium前提条件:已安装Node.js,可以使用npm命令安装命令:npmi-gappium验证结果:执行appium,可以看到[Appium]WelcometoAppiumv2.10.3更新命令:npmupdate-gappium2.安装Appium驱动及其依赖项AndroidS......
  • 掌握 Nmap 自动化脚本引擎(NSE)的高级使用技巧和方法, 并开发高效和可靠的 NSE 脚本;深入
    Nmap自动化脚本引擎(NSE)初级使用教程的大纲:1.Nmap简介和安装介绍Nmap的作用和基本原理如何安装Nmap工具2.NSE简介介绍Nmap自动化脚本引擎(NSE)的作用和功能NSE脚本的分类和用途3.使用NSE进行简单的主机发现使用NSE进行简单的主机发现和端口扫描......
  • 助力樱桃智能自动化采摘,基于YOLOv5全系列【n/s/m/l/x】参数模型开发构建果园种植采摘
    随着科技的飞速发展,人工智能(AI)技术已经渗透到我们生活的方方面面,从智能家居到自动驾驶,再到医疗健康,其影响力无处不在。然而,当我们把目光转向中国的农业领域时,一个令人惊讶的事实映入眼帘——在这片广袤的土地上,农业生产仍然大量依赖人力,而非智能机械化。与此同时,国外的农业生产......