通用路由脚本使用手册(随手记)

前言

当前,车内通信技术越来越负责,协议类型更加多样,不同总线及协议间的转换和路由等也更为复杂,网关作为通信枢纽的载体,其测试的复杂程度和重要性也越来越高。本文将分享网关路由测试开发过程中的经验和遇到的问题。

网关功能简介

网关主要功能是通过报文路由转发、报文过滤与信号重组等工作实现信息的交换,包括不同通信协议间的交互,如Ethernet、FlexRay、CAN、CAN FD、LIN。传统的网关按照实现方式可分为独立网关和集成网关, 集成网关指集成路由功能的仪表或车身控制器,使用集成网关时,其网络拓扑相对简单;独立网关主要实现路由功能,网络拓扑相对复杂。近几年E/E架构逐渐向域控方向发展,新的域控制器,通常也具备网关路由的功能。

目前,典型的网络拓扑主要有以下三种:

1)传统的EE架构:
Central Gateway与所有ECU直连,独立完成整车所有的信息交互任务。
在这里插入图片描述

图1 传统网络架构及网关

2)基于Domain的EE架构:
整车拓扑中除了Central Gateway还存在Domain Gateway,Domain Gateway参与下属节点间的信息交互,也承载了网关的功能。

在这里插入图片描述

图2 基于域控制器的网络架构及网关

3)混合的EE架构:
在从传统网络架构到基于域控制器的网络架构的过渡阶段存在的网络架构,兼具两种网络架构的特点。

在这里插入图片描述

图3 混合网络架构及网关

以上基于域节点的网络架构的Central Gateway和Domain Gateway直接通过以太网点对点连接,域节点间的信息交互通过L2的Switch和L3的IP Router实现。

除了基本的路由功能,网关通常还具有以下属性和功能:

1)各功能域物理隔离: 网关区分各个功能域,将不同的功能域区分开

2)外部沟通媒介与网络安全防护: 网关是整车与外部信息交互的媒介,因此网关需要过滤外部信息,避免整车内部网络被攻击

3)网络休眠唤醒管理: 网关依据整车休眠唤醒条件,协调各个网段间的休眠唤醒

4)OTA Master功能: 实现整车远程刷写功能,获取ECU升级数据包并存储在本地,当满足刷写条件时,网关可作为刷写机,以既定的刷写流程将刷写数据传输给待升级ECU

5)整车状态管理和能量管理: 管理整车模式和用户使用模式

由于网关功能多样和复杂,且部分功能具有功能安全要求,需要通过测试来保证最终软件的成熟度。针对网关的不同功能需要做相应的测试,本文重点探讨基本的路由功能测试。

网关路由的类型

可以分为3种:信号路由、报文路由、TP路由(诊断路由)。以下针对这三种路由类型分别做介绍。

1)信号路由:
定义:从源网段接收到的一条或多条报文中的部分信号(或信号组)打包在新报文中,然后在目标网段上按照定义的方式发送出来。 信号从源网段到目标网段的路由过程中,信号所在报文的发送方式、信号在报文中的位置、信号所在报文的ID和信号所在报文的周期都可以改变,另外源网段和目标网段的通信协议也可以不一致。

AUTOSAR架构下定义了信号和信号组的Update bit,对于有Update bit的信号和信号组,只有在其Update bit置位的情况下网关才对其进行转发并在目标网段更新Update bit,当源网段信号丢失时网关转发的信号的Update bit持续不置位,指示接受该信号的控制器信号超时。而针对针对非AUTOSAR架构 ,部分OEM定义了Timeout flag,指示源网段信号超时。

在这里插入图片描述

图4 信号路由

2)报文路由:
定义: 从源网段接收到报文后转发到目标网段。根据目标网段的发送形式,报文路由又可以分为事件型报文路由和周期型报文路由。事件型报文路由在源网段收到报文后立即触发目标网段的发送;周期型报文路由在源网段和目标网段都有固定的周期,源网段接收到报文的周期和目标网段发送的报文周期没有必然关系。
在这里插入图片描述

图5 报文路由

3)TP路由:
定义:带有传输协议报文的路由称为TP路由。TP路由又可分为两种:不带协议转换的TP路由(一般称为报文透传)和带有协议转换的TP路由。前者在部分OEM的定义中和事件型报文路由未作区分,但实际两种路由的应用场景是不同的,事件型报文路由针对应用报文,强调转发速率且最新的信号值最具重要性(latest value is the most important);报文透传对速率的要求不高但要求先入先出(first in first out)和不丢帧。带有协议转换的TP路由主要特点是:可以实现协议转换(源网段和目标网段的协议可以不一致),且网关作为传输连接的一部分,在源网段的接收和转发均须符合传输层协议,不符合传输协议的不转发。

在这里插入图片描述

图6 TP路由

下图以CAN-LIN的TP路由为例介绍带协议转换的TP路由,由于CAN和LIN的传输协议不一致,网关在源网段以CAN的传输层协议接收数据后,在LIN的网段按照LIN传输层协议发送数据。CAN和LIN的报文虽然都是8字节,但由于传输层协议不同, CAN和LIN网段的每帧报文传输的数据内容都是不一致的。此外,由于CAN和LIN的传输速率不一样,CAN网段接收数据后存储在缓存中,在LIN网段按顺序发出。

在这里插入图片描述

图7 CAN-LIN2.1 TP路由

由于带协议转换的TP路由需要在源网段接收到数据后先存储到缓存中,因此需要占用较多的内存资源,但同时这也是并行刷写的实现基础,网关在高带宽的网段接收到诊断数据后先行存储,然后按照低带宽网段的传输协议,并行分发到各个低带宽网段,在此过程中最大效率的利用了高带宽网段的带宽,提高整车的刷写效率。

自动化脚本实现

实现原理详述

报文路由测试理论

报文路由

信号同步测试理论

相同总线间的信号路由
不同总线间的信号路由

路由表格文档设计说明

报文路由设计

在这里插入图片描述
报文路由表输入模板
与报文路由相关的报文输入项有:
路由类型:输入MESSAGE
源通道:按实际输入报文路由源端所在的通道编号(对应CANOE的逻辑通道编号)
报文类型:根据报文的实际操作选择CAN或是CANFD
数据长度:即报文在总线实际的发送量,如果是CAN不能超8字节,如果是CANFD请按实际填写,但是根据协议要求,CANFD模式时,长度值取值为0-8,12,16,20,24,32,48,64,请按实际情况输入
报文周期:输入源端报文的实际发送周期(此周期影响CANOD仿真设备模拟报文的发送周期)
报文ID值:源端路由报文的CANID值,请用16进制格式输入(扩展帧请勿在尾部加x符号)
帧格式:用于表示CANID是扩展还是标准帧,输入内容可Extended|Standard|EXTENDED|STANDARD|extended|standard 即词组要么全大写或要么全小写,或是首字符大写即可,表示扩展或是标准帧
字节序列:表示数据内容中的数据存储排序,报文路由因为是整体内容全复制,内容不应该出现重新调整的情况,所以此字段在路由报文无关,可任选内容 Motorola|Motora|Intel|INTEL|MOTOROLA|intel|motorola
目标通道:为报文路由的输出通道编号(对应CANOE的逻辑通道编号),CANOE将监控此通道检测有没相应的报文输出
目标报文ID值:目标端路由报文的CANID值,请用16进制格式输入(扩展帧请勿在尾部加x符号)
目标端报文类型:目标端输出报文的类型,根据报文的实际操作选择CAN或是CANFD,CANOE将监测与识别相应的报文类型是否与此定义一致
目标报文帧格式:用于表示CANID是扩展还是标准帧,输入内容可Extended|Standard|EXTENDED|STANDARD|extended|standard 即词组要么全大写或要么全小写,或是首字符大写即可,表示扩展或是标准帧
目标帧序列:表示数据内容中的数据存储排序,报文路由因为是整体内容全复制,内容不应该出现重新调整的情况,所以此字段在路由报文无关,可任选内容 Motorola|Motora|Intel|INTEL|MOTOROLA|intel|motorola
最大传输延时:表示报文从CANOE发送到DUT的输入端口,至在目标端检测到相应的输出报文之间的时间差的最大值,超出此值将视为路由超时,请按实际情况录入相应值,单位ms(毫秒),输入整数,不支持小数输入。
其他未涉及的列,请按图片指示输入0(除倒数第三列输入FALSE外)

==生成CSV数据表格后,其一定要确保文件不是加密状态,否则加载数据将是乱码,无法正确解析

信号路由设计

信号路由简单解释就是将源端的部分数据信号重新组合生成一条输出报文的过程;

相同总线类型信号路由设计

相同总线信号路由,目前仅涉及到CAN至CAN的信号路由,相关的路由设计如下图
在这里插入图片描述
信号路由设计模板
路由类型:输入SIGNAL 表示信号路由
源通道:按实际输入报文路由源端所在的通道编号(对应CANOE的逻辑通道编号)
报文类型:根据报文的实际操作选择CAN或是CANFD
数据长度:即报文在总线实际的发送量,如果是CAN不能超8字节,如果是CANFD请按实际填写,但是根据协议要求,CANFD模式时,长度值取值为0-8,12,16,20,24,32,48,64,请按实际情况输入
报文周期:输入源端报文的实际发送周期(此周期影响CANOD仿真设备模拟报文的发送周期)
报文ID值:源端路由报文的CANID值,请用16进制格式输入(扩展帧请勿在尾部加x符号)
帧格式:用于表示CANID是扩展还是标准帧,输入内容可Extended|Standard|EXTENDED|STANDARD|extended|standard 即词组要么全大写或要么全小写,或是首字符大写即可,表示扩展或是标准帧
字节序列:表示数据内容中的数据存储排序,报文路由因为是整体内容全复制,内容不应该出现重新调整的情况,所以此字段在路由报文无关,可任选内容 Motorola|Motora|Intel|INTEL|MOTOROLA|intel|motorola 所谓的字节序列是针对大于1字节的数据类型的存储模式,大端时高位字节存储在低位,反之小端存储是低位存储低位字节值
信号起始位:描述源端信号对应报文的起始位值,请按DBC或是矩阵表正确填写
信号长度:描述源端信号对应报文的位长度,请按DBC或是矩阵表正确填写,结合信号起始位,提取源信号值,用于比对目标端转发内容的正确性
目标通道:为报文路由的输出通道编号(对应CANOE的逻辑通道编号),CANOE将监控此通道检测有没相应的报文输出
目标报文ID值:目标端路由报文的CANID值,请用16进制格式输入(扩展帧请勿在尾部加x符号)
目标端报文类型:目标端输出报文的类型,根据报文的实际操作选择CAN或是CANFD,CANOE将监测与识别相应的报文类型是否与此定义一致
目标报文帧格式:用于表示CANID是扩展还是标准帧,输入内容可Extended|Standard|EXTENDED|STANDARD|extended|standard 即词组要么全大写或要么全小写,或是首字符大写即可,表示扩展或是标准帧
目标帧序列:表示数据内容中的数据存储排序,报文路由因为是整体内容全复制,内容不应该出现重新调整的情况,所以此字段在路由报文无关,可任选内容 Motorola|Motora|Intel|INTEL|MOTOROLA|intel|motorola
信号起始位:描述目标端信号对应报文的起始位值,请按DBC或是矩阵表正确填写
信号长度:描述目标端信号对应报文的位长度,请按DBC或是矩阵表正确填写,结合信号起始位,提取目标信号值,用于比对源端内容检测转发内容的准确性
最小更新时长:表示源报文中信号内容同步到目标报文中的所需的最小时长。因为信号路由源端与目标端的报文多为周期报文,其周期存在不同步的情况,此时可能存在目标端报文在源端报文还没有到来之前已经进入发送队列,但没有发出前,源端报文也发送出来的情况,但此时输出的不是最新的内容,所以可根据实际情况输入此更新时差,如果要求源端只要在目标端输出前到来,就要发最新的信号值,此时可设置为0
最大传输延时:表示报文从CANOE发送到DUT的输入端口,至在目标端检测到相应的输出报文之间的时间差的最大值,超出此值将视为路由超时,请按实际情况录入相应值,单位ms(毫秒),输入整数,不支持小数输入。
目标报文周期:按实际情况输入目标端报文周期;用于检测目标端丢帧:默认如果目标两条连续报文间隔大于1.8倍周期值,即认为有丢帧的情况,只记一次丢帧
信号初始值:用于定义上电初始化完成后,超时前或是同步到源报文前,输出的默认初始值;输入按16进制格式输入,最大输入64位即8字节的数据值
超时机制使用标志:表示是否启用信号路由超时机制,如果启用超时功能,将在信号路由过程启动超时检测功能,在转发超时,自动比对内容是否使用后续定义的超时值
超时时长:定义目标端报文输出的超时时长,即任意两条连续报文的间隔大于此值时,将认为超时
超时值:当启用超时功能时,且发生超时时,将使用此值验证信号值是否为超时值,此超时值使用16进制输入,最大8字节即64位

每个信号路由关系均分解生成一行的路由关系

  • 多条源报文中的信号值,合并生成一条目标报文输出
  • 一条源报文的信号,分解生成多条目标报文输出
    下图为多条源报文信号,合并一条目标报文输出的情况,其他情况按此设计
    在这里插入图片描述
不同总线类型信号路由设计

LIN与CAN两种总线路由的情况:理解为信号路由,只是信号同步的时候,是整个数据域内容的同步转移:
在这里插入图片描述
LIN与CAN路由图示
因为可理解为信号路由可参考信号路由格式进行配置,除下述几列内容做出相应的调整外
路由类型:输入MESSAGE
报文类型:根据报文的实际操作选择CAN或是CANFD或是LIN,如果源端是LIN,请选择LIN
目标报文类型:如果对应的总线类型为LIN,此列可用Motorola|Motora|Intel|INTEL|MOTOROLA|intel|motorola 任一值填充 ,如果是CAN或是CANFD,请根据实际情况填写
目标帧序列:表示数据内容中的数据存储排序,不同总线信号路由因为是整体内容全复制,内容不应该出现重新调整的情况,所以此字段在路由报文无关,可任选内容 Motorola|Motora|Intel|INTEL|MOTOROLA|intel|motorola
帧格式:用于表示CANID是扩展还是标准帧,输入内容可Extended|Standard|EXTENDED|STANDARD|extended|standard 即词组要么全大写或要么全小写,或是首字符大写即可,表示扩展或是标准帧;如果为LIN总线此值可任意输入上述值
目标报文帧格式:用于表示CANID是扩展还是标准帧,输入内容可Extended|Standard|EXTENDED|STANDARD|extended|standard 即词组要么全大写或要么全小写,或是首字符大写即可,表示扩展或是标准帧;如果为LIN总线此值可任意输入上述值
信号起始位:源与目标端信号起始位值,用0填充;因为整体数据域内容复制
信号长度:源与目标端信号起始位值,用0填充;因为整体数据域内容复制

负载报文的录入
早期版本借用可路由报文进行负载提升,在实际使用过程会增加相关通道的负载,造成多通道因为负载过大而失控,当前改为使用可路由报文外的报文进行负载提升,此报文软件手动录入,建议使用DBC中定义的报文使用,不同优先级的报文叠加使用

在这里插入图片描述
按上述只输入源报文端相关信息即,路由类型使用BUSLOAD,同时明显报文的通道,CAN还是CANFD,DLC长度,ID值,及扩展帧还标准贞即可,目标端无需关注,随意填写即可!目标报文的ID随便书写即可,使用16进制填入,其他列使用符合规则的随机值即可,只用于保证当前行的有效性,不会被程序读取使用

操作步骤与测试用例

在这里插入图片描述

  1. 运行CANOE脚本,在弹出的界面上【路由矩阵文件】,先选择要加载的矩阵表格文件
  2. 配置压力测试参数的【测试时长】与【总线负载】总线负载为最低的负载值,实际运行时可能会叠加DUT端的数据内容,瞬时负载可能达到100%,当前高负载默认是锁死的,不支持修改,待后续算法更新后释放相应的配置功能
  3. 【干扰通道编号】即指定干扰设备当前接入的端口编号,用于BUSOFF等用例的测试
  4. 【专项测试参数配置】中,明确扩展帧的范围,用于检测未定义帧的路由检测
  5. 【电压范围】的设置明确异常电压检测时候的电压调整范围,与【初始供电电压值】与【电压调整波动值】后,选择测试用例后,点【开始运行选中用例】即可运行相应的测试脚本

在这里插入图片描述

测试用例与测试原理

路由遍历
测试目标:检测所有【路由报文】是否能够正确路由
测试原理:
	1.在指定的源端口发送相应的源报文
	2.在目标端口检测相 应的目标报文,只要检测到目标报文即可认为路由关系是正确的
测试步骤:
远程帧隔离测试
测试目标:
测试原理:
测试步骤:
错误帧隔离测试
测试目标:
测试原理:
测试步骤:
远程帧隔离测试
测试目标:
测试原理:
测试步骤:
DLC小于定义值异常测试
测试目标:
测试原理:
测试步骤:
DLC大于定义值异常测试
测试目标:
测试原理:
测试步骤:
未定义报文帧隔离测试
测试目标:
测试原理:
测试步骤:
高负载能力测试
测试目标:检测总线负载达到一定负载率的时候的路由能力
测试原理:
	使用路由表中报文,通过调整发送频率来提升总线负载至指定的值,并检测在相应负载上路由是否出现丢帧等情况
测试步骤:
	1.按顺序从路由表源端抽取相应的报文,用于提升负载使用,被选中的报文周期将调整至指定值,并根据总线的实际发送的报文量,补充发送相应的提升负载用报文,以保证相同周期内报文数量一致,保证负载不低于设定值

注:
  目前因为报文发送时钟设置为1ms,提升负载到80%也只需3帧左右报文,再往上加负载,就容易满负载,如果增大计时周期,可能会影响发送周工作服的准确性
异常电压路由能力测试
测试目标:
测试原理:
测试步骤:
BUSOFF异常路由能力检测
测试目标:
测试原理:
测试步骤:
正常状态下压力测试
测试目标:
测试原理:
测试步骤:
随机错误注入压力测试(错误帧,远程帧,DLC错误等)
测试目标:
测试原理:
测试步骤:
NACK关闭响应压测试测试(各通道随机关闭)
测试目标:测试每个通道不响应ACK的时候,检测单通道ACK响应异常时候对其他通道的路由的影响
测试原理:设置CANOE对DUT指定通道发送的报文不进行响应
测试步骤:
	1.设置CANOE指定通道为静默模式,所有路由通道报文正常收发
		此时该通道将会接收DUT发出的NACK错误帧,其他通道未有影响
	2.停止记录转入NACK通道的发送报文,其他通道报文正常计数,并在指定时长T后随机切换到下一通道,依次循环直至完成指定时长测试结束;

因为DUT在测试NACK时候,会在恢复的时候发送无法预期的指定数量的缓存帧,此时目标端可能会错误采集到此缓冲帧,造成计数异常:
当前处理思路会在NACK停止后,所有往这个通道发送的报文停发100ms-500ms,并停止采集此通道的数据报文,待稳定后再次读取

单纯错误帧注入压力测试
测试目标:
测试原理:
测试步骤:
信号路由初始值检测
测试目标:检测上电初始化完成后,信号路由的目标端输出的信号值初始值是否符合定义需求
测试原理:
	源端不发送任何报文,检测目标端的报文输出,读取相应的信号值检测是否与定义一致,检测首帧的数据内容
测试步骤:
	1.DUT下K15进入休眠状态,或是断电重启
	2.停发所源端报文
	3.检测目标端的信号路由报文,并读取相应的信号值内容与预期值比对,并输出结果
信号路由超时无效值检测
测试目标:检测信号路由在源端报文丢失等情况下,出现源端超时时候,信号输出值量是否符合预期
测试原理:
	停止源端报文输出,超时后检测输出的目标端信号值
测试步骤:
		1. 上电正常发送源端报文,持续10秒,目的是使用两端信号实现计时同步
		2. 停止源端报文输出,持续检测目标端信号报文的输出,当出现超时后,其信号值与预期值比对生成相应的测试结果

目志文件使用说明

日志文件主要用于存储压力测试过程的错误数据与统计数据,基本功能的验证不生成日志
测试完成后将在工程所在目录下的[log]文件夹生成相应的日志文件,日志文件分三种格式,存储不同的内容
xls工作表格式:存储路由统计数据信息
log日志文件格式:存储工作运行过程的日志信息,主要用于开发分析使用
文本文件格式:用于存储每个路由的异常数据的记录
在这里插入图片描述
基本功能测试结果不生成日志文件
压力测试生成的日志名按:用例名+生成时间 生成相应的日志文件,测试完成后可查阅对应用例的日志,同时默认每条路由信息只记录前3000条错误信息,如果项目路由问题较大,可能会造成异常数据丢失,但是问题基本都是具有同类性,所以3000条对于问题的分析已经够用

统计日志表内容说明

报文路由的统计数据

在这里插入图片描述
报文路由统计按每条报文进行统计分析,按源通道进行分组统计;表格内容如上,分别涉及报文路由的基本信息【源通道,源报文ID,目标通道,目标通道ID】与相应的统计数据【源端发送量,路由转发量即目标端输出量,丢帧量,超出最大转发时长的超时帧数量】,运算得出的结果性数据【转发时延的相关参数的:最大/小转发时长,平均转发时长,丢帧率,错误率,超时率】

CAN2LIN与LIN2CAN的统计数据

在这里插入图片描述

信号路由统计数据

在这里插入图片描述

未定义报文的统计信息

在这里插入图片描述

异常数据日志

报文路由的异常记录格式

在这里插入图片描述

信号路由异常数据日志在这里插入图片描述
LIN2CAN与CAN2LIN异常数据日志

在这里插入图片描述

工程配置与操作

CAN总线的配置操作

在这里插入图片描述
针对CAN通道,理论可以设置无限多,但是实际情况请按实际使用的数量设置,不使用的请删除,通道号即Application Channel 要与数据表中的通道编号对应
没有使用的通道建议删除,并按实际连接情况配置硬件通道

LIN总线的配置

在这里插入图片描述

  • 21
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值