• DCM之诊断会话层(DSL)详解二


    ResponseOnEvent的预配置
    [SWS_Dcm_00908] DDcm仅支持在配置中预先配置的Roe请求。
    注意:预先配置使Dcm可以自由地优化未配置的请求。
    [SWS_Dcm_00909] DDcm支持配置容器DcmDspRoe来配置所有受支持的ResponseOnEvent设置请求。
    [SWS_Dcm_00954]如果DcmDspRoeInitialEventStatus设置为
    DCM_ROE_STOPPED Dcm的行为应类似于以下RoeEvent:将StorageState设置为“ StoreEvent”,将EvetenWindowTime设置为infinity。
    根据SWS_Dcm_00954和SWS_Dcm_00897,RoeEvent的预配置应具有与在先前驾驶周期中收到的设置和启动请求相同的行为。如果在start / stop / clearedResponseOnEventRequest中设置了storageState,则预配置将被新接收的请求替换。


    事件触发的处理
    ROE事件触发onDTCStatusChange(0x01)
    如果RoeEvent处于“ ROE启动”状态,并且配置为onDTCStatusChange(请参见容器DcmDspRoeEvent),则Dcm在Dem报告适合于请求的DTCStatusMask的DTCStatusChange时立即触发ServiceToResponseTo。根据SWS_Dcm_00909,Dcm仅支持预配置的ROE请求。因此容器如果应使用onDTCStatusChange,则需要配置DcmDspRoeOnDTCStatusChange。

    [SWS_Dcm_00912]⌈如果一个RoeEvent的状态配置为
    Dcm应将onDTCStatusChange更改为“ ROE已启动”
    Dem_DcmControlDTCStatusChangedNotification(TRUE)触发DTC状态更改报告到Dcm.
    [SWS_Dcm_00913]⌈如果RoeEvent的状态,配置为
    在OnDTCStatusChange上,Dcm将调用“ ROE启动”
    Dem_DcmControlDTCStatusChangedNotification(FALSE)停止触发向Dcm的DTC状态更改报告。
    [SWS_Dcm_00914]⌈如果子函数OnDTCStatusChange的RoeEvent的状态为“ ROE启动”,则在调用Dcm_DemTriggerOnDTCStatus()且DTCStatusNew适合于相应的DTCStatusMask的情况下,OnDTCStatusChange将触发serviceToRespondTo。
    [SWS_Dcm_00915]⌈如果DTCStatusNew适合相应的DTCStatusMask,则如果事件触发了onDTCStatusChange,则Dcm将执行serviceToResponseTo 0x19 0x0E。


     ROE事件触发onChangeOfDataIdentifier(0x03)
    如果RoeEvent处于“ ROE启动”状态,并且已配置为
    onChangeOfDataIdentifier(请参见容器DcmDspRoeEvent),DSW在SWC或CDD报告DcmDspRoeDidRef引用的DID更改后立即触发ServiceToResponseTo(SWC或CCD通过调用Dcm_TriggerOnEvent报告DID更改)。根据SWS_Dcm_00909,Dcm仅支持
    预配置的ROE请求。因此,在onChangeOfDataIdentifier配置中,具有onChangeOfDataIdentifier的ROE设置请求中的Did必须链接为DcmDspRoeDidRef。
    [SWS_Dcm_00918]⌈如果请​​求ResponseOnEvent为
    onChangeOfDataIdentifier和所请求的Did未被称为
    对于任何DcmDspRoeEvent的DcmDspRoeDidRef,Dcm均应使用NRC 0x31 RequestOutOfRange。否定响应拒绝请求。
    注意:Dcm不会直接通知SW-C有关激活
    ResponseOnEvent。 SW-C必须监视相应的ModeDeclarationGroup DcmResponseOnEvent_ <RoeEventID>的更改并开始报告
    如果模式为“ ROE已启动”,则数据标识符将更改为Dcm

    [SWS_Dcm_00920]⌈如果调用Dcm_TriggerOnEvent()并且传递的RoeEvent处于活动状态,则Dcm将为此RoeEvent触发一个事件。
    [SWS_Dcm_00921]⌈如果为onChangeOfDataIdentifier触发了事件,则Dcm必须使用为此引用的Did执行serviceToResponseTo 0x22。RoeEvent(DcmDspRoeDidRef)


    触发ServiceToRespondTo
    [SWS_Dcm_00922]如果由RoeEvent触发了ServiceToRespondTo,则Dcm应将ServiceToRespondTo作为正常的诊断服务执行。
    [SWS_Dcm_00558]如果在Dcm已经在其他诊断协议上执行请求时触发了ServiceToRespondTo,则Dcm应将ServiceToRespondTo推迟到服务执行完成为止。
    [SWS_Dcm_00923] DDcm仅处理最后一个ServiceToRespondTo。如果已经由于另一个服务执行而将ServiceToRespondTo推迟,则新的响应将覆盖先前的触发器。
    [SWS_Dcm_00924]如果在接收到有关其他诊断协议的请求的同时执行ServiceToRespondTo,则ServiceToRespondTo将被取消。
    [SWS_Dcm_00925]如果在RoeEvent更改为“ ROE已清除”状态或“ ROE已停止”状态时ServiceToRespondTo处于挂起状态,则将删除挂起的RoeEvent。
    [SWS_Dcm_00127]如果通过子服务StartResponseOnEvent接收到UDS服务ResponseOnEvent(0x86),则DSP子模块将为所有RoeEvent存储接收到的RxPduId的各自已配置的sourceAddress,该事件将被启动,直到eventWindowTime超时为止。 
    [SWS_Dcm_00128] DSPDSP子模块必须将此存储的sourceAddress作为参数转发给slInternal_ResponseOnOneEvent()函数中的参数,该函数用于触发serviceToRespondTo

    注意:如果将serviceToResponseTo发送到相同或不同的TxPduId,则Dcm会存储接收ROE请求的协议的sourceAddress。 sourceAddress链接始终始终是正确的TxPduId,因为ServiceToRespondTo只有一个TxPduId链接到一个协议(请参见ConfigurationParameter DcmDslROEConnectionRef)。如果RoeEvents在重启后处于活动状态,则sourceAddress需要在重启后进行存储。


    发送ServiceToRespondTo
    Dcm支持在相同的TxPduId上从ServiceToResponseTo进行传输,就像发送ROE响应(TYPE 1)或在不同的TxPduId(TYPE2)。

    [SWS_Dcm_00131]⌈配置的协议缓冲区应用于ROE消息的传输(由于接收应使用单独的协议,因此需要使用单独的缓冲区进行接收)。
    [SWS_Dcm_00926]⌈如果在协议上收到ROE请求DcmDslMainConnection,Dcm应在称为DcmDslROEConnectionRef的协议上发送ServiceToRespondTo。 
    注意:如果EventWindowTime的激活时间超过了此电源循环的时间,则Dcm必须在事件开始的地方存储协议。[SWS_Dcm_00927]⌈如果为TYPE1配置了所引用的ResponseOnEvent协议(DcmDslROEConnectionRef),则Dcm必须发送ServiceToRespondTo发送到ROE响应的TxPduID相同。 
    [SWS_Dcm_00928]⌈如果引用的协议用于ResponseOnEvent(DcmDslROEConnectionRef)已配置为TYPE2,Dcm应将ServiceToRespondTo发送到已配置的TxPduID(请参阅配置参数DcmDslRoeTxPduRef)。
    [SWS_Dcm_00132] p必须将pMsgContext指针(ROE消息)的内容复制到缓冲区中。
    [SWS_Dcm_00133]⌈ROE通信只能在完全通信模式下执行。 Dcm应检查DcmDslMainConnection中的DcmDslProtocolComMChannelRef的通信模式。

    [SWS_Dcm_00134]⌈ROE事件应在除完全通信模式之外的任何其他通信模式中禁用。
    [SWS_Dcm_00135] in在不同于完全通信模式的通信模式下发生的ROE事件应被丢弃,并且不排队等待以后的传输。 
    [SWS_Dcm_00136] the应用程序请求的ROE事件不应激活完全通信模式。
    [constr_6025]引用DcmDslResponseOnEvent连接⌈只有一个DcmDslROEConnectionRef可以引用DcmDslResponseOnEvent连接。

    ROE传输周期
    [SWS_Dcm_00601]⌈DCM模块应遵守两(2)次连续Roe传输之间的最短时间(请参见配置参数DcmDspRoeInterMessageTime)

    在多个客户端环境中的ResponseOnEvent
    [SWS_Dcm_00929]⌈如果至少一个RoeEvent处于“ ROE启动”状态,则Dcm应始终使用子功能clearResponseOnEvent处理ROE请求,而与接收请求的DcmDslProtocol无关。
    [SWS_Dcm_00930]⌈如果至少一个RoeEvent处于“ ROE启动”状态,则Dcm应始终使用子功能stopResponseOnEvent处理ROE请求,而与接收请求的DcmDslProtocol无关。
    [SWS_Dcm_00940]⌈如果至少一个RoeEvent处于“ ROE已启动”状态,则Dcm将拒绝在与使用NRC 0x22(条件未正确)启动RoeEvent的协议不同的DcmDslProtocol上收到的所有ROE请求,除了SWS_Dcm_00929和SWS_Dcm_00930。 
    [SWS_Dcm_01045]⌈仅TYPE2消息将支持并行执行诊断响应。

    支持分段响应(分页缓冲区)

    [SWS_Dcm_00028]如果启用(DcmPagedBufferEnabled = TRUE),则DCM模块应提供一种机制,以发送大于已配置和分配的诊断缓冲区的响应。⌋(BSW04017)
    [SWS_Dcm_01058]如果DcmPagedBufferEnabled == TRUE并且为请求生成的响应长于DcmDslProtocolMaximumResponseSize,则Dcm应以NRC 0x14(DCM_E_RESPONSETOOLONG)进行响应。
    [SWS_Dcm_01059]如果DcmPagedBufferEnabled == FALSE并且为请求生成的响应长于Dcm_MsgContextType结构元素resMaxDataLen,则Dcm应以NRC 0x14(DCM_E_RESPONSETOOLONG)进行响应。使用分页缓冲区处理时,ECU不会被迫提供与最大响应长度一样大的缓冲区。
    请注意:

    • 分页缓冲区处理仅用于发送-不支持接收。
    • 分页缓冲区处理不适用于该应用程序(仅DCM内部使用)。

    支持ResponsePending触发的响应
    应用在某些情况下,例如在例行执行的情况下,应用程序需要立即请求NRC 0x78(等待响应),该请求应立即发送,而不是在到达响应时间之前发送(P2ServerMax或P2 * ServerMax)。
    DCM模块调用操作并获得错误状态时DCM_E_FORCE_RCRRP,DSL子模块将使用NRC 0x78(响应待处理)触发否定响应的传输。此响应需要从单独的缓冲区发送,以避免覆盖正在进行的请求处理。
    管理安全级别
    [SWS_Dcm_00020]⌈DSL子模块应保存当前活动安全级别的级别。⌋(BSW04005)
    为了访问此级别,DSL子模块提供以下接口:
      -获取当前的活动安全级别:Dcm_GetSecurityLevel()
      -设置新的安全级别:DslInternal_SetSecurityLevel()
    [SWS_Dcm_00033]⌈在DCM初始化期间,安全级别被设置为值0x00(DCM_SEC_LEV_LOCKED)。(BSW101)通过SWS_Dcm_00033,ECU被锁定。

    [SWS_Dcm_00139]在以下情况之一下,DSL必须将安全级别重置为值0x00(即,启用了安全性):
    -如果执行从defaultSession以外的任何诊断会话到defaultSession以外的其他会话(包括当前活动的诊断会话)的转换,或
    -如果执行从defaultSession以外的任何诊断会话到defaultSession(DslInternal_SetSecurityLevel())的转换(由UDS服务DiagnosticSessionControl(0x10)或S3Server超时启动)。⌋()一次只能激活一个安全级别。

    管理会话状态
    [SWS_Dcm_00022] DSL子模块应保存当前活动会话的状态。⌋(BSW04006)
    为了访问此变量,DSL子模块提供以下接口:

    • 获取当前活动会话:Dcm_GetSesCtrlType()
    • 设置一个新会话:DslInternal_SetSesCtrlType()

    [SWS_Dcm_00034]在DCM初始化期间,会话状态设置为值0x01(“ DefaultSession”)。⌋(BSW101)
    [SWS_Dcm_01062]对Dcm_ResetToDefaultSession()的调用允许应用程序将当前会话重置为默认会话,并通过调用来调用ModeDeclarationGroupPrototype DcmDiagnosticSessionControl的模式开关。
    SchM_Switch_ <bsnp> _DcmDiagnosticSessionControl(RTE_MODE_DcmDiagnostic SessionControl_DEFAULT_SESSION).
    示例:超过速度限制时自动终止扩展诊断会话。

    跟踪活动的非默认会话
    [SWS_Dcm_00140]每当非默认会话处于活动状态并且达到会话超时(S3Server)而没有收到任何诊断请求时,DSL子模块均应重置为默认会话状态(“ DefaultSession”,0x01)并调用模式切换的ModeDeclarationGroupPrototype
    通过调用SchM_Switch_ <bsnp> _DcmDiagnosticSessionControl(RTE_MODE_DcmDiagnostic SessionControl_DEFAULT_SESSION)进行DcmDiagnosticSessionControl。
    注意:<bsnp>是BSW Scheduler名称前缀
    根据下表,处理S3Server超时计时器的启动/停止:

    [SWS_Dcm_00141]⌈

    子请求开始

    完成任何最终响应消息或错误指示(Dcm_TpTxConfirmation():确认完整的PDU或错误指示)

    子请求开始

    如果没有响应消息,则完成请求的操作(正面和负面)是必需的/允许的。

    子请求开始 指示在接收多帧请求消息期间发生错误。(Dcm_TpRxIndication():错误指示)
    子请求停止

    多帧请求消息的开始(Dcm_StartOfReception():指示PDU接收开始)

    子请求停止

    接收单帧请求消息。(Dcm_StartOfReception():指示PDU接收开始)

    “S3Server的启动”是指重置计时器并从头开始计数

    允许修改计时
    [SWS_Dcm_00027]⌈DCM模块应按照[18]处理以下协议定时参数:P2ServerMin,P2ServerMax,P2 * ServerMin,P2 * ServerMax,S3Server⌋(BSW04015)[SWS_Dcm_00143]⌈P2min / P2 * min和S3Server设置为以下定义的值:P2min = 0ms,P2 * min = 0ms,S3Server = 5s。(BSW04015)这些协议定时参数对会话层定时有影响(对传输层定时无影响)。在协议处于活动状态时,可以使用以下方法修改其中一些时序参数:

    • UDS服务DiagnosticSessionControl(0x10)
    • UDS服务AccessTimingParameter(0x83)

    DSL子模块提供以下功能来修改定时参数:

    • 提供有效的计时参数,
    • 设置新的计时参数。仅在发送响应后才允许激活新的计时值。

    处理不同的诊断协议
    有必要区分不同的诊断方案(例如OBD,增强型诊断...)。
    不同的服务表
    对于不同的协议,一组不同的允许的诊断服务有效(例如,用于增强诊断的UDS命令,用于OBD协议的OBD模式服务)。可以创建不同的服务表并将它们链接到诊断协议。

    [SWS_Dcm_00035]⌈每次协议初始化时,DSL子模块都会设置到相应服务表的链接(请参阅配置参数DcmDslProtocolSIDTable)(BSW101)
    DSD子模块使用此链接来进一步处理诊断请求。
    协议优先级
    通过配置参数DcmDslProtocolPriority,可以为每个协议赋予其自己的相对优先级。
    可能的用例:有些ECU与车辆内部诊断测试仪(通过增强诊断运行)和车辆外部OBD测试仪通信。
    OBD通信必须具有比增强诊断更高的优先级。
    [SWS_Dcm_00015] allowed允许具有更高优先级的协议优先于已运行的协议(BSW04021)
    由于不同的DcmRxPduId值(根据协议配置,请参阅配置参数),可以区分诊断协议
    协议配置中引用的DcmDslProtocolRxPduRef)。
    协议抢占
    [SWS_Dcm_00459]⌈如果正在运行的诊断请求被(其他协议的)更高优先级的请求抢占,则DSL子模块应调用所有已配置的Xxx_StopProtocol()函数(请参阅配置参数DcmDslCallbackDCMRequestService)。
    [SWS_Dcm_01144]⌈无法使用更高优先级协议的并发TesterPresent激活协议抢占(另请参见[SWS_Dcm_01146])。
    [SWS_Dcm_00079]⌈为了取消与较低优先级请求相关的较低层中的挂起传输,DCM模块应使用以下参数调用PduR_DcmCancelTransmit():
    PduId:要取消的Pdu的ID⌋()

    [SWS_Dcm_00460] P当PduR_DcmCancelTransmit()返回E_NOT_OK时,DCM模块应假定正在进行的传输无法取消,并且不得重试取消传输请求。当前协议应停止并开始新协议。

    [SWS_Dcm_01046]⌈如果正在运行的诊断请求被(其他协议的)更高优先级的请求所抢占,则DCM必须取消Dcm_OpStatus设置为DCM_CANCEL⌋()的所有外部挂起操作。
    [SWS_Dcm_01047]⌈如果对Dem的操作未决并且新请求也需要与Dem进行交互,则Dcm应接受新请求并使用新请求中的参数调用相应的Dem API。
    [SWS_Dcm_00575]⌈为了取消与较低优先级请求相关的较低层中的挂起接收,DCM模块应使用以下参数调用PduR_DcmCancelReceive():
    PduId:要取消的Pdu的ID⌋()[SWS_Dcm_00576] P当PduR_DcmCancelReceive()返回E_NOT_OK时,DCM模块应假定正在进行的接收无法被取消,并且不应重试取消接收者的请求。应停止当前协议,并启动新协议。

    [SWS_Dcm_00625] request如果此优先级较高的协议处于默认会话中且未处于活动状态,则低优先级或相同优先级的请求可以抢占该优先级较高的协议。
    请求处于执行阶段。在这种情况下,DSL子模块应调用所有已配置的Xxx_StopProtocol()函数(请参阅配置参数DcmDslCallbackDCMRequestService)。

    [SWS_Dcm_00728] shall具有相同优先级的协议应该可以处理。
    [SWS_Dcm_00727]⌈如果诊断请求已在运行,并且无法处理第二个请求(ClientB)(例如,由于优先级评估),则响应行为取决于配置选项参数DcmDslDiagRespOnSecondDeclinedRequest(请参见SWS_Dcm_00914_Conf)。如果此配置参数为TRUE,则响应为NRC 0x21(BusyRepeatRequest)将针对第二个请求发出(请参见[SWS_Dcm_00788和[SWS_Dcm_00789)。如果配置参数为FALSE,则不会发出任何响应,请参见[SWS_Dcm_00790]。

    [SWS_Dcm_00729]⌈如果多个具有不同PduID的客户端正在请求同一协议,则由于同一协议的所有连接都具有相同的优先级,因此不会处理第二个请求(具有不同的RxPduId)。如果配置参数DcmDslDiagRespOnSecondDeclinedRequest为TRUE,则将为第二个请求发出NRC 0x21(BusyRepeatRequest)的否定响应。如果配置参数为FALSE,则不会发出任何响应。
    [SWS_Dcm_01050]⌈如果诊断并行请求的优先级与活动请求相同/较低,则不得调用ComM API(ComM_DCM_ActiveDiagnostic,ComM_DCM_InactiveDiagnostic)。
    协议启动检测
    [SWS_Dcm_00036]⌈在诊断协议的第一个请求下,DSL子模块应调用所有已配置的Xxx_StartProtocol()函数(请参阅配置参数DcmDslCallbackDCMRequestService)。(BSW101)在此函数中,应用程序可以检查环境条件并进一步启用/禁用协议的处理。
    [SWS_Dcm_00144] all在所有Xxx_StartProtocol()函数都返回E_OK(意味着所有组件都已允许启动协议)之后,将从默认会话配置中加载默认计时参数(请参阅配置参数DcmDspSessionRow)。 ⌋(BSW04015)
    [SWS_Dcm_00145] all在所有Xxx_StartProtocol()函数都返回E_OK(意味着所有组件都允许启动协议)之后,将设置服务表(请参阅配置参数DcmDslProtocolSIDTable)。[SWS_Dcm_00146] all在所有Xxx_StartProtocol()之后函数已返回E_OK(表示所有组件均已允许启动协议),安全性状态被重置。

    [SWS_Dcm_00147]⌈所有Xxx_StartProtocol()函数都返回E_OK(意味着所有组件都已允许启动协议)之后,会话状态将重置为默认会话。 此外,DCM模块应调用ModeDeclarationGroupPrototype DcmDiagnosticSessionControl的模式开关
    通过调用SchM_Switch_ <bsnp> _DcmDiagnosticSessionControl(RTE_MODE_DcmDiagnostic SessionControl_DEFAULT_SESSION).
    注意:<bsnp>是BSW Scheduler名称前缀
    协议停止
    仅在协议抢占的情况下才会出现协议停止(请参见“协议抢占”)[SWS_Dcm_00624]⌈连接了Dcm_TpTxConfirmation()的接收
    对于DSL子模块给出的响应,DCM不应停止当前协议(不调用xxx_StopProtocol)。
    注意:协议(例如OBD)将一直处于活动状态,直到重置或其他协议被抢占为止。

    管理资源
    由于资源有限,以下几点应被视为有关
    设计:

    •   只能在DCM模块中使用和分配一个诊断缓冲区。 然后,该缓冲区用于处理诊断请求和响应。
    •   NRC 0x78(待处理的响应)响应的输出是单独进行的缓冲。
    •   分页缓冲区处理(请参阅SWS_Dcm_00028)

    通讯模式处理
    通信模式处理是Dcm和ComM之间的接口。 ComM通知Dcm有关通道的当前免疫状态。 Dcm正在调用有关活动诊断的ComM,这将阻止Ecu关机/睡眠。
    状态ActiveDiagnostic显示诊断请求是否应使ECU保持唤醒状态(ActiveDiagnostic ==“ DCM_COMM_ACTIVE”),或者诊断请求是否应阻止Ecu关机/睡眠(ActiveDiagnostic ==“ DCM_COMM_NOT_ACTIVE”)。
    应用程序可以根据系统状况更改状态ActiveDiagnostic。
    [constr_6027]⌈应用程序将通过调用来通知Dcm有关ActiveDiagnostic状态的Xxx_SetActiveDiagnostic()。
    [SWS_Dcm_01069]⌈Dcm_Init()之后,Dcm应将ActiveDiagnostic设置为“ DCM_COMM_ACTIVE”。
    [SWS_Dcm_01070]⌈如果使用“ false”调用Xxx_SetActiveDiagnostic(),则Dcm将ActiveDiagnostic设置为“ DCM_COMM_NOT_ACTIVE”。
    [SWS_Dcm_01071]⌈如果使用“ true”调用Xxx_SetActiveDiagnostic(),则Dcm将ActiveDiagnostic设置为“ DCM_COMM_ACTIVE”。

    无通讯no Communication
    ComM模块将通过调用Dcm_ComM_NoComModeEntered()向DCM模块指示“无通信模式”。作为响应,DCM将立即禁用所有传输(有关详细信息,请参见Dcm_ComM_NoComModeEntered()的定义)。

    静默沟通Silent Communication

    ComM模块将通过调用Dcm_ComM_SilentComModeEntered()向DCM模块指示静默通信模式。作为响应,DCM将立即禁用所有传输(有关详细信息,请参见Dcm_ComM_SilentComModeEntered()的定义)。

    全面沟通Full Communication 

    ComM模块将向DCM模块指示完全通信模式,通过调用Dcm_ComM_FullComModeEntered()。 作为响应,DCM将启用所有传输(有关详细信息,请参见cm_ComM_FullComModeEntered()的定义)

    默认会话Default Session

    [SWS_Dcm_00163]⌈如果ActiveDiagnostic为'DCM_COMM_ACTIVE'并且Dcm处于诊断协议的默认会话中,则DCM应通过每个请求调用ComM_DCM_ActiveDiagnostic(NetworkId),并将networkId与接收到的Pdu关联(请参阅DcmDslProtocolComMChannelRef),以通知关于需要保持在完全通信模式下的ComM模块。⌋()[SWS_Dcm_00164]⌈接收到Dcm_TpTxConfirmation()并连接到DSL子模块给出的响应后,DCM将调用ComM_DCM_InactiveDiagnostic(NetworkId),并将networkId与传输的Pdu(请参阅DcmDslProtocolComMChannelRef),以通知ComM
    不再需要完全通讯的模块.
    [SWS_Dcm_01142]⌈Dcm必须等待来自ComM的完全通信模式指示(调用Dcm_ComM_FullComModeEntered()),然后再启动诊断答案的传输。等待时间应不大于从收到请求的那一刻起计算的P2ServerMax。
    [SWS_Dcm_01143]⌈如果Dcm需要确认待传输的响应(DCM_E_FORCE_RCRRP),则Dcm应触发DET错误DCM_E_FORCE_RCRRP_IN_SILENT_COMM.⌋

    注意:在接收端,如果进行分段传输,则静默通信模式可能会导致请求丢失。
    [SWS_Dcm_00165]⌈DCM不应调用NRC 0x78的ComM_DCM_InactiveDiagnostic(NetworkId)(响应待审核)。 DCM仅应调用ComM_DCM_InactiveDiagnostic(NetworkId),最后一个响应(肯定或否定)已连接到请求。 

    [SWS_Dcm_00697]⌈如果在功能寻址的情况下抑制了否定响应(请参见SWS_Dcm_00001),则DCM应调用
    ComM_DCM_InactiveDiagnostic(NetworkId).

    会话过渡Session Transitions 

    [SWS_Dcm_00167]⌈如果ActiveDiagnostic为“ DCM_COMM_ACTIVE”,并且实际诊断会话更改为与默认会话不同的会话(由UDS服务DiagnosticSessionControl发起),则Dcm应调用
    ComM_DCM_ActiveDiagnostic(NetworkId),以及与接收到的Pdu关联的NetworkId,以通知ComM模块需要保持在完全通信模式下的信息。
    注意:ComM_DCM_InactiveDiagnostic(NetworkId)的调用是
    [SWS_Dcm_00168]⌈如果实际诊断会话已从会话更改,则独立于ActiveDiagnostic。
    与默认会话(由UDS服务DiagnosticSessionControl或S3Server超时或协议抢占发起)不同,则DCM应使用以下命令调用ComM_DCM_InactiveDiagnostic(NetworkId):
    与接收到的Pdu关联的networkId,以通知ComM模块不再需要完全通信.

    非默认会话Non Default Session:

    [SWS_Dcm_00169]⌈只要服务器处于默认会话以外的会话中,则当从客户端接收到请求时,DCM不应使用与接收到的Pdu相关的networkId来调用ComM_DCM_ActiveDiagnostic(NetworkId)。

    [SWS_Dcm_00170] as只要服务器处于默认会话以外的会话中,则DCM均不得在接收时将调​​用与接收到的Pdu相关联的networkId的ComM_DCM_InactiveDiagnostic(NetworkId)。 Dcm_TpTxConfirmation()连接到DSL子模块给定的响应。

  • 相关阅读:
    跨数据库操作
    Windows 服务
    Linq To DataTable
    嵌入式软件应用程序开发框架浅见
    31.获取当前系统时间
    30 System类
    29. StringBuilder
    28. string类中方法练习
    27 string类中常用的方法列表
    26.String类(1)
  • 原文地址:https://www.cnblogs.com/still-smile/p/12145360.html
Copyright © 2020-2023  润新知