Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >CANoe UDS诊断测试

CANoe UDS诊断测试

作者头像
不脱发的程序猿
发布于 2025-04-02 02:15:54
发布于 2025-04-02 02:15:54
4270
举报

使用 CANoe 进行 UDS 诊断测试 时,可以通过两种主要方式来实现测试:有CDD文件无CDD文件

CDD文件是基于 ASAM MCD-2D 标准格式的描述文件,提供了车辆诊断通信所需的详细描述,包括诊断服务、参数、PDU格式等。

通过导入 CDD 文件,CANoe 可以自动解析和识别ECU支持的UDS诊断服务及相关数据格式,从而提供更高效和自动化的测试过程。

在没有 CDD 文件的情况下,诊断测试通常依赖手动配置或脚本编写进行服务的调用。

这意味着,测试人员需要自行指定每个诊断服务的服务ID、参数ID、数据格式等。

1、Diagnostics/ISO-TP Configuration窗口

可以直接在Diagnostics/ISO-TP Configuration窗口导入CDD文件,通常CDD文件中设置好了传输层和诊断层参数。

加载 CDD 文件 后,会自动弹出两个窗口:“Fault Memory”(故障记忆)“Session Control”(会话控制)

如果使用 CANoe 自带的 “Basic Diagnostic Editor”(基本诊断编辑器) 模板(即没有 CDD 文件),则这两个窗口将被置为灰色,无法进行操作。

如果没有CDD文件,就需要根据诊断问卷调查表在Diagnostics/ISO-TP Configuration窗口设置传输层和诊断层参数。

1.1、设置传输层参数

点击 “Transport Layer” 打开 “Configure Transport Layer (CAN)” 界面,对传输层参数进行设置。主要设置项包括 “Addressing”(诊断地址信息)“Additional ISO TP Protocol Parameters”(TP协议参数)。

Addressing(诊断地址信息) 包括请求地址、物理寻址和功能寻址。一般来说,诊断地址以 0x7 开头。ECU 所支持的诊断服务通常都支持物理寻址。功能寻址仅支持以下服务:1011283E85221419,即不支持 312E2F343637

Additional ISO TP Protocol Parameters(TP协议参数)

  • STmin:接收方发送流控帧之后,发送方发送连续帧之间的最小时间间隔。
  • Block size:接收方发送流控帧后,发送方可以连续发送的最大帧数。如果该值为 0,则表示没有连续帧数目的限制。
  • FC delay:CANoe 收到首帧或连续帧后,延迟回复流控帧的时间。
  • Max. length:最大传输数据长度,通常取最大值 4095(3 位 DLC 最大值)。

Mixing of CAN 2.0 and FD frames

此项设置表示是否兼容 CAN 帧和 CAN-FD 帧。

其选项说明如下:

  • Ignore:两者不兼容。如果配置为 CAN 帧,CANoe 不接受 CAN-FD 帧;如果配置为 CAN-FD 帧,则不支持 CAN 帧。
  • Accept:兼容。当配置为 CAN 帧时,CANoe 可以接受 CAN-FD 帧,但返回的是 CAN 帧。
  • Adapt:兼容。当配置为 CAN 帧时,CANoe 可以接受 CAN-FD 帧,但返回的是 CAN-FD 帧。

1.2、配置诊断层参数

点击 “Diagnostic Layer” 打开 “Configure Diagnostic Layer (CAN)” 界面,进行 Tester Present 参数的设置。

设置“Tester Present”参数

勾选 “Send Tester Present”,选择 “Manually defined”,并填写会话保持诊断报文,通常为 “0x3E 00”

接着,设置 “S3 client time”,即会话保持报文发送的周期。

UDS诊断中的 0x3E 服务主要作用是确保诊断服务或之前激活的通信仍然处于激活状态,从而保持当前的非默认会话(Default Session)。通过周期性发送请求帧,防止自动跳回默认会话。

在实际应用中,当进行 DID(Data Identifier)写入 时,通常需要进入用户自定义会话(Custom Session),并且可能需要通过 0x27 服务 达到特定的安全等级。为了在写入 DID 时确保这些服务保持激活状态,可以使用 0x3E 服务定期发送会话保持报文。

添加好会话保持报文并勾选 “Send Tester Present” 后,后续只需通过点击 CANoe 中的 “Tester Present On” 功能,即可自动发送或停止会话保持报文,轻松实现会话保持功能。

根据诊断信息表设置“Timing”参数

“Timing” 参数需根据诊断信息表进行设置,通常由 OEM 或 ECU 开发方提供。具体参数如下:

  • S3 client time:诊断仪(如 CANoe)自动发送会话保持报文(0x3E 服务)的周期。
  • S3 server time:停止发送会话保持报文后的最大时间,ECU 保持在非默认会话的时间。
  • P2 client:诊断仪(如 CANoe)发送请求报文到接收到回复的时间间隔。
  • P2 server:ECU 收到请求报文到开始回复的时间间隔。
  • P2 extended client:诊断仪(如 CANoe)收到 NRC 78 错误后,到下一次回复的时间间隔。
  • P2 extended server:ECU 发送完 NRC 78 错误后,到下一次回复的时间间隔。

注意

  • P2 client 的值必须大于 P2 server 的值。
  • 同理,P2 extended client 必须大于 P2 extended server

“Security Access” - 安全访问配置

Seed & Key DLL:用于 27 服务 安全解锁。为了保护 ECU 数据不被误改,许多诊断服务要求在不同的安全访问等级下进行访问。

CANoe 中,用户需要配置自定义的动态链接库(DLL)文件,提供解锁安全访问的算法。该 DLL 文件通常由 OEM 或 Tier 1 提供。

加载该文件后,当需要解锁时,只需在诊断控制台手动点击 27 服务,即可完成解锁操作。

若没有提供此 DLL 文件,也可以根据安全算法编写 CAPL 脚本来实现解锁功能 2、Basic Diagnostic Editor窗口

没有CDD文件,根据诊断问卷调查表在Diagnostics/ISO-TP Configuration窗口设置好传输层和诊断层参数后,需要在Basic Diagnostic Editor窗口手动创建诊断服务。

这是 CANoe 自带的模板,我们需要根据诊断信息表中的服务汇总,在每个服务的框架下手动添加项目所需的子服务,右键选择“Add New Service”可以添加子服务。

可以根据CAN矩阵和诊断问卷调查表设置请求和响应的数据,例如以下操作:

3、Diagnostic Console窗口

在Diagnostic Console 窗口中可以选择进行发送诊断请求和查看响应。

点击建立好的子服务按钮,就可以测试发送诊断请求。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 美男子玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
31.Django缓存和信号
缓存  由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回 Django中提供了6种缓存方式: 开发调试 内存 文件 数据库 Memcache缓存(python-memcached模块、pylibmc模块) 1.配置 # 此为开始调试用,实际内部不做任何操
zhang_derek
2018/04/11
9240
Django进阶之缓存和信号
一、缓存 简介 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者mem
coders
2018/01/04
9070
Django进阶之缓存和信号
Django配置缓存机制
Django 官方关于cache的介绍:https://docs.djangoproject.com/en/dev/topics/cache/
緣來
2018/09/18
1.1K0
Django2.0中文(缓存)
1、settings.py中配置使用memcached缓存: CACHE_BACKEND = 'memcached://172.19.26.240:11211;172.19.26.242:11212;172.19.26.244:11213/' // pip install python-memcached 2、使用数据库做缓存: python manage.py createcachetable [cache_table_name] CACHE_BACKEND = 'db://my_cache_table' 3、使用文件做缓存:需要运行的用户有读写该目录的权限 CACHE_BACKEND = 'file:///var/tmp/django_cache' 4、本地内存: CACHE_BACKEND = 'locmem:///' 5、使用自定义缓存:CACHE_BACKEND = 'path.to.backend://'
用户5760343
2022/05/14
3490
django开发中利用 缓存文件 进行页面缓存
Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。
雷子
2021/03/15
1.2K0
django开发中利用 缓存文件 进行页面缓存
Django(39)使用redis配置缓存[通俗易懂]
  动态网站的基本权衡是,它们是动态的。每次用户请求页面时,Web服务器都会进行各种计算 – 从数据库查询到模板呈现再到业务逻辑 – 以创建站点访问者看到的页面。从处理开销的角度来看,这比标准的文件读取文件系统服务器要耗时多了。对于大多数Web应用程序来说,这种开销并不是什么大问题。因为大多数Web应用程序只是中小型网站,没有拥有一流的流量。但对于中到高流量的站点,尽可能减少开销是至关重要的,这就是缓存的用武之地。缓存某些内容是为了保存昂贵计算的结果,这样就不必在下次执行计算。 Django框架带有一个强大的缓存系统,可以保存动态页面,因此不必为每个请求计算它们。Django提供不同级别的缓存粒度:可以缓存特定视图的输出,也可以只缓存页面中难以生成的部分或者可以缓存整个站点。 Redis是一个内存数据库(现在已经支持内存数据持久化到硬盘当中,重新启动时,会自动从硬盘进行加载),由于其性能极高,因此经常作为中间件、缓存使用。
全栈程序员站长
2022/09/16
2.1K0
Django(39)使用redis配置缓存[通俗易懂]
Django-缓存内容
将缓存存储在你的数据库中,可能是MySQL 说明: 尽管存储介质没有更换,但是当把每一次查询负责的结果存储到表里 比如多个条件的过滤查询结果,可避免重复进行查询。
Yuou
2022/09/26
3700
Django使用redis作为缓存系统
为了提升网站的性能,加一层缓存是少不了的,由于之前做的东西是用django写的,所以就介绍一下django的缓存系统。
earthchen
2020/09/24
6850
【Django】 开发:Cookie、Session和缓存
cookies 在浏览器上是以键 - 值对的形式进行存储的,键和值都是以 ASCII 字符串的形存储 (不能是中文字符串)
杨丝儿
2022/02/18
1.9K0
【Django】 开发:Cookie、Session和缓存
第二十二章 Django会话与表单验证
第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} #index.html <h1>{{val.0}} 2.继承:一个html页面只能继承一个模板 extends 'layout.html' {{ block xxx}} ... {{endblock}} 3.组件: {{include tag.html}} 4.自定义函数: simple_tag:任意参数,不
玩蛇的胖纸
2018/06/08
5840
redis之django-redis
使用中间件,经过一系列的认证等操作,如果内容在缓存中存在,则使用FetchFromCacheMiddleware获取内容并返回给用户, 当返回给用户之前,判断缓存中是否已经存在,如果不存在则UpdateCacheMiddleware会将缓存保存至缓存,从而实现全站缓存
人生不如戏
2019/02/13
1.2K0
如何使用Memcached实现Django项目缓存
-l:是监听的服务器IP地址,这里我们填本地,如果想让其他机器访问,写成0.0.0.0
极简小课
2022/06/21
1.5K0
如何使用Memcached实现Django项目缓存
Django使用redis
settings.py中加入以下内容,your_host_ip换成你的服务器地址,yoursecret换成你的服务器密码
菲宇
2019/06/12
1.6K0
原创丨如何大幅提高 Django 网站加载速度
之前做了个爬虫案例平台,https://scrape.center/,具体文章在 原创丨发布一个爬虫案例平台,帮助爬虫初学者进行练手。
崔庆才
2020/10/30
8280
原创丨如何大幅提高 Django 网站加载速度
Django 缓存6.2
缓存 对于中等流量的网站来说,尽可能地减少开销是必要的。缓存数据就是为了保存那些需要很多计算资源的结果,这样的话就不必在下次重复消耗计算资源 Django自带了一个健壮的缓存系统来保存动态页面,避免对于每次请求都重新计算 Django提供了不同级别的缓存粒度:可以缓存特定视图的输出、可以仅仅缓存那些很难生产出来的部分、或者可以缓存整个网站 设置缓存 通过设置决定把数据缓存在哪里,是数据库中、文件系统还是在内存中 通过setting文件的CACHES配置来实现 参数TIMEOUT:缓存的默认过期时间,以秒为单
Lansonli
2021/10/09
3840
django 三种缓存模式的使用及注意点
    @cache_control,@vary_on_headers,@vary_on_cookie 
用户1558882
2018/10/10
5240
django 三种缓存模式的使用及注意点
django 如何使用memcached
如果想要使用以上参数来指定一些配置信息,那么不能使用service memcached start,而应该使用/usr/bin/memcached的方式来运行。比如/usr/bin/memcached -u memcache -m 1024 -p 11222 start。
用户2200417
2022/03/31
1.8K0
学习猿地 python教程 django教程9 Django使用redis实现缓存
            "BACKEND": "django_redis.cache.RedisCache",
学习猿地
2020/03/24
3540
django cache_page 装饰器 自定义cache_key
位于from django.views.decorators.cache import cache_page的这个cache_page是django提供的缓存页面的方法,首先需要在settings.py中加入配置
小贝壳
2020/03/17
1.1K0
Django实战-星座运势接口封装
Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2019/09/11
9720
Django实战-星座运势接口封装
相关推荐
31.Django缓存和信号
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档