如何实现CAN-SOME/IP通信路由测试

区别于基于UDP的车内通信路由,基于SOME/IP协议的路由增加了服务发现(Service Discovery)和服务发布(Service Publish),那对于测试工程师来说,怎么实现CAN-SOME/IP路由的测试呢?

01 认识路由实现方式

首先要了解基于SOME/IP协议的路由设计原则,如果功能实现在Ethernet节点,则Ethernet节点为server,网关为client,如果功能实现在CAN节点,则网关为server,Ethernet节点为client,由网关实现Ethernet节点与CAN节点之间的路由。包括两种路由方式:报文路由和信号路由。

图片

那么,CAN报文和SOME/IP报文怎么实现对应呢,举个例子:

在以下示例中,通过SOME/IP header中的ServiceID和MethodID可以关联到指定的CAN报文。

图片

其中:

A代表ServiceID

B代表BusID

C代表CAN MessageID

E用来区分Method,或Event/Notifier 消息

报文路由:CAN报文的payload映射为服务接口的payload。网关实现CAN和SOME/IP协议之间的报文路由,不改变数据内容和数据长度。

图片

信号路由:服务接口中的参数映射为CAN报文中的信号。网关实现不同数据类型之间的转换。

图片

02 了解测试内容

报文路由不涉及信号内容解析,测试输入时可以不加载数据库文件也能完成测试,但是信号路由涉及SOME/IP接口参数的序列化和反序列化,需要加载数据库进行测试。

常见测试点

通信路由主要测试点包括:检查目标网段、报文类型、MessageID、payload length、payload是否正确,路由延迟时间等是否满足要求。

逆向测试的测试点主要有:payload length大于或小于预期,无效ID等

稳定性相关的测试点主要有:高负载,反复上下电,反复休眠等

以CAN-->SOME/IP 报文路由为例,已知某路由信息,测试Payload一致性。

路由信息

源网段(CAN)

目标网段(SOME/IP)

MessageID:0x100

DLC:8

ServiceID:0x0001

MessageType:Notification

EventgroupID:0x0001

NotificationID:0x8100

测试步骤

Step1:检查网关是否Offer ServiceID 0x0001

Step2:Tester模拟客户端,订阅ServiceID为0x0001,EventgroupID为0x0001的事件组,检查网关是否回复对应的SubscribeACK

Step3:在源网段模拟发送CAN报文,ID为0x100,data为01 02 03 04 05 06 07 08,检查是否接收到对应的SOME/IP报文

Step4:检查接收的payload与发送的payload是否一致

03 自动化测试解决方案

测试环境

搭建的测试环境要能与DUT建立通信,能控制DUT上下电和唤醒。可以参考以下的测试拓扑来监控DUT的通信,同时仿真Tester节点,模拟CAN和Ethernet节点与DUT进行通信。该套测试系统由CANoe测试软件、VT板卡、VN 5650,VN 16XX,程控电源和DUT组成。

图片

测试脚本

在上述测试步骤中,Tester需要模拟CAN节点和SOME/IP服务客户端,测试脚本的开发可基于CAPL语言和Vector提供的SomeIP_IL.dll文件,分为以下几个步骤来实现 。

❶ 在TCP/IP Stack中,给Tester设置IP/MAC地址

❷ 模拟发送CAN报文

❸调用SomeIpOpenLocalApplicationEndpoint函数,创建一个Endpoint

❹ 调用SomeIpCreateConsumedServiceInstance函数,指定ServiceID和InstanceID

❺ 调用SomeIpAddConsumedEventGroup函数,指定EventgroupID

❻ 调用SomeIpCreateFieldConsumer函数,指定NotificationID,以及当接收到此Notification报文时的回调

❼ 创建回调函数,当接收到Notification报文时,比对payload是否一致

回调函数触发后,数据解析方法示例:

图片

测试结果

CANoe监控报文以及数据处理结果展示:

图片

通过调用SomeIP_IL.dll文件,可以实现Tester与网关之间的服务发现过程,以及服务接口的接收和调用,进一步达到测试的目的。

SOME/IP-->CAN路由的测试原理与上面相似,调用dll文件中的函数,实现模拟服务端的行为,信号路由的测试通过导入SOME/IP和CAN数据库文件,可以实现自动化测试。

以上就是我们给大家分享的CAN-SOME/IP路由测试的相关内容了,任何疑问或是自动化测试需求,都可以随时联系我们噢,感谢大家的阅读~

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

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

相关文章

爬虫基本原理

一、爬虫的原理 爬虫是什么?把互联网上的数据,抓取下来,存到自己的本地。 以百度为例,爬取一个个的网页,存到自己库中,当我们搜索的时候,去百度的数据库中搜索,显示在前端&#xf…

【K8S系列】深入解析K8S调度

序言 做一件事并不难,难的是在于坚持。坚持一下也不难,难的是坚持到底。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点 Kubernetes (k8s) 是一个容器编…

基于springboot的智慧养老系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容:毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

面部识别技术VS其他生物识别技术:哪种更安全、更准确、更可靠?

面部识别技术是一种生物识别技术,通过分析人脸特征,识别和验证个体身份。与其他生物识别技术相比,面部识别技术具有一些独特的优点和局限性。下面将从技术原理、应用场景、准确性、安全性、可用性等方面,对面部识别技术与其他生物…

【云原生】Init 容器

Init 容器 v ljx97609760 一起沟通学习 Init 容器是一种特殊容器,在 Pod 内的应用容器启动之前运行。Init 容器可以包括一些应用镜像中不存在的实用工具和安装脚本 理解 Init 容器 每个 Pod 中可以包含多个容器, 应用运行在这些容器里面,…

centos磁盘挂载

通常情况下,云平台开出来的服务器只有默认的系统盘,而数据盘需要运维人员自己挂载在数据目录,此篇记录centos磁盘挂载的过程,以便今后遇到类似情况便于查看。 系统版本:centos7.9 1、查看磁盘情况: [root…

数学建模学习之简单设备分配问题

简单的设备分配问题 某公司新购置了某种设备 6台,欲分配给下属的4 个企业,已知各企业获得这种设备后年创利润如表 1.1 所示,单位为千万元。问应如何分配这些设备能使年创总利润最大,最大利润是多少? 表1.1的数据为: 对…

Go 微服务开发框架 DMicro 的设计思路

Go 微服务开发框架 DMicro 的设计思路 DMicro 源码地址: Gitee:dmicro: dmicro是一个高效、可扩展且简单易用的微服务框架。包含drpc,dserver等 背景 DMicro 诞生的背景,是因为我写了 10 来年的 PHP,想在公司内部推广 Go, 公司内部的组件及 rpc 协议…

Webpack5开发模式选择

Webpack 5 是一款强大的模块打包工具,可用于将许多分散的模块按照依赖关系打包成一个(或多个)bundle。在Webpack 5中,主要有两种开发模式,分别是开发模式(development)和生产模式(pr…

LeetCode 142.环形链表II

142. 环形链表 II - 力扣(LeetCode) /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNode *detectCycle(ListNode …

4.日志分布式-ELK

文章目录 日志分布式-ELK概念可以添加的其它组件filebeat 结合 logstash 带来好处为什么要使用 ELK缓存和Fluentd完整日志系统基本特征ELK 的工作原理 部署Elasticsearchjdk环境和防火墙配置安装Elasticsearch修改配置文件优化内存参数启动程序并测试效果安装 Elasticsearch-he…

leetcode-344. 反转字符串

leetcode-344. 反转字符串 文章目录 leetcode-344. 反转字符串一.题目描述二.第1次提交(std::reverse)三.第2次提交(左右指针)四.第3次提交(左右指针,swap函数)五.第4次提交(左右指针) 一.题目描述 二.第1次提交(std::reverse) class Solution {public:void revers…

常用数字电路模块:计数器与分频器(一)

本文介绍常见的电路——计数器,方便后续讲解分频电路。 一、计数器 (1)计数器代码   计数器,顾名思义就是在时钟的节拍下进行计数,一个简单的N位计数器的代码如下所示,这个计数器从0计数到2N -1&#x…

python爬虫

一.爬虫介绍 1.什么是爬虫 爬虫(Spider),也被称为网络爬虫或网络蜘蛛,是一种自动化程序,用于在互联网上浏览和提取信息。爬虫通过模拟人类用户访问网页的行为,从网页中提取数据并将其存储或进行进一步处理…

ubuntu freeradius 3.0 + mariadb

安装数据库及Radius sudo apt update sudo apt install -y freeradius freeradius-mysql freeradius-utils mariadb-server mariadb-client# sudo mysql_secure_installationNOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDBSERVERS IN PRODUCTION USE…

Springboot启用HTTP响应压缩

官方文档:https://docs.spring.io/spring-boot/docs/2.3.12.RELEASE/reference/htmlsingle/#how-to-enable-http-response-compression

mmc记录

1、获取csd,也就是DSR寄存器 说是应该可以获取块长度、卡存储容量等,但是在8953上,没看到这个日志 参考: 一、有6个主要的和寄存器 1、OCR寄存器 描述了存储卡的Vdd电压描述 ,总共32Bit Bit31 --- 卡上电状态位&…

赋能智能智造-RK3568智能主板助力机器人产业高速发展

机器人作为现代制造业的重要一环,正在以惊人的速度推动着生产效率和智能化水平的提升,它们在生产线上的准确操作和高效工作,为企业带来了巨大的竞争优势。关于工业机器人的编程和控制技术,在过去几年中已经有了很多发展和新的应用…

计算机网络——物理层

物理层 物理层是计算机网络体系结构中的底层层级,负责处理计算机与物理传输媒介之间的接口和通信细节。它主要关注如何在物理媒介上传输原始比特流,并确保数据能够可靠地从发送方传输到接收方。 物理层的主要任务包括: 传输介质&#xff1a…

谷歌Bard入门指南

文章目录 谷歌Bard入门指南一、简介二、使用指南三、中文化3.1 中文提问3.2 中文回答 四、Hello Game五、亮点 谷歌Bard入门指南 一、简介 Bard 是一个大型语言模型,也称为对话式 AI 或聊天机器人,经过训练,内容丰富且全面。Bard 接受过大量…