CANoe自带的诊断工程分析

news2024/11/24 3:08:02
  • 🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用
  • 🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】
  • 🍅 玩转CANoe,博客目录大全,点击跳转👉

📘前言

🍅 学习CANoe,官方的实例工程就是最好的学习模板,对于初学者,存在看不懂,不知如何学习的问题,本节带大家学习下图的官方诊断工程。
🍅 这个工程是可以用适用于CANoe Demo版本的。

🍅 你可以从CANoe的 Sample Configruration 界面打开,也可以从下面的路径中打开。

  • C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 15.5.23\CAN\Diagnostics\UDSBasic

在这里插入图片描述

目录

  • 📘前言
  • 📙 诊断工程
    • 诊断数据库cdd文件
    • 网络节点
    • 仿真节点的代码解读
      • 诊断定义
      • 诊断事件
      • 诊断CAPL函数
      • 发送诊断
      • 接收诊断,并发送响应
      • 响应事件
    • 测试节点的代码解读
      • 测试步骤自增控制
      • 诊断测试用例
  • 🌎总结

请添加图片描述


📙 诊断工程

诊断数据库cdd文件

  • 这个工程加载了一个cdd文件,如下图,因为是仿真ECU,需要注意的是下面选择的Simulation By

在这里插入图片描述

网络节点

  • SimDiagECU :这个工程仿真了一个ECU,SimDiagECU,模仿ECU对诊断指令的响应。
  • Tester: 是个仿真的测试节点,和SimDiagECU节点交互
  • TestMoudle: 测试用例模块,了解常用的诊断CAPL函数。

在这里插入图片描述

仿真节点的代码解读

  • 运行CANoe之后,Write窗口会打印如下信息,这是因为在Tester.can文件中,On satrt 会调用 show_menu();打印出来的。

在这里插入图片描述

诊断定义

  • 在CAPL脚本中定义,注意Door.xxx这个Door 是cdd文件中定义的ECU名字
  • 在这里插入图片描述
  • 定义时也不可以不用指定ECU的名字,在仿真节点中是Ok的(比如上图的Tester节点),但是在测试节点(比如上图的Test Module节点)中就不行,如果定义时,没有指定ECU的名字,必须要先用diagSetTarget(“Doors”)指定诊断对象,才可以使用诊断变量。
  • 特别注意diagRequest * req,这样子定义表示这个诊断变量为空,不指向任何诊断服务,但是可以通过相关capl函数赋值后,变成任意的诊断服务
diagRequest Door.defaultSessionStart req;
diagRequest defaultSessionStart req;
diagRequest * req;
  • 同理还有Response 的定义
diagResponse Door.defaultSessionStart resp;
diagResponse this resp;
diagResponse defaultSessionStart resp;

诊断事件

  • 当发送诊断服务,不管是从诊断控制台手动发送,还是通过CAPL函数 diagSendRequest()发送,如果定义了诊断事件,则会触发该事件。
  • 诊断事件,定义也是很灵活的,可以直接指向某一具体服务,如下图1,也可以指向某一组服务,如 on diagRequest Ecu_Reset::*,当然也可以 on diagRequest * ,指向所有诊断服务。
    在这里插入图片描述
    在这里插入图片描述

诊断CAPL函数

发送诊断

  • 看下 on key ‘1’ 中的代码,req.SetParameter函数,也就是 diagSetParameter,是对诊断服务的参数设置值,设置好诊断参数值后,调用req.SendRequest();就可以把诊断服务发送出去了。
  • PS:capl中很多函数,都有两种方式,一种是通过 类.方法的方式(req.SetParameter),另一种就是可以直接调用的(diagSetParameter)
    在这里插入图片描述

在这里插入图片描述

接收诊断,并发送响应

  • 上面发送诊断后,触发 on diagRequest Door.Variant_Coding_Writes事件,判断收到的诊断参数后,判断是返回正响应还是负响应。

  • 注意的是,这里是仿真的ECU,模拟ECU收到诊断报文后,模拟ECU的响应,也就是说如果ECU是真实的,那么我们在上一步诊断发出去后,就应该能接收到响应了。

  • SendPositiveResponse和SendPositiveResponse 只能在仿真函数中使用

在这里插入图片描述

在这里插入图片描述

响应事件

  • 在上一步骤,ECU端发送了诊断响应后,就会触发 on diagResponse Door.Variant_Coding_Write事件
    在这里插入图片描述

    测试节点的代码解读

仿真节点和测试节点的CAPL脚本还是有很大差别的,而且有些函数是不通用的。
在这里插入图片描述

测试步骤自增控制

  • 一个好的测试用例,应该步骤清晰,这里虽然是个简单的Demo工程,但是代码结构还是很完善的,如下图2测试报告中的测试步骤。

在这里插入图片描述

在这里插入图片描述

诊断测试用例

  • 这个Demo就这一个测试用例,功能是:写入Variant_Coding,然后再读取Variant_Coding
    在这里插入图片描述

  • 重要的是,这个函数 SendRequestAndWaitForResponse,实现了诊断发送,响应判断,是个很通用的函数,可以移植到自己的脚本下使用。
    在这里插入图片描述

    在这里插入图片描述

🌎总结

23

7

  • 🚩要有最朴素的生活,最遥远的梦想,即使明天天寒地冻,路遥马亡!

  • 🚩如果这篇博客对你有帮助,请 “点赞” “评论”“收藏”一键三连 哦!码字不易,大家的支持就是我坚持下去的动力。
    18

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

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

相关文章

基于matlab的长短期神经网络的三维路径跟踪预测

目录 背影 摘要 LSTM的基本定义 LSTM实现的步骤 基于长短期神经网络LSTM的三维路径跟踪预测 MATALB代码 效果图 结果分析 展望 参考论文 背影 路径跟踪是指通过计算机算法,。长短期记忆模型对复杂,非线性运动的目标跟踪,解决目标跟踪困难&a…

回溯算法专题

回溯算法专题 框架篇全排列问题N 皇后问题如果只需要一个合法答案,怎么办? 快速排序LeetCode 912. 排序数组解题思路代码实现LeetCode 215. 数组中的第K个最大元素解题思路代码实现总结 不要纠结,干就完事了,熟练度很重要&#xf…

e与phi不互素 --- 四道题详记

文章目录 题一([MoeCTF2022]signin)题目描述:题目分析: 题二(unusualrsa5)题目描述:题目分析: 题三([0ctf 2016]RSA?)题目描述:题目分析: 题四(2022ctfshow卷王杯现代密码签到)题目描述:题目分…

【Python】re模块

一、re模块简介及操作方法 正则表达式其本身就是一种小型的,高度专业化的编程语言。在Python中,它被内 嵌在了re模块里面,正则表达式模式被编译成一系列的字节码,然后由用C编写的匹 配引擎执行。 1、re.search方法 re.search 扫描…

“王炸”组合竞逐「行泊一体」

去年开始,在中国市场,「行泊一体」的热度,不亚于当年特斯拉推出FSD,甚至更加火热。从上游芯片、传感器,到域控制器、智能驾驶系统供应商以及车企,都在公开场合不断普及这个组合功能。 「行泊一体」市场的启…

MongoDBRedis基础知识

MongoDB&Redis基础知识 1. MongoDB简介2. Redis 关系型数据库遵循ACID原则: 原子性一致性独立性持久性 分布式系统:由多台计算机和通信的软件组件通过计算机网络连接组成,分布式系统是建立在网络之上的软件系统,因为软件的特…

操作系统论文导读(七):Response-Time Analysis for Mixed Criticality Systems——混合关键系统的响应时间分析

目录 一、论文核心思想 二、案例引入 三、基础定义 四、分区关键性调度 (PC) 五、SMC调度 5.1 调度流程 5.2 响应时间分析(考虑EDF分配) 5.3 优先级分配 六、AMC调度 6.1 调度流程 6.2 响应时间分析(考虑EDF分配) 6.3 AMC…

Cesium 核心概念 核心接口

Cesimum 可以做什么 Cesium 是一个开源的3D地球可视化引擎,它可以在Web浏览器中以高性能和高质量呈现全球范围内的地球表面数据。 Cesium 可以用于以下领域: 地理信息系统:Cesium 可以呈现地球表面上的各种地理信息数据,包括卫…

【Python入门】NumPy 数组裁切及数据类型

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 裁切数组 python 中裁切的意思是将元素从一个给定的索引带到另一个给定的索引。 我们像这样传递切片而不是索引:[start:end]。 我们还可以定义步长,如下所示:[start&#x…

RabbitMQ实现消息的延迟推送或延迟发送

一、RabbitMQ是什么? 1.RabbitMQ简介 RabbitMQ是有erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列。 常见的消息队列有:RabbitMQ、Kafka 和 ActiveMQ 2.RabbitMQ的优点 Rab…

设计模式 --- 创建者模式

一、概述 创建型模式的主要关注点是“怎样创建对象?”,它的主要特点是“将对象的创建与使用分离”。 这样可以降低系统的耦合度,使用者不需要关注对象的创建细节。 创建型模式分为: 单例模式 工厂方法模式 抽象工程模式 原型…

【linux】yum “应用商店” 的基本用法

好多工具 yum软件包查看软件包安装软件卸载软件 yum 通俗的讲,这就似我们手机上的应用商店,只不过是在linux下的。 我们可以用yum来下载东西。 软件包 在Linux下安装软件, 一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序。 但是这样…

【Linux 命令】chroot

文章目录 一、背景二、语法三、案例3.1 命令3.2 系统调用3.3 查找服务是否存在于 chrooted 监禁内 四、注意事项 chroot 用来在指定根目录运行命令(即指定 / 的位置),不可操作指定目录之外的地方。其是一种非常简单的资源隔离化操作&#xff…

idea 配置docker 进行上传镜像,部署启动容器

前言 在我们开发测试过程中,需要频繁的更新docker镜像,然而默认情况下,docker的2375端口是关闭的,下面介绍如何打开端口。 修改docker配置文件 操作步骤: 1.1、修改配置 登录docker所在服务器,修改docker…

web前端实验5

实 验 报 告 课 程 Web前端应用开发 实验项目 Jquery AJAX编程 成 绩 专业班级 班内序号 指导教师 姓 名 学 号 实验日期 实验目的及要求: (1) 理解和掌握Jquery AJAX的get方式请求 (2) 理解和掌握Jquery AJAX的pos…

释放ChatGPT潜能:4款高效插件让你的AI助手更强大

你的ChatGPT页面是什么样的?是这样的吗? 今天我要向大家推荐四款「ChatGPT免费插件」。这些插件是我们在与GPT日常交流中,使用频率最高的四个工具。 一旦安装这些插件,你的GPT将立即变身为「超级ChatGPT」。使用起来更为流畅&am…

BEV+Transformer对无人驾驶硬件体系的巨大改变

摘要: BEVTransformer彻底终结了2D直视图CNN时代,BEVTransformer对智能驾驶硬件系统有着什么样的影响?背后的受益者又是谁? 图片来源:特斯拉 BEVTransformer是目前智能驾驶领域最火热的话题,没有之一&…

【大数据平台开发】【Web框架】001Django框架简介

【大数据平台开发】【Web框架】001Django框架简介 文章目录 【大数据平台开发】【Web框架】001Django框架简介一. Django简介与安装1.1 Django安装1.2 Django简介1.3 框架功能简介 二. Django框架的最小程序2.1 新建工程2.2 修改工程2.3 运行工程2.4 django-admin与manage.py2.…

(二)EalsticSearch 辅助工具 Kibana 介绍与安装

1、什么是 kibana ? Kibana 是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。 Kibana让海量数据更容易理解。它操作简单&#xff…

Python高光谱遥感数据处理与机器学习

Python高光谱遥感数据处理与机器学习 第一章、高光谱基础 高光谱遥感简介 什么是高光谱遥感? 高光谱遥感为什么重要? 高光谱遥感与其他遥感技术的区别是什么? 高光谱遥感的历史和发展 高光谱传感器与数据获取 高光谱传感器类型 如何获…