1.请求格式
        RoutineControl (31服务) ,用于对主机厂定义的一些特定程序的控制操作(启动程序、停止程序、请求运行结果)。关于31服务的请求格式如下:

(1)第2个字节routineControlType用于指定对程序的操作动作,其可选项如下(一般用得比较多的是01子服务):

    01:startRoutine(启动程序);
    02:stopRoutine(停止程序);
    03:requestRoutineResults(请求程序的运行结果)
        (2)第3、4字节routineIdentifier表示指定的程序ID;这些特定的程序信息一般由车厂规定释放;一般会在诊断调查表中体现。比如针对ECU的升级,一般需要指定以下几个特定的程序功能(具体ID由车厂规定):

  程序名+功能描述
  CheckProgrammingPreconditions(编程条件检查) 该程序用于对ECU升级条件(如车速信息等)的判断,在ECU的BootLoader与APP程序中一般都要有该程序功能的定义。一般用于进入编程会话之前。
  CheckAppSwAppDataValidity(检查数据的有效性,如CRC校验) 一般用于对升级数据中的每个块信息的CRC校验;ECU会将接收到的数据进行CRC计算,并与诊断仪计算发送过来的CRC进行比对;确保数据的准确性。
  EraseFlashMemory(擦除Flash内存) 用于对此次升级要用到的内存空间进行擦除操作。一般用于请求APP数据下载(34服务)之前。
  CheckProgrammingDependency(编程兼容性的检查 ) 用于升级完成后对升级信息的兼容性检查,例如对升级文件产品型号的检查,必要的逻辑块是否存在的检查等操作。一般用于完成所有数据的升级之后。
        (3)之后的数据代表可选记录参数routineControlOptionRecord;一般用于携带其他信息,如程序的启动条件、停止条件等;可根据实际需要进行使用;一般比较少用到。

2.肯定响应格式

ECU在收到对应的程序动作请求后,返回的肯定响应格式如下: 

其中,routineStatusRecord是可选参数,用于在执行相应程序动作后,返回ECU相关的信息(如请求31 02服务请求停止时ECU可以通过该参数返回该程序总运行时间等信息);可根据实际需要进行使用;一般比较少用到。 

3. 具体参数的配置

1.DCM模块应该实现UDS服务例程控制(0x31),用于子功能startRoutinestopRoutinerequestsRoutineResults。测试人员可以使用UDS服务0x31来启动、停止或获取由2字节routineldentifier标识的例程的结果。DCM模块配置包含DCM支持的routineldentifier列表(请参阅配置参数DcmDspRoutineldentifier)。对于每个“例程ID”,DCM配置规定:

  • 与此routineIdentifier关联的函数Xxx_Start()。 (配置参数 DcmDspStartRoutineFnc and DcmDspRoutineUsePort)
  • 请求和响应中可用的信号列表 。(配置参数 DcmDspStartRoutineIn and DcmDspStartRoutineOut)
  • 与此routineIdentifier关联的函数Xxx_Stop()。(配置参数 DcmDspStopRoutineFnc and DcmDspRoutineUsePort)
  • 请求和响应中可用的信号列表 。(配置参数 DcmDspStopRoutineIn and DcmDspStopRoutineOut)
  • 与此routineIdentifier关联的函数Xxx_RequestResults()。(配置参数  DcmDspRequestRoutineResultsFnc and DcmDspRoutineUsePort)
  • 响应中可用的信号列表 。(配置参数  DcmDspRequestRoutineResultsOut)

2.在接收UDS服务RoutineControl (0x31)时,Dcm模块应检查该例程是否受支持(请参阅配置参数DcmDspRoutine);如果不受支持,Dcm模块应发送NRC 0x31(请求超出范围)。

3.如果一个例程被设置为未使用(DcmDspRoutineUsed设置为FALSE), DCM应认为该例程不受支持(根据2)。

4.接收UDS服务RoutineControl (0x31)时,DCM模块应检查例程是否可以在当前会话中执行(请参阅配置参数DcmDspCommonAuthorizationRef)。如果不是。DCM模块应发送NRC Ox31(请求超出范围)。

5.当接收到UDS服务RoutineControl (0x31)时,DCM模块应该检查这个例程是否可以在当前安全级别执行(参见配置参数DcmDspCommonAuthorizationRef)。如果没有,DCM模块将发送NRC 0x33(安全访问被拒绝)。

6.当UDS服务RoutineControl (0x31)被接收时,Dcm模块应该检查相应例程的子函数是否被支持(子函数0x02的配置容器DcmDspStopRoutine的存在性);子函数DcmDspRequestRoutineResults上的数据是0x03)。如果没有,Dcm模块将发送NRC 0x12(不支持子函数)。

7.UDS服务RoutineControl (0x31)的接收,Dcm模块应检查例程是否可以在当前模式条件下执行(请参阅配置参数DcmDspCommonAuthorizationRef)。如果没有,Dcm模块应发送参考DcmModeRule的计算负响应代码。

8.当收到请求UDS服务RoutineControl (0x31)如果所有验证已成功完成(见2,4,5), Dcm模块依法分割routineControlOptionRecord收到的这个例程的输入信号配置列表(参见配置参数DcmDspStartRoutineln和DcmDspStopRoutineln)。

9.当收到请求UDS服务RoutineControl (0x31)与子功能startRoutine,如果所有验证已成功完成(见2,4,5), Dcm模块将调用已配置的Xxx_start()函数传递dataln开始,计算从routineControlOptionRecord(见8),该例程的输出信号配置列表中的dataOut引用(配置参数DcmDspStartRoutineOut)。根据DcmDspRoutineSignalType,数据链的数据长度可以是固定的,也可以是动态的。如果是动态的,则在参数currentDataLenath中提供datalength,参数currentDataLenath以字节为单位保存最后一个dataln参数的lenath。datalength只能在最后一个dataln参数上是动态的。

10.完成9时在完成SWS_Dcm_00400后,当Xxx_Start()不返回错误代码,Dcm模块应使用以下命令返回肯定响应:Xxx_Start()在dataOut中返回的数据作为例程信息和例程StatusRecord(dataOut根据输出信号列表合并为此例程配置(请参阅配置参数DcmDspStartRoutineOut)) dataOut的数据长度可以是固定的或动态的根据DcmDspRoutineSignalType。如果是动态的,则数据长度应为参数currentDataLength中提供的参数,该参数保存字节的长度最后一个dataOut参数。 数据长度只能在最后一个dataOut上是动态的参数。。

11.当接收请求UDS服务RoutineControl (0x31)与子功能stopRoutine,如果所有验证已成功完成(见2,4,5), Dcm模块将调用已配置 xxx_stop()函数传递dataln,计算从routineControlOptionRecord(见8),和根据此例程的输出配置signal列表的dataOut引用(参见配置参数DcmDspStopRoutineOut)。根据DcmDspRoutineSignalType,数据链的数据长度可以是固定的,也可以是动态的。如果是动态的,则datalength应该在参数currentDataLength中提供,该参数持有最后一个dataln参数的字节长度。datalength只能在最后一个dataln参数上是动态的。

12.当完成11时,收到UDS服务RoutineControl的请求时(0x31)具有子功能stopRoutine,如果所有验证均已成功完成(请参见2,4,5),DCM模块应该调用配置的Xxx_Stop()函数,并传递dataIn,该dataIn是从例程ControlOptionRecord(请参阅8)和dataOut参考根据为此例程配置的输出信号列表(请参阅配置参数DcmDspStopRoutineOut)。 dataIn的数据长度可以固定或根据DcmDspRoutineSignalType动态。 如果是动态的,则数据长度应为在参数currentDataLength中提供,该参数保存字节的长度(以字节为单位)最后一个dataIn参数。 数据长度只能在最后一个数据上是动态的参数。

13.当接收请求UDS服务RoutineControl (0x31)与子功能requestRoutineResults,如果所有验证已成功完成(见2,4,5) Dcm模块将调用已配置好的Xxx_RequestResults()函数提供dataOut参考列表的显示输出信号配置这个例程(参见配置参数DcmDspRequestRoutineResultsOut) 。

14.当完成13时Xxx_RequestResults() 没有返回错误代码,Dcm模块应当与积极的回应答复,Xxx_RequestResults() 返回的数据在dataOut routinelnfo和routineStatusRecord (dataOut合并根据这个例程的输出信号confiqured列表(见DcmDspReduestRoutineResults)实现方式参数)。根据DcmDspRoutineSignalType,数据输出的datalenath可以是固定的,也可以是动态的。如果是动态的,则datalength应该在参数currentDataLength中提供,该参数持有最后一个dataOut参数的字节长度。datalenath只能在最后一个dataOut参数上是动态的。

15.序列化所需AUTOSAR数据类型(有符号和无符号的int)从请求消息和响应消息的UDS服务RoutineControl目标字节顺序已配置的 DcmDspRoutineSignalEndianness应当考虑DcmDspRoutine信号有DcmDspRoutineSignalType设置为固定长度(DcmDspRoutineSignalType设置为VARIABLE_LENGTH以外的值)。如果DcmDspRoutineSignalEndianness不存在,则应改用DcmDspDataDefaultEndianness。

16.接待的UDS服务RoutineControl (0x31),对每一个请求消除OBD范围内(EO00-EOFF), Dcm模块应获取为OBD服务$8定义的RID值(See SWS_Dcm_00418 ,SWS_Dcm_00419),如果RID指的是对应的TID(见DcmDspRoutineTidRef)。

17.Dcm应按照ISO 14229-1[15]对RoutineControl 服务的NRC处理”。

18.接收UDS服务RoutineControl (0x31)时,Dcm模块应检查请求的总长度。如果请求长度错误,Dcm模块将发送NRC 0x13(错误的消息长度或无效的格式)给测试人员。

19. Dcm应在完成总长度检查和模式规则、安全级别和会话检查DcmDspCommonAuthorizationRef之后,调用SWC的相应例程函数。

20.DcmDspRoutine应该支持服务端口、回调函数或TID引用

21.如果不使用DcmDspRoutineTidRef,则DcmDspStartRoutine,DcmDspCommonAuthorizationRef和DcmDspRoutineUsePort应该是强制性的。

22.如果使用DcmDspRoutineTidRef,则应禁用DcmDspCommonAuthorizationRef、cmdsprequrequestroutineresults、dcmdspstop例程、DcmDspStartRoutine和DcmDspRoutineUsePort。

UDS 服务 Service 0x31 - RoutineControl相关推荐

  1. 基于UDS服务的BootLoader架构和刷写流程

    基于UDS服务的BootLoader架构和刷写流程 1. BootLoader支持的UDS服务 bootloader 不需要支持19/14等故障类服务 在boot程序中, 10/27/11/3E 这样 ...

  2. linux 进程间通信 dbus-glib【实例】详解三 数据类型和dteeth(类型签名type域)(层级结构:服务Service --> Node(对象、object) 等 )(附代码)

    linux 进程间通信 dbus-glib[实例]详解一(附代码)(d-feet工具使用) linux 进程间通信 dbus-glib[实例]详解二(上) 消息和消息总线(附代码) linux 进程间 ...

  3. AUTOSAR从入门到精通100讲(三)-基于UDS服务的BootLoader架构和刷写流程

    基于UDS的BootLoader下载,可以支持ECU生命周期的无限次刷写,通过CAN网络进行无需拆壳和DEBUG口的应用程序刷写,本文介绍了刷写服务和是三个阶段的刷写流程.也可通过无线模块实现空中升级 ...

  4. android打开位置服务,Android - 位置定位(Location)服务(Service)类的基本操作

    位置定位(Location)服务(Service)类的基本操作 本文地址: http://blog.csdn.net/caroline_wendy 定位服务(Location Service),能够确 ...

  5. S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改

    S32K程序,基于S32k144官方开发版 包含大部分驱动,和UDS程序,UDS服务需要自己改 :731000661854305913时间煮雨_______

  6. Windows服务(Service)安装及启动停止方案

    目录 一.创作背景 二.问题解决 2.1 安装Windows service服务 2.2 主方法Main()主方法改写 2.3 安装service服务/卸载service服务 2.4 服务启停 2.5 ...

  7. 开机启动一个服务Service,启动后没有界面后台暗暗运行

    原文来自:http://blog.163.com/shaocpa@126/blog/static/553577572012418103732417/ 如果开机启动一个Activity,开机首先看的界面 ...

  8. 服务Service的基本用法

    作为 Android四大组件之一, 服务也少不了有很多非常重要的知识点,那自然要从最基本的用法开始学习了. 定义一个服务: public class MyService extends Service ...

  9. ubuntu启动、关闭、重启服务service命令

    查看当前所有服务 service --status-all 结果如下: zwl@zwl-NB50TJ1-TK1:~$ service --status-all[ + ] acpid[ - ] alsa ...

最新文章

  1. JVM,JDK,JRE和OpenJDK有什么区别?
  2. counter()函数和most_common()函数
  3. 【Docker】docker安装redis
  4. [转]IIS的完整控制类
  5. [渝粤教育] 中国地质大学 计算机系统结构(新) 复习题
  6. java写入文件编码格式为ansi_Windows10 bat批处理删除 快速打开文件夹 固定到开始菜单或任务栏...
  7. windows史上最方便解压rar文件的软件WeDo
  8. opesnstack四部曲(1)---keystone
  9. Selenium基础篇之5-第一个完整的自动化测试脚本
  10. Spring boot 学习二:入门
  11. POJ3155 Hard Life
  12. 面试官问现在工资是多少,该怎么回答?
  13. winhex基础教程(更新中)
  14. 虚幻四C++入坑指南09:C++实现FPS游戏(3)Pitch Yaw Roll的作用 视角旋转 跳跃
  15. matlab求刚度,求整体刚度矩阵matlab程序
  16. Python 爬虫实践:《战狼2》豆瓣影评分析
  17. MIT6.824 2022 Fault-tolerant Key/Value Service
  18. navigator、history对象
  19. Jupyter Notebook切换conda虚拟环境
  20. 数据结构——图的邻接矩阵实现

热门文章

  1. css3实现书本翻页效果
  2. 如何实现一个简单的过滤器
  3. 小程序代码审核一二事
  4. 51单片机节日彩灯控制c语言,采用AT89C51单片机设计的可编程彩灯控制
  5. 类的继承关系,多态的体现,我的觉得题目还是有点欠缺
  6. 猎黑马决策股票炒股软件 主升浪战法 短线涨停
  7. 正则匹配某字符前的内容
  8. Atcoder题解与视频集
  9. 微信小程序开发之——星星评分等级显示
  10. RN vs Hybrid