转载链接: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系列之一:简介的更多相关文章

  1. 【原创】书本翻页效果booklet jquery插件系列之简介

    booklet jquery插件系列之简介 本文由五月雨恋提供,转载请注明出处. 一.安装 1.添加CSS和Javascript 添加booklet CSS文件到你的页面. <link rel= ...

  2. nginx高性能WEB服务器系列之一简介及安装

    nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...

  3. RxJava系列1(简介)

    RxJava系列1(简介) RxJava系列2(基本概念及使用介绍) RxJava系列3(转换操作符) RxJava系列4(过滤操作符) RxJava系列5(组合操作符) RxJava系列6(从微观角 ...

  4. UNIX网络编程——epoll 系列函数简介、与select、poll 的区别

    前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...

  5. OpenStack实践系列①openstack简介及基础环境部署

    OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...

  6. epoll 系列函数简介、与select、poll 的区别

    一.epoll 系列函数简介 #include <sys/epoll.h> int epoll_create(int size); int epoll_create1(int flags) ...

  7. 【转载】 ISO14229系列之二:诊断指令格式和相关概念

    转载链接:http://www.cnblogs.com/autogeek/p/4458658.html 1. 简单的通信机制 其实诊断通信的机制很简单,可以类比client-server通信方式,即客 ...

  8. ISO14229系列之一:简介

    作者:autogeek 原文链接:http://www.cnblogs.com/autogeek/p/4458591.html 前言 由于工作中经常用到ISO-14229,因此决定对该协议做个总体介绍 ...

  9. 转载LINQ系列OrderBy(), ThenBy()简介

    前言 前面两篇分别介绍了 Where() 与 Select() ,这篇则是要介绍 OrderBy() 与 ThenBy() ,这几个东西看起来最像 SQL 上会用到的语法,但切记一点,这边介绍的是 L ...

随机推荐

  1. java中的一些规则(菜鸟的课堂笔记)

    ls 查看目录下文件 java规则 代码都定义在类中,用class定义 禁止一个源文件写两个类: 一个源文件中,只能有一个类文件是pubic: 一个源文件中如果有多个类,编译完之后会产生多个class ...

  2. Python的核心数据结构

    数据结构 例子 数字 1234,3.1415,3+4j 字符串 'spam'."grace's" 列表 [1,[2,'three'],4] 字典 {'food':'spam','t ...

  3. 每天一个JS 小demo之留言板。主要知识点:DOM方法的理解和运用

    <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...

  4. ionic2新手入门整理,搭建环境,创建demo,打包apk,热更新,优化启动慢等避坑详解

    onic官方文档链接:http://ionicframework.com/docs/ 如果是新的环境会有很多坑,主要是有墙,请仔细阅读每个步骤 文档包含以下内容: l  环境搭建 l  创建demo并 ...

  5. Elasticsearch VS Solr

    最近公司用到了ES搜索引擎,调研发现大公司常用的搜索引擎还有Solr. 鉴于 Lucene 强大的特性和稳定性,有很多种基于 Lucene 封装的企业级搜索平台.其中最流行有两个:Apache Sol ...

  6. Oracle ORA-39726压缩表删除字段处理方法

    今天在往一个压缩表增加一个字段可以增加成功,但在删除的时候报了个ORA-39726 unsupported add/drop column operation on compressed tables ...

  7. python大规模爬取京东

    python大规模爬取京东 主要工具 scrapy BeautifulSoup requests 分析步骤 打开京东首页,输入裤子将会看到页面跳转到了这里,这就是我们要分析的起点 我们可以看到这个页面 ...

  8. [项目记录]一个.net下使用HAP实现的吉大校园通知网爬虫工具:OAWebScraping

    第一章 简介 本文主要介绍了在.NET下利用优秀的HTML解析组件HtmlAgilityPack开发的一个吉林大学校内通知oa.jlu.edu.cn的爬取器.尽管.Net下解析HTML文件有很多种选择 ...

  9. 使用 Socket.IO 开发聊天室

    前言 Socket.IO 是一个用来实现实时双向通信的框架,其本质是基于 WebSocket 技术. 我们首先来聊聊 WebSocket 技术,先设想这么一个场景: · 用户小A,打开了某个网站的充值 ...

  10. HTML基本文件, CSS基础

    HTML 一.HTML基本文件 [meta标签]        1.charset属性:单独使用.设置文档字符集编码格式.        >>>写法:<meta charset ...