1、0x83服务(访问时序参数服务)
0x83服务(访问时序参数服务)用于读取和改变通讯链路的时序参数,当通讯链路激活期间。
访问时序参数服务使用起来比较复杂,且取决于ECU能力及数据链路的拓扑结构。每个诊断会话仅支持一个扩展时序参数集合,因此只推荐采用物理寻址方法使用该服务,因为不同服务端的时序参数集合不同,不适合使用一对多型的功能寻址。
推荐使用如下服务顺序:
——诊断会话控制服务,DiagnosticSessionControl (diagnosticSessionType) service;
——访问时序参数(读取扩展时序参数集合)服务,AccessTimingParameter (readExtendedTimingParameterSet) service;
——访问时序参数(设置时序参数至指定值)服务,AccessTimingParameter (setTimingParametersToGivenValues) service;
如果要求ECU需要应答,那么在ECU对0x83服务做出肯定应答之后,ECU和客户端需要激活新的时序参数设置。如果不不允许ECU应答,那么在请求报文接收/发送之后,ECU和客户端需要激活新的时序参数设置。
服务端和客户端在成功完成会话跳转时,即使是同样的会话切换,应该重新设置时序参数到默认值(比如,通过诊断会话控制服务(0x10),ECU重启服务(0x11),或者是会话超时)。
访问时序参数服务提供了四种不同的访问时序参数的模式:
1)读取扩展时序参数集合,readExtendedTimingParameterSet;
2)设置时序参数至默认值,setTimingParametersToDefaultValues;
3)读取当前激活的时序参数值,readCurrentlyActiveTimingParameters;
4)设置时序参数至给定值,setTimingParametersToGivenValues;
2、请求报文格式
请求消息的格式定义:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | AccessTimingParameter Request SID | M | 0x83 |
#2 | sub-function = [ timingParameterAccessType ] | M | 0x00 – 0xFF |
#3 . . #n | TimingParameterRequestRecord [ byte#1 . . byte#m ] | M | 0x00 – 0xFF . . 0x00 – 0xFF |
TimingParameterRequestRecord参数值只有当timingParameterAccessType = setTimingParametersToGivenValues时才会出现,TimingParameterRequestRecord内容及结构依赖于数据链路层,在ISO14229实施规范中有详细定义。
请求报文中子函数参数定义说明:
访问时序参数服务采用子函数参数—timingParameterAccessType,来选择服务端具体的行为。timingParameterIdentifiers的使用及详解具体见下表(suppressPosRspMsgIndicationBit (bit 7)未描述):
Bits 6-0 | 描述 | 约定 |
---|---|---|
0x00 | ISOSAEReserved ISO保留 | M |
0x01 | readExtendedTimingParameterSet 当访问时序参数服务子函数timingParameterAccessType = readExtendedTimingParameterSet时,服务端应该读取扩展时序参数集合,也就是服务端能够支持的一些参数。 如果读取时序参数成功,服务端应该应答肯定应答参数。 如果读取时序参数失败,服务端应该应答带有NRC(否定应答码)的否定应答报文。 当timingParameterAccessType = setTimingParametersToGivenValues时,该子函数被用于提供当前激活诊断会话的一组额外时序参数集合,即能够读取给定的时间参数值。 | U |
0x02 | setTimingParametersToDefaultValues 当访问时序参数服务子函数timingParameterAccessType = setTimingParametersToDefaultValues时,服务端应该改变所有的时序参数值至默认值,并且在默认参数被应用之前,要求客户端能够先回答肯定应答报文(suppressPosRspMsgIndicationBit = FALSE,否则suppressPosRspMsgIndicationBit = TRUE,即不接收肯定应答报文,应该在请求报文被成功评估之后,默认参数再被应用)。 如果时序参数因为某种原因无法被改变至默认参数值,服务端应该维持当前激活的时序参数值,并且发送带NRC(否定应答码)的否定应答。 默认时序参数值的定义依靠于数据链路层的使用,并在ISO14229中有详细的定义。 | U |
0x03 | readCurrentlyActiveTimingParameters 当访问时序参数服务子函数timingParameterAccessType = readCurrentlyActiveTimingParameters时,服务端应该读取当前使用的时序参数值。 如果读取时序参数成功,服务端应该应答肯定应答参数。 如果读取时序参数失败,服务端应该应答带有NRC(否定应答码)的否定应答报文。 | U |
0x04 | setTimingParametersToGivenValues 当访问时序参数服务子函数timingParameterAccessType = setTimingParametersToGivenValues时,服务端应该检查在当前条件下时序参数是否可以被改变。 如果条件有效,服务端应该执行必须的动作,来改变时间参数到给定值。在新的时序参数被应用之前,服务端能够应答肯定应答报文(suppressPosRspMsgIndicationBit = FALSE,否则suppressPosRspMsgIndicationBit = TRUE,即不接收肯定应答报文,应该在请求报文被成功评估之后,默认参数再被应用)。 由于一些原因,时序参数值无法被改变,服务端应该维持当前激活的时序参数值,并且发送带NRC(否定应答码)的否定应答。 通过子函数参数timingParameterAccessType = readExtendedTimingParameterSet读取到的最大最小值,不可能设置时序参数在最大最小值区间的任意一组值。服务端的时序参数值只能被设置为用timingParameterAccessType = readExtendedTimingParameterSet 读取到的确切时序参数值。这样做的请求,服务端将会拒绝。 | U |
0x05 - 0xFF | ISOSAEReserved ISO保留 | M |
请求消息中数据参数定义说明:
该服务在请求报文中的数据参数定义如下表所示:
Definition |
---|
TimingParameterRequestRecord 通过子函数参数timingParameterAccessType = setTimingParametersToGivenValues,设置时序参数值为指定值时,该数据记录包含了设定的指定值。参数记录的内容和格式以在ISO14229-3中被详细定义。 |
3、肯定应答报文
肯定应答报文格式定义如下:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | AccessTimingParameter Request SID | M | 0xC3 |
#2 | timingParameterAccessType | M | 0x00 – 0x7F |
#3 . . #n | TimingParameterRequestRecord [ byte#1 . . byte#m ] | M | 0x00 – 0xFF . . 0x00 – 0xFF |
TimingParameterResponseRecord值只有当子函数参数timingParameterAccessType = readExtendedTimingParameterSet 或者 readCurrentlyActiveTimingParameters时才会出现。TimingParameterResponseRecord的值在ISO14229中的数据链路层有详细的定义。
肯定应答报文数据参数定义:
Definition |
---|
timingParameterAccessType 请求报文中子函数参数中的 bits 6 - 0 |
TimingParameterResponseRecord 该参数记录的是通过子函数参数timingParameterAccessType = readExtendedTimingParameterSet 或者 readCurrentlyActiveTimingParameters读取的时序参数值。 |
4、支持的否定应答码(NRC_)
对于访问时序参数服务,实施了如下否定应答码。当服务端在错误场景下,使用了该服务,则会答复对应的否定应答码。
NRC | 描述 |
---|---|
0x12 | sub-functionNotSupported 表示子函数参数不被支持时,会发送该NRC |
0x13 | incorrectMessageLengthOrInvalidFormat 表示消息长度不正确或格式无效时,会发送该NRC |
0x22 | conditionsNotCorrect 表示使用访问时间参数的条件不满足时,会发送该NRC |
0x31 | requestOutOfRange 表示TimingParameterRequestRecord包含了无效的参数值时,会发送该NRC |
5、0x83服务(访问时序参数服务)使用案例
例1:设置时序参数为默认值,
访问时序参数服务请求报文使用案例如下,该报文展示了如何设置服务端的时序参数为默认值,由Tester发送给ECU:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | AccessTimingParameter Request SID | 0x83 |
#2 | timingParameterAccessType = setTimingParametersToDefaultValues; suppressPosRspMsgIndicationBit = FALSE | 0x02 |
访问时序参数服务肯定应答报文见下表,由ECU答复Tester:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | AccessTimingParameter Response SID | 0xC3 |
#2 | timingParameterAccessType = setTimingParametersToDefaultValues | 0x02 |