【ISO14229_UDS_0x2A服务详解】
本文介绍了0x2A服务(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据服务)的使用说明
目录
1、0x2A服务(ReadDataByPeriodicIdentifer,根据周期数据标识符读取数据)
Service description:
0x2A服务(ReadDataByPeriodicIdentifier,根据周期标识符读取数据服务)允许客户端从服务端请求周期性传输的数据记录值(一个或者多个周期标识符)。
客户端请求报文中包含了一个或者多个1字节型的周期标识符(periodicDataIdentifier)的值,其标识了在服务端所维护的数据记录。周期标识符(periodicDataIdentifier)是数据标识符(DID)的低字节,0xF200 - 0xF2FF范围的DID,被用来表示periodicDataIdentifier,比如数据标识符(DID) 0xF2E3中周期标识符(periodicDataIdentifier) 为0xE3。
数据记录(dataRecord)的格式和定义应该由车辆制造厂商指定,这些数据记录(dataRecord)可能会包括模拟量输入和输出信号,数字输入和输出信号,内部数据以及系统状态信息。
当收到非stopSending的0x2A服务(根据周期标识符读取数据服务)的请求时,服务端应该检查条件是否满足去执行该服务。
在给定的时间内,只有一种transmissionMode参数来支持periodicDataIdentifier。在接收到请求报文要求将transmissionMode参数为同一个periodicDataIdentifier设置新的schedule时,会执行对periodicDataIdentifier的schedule更改。应车辆制造商的要求,会支持不同的周期标识符(periodicDataIdentifier)对应多个schedule。
发送初始的肯定应答报文之后,服务端会去访问由周期标识符(periodicDataIdentifier)指定的记录的数据元素值,并在单独的周期性数据响应报文中去传输每个periodicDataIdentifier的值,这些值会包含相关的dataRecord参数,如周期标识符(periodicDataIdentifier)参数,和周期标识符(periodicDataIdentifier)的数据,但是不包括肯定应答服务的标识符。在ISO 14229的实现规范中描述了周期性响应消息到某些数据链路层的映射。
对于一个指定transmissionMode的周期速率,当只有单个周期标识符(periodicDataIdentifier)被调度时,周期速率被定义为在任意的两个连续响应报文并且有同样的周期标识符(periodicDataIdentifier)参数间的时间。如果多个周期标识符(periodicDataIdentifier)被同时调度时,在同一个周期标识符(periodicDataIdentifier)之间的有效期将会基于如下设计参数来变化:
—— 周期调度程序的调用率,
—— 每个调度器分配的可用协议特定的周期数据响应报文地址信息id的数量(例如,CAN上的CAN标识符)
—— 可以被定义并行同时传输的周期标识符(periodicDataIdentifier)数量。
如果同时传输多个周期标识符(periodicDataIdentifier),这些参数值将影响相同periodicDataIdentifier之间有效时间增加的程度。因此,上述所有设计参数均由车辆制造商指定。每次调用周期调度器时,它将确定是否有任何periodicDataIdentifiers准备好传输。
例如,两个不同的ECU实现可能都支持一个周期速率为10ms的快速传输模式和一个唯一的周期数据响应消息的地址信息ID。如果第一个实现每隔10ms调用周期性调度器,那么当调度两个periodicDataIdentifier时,相同periodicDataIdentifier之间的时间将增加到20 ms,而当调度四个periodicDataIdentifier时,时间将增加到40 ms。如果第二个实现每5 ms调用一次周期性调度器,那么当调度两个periodicDataIdentifier时,相同periodicDataIdentifier之间的时间间隔将保持在10 ms,而当调度四个periodicDataIdentifier时,时间间隔将增加到20 ms。
当服务端接收到包含transmissionMode stopSending的ReadDataByPeriodicIdentifier请求时,服务端将停止周期性传输请求报文中所包含的periodicDataIdentifier,或者如果请求消息中没有指定特定的periodicDataIdentifier,则停止传输所有的periodicDataIdentifier。此transmissionMode的响应消息仅包含服务标识符(SID)。
服务端可以根据车辆制造商和系统供应商的协议,限制可以同时支持的periodicDataIdentifiers的数量。超过可同时支持的periodicDataIdentifier的最大数量将导致单个否定应答,并且该请求中的任何periodicDataIdentifier都不会被安排。不允许在单个请求报文中重复相同的periodicDataIdentifier,如果客户端违反了此规则,则服务端将忽略除一个periodicDataIdentifier之外的所有内容。
2、请求报文格式
2.1 请求报文定义
请求报文的定义:
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | ReadDataByPeriodicIdentifier Request SID | M | 0x2A |
#2 | transmissionMode | M | 0x00 - 0xFF |
#3 | periodicDataIdentifier[]#1 | C | 0x00 - 0xFF |
. . | . . | . . | . . |
#m + 2 | periodicDataIdentifier[]#m | U | 0x00 - 0xFF |
C:如果transmissionMode等于sendAtSlowRate、sendAtMediumRate或sendAtFastRate,则第一个periodicDataIdentifier必须出现在请求报文中。在transmissionMode等于stopSending的情况下,为了停止所有计划的periodicDataIdentifier,可以不存在任何periodicDataIdentifier,或者客户端可以显式指定一个或多个要停止的periodicDataIdentifier。
2.2 请求报文中子函数参数定义
该服务未使用子函数参数。
2.3 请求报文中数据参数定义
该服务在请求报文中的数据参数定义如下表所示:
定义 |
---|
transmissionMode 该参数标识了服务端要使用的请求periodicDataIdentifiers的传输速率,其传输速率详见下表。 |
periodicDataIdentifier (#1 to #m) 该参数标识了客户端正在请求服务端的数据记录,单个请求报文中可以请求多个periodicdataidentifier。 |
下表定义了transmissionMode参数
字节值 | 描述 | 约定 |
---|---|---|
0x00 | ISOSAEReserved ISO保留 | M |
0x01 | sendAtSlowRate 此参数指定服务端应以慢速传输请求的dataRecord信息以应答请求报文(其中要发送的应答 = maximumNumberOfResponsesToSend)。由transmissionMode参数(slow)指定的重复率是由车辆制造商指定的,并且在服务器中预定义。 | U |
0x02 | sendAtMediumRate 此参数指定服务端应以中速传输请求的dataRecord信息以应答请求报文(其中要发送的应答 = maximumNumberOfResponsesToSend)。由transmissionMode参数(medium)指定的重复率是由车辆制造商指定的,并且在服务器中预定义。 | U |
0x03 | sendAtFastRate 此参数指定服务端应以快速传输请求的dataRecord信息以应答请求报文(其中要发送的应答 = maximumNumberOfResponsesToSend)。由transmissionMode参数(fast)指定的重复率是由车辆制造商指定的,并且在服务器中预定义。 | U |
0x04 | stopSending 服务端停止发送周期/重复性地肯定应答报文。注意,如果ransmissionMode = stopSending, maximumNumberOfResponsesToSend参数应该设置为0x01,否则服务器操作可能是未定义的。 | U |
0x05 - 0xFF | ISOSAEReserved ISO保留 | M |
3、肯定应答报文
3.1 肯定应答报文格式定义
必须区分初始的肯定应答报文(表示服务端接受0x2A服务和后续的周期性数据响应消息),包括periodicDataIdentifier数据。下表定义了服务端在接受请求时,需要传输的初始肯定应答报文。
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | ReadDataByPeriodicIdentifier Response SID | M | 0x6A |
周期数据标识符(periodicDataIdentifier)的数据会以请求报文中transmissionMode参数所表示的速率去周期性地传输。在初始的肯定应答之后,对于请求报文中每个支持的periodicDataIdentifier,服务端将开始发送单个周期性数据响应消息,定义如下。
字节序号 | 参数值 | 约定 | 字节值 |
---|---|---|---|
#1 | periodicDataIdentifier | M | 0x00 - 0xFF |
#2 . . #k+2 | dataRecord[] = [ data#1 . . data#k ] ] | M . . U | 0x00 – 0xFF . . 0x00 – 0xFF |
3.2 肯定应答报文数据参数定义
下表定义了周期消息中数据参数:
Definition |
---|
periodicDataIdentifier 请求报文中的周期DID。 |
dataRecord 0x2A服务(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)肯定应答报文中提供给客户端的数据记录值。 |
4、支持的否定应答码(NRC_)
本服务应实施如下否定响应代码,下表记录了每个应答代码发生的情况,如果服务端在错误场景使用了该服务,则应使用如下列出的否定响应代码。
NRC | 描述 |
---|---|
0x13 | incorrectMessageLengthOrInvalidFormat 请求报文长度不正确或者客户端超出periodicDataIdentifiers的最大值,会发送该NRC |
0x22 | conditionsNotCorrect 服务端的运行条件不满足去执行请求的动作时,会发送该NRC。如果客户端请求具有不同传输模式(transmissionModes)的periodicDataIdentifiers,并且服务端不支持同时使用多个传输模式,则可能发生这种情况。 |
0x31 | requestOutOfRange 如下情况发送该NRC: — 请求的周期DID值一个都不被设备所支持; — 在当前会话下,请求的周期DID值一个都不被支持; — 指定的传输模式(transmissionMode)不被设备所支持; — 请求的动态定义DID(dynamicDefinedDataIdentifier)还没被分配; — 客户端超过了允许同时调度的periodicDataIdentifiers的最大数量; |
0x33 | SecurityAccessDenied 至少一个周期DID是保密的,并且服务端处于上锁状态,会发送该NRC |
0x2A服务(ReadDataByPeriodicIdentifier)的否定应答码(NRC)具体处理过程如下图所示:
5、0x2A服务(ReadDataByPeriodicIdentifer,根据周期数据标识符读取数据)案例说明
Assumptions:
如下案例中展示了0x2A服务是如何运行的,客户端可以在任何时候请求与服务端状态无关的数据标识符(DID)的换算数据。如下案例特定于动力总成(如发动机控制模块)
例1:Read multiple periodicDataIdentifiers 0xE3 and 0x24 at medium rate
Assumptions:
该示例演示了请求多个dataIdentifier(dataIdentifier 0xF2E3,其中periodicDataIdentifier 为0xE3 )包含了发动机冷却液温度、油门位置、发动机转速、车速传感器,并且 dataIdentifier 0xF224,其中periodicDataIdentifier 为0x24 包含了电池电压、歧管绝对压力、空气质量流量、车辆气压和计算负载值。
客户端以中等速率请求传输,在获取周期性数据一段时间后,客户端仅停止传输periodicDataIdentifier 0xE3。
Step #1: Request periodic transmission of the periodicDataIdentifiers
案例1步骤1 0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的请求报文使用如下,由客户端发向服务端(ECU):
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByPeriodicIdentifier Request SID | 0x2A |
#2 | transmissionMode = sendAtMediumRate | 0x02 |
#3 | periodicDataIdentifier#1 | 0xE3 |
#4 | periodicDataIdentifier#2 | 0x24 |
案例1步骤1 0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的初始肯定应答报文见下表,由服务端(ECU)发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByPeriodicIdentifier Response SID | 0x6A |
下表定义了接下来的0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的肯定应答报文1:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | periodicDataIdentifier#1 | 0xE3 |
#2 | dataRecord [ data#1 ] = ECT | 0xA6 |
#3 | dataRecord [ data#2 ] = TP | 0xTP |
#4 | dataRecord [ data#3 ] = RPM | 0x07 |
#5 | dataRecord [ data#4 ] = RPM | 0x50 |
#6 | dataRecord [ data#5 ] = VSS | 0x00 |
下表定义了接下来的0x2A(ReadDataByPeriodicIdentifier,根据周期数据标识符读取数据)的肯定应答报文2:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | periodicDataIdentifier#1 | 0x24 |
#2 | dataRecord [ data#1 ] = B+ | 0x8C |
#3 | dataRecord [ data#2 ] = MAP | 0x20 |
#4 | dataRecord [ data#3 ] = MAF | 0x1A |
#5 | dataRecord [ data#4 ] = BARO | 0x63 |
#6 | dataRecord [ data#5 ] = LOAD | 0x4A |
服务端以中等速率传输上述所示的后续响应消息。
Step #2: Stop the transmission of the periodicDataIdentifiers
下表定义了案例1步骤2中的请求报文,由客户端发向服务端(ECU):
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByPeriodicIdentifier Request SID | 0x2A |
#2 | transmissionMode = stopSending | 0x04 |
#3 | periodicDataIdentifier#1 | 0xE3 |
案例1步骤2肯定应答报文见下表,由服务端(ECU)发往客户端:
字节顺序 | Description | 字节值 |
---|---|---|
#1 | ReadDataByPeriodicIdentifier Response SID | 0x6A |
服务端只停止传输periodicDataIdentifier 0xE3。而periodicDataIdentifier 0x24仍然以中等速率传输。
例2:Graphical and tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates
ReadDataByPeriodicIdentifier example overview
该案例中包含了一个周期数据的示例,其中有一个ReadDataByPeriodicIdentifier (0x2A)服务的图形和表格示例。
该示例包含在客户端和服务端应用程序之间传输的消息(请求/响应)的图形描述,随后是一个表,该表显示了服务端周期性调度器的可能的实现,其变量以及每次检查周期性调度器的后台函数执行时它们是如何变化的。
在下面案例中,定义了以下实现:
—— 快速周期速率为25ms,中周期速率为300ms。
—— 周期调度器每12.5 ms检查一次,这意味着周期调度器后台函数在此周期内被调用(轮询)。每次调用后台周期调度器时,它将遍历调度器条目,直到发送一个周期标识符,或者直到调度器中的所有标识符都已检查并且没有一个条目是准备好发送的。在示例实现中,当遍历调度程序以查看标识符是否准备好进行传输时,表中的“周期性调度程序传输索引”变量是第一个检查的索引。
—— 可以同时调度的periodicDataIdentifiers的最大数量为4。
—— 分配一个唯一的周期性数据响应消息的地址信息ID。
由于周期调度器轮询率为12.5 ms,因此每次发送快速周期速率的periodicDataIdentifier时,快速周期速率的循环计数器将设置为2(该值是基于调度速率(25 ms)除以周期调度器的轮询率(12.5 ms)得出),而每次发送中速率时,中速周期速率的循环计数器将重置为24(调度的速率去除以周期调度器的轮询率300 / 12.5)。
Read multiple periodicDataIdentifiers 0xE3 and 0x24 at medium rate
在t = 0,0 ms时,客户端开始以中等速率(300 ms)发送请求去调度2个 periodicDataIdentifiers (0xF2E3和0xF224)。对于本例,服务端在第一次t = 25.0 ms时接收请求并执行周期性调度器的后台函数。
下表显示了服务端中周期性调度器的一种可能实现。该表包含周期调度器变量,以及每次执行检查周期调度器的后台函数时它们是如何变化的。
time | periodic scheduler transmit Index | periodic identifier sent | periodic scheduler loop # | scheduler[0] transmit count | scheduler[1] transmit count |
---|---|---|---|---|---|
25.0 | 0 | 0xE3 | 1 | 0->24 | 0 |
37.5 | 1 | 0x24 | 2 | 23 | 0->24 |
50.0 | 0 | None | 3 | 22 | 23 |
62.5 | 0 | None | 4 | 21 | 22 |
75.0 | 0 | None | 5 | 20 | 21 |
87.5 | 0 | None | 6 | 19 | 20 |
100.0 | 0 | None | 7 | 18 | 19 |
112.5 | 0 | None | 8 | 17 | 18 |
125.0 | 0 | None | 9 | 16 | 17 |
137.5 | 0 | None | 10 | 15 | 16 |
150.0 | 0 | None | 11 | 14 | 15 |
162.5 | 0 | None | 12 | 13 | 14 |
175.0 | 0 | None | 13 | 12 | 13 |
187.5 | 0 | None | 14 | 11 | 12 |
200.0 | 0 | None | 15 | 10 | 11 |
212.5 | 0 | None | 16 | 9 | 10 |
225.0 | 0 | None | 17 | 8 | 9 |
237.5 | 0 | None | 18 | 7 | 8 |
250.0 | 0 | None | 19 | 6 | 7 |
262.5 | 0 | None | 20 | 5 | 6 |
275.0 | 0 | None | 21 | 4 | 5 |
287.5 | 0 | None | 32 | 3 | 4 |
300.0 | 1 | None | 23 | 2 | 3 |
312.5 | 0 | None | 24 | 1 | 2 |
325.0 | 0 | 0xE3 | 25 | 0->24 | 1 |
337.5 | 0 | 0x24 | 26 | 23 | 0->24 |
350.0 | 0 | None | 27 | 22 | 23 |
362.5 | 0 | None | 28 | 21 | 22 |
例3:Graphical and tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates
ReadDataByPeriodicIdentifier example overview
该案例中包含了一个周期数据的示例,其中有一个ReadDataByPeriodicIdentifier (0x2A)服务的图形和表格示例。
该示例包含在客户端和服务端应用程序之间传输的消息(请求/响应)的图形描述,随后是一个表,该表显示了服务端周期性调度器的可能的实现,其变量以及每次检查周期性调度器的后台函数执行时它们是如何变化的。
Read multiple periodicDataIdentifiers at different periodic rates
在本例中,以快速周期速率(25 ms)调度三个periodicDataIdentifier (0x01、0x02、0x03),然后发送另一个请求,以中等周期速率(300 ms)调度单个periodicDataIdentifier (0x04)。在本例中,服务端接收到第一个ReadDataByPeriodicIdentifier请求(1),发送一个没有任何周期数据的肯定应答(2),并且在t = 25.0 ms时第一次执行周期调度器的后台函数(3)。服务端发送一个没有任何周期性数据的肯定应答(7),并在t = 62.5 ms时(8)以300 ms的预定中速率开始执行周期性调度器的后台函数。
关键步骤:
1 ReadDataByPeriodicIdentifier (0x2A, 0x03, 0xF201, 0xF202, 0xF203) request message (sendAtFastRate)
2 ReadDataByPeriodicIdentifier positive response message (0x6A, no data included)
3 ReadDataByPeriodicIdentifier periodic data response message (0x01, 0xXX, …, 0xXX)
4 ReadDataByPeriodicIdentifier periodic data response message (0x02, 0xXX, …, 0xXX)
5 ReadDataByPeriodicIdentifier (0x2A, 0x02, 0xF204) request message (sendAtMediumRate)
6 ReadDataByPeriodicIdentifier periodic data response message (0x03, 0xXX, …, 0xXX)
7 ReadDataByPeriodicIdentifier positive response message (0x6A, no data included)
8 ReadDataByPeriodicIdentifier periodic data response message (04, 0xXX, …, 0xXX)
下表显示了服务端中周期性调度器的一种可能实现。该表包含周期调度器变量,以及每次执行检查周期调度器的后台函数时它们是如何变化的。
time | periodic scheduler transmit Index | periodic identifier sent | periodic scheduler loop # | scheduler[0] transmit count | scheduler[1] transmit count | scheduler[2] transmit count | scheduler[3] transmit count |
---|---|---|---|---|---|---|---|
25.0 | 0 | 0x01 | 1 | 0->2 | 0 | 0 | N/A |
37.5 | 1 | 0x02 | 2 | 1 | 0->2 | 0 | N/A |
50.0 | 2 | 0x03 | 3 | 0 | 1 | 0->2 | 0 |
62.5 | 3 | 0x04 | 4 | 0 | 0 | 1 | 0->24 |
75.0 | 0 | 0x01 | 5 | 0->2 | 0 | 0 | 23 |
87.5 | 1 | 0x02 | 6 | 1 | 0->2 | 0 | 22 |
100.0 | 2 | 0x03 | 7 | 0 | 1 | 0->2 | 21 |
112.5 | 3 | 0x01 | 8 | 0->2 | 0 | 1 | 20 |
125.0 | 1 | 0x02 | 9 | 1 | 0->2 | 0 | 19 |
137.5 | 2 | 0x03 | 10 | 0 | 1 | 0->2 | 18 |
150.0 | 3 | 0x01 | 11 | 0->2 | 0 | 1 | 17 |
162.5 | 1 | 0x02 | 12 | 1 | 0->2 | 0 | 16 |
175.0 | 2 | 0x03 | 13 | 0 | 1 | 0->2 | 15 |
187.5 | 3 | 0x01 | 14 | 0->2 | 0 | 1 | 14 |
200.0 | 1 | 0x02 | 15 | 1 | 0->2 | 0 | 13 |
212.5 | 2 | 0x03 | 16 | 0 | 1 | 0->2 | 12 |
225.0 | 3 | 0x01 | 17 | 0->2 | 0 | 1 | 11 |
237.5 | 1 | 0x02 | 18 | 1 | 0->2 | 0 | 10 |
250.0 | 2 | 0x03 | 19 | 0 | 1 | 0->2 | 9 |
262.5 | 3 | 0x01 | 20 | 0->2 | 0 | 1 | 8 |
275.0 | 1 | 0x02 | 21 | 1 | 0->2 | 0 | 7 |
287.5 | 2 | 0x03 | 22 | 0 | 1 | 0->2 | 6 |
300.0 | 3 | 0x01 | 23 | 0->2 | 0 | 1 | 5 |
312.5 | 1 | 0x02 | 24 | 1 | 0->2 | 0 | 4 |
325.0 | 2 | 0x03 | 25 | 0 | 1 | 0->2 | 3 |
337.5 | 3 | 0x01 | 26 | 0->2 | 0 | 1 | 2 |
350.0 | 1 | 0x02 | 27 | 1 | 0->2 | 0 | 1 |
362.5 | 2 | 0x03 | 28 | 0 | 1 | 0->2 | 0 |
375.0 | 3 | 0x04 | 29 | 0 | 0 | 1 | 0->24 |
387.5 | 0 | 0x01 | 30 | 0->2 | 0 | 0 | 23 |
例4:Tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates
ReadDataByPeriodicIdentifier example overview
该案例中包含了一个周期数据的示例,其中有一个ReadDataByPeriodicIdentifier (0x2A)服务的表格示例。
该示例包含在客户端和服务端应用程序之间传输的消息(请求/响应)的图形描述,随后是一个表,该表显示了服务端周期性调度器的可能的实现,其变量以及每次检查周期性调度器的后台函数执行时它们是如何变化的。
在下面案例中,定义了以下信息:
—— 快速周期速率为10ms。
—— 周期调度器每10ms检查一次,这意味着在此周期内调用(轮询)周期调度器的后台函数。
—— 可以同时调度的periodicDataIdentifiers的最大数量为16。
—— 分配两个唯一的周期数据响应消息地址信息id。
由于周期调度器轮询率为10 ms,因此每次发送快速周期速率的periodicDataIdentifier时,快速周期速率的循环计数器将设置为1(该值基于调度速率(10 ms)除以周期调度器的轮询率(10 ms))。
在t = 0,0 ms时,客户端开始以快速周期速率(10 ms)发送请求去调度2个 periodicDataIdentifier(为简单起见,为0x01, 0x02)。对于本例,服务器在第一次t = 10 ms时接收请求并执行周期性调度器的后台函数。
Time | Response message ID# | Periodic identifier sent | Periodic scheduler loop # |
---|---|---|---|
10 | 1 | 0x01 | 1 |
10 | 2 | 0x02 | 1 |
20 | 1 | 0x01 | 2 |
20 | 2 | 0x02 | 2 |
30 | 1 | 0x01 | 3 |
30 | 2 | 0x02 | 3 |
40 | 1 | 0x01 | 4 |
40 | 2 | 0x02 | 4 |
50 | 1 | 0x01 | 5 |
50 | 2 | 0x02 | 5 |
60 | 1 | 0x01 | 6 |
60 | 2 | 0x02 | 6 |
70 | 1 | 0x01 | 7 |
70 | 2 | 0x02 | 7 |
80 | 1 | 0x01 | 8 |
80 | 2 | 0x02 | 8 |
90 | 1 | 0x01 | 9 |
90 | 2 | 0x02 | 9 |
100 | 1 | 0x01 | 10 |
100 | 2 | 0x02 | 10 |
例5:Tabular example of ReadDataByPeriodicIdentifier service periodic schedule rates
ReadDataByPeriodicIdentifier example overview
在t = 0,0 ms时,客户端开始以快速的周期速率(10 ms)发送请求去调度3个 periodicDataIdentifier(为简单起见,为0x01、0x02、0x03)。对于本例,服务器在第一次t = 10 ms时接收请求并执行周期性调度器的后台函数。
Time | Response message ID# | Periodic identifier sent | Periodic scheduler loop # |
---|---|---|---|
10 | 1 | 0x01 | 1 |
10 | 2 | 0x02 | 1 |
20 | 1 | 0x03 | 2 |
20 | 2 | 0x01 | 2 |
30 | 1 | 0x02 | 3 |
30 | 2 | 0x03 | 3 |
40 | 1 | 0x01 | 4 |
40 | 2 | 0x02 | 4 |
50 | 1 | 0x03 | 5 |
50 | 2 | 0x01 | 5 |
60 | 1 | 0x02 | 6 |
60 | 2 | 0x03 | 6 |
70 | 1 | 0x01 | 7 |
70 | 2 | 0x02 | 7 |
80 | 1 | 0x03 | 8 |
80 | 2 | 0x01 | 8 |
90 | 1 | 0x02 | 9 |
90 | 2 | 0x03 | 9 |
100 | 1 | 0x01 | 10 |
100 | 2 | 0x02 | 10 |
更多推荐
所有评论(0)