如何实现LIN多通道测试

引言

在汽车的世界里,各个控制模块之间的通信就如同人体的神经系统一样,任何一个环节的失误都可能导致整个系统的崩溃。因此,通信的稳定性和可靠性验证就成为了我们必须要面对的重要问题。LIN(Local Interconnect Network)作为一种基于控制器局域网的通信协议,广泛应用于汽车控制系统中。LIN协议一致性测试可以确保所有相关的电子设备都能正常工作,从而防止由于软件错误或硬件故障导致的安全问题。在之前的文章中,我们给大家介绍了LIN总线高效测试方案,今天我们来谈一谈如何实现LIN多通道测试。

痛点

在LIN的实际测试场景中,我们常常会遇到包含多个LIN网段的主节点样件。在进行测试时,常规的操作是把这个LIN件视为多个LIN主节点样件进行测试。

假设现在要测试一个包含5个LIN网段的样件,那么我们在测试的时候就需要将同样的测试规范,同样的测试步骤重复5遍。如果每次对一个LIN主节点的测试需要2个小时,那么对这个包含5个LIN网段样件的完整测试就需要测试人员在工作时间内每隔2小时进行一次操作,一天的时间浪费掉了。

假设我们实现了多通道测试,那测试人员仅需在下班的时候点击测试开始按钮,第二天上班就可以看到测试结果啦。

难点

有需求就有了动力。我们先来整理一下多通道测试需要工程代替测试人员实现什么。

同时测试五个网段对测试机柜和工控机要求很高,我们可以模仿测试人员把样件分成五个主节点测试。5个主节点就有5条LIN线。因此我们的第一个需求就是实现工程代替测试人员自动切换LIN线。

LIN协议一致性测试可以大致分为物理层测试,通信层测试和网络管理测试3个部分。通信层测试和网络管理层测试对测试人员没有过多要求,这部分我们略过。物理层测试包含了LIN信号电平,占空比等波形的测试和LIN线容错的测试。因此我们的第二个需求就是需要实现工程代替测试人员在测试时切换示波器测试通道,第三个需求需要实现工程代替测试人员制造LIN线短路断路等故障。

硬件的部分解决了,我们再来看看软件需要实现什么。测试规范是不变的,测试网段的内容是可变的,我们按照测试规范准备一份测试工程代码循环网段测试即可。第四个需求就是实现代码自动区分不同网段的测试输入资料。第五个需求便是实现循环网段测试。

解决方案

让我们来逐一实现需求。首先简单介绍一下怿星自研板卡EH6466。

EH6466 是一款 CAN/LIN 测试板卡,分别支持 6 路独立的 CAN 和 LIN 通道测试,能够接入示波器,万用表,VH6501等设备,能够设置各种 CAN/LIN 总线故障,支持 CAN 管理控制。

图片

1、实现工程代替测试人员自动切换LIN线。

这个部分可以通过EH6466实现。我们把样件的5条LIN线分别通过机柜预留接口接到EH6466的5个通道上,通过CAN 管理控制实现不同网段的LIN线接入测试环境。

2、实现工程代替测试人员切换示波器测试通道。

CANoe软件支持scope直接分析LIN报文。但需要提前设置好测量的LIN通道:

图片

如果样件网段过多scope测量通道也会不够用。而我们在测试的时候既不能手动切换测量通道也不能通过内部函数实现切换。这么看来scope切换测量通道似乎不好实现。既然软件不支持那我们借助硬件解决。EH6466支持6条LIN通道测试,现在我们在Simulation Setup中预留出LIN6作为scope测量专用通道,同时将示波器的测量通道指定为LIN6。每次调用scope测试的时候都通过EH6466控制将测试LIN网段共享到LIN6上,这样的话就可以在LIN6上获取到测试LIN的报文啦。

3、实现工程代替测试人员制造各种LIN线故障。

EH6466板卡可以完美解决这个问题。EH6466内置了故障注入模块。在测试的时候只需通过CAN 管理控制就能制造出LIN线短路断路等故障。

4、实现代码自动区分不同网段的测试输入资料。

不同的测试网段就需要不同的测试输入资料。常规操作是准备一份测试资料输入配置表Project_LIN,测试不同网段的时候由测试人员更改配置。现在我们来做个小改动。

首先按照网段名将测试资料输入配置表分为5份:

图片

然后在测试工程中按照网段名新建5个系统变量:

图片

最后在测试代码中,我们只需要提前指定测试通道(将对应通道的系统变量置1)就可以实现通过系统变量指定读取相应网段的测试资料输入配置表。

图片

5、实现循环网段测试。

这是多通道测试的核心部分。先正常实现一个网段的测试。

按照单网段测试的方式新建一个Test Moudles,加入提前准备好的.can和.VXT文件(.can文件为测试脚本,.vxt文件可以指定用例的测试执行顺序):

图片

图片

在实现第四个需求的时候我们将测试输入资料分成了5份,通过系统变量实现了读取不同网段的测试资料输入配置表,那么同样可以使用这个方法来区分不同网段。将Test Moudles复制5次:

图片

CANoe可以通过调用系统变量的方式实现模块之间衔接,我们可以借助这种方法实现循环测试。在配置Testnode Configuration的时候将System variable与不同网段的系统变量关联,并将其初始值设为0即可。

最后一步,在测试代码中确定测试顺序。我们可以通过将不同网段的系统变量置位实现。网段测试顺序由系统变量置位顺序决定,在测试开始之前将网段对应的系统变量置1,测试结束之后将网段对应的系统变量置0,下一个网段对应的系统变量置1:

图片

图片

这样做不仅可以实现各网段之间的衔接测试,还可以通过更改系统变量置位的方式实现固定网段的测试。到这里我们就实现了工程自动执行多通道测试啦。

方案核心

硬件

怿星自研EH6466板卡。本方案中5个需求有3个是靠EH6466板卡实现的。

1.通过EH6466板卡的6路独立CAN/LIN通道实现不同网段的切换测试。

2.通过EH6466板卡的内部6路通道集连实现scope抓取不同网段报文。

3.通过EH6466板卡的故障注入模块实现LIN短路断路等故障测试。

软件

CANoe的使用。本方案中5个需求有2个是靠CANoe系统变量调用实现的。

1.通过系统变量实现读取不同的资料输入配置表。

2.通过系统变量实现调用不同的Test Moudles模块。

成果展示

最后来看一下成果:

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/145247.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智慧燃气巡检管理系统

我们知道燃气设施的巡检、巡查是运维工作中一项重要的基础工作,而巡检人员主要靠手动记录,回到公司后还得再进行录入归档、导入照片,然后打印装订等,涉及工作量也是不小的;还有人员更替,易造成人员对燃气设…

这5种炫酷的动态图,都是用Python实现的!

数据可以帮助我们描述这个世界、阐释自己的想法和展示自己的成果,但如果只有单调乏味的文本和数字,我们却往往能难抓住观众的眼球。而很多时候,一张漂亮的可视化图表就足以胜过千言万语。本文将介绍 5 种基于 Plotly 的可视化方法&#xff0c…

C++二分算法的应用:寻找峰值原理、源码及测试用例

说明 此文是课程https://edu.csdn.net/course/detail/38771 的讲义。 源码下载:https://download.csdn.net/download/he_zhidan/88458478 题目 长度为n的数组nums,请返回任意一峰值的索引。符合以下条件之一i便是峰值的索引。 n等于1 i等于0 n>…

Windows Server 2019 搭建FTP站点

目录 1.添加IIS及FTP服务角色 2.创建FTP账户(用户名和密码)和组 3.设置共享文件夹的权限 4.添加及设置FTP站点 5.配置FTP防火墙支持 6.配置安全组策略 7.客户端测试 踩过的坑说明: 1.添加IIS及FTP服务角色 a.选择【开始】→【服务器…

搭建react项目

一、环境准备 1、安装node 官网下载安装:https://nodejs.org/en 注: npm5.2以后,安装node会自动安装npm和npx 2、安装webpack npm install -g webpack3、安装create-react-app npm install -g create-react-app二、创建react项目 1、初…

SpringBoot使用@Value获取不到yaml中配置的值

在最近的开发中遇到一个问题,使用Value获取yml文件中配置的属性时始终获取不到值,一开始我以为是没有注入的问题,或者没有写setter方法的问题,后来我发现这些都都写了然后开始百度发现获取不到属性值有这么几个原因 获取不到值的原因 1.没有使用Component注解,也就是没有注入…

Java进阶篇--Condition与等待通知机制

Condition简介 Condition是Java并发包中的一种机制,用于线程之间的协作和通信。它与锁(Lock)紧密配合使用,并提供了更高级别的等待/通知功能。 下面是Condition的一些特性和区别: 1. 精确唤醒:Condition…

php 数组基础/练习

数组 练习在最后 数组概述 概述与定义 数组中存储键值对 数组实际上是一个有序映射 key-value,可将其当成真正的数组、列表(向量)、散列表、字典、集合、栈、队列等 数组中的元素可以是任意类型的数据对象(可以嵌套数组&#…

2023年中国汽车差速器需求量、竞争现状及行业市场规模分析[图]

差速器是汽车驱动系统的主要部件,它的作用就是在向两边半轴传递动力的同时,允许两边半轴以不同的转速旋转,满足两边车轮尽可能以纯滚动的形式作不等距行驶,减少轮胎与地面的摩擦。汽车差速器是驱动车轮差速转弯或复杂路面强力通过…

解决 Element-ui中 表格(Table)使用 v-if 条件控制列显隐时数据展示错乱的问题

本文 Element-ui 版本 2.x 问题 在 el-table-column 上需根据不同 v-if 条件来控制列显隐时&#xff0c;就会出现列数据展示错乱的情况&#xff08;要么 A 列的数据显示在 B 列上&#xff0c;或者后端返回有数据的但是显示的为空&#xff09;&#xff0c;如下所示。 <tem…

laravel框架介绍(二) composer命令下载laravel报错

1.composer命令下载laravel报如下错 &#xff1a; curl error 18 while downloading https://repo.packagist.org/p2/symfony/uid.j son: transfer closed with 3808 bytes remaining to read&#xff0c;具体为 解决方案&#xff1a;执行以下命令切换镜像 >composer con…

Leetcode—2678.老人的数目【简单】

2023每日刷题&#xff08;七&#xff09; Leetcode—2678.老人的数目 实现代码 int countSeniors(char ** details, int detailsSize){int ans 0;int i;int tens 0;int ones 0;for(i 0; i < detailsSize; i) {tens *(*(details i) 11) - 0;ones *(*(details i) …