ISO14229系列之一:简介
作者:autogeek
原文链接:http://www.cnblogs.com/autogeek/p/4458591.html
前言
由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍和总结,既是对自己学习的总结,也能够给初次涉及该协议的朋友一个参考。
首先简要介绍什么是ISO-14229,至于可以在网上找到的大篇理论介绍我就略过不讲了,有兴趣可以自行搜索。简单的说,它就是一个用于汽车行业诊断通信的需求规范,它只规定了与诊断相关的服务需求,并没有涉及通信机制,因此要实现一个完整的诊断通信还需要定义网络层协议(比如ISO-15765),还有底层硬件实现方式(比如CAN控制器)。由于不涉及网络通信机制,可以架设在各种网络之上,因此ISO-14229也称为UDS(Unified Diagnostic Services)。
1. 用途
ISO-14229的用途就是规定了诊断需求,因此想要了解ISO-14229的用途首先要知道诊断的用途。诊断最先用于汽车尾气排放的监测,后来发展为包括对汽车行驶故障的监测,想知道诊断的发展史,可以维基百科。至少现代的诊断可以粗略的分为排放相关和非排放相关,ISO-14229只定义非排放相关的诊断需求。非排放相关诊断可以做什么呢?其实用途很大,基本贯穿整个汽车ECU生命周期。首先,ECU开发时要用到它来构建bootloader,上传和下载数据;测试时要用它来读写RAM、ROM,控制外设;在产线上,要用它来校准机械件,刷新软件;在行驶过程中,要用它来监测各种故障,并记下故障码;在4S店,技师需要用它来读出故障码,判断故障发生点,还可以用来升级ECU程序。现在大热的车联网概念,其中一些就是通过OBD口联网,读取车内故障码,或者油量、速度等参数。
2. 诊断通信分层结构
虽然借鉴OSI的七层结构,但是诊断通信分层还是做了一些改变。可以参考如下列表:
|
OSI Layer |
Enhanced Diagnostic Services |
|
Application (layer 7) |
ISO 14229 |
|
Presentation (layer 6) |
- |
|
Session (layer 5) |
ISO 15765-3 |
|
Transport (layer 4) |
ISO 15765-2 |
|
Network (layer 3) |
ISO 15765-2 |
|
Data link (layer 2) |
ISO 11898 |
|
Physical (layer 1) |
ISO 11898 |
显然,从上表可以看出诊断通信分层模型和OSI的区别,同时也可以看到ISO-14229在该模型中的位置。其实,可以将该模型简化为:
- 统一诊断服务层 (layer 7)
- 网络服务层 (layers 1 to 6)
因此,在使用ISO-14229时,下面的通信机制可以改变,比如基于CAN,基于蓝牙,基于LAN,基于FlexRay等等。
3. 相关术语
3.1 协议相关术语
要了解协议,首先要知晓协议内定义的术语。我挑了一些使用频率比较高的在此解释。
1. Diagnostic Service (诊断服务)
诊断服务是介于诊断设备和被诊断ECU之间的一种信息交互方式。通常是由诊断设备发出请求,被诊断ECU做出回应。
2. Diagnostic Trouble Code (故障码)
故障码是用来标记ECU故障的代码,它遵循一定的规则(以后会介绍),驻留在ECU的非易失性存储器中。
3. Diagnostic Data (诊断数据)
诊断数据是可以被诊断设备请求的ECU内部数据,它包括:
-当前数据,即ECU正在使用的某个数据,比如车速、节气门角度等
-存储数据,即被ECU存储在存储器中某一时刻的数据,比如DTC
-静态数据,即恒定不变的ECU内部数据,比如VIN码。
4. Diagnostic Session (诊断会话)
可以理解为某种诊断模式或权限,即在不同的模式下,对不同的诊断服务的使用做了限制。
5. Diagnostic Routine (诊断例程)
驻留在被诊断ECU中的子程序,它可以被诊断设备启动和停止。比如格式化EEPROM的子程序。
6. Tester, 就理解为诊断设备或诊断仪吧。
3.2 诊断服务相关术语
再来说一些跟诊断服务相关的术语。
1 Addressing Type (寻址方式)
寻址方式指的是诊断消息的传递方式,有两种寻址方式:
-Physical ,物理寻址,即1对1通信,用于知道确切的被诊断ECU的地址
-Functional,功能寻址,即1对n通信,或者说广播发送,用于不知道确切的被诊断的ECU的地址,向一组或者全体ECU发送请求
2 Result
Result指的是tester请求诊断服务执行后,从ECU的返回结果。可以有两种结果:
-Positive Response,正响应,即诊断请求执行成功
-Negative Response,负响应,即诊断请求执行失败
3 Service Identifier
Service Identifier可以简称为SID,它是一个一字节的无符号整数,用以指代某个诊断服务。诊断协议为每一个诊断服务都分配了唯一一个SID,因此更方便协议的软件实现。同时,在日常工作中工程师们用SID来指代某个诊断服务比说出某个服务的名字更方便简洁。比如ReadDataByIdentifier这个服务是去按照ID去读某个诊断数据,直接说22服务会更加方便。
4 Data Identifier
简称DID,是2个字节无符号整数的ID,用来标识ECU中贮存的某个诊断数据单元。它的好处是当要读取某个单元的诊断数据时,只要读对应的DID就可以,不必知道数据的具体地址。即使当ECU中的数据地址发生变化时,只要DID和某个地址单元的映射地址改变即可,对于使用者来说DID屏蔽了具体实现细节,而将重点放在了数据本身。
5 Negative Response Code
可以简称为NRC,或者叫错误响应码,是一个字节的无符号整数。它是诊断协议为每一种执行失败的诊断服务分配的失败原因代号。
6 Sub-function
有些诊断服务可以支持不同的诊断子服务,sub-function就是用来定义这种子服务的,它将某一个服务细分为更为具体的服务,它是一个字节的无符号整数。比如ECUReset这个服务就有0x01,0x02,0x03等几种sub-function指代具体的reset方式。
ISO14229系列之一:简介的更多相关文章
- 【原创】书本翻页效果booklet jquery插件系列之简介
booklet jquery插件系列之简介 本文由五月雨恋提供,转载请注明出处. 一.安装 1.添加CSS和Javascript 添加booklet CSS文件到你的页面. <link rel= ...
- RxJava系列1(简介)
RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...
- UNIX网络编程——epoll 系列函数简介、与select、poll 的区别
前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...
- OpenStack实践系列①openstack简介及基础环境部署
OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...
- epoll 系列函数简介、与select、poll 的区别
一.epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags) ...
- nginx高性能WEB服务器系列之一简介及安装
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- 【转载】 ISO14229系列之一:简介
转载链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍和总结,既是对自己学习的 ...
- 使用 robotframework 自动化测试系列 一 -----简介
robotframework 是自动化测试框架. Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可 ...
- 【转载】 ISO14229系列之二:诊断指令格式和相关概念
转载链接:http://www.cnblogs.com/autogeek/p/4458658.html 1. 简单的通信机制 其实诊断通信的机制很简单,可以类比client-server通信方式,即客 ...
随机推荐
- pyzmq missing when running ipython notebook
Q: I can run iPython, but when I try to initiate a notebook I get the following error: ~ ipython not ...
- node.js BootStrap安装
最近想用Bootstrap开发项目,以便使用其丰富的资源: 捯饬了一下nodejs的安装和配置:windows下弄起来还是比较狗屎的,两三天下班时间才弄好: http://xiaoyaojones.b ...
- 数据恢复-extundelete
http://extundelete.sourceforge.net/options.html 误删除/usr/share目录因此考虑恢复目录过程如下:1.选用extundelete软件来进行恢复,源 ...
- openssh
http://www.openssh.com/ OpenSSH is a FREE version of the SSH connectivity tools that technical users ...
- CARP-VRRP-HSRP
CARP-VRRP-HSRP http://www.openbsd.org/faq/pf/carp.html
- 一步一步理解Paxos算法
一步一步理解Paxos算法 背景 Paxos 算法是Lamport于1990年提出的一种基于消息传递的一致性算法.由于算法难以理解起初并没有引起人们的重视,使Lamport在八年后重新发表到 TOCS ...
- [activiti] Activiti 5.18 的Mybatis版本依赖问题
测试activiti 是查询Task时抛出一个异常: org.apache.ibatis.exceptions.PersistenceException: ### Error querying dat ...
- JCaptcha做验证码遇到的问题引出的思考
JCaptcha用来做用户登录时期的验证码的,但是今天将开放的应用系统部署到生产环境的时候,遇到了问题,总是提示验证码不对.后台报出来下面的错误: com.octo.captcha.service.C ...
- redhat编译安装cmake
将RHEL的yum软件源更换为CentOS的软件源之后,其中的cmake版本太低,为2.6.4版本,编译较新的软件时会提示cmake版本太低,所以有必要编译安装最新版的cmake. 1. 更换yu ...
- MySQL压缩包安装
1.解压缩 2.添加环境变量 3.添加配置文件 my.ini 4.以管理员身份初始化数据库 mysqld --initialize --user=mysql --console 5.以管理员身份将My ...