7.9 DID configuration

DID configuration

Dcm 的配置包含支持的 DID 列表,可以通过两种方式进行配置: 单独的 DID 配置,每个配置的 DID 的数据元素需要一个连接(通过端口或 c 功能)才能访问数据(读取、写入和控制)。在这种情况下,每个 DID 都应该使用接口 DataServices。 DID 范围配置,用于处理在一个 SW-C 中统一共享相同行为的一组 DID,只有一个端口连接。在这种情况下应使用接口 DataServices_DIDRange_{Range}。使用此配置允许接口优化。为了使用 DIDRange 优化,应配置以下参数:DcmDspDidRangeIdentifierLowerLimit 和 DcmDspDidRangeIdentifierUpperLimit,它们分隔了 DID 的范围。 DcmDspDidRangeMaxDataLength 和 DcmDspDidRangeHasGaps。 [SWS_Dcm_01174] 如果配置了 DcmVinRef,则 Dcm 应在启动期间通过调用 Dcm_GetVin 获取一次 VIN。

Individual DID -个人DID

个人DID 可以在ECUC_Dcm_00601:DcmDspDid 中配置。 在 ECUC_Dcm_00602 中的 2 个字节上配置了唯一的 DID 标识符:DcmDspDidIdentifier。 如果 DID 引用其他 DID,则可以在 ECUC_Dcm_00606 中配置它们之间的链接:DcmDspDidRef4。 每个 DID 都允许访问信号数据值(通过读取和/或写入)。 可以在ECUC_Dcm_00813:DcmDspDidSignal 中配置信号参考(对DcmDspData)和诊断应答(用于读取)或请求(用于写入)中的数据位置。属于 DID 的数据的配置可以在容器 DcmDspData (ECUC_Dcm_00869) 中提供。 此容器收集以下信息:

  • 属于 DID 的数据的数据字节序 (ECUC_Dcm_00986: DcmDspDataEndianness)

  • 数据的长度和类型(ECUC_Dcm_00605:DcmDspDataByte-Size,ECUC_Dcm_00985:DcmDspDataType)

  • 用于访问数据的接口(ECUC_Dcm_00713:DcmDsp-DataUsePort)

  • 访问数据的 NRAM blockId (ECUC_Dcm_00809 DcmDspDataBlockIdRef)

  • 应用程序的接口,以便:

    • 检查是否可以在当前条件下访问 DID。如果满足读取数据的条件,这可以通过检查每个 DataElement 来实现(ECUC_Dcm_00677:DcmDspDataConditionCheckReadFnc 和 ECUC_Dcm_00955:DcmDspDataConditionCheckReadFncUsed)
    • 请求冻结 IOControl 的当前状态(ECUC_Dcm_00674:DcmDspDataFreezeCurrentStateFnc)
    • 获取 DID 的缩放信息.这可以通过获取每个 DataElement 的缩放信息来实现 (ECUC_Dcm_00676: DcmDsp-DataGetScalingInfoFnc)
    • 请求 DataElement 的数据长度 (ECUC_Dcm_00671: DcmDsp-DataReadDataLengthFnc)
    • 读取某个 ECU 信号 (ECUC_Dcm_00824: DcmDspDataReadEcuSignal)。
    • 读取或写入数据的访问权限(ECUC_Dcm_00669:DcmDsp-DataReadFnc、ECUC_Dcm_00670:DcmDspDataWriteFnc)
    • 请求将 IOControl 重置为默认值(ECUC_Dcm_00673:DcmDspDataResetToDefaultFnc)
    • 请求将控制权返回给 IOControl 的 ECU(ECUC_Dcm_00672:DcmDspDataReturnControlTonc)
    • 请求调整 IO 信号 (ECUC_Dcm_00675 : DcmDspDataShort- TermAdjustmentFnc)

    也可以通过 ECUC_Dcm_00993:DcmDspDiagnosisScaling 配置替代诊断表示。 以下示例显示如何为单个 DID 0xF080 配置容器 DcmDspDid 和 DcmDspData。 此配置允许通过同步 API WriteDID_F080(用于写入)和 ReadDID_F080(用于阅读)。

    • DcmDspDidIdentifier=0xF080
    • DcmDspDidByteOffset=0
    • DcmDspDidDataRef=DcmDspData_F080
    • DcmDspDataByteSize=8
    • DcmDspDataType=UINT8_N
    • DcmDspDataUsePort=USE_DATA_SYNCH_FNC
    • DcmDspDataWriteFnc=WriteDID_F080
    • DcmDspDataReadFnc=ReadDID_F080
  • [SWS_Dcm_CONSTR_6067] DcmDspDataBlockIdRef DcmDspDataBlockIdRef 的依赖性仅当 DcmDspDataUsePort 设置为
    USE_BLOCK_ID。

DID 范围

DID 范围通常与“普通DID 读取和写入函数相同,只是 DID 也作为参数传递。这允许在读取或写入功能中处理开关/案例中的 DID 范围。

这些范围可应用于读取 (ReadDataByIdentifier 0x22) 和写入 (WriteDataByIdentifier 0x2E) DID。范围可以在 ECUC_Dcm_00937 中配置:DcmDspDidRange。默认情况下,服务 0x22 和 0x2E 可以访问每个配置的范围。如果范围应限制为读取或写入,则应相应定义引用的 DcmDspDidInfo 容器。也可以在范围内定义间隙 (DcmDspDidRangeHasGaps)。

通过激活此功能,每次在配置的范围内请求 DID 时,Dcm 都会调用 IsDidAvailable 操作来检查当前的可用性。并且由于指定范围的 DID 可以有不同的长度,因此必须配置最长 DID 的长度DcmDspDidRangeMaxDataLength),以便保留足够的缓冲区传递给相应的函数。通常,如果您特别想将 DID 作为参数传递,范围功能也可用于单个 DID。那么lower DID和upper DID应该是一样的。

ReadDidRangeDataLength 操作允许请求应用程序返回一个 DID Range 的数据长度。

  • [SWS_Dcm_CONSTR_6020] 允许的 DID 访问定义
    任何定义的范围只能通过 DcmDspDidRangeInfoRef 引用。子容器 DcmDsp-DidControl 和 DcmDspDidDefineinDcmDspDidInfo 不得使用]。
  • [SWS_Dcm_CONSTR_6021] DID 范围无法映射到 DDDID,因为服务 0x2C DDDID 不支持范围功能
    实际上,DcmDspDidRangeIdentifierLowerLimit 和 DcmDspDidRangeIdentifierUpperLimit 不应包括 0xF200 到 0xF3FF 范围内的 DID。
  • 任何定义的范围只能通过 DcmDspDidRangeInfoRef 引用 DcmDspDidInfo,设置 DcmDspDidDynamicallyDefined == False。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值